История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Топ:
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Для внесения изменений в картотеку используется тот же основной алгоритм, что и для удаления записи: вся обновленная информация записывается во временный файл, а затем копируется обратно в файл данных. В этом случае, вместо того, чтобы игнорировать записи, которые мы хотим изменить, в них записывается новая информация, а уже затем они сохраняются во временном файле.
Прежде всего, функция chcd() запрашивает название компакт-диска, в который вы хотите внести изменения, затем выполняет цикл while, в котором считывается каждая структура:
openrw();puts("Введите название диска: ");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(); }Инструкция if (count >= MAX) не позволяет пользователю ввести новый номер ячейки, если файл содержит максимально допустимое количество записей. В этом случае функция getslot() не выполнится и исходный номер ячейки будет прочитан с диска и занесен в конец отредактированной записи.
Функция chcd() написана таким образом, что пользователь вынужден набирать всю информацию о диске заново, даже если он хочет изменить всего один пункт. Вы можете самостоятельно сделать редактирование информации более удобным для пользователя, если измените ее так, чтобы он мог ограничиться простым нажатием клавиши Enter в том случае, если необходимо сохранить текущее содержимое какого-нибудь пункта. Например, для ввода нового названия можно использовать следующие инструкции:
printf("Введите название диска: ");gets(disc.name);if (strlen(name) > 0) strcpy(disc.name, name);Если пользователь вводит новое название, оно присваивается переменной disc.name, после чего заносится в файл вместе с соответствующей записью. Если пользователь нажимает Enter, не печатая нового названия, содержимое disc.name остается без изменений и в записи сохраняется прежнее наименование диска.
Поскольку нам необходимо выводить информацию на экран несколько раз во время работы программы, процедуру вывода можно выделить в самостоятельную функцию, названную нами showdisc(), и вызывать ее по мере надобности:
showdisc() { printf("Название %s\n", disc.name); printf("Описание %s\n", disc.description); printf("Категория %s\n", disc.category); printf("Цена %6.2f\n", disc.cost); printf("Номер п/п %d\n", disc.number); puts("\n\n"); return; }После чтения новых данных функция chcd() записывает структуру во временный файл:
fwrite(&disc, sizeof(disc), 1, tp);После завершения чтения файла fp функция chcd() закрывает оба файла. Если ни одна запись не была отредактирована (например, потому что не был найден указанный диск), функция выводит на экран соответствующее сообщение и останавливается:
fclose(fp);fclose(tp);if (fflag == 'n')nofind();
Если изменения были внесены, функция chcd() снова открывает файлы с обратным порядком доступа, переписывает данные в исходный файл данных и обновляет массив номеров ячеек:
else { openwr(); while (fread(&disc, sizeof(disc), 1, tp) == 1) fwrite(&disc, sizeof(disc), 1, fp); fclose(fp); fclose(tp); } getslots();return;}Изменение номера ячейки: функция chloc()
Функция, которая используется для изменения номера ячейки в карточке компакт-диска, в сущности, не отличается от функции редактирования записи, за исключением процедуры ввода номера ячейки:
puts("Текущая информация\n");showdisc();puts("\nНовый номер\n");getslot();Однако в начало функции добавлена инструкция if, чтобы избежать изменения номера ячейки в том случае, если в контейнере нет свободных ячеек.
|
|
|
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!