Работа со связанными списками
Разработка эскизного и технического проектов программы, ее назначение и область применения. Описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств. Спецификация, описание и тестирование программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 06.11.2017 |
Размер файла | 763,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Разработка эскизного и технического проектов программы
1.1 Задание
1.2 Назначение и область применения
1.3 Технические характеристики
1.3.1 Постановка задачи
1.3.2 Описание алгоритма
1.3.3 Организация входных и выходных данных
1.3.4 Выбор состава технических и программных средств
2. Разработка рабочего проекта
2.1 Разработка программы
2.2 Спецификация программы
2.3 Описание программы
2.4 Тестирование программы
3. Диаграмма классов
4. Внедрение
Список использованной литературы
Приложение
Введение
Курсовая работа «Работа со связанными списками» посвящена созданию рабочей программы, позволяющей работать с массивами данных.
Рабочая программа представляет оператору работать с массивом данных, просматривать, сортировать, добавлять и удалять данные из заданного списка, который храниться в файле базы данных.
Рабочая программа реализуется в консольной технологии, занимает не более 15 кбайт памяти. Может работать под операционной системой Windows ХР и более ранних версиях Windows, на процессорах начиная 486 серии.
Данная курсовая работа имеет практическое применение: при небольшой модификации данного проекта можно создать рабочую программу для хранения небольших баз данных.
1. Разработка эскизного и технического проектов программы
1.1 Задание
В курсовой работе необходимо создать консольное приложение для работы со списками, позволяющее отображать, сортировать и редактировать массив данных.
Консольное приложение должно:
- по заданной команде отображать список данных;
- по заданным критериям сортировки, сортировать список данных;
- по пунктам добавлять запись в массив;
- построчно удалять записи из массива;
- иметь удобный интерфейс использования;
Интерфейс программы должен представлять собой собственное консольное окно с заголовком и вводом-выводом расчетных данных.
1.2 Назначение и область применения
Назначение программы - работа с массивом данных, который представляет собой автоматически пронумерованный список.
Область применения программы - создание различных небольших баз данных для учета.
1.3 Технические характеристики
1.3.1 Постановка задачи
Необходимо разработать программу для чтения из файла базы данных, методами просмотра, сортировки и изменения её и последующей записью получившихся результатов обратно в файл для сохранения результата.
1.3.2 Описание алгоритма
В программе решаются одновременно несколько задач:
1) Создание меню - удобного интерфейса пользователя.
2) Решение вопроса с чтением и записи в файл.
3) Создание методов сортировки данных по заданным параметрам.
4) Создание метода добавления и удаления записи в массив.
5) Вывод результатов работы с базой на экран.
Для начала, создаётся класс, в котором мы объявим переменные списка, а так же указатели на предыдущий и следующий элемент списка.
Далее, нужно прочитать файл, в котором уже создана база данных.
Узнаем сколько строк в файле и создаем массив из строк.
После этого, программа позволяет работать с массивом данных.
При окончании работы, программа должна записать данные обратно в файл.
1.3.3 Организация входных и выходных данных
Входные данные - данные из файла базы данных, вводимые номера пунктов меню, элементы списка.
Выходные данные - элементы списка, запись в файл базы данных.
Кроме того, при запуске программы на экран выводиться пользовательское меню.
1.3.4 Выбор состава технических и программных средств
Средства, используемые в данной работе, содержатся в интегрированной среде разработки (IDE) Microsoft Visual C++ 2013 (далее VS). Эта среда предоставляет набор инструментов, которые помогают в создании и изменении кода, а также в обнаружении и исправлении ошибок. В VS для организации работы служат проекты и решения. При написании программы на языке C++ с помощью VS первым этапом является выбор типа проекта. Для каждого типа проекта VS устанавливает параметры компилятора и генерирует стартовый код. Так как задача ставились написать консольное приложение, то запускался мастер приложений Win32 и создавался пустой проект - без файлов исходного кода. В пустой проект через обозреватель решений добавлялись файлы исходного кода «main.cpp», «MENU.cpp», «STUD.cpp», «function.cpp» и заголовочные файлы «headers.h», «MENU.h», «function.h» и «STUD.h». Далее все файлы компилировались, исправлялись ошибки, полученные при компиляции, создавался загрузочный (исполнительный) модуль, он запускался на выполнение. При запуске на выполнение возникали ошибки в логике программы, которые в дальнейшем были исправлены. В конечном итоге получился исполнительный модуль - рабочая программы «Kursivaya.exe».
2. Разработка рабочего проекта
2.1 Разработка программы
Программа предназначена для функционирования в среде Windows. Это приложение, хотя и разрабатывалось в среде визуального программирования, но использует консольное окно. Таким образом, программирование строится на процессе написания кода, придающего консольному окну и программе в целом необходимую функциональность. Окно программы изображено на Рисунке 1.
Рисунок 1. Консольное окно программы
Окно программы выводится только один раз. Позиции для вывода данных определены программой. По окончании расчета программа предлагает нажать любую клавишу.
2.2 Спецификация программы
В спецификации программы определены основные файлы программы:
Таблица 1. Список программных файлов
Обозначения |
Наименование |
Примечание |
|
Kursovaya.exe |
Исполняемая программа |
Входная точка в программу |
|
main.срр |
Главная функция |
Занимается вызовом основных вычислительных функций |
|
MENU.cpp |
Файл класса |
Формирование списка меню |
|
Function.cpp |
Файл класса |
Занимается описанием всех функций для ввода и вывода расчетных данных |
|
STUD.cpp |
Файл класса |
Создание и разрушение класса |
|
MENU.h |
Файл класса |
Инициализация переменных для класса |
|
Function.h |
Файл класса |
Инициализация переменных для класса, прототипы функций |
|
STUD.h |
Файл класса |
Инициализация переменных для класса |
|
headers.h |
Файл включений |
Собрание включений библиотек, необходимых для работы программы |
|
Student.db |
Файл базы данных |
Файл для хранения рабочих данных списка (массива) |
2.3 Описание программы
При создании программы использовался модульный принцип построения программ. Все исходные модули логически разделены на файлы. Программа состоит из 8-х файлов: «main.срр», «MENU.cpp», «STUD.cpp», «function.cpp», «function.h» «MENU.h», «STUD.h», «headers.h».
Файл «main.срр» - главный, является по своей сути управляющим. Здесь осуществляется вход в программу. Этот модуль вызывает функции из другого модуля - файла класса «MENU.ccp», который в свою очередь опирается на функции, созданные в классе function.
Функции, используемые в «main.ccp» и описанные в модуле «MENU.срр» вызываются в ходе работы программы:
- Menu.Menu(); - функция вывода на экран меню.
Функции, используемые в «function.ccp» вызываются в ходе работы программы:
- Title() - функция формирования и вывода на экран заголовка меню.
- Menu() - функция формирования и вывода на экран меню, а также вызова остальных функций.
- Readfile() - функция чтения файла базы данных.
- Createlist() - функция создания списка.
- Printlist() - функция вывода на экран списка.
- SetConsoleCursorPosition() - системная функция установки курсора на заданные координаты.
- SetConsoleTextAttribute() - системная функция установки цвета символа и поля.
- system("cls") - системная функция очистки экрана.
- Addtolist() - функция добавления данных в список.
- Sortlist(Х) - функция сортировки данных по параметру, где Х - параметр.
- Removefromlist(Х) - функция удаления записи по параметру, где Х - параметр.
- Writefie() - функция записи результатов работы в файл.
2.4 Тестирование программы
1) Тестирование запуска программы. На Рисунке 2 показано окно при выполнении запуска программы.
Рисунок 2. Запуск программы.
2) Тестирование отображения списка. На Рисунке 3 показано окно программы во время отображения списка.
Рисунок 3. Отображение списка.
3) Тестирование сортировки записей. На Рисунке 4 (а-е) показаны этапы работы программы при возможных типах сортировки.
а) Вход в меню сортировки |
б) Сортировка по номеру |
|
в) Сортировка по имени |
г) Сортировка по названию курса |
|
д) Сортировка по курсу |
е) Сортировка по успеваемости |
Рисунок 4. Отображение сортировки
При нажатии клавиши «0» программа выходит в главное меню.
4) Тестирование добавления новой записи. На Рисунке 5 отображен процесс добавления (а) новой записи и результат (б).
Рисунок 5. Добавление новой записи: а - процесс добавления новой записи, б - результат добавления записи
При нажатии клавиши «0» процесс добавления прерывается.
5) Тестирование удаления одной из записи на примере курса.
а) Отображение списка до удаления |
б) Меню удаления записи |
|
в) Процесс выбора записи |
г) Результат удаления записи |
Рисунок 6. Удаление записи.
При компилировании программы в среде разработки (IDE) Microsoft Visual C++ 2008 никаких ошибок и замечаний не возникло.
3. Диаграмма классов
С помощью встроенного в Virtual Studio Ultimate 2013 инструмента «Карта кода» выстраиваем диаграмму классов, которая показана на Рисунке 7.
Рисунок 7. Диаграмма классов.
4. Внедрение
Программа «Kursovaya.ехе» - консольное приложение, занимает объем не более 15 Кбайт. Для ее выполнения необходим минимальный состав аппаратурных средств: операционная система Windows 95, процессор 486 серии, оперативная память 4 Мбайт, память видеокарты 512 Кбайт, жесткий диск 544 Мбайт, экран, клавиатура, мышь.
Рабочая программа из каталога «Release» проекта «Kursovaya», можно скопировать на жесткий или съемный диск.
При запуске рабочей программы на экран выводиться результат вычислений.
программа алгоритм данные тестирование
Список использованной литературы
1. Герберт Шилдт. Полный справочник по С++. Четвертое издание. Москва. Издательский дом «Вильямс». 2009 г.
2. В.И. Шупляк, С++, Практический курс, Учебное пособие., Минск, «Новое знание», 2008 г.
3. MSDN -справочник по системе, операторам, функциям для среды разработки Microsoft Visual Studio 2008 (2010) по языку С++.
4. Голуб Дж. (Gene H. Golub), Ван Лоун Ч. (Charles F. Van Loan) Матричные вычисления. -- М.: Мир, 1999, 548с., ил. (ISBN 5-03-002406-9)
5. Хорн Р. (Roger A. Horn), Джонсон Ч. (Charles C. Johnson) Матричный анализ. -- М.: Мир, 1989, 655с., ил. (ISBN 5-03-001042-4)
Приложение
Листинг программы «Определение ортогональной матрицы»
Главный модуль программы - main.cpp
#include "headers.h"
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
function func; //Переменная для связывания функций и меню.
MENU Menu(func); //Создаем переменную со структурой MENU
Menu.Menu(); //Вызываем
return 0;
}
Модуль программы - MENU.cpp
#include "headers.h"
MENU::MENU(function obj)
{
ob = obj; //Для того, чтобы меню знало о функции.
//определим дескрипторы ввода / вывода
in = GetStdHandle(STD_INPUT_HANDLE);
out = GetStdHandle(STD_OUTPUT_HANDLE);
}
MENU::~MENU()
{
}
void MENU::Menu()
{
ob.Readfile(); //Читаем файл со списком
ob.Createlist(); //Создаем список
int x = 0, y = 0, z = 0; //Пункты меню
ob.Title(XY, out); //Заголовок меню (дальше описывать не будем)
XY.X = 0; XY.Y = 3; //Координаты курсора
SetConsoleTextAttribute(out, 0x0a);//цвет фона и символа
cout << "Меню:" << endl
<< "1) Показать список" << endl
<< "2) Сортировать список" << endl
<< "3) Добавить запись" << endl
<< "4) Удалить запись" << endl
<< "0) Выход" << endl;
cin >> x;
system("cls");
while (x)
{
switch (x)
{
case 1:
system("cls");
ob.Title(XY, out);
XY.X = 0; XY.Y = 13;
SetConsoleCursorPosition(out, XY); //установка курсора
ob.Printlist();
break;
case 2:
y = 0;
system("cls");
ob.Title(XY, out);
XY.X = 0; XY.Y = 3;
SetConsoleCursorPosition(out, XY); //установка курсора
SetConsoleTextAttribute(out, 0x0b);//цвет фона и символа
cout << "\tСортировка:" << endl
<< "1) Сортировать список по номеру" << endl
<< "2) Сортировать список по имени" << endl
<< "3) Сортировать список по названию курса" << endl
<< "4) Сортировать список по номеру курса" << endl
<< "5) Сортировать список по успеваемости" << endl
<< "0) Выход в предыдущее меню" << endl;
cin >> y;
system("cls");
while (y)
{
switch (y)
{
case 1:
XY.X = 0; XY.Y = 13;
SetConsoleCursorPosition(out, XY); //установка курсора
ob.Sortlist(1);
break;
case 2:
XY.X = 0; XY.Y = 13;
SetConsoleCursorPosition(out, XY); //установка курсора
ob.Sortlist(2);
break;
case 3:
XY.X = 0; XY.Y = 13;
SetConsoleCursorPosition(out, XY); //установка курсора
ob.Sortlist(3);
break;
case 4:
XY.X = 0; XY.Y = 13;
SetConsoleCursorPosition(out, XY); //установка курсора
ob.Sortlist(4);
break;
case 5:
XY.X = 0; XY.Y = 13;
SetConsoleCursorPosition(out, XY); //установка курсора
ob.Sortlist(5);
break;
default:
break;
}
ob.Title(XY, out);
XY.X = 0; XY.Y = 3;
SetConsoleCursorPosition(out, XY); //установка курсора
SetConsoleTextAttribute(out, 0x0b);//цвет фона и символа
cout << "\tСортировка:" << endl
<< "1) Сортировать список по номеру" << endl
<< "2) Сортировать список по имени" << endl
<< "3) Сортировать список по названию курса" << endl
<< "4) Сортировать список по номера курса" << endl
<< "5) Сортировать список по успеваемости" << endl
<< "0) Выход в предыдущее меню" << endl;
cin >> y;
system("cls");
}
break;
case 3:
SetConsoleTextAttribute(out, 0x0D);//цвет фона и символа
ob.Addtolist();
break;
case 4:
z = 0;
system("cls");
ob.Title(XY, out);
XY.X = 0; XY.Y = 3;
SetConsoleCursorPosition(out, XY); //установка курсора
SetConsoleTextAttribute(out, 0x0c);//цвет фона и символа
cout << "\tУдаление записи:" << endl
<< "1) Удаление записи по названию курса" << endl
<< "2) Удаление записи по имени студента" << endl
<< "3) Удаление записи по № записи" << endl
<< "4) Удаление записи по номеру курса" << endl
<< "0) Выход в предыдущее меню" << endl;
cin >> z;
system("cls");
while (z)
{
switch (z)
{
case 1:
ob.Removefromlist(1);
break;
case 2:
ob.Removefromlist(2);
break;
case 3:
ob.Removefromlist(3);
break;
case 4:
ob.Removefromlist(4);
break;
default:
break;
}
ob.Title(XY, out);
XY.X = 0; XY.Y = 3;
SetConsoleCursorPosition(out, XY); //установка курсора
SetConsoleTextAttribute(out, 0x0c);//цвет фона и символа
cout << "\tУдаление записи:" << endl
<< "1) Удаление записи по названию курса" << endl
<< "2) Удаление записи по имени студента" << endl
<< "3) Удаление записи по № записи" << endl
<< "4) Удаление записи по номеру курса" << endl
<< "0) Выход в предыдущее меню" << endl;
cin >> z;
system("cls");
}
break;
default:
break;
}
ob.Title(XY, out);
XY.X = 0; XY.Y = 3;
SetConsoleCursorPosition(out, XY); //установка курсора
SetConsoleTextAttribute(out, 0x0a);//цвет фона и символа
cout << "Меню:" << endl
<< "1) Показать список" << endl
<< "2) Сортировать список" << endl
<< "3) Добавить запись" << endl
<< "4) Удалить запись" << endl
<< "0) Выход" << endl;
cin >> x;
system("cls");
}
ob.Writefie();
}
Модуль программы - MENU.h
#pragma once
#include "headers.h"
class MENU
{
public:
int k;
MENU(function);
~MENU(void);
void Menu();
function ob;
HANDLE in, out;
COORD XY;
};
Модуль программы - STUD.cpp
#include "headers.h"
STUD::STUD(void) //Конструктор
{
}
STUD::~STUD(void) //Деструктор
{
}
Модуль программы - STUD.h
#pragma once
class STUD
{
public:
int ID;
char Number[50];
char Name[50];
int kurs;
int uspev;
STUD *Next;
STUD *Prew;
STUD(void);
~STUD(void);
};
Модуль программы - function.cpp
#include "headers.h"
function::function()
{}
function::~function()
{}
int function::Readfile() //Функция для чтения файла и выделения памяти
{
FILE *fin;
zapis = 0; //Количество строк в начале процедуры
char str[100];
fopen_s(&fin, "C:\\student.db", "rb");
if (!fin){ printf_s("файл не создан!"); return 0; }
//чтение
while (!feof(fin))
{
fgets(str, 100, fin);
zapis++; //Считаем количество строк
}
//выделение памяти
student = new STUD[zapis]; //Создаем одномерный массив размером с количество строк
//переустановка на начало
fseek(fin, 0, SEEK_SET);
//формирование массива STUD
for (int i = 0; i<zapis; i++)
{
fgets(str, 100, fin);
int kol = strlen(str);//реальная длина строки
//деление на лексемы и разбор
char *p = ";", *lex;
//выделение ID
lex = strtok(str, p);
student[i].ID = atoi(lex);
//выделение имени студента
lex = strtok(NULL, p);
strcpy(student[i].Name, lex);
//Выделение по названию курса
lex = strtok(NULL, p);
strcpy(student[i].Number, lex);
//выделение по курсу
lex = strtok(NULL, p);
student[i].kurs = atoi(lex);
//выделение по успеваемости
lex = strtok(NULL, p);
student[i].uspev = atoi(lex);
}
fclose(fin);
return 1;
}
void function::Createlist() //Функция создания списка
{
pSTUD = new STUD; //Формирование нулевого элемента списка
head = pSTUD; //Создаем "голову"
tail = pSTUD; //Создаем "хвост"
pSTUD->ID = student[0].ID; //Записываем нулевой (первый) элемент в массив (номер студента)
strcpy(pSTUD->Number, student[0].Number); //Добавляем данные элемента (Название курса)
strcpy(pSTUD->Name, student[0].Name); //Добавляем данные элемента (ФИО)
pSTUD->kurs = student[0].kurs; //Добавляем данные элемента (курс)
pSTUD->uspev = student[0].uspev; //Добавляем данные элемента (Успеваемость)
pSTUD->Next = NULL; //Указываем что следующего элемента нет
pSTUD->Prew = NULL; //Указываем что предыдущего элемента нет
for (int i = 1; i<zapis; i++) //Заполняем массив (список)
{
tail = new STUD; //Создаем "хвост" структурой
pSTUD->Next = tail; //Добавляем в "хвост" предыдущего списка элемент (расширяем список)
tail->ID = student[i].ID; //Записываем следующий элемент в массив (номер студента)
strcpy(tail->Number, student[i].Number); //Добавляем данные элемента (Название курса)
strcpy(tail->Name, student[i].Name); //Добавляем данные элемента (ФИО)
tail->kurs = student[i].kurs; //Добавляем данные элемента (курс)
tail->uspev = student[i].uspev; //Добавляем данные элемента (Успеваемость)
tail->Next = NULL; //Обрубаем список
tail->Prew = pSTUD; //Приращение массива
pSTUD = tail; //Переписываем
}
}
void function::Printlist() //Функция вывода на экран списка
{
pSTUD = head;
cout << "№" << "\tИмя студента" << "\tНазвание курса" << "\tКурс" << "\tУспеваемость" << endl;
while (pSTUD)
{ //Перебераем элементы списка и выводим на экран (далее такая структура кода будет в сортировке (не будем описывать))
cout << pSTUD->ID << "\t" << pSTUD->Name << "\t" << pSTUD->Number << "\t\t" << pSTUD->kurs << "\t" << pSTUD->uspev << endl;
pSTUD = pSTUD->Next;
}
}
void function::Sortlist(int k)
{
switch (k)
{
case 1: // Сортировка по №
cout << "№" << "\tИмя студента" << "\tНазвание курса" << "\tКурс" << "\tУспеваемость" << endl;
for (int i = 1; i<zapis + 1; i++)
{
pSTUD = head;
while (pSTUD)
{
if (pSTUD->ID == i) //(см. PrintList)
cout << pSTUD->ID << "\t" << pSTUD->Name << "\t" << pSTUD->Number << "\t\t" << pSTUD->kurs << "\t" << pSTUD->uspev << endl;
pSTUD = pSTUD->Next;
}
}
break;
case 2: // Сортировка по имени
cout << "№" << "\tИмя студента" << "\tНазвание курса" << "\tКурс" << "\tУспеваемость" << endl;
for (char ch = 'А'; ch<'Я'; ch++) // Учитывая регистр
{
pSTUD = head;
while (pSTUD)
{
if (pSTUD->Name[0] == ch)//(см. PrintList)
cout << pSTUD->ID << "\t" << pSTUD->Name << "\t" << pSTUD->Number << "\t\t" << pSTUD->kurs << "\t" << pSTUD->uspev << endl;
pSTUD = pSTUD->Next;
}
}
break;
case 3: // Сортировка по названию курса
cout << "№" << "\tИмя студента" << "\tНазвание курса" << "\tКурс" << "\tУспеваемость" << endl;
for (char ch = 'А'; ch<'Я'; ch++) // Учитывая регистр
{
pSTUD = head;
while (pSTUD)
{
if (pSTUD->Number[1] == ch)//(см. PrintList)
cout << pSTUD->ID << "\t" << pSTUD->Name << "\t" << pSTUD->Number << "\t\t" << pSTUD->kurs << "\t" << pSTUD->uspev << endl;
pSTUD = pSTUD->Next;
}
}
break;
case 4: // Сортировка по курсу
cout << "№" << "\tИмя студента" << "\tНазвание курса" << "\tКурс" << "\tУспеваемость" << endl;
for (int i = 0; i<1000; i++)
{
pSTUD = head;
while (pSTUD)
{
if (pSTUD->kurs == i)//(см. PrintList)
cout << pSTUD->ID << "\t" << pSTUD->Name << "\t" << pSTUD->Number << "\t\t" << pSTUD->kurs << "\t" << pSTUD->uspev << endl;
pSTUD = pSTUD->Next;
}
}
break;
case 5: // Сортировка по успеваемости
cout << "№" << "\tИмя студента" << "\tНазвание курса" << "\tКурс" << "\tУспеваемость" << endl;
for (int i = 0; i<10; i++)
{
pSTUD = head;
while (pSTUD)
{
if (pSTUD->uspev == i)//(см. PrintList)
cout << pSTUD->ID << "\t" << pSTUD->Name << "\t" << pSTUD->Number << "\t\t" << pSTUD->kurs << "\t" << pSTUD->uspev << endl;
pSTUD = pSTUD->Next;
}
}
break;
default:
break;
}
}
int function::Addtolist()
{
pSTUD = tail;
tmp = new STUD;
tmp->ID = (pSTUD->ID) + 1;
cout << "Для выхода нажмите 0" << endl << endl;
cout << "Добавление студента:" << endl << "Введите название курса (например: ФИБВ-12):" << endl;
cin.sync();
cin.get(ch1, 50);
strcpy(tmp->Number, ch1);
if (ch1[0] == '0')
{
system("cls");
return 0;
}
cout << "Введите фамилию и инициалы студента:" << endl;
cin.sync();
cin.get(ch2, 50);
strcpy(tmp->Name, ch2);
if (ch2[0] == '0')
{
system("cls");
return 0;
}
cout << "Введите номер курса:" << endl;
cin >> in1;
tmp->kurs = in1;
if (in1 == 0)
{
system("cls");
return 0;
}
cout << "Введите успеваемость студента:" << endl;
cin >> in1;
tmp->uspev = in1;
if (in1 == 0)
{
system("cls");
return 0;
}
tmp->Next = NULL;
tmp->Prew = pSTUD;
pSTUD->Next = tmp;
tail = tmp;
cout << endl;
cout << "Запись добавлена:" << endl;
cout << endl;
cout << "№" << "\tИмя студента" << "\tНазвание курса" << "\tКурс" << "\tУспеваемость" << endl;
cout << tmp->ID << "\t" << tmp->Name << "\t" << tmp->Number << "\t\t" << tmp->kurs << "\t" << tmp->uspev << endl;
system("cls");
return 1;
}
void function::Removefromlist(int k)
{
switch (k)
{
case 1:
pSTUD = head;
cout << "Введите название курса" << endl;
cin.sync();
cin.get(ch1, 50);
while (pSTUD)
{
if (!strcmp(pSTUD->Number, ch1))
break;
pSTUD = pSTUD->Next;
}
if (pSTUD != head&&pSTUD != tail)
{
tmp = pSTUD->Prew;
tmpnew = pSTUD->Next;
tmp->Next = tmpnew;
tmpnew->Prew = tmp;
}
if (pSTUD == head)
{
head = pSTUD->Next;
head->Prew = NULL;
}
if (pSTUD == tail)
{
tail = pSTUD->Prew;
tail->Next = NULL;
}
break;
case 2:
pSTUD = head;
cout << "Введите Фамилию и инициалы" << endl;
cin.sync();
cin.get(ch2, 50);
while (pSTUD)
{
if (!strcmp(pSTUD->Name, ch2))
break;
pSTUD = pSTUD->Next;
}
if (pSTUD != head&&pSTUD != tail)
{
tmp = pSTUD->Prew;
tmpnew = pSTUD->Next;
tmp->Next = tmpnew;
tmpnew->Prew = tmp;
}
if (pSTUD == head)
{
head = pSTUD->Next;
head->Prew = NULL;
}
if (pSTUD == tail)
{
tail = pSTUD->Prew;
tail->Next = NULL;
}
break;
case 3:
pSTUD = head;
cout << "Введите №" << endl;
cin >> in1;
while (pSTUD)
{
if (pSTUD->ID == in1)
break;
pSTUD = pSTUD->Next;
}
if (pSTUD != head&&pSTUD != tail)
{
tmp = pSTUD->Prew;
tmpnew = pSTUD->Next;
tmp->Next = tmpnew;
tmpnew->Prew = tmp;
}
if (pSTUD == head)
{
head = pSTUD->Next;
head->Prew = NULL;
}
if (pSTUD == tail)
{
tail = pSTUD->Prew;
tail->Next = NULL;
}
break;
case 4:
pSTUD = head;
cout << "Введите курс" << endl;
cin >> in1;
while (pSTUD)
{
if (pSTUD->kurs == in1)
break;
pSTUD = pSTUD->Next;
}
if (pSTUD != head&&pSTUD != tail)
{
tmp = pSTUD->Prew;
tmpnew = pSTUD->Next;
tmp->Next = tmpnew;
tmpnew->Prew = tmp;
}
if (pSTUD == head)
{
head = pSTUD->Next;
head->Prew = NULL;
}
if (pSTUD == tail)
{
tail = pSTUD->Prew;
tail->Next = NULL;
}
break;
default:
break;
}
}
void function::Title(COORD XY, HANDLE out) //Чтобы заголовок висел всегда после очистки (минимизация кода)
{
XY.X = 35; XY.Y = 1;
SetConsoleCursorPosition(out, XY); //установка курсора
SetConsoleTextAttribute(out, 0x0f);//цвет фона и символа
cout << "Список студентов:" << endl << endl;
}
int function::Writefie()
{
ofstream fout;
pSTUD = head;
fout.open("C:\\student.db", ios::binary | ios::out);
if (fout.is_open() == NULL){ cout << "файл не создан!" << endl; return 0; }
while (pSTUD->Next)
{
fout << pSTUD->ID << ";" << pSTUD->Name << ";" << pSTUD->Number << ";" << pSTUD->kurs << ";" << pSTUD->uspev << ";\r\n";
pSTUD = pSTUD->Next; // или prew
}
fout << pSTUD->ID << ";" << pSTUD->Name << ";" << pSTUD->Number << ";" << pSTUD->kurs << ";" << pSTUD->uspev << ";";
fout.close();
return 1;
}
Модуль программы - function.h
#pragma once
#include "headers.h"
class function
{
private:
STUD *student, *pSTUD, *head, *tail, *tmp, *tmpnew; //Переменные для работы со списком
char ch1[50], ch2[50]; //Переменные для добавления в список по названию курса и имени
int zapis, in1;
HANDLE in, out; //Дескрипторы ввода-вывода
COORD XY; //координаты
public:
void Createlist(), Printlist(), Sortlist(int), Title(COORD, HANDLE), Removefromlist(int); //Прототипы функций
int Readfile(), Addtolist(), Writefie(); //Прототипы функций, переменная количества строк, переменная для работы со списком
function();
~function();
};
Модуль программы - headers.h
#include "windows.h"
#include <fstream>
#include <iostream>
#include "STUD.h"
#include "MENU.h"
#include "function.h"
using namespace std;
Размещено на Allbest.ru
...Подобные документы
Разработка эскизного и технического проектов программы, ее назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка рабочего проекта, спецификация программы.
курсовая работа [159,8 K], добавлен 26.01.2010Разработка эскизного и технического проектов программы, ее назначение и область применения, технические характеристики. Организация входных и выходных данных, выбор состава технических и программных средств. Текст программы, ее описание и тестирование.
курсовая работа [1,3 M], добавлен 15.11.2009Разработка эскизного и технического проектов программы, ее назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка рабочего проекта, спецификация программы.
курсовая работа [700,6 K], добавлен 26.01.2010Разработка эскизного и технического проектов программы "Шифр Цезаря": назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка, тест и внедрение программы.
курсовая работа [563,7 K], добавлен 15.07.2012Разработка эскизного и технического проекта программы идентификации личности по отпечатку. Назначение и область применения, описание алгоритма, входных и выходных данных. Выбор состава технических и программных средств. Тестирование и внедрение продукта.
курсовая работа [61,9 K], добавлен 12.05.2015Разработка эскизного и технического проектов программы, моделирующей игру "Кости". Постановка задачи, описание алгоритма; написание программы, организация входных и выходных данных; выбор программных средств; спецификация, текст, условия выполнения.
курсовая работа [93,8 K], добавлен 11.02.2012Разработка эскизного и технического проектов компьютерной игры "Скачки". Назначение и область применения программы. Выбор состава технических и программных средств. Составление текста программы, ее спецификация, тестирование и условия выполнения.
курсовая работа [681,4 K], добавлен 18.10.2014Разработка Windows-приложения, представляющего собой компьютерную игру "Кости". Организация входных и выходных данных. Минимальные требования. Выбор состава технических и программных средств. Спецификация программы, ее описание и внедрение, тестирование.
курсовая работа [475,8 K], добавлен 18.07.2012Разработка эскизного и технического проектов программы, приложения "Телефонный справочник". Организация входных и выходных данных. Выбор состава технических средств. Интегрированная среда разработки Delphi 7. Разработка рабочего проекта, внедрение.
курсовая работа [427,4 K], добавлен 21.07.2012Организация входных и выходных данных. Выбор состава технических и программных средств. Функционал для заполнения заявки для постоянно клиента. Форма вывода справки по программе. Таблица файлов, входящих в проект. Тестирование программы, ее листинг.
курсовая работа [2,5 M], добавлен 25.05.2014Разработка эскизного и технического проекта программы игры "Собери картинку". Назначение и область применения, основные технические характеристики. Разработка рабочего проекта, разработка и спецификация программы игры. Описание и тестирование программы.
курсовая работа [22,6 K], добавлен 10.06.2010Назначение и область применения, технические характеристики, постановка задачи, описание алгоритма и организация входных и выходных данных для программы. Разработка, описание логической структуры, используемые технические средства и условия выполнения.
курсовая работа [969,3 K], добавлен 26.03.2009Выбор состава технических и программных средств разработки системы. Описание входных и выходных данных. Выбор модели базы данных. Разработка подсистемы наполнения базы данных, формирования отчетов. Разработка интерфейса пользователя, тестирование системы.
курсовая работа [3,7 M], добавлен 04.12.2014Разработка программы для автоматизации расчетов на телефонной станции. Описание входной и выходной информации, комплекс технических средств. Интерфейс конечного пользователя. Проектирование программных модулей представления входных и выходных данных.
курсовая работа [460,1 K], добавлен 26.06.2015Разработка в среде Delphi приложения "Записная книжка" для ввода и корректировки информации, поиска данных. Выбор состава технических и программных средств. Текст программы, ее описание и тестирование. Основные условия программы, требования к компьютеру.
курсовая работа [565,7 K], добавлен 08.12.2011Разработка эскизного и технического проектов программы преобразования заданной матрицы в ортогональную матрицу. Сравнивание транспонированной матрицы с обратной с целью проверки ортогональности. Выбор состава технических и программных средств реализации.
курсовая работа [52,1 K], добавлен 09.12.2014Разработка программы тестирования студентов по MS PowerPoint с кодом на языке Delphi. Создание алгоритма для решения функциональных требований задачи. Описание переменных, вспомогательных процедур, входных и выходных данных для реализации программы.
курсовая работа [1,5 M], добавлен 21.09.2010Организация входных и выходных данных для задачи нахождения общей точки для всех кругов на плоскости. Словесное описание действий и операций, выполняемых программой для получения конечного результата. Выбор технических и программных средств приложения.
курсовая работа [314,1 K], добавлен 30.06.2014Технические характеристики игрового приложения для операционной системы Microsoft Windows. Обоснование выбора состава технических и программных средств. Характеристика процесса разработки программы "Угадайка", ее спецификация, описание и тестирование.
курсовая работа [422,4 K], добавлен 10.06.2011Выбор состава технических и программных средств для создания данного приложения "Экзаменатор", использование среды разработки Borland Delphi. Основные компоненты и спецификация программы. Используемые технические средства, описание и запуск программы.
курсовая работа [540,8 K], добавлен 18.07.2012