49784 (Обработка динамических структур)

2016-07-30СтудИзба

Описание файла

Документ из архива "Обработка динамических структур", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49784"

Текст из документа "49784"

Министерство образования РФ

Московский авиационный институт

(государственный технический университет)

филиал "Восход"

Кафедра МиПОИС

Отчет

по курсовой работе

"Обработка динамических структур"

по дисциплине: Программирование на языках высокого уровня


Студента гр. ДА 2-40
Воронцов О. В.

Байконур 2006г.

Аннотация

В данной курсовой работе представлена реализация программы, для обработки динамической структуры данных, содержащей сведения об авторах книг. Программа, разработанная в среде Turbo C++ 3.0, моделирует работу со структурой как с базой данных.

Содержание

Введение

1. Постановка задачи

2. Метод решения

2.1 Общая схема работы программы

2.2 Метод сортировки

3. Разработка алгоритмов решения задачи

3.1 Общая схема алгоритма

3.2 Стандартные процедуры и функции, используемые в программе

3.3 Описание работы пользовательских подпрограмм

3.3.1 Описание работы подпрограммы vvodSp

3.3.2 Описание работы подпрограммы loadIT

3.3.3 Описание работы подпрограммы sort

3.3.4 Описание работы подпрограммы vivodSp

3.3.5 Описание работы подпрограммы dobEl

3.3.6 Описание работы подпрограммы delel

3.3.7 Описание работы подпрограммы vidacha

3.3.8 Описание работы подпрограммы vozvrat

3.3.9 Описание работы подпрограммы saveIT

3.3.10 Описание работы основной программы

4. Руководство пользователя

5. Анализ результатов

Заключение

Список литературы

Приложения

Введение

В данном отчёте представлено решение задачи с помощью языка программирования С.

В первом разделе отчёта представлена постановка задачи. Второй раздел содержит метод решения программы. Третий раздел отчёта – алгоритм работы программы, включая алгоритм работы интерфейса программы и десяти основных подпрограмм. В четвёртом разделе рассматривается подробное руководство пользователя. Пятый раздел содержит анализ результатов. В листинге (приложение Д) представлен полный текст программы с комментариями.

1. Постановка задачи

Требуется сделать обработку картотеки библиотеки. Для этого следует:

а) Создать список (не менее 10 записей) со следующей структурой:

- фамилия и инициалы автора

- название книги

- год издания

- количество экземпляров данной книги в библиотеке

Использовать двусвязный список.

б) Реализовать следующие действия:

- Отсортировать список по фамилиям авторов книг методом простого обмена;

- Добавить в картотеку новую книгу, не нарушая алфавитный порядок;

- Удалить из картотеки книги заданного автора;

- По фамилии автора и названию книги выдать книгу на руки, то есть уменьшить значение количества книг на единицу или выдать сообщение о том, что требуемой книги нет или требуемая книга находится на руках. Для этого должен формироваться список книг, находящихся на руках у читателей, после каждой выдачи книги;

- По фамилии автора и названию книги возвратить книгу в библиотеку, отслеживая количество книг в обоих списках;

- Сохранить полученные списки в файл.

в) Действия со списком оформить в виде отдельных функций.

2. Методы решения задачи

2.1 Общая схема работы программы

Целесообразно для решения задачи использовать два списка. Первый список будет хранить информацию о книгах, хранящихся в библиотеке, а второй – о выданных на руки. Для этого будет произведено присваивание информационных полей первого списка второму, а затем поле записи количества книг во втором списке будет обнулено (так как в начале книг на руках нет). Уменьшение количества книг в одном списке будет сопровождаться увеличением во втором и наоборот. Например, после выдачи книги на руки счётчик количества экземпляров во втором списке увеличится на единицу, а в первом уменьшится на единицу. При выводе на печать второго списка следует оговорить, чтобы на экране появлялись только те книги, количество которых в этом списке больше нуля.

При добавлении нового элемента будет осуществляться сортировка в обоих списках, следовательно, алфавитный порядок нарушен не будет.

Так как требуется провести ряд действий со списком, то рационально организовать текстовое меню (его вид приведен в таблице 1.1). Меню будет представлено вертикально расположенными строками, каждая строка – отдельный пункт меню. Выбор пункта меню будет осуществляться путём введения с клавиатуры его порядкового номера. Для считывания введенного символа требуется зарезервировать переменную n, хранящую код нажатой клавиши. Выбор любого пункта меню будет активировать соответствующую функцию.

