Разработка электронной картотеки

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Разработка электронной картотеки

1. Описание информационной структуры

Шаблон:

typedef struct games

{

char name[12]; // Название продукта

int year; // Дата выхода

int rating; // Рейтинг

} MS;

Где первое поле типа char — название продукта, второе поле типа int — дата выхода продукта, третье поле типа int — рейтинг.

Имя структурного типа: games.

Имя нового типа: MS.

Пример объявления переменной типа NT: MS *games=NULL.

2. Описание структуры, используемой для организации списка

Шаблон:

typedef struct list

{

MS info;

struct list* pred;

struct list* next;

} SP;

Где первое поле — данные типа MS, второе и третье поле указатель типа struct list *.

Имя структуры, используемой для организации список: list.

Имя нового типа: SP.

Пример объявления переменной типа SP: SP *h1=NULL.

3. Контрольные примеры

Контрольные примеры обработки приведены в таблице 1 «Контрольные примеры обработки».

Таблица 1. Контрольные примеры обработки

Исходные данные

Условие обработки

rating вывод продуктов с рейтингом больше, чем n

Результат

Наименование

Год выхода

Рейтинг

Наименование

Год выхода

Рейтинг

Crysis

2008

7

n=8

Crysis 2

2010

9

Crysis 2

2010

9

Crysis 3

2012

10

Crysis 3

2012

10

Max Payne

2000

9

n=10

Gears World

2012

11

Gears World

2012

11

Shake

2010

3

Контрольные примеры сортировки по полю rating приведены в таблице 2 «Контрольные примеры сортировки».

Таблица 2. Контрольные примеры сортировки

Исходные данные

Тип сортировки

Результат

Наименование

Год выхода

Рейтинг

Наименование

Год выхода

Рейтинг

Crysis

2008

8

По возрастанию

Crysis 3

2012

7

Crysis 2

2010

11

Crysis

2008

8

Crysis 3

2012

7

Crysis 2

2010

11

Crysis

2008

8

По убыванию

Crysis 2

2010

11

Crysis 2

2010

11

Crysis

2008

8

Crysis 3

2012

7

Crysis 3

2012

7

Контрольные примеры сортировки по полю year приведены в таблице 3 «Контрольные примеры сортировки».

Таблица 3. Контрольные примеры сортировки

№ п.п.

Исходные данные

Тип сортировки

Результат

Наименование

Год выхода

Рейтинг

Наименование

Год выхода

Рейтинг

1

Baloo

2008

8

По возрастанию

Aentik

2012

7

Charge

2010

11

Baloo

2008

8

Aentik

2012

7

Charge

2010

11

2

Nord

2008

8

По убыванию

Ascell

2010

11

Ascell

2010

11

Jaske

2012

7

Jaske

2012

7

Nord

2008

8

4. Описание переменных главной функции

Описание переменных главной функции приведено в таблице 4.

Таблица 4. Описание переменных главной функции

Имя переменной

Тип переменной

Назначение

k, q, z

int

Вспомогательные переменные

pm, pm2, pm3, pm4, pm5, pm6, pm7, pm8

int

Переменные для выбора пунктов меню

c, ch

char

Переменные, управляющие циклом

h1, rez

SP *

Указатели

5. Краткое описание алгоритма

При разработке алгоритма предусмотрен контроль над выполнением пунктов меню.

1) Пользователь выбирает один из пунктов меню: 1 — ввод данных картотеки; 2 — вывод данных; 3 — Формирование нового списка; 4 — Обработка 5 — Поиск; 6 — Сохранение и загрузка картотеки; 7 — Пользователю; 0 — Выход из программы.

2) Если пользователь выбирает первый пункт меню, выводится подменю: 1 — Последовательный ввод; 2 — Ввод с уточнениям места добавления элемента в картотеку 3 — выход в надменю.

2. 1) Если пользователь выбирает первый пункт меню, выполняется:

2.1. 1) ввод названия, переход к пункту 2.1. 2;

