1. Требования к контрольной работе
1.1.Объем контрольной работы
Общий объем пояснительной записки не должен превышать 30 стр.
Записка иллюстрируется блок-схемами алгоритмов, формами выходных данных или копиями экранов.
1.2.Содержание пояснительной записки:
1) титульный лист по образцу;
2) задание;
3) содержание;
4) введение;
5) постановка комплекса задач (определение и детальное рассмотрение поставленной задачи);
6) блок-схема функционирования системы (меню: создание списка, просмотр списка, корректировка, и т.д.) и блок-схема алгоритма задания вашего варианта.
7) проектный раздел (описание структуры программы, т. е. какие функции использовались и связи между ними);
8) исходный модуль программы (с комментариями);
9) результаты тестирования выполнения задания;
10) список литературы;
2.Оформление контрольной работы
Пояснительная записка пишется на одной стороне листа формата 210 x297 мм. При этом необходимо оставлять поля: верхнее - 20 мм, левое - 30 мм, нижнее - 20 мм, правое - 10 мм.
Текст делится на разделы. Каждый раздел начинается с новой страницы.
Разделы и подразделы нумеруются арабскими цифрами с точкой в конце: 2., 2.1., 2.1.1. Введение и заключение не нумеруются. Заголовки разделов посредине текста прописными буквами. Заголовки подразделов - с абзаца (15 см от края текста), строчными. Заголовок отстоит от текста на 2 см. После заголовка не ставится точка и он не подчеркивается.
Иллюстрации имеют подпись: рис. с номером раздела и порядковым номером иллюстрации, разделенными точкой, например, рис. 3.2. и краткий подрисуночный текст. Рисунок располагают после той страницы, где на него дана первая ссылка.
В пояснительной записке все страницы, в том числе титульный лист, содержание, листы с рисунками и программами нумеруются арабскими цифрами.
На титульном листе номер не ставят, на последующих проставляют в нижнем колонтитуле.
Защита контрольной работы проводится на ЭВМ при полностью функционирующей программе.
3. Задание: разработать программу для создания и работы с двусвязным списком , состоящим из структур. Для работы со списком создать меню со следующими пунктами:
1. Создание списка.
2. Просмотр списка.
3. Добавление в список новой записи.
4. Поиск и корректировка записи в списке.
5. Удаление записи из списка.
6. Сохранение списка в файле.
7. Загрузка списка из файла.
8. Выход.
3.1. Варианты задания
1. Структура содержит фамилию, имя, отчество и 4 оценки по 4-м предметам (массив структур с полями предмет, оценка). Удалять из списка имеющих 3 оценки неудовлетворительно. Поиск по фамилии и изменение оценок. Добавлять новые записи в начало списка.
2. Структура содержит фамилию, имя, отчество и 4 оценки по 4-м предметам (массив структур с полями предмет, оценка). Удалять из списка по введённой фамилии. Изменять оценки по введённой фамилии. Добавлять новые записи в конец списка.
3. Структура содержит название книги, ф.и.о. автора, год издания. Удалять из списка издания с годом меньше заданного. Изменять год издания по введённому названию книги. Добавлять новые записи в конец списка.
4. Структура содержит название книги, ф.и.о. автора, год издания. Удалять книги заданного автора. Изменять год издания по введённому названию книги. Добавлять новые записи перед последней.
5. Структура содержит название товара, цену единицы товара, количество товара. Удалять из списка заданный товар. Изменять цену заданного товара. Добавлять новые записи после первой.
6. Структура содержит название товара, цену, количество товара. Удалять из списка партии товара, превышающие заданную стоимость. Изменять цену заданного товара. Добавлять новые записи после первой.
7. Структура содержит фамилию, имя, отчество, адрес, год рождения. Изменять адрес по заданной фамилии. Создавать список и добавлять новые записи так, чтобы список был упорядочен по возрастанию (по фамилиям).
8. Структура содержит фамилию, имя, отчество, дату рождения. Изменять фамилию. Создавать список и добавлять новые записи так, чтобы список был упорядочен по возрасту.
9. Структура содержит название издания, тип издания (газета или журнал), цена экземпляра. Изменять цену экземпляра заданного издания. Создавать список и добавлять новые записи так, чтобы сначала располагались журналы, затем газеты.
10. Структура содержит название издания, тип издания (газета или журнал),
цена экземпляра. Изменять цену экземпляра заданного издания. Создавать
список и добавлять новые издания так, чтобы названия были упорядочены по возрастанию.
Приложение
Образец титульного листа:
Государственный комитет Российской Федерации по телекоммуникациям
Сибирский государственный университет телекоммуникаций и информатики
Контрольная РАБОТА
По дисциплине « Программирование (часть 2)»
Тема работы
Вариант №
Работу выполнил
студент 1 курса
группы
Ф. И. О.
Работу проверил
Ф.И.О.
Работа защищена
«___» __________2006г.
С оценкой «_______»
Функция сохранения в файл (save) организована следующим образом. После вызова функции из главного меню происходит стандартная проверка наличия активного списка, если список существует, функция продолжает работу.
Сначала в каталоге, из которого была запущена программа, создается и открывается для записи в бинарном режиме файл data.txt. Запись в файл реализована при помощи цикла WHILE, который выполняется до тех пор, пока не будет достигнут конец списка NULL.
В цикле также предусмотрена проверка на возможность записи в файл, основанная на операторе IF. Если структуру удается записать в файл, указатель перемещается на следующую запись, после чего цикл повторяется снова, если запись по какой либо причине не удалась, происходит вывод сообщения об ошибке записи файла, файл закрывается и функция завершает свою работу.
После завершения процедуры записи списка, файл закрывается и на экран под пунктами меню выводится сообщение об успешном завершении процедуры записи в файл.
Исходный код функции.
void save(item *p) //Заголовок функции {FILE *in; if (tail == NULL) //Проверка на наличие активного списка { //Вывод сообщения об отсутствии списка printf("\n Список товаров отсутствует нажмите <1>\n чтобы создать новый список,\n либо загрузите список из файла"); getch(); } else { in = fopen("data.txt", "wb"); //Создание файла data.txt и открытие для записи if (in != NULL) { while (p != NULL) { if (!fwrite(p, sizeof(item), 1, in)) { //Детектор ошибок perror("fwrite"); getchar(); fclose(in); //Закрытие файла return ; } p = p->next; //Продвижение по списку } fclose(in); //Закрытие файла printf("\n Список успешно сохранен в файл!"); getch(); } else { printf("Ошибка! Не удалось создать/прочитать файл\n"); printf("Нажмите любую клавишу...\n"); getchar(); return 0; } } }
Функция загрузки списка из файла (load) позволяет загрузить ранее сохраненный список из файла. Функция доступна сразу после запуска программы, как один из вариантов создания списка.
После запуска функции происходит очищение памяти под новый список, без которого процесс загрузки проходил бы некорректно. Очищение памяти основано на цикле WHILE, который выполняется до тех пор, пока не будет достигнут конец существующего списка NULL, если таковой имеется.
Затем программа ищет в каталоге, из которого она была запущена файл data.txt после чего открывает его в режиме чтения.
Формирование списка из прочитанных данных основано на цикле WHILE, который выполняется до тех пор, пока не будет достигнут конец файла.
За один «виток» цикла считывается одна структура, после чего происходит обнуление невалидных указателей, которые были сохранены вместе с информационной частью структуры.
Считанной из файла структуре назначаются новые, валидные указатели, после чего цикл повторяется.
По завершению формирования списка выводится сообщение об успешной загрузке из файла.
Исходный код функции.
void load(void) //Заголовок функции { item *p, *pr; //Инициализация переменных и указателей FILE *in; pr = NULL; //Обнуление указателей p = head; while (p != NULL) //Процедура очистки памяти { item *pTemp; pTemp = p->next; free(p); p = pTemp; } in = fopen("data.txt", "rb"); //Открытие файла data.txt в режиме чтения do { p= (item*)malloc(sizeof(item)); //Выделение памяти fread(p, sizeof(item), 1, in); //Чтение из файла одной структуры p->prev = NULL; //Обнуление невалидных указателей p->next = NULL; p->prev = pr; if (pr != NULL) pr->next = p; else head = p; pr = p; //Назначение новых указателей } while (!feof(in)); //Выполнение цикла до тех пор пока не будет достигнут конец файла tail = p->prev; tail->next = NULL; p = tail; printf("\n Список успешно загружен из файла!");//Вывод сообщения об окончании процедуры загрузки из файла. getch(); }
Существующий список не сохраняется автоматически, в
случае необходимости восстановления данных пользователь должен предварительно
сохранить созданный либо измененный список.