В процессе создания списка будут заполняться информационные поля каждого элемента. Информационные поля будут включать данные об авторе книги, её названии, годе издания и количестве экземпляров в библиотеке. Более подробно создание списка описано в пункте 3.3.1.

Оба списка можно будет записать в файлы, которые будут храниться на диске. Это позволит не вводить информацию заново при каждом запуске программы, а просто считать её из файлов. Путь к файлам можно задать отдельно.

Пример выполнения меню

Введите номер пункта для выполнения

1. Заполнить список

2. Загрузить списки из файлов

3. Отсортировать текущий список

4. Вывести текущий список

5. Вывести текущий список выданных на руки книг

6. Добавить новый элемент

7. Удалить из списка книги заданного автора

8. Выдать книгу на руки

9. Вернуть книгу в библиотеку

10. Сохранить списки в файл

11. Выход из программы

Ваш выбор:

2.2 Метод сортировки

Сортировка методом простого выбора – один из наиболее простых способов сортировки. Алгоритм состоит в повторяющихся проходах по сортируемому списку. За каждый проход элементы последовательно будут сравниваться попарно и, в случае если последующий элемент меньше предыдущего (то есть порядок в паре неверный), будет выполняться обмен элементов. Проходы по списку будут повторяться до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает, что список отсортирован.

Обращение к функции, реализующей сортировку, будет производиться не только при непосредственном выборе пункта меню сортировки созданного списка, но и при добавлении нового элемента в список. Это обеспечивает добавление новой записи при неизменном алфавитном порядке.

3. Разработка алгоритмов решения задачи

3.1 Схема работы программы

Считать номер n пункта меню:

1. Если n=1, вызвать функцию vvodSp. Формирование списка.

2. Если n=2, вызвать функцию loadIT. Считывание списков из файлов.

3. Если n=3 , вызвать функцию sort. Сортировка первого списка по фамилиям автора.

4. Если n=4, вызвать функцию vivodSp. Вывод первого (текущего) списка на печать.

5. Если n=5, вызвать функцию vivodSp. Вывод второго списка (выданных на руки книг) на печать.

6. Если n=6, вызвать функцию dobEl. Добавление нового элемента в конец списка и последующая сортировка по имени автора.

7. Если n=7, вызвать функцию delel. Удаление всех записей с введённой фамилией автора.

8. Если n=8, вызвать функцию vidacha. Добавление книги во второй список, удаление из первого.

9. Если n=9, вызвать функцию vozvrat. Удаление книги из второго списка, добавление в первый.

10. Если n=10, вызвать функцию saveIT. Запись данных первого и второго списков в файлы.

11. Если n=11, выполнить выход из программы.

Блок схемы основной программы и функций vvodSp, dobEl, delel представлены в приложениях соответственно А, Б, В, Г.

3.2 Стандартные процедуры и функции, используемые в программе

В процессе разработки программы были использованы стандартные модули языка программирования С: stdio.h, alloc.h, conio.h, string.h,.

Модуль stdio.h позволяет работать с потоками (строки, файлы…). Данный модуль включает такие необходимые функции как scanf(), printf(), gets(), puts(), и набор функций для работы с файлами.

Модуль alloc.h предназначен для работы с динамической памятью, в нем содержатся функции calloc(), malloc(), free() и константа NULL.

Модуль string.h предназначен для работы со строками, точнее строковым типом данных. В нем находятся функции для копирования, сравнения, склеивания, и поиска подстроки. В программе используются две стандартные функции этого модуля: strwr и strcmp. Первая преобразует строчные символы строки в прописные. Данная функция необходима для предотвращения ошибок ввода из-за восприимчивости программы к регистру. Функция strcmp(Строка1, Строка2) сравнивает строки Строка1 и Строка2, возвращает 0, если строки равны; число меньше нуля, если первая строка меньше второй; число больше нуля, если первая строка больше второй. Модуль conio.h предназначен для работы с экраном в текстовом режиме. В нем хранятся функции для очистки экрана, изменения цвета текста и фона, атрибутов текста, процедуры для буферизированного и небуферизированного ввода с клавиатуры.