2.1. 2) ввод года, переход к пункту 2.1. 3;

2.1. 3) ввод рейтинга переход к пункту 2.1. 4;

2.1. 4) вывод сообщения «Завершить ввод? (y/n)».

2.1. 5) если сh==n, переход к пункту 2.1. 1; если сh≠n, переход к пункту 2.

3) Если пользователь выбирает второй пункт меню, выполняется вывод под-меню:

1 — Последовательный ввод.

2 — Уточнение ввода данных

3 — Выход

4) Если пользователь выбирает третий пункт меню, выполняется обработка по заданному пользователем условию, переход к пункту 1.

5) Если выбран четвертый пункт меню, выводится подменю: 1 — Удаление элементов; 2 — Сортировка (По имени, году или рейтингу); 3 — Выход (действия осуществляются в соответствии с выбранным пунктом).

6) Если выбран 5 пункт, выполняется поиск элемента (по имени или году).

7) Если выбран 6 пункт меню, выводится подменю с вариантами выбора: 1 — Сохранение, 2 — Загрузка

8) Если выбран 7 пункт меню, осуществляется вывод информации для пользователя:

1 — Рекомендации по использованию, 2 — Инструкция по программе

9) Если выбран 0 пункт меню, осуществляется выход из программы.

6. Описание функций

Описание функции «menu_seach_1»

Назначение: вывод подменю пункта «Поиск».

Прототип: void menu_seach1 (void)

Пример вызова: menu_seach _1 ();

Описание функции «menu_sort_1»

Назначение: вывод подменю пункта «Сортировка».

Прототип: void menu_sort1 (void)

Пример вызова: menu_seach _1 ();

Описание функции «user_GUIDE»

Назначение: вывод подменю пункта «Пользователю».

Прототип: void user_GUIDE (void)

Пример вызова: user_GUIDE ();

Описание функции «Save_and_Load»

Назначение: вывод подменю пункта «Сохранение и загрузка».

Прототип: void Save_and_Load (void)

Пример вызова: Save_and_Load ();

Описание функции «menu_seach»

Назначение: вывод подменю пункта «Поиск».

Прототип: void menu_seach (void)

Пример вызова: menu_seach ();

Описание функции «menu_confirming»

Назначение: вывод подменю пункта «Обработка».

Прототип: void menu_confirming (void)

Пример вызова: menu_confirming ();

Описание функции «Notice»

Назначение: вывод подсказки

Прототип: void Notice (void)

Пример вызова: Notice ();

Описание функции «menu_enter»

Назначение: вывод подменю пункта «Ввод данных картотеки»

Прототип: void menu_enter (void)

Пример вызова: menu_enter ();

Описание функции «menu_enter»

Назначение: вывод подменю пункта «Ввод данных»

Прототип: void menu_enter (void)

Пример вызова: menu_enter ();

Описание функции «output_menu»

Назначение: вывод подменю пункта «Вывод данных»

Прототип: void output_menu (void)

Пример вызова: output_menu ();

Описание функции «help»

Назначение: вывод помощи.

Прототип: void help (void)

Пример вызова: help ();

Описание функции «recomend»

Назначение: вывод рекомендации пользователю.

Прототип: void recomend (void)

Пример вызова: recomend ();

Описание функции «Screen»

Назначение: вывод няшности*

Прототип: void Screen (void)

Пример вызова: Screen ();

Описание функции «enter»

Назначение: ввод

Прототип: SP *enter (SP *), где параметр типа SP * - указатель на «голову» списка, тип возвращаемого значения SP * - указатель на «голову» списка.

Пример вызова: names = enter (& k), где names — указатель на «голову» списка.

Описание переменных: описание локальных переменных функции enter приведено в таблице 4.

Таблица 4. Описание локальных переменных функции enter

Имя переменной

Тип переменной

Назначение

p

SP *

Указатель на «голову» списка

Описание функции «Output»

Назначение: вывод информационных полей списка.

Прототип: void Output (SP *, char *), первый тип параметра SP * - указатель на «голову» списка, второй тип параметра char * - указатель на объект типа char.

