Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Топ:
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
|
из
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!