3.3 Описание работы пользовательских подпрограмм

3.3.1 Описание работы подпрограммы vvodSp

Подпрограмма предназначена для формирования первого списка. Функция возвращает указатель на начало первого списка. Входной параметр – указатель на указатель на начало второго списка.

1. Обнулить указатели на начала и хвосты обоих списков.

2. Пока не будет введено "no" выполнять:

2.1 Динамически выделить память под указатель на текущий элемент.

2.2 Обнулить указатель на следующий за текущим элемент.

2.3 Присвоить указателю на предшествующий текущему элемент адрес предыдущего элемента.

2.4 Если указатель на начало списка обнулён, то присвоить вершине списка адрес текущего элемента, то есть текущий элемент становится вершиной.

2.5 Иначе, присвоить указателю на следующий за предыдущим элемент списка адрес текущего элемента.

2.6 Приравнять адрес текущего элемента к адресу предыдущего.

Аналогичные действия проводятся со вторым списком. Далее:

2.7 Считать информационные поля элемента первого списка.

2.8 Приравнять информационные поля элементов первого списка к информационным полям второго.

2.9 Обнулить поле количества книг.

2.10 Считать значение s.

3. Вернуть указатель на начало первого списка.

Таблица 3.3.1-Локальные идентификаторы функции vvodSp

Идентификатор

Тип

Назначение

s

char

предназначена для ответа на вопрос: продолжать ли список

cur, cur2

el*

указатель на текущие элементы

tail, tail2

el*

указатель на хвосты списка

top

el*

указатель на начало первого списка

top2

el*

указатель на начало второго списка

3.3.2 Описание работы подпрограммы loadIT

Подпрограмма предназначена для считывания данных первого и второго списков из файлов.

Входные параметры функции – указатель на указатель на начало первого и второго списков.

1. Обнулить ссылки на хвосты и вершины обоих списков.

2. Открыть файлы "Base.txt" и "Out.txt" для чтения.

3. В цикле "пока не конец файла" динамически выделять память под указатель на текущий элемент.

3.1 Обнулить указатель на элемент, следующий за текущим.

3.2 Приравнять указатель на конец списка к указателю на предшествующий.

3.3 Если указатель на начало списка пустой, то присвоить ему адрес текущего элемента, текущий элемент становится началом списка.

3.4 Иначе присвоить адрес текущего элемента указателю на следующий за предыдущим.

3.5 Указатель на текущий элемент приравнять к последнему.

3.6 Произвести считывание списков из файлов.

4. Закрыть все файлы.

Таблица 3.3.2-Локальные идентификаторы функции loadIT

Идентификатор

Тип

Назначение

cur, cur2

el*

указатели на текущие элементы

pr

el*

указатель на предыдущий элемент списка

tail, tail2

el*

указатель на хвост первого и второго списков

3.3.3 Описание работы подпрограммы sort

Подпрограмма предназначена для сортировки списков по фамилии автора. Обращение к функции происходит и при добавлении нового элемента в список. Входной параметр функции – указатель на начало первого списка.

1. В цикле "пока не конец списка перейти к последующему элементу".

1.2 Если указатель на следующий элемент поля имени автора меньше текущего, то записать в дополнительную переменную dop адрес информационного поля текущего элемента.

1.3 Присвоить полю текущего элемента адрес поля следующего элемента, то есть переписать в текущий элемент данные последующего.

1.4 Присвоить указателю на следующий элемент поля имени автора адрес вспомогательной переменной.

Таблица 3.3.3-Локальные идентификаторы функции sort

Идентификатор

Тип

Назначение

k

int

результат обмена (есть/нет)

cur

el*

указатель на текущий элемент

dop

book

вспомогательная переменная

3.3.4 Описание работы подпрограммы vivodSp

Подпрограмма обеспечивает вывод на печать текущего списка. При обращении к ней может вывести содержимое первого или второго списка. Входной параметр – указатель на текущий элемент списка.

В цикле "пока не конец списка", если информационное поле количества книг больше нуля, то распечатать текущий элемент и перейти к следующему.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5140
Авторов
на СтудИзбе
441
Средний доход
с одного платного файла
Обучение Подробнее