Пример вызова: Output (games, «Данные: «), где games — адрес первого элемента последовательности структур.

Описание переменных: описание локальных переменных функции Output приведены в таблице 5.

Таблица 5. Описание локальных переменных функции Output

Имя переменной

Тип переменной

Назначение

q

Int

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

Описание функции «confirming»

Назначение: функция обрабатывает исходный список и возвращает полученный список — результат.

Прототип: SP *confirming (SP *) где тип возвращаемого значения SP * - указатель на «голову» списка, первый тип параметра SP * - адрес первого элемента списка.

Пример вызова: rez=confirming (SP *h1), где rez — возвращаемое значение типа SP *, h1 — указатель на «голову» списка.

Описание переменных: описание локальных переменных функции confirming приведено в таблице 6.

Таблица 6. Описание локальных переменных функции confirming

Имя переменной

Тип переменной

Назначение

d

int

Переменная для хранения рейтинга

p, h2, p1, p2

SP *

переменные указатели

Описание функции «Sort»

Назначение: функция вызывает функцию «NewSort» с соответствующими параметрами для различных типов сортировки (по возрастанию, убыванию)

Прототип: SP *Sort (SP *), где первый тип параметра SP * - указатель на «голову» списка, второй тип параметра int — размер исходного списка, а тип возвращаемого значения SP* - указатель на «голову» списка

Пример вызова: h1=Sort (games), где h1 указатель на «голову» списка

Описание переменных: описание локальных переменных функции Sort приведено в таблице 7.

Таблица 7. Описание локальных переменных функции Sort

Имя переменной

Тип переменной

Назначение

pm2, pm3, pm4

Int

Переменные для управления меню

Описание функции «Newsort»

Назначение: функция сортирует элементы списка.

Прототип: SP *Newsort (SP *, int, int), где первый параметр типа SP * - указатель на «голову» списка, второй тип параметра int — флаг, показывающий по какому полю сортировать, третий тип параметра int — флаг, показывающий какой тип сортировки выполнять (по возрастанию убыванию), возвращаемое значение типа SP * - указатель на «голову» списка.

Пример вызова: h1=Newsort (h1, 1, 1), где первый параметр h1 — указатель на «голову» списка, второй параметр 1 — флаг, показывающий по какому полю сортировать, третий параметр int — флаг, показывающий какой тип сортировки выполнять (по возрастанию убыванию), возвращаемое значение типа SP * - указатель на «голову» списка.

Описание переменных: описание локальных переменных функции Newsort приведено в таблице 8.

Таблица 8. Описание локальных переменных функции NewSort

Имя переменной

Тип переменной

Назначение

p, p1, p2, p3

SP *

Переменные указатели

z

int

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

Описание функции «Add»

Назначение: функция добавляет элемент в существующий список.

Прототип: SP *Add (SP *), где тип возвращаемого значения SP * - указатель на «голову» списка, первый тип параметра SP * - указатель на «голову» списка.

Пример вызова: h1=Add (h1), где h1 указатель на «голову» списка.

Описание переменных: описание локальных переменных функции Add приведено в таблице 9.

Таблица 9. Описание локальных переменных функции Add

Имя переменной

Тип переменной

Назначение

d, k

int

Вспомогательные переменные

pm2

int

Переменная для управления меню

p1, p

SP *

Переменные указатели

Описание функции «Del»

Назначение: функция удаляет элемент из списка.

Прототип: SP *Del (SP *), где тип возвращаемого значения SP * - указатель на «голову» списка, первый тип параметра SP * - указатель на «голову» списка.

Пример вызова: h1=Del (h1), где h1 — указатель на «голову» голову списка.

Описание переменных: описание локальных переменных функции Del приведено в таблице 10.

Таблица 10. Описание переменных функции Del

Имя переменной

Тип переменной

Назначение

d, k

int

Вспомогательные переменные

p1, p

SP *

Переменные указатели

Описание функции «Output2»

