Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Топ:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Интересное:
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2017-09-28 | 311 |
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 в том случае, если необходимо сохранить текущее содержимое какого-нибудь пункта. Например, для ввода нового названия можно использовать следующие инструкции:
|
Если пользователь вводит новое название, оно присваивается переменной 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, чтобы избежать изменения номера ячейки в том случае, если в контейнере нет свободных ячеек.
|
|
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!