#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Product {
char number[20];
char name[20];
double price;
char date[20];
char expDate[20];
struct Product *next;
};
struct Product *first = NULL;
struct Product *getLast(struct Product *list)
{
struct Product *curr = list; /*ako listata e prazna (NULL), vru6tame NULL za6toto nqma pruv
ina4e tursime posledniq element bez sledva6t element i go vru6tame*/
if (list == NULL)
return NULL;
while (curr->next != NULL)
curr = curr->next;
return curr;
}
struct Product *readFromFile(char *filename)
{
struct Product *first, *last;
struct Product *temp;
first = NULL;
FILE *fp;
if((fp=fopen(filename, "rb"))==NULL)
{
printf("\n Cannot open file.");
exit(1);
}
temp = (struct Product *)malloc(sizeof(struct Product));
temp->next=NULL;
if(temp == NULL)
{
printf("Nemoje da se zadeli pamet.");
exit(1);
}
fread(temp, sizeof(struct Product), 1, fp);
if(temp == NULL)
{
first = temp;
last = temp;
}
else
{
last->next=temp;
last=last->next;
}
return first;
}
void showMenu(void)
{
printf("=====MENU=====\n");
printf("1. Dobavqne na nov artikul.\n");
printf("2. Promqna na cenata na daden artikul.\n");
printf("3. Izvejdane na informaciq na vsichki producti sys iztekyl srok na godnost.\n");
printf("4. Izvedi informaciq na artikul po id nomer.\n");
printf("5. Izhod.\n");
}
void addNewProduct(struct Product** productList)
{
struct Product *product;
product=(struct Product *)malloc(sizeof(struct Product));
if(product == NULL)
{
printf("Nemoje da byde zadelena pamet\n");
exit(0);
}
product->next=product;
printf("Vyvedi nomer na artikula : ");
scanf("%s", product->number);
printf("Vyvedi ime na artikula : ");
scanf("%s", product->name);
printf("Vyvedi cena na artikula : ");
scanf("%lf", &product->price);
printf("Vyvedi data na proizvodstvo : ");
scanf("%s", product->date);
printf("Vyvedi data, do koqto e goden produktyt : ");
scanf("%s", product->expDate);
//productList e pyrviqt element na lista
if((*productList) == NULL)
{
(*productList) = product;
}
else //dobavqne na noviq element kym kraq na spisyka
{
getLast(*productList)->next = product;
}
FILE *fp;
if((fp=fopen("market", "ab"))==NULL)
{
printf("Cannot open file.\n");
exit(1);
}
fwrite(&product, sizeof(struct Product), 1 ,fp);
printf("Noviqt produkt e zapisyn vyv failyt");
fclose(fp);
}
void addToFile(struct Product *productList)
{
struct Product *current;
FILE *fp;
if((fp=fopen("market", "ab"))==NULL)
{
printf("Cannot open file.\n");
exit(1);
}
current=productList;
fwrite(current, sizeof(struct Product), 1, fp);
current=current->next;
fclose(fp);
}
void searchProduct(struct Product **productList)
{ char number[20];
struct Product *product;
printf("Vyvedi id nomer na tyrseniq product : ");
scanf("%s", number);
while (product != NULL)
{
if(!strcmp(number, product->number))
{
printf("\n Id nomer : %s Ime : %s Cena : %lf Data na proizvodsto : %s Srok na godnost : %s",
product->number, product->name, product->price, product->date, product->expDate);
product=product->next;
}
}
if(product == NULL)
printf("Productyt ne e nameren.");
}
void changePrice(struct Product **productList)
{
struct Product *product;
char name[20];
printf("Vyvedi ime na artikula : ");
scanf("%s", name);
product=*productList;
while(product != NULL)
{
if(!strcmp(name, product->name))
break;
product=product->next;
}
if(product == NULL)
{
printf("\n Produktyt ne e nameren.");
return;
}
printf("Vyvedi novata cena na producta : ");
scanf("%lf", &product->price);
printf("Cenata na produkta veche e smenena. ");
printf("Eto i informaciq za promqnata.\n");
printf("\n Id nomer : %s, Ime: %s Cena %lf Data na proizvodstvo : %s Srok na godnost : %s" ,
product->number, product->name, product->price, product->date, product->expDate);
}
void expiredDate(struct Product *product)
{
char expDate[20];
printf("Vyvedi data na godnost : ");
scanf("%s", expDate);
if (product != NULL)
{
if(!strcmp(expDate, product->expDate))
{
printf("Productyt %s sys srok na godnost %s e iztekyl!", product->name, product->expDate);
product = product->next;
}
}
if (product == NULL)
{
printf("Nqma produkt sys tozi srok na godnost.");
}
}
int main()
{
int choice;
first = readFromFile("market");
while(1)
{
system("cls");
showMenu();
printf("Vyvedi izbora si : ");
scanf("%d", &choice);
switch(choice)
{
case 1 : addNewProduct(&first);break;
case 2 : changePrice(&first); break;
case 3 : expiredDate(first);break;
case 4 : searchProduct(&first);break;
case 5 : exit(1);break;
default : printf("Greshen izbor");
}
system("pause");
}
return 0;
}