Назначение: функция выводит информационные поля элементов, расположенных справа и слева от заданного.

Прототип: void Output2 (SP *), где первый тип параметра SP * - указатель на «голову» списка.

Пример вызова: Output_2 (h1), где h1 — указатель на «голову» списка.

Описание переменных: описание локальных переменных функции Output2 приведено в таблице 11.

Таблица 11. Описание локальных переменных функции Output2

Имя переменной

Тип переменной

Назначение

k, z

int

Вспомогательные переменные

p, p1, h2, p2

SP *

Вспомогательные переменные

Описание функции «save»

Назначение: функция сохраняет данные картотеки в файле

Прототип: int *save (SP *), где тип возвращаемого значения int, первый тип параметра SP * - указатель на «голову» списка.

Пример вызова: check=save (h1), где h1 — указатель на «голову» списка.

Описание переменных: описание локальных переменных функции приведено в таблице 12.

Таблица 13. Описание переменных функции save

Имя переменной

Тип переменной

Назначение

name

char

Вспомогательные переменные

Описание функции «Load»

Назначение: функция загружает данные из файла

Прототип: SP *Load (SP *), где тип возвращаемого значения SP, указатель" голову" списка, первый тип параметра SP * - указатель на «голову» списка.

Пример вызова: h1=Load (h1), где h1 — указатель на «голову» списка.

Описание переменных: описание локальных переменных функции приведено в таблице 13.

Таблица 14. Описание переменных функции save

Имя переменной

Тип переменной

Назначение

*name

char

Указатель на первую букву имени файла

с

char

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

Описание функции «Seach»

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

Таблица 15. Описание переменных функции Seach1

Имя переменной

Тип переменной

Назначение

i, l

int

Вспомогательные переменные

s[15]

char

Сочетание вводимое пользователем

ch

char

Вспомогательные переменные

7. Иерархическая структура программы

Рис. 2. Иерархическая структура программы

8. Код программы на языке С/С++

// ConsoleApplication16. cpp: Defines the entry point for the console application.

#include «stdafx. h»

#include «stdio. h»

#include < conio. h>

#include < stdlib. h>

#include < tchar. h>

#include < string. h>

#include < locale>

#include < time. h>

#include < Windows. h>

#include < iostream>

using namespace std;

typedef struct games

{

char name[12]; // Название продукта

int year; // Дата выхода

int rating; // Рейтинг

} MS;

typedef struct list

{

MS info;

struct list* pred;

struct list* next;

} SP;

void menu_seach1 (void); // Подменю поиска

void menu_sort1 (void); // Подменю сортировки

void User_GUIDE (void); // Меню «Пользователю»

void Save_And_Load (void); // Сохранить и загрузить

void menu_seach (void); // Меню поиска

void menu_confiming (void); // Меню обработки

void Notice (void); // Функция подсказки

void menu_enter (void); // Подменю ввода

void output_menu (void); // Подменю вывода

void help (void); // Помощь

void recomend (void); // Рекомендации

void menu (void); // Главное меню

void Screen (void); // Элементы интерфейса

SP* enter (SP*); // ввод данных

void Output (SP*, char*); // вывод данных

SP *confirming (SP*); // создание нового списка

SP *Sort (SP*); // Сортировка

SP *NewSort (SP*, int, int); // Подсортировка

SP *Add (SP*); // добавление элементов

SP *Del (SP*); // удаление элементов

void Output2 (SP*); // вывод справа и слева

SP *Free (SP*); // Освобождение памяти

void save (SP *); // Сохранение данных

SP *Load (); // Загрузка из файла

SP* SortALF (SP*); // Сортировка по алфавиту

SP *Add_End (SP *, SP *); // Добавление в конец

void menupoisk (SP *, SP *); // Подменю поиска

SP *Seach (SP *, int); // Функция поиска

int Modulus (int, int); // Супервозможности программы

char GetChar (int, char, int); // Реализация матрицы

int _tmain (int argc, _TCHAR* argv[])

