Рефераты. Динамическое формирование и преобразование списков и структур

mg *p2=start2;

clrscr();

while(p2!=NULL) {

clrscr();

printf("\nMAGAZINE #%d", p2->num);

printf("\n Address");

printf("\n City: %s", p2->adr.city);

printf("\n Street: %s", p2->adr.str);

printf("\n House: %d", p2->adr.dom);

printf("\nProducts");

for(n=0;n<5;n++) {

printf("\n %d)", n+1);

rintf("\n Name: %s", p2->pro[n].name);

printf("\n Price: %d", p2->pro[n].price);

printf("\n Time: %s", p2->pro[n].time);

printf("\n");

}

printf("\n\nAny key to continue...");

getch();

p2=p2->next;

}

return start2;

}

//////////////////////////SAVE NEW LIST//////////////////////////////////

void save (mg *start, mg *start2) {

mg *p, *p2;

FILE *f;

int n;

char filename[50];

clrscr();

printf("Enter path to file to write (ex. C:\\file.txt):\n");

scanf("%s",filename);

if((f=fopen(filename, "w"))==NULL) {

clrscr();

printf("Invalid filename or file is corrupt! Press any key...");

getch();

goto end;

}

p=start;

while(p->next!=NULL) {

clrscr();

fprintf(f, "%d\n", p->num);

fprintf(f, "%s\n", p->adr.city);

fprintf(f, "%s\n", p->adr.str);

fprintf(f, "%d\n", p->adr.dom);

for(n=0;n<5;n++) {

fprintf(f, "%s\n", p->pro[n].name);

printf(f, "%d\n", p->pro[n].price);

fprintf(f, "%s\n", p->pro[n].time);

}

p=p->next;

}

fprintf(f, "---------------\n");

p2=start2;

while(p2!=NULL) {

clrscr();

fprintf(f, "%d\n", p2->num);

fprintf(f, "%s\n", p2->adr.city);

fprintf(f, "%s\n", p2->adr.str);

fprintf(f, "%d\n", p2->adr.dom);

for(n=0;n<5;n++) {

fprintf(f, "%s\n", p2->pro[n].name);

fprintf(f, "%d\n", p2->pro[n].price);

fprintf(f, "%s\n", p2->pro[n].time);

}

p2=p2->next;

}

fclose(f);

printf("File created succesfully! Press any key...");

getch();

end:

}

////////////////////////////CREATING NEW LIST//////////////////////////////

mg *newlist (mg *start) {

mg *p, *p2, *start2, *last2;

FILE *f;

char prod[20];

int np, k=0, sump=0, n, count=0;

p2=last2=start2=NULL;

clrscr();

printf("Enter product's name: ");

scanf("%s", prod);

p=start;

while(p->next!=NULL) {

count++;

for(n=0;n<5;n++) {

if (strcmp(p->pro[n].name, prod)==0) {

np=n;

sump=p->pro[n].price+sump;

}

else { k++; }

}

if (k==5*count) {

printf("There is no such product. Press any key...");

getch();

goto end;

}

p=p->next;

}

p=start;

while(p->next!=NULL) {

if(p->pro[np].price > (sump/count))

if ((p->pro[np].price - (sump/count)) > ((sump/count)/10)) {

p2=(mg*)malloc(sizeof(mg));

p2->num=p->num;

strcpy(p2->adr.city,p->adr.city);

strcpy(p2->adr.str, p->adr.str);

p2->adr.dom=p->adr.dom;

for(n=0;n<5;n++) {

strcpy(p2->pro[n].name, p->pro[n].name);

p2->pro[n].price=p->pro[n].price;

strcpy(p2->pro[n].time,p->pro[n].time);

}

p2->prev=last2;

p2->next=NULL;

if(last2!=NULL)

last2->next=p2;

last2=p2;

if(start2==NULL) start2=last2;

p2=p2->next;

}

p=p->next;

}

printf("New list created succesfully! Press any key...");

getch();

end:

return start2;

}

/////////////////////////MAIN FUNCTION////////////////////////////////

void main() {

mg *start, *start2, *last;

int i,n, newn,t=0;

char ans;

clrscr();

for (i=1;i<2;) {

clrscr();

printf("====================MENU=====================\n");

printf("1. Open file\n");

printf("2. Print list of markets\n");

printf("3. Create a new list\n");

printf("4. Print new list of markets\n");

printf("5. Save new list\n");

printf("6. Exit\n\n");

printf("Press 1-6 key. Any other key will exit program");

gotoxy(1, 20);

printf("===============COURSE PROJECT=================\nStudent: Saushkin Pavel Nikolaevich. Group: CBC-31. MIEM 2008");

ans=getch();

switch(ans) {

case '1': {

start=open(last);

if(start!=NULL) t=1;

else if(start->num > 1000 || start->num < 1) {

clrscr();

printf("(!) Error of reading file! Incapable data type! Press any key...");

getch();

break;

}

break;

}

case '2': {

if(t==0) goto err1;

print(start);

break;

}

case '3': {

if(t==0) goto err1;

start2=newlist(start);

t=2;

break;

}

case '4': {

if(t==0) goto err1; else if (t==1) goto err2;

printnew(start2);

break; }

case '5': {

if(t==0) {

err1:

clrscr();

printf("You must open a file! Press any key...");

getch();

break;

} else if (t==1) {

err2:

clrscr();

printf("You must create a new list! Press any key...");

getch();

break;

}

save(start, start2);

break;

}

default: { i=3; }

}

}

8. Тестовые примеры

Содержимое исходного файла (in.dat):

/* Начало файла */

25

Moscow

Lenina

14

butter

17

12.05.08

meat

19

22.07.09

milk

25

17.03.08

eggs

47

07.08.08

juice

12

24.11.08

756

Minsk

Zhukova

52

butter

19

07.04.08

meat

21

29.02.09

milk

23

01.11.09

eggs

33

09.10.08

juice

14

27.08.08

666

Kiev

Gagarina

47

butter

22

12.05.08

meat

29

26.02.09

milk

22

26.07.08

eggs

56

31.10.08

juice

16

02.05.08

748

Petersburg

Pavlovskaya

62

butter

30

19.08.08

meat

27

27.08.09

milk

17

10.03.08

eggs

31

09.08.08

juice

19

30.11.08

33

Volgograd

Potemkina

57

butter

34

10.07.08

meat

29

27.08.09

milk

19

27.03.08

eggs

38

13.02.08

juice

14

16.05.08

/* Конец файла

Работа программы (Пример №1):

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.