Практикум по дисциплине Программирование для образовательной программы по направлению 09. 03. 01 Информатика и вычислительная техника
Скачать 192.5 Kb.
|
Пример обработки бинарного файлаСоставить программу, выполняющую следующие функции: Создание нового файла; Просмотр файла; Добавление информации в конец файла; Поиск по названию товара и изменение цены и количества; Файл создать из структур вида: название товара, его цена и количество. Задание выполнить в отдельных функциях. Использовать меню для выбора функций. //lab10_1 #include #include #include struct tov {char name[10]; float c; int kol;} t1; void input(FILE *); // создание нового файла void print(FILE *); // просмотр файла void app(FILE *); // добавление в файл void find(FILE *); // поиск и изменение main() { char c; FILE *tf; while (1) { clrscr(); puts(" 1 – новый файл"); puts(" 2 – просмотр файла"); puts(" 3 – добавление в файл"); puts(" 4 – поиск и изменение"); puts(" 0 - выход"); c=getch(); switch(c) { case '1':input(tf);break; case '2':print(tf);break; case '3':app(tf);break; case '4':find(tf);break; case '0':return 0; default : puts(" неверный режим"); } } } void input(FILE *tf) { char ch; tf=fopen("file1.dat","wb"); // открытие бинарного файла для записи clrscr(); printf("\n Ввод товаров\n"); do { printf("\n название: "); scanf("%s",&t1.name); printf(" цена: "); scanf("%f",&t1.c); printf(" количество: "); scanf("%d",&t1.kol); fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1 printf("\n Закончить? y/n "); ch=getch(); } while (ch != 'y'); fclose(tf); } void print(FILE *tf) { int i; clrscr(); tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения i=1; fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1 while (!feof(tf)) { printf("\n %3d tovar %10s cena %6.2f kolic %4d",i,t1.name,t1.c,t1.kol); fread(&t1,sizeof(t1),1,tf); i++; } getch(); } void app(FILE *tf) { char ch; tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления clrscr(); printf("\n Ввод товаров \n"); do { printf("\n название: "); scanf("%s",&t1.name); printf(" цена: "); scanf("%f",&t1.c); printf(" количество: "); scanf("%d",&t1.kol); fwrite(&t1,sizeof(t1),1,tf); printf(" Закончить? y/n "); ch=getch(); } while (ch != 'y'); fclose(tf); } void find(FILE *tf) { char c,tov[10]; long int i; tf=fopen("file1.dat","rb+"); // открытие бинарного файла для чтения и записи clrscr(); puts(" Название искомого товара: "); gets(tov); fread(&t1,sizeof(t1),1,tf); while (!feof(tf)) { if (strcmp(t1.name,tov)==0) { printf(" tovar %10s cena %6.2f kolic %d",t1.name,t1.c,t1.kol); printf("\n изменить? y/n "); c=getch(); if (c=='y') { printf("\n количество: ");scanf("%d",&t1.kol); printf("\n цена: ");scanf("%f",&t1.c); i=sizeof(t1); fseek(tf,-i,1); // возврат на sizeof(t1) байт назад fwrite(&t1,sizeof(t1),1,tf); // запись изменённой структуры на прежнее место } } fread(&t1,sizeof(t1),1,tf); } fclose(tf); } 3. ВЫПОЛНЕНИЕ РАБОТЫ 3.1. Проанализировать приведенную программу. 3.2. Используя функции и режим меню, создать файл из 10 записей, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа, выполнить задание по своему варианту. Варианты заданий 1. Запись имеет вид: фамилия, пол, год рождения и рост. Вывести данные о самом высоком спортсмене. 2. Запись имеет вид: название вуза, число студентов, количество факультетов. Добавить в конец файла информацию о трех новых вузах и посчитать общее число студентов. 3. Запись имеет вид: название издания, газеты или журнала, стоимость одного экземпляра, количество экземпляров в год. Вывести на печать информацию о самом дешевом издании. 4. Запись имеет вид: фамилия студента, номер зачетной книжки, 4 оценки за экзамен. Выводить информацию о всех двоечниках и корректировать ее. 5. Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Поменять местами в файле записи о первых двух спортсменах. * 6. Запись имеет вид: фамилия, номер телефона, дата рождения. Внести в начало списка информацию о четырех новых знакомых. 7. Запись имеет вид: название инструмента, число, месяц и год изготовления. Вывести на печать информацию об инструменте с самым большим сроком использования и выполнить корректировку этой записи. 8. Запись имеет вид: номер читательского билета, автор книги, название, дата заказа. Вывести на экран содержимое файла. Поменять местами первую и последнюю записи в файле. 9. Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Удалить из списка информацию о спортсмене с наименьшим количеством очков. 10. Запись имеет вид: фамилия, количество вещей, общий вес. Удалите из файла сведения о багаже, общий вес вещей в котором меньше, чем 10 кг. 4. КОНТРОЛЬНЫЕ ВОПРОСЫ Чем отличается файл от массива? Что понимается под чтением, и что под записью в файл? Режимы доступа к файлам. Назначение функций fseek, ftell. Привести пример корректировки К-той записи в файле прямого доступа Список литературы Баженова И.Ю. Введение в программирование [Электронный ресурс]: учебное пособие/ Баженова И.Ю., Сухомлин В.А.— Электрон. текстовые данные.— М.: БИНОМ. Лаборатория знаний, Интернет-Университет Информационных Технологий (ИНТУИТ), 2007.— 326 c.— Режим доступа: http://www.iprbookshop.ru/22400.— ЭБС «IPRbooks» Борисенко В.В. Основы программирования [Электронный ресурс]/ Борисенко В.В.— Электрон. текстовые данные.— М.: Интернет-Университет Информационных Технологий (ИНТУИТ), 2016.— 323 c.— Режим доступа: http://www.iprbookshop.ru/52206.— ЭБС «IPRbooks» Поляков А.Ю. Программирование [Электронный ресурс]: практикум/ Поляков А.Ю., Полякова А.Ю., Перышкова Е.Н.— Электрон. текстовые данные.— Новосибирск: Сибирский государственный университет телекоммуникаций и информатики, 2015.— 55 c.— Режим доступа: http://www.iprbookshop.ru/55494.— ЭБС «IPRbooks» Устинов В.В. Основы алгоритмизации и программирование. Часть 2 [Электронный ресурс]: конспект лекций/ Устинов В.В.— Электрон. текстовые данные.— Новосибирск: Новосибирский государственный технический университет, 2013.— 32 c.— Режим доступа: http://www.iprbookshop.ru/44675.— ЭБС «IPRbooks» |