{

setlocale (LC_CTYPE, «russian»);

SP*h1=NULL,*rez=NULL; // Указатели делаем нулевыми

int pm, pm2, pm3, pm4=0, pm5, pm6, pm7, pm8, check1=0, check=0; // Вспомогательные пер.

char c=NULL, ch=NULL, Base1=NULL, Base2=NULL, matrixch=NULL, lol=1; // Вспомгат. пер

HANDLE hConsole;

hConsole = GetStdHandle (STD_OUTPUT_HANDLE);

SetConsoleTextAttribute (hConsole, 2); // цвет консольки

char caRow[80];

int j = 7;

int k = 2;

int l = 5;

int m = 1;

puts («Нажмите любую кнопку, для загрузки программы»);

Screen ();

do

{

menu ();

fflush (stdin);

puts (««);

puts (««);

printf («Ввод пункта меню: «);

scanf («%d»,& pm);

switch (pm)

{

case 1:

do

{

system («cls»);

if (lol==1)

MessageBoxA (0, «Название может содержать латинские буквы и цифры, и иметь длину не более 15 символов. nГод выхода имеет форма XXXX. Пример: 2010. Должен быть больше 1990 и меньше 2100. nРейтинг должен быть больше 0. nДля продолжения нажмите ОКn», «Дорогой пользователь», 0);

menu_enter ();

lol=0;

printf («Ввод пункта меню: «);

scanf («%d»,& pm6);

switch (pm6)

{

case 1:

if (check≠1)

{

system («cls»);

while (h1≠NULL)

h1=Free (h1);

while (ch≠'y')

{

h1=enter (h1);

system («cls»);

puts («n Закончить ввод данных? (y/n)?n»);

ch=getch ();

}

do

{

fflush (stdin);

puts («nnЗаписать в файл (да-y/нет-n)?»);

scanf («%c», & Base2);

}

while (Base2≠'n' & & Base2≠'y'& & Base2≠'Y'& & Base2≠'N');

if (Base2=='Y'|| Base2=='y')

{

save (h1);

puts («nnnnntt Запись данных закончена! Нажмите любую клавишу. «);

getch ();

}

}

else

{

puts («Последовательный ввод невозможен, используйте добавление элементов. «);

puts (««);

puts («Нажмите любую клавишу»);

getch ();

}

check=1;

break;

case 2:

system («cls»);

if (h1≠NULL)

h1=Add (h1);

else

{

puts («Т.к. элемент первый в списке я добавлю его в начало, для продолжения нажмите любую кнопку»);

getch ();

h1=enter (h1);

}

check=1;

break;

case 3:

system («cls»);

pm6=3;

break;

default:

system («cls»);

puts («Неправильно введен пункт меню»);

puts (««);

puts («Нажмите любую клавишу»);

getch ();

break;

}

}

while (pm6≠3);

break;

case 2:

do

{

system («cls»);

output_menu ();

printf («Ввод пункта меню: «);

scanf («%d»,& pm4);

switch (pm4)

{

case 1:

if (h1≠NULL)

Output (h1," Список: «);

else

Notice ();

getch ();

break;

case 2:

if (h1≠NULL)

Output2 (h1);

else

Notice ();

getch ();

break;

case 3:

pm4=3;

break;

default:

puts («Неправильно введен пункт меню»);

puts (««);

puts («Нажмите любую клавишу»);

getch ();

break;

}

}

while (pm4≠3);

break;

case 3:

system («cls»);

if (h1≠NULL)

{

while (rez≠NULL)

rez=Free (rez);

rez=confirming (h1);

if (rez≠NULL)

Output (rez," Результат обработки: «);

else

puts («n В картотеке нет элементов с заданным условием n»);

getch ();

}

else

Notice ();

puts («nНажмите любую клавишуn»);

getch ();

break;

case 4:

do

{

system («cls»);

menu_confiming ();

puts (««);

printf («Ввод пункта меню: «);

scanf («%d»,& pm3);

switch (pm3)

{

case 1:

if (h1≠NULL)

h1=Del (h1);

else

Notice ();

getch ();

break;

9. Инструкция для пользователя

1. Для ввода данных нажмите 1.

1) Выберите один из предложенных пунктов меню:

1) «Последовательный ввод «- Ввод данных, данные сохраняются последовательно, без уточнения места добавления информации.

2) «Уточнить место добавления информации» — Здесь вы можете уточнить место добавления информации, будет выведено подменю с соответствующими пунктами (1-В начало, 2-После заданного, 3-в конец)

3) Выход в надменю (Программа выйдет в надменю ввода)

2. Для вывода данных нажмите 2.

1) Выберите один из пунктов меню:

1) «Вывод всей картотеки» — будет произведен вывод всей картотеки, в случае, если картотека пуста, программа выдаст ошибку.

2) «Вывод справа и слева от элемента» — будет произведен вывод справа и слева от заданного элемента, если картотека пуста, программа выдаст ошибку, если заданный элемент не существует, программа также выдаст ошибку.

