Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Файл заголовков называется stdio.H, а не stdio.C. Указатель на файл должен определяться со звездочкой перед именем: *fp. В цикле while

должен быть указан код \r, а не \n.

Приложение 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();

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

default:

break;

delcd(); break;

chcd(); break;

chloc(); break;

sort(); break;

locate(); break;

plist(); break;

break;

puts("Ошибка,

повторите ввод\n\n");

}

addcd()

}

{

int pause;

}

while(select!='8'); return(0);

if(count>>=MAX)

{

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

return;

}

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

{

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

}

puts("\n");

exit();

delcd()

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;

}

{

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);

fclose(fp); fclose(tp);

else

}

fflag='y';

if(fflag=='n')

nofind();

else

{

openwr();

while(fread(&disc, sizeof(disc), 1, tp)==1) fwrite(&disc, sizeof(disc), 1, fp);

fclose(fp);

¶a++ae æepcue u+uru æɵuyye+a sneuwpo++ɵu usgawenacwæou "Books-shop".

Pacupocwpa+e+ue, upogaua, uepesauuca ga++on u+uru unu ee ¬acwen 3AMPE[EHª.

O æcex +apyue+uex upoca6a coo6yawa uo agpecy piracy@books-shop.com

chcd()

getslots(); return;

}

{

fclose(tp);

}

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();

}

}

fclose(fp); fclose(tp);

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

}

if(fflag=='n')

nofind();

chloc()

else

getslots(); return;

}

{

{

openwr();

while(fread(&disc, sizeof(disc), 1, tp)==1) fwrite(&disc, sizeof(disc), 1, fp); fclose(fp);

fclose(tp);

}

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();

}

fclose(fp); fclose(tp);

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

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

}

if(fflag=='n')

nofind();

locate()

else

getslots(); return;

}

{

{

openwr();

while(fread(&disc, sizeof(disc), 1, tp)==1) fwrite(&disc, sizeof(disc), 1, fp); fclose(fp);

fclose(tp);

}

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();

}

fclose(fp); fclose(tp);

putchar('\n');

}

if(fflag=='n')

nofind();

plist()

return;

}

{

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");

sort()

}

fclose(printer); fclose(fp); return;

}

{

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++;

}

getslots()

fclose(fp);

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

{

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

}

for(loop1=1;loop1<<< || disc.number>>MAX || flag==1); count++;

slots[count]=disc.number; return;

}

{

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);

}

}