Написание программы с использованием структурного шаблона с именем ZNAK
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
°турыflagcharлокальнаяпеременная, отвечающая за продолжение записейcomparercharлокальнаяпеременная, в которую записываются данные структуры ZNAK
Листинг
#include
#include
#include ZNAK
{NAME[30],ZODIAK[20];BDAY[3];
};inp
{ZNAK *BOOK;number;
};menu();inp input(int number, struct ZNAK *BOOK);showRecords(struct ZNAK *BOOK, int number);showAll(struct ZNAK *BOOK, int number);createFile(struct ZNAK *BOOK, int number){i,j,k;c;ZNAK Z;*output;((output=fopen("book.dat","w"))==NULL)
{("Не удалось создать файл.\n");
return;
}(i = 0; i < number; i++)
{(j = 0; j < number-1; j++)
{(k=2; k>=0; k--)
{((BOOK+j)->BDAY[k]==(BOOK+j+1)->BDAY[k]);((BOOK+j)->BDAY[k]>(BOOK+j+1)->BDAY[k])
{=*(BOOK+j);
*(BOOK+j)=*(BOOK+j+1);
*(BOOK+j+1)=Z;
};
}
}
}(output, "‚все записи:\n\n");(output, " \n");(output, " ИМЯ ЗОДИАК ДАТА РОЖДЕНИЯ \n");(output, " n");(i=0; i<number; i++)
{(output, " є s і s і ",(BOOK+i)->NAME,(BOOK+i)->ZODIAK);(j=0;jBDAY[2]);(output, " є\n");(i==number-1)(output, " \n");(output, " \n");
}("\n\nФайл успешно сохранен! ");
}()
{c,selection,number=0;inp rez;ZNAK *BOOK=0;(1)
{=menu();(selection)
{1:=input(number,BOOK);=rez.number;=rez.BOOK;;2:(BOOK,number);;3:(BOOK,number);
break;4:("Вы действительно хотите выйти 1-да, 2-нет (1/2)? ");c=getch();((c!='1') && (c!='2'));(c=='1')
{
_setvideomode(_DEFAULTMODE);(BOOK);(0);
}
}
}
}menu()
{c,textselected=5,textnotselected=9,buttonselected=16,buttonnotselected=14;i,selection=1,x[2]={100,612},y[4]={40,140,240,340},h=65;
_setvideomode(_VRES16COLOR);
_setbkcolor(_WHITE);
_clearscreen(_GCLEARSCREEN);(c!=13)
{(c==72)(selection==1)=4;selection--;(c==80)(selection==4)=1;selection++;
_setcolor(buttonnotselected);(i=0;i<4;i++)
{(i+1==selection)
_setcolor(buttonselected);
_rectangle(_GFILLINTERIOR,x[0],y[i],x[1],y[i]+h);
_rectangle(_GBORDER,x[0]-9,y[i]-9,x[1]+9,y[i]+h+9);(i+1==selection)
_setcolor(buttonnotselected);
}
_settextcolor(textnotselected);
_settextposition(5,32);(selection==1)
_settextcolor(textselected);
_outtext(" Создать новые записи ");(selection==1)
_settextcolor(textnotselected);
_settextposition(11,33);(selection==2)
_settextcolor(textselected);
_outtext(" Вывести по фамилии ");(selection==2)
_settextcolor(textnotselected);
_settextposition(18,35);(selection==3)
_settextcolor(textselected);
_outtext(" Вывести все ");(selection==3)
_settextcolor(textnotselected);
_settextposition(24,39);(selection==4)
_settextcolor(textselected);
_outtext(" Выход ");(selection==4)
_settextcolor(textnotselected);=getch();
}
_setvideomode(_TEXTC80);
_settextcolor(14);
_clearscreen(_GCLEARSCREEN);selection;
}inp input(int number, struct ZNAK *BOOK)
{inp rez;i,j,errorflag,errorflag2,breaker;c,flag=1,comparer[128];=0;
if(number)
{(" Записи уже существуют.Если вы хотите...\n");(" ...удалить старые записи и создать новые '1'\n");(" ...добавить записи к существующим '2'\n");(" ...завершить операцию и вернуться в меню '3'\n");=getch();((c!='1') && (c!='2') && (c!='3'));(c=='1')
{(i=0; i<number; i++)(BOOK+i);=0;("Старые данные удалены!");
}(c=='2')=1;
}(i=number; flag; i++)
{(breaker==1);
++number;=0;=(struct ZNAK*)realloc(BOOK,(i+1)*sizeof(struct ZNAK));("\nЗапись #%d: \n",i+1);
do
{=1;("\n Пожалуйста, введите имя (1-30 символов): ");
gets(comparer);(((strlen(comparer))<29) && ((atoi(comparer))==0))
errorflag2=0;(" \n Имя не может содержать больше 30 символов!. Пожалуйста, попробуйте снова.\n");
}
while(errorflag2==1);
strcpy(((BOOK+i)->NAME), comparer);
printf("\n Введите дату рождения:\n ");
{(errorflag)
{("\n \n Некорректное сочетание дня и месяца \n");("\n (Например: 35.03( в марте 31 день ))\n");("\n Пожалуйста, попробуйте снова !\n");
}++;
{=1;(" Пожалуйста, введите день (DD):");
gets(comparer);
(BOOK+i)->BDAY[0]=atoi(comparer);(((BOOK+i)->BDAY[0]0))
errorflag2=0;(" \n День должен принадлежать [1;31] интервалу. Пожалуйста, попробуйте снова.\n\n");
}(errorflag2==1);(" данные приняты!\n\n");
{=1;(" Пожалуйста,введите месяц (MM):");(comparer);
(BOOK+i)->BDAY[1]=atoi(comparer);(((BOOK+i)->BDAY[1]0))
errorflag2=0;(" \n Месяц должен принадлежать интервалу [1;12]. Пожалуйста, попробуйте снова .\n\n");
}(errorflag2==1);(" Данные приняты!\n\n");
{=1;(" ПОжалуйста, введите год (YYYY): ");(comparer);
(BOOK+i)->BDAY[2]=atoi(comparer);(((BOOK+i)->BDAY[2]999))
errorflag2=0;(" \n Год должен принадлежать интервалу [999;2011]\n\n ");
}(errorflag2==1);(" Данные приняты!\n\n");
}(((((BOOK+i)->BDAY[0])==31) && (((BOOK+i)->BDAY[1]==4) ||
((BOOK+i)->BDAY[1]==6) || ((BOOK+i)->BDAY[1]==9) || ((BOOK+i)->BDAY[1]==11) ||
((BOOK+i)->BDAY[1]==2))) || (((BOOK+i)->BDAY[1]==2) &&
(((BOOK+i)->BDAY[0]==29) || ((BOOK+i)->BDAY[0]==30))));((BOOK+i)->BDAY[0]>20 && (BOOK+i)->BDAY[1]==3 || (BOOK+i)->BDAY[0]ZODIAK);
fflush(stdin);("\nХотите ли вы продолжить ввод данных 1-да, 2-нет(1/2)? ");c=getch(); while (c!='1' && c!='2');(c=='1') flag=1;
{=0;(number)
{(BOOK, number);
printf("Нажмите любую клавишу для возврата в меню.\n");
getch();
}
}
}.BOOK=BOOK;.number=i;rez;
}showRecords(struct ZNAK *BOOK, int number)
{c, zod[20];i,j, flag;
if(number==0)
{("Ни одной записи не найдено. Введите записи.\n \