3) Выход в надменю (Программа выйдет в надменю вывода)

3. Для формирования новой картотеки по заданному условию нажмите 3.

1) При выборе этого пункта произойдет формирование новой картотеки по заданному условию, в данном случае, программа сформирует новую картотеку из данных, которые соответствуют условию: рейтинг больше n, где n вводится после выбора пункта меню.

2) После успешного формирования данных, программа выдаст соответствующее сообщение, в случае ошибки, соответствующее сообщение

4. Для обработки картотеки нажмите 4:

1) Выберите один из пунктов меню:

1) «Удаление элементов из картотеки» — при выборе этого пункта, Вам будет предоставлен выбор, какой элемент удалить. Введите номер элемента.

2) «Добавление элемента в указанного место» — аналог п. 1.1.2.

3) Выход в надменю (Программа выйдет в надменю обработки)

5. Для поиска элементов нажмите 5:

1) Выберите один из пунктов меню:

1) «Поиск по имени» — при выборе этого пункта, Вам необходимо ввести комбинацию букв для поиска ее в базе данных. Если элементы будут найдены, произойдет вывод, иначе программа сообщит об отсутствии элементов в базе.

2) «Поиск по году» — при выборе этого пункта, Вам необходимо ввести диапазон от a до b годов. Будет осуществлен поиск продуктов в этом диапазоне. Если элементы будут найдены, произойдет вывод, иначе программа сообщит об отсутствии элементов в базе.

3) Выход в надменю (Программа выйдет в надменю поиска)

6. Для сохранения или загрузки файлов нажмите 6:

1) Выберите один из пунктов меню:

1) «Сохранение» — Картотека будет сохранена в файле, имя которого Вы задаете сами. В случае, если картотека пуста, сохранение невозможно.

2) «Загрузка» — Загрузка данных из файла. В случае отсутствия файла, программа сообщит об ошибки.

3) «Выход в надменю» (Программа выйдет в надменю сохранения и загрузки)

7. Для просмотра документов для пользователя нажмите 7:

1) Выберите один из пунктов меню:

1) «Рекомендации по использованию программы» — Основные рекомендации для пользователя по использованию программы.

2) «Инструкция пользователю» — кратка инструкция по использованию программы.

3) «Выход в надменю» (Программа выйдет в надменю вывода)

8. Для выхода из программы нажмите 0

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

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

11. Также замечена нестабильность работы на Windows 8, возможны сбои в сохранении, загрузке и поиске данных.

12. Хорошего Вам дня.

Выводы

программа картотека сортировка алгоритм

Были получение практические навыки в работе со списками и файлами на примере электронной картотеки, создана электронная картотека, хранящаяся на диске, а также программа, обеспечивающая взаимодействие с ней. При выполнении программы полученные результаты совпадают с приведенными в таблицах 1 и 2 «Контрольные примеры». Ошибок не обнаружено. При выполнении курсовой работы получены практические навыки в работе со списками и файлами на языке С/С++.

ПоказатьСвернуть
Заполнить форму текущей работой