Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Нейбауэр А. Моя первая программа на С.doc
Скачиваний:
182
Добавлен:
02.05.2014
Размер:
3.75 Mб
Скачать

Приложение II Прикладная программа

Листинг к главе 13. Программа составления каталога компакт-дисков.

/*CDAPP.C*/

#include "stdio.h"

#define FILENAME "CDfile"

#define TEMPFILE "Temp"

#define MAX 20

FILE *fp, *tp, *printer;

struct CD

{

char name[20];

char description[40];

char category[12];

float cost;

int number;

} disc;

int slots[MAX];

int count;

main()

{

char select;

getslots();

do

{

puts("Моя коллекция компакт-дисков\n");

puts("1 Добавить карточку\n");

puts("2 Удалить карточку\n");

puts("3 Редактировать содержимое карточки\n");

puts("4 Изменить номер ячейки\n");

puts("5 Сортировка карточек\n");

puts("6 Найти карточку\n");

puts("7 Вывести на печать\n");

puts("8 Выйти из программы\n");

printf("Пожалйста, введите Ваш выбор: ");

select = getchar();

putchar('\n');

switch(select)

{

case '1' :

addcd();

break;

case '2':

delcd();

break;

case '3':

chcd();

break;

case '4':

chloc();

break;

case '5':

sort();

break;

case '6':

locate();

break;

case '7':

plist();

break;

case '8':

break;

default:

puts("Ошибка, повторите ввод\n\n");

}

}

while(select!='8');

return(0);

}

addcd()

{

int pause;

if(count>>=MAX)

{

puts("К сожалению свободных ячеек нет\n");

pause=getchar();

return;

}

if((fp = fopen(FILENAME,"a")) == NULL)

{

printf("Невозможно открыть файл %s\n",FILENAME);

exit();

}

puts("\n");

printf("Введите название диска: ");

gets(disc.name);

printf("Введите описание:");

gets(disc.description);

printf("введите категорию:");

gets(disc.category);

printf("Введите цену:");

scanf("%f", &disc.cost);

getslot();

fwrite(&disc, sizeof(disc), 1, fp);

fclose(fp);

getslots();

return;

}

delcd()

{

char delname[20];

char fflag;

fflag='n';

openrw();

puts("Удаление информации о диске\n");

printf("Введите название диска: ");

gets(delname);

while(fread(&disc, sizeof(disc), 1, fp)==1)

{

if(strcmp(disc.name, delname) != 0)

fwrite(&disc, sizeof(disc), 1, tp);

else

fflag='y';

}

fclose(fp);

fclose(tp);

if(fflag=='n')

nofind();

else

{

openwr();

while(fread(&disc, sizeof(disc), 1, tp)==1)

fwrite(&disc, sizeof(disc), 1, fp);

fclose(fp);

fclose(tp);

}

getslots();

return;

}

chcd()

{

char chname[20];

char fflag;

int pause;

fflag='n';

openrw();

puts("Редактирование сведений о диске\n");

printf("Введите название диска: ");

gets(chname);

while(fread(&disc, sizeof(disc), 1, fp)==1)

{

if(strcmp(disc.name,chname)!=0)

fwrite(&disc, sizeof(disc), 1, tp);

else

{

fflag='y';

puts("Текущая информация\n");

showdisc();

puts("Новая информация\n");

printf("Введите название диска: ");

gets(disc.name);

printf("Введите описание:");

gets(disc.description);

printf("Введите категорию:");

gets(disc.category);

printf("Введите цену:");

scanf("%f", &disc.cost);

if(count>>=MAX)

{

puts("К сожалению свободных ячеек нет\n");

pause=getchar();

}

else

{

getslot();

}

fwrite(&disc, sizeof(disc), 1, tp);

}

}

fclose(fp);

fclose(tp);

if(fflag=='n')

nofind();

else

{

openwr();

while(fread(&disc, sizeof(disc), 1, tp)==1)

fwrite(&disc, sizeof(disc), 1, fp);

fclose(fp);

fclose(tp);

}

getslots();

return;

}

chloc()

{

char chname[20];

char fflag;

int pause;

fflag='n';

if(count>>=MAX)

{

puts("К сожалению свободных ячеек нет\n");

pause=getchar();

return;

}

openrw();

puts("Изменение номера ячейки\n");

printf("Введите название диска: ");

gets(chname);

while(fread(&disc, sizeof(disc), 1, fp)==1)

{

if(strcmp(disc.name,chname)!=0)

fwrite(&disc, sizeof(disc), 1, tp);

else

{

fflag='y';

puts("Текущая информация\n");

showdisc();

puts("\nНовый номер ячейки\n");

getslot();

fwrite(&disc, sizeof(disc), 1, tp);

}

}

fclose(fp);

fclose(tp);

if(fflag=='n')

nofind();

else

{

openwr();

while(fread(&disc, sizeof(disc), 1, tp)==1)

fwrite(&disc, sizeof(disc), 1, fp);

fclose(fp);

fclose(tp);

}

getslots();

return;

}

locate()

{

char name[20];

char fflag, pause;

fflag='n';

if((fp = fopen(FILENAME,"r")) == NULL)

{

printf("Невозможно открыть файл %s\n",FILENAME);

exit();

}

puts("Поиск диска\n");

printf("Введите название диска: ");

gets(name);

while(fread(&disc, sizeof(disc), 1, fp)==1)

{

if(strcmp(disc.name,name)==0)

{

fflag='y';

showdisc();

printf("Для продолжения нажмите Enter");

pause=getchar();

putchar('\n');

}

}

fclose(fp);

fclose(tp);

if(fflag=='n')

nofind();

return;

}

plist()

{

if((fp = fopen(FILENAME,"r")) == NULL)

{

printf("Невозможно открыть файл %s\n",FILENAME);

exit();

}

if((printer = fopen("prn","w")) == NULL)

{

printf("Печатающее устройство не готово к работе\n");

fclose(fp);

exit();

}

while(fread(&disc, sizeof(disc), 1, fp)==1)

{

fprintf(printer,"Название: %s\n",disc.name);

fprintf(printer,"Описание: %s\n",disc.description);

fprintf(printer,"Категория: %s\n",disc.category);

fprintf(printer,"Цена: %6.2f\n",disc.cost);

fprintf(printer,"Номер п/п: %d\n",disc.number);

fprintf(printer,"\n\n");

}

fclose(printer);

fclose(fp);

return;

}

sort()

{

struct CD temp[MAX];

int index, loop1, loop2, endloop;

loop1=0;

loop2=0;

endloop=0;

index = 0;

if((fp = fopen(FILENAME,"r")) == NULL)

{

printf("Невозможно открыть файл %s\n",FILENAME);

exit();

}

while(fread(&disc, sizeof(disc), 1, fp)==1)

{

temp[index]=disc;

index++;

}

fclose(fp);

if((fp = fopen(FILENAME,"w")) == NULL)

{

printf("Невозможно открыть файл %s\n",FILENAME);

exit();

}

for(loop1=1;loop1<<< while(disc.number } flag="0;" другую\n?); Попробуйте занята. ячейка сожалению, printf(?К { if(slots[index]="=disc.number)" for(index="0;index<>MAX || flag==1);

count++;

slots[count]=disc.number;

return;

}

getslots()

{

int index;

index=0;

count=0;

if((fp = fopen(FILENAME,"r")) != NULL)

{

while(fread(&disc, sizeof(disc), 1, fp)==1)

{

slots[index]=disc.number;

index++;

count++;

}

fclose(fp);

}

}

292