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

Представление (построение, создание) списка данных в виде линейного однонаправленного списка. Формирование массива данных. Вывод данных на экран. Алгоритм удаления, перемещения данных. Сортировка методом вставки. Алгоритм загрузки данных из файла.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 16.05.2015
Размер файла 2,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ

(национальный исследовательский университет)» (МАИ)

Курсовая работа

на тему: «Обработка динамических структур данных»

по дисциплине: Программирование на ЯВУ

Студента гр. ДА 2-49

Буйная М.А/

Байконур 2014 г.

Аннотация

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

Алгоритм решения задач выполнен в программе Microsoft Visual в среде языка Си++.

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

Разработать алгоритм и составить программу обработки списка данных «Гостиница», выполнив следующие этапы:

1. Представление (построение, создание) списка данных в виде линейного однонаправленного списка с элементами сложного типа

2. Выполнить удаление из исходного списка сведений о гостиницах, в которых нет свободных номеров

3. Выполнить перемещение в начало исходного списка сведений о пятизвёздочных гостиницах

4. Выполнить сортировку исходного списка данных по полю «общее количество мест» методом вставки

5. Создать пользовательский интерфейс, с помощью которого будет проходить работа с программой, используя средства текстового и графического режимов работы. Интерфейс должен содержать:

- все основные пункты работы (создание, удаление, перемещение, сортировка, выход, просмотр результатов работы на каждом этапе);

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

Требования к программе:

- Программа должна обеспечивать ввод исходных данных с клавиатуры(не менее 20 записей);

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

- Реализацию алгоритма необходимо выполнить на языке программирования С/С++.

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

Для записи данных о туризме необходимо воспользоваться структурами. Структура позволяет объединить в одном объекте разнотипные данные с целью их совместной обработки.

Ключевым словом для объявления структуры является слово «struct».

Пример 1:

struct a { int x;

float y;

char mas[15]; }

Это так называемый структурный шаблон. Общий вид описания шаблона:

struct тег(имя структуры) { тип1 имя поля1;

тип2 имя поля2;

тип3 имя поля3;

………………..

тип n имя поля n; };

Структурные переменные удобно изображать в виде дерева или графа.

Пример 2:

z

x y mas

mas0 mas1 ……. Mas14

Рис. 1 - граф структурных переменных примера 1

Изобразим в виде дерева поля записи о гостиницах:

Гостиница

Название Класс Всего мест Свободно Стоимость номера

Рисунок 2 - граф полей записи о гостиницах

2.1 Формирование данных

Запишем структурный шаблон, который будет содержать названия гостиниц, класс гостиницы, общее количество мест, количество свободных номеров, минимальная стоимость номера в сутки:

typedef struct data_{char nazvanie[255];//название гостиницы

int class_;//класс гостиницы //1-5

int kolichestvo_o;//количество мест общее

int kolichestvo_s;//количество мест свободное

int cena;//стоимость номера в сутки

};

Следовательно, будет формироваться массив разнотипных данных

data_

0 nazvanie class_ kolichstvo_o kolichestvo_s cena

data_

n

Рисунок 3 - Массив разнотипных данных полей записи структуры «Гостиница»

2.2 Линейный поиск

Линейный поиск эффективен в массивах, с небольшим количеством элементов, причём элементы в таких массивах никак не отсортированы и не упорядочены. Алгоритм линейного поиска в массивах последовательно проверяет все элементы массива и сравнивает их с ключевым значением. Чтобы убедиться, в отсутствии искомого значения необходимо проверить все элементы массива. У линейного поиска есть один недостаток: если образец не присутствует в массиве, то без принятия предохранительных мер поиск может выйти за границы массива.

Линейный поиск необходим в удалении из исходного списка о гостиницах, в которых нет свободных номеров. Следовательно, решение делится на 3 пункта:

1) Ввести количество гостиниц;

2) Поиск гостиниц, в которых нет свободных номеров;

3) Удалить данные.

void sspisok::udalenie()

{spisok *p;//

int n=0;

if((BegQ!=NULL)&&(EndQ!=NULL))

{

p=BegQ;

while(p!=NULL//поиск номеров

{n++;

if(p->data.kolichestvo_s==0) //если нет свободных номеров

{sspisok::delete_data(n); //удаление гостиницы

n--;//возврат индекса к предыдущему элементу

}

p=p->next;

};

}

}

if((BegQ==NULL)&&(EndQ==NULL))//если список пустой

{cout<<"Список не был создан или пустой"<<endl;

}

else

if((BegQ->data.kolichestvo_o==NULL)&&(EndQ->data.kolichestvo_o==NULL))//проверка на пустоту списка

{cout<<"Список пустой"<<endl;//вывод соотв. сообщения

};

}

Поиск в программе реализован согласно алгоритму линейного поиска.

2.3 Сортировка методом вставки

Рассмотрим сортировку методом вставки. Принцип метода заключается в следующем:

Массив разделяется на 2 части: отсортированную и не отсортированную. Элементы из не отсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушить в ней упорядоченность элементов. В начале работы алгоритма в качестве отсортированной части массива принимают только первый элемент, а в качестве не отсортированной - все остальные элементы.

Таким образом, алгоритм будет состоять из (n-1) - го прохода ( n - размерность массива), каждый из которых будет включать 4 действия:

- взятие очередного i-го отсортированного элемента и сохранение его в дополнительной переменной;

- поиск позиции i в отсортированной части массива, в которой присутствие взятого элемента не нарушит упорядоченности элементов;

- сдвиг элементов массива от i-го до (j-1)-го вправо, чтобы освободить найденную позицию вставки;

- вставка взятого элемента в найденную i-ую позицию

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

void sspisok::sort_mas(long n)//сортировка массива по общему количеству мест

{data_ tmp;

for (int i = 1; i < n; i++) {

for (int j = 0; j < n-i; j++) {

if (c[j].kolichestvo_o > c[j+1].kolichestvo_o) {

tmp = c[j];

c[j] = c[j+1];

c[j+1] = tmp;

}

}

}

};

Сортировка в программе реализована согласно методу вставки.

алгоритм сортировка данные линейный

3 .Алгоритмизация задачи

Схема алгоритмов и пояснение используемых идентификаторов приведены в Приложении Б и руководстве программиста. Текст программы представлен в приложении А.

Решение задачи включает следующие этапы:

1) Формирование массива данных;

2) Вывод данных на экран;

3) Удаление данных;

4) Перемещение данных;

5) Сортировка данных;

6) Запись данных в файл;

7) Загрузка данных из файла;

3.1 Алгоритм формирования данных

При создании списка данных о гостиницах необходимо:

Шаг 1. Ввод размерности массива;

Шаг 2. Цикл: для i=0;i<n;i++ выполнять ввод:

Название Data.nazvanie;

Класс Data.class_;

Общее количество мест - Data.kolichestvo_o;

Количество свободных мест - Data.kolichestvo_s;

Цена - Data.cena;

Шаг 3. Конец цикла;

3.2 Алгоритм вывода данных на экран

Шаг 1. Вывод на экран шапки таблицы с данными

Шаг 2. Цикл: для i=0;i<n;i++ выполнять вывод:

Название Data.nazvanie;

Класс Data.class_;

Общее количество мест - Data.kolichestvo_o;

Количество свободных мест - Data.kolichestvo_s;

Цена - Data.cena;

Шаг 3. Конец цикла;

3.3 Алгоритм удаления данных

Шаг 1. Ввод данных о гостиницах

Шаг 2. Цикл: while(p!=NULL) // пока не найдется гостиница без свободных номеров

При отсутствии свободных номеров в гостинице data.kolichestvo_s==0

удалить данные об этой гостинице sspisok::delete_data(n)

продолжить поиск по циклу (n--).

Шаг 4. Конец цикла;

3.4 Алгоритм перемещения данных

Шаг 1. Ввод данных о гостиницах;

Шаг 2. Цикл while(Q!=NULL)//пока не начало списка

выполнять поиск пятизвездочной гостиницы Q->next->data.class_==5

присвоить указателю Q2 значение указателя Q->next

найденной гостинице присвоить указатель начала списка BegQ=Q2.

Шаг 3. Конец цикла;

3.5 Алгоритм сортировки данных

Шаг 1. Ввод новой переменной tmp и массива данных c[j]

Шаг 2. Циклы: для i=0;i<n-1;i++ , для j = 0; j < n-i; j++ выполнять

Сравнение полей записи общего количества мест в гостинице

Присваивание tmp значения c[j]

Копирование c[j] в массив c[j+1];

Шаг 3. Конец цикла;

3.6 Алгоритм записи данных в файл

Шаг 1. Открытие файла

Шаг 2. Цикл while пока не конец файла выполнять запись данных в файл

Название Data.nazvanie;

Класс Data.class_;

Общее количество мест - Data.kolichestvo_o;

Количество свободных мест - Data.kolichestvo_s;

Цена - Data.cena;

Шаг 3. Конец цикла

Шаг 4. Закрытие файла

3.7 Алгоритм загрузки данных из файла

Шаг 1. Открытие файла;

Шаг 2. Цикл: пока не закончатся данные в файле выполнять

Вывод на экран данных

Название x.nazvanie;

Класс x.class_;

Общее количество мест x.kolichestvo_o;

Количество свободных мест x.kolichestvo_s;

Цена x.cena.

Шаг 3. Конец цикла;

Шаг 4. Закрытие файла;

4. Инструкция по пользованию программой

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

Назначение программы «Гостиница» предназначена для обработки массивов структур, содержащего сведения о гостиницах.

Для запуска программы необходимо:

1) Запустить программу Microsoft Visual C++.

2) Выполнить следующие команды: File\ Open project…\ C:\Users\Маша\Documents\Visual Studio 2008\Projects\Курсовая Отель.sln

3) Запустить программу выполнением опции главного меню Run/Run.

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

cout<<"Menu"<<endl;

cout<<"1.Sformirovat spisok"<<endl;

cout<<"2.Dobavit zapis'"<<endl;

cout<<"3.Udalit' zapis'"<<endl;

cout<<"4.Otobrazit spisok"<<endl;

cout<<"5.Skoirovat v Fail"<<endl;

cout<<"6.Skopirovat v Massiv"<<endl;

cout<<"7.Otobrazit Massiv"<<endl;

cout<<"8.Sortirovat Massiv"<<endl;

cout<<"9.Skopirovat iz Faila"<<endl;

cout<<"10.Nayti zapis' v spiske"<<endl;

cout<<"11.Udalenie otelei bez svobodnih nomerov"<<endl;

cout<<"12.Peremeshenie 5-ti zvezdochnih gostinic"<<endl;

cout<<"0.Vyhod"<<endl;

cout<<endl<<endl;

cout<<"Vyberite:_";

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

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

4.2 Руководство программиста

Данная программа написана с использованием языка Си++. Минимальное количество обрабатываемых данных ограничено (не менее 20). Данные вводятся клавиатуры . Данная программа состоит из основного блока и 12 подпрограмм.

Таблица 4.2.1 - Идентификаторы функции add_data

Переменная

Тип

Назначение

i

long

Указывает номер записи в массиве

n

long

Указывает на количество записей в массиве

Таблица 4.2.2 - Идентификаторы функции delete_data

Переменная

Тип

Назначение

i

long

Указывает номер удаляемой записи в массиве

n

long

Указывает на количество записей в массиве

j

int

Указывает номер удаляемого элемента

Таблица 4.2.3 - Идентификаторы функции sp_copy_mas

Переменная

Тип

Назначение

i

long

Указывает на количество записей в массиве

n

long

Указывает номер записи в массиве

Таблица 4.2.4 - Идентификаторы функции sort_mas

Переменная

Тип

Назначение

i

int

Указывает на количество записей в массиве

n

long

Указывает на номер записи в массиве

j

int

Указывает на номер записи в массиве

tmp

int

Переменная для копирования записи количества номеров

c[j]

char

Переменная для копирования строк

Таблица 4.2.5 - Идентификаторы функции show_mas

Переменная

Тип

Назначение

i

long

Указывает на количество записей в массиве

Таблица 4.2.6 - Идентификаторы функции fail

Переменная

Тип

Назначение

i

int

Указывает номер записи в массиве

n

int

Указывает на количество записей в массиве

Таблица 4.2.7 - Идентификаторы функции find_data

Переменная

Тип

Назначение

t

long

Указывает количество найденных записей

Таблица 4.2.8 - Идентификаторы функции peremesh

Переменная

Тип

Назначение

n

int

Указывает номер записи в массиве

Таблица 4.2.9 - Идентификаторы функции udalenie

Переменная

Тип

Назначение

n

int

Указывает номер записи в массиве

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

1) Создание списка данных

Шаг 1. Запуск программы;

Шаг 2. Выбор пункта формирование списка (1);

Шаг 3. Ввод количества гостиниц (n=32)

Шаг 4. Ввод данных

2) Вывод списка данных

Ожидаемый результат

Название

Класс

Общее количество мест

Количество свободных мест

Минимальная Цена

Milana

4

120

32

2000

Kinder

3

130

22

200

GoGs

5

550

36

5000

Finnish

4

600

32

6000

Dobi

3

250

65

400

Max

3

100

22

400

Apple

2

200

35

220

Evas

4

500

12

1200

Fox

2

45

11

500

Lelik

2

30

10

120

Toto

4

250

13

1300

Gomer

1

15

2

100

Frank

5

777

120

5000

Sandra

3

450

35

4000

Rex

4

600

36

6000

Toll

1

50

21

200

Oleg

1

30

25

100

Kira

1

50

10

150

Ermak

3

320

23

150

UFO

5

750

32

6000

Polli

5

450

65

3500

GHOST

5

120

32

5000

jIjI

3

320

23

4500

Kiska

4

120

32

2000

Gosha

2

250

21

1200

Alex

4

300

23

5500

Lumos

4

250

34

4600

Pappa

3

330

125

2000

Reg

5

600

254

5500

Kollags

2

120

0

100

Gagas

1

20

1

80

Hippo

4

450

125

2000

Полученный результат

Вывод: полученный результат совпал с ожидаемым.

3) Сохранение в файл

Шаг 1. Выберем пункт копировать в файл (5);

Шаг 2. Проверка наличия данных в файле ftext_in.txt.

Вывод: данные сохранены в файле

4) Удаление гостиниц без свободных номеров

Шаг 1. Выберем в меню пункт удаление (11);

Ожидаемый результат:

Название

Класс

Общее количество мест

Количество свободных мест

Минимальная Цена

Milana

4

120

32

2000

Kinder

3

130

22

200

GoGs

5

550

36

5000

Finnish

4

600

32

6000

Dobi

3

250

65

400

Max

3

100

22

400

Apple

2

200

35

220

Evas

4

500

12

1200

Fox

2

45

11

500

Lelik

2

30

10

120

Toto

4

250

13

1300

Gomer

1

15

2

100

Frank

5

777

120

5000

Sandra

3

450

35

4000

Rex

4

600

36

6000

Toll

1

50

21

200

Oleg

1

30

25

100

Kira

1

50

10

150

Ermak

3

320

23

150

UFO

5

750

32

6000

Polli

5

450

65

3500

GHOST

5

120

32

5000

jIjI

3

320

23

4500

Kiska

4

120

32

2000

Gosha

2

250

21

1200

Alex

4

300

23

5500

Lumos

4

250

34

4600

Pappa

3

330

125

2000

Reg

5

600

254

5500

Gagas

1

20

1

80

Hippo

4

450

125

2000

Полученный результат

Вывод: полученный результат совпал с ожидаемым.

5) Перемещение

Шаг 1. Выбрать в меню пункт перемещение (12)

Шаг 2. Перенести пятизвёздочные гостиницы в начало списка:

Следовательно, ожидаемый результат:

Название

Класс

Общее количество мест

Количество свободных мест

Минимальная Цена

Polli

5

450

65

3500

Frank

5

777

120

5000

GHOST

5

120

32

5000

Reg

5

600

254

5500

UFO

5

750

32

6000

GoGs

5

550

36

5000

Milana

4

120

32

2000

Kinder

3

130

22

200

Finnish

4

600

32

6000

Dobi

3

250

65

400

Max

3

100

22

400

Apple

2

200

35

220

Evas

4

500

12

1200

Fox

2

45

11

500

Lelik

2

30

10

120

Toto

4

250

13

1300

Gomer

1

15

2

100

Sandra

3

450

35

4000

Rex

4

600

36

6000

Toll

1

50

21

200

Oleg

1

30

25

100

Kira

1

50

10

150

Ermak

3

320

23

150

jIjI

3

320

23

4500

Kiska

4

120

32

2000

Gosha

2

250

21

1200

Alex

4

300

23

5500

Lumos

4

250

34

4600

Pappa

3

330

125

2000

Gagas

1

20

1

80

Hippo

4

450

125

2000

Полученный результат

Вывод: полученный результат совпал с ожидаемым

6) Сортировка

Шаг 1. Выбрать в меню пункт сортировка массива(8);

Шаг 2. Проверить результаты сортировки;

Ожидаемый результат:

Название

Класс

Общее количество мест

Количество свободных мест

Минимальная Цена

Gomer

1

15

2

100

Gagas

1

20

1

80

Lelik

2

30

10

120

Oleg

1

30

25

100

Fox

2

45

11

500

Toll

1

50

21

200

Kira

1

50

10

150

Max

3

100

22

400

GHOST

5

120

32

5000

Milana

4

120

32

2000

Kiska

4

120

32

2000

Kinder

3

130

22

200

Apple

2

200

35

220

Dobi

3

250

65

400

Toto

4

250

13

1300

Gosha

2

250

21

1200

Lumos

4

250

34

4600

Alex

4

300

23

5500

Ermak

3

320

23

150

jIjI

3

320

23

4500

Pappa

3

330

125

2000

Polli

5

450

65

3500

Sandra

3

450

35

4000

Hippo

4

450

125

2000

Evas

4

500

12

1200

GoGs

5

550

36

5000

Reg

5

600

254

5500

Finnish

4

600

32

6000

Rex

4

600

36

6000

UFO

5

750

32

6000

Frank

5

777

120

5000

Полученный результат:

Вывод: полученный результат совпал с ожидаемым.

7) Загрузка данных из файла

Шаг 1. Выбрать в меню пункт копирование из файла (9);

Шаг 2. Проверить результаты загрузки

Ожидаемый результат:

Полученный результат:

Вывод: полученный результат совпал с ожидаемым.

Заключение

В данной курсовой работе были разработаны и обработаны массивы структур. Программа курсовой работы даёт возможность обработать данные одномерных списков. Все полученные результаты совпали с ожидаемыми, а именно: при выводе списка на экран были показаны все те данные, что вводились при создании; удалены данные, в соответствии с пустыми турами; страны были упорядочены по возрастанию количества билетов. Следовательно, программа работает правильно.

Список используемой литературы

1. Дональд К. «Искусство программирования. 3 том. Сортировка и поиск».

2. Хэзфилд Р., Кирби Л. «Искусство программирования на C++. Фундаментальные алгоритмы, структуры данных и примеры приложений».

3. Либерти Д. «Освой самостоятельно С++»

4. Лафоре Р. «Объектно- ориентированное программирование в С++».

5. Подбельский В. «Язык Cu ++: Учебное пособие».

6. Жарков В. «Visual C++».

Приложение А

// Курсовая_Отель.cpp : main project file.

#include <malloc.h>//для динамических массивов

#include <iostream>//для cin cout

#include <conio.h>//для getch()

#include <fstream>//для файлов

#include <stdio.h>//стандартный ввод вывод

#include <string.h>//библиотека работы со строками

using namespace std;

typedef struct data_{char nazvanie[255];//название гостиницы

int class_;//класс гостиницы 1-5

int kolichestvo_o;//количество мест общее

int kolichestvo_s;//количество мест свободное

int cena;//стоимость номера в сутки

};

typedef struct spisok{data_ data; //структура однонаправленного списка

spisok* next;

};

spisok *BegQ,*EndQ,*Q;//BegQ-начало списка,EndQ-конец списка//Q-основной список

data_ Data;//Data-для ввода данных

data_ *c;//динамическая переменная для массива

data_ *d;//дополнительный массив для сортировки

long nn;//количество элементов в массиве

class sspisok {public:

void form(void);//процедура формирования списка

void add_data(data_);//добавления элемента в конец списка список

void show_sp(void);//просмотр списка данных

void delete_data(long);//удаление элемента списка

void sp_copy_mas();//процедура копирования списка данных в массив

void sort_mas(long);//процедура сортировки массива

void show_mas(long);//вывод массива

void find_data(char*);//поиск в массиве,т.к.линейный

void sp_copy_file(void);//процедура копирования из списка в файл

void file_copy_sp();//процедура заполнения списка из файла

void peremesh();//перемещение 5-ти звёздочных гостиниц в начало списка

void udalenie();//удаление гостиниц без свободных номеров

};

void sspisok::form(void)//процедура формирования однонаправленного списка,Q-сам список

//так как спискок кольцевой начало списка обозначим меткой,значением -1

{Q=new spisok;//создание самого списка

BegQ=new spisok;//создание указателя на начало

EndQ=new spisok;//создание указателя на конец

BegQ->next=EndQ;//начало ссылается на конец

EndQ->next=NULL;//списорк ссылается в конец,а конец в никуда

Q=BegQ;//список лежит в начале

Q->next=EndQ;//след. эл. ссылается в конец

BegQ->data.kolichestvo_o=NULL;//обнуление полей данных

EndQ->data.kolichestvo_o=NULL;//обнуление полей данных

cout<<"Sozdan spisok"<<endl;

}

void sspisok::add_data(data_ Data)//добавление данных

{spisok *p;//для добавления элемента

//для первого элемента

if((BegQ->data.kolichestvo_o==NULL)&&(EndQ->data.kolichestvo_o==NULL))//если список пустой в полях данных

{Q->data=Data;//заполняем поле данных

Q->next=NULL;//указатель следующего элемента пустота

Приложение А(продолжение)

BegQ=Q;//начало списка ссылается на список

Q=BegQ;//список переносим в начало списка

EndQ=BegQ;//конец приравниваем началу

EndQ=Q;//конец списка

BegQ->next=EndQ;//начало ссылается на конец

EndQ->next=NULL;//списорк ссылается в конец,а конец в никуда

}

else

//для всех остальных

if((BegQ==NULL)&&(EndQ==NULL))

{cout<<"spisok ne sozdan"<<endl;

}

else

{p=new spisok;//создаем переменную динамическую

p->data=Data;//в поле данных заносим данные

p->next=NULL;

EndQ->next=p;//следующий после конца это добавленный элемент

EndQ=p;//смещаем конец на добавленный элемент

};

}

void sspisok::delete_data(long n)//удаление n-ного элемента списка

{spisok *p;//

long i;//счетчик

if((BegQ!=NULL)&&(EndQ!=NULL)&&(n!=1))

{p=BegQ;//передача адреса

for(i=0;i<n-2;i++)

{p=p->next;//смещение указателя

}

p->next=p->next->next;//удаление элемента

cout<<"bil udalen "<<n<<"-ii element "<<endl;

};

//на случай удаления первого элемента

if((BegQ!=NULL)&&(EndQ!=NULL)&&(n==1))

{BegQ=BegQ->next;

cout<<"bil udalen "<<n<<"-ii element "<<endl;

};

if((BegQ==NULL)&&(EndQ==NULL))//если список пустой

Приложение А(продолжение)

{cout<<"Spisok pustoi ili ne sozdan"<<endl;

}

else

if((BegQ->data.kolichestvo_o==NULL)&&(EndQ->data.kolichestvo_o==NULL))//проверка на пустоту списка

{cout<<"Spisok pustoi"<<endl;//вывод соотв. сообщения

};

}

void sspisok::show_sp(void)//просмотр списка

{ Q=BegQ;//смещение указателя

if(Q->data.kolichestvo_o!=NULL)

{cout<<" Nazvanie Klass Kol-vo obshee Kol-vo svobodnoe Cena"<<endl<<endl;

while(Q!=NULL)//пока не начало списка

{

cout.width(8);

cout<<Q->data.nazvanie;

cout.width(10);

cout<<Q->data.class_;

cout.width(10);

cout<<Q->data.kolichestvo_o;

cout.width(18);

cout<<Q->data.kolichestvo_s;

cout.width(20);

cout<<Q->data.cena<<endl;

Q=Q->next;//переход на следующую позицию

}

}

if((BegQ==NULL)&&(EndQ==NULL))//если спискок пустой

{cout<<"Spisok ne sozdan"<<endl;//вывод соотв. сообщения

}

else

if((BegQ->data.kolichestvo_o==NULL)&&(EndQ->data.kolichestvo_o==NULL))//проверка на пустоту списка

{cout<<"Spisok pustoi"<<endl;//вывод соотв. сообщения

};

}

void sspisok::sp_copy_mas()//копирование списка в массив

{long i,n;//n-для определения количества элементов в списке,i-для цикла

//если в списке что то есть

Q=BegQ;//смещение указателя

n=0;//обнуление количества

while(Q!=NULL)//пока не начало списка

{n++;

Q=Q->next;//переход на следующую позицию

}

c=(data_*)malloc(n*sizeof(data_));//создания динамического массива

nn=n;//передача количества элементов списка в глобальную переменную для сортировки

Q=BegQ;

//копирование списка в массив

for(i=0;i<n;i++)

{c[i]=Q->data;

Q=Q->next;

}

//если элементы не обнаружены

if((BegQ->data.kolichestvo_o==NULL)&&(EndQ->data.kolichestvo_o==NULL))//проверка на наличие списка

{cout<<"Spisok ne sozdan"<<endl;

}

else

if((BegQ->data.kolichestvo_o==NULL)&&(EndQ->data.kolichestvo_o==NULL))//проверка на пустоту списка

{cout<<"Spisok pustoi"<<endl;

};

};

void sspisok::sort_mas(long n)//сортировка массива

// сортировка

{data_ tmp;

for (int i = 1; i < n; i++) {

for (int j = 0; j < n-i; j++) {

if (c[j].kolichestvo_o > c[j+1].kolichestvo_o) {

tmp = c[j];

c[j] = c[j+1];

c[j+1] = tmp;

}

}

}

};

void sspisok::show_mas(long n)//вывод массива

{long i;//счетчик

//вывод массива по циклу

cout<<" Nazvanie Klass Kol-vo obshee Kol-vo svobodnoe Cena"<<endl<<endl;

for(i=0;i<n;i++)

{ cout.width(8);

cout<<c[i].nazvanie;

cout.width(10);

cout<<c[i].class_;

cout.width(10);

cout<<c[i].kolichestvo_o;

cout.width(18);

cout<<c[i].kolichestvo_s;

cout.width(20);

cout<<c[i].cena<<endl;

}

cout<<endl;//переход на новую строчку

}

void sspisok::find_data(char Data[255])

{long t;//t-количество найденных элементов

Q=BegQ;//указатель списка в начало

t=0;//обнулнение счетчика

while(Q!=NULL)//пока не конец списка

{if(stricmp(Q->data.nazvanie,Data)==0)//если элемент найден то увеличение счетчика

{cout<<"nazavanie - "<<Q->data.nazvanie<<" class - "<<Q->data.class_<<endl;//печать элемента в файл

t++;//увеличение счетчика

}

Q=Q->next;//переход на следующий элемент

}

if(t>0)//если элемент списка равен искомому

{cout<<"Zapis' naidena "<<t<<" raz(a)"<<endl;

}

else

{cout<<"Zapis' ne naidena"<<endl;

}

}

void sspisok::sp_copy_file(void)//копирование списка в файл

{ofstream file("C:\\ftext_from.txt");//создание файла

Q=BegQ;//смещение указателя

while(Q!=NULL)//пока не конец списка

{file<<"Nazvanie - "<<Q->data.nazvanie<<" Klass - "<<Q->data.class_<<" kol-vo_o - "<<Q->data.kolichestvo_o<<" kol-vo_s - "<<Q->data.kolichestvo_s<<" Cena - "<<Q->data.cena<<endl;//печать элемента в файл

Q=Q->next;//переход на следующую позицию

}

}

void sspisok::file_copy_sp()//копирование данных из файла в список

{data_ x;//переменная для считывания из файла

ifstream file("C:\\ftext_in.txt");//открытие файла

if(file!=NULL)

{cout<<"File Soderzhit sleduiushie elementi:"<<endl;

cout<<" Nazvanie Klass Kol-vo obshee Kol-vo svobodnoe Cena"<<endl<<endl;

while(!file.eof())//пока не конец файла

{

file>>x.nazvanie;

cout.width(8);cout<<x.nazvanie;

file>>x.class_;

cout.width(10);cout<<x.class_;

file>>x.kolichestvo_o;

cout.width(10);cout<<x.kolichestvo_o;

file>>x.kolichestvo_s;

cout.width(18);cout<<x.kolichestvo_s;

file>>x.cena;

cout.width(20);cout<<x.cena<<endl;;

sspisok::add_data(x);//вызов метода класса и добавление элемента в список

}

}

else

{cout<<"File C:\\ftext_in.txt ne naiden"<<endl;

}

}

void sspisok::peremesh()

{int n=0;

spisok *Q2;//буфер

Q2=new spisok;

Q=BegQ;//смещение указателя

while(Q->next!=NULL)//пока не начало списка

{ n++;

if(Q->next->data.class_==5)

{ cout<<" n="<<n<<endl;

Q2=Q->next;

Q->next=Q->next->next;

Q2->next=BegQ;

BegQ=Q2;

}

Q=Q->next;//переход на следующую позицию

}

}

void sspisok::udalenie()

{spisok *p;

int n=0;

if((BegQ!=NULL)&&(EndQ!=NULL))

{

p=BegQ;

while(p!=NULL)

{n++;

if(p->data.kolichestvo_s==0)

{sspisok::delete_data(n);

n--;//возврат индекса к предыдущему элементу

}

p=p->next;

};

}

if((BegQ==NULL)&&(EndQ==NULL))//если список пустой

{cout<<"Spisok pustoi ili ne sozdan"<<endl;

}

else

Приложение А(продолжение)

if((BegQ->data.kolichestvo_o==NULL)&&(EndQ->data.kolichestvo_o==NULL))//проверка на пустоту списка

{cout<<"Spisok pustoi"<<endl;//вывод соотв. сообщения

};

}

int main(array<System::String ^> ^args)

{sspisok x;//объект класса

int vibor;//для меню

long i,n;//i-для циклов,n-для количесва

long j;//для прочих целей

BegQ=NULL;//обнуление указателя

EndQ=NULL;//обнуление указателя

Q=NULL;//обнуление указателя

//////////////////////////меню///////////////////////////

while(vibor!=0)

{system("cls");

cout<<"Menu"<<endl;

cout<<"1.Sformirovat spisok"<<endl;

cout<<"2.Dobavit zapis'"<<endl;

cout<<"3.Udalit' zapis'"<<endl;

cout<<"4.Otobrazit spisok"<<endl;

cout<<"5.Skoirovat v Fail"<<endl;

cout<<"6.Skopirovat v Massiv"<<endl;

cout<<"7.Otobrazit Massiv"<<endl;

cout<<"8.Sortirovat Massiv"<<endl;

cout<<"9.Skopirovat iz Faila"<<endl;

cout<<"10.Nayti zapis' v spiske"<<endl;

cout<<"11.Udalenie otelei bez svobodnih nomerov"<<endl;

cout<<"12.Peremeshenie 5-ti zvezdochnih gostinic"<<endl;

cout<<"0.Vyhod"<<endl;

cout<<endl<<endl;

cout<<"Vyberite:_";

cin>>vibor;

system("cls");

if(vibor==1)//формирование списка

{x.form();//формирование списка

}

if(vibor==2)//ввод данных

{if((BegQ!=NULL)&&(EndQ!=NULL))

{cout<<"Skolko Zapisey vvesti"<<endl;

cout<<"n=";

cin>>n;//ввод количества

for(i=0;i<n;i++)

{

cout<<"Nazvanie -";

cin>>Data.nazvanie;//ввод данных

cout<<"Klass-";

cin>>Data.class_;

cout<<"Obshee kolichestvo-";

cin>>Data.kolichestvo_o;//ввод данных

cout<<"Kolichestvo svobodnih-";

cin>>Data.kolichestvo_s;//ввод данных

cout<<"Cena-";

cin>>Data.cena;

x.add_data(Data);//добавление элемента в список

}

}

if((BegQ==NULL)&&(EndQ==NULL))

{cout<<"Spisok ne sozdan"<<endl;

}

}

if(vibor==3)//удаление элемента

{if((BegQ!=NULL)&&(EndQ!=NULL))

{cout<<"Vvedite nomer zapisi kotoruyu nuzhno udalit"<<endl;

cout<<"n=";

cin>>j;//ввод номера удаляемого элемента

x.delete_data(j);//удаление элемента

}

if((BegQ==NULL)&&(EndQ==NULL))

{cout<<"Spisok ne sozdan"<<endl;

}

}

if(vibor==4)//вывод элементов на экран

{x.show_sp();//вывод списка на экран

}

Приложение А(продолжение)

if(vibor==5)//копировать в файл

{if((BegQ!=NULL)&&(EndQ!=NULL))

{cout<<"Dannie skopirovani v fail, po adresu C:\\ftext_from.txt"<<endl;

x.sp_copy_file();//копирование данных в список

}

if((BegQ==NULL)&&(EndQ==NULL))

{cout<<"Spisok ne sozdan"<<endl;

}

}

if(vibor==6)//копировать в массив

{if((BegQ!=NULL)&&(EndQ!=NULL))

{x.sp_copy_mas();//копирание данных в массив

cout<<"V spiske "<<nn<<" - elementov"<<endl;//вывод сообщения о количестве элементов

cout<<"Spisok skopirovan v massiv"<<endl;

}

if((BegQ==NULL)&&(EndQ==NULL))

{cout<<"Spisok ne sozdan"<<endl;

}

}

if(vibor==7)//вывод массива

{if((BegQ!=NULL)&&(EndQ!=NULL))

{cout<<"Vivod massiva"<<endl;

x.show_mas(nn);//вывод массива на экран

}

if((BegQ==NULL)&&(EndQ==NULL))

{cout<<"Spisok ne sozdan"<<endl;

}

}

if(vibor==8)//сортировать массив

{if((BegQ!=NULL)&&(EndQ!=NULL))

{x.sort_mas(nn);//сортировка массива

cout<<"Massiv otsortirovan"<<endl;

x.show_mas(nn);//вывод массива на экран

}

if((BegQ==NULL)&&(EndQ==NULL))

{cout<<"Spisok ne sozdan"<<endl;

}}

Приложение А(продолжение)

if(vibor==9)//сформировать файл из списка или добавить элементы в список из файла

{if((BegQ!=NULL)&&(EndQ!=NULL))

{x.file_copy_sp();

}

if((BegQ==NULL)&&(EndQ==NULL))

{cout<<"Spisok ne sozdan"<<endl;

}

}

if(vibor==10)//найти элемент в массиве

{if((BegQ!=NULL)&&(EndQ!=NULL))

{cout<<"Vvedite nazvanie gostinici kotoruiu nuzhno naiti:_"<<endl;

cout<<"Gostinica-";

cin>>Data.nazvanie;//ввод данных

x.find_data(Data.nazvanie);//поиск элемента

}

if((BegQ==NULL)&&(EndQ==NULL))

{cout<<"Spisok ne sozdan"<<endl;

}

}

if(vibor==11)

{if((BegQ!=NULL)&&(EndQ!=NULL))

{ x.udalenie();

cout<<"Gostinici bez svobodnyh nomerov udaleny"<<endl;

x.show_sp();

}

}

if(vibor==12)

{if((BegQ!=NULL)&&(EndQ!=NULL))

{ x.peremesh(); x.peremesh();

cout<<"5-ti zvezdochnie gostinici v nachalo spiska"<<endl;

x.show_sp();

}

}

getch();

}

}

Приложение Б

Рисунок Б.1 - Блок-схема основной части программы

Рисунок Б.2- блок-схема функции «form ()»

Рисунок Б.3- блок-схема функции «add_data ()»

Рисунок Б.4- блок-схема функции « delete_data ()»

Рисунок Б.5- блок-схема функции « show_sp ()»

Рисунок Б.6- блок-схема функции «sp_copy_file()»

Рисунок Б.7- блок-схема функции «sp_copy_mass()»

Рисунок Б.8- блок-схема функции «show_mass()»

Рисунок Б.9- блок-схема функции «sort_mass()»

Рисунок Б.10- блок-схема «file_copy_sp()»

Рисунок Б.11- блок-схема функции «find_data()»

Рисунок Б.12- блок-схема функции «udalenie ()»

Рисунок Б.13- блок-схема функции «peremesh ()»

Размещено на Allbest.ur


Подобные документы

  • Структура записей входного массива. Описание основных типов данных. Алгоритм программы: присвоение начальных значений переменных, чтение списка из файла, вывод данных на экран, выполнение обработки данных, сохранение списка в файл. Листинг программы.

    курсовая работа [325,2 K], добавлен 28.12.2012

  • Написание программы, исходя из конкретных данных. Создание двунаправленного линейного списка. Main - главная программа, содержащая меню. Занесение данных в память списка. Результирующий файл. Значения всех числовых данных из диапазона целого типа данных.

    курсовая работа [2,3 M], добавлен 22.12.2010

  • Структура данных с указанием типов. Общая структурная схема программы. Алгоритмы сортировки вставками. Назначение make-файла. Функции управления программой; перемещения и корректировки введенных данных и их удаления справочника, загрузки данных из файла.

    курсовая работа [1,3 M], добавлен 12.01.2016

  • Структура программного комплекса. Ввод информации из заданного файла. Создание набора данных. Добавление элементов в конец набора данных. Просмотр всех элементов набора данных. Копирование информации из НД в заданный файл. Сортировка массива по номерам.

    курсовая работа [630,5 K], добавлен 01.06.2014

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

    реферат [14,5 K], добавлен 06.12.2011

  • Исследование программного средства для управления базой данных с информацией о фильмах. Составление алгоритма удаления и добавления элемента в указанное место двунаправленного списка. Характеристика поиска, вывода на экран и сортировки элементов списка.

    курсовая работа [94,5 K], добавлен 23.09.2011

  • Изучение и освоение инструментальных средств Excel для управления базами данных. Правила формирования списка на рабочем листе Excel. Простая и многоуровневая сортировка списка. Варианты фильтрации данных в таблице. Вычисляемый критерий и его создание.

    лабораторная работа [297,2 K], добавлен 15.11.2010

  • Описание процедуры выбора структуры хранения данных. Программная реализация одномерного неоднородного массива. Представление бинарного дерева в виде динамической структуры данных. Изучение способов поиска в упорядоченном дереве. Содержание базы данных.

    практическая работа [850,0 K], добавлен 16.04.2015

  • Составление алгоритма сортировки линейной вставкой. Понятие однонаправленного циклического списка символов, реализация процедуры подсчета суммы элементов и составление алгоритма. Прямое представление дерева, алгоритм работы с ним на абстрактном уровне.

    контрольная работа [32,8 K], добавлен 20.01.2012

  • Создание базы данных, содержащей сведения о напильниках. Вывод данных об инструменте, номер насечки которых равен 2.Использование переменных типа "запись" при работе с базами данных. Решение задачи с использованием Microsoft Excel. Алгоритм программы.

    курсовая работа [33,3 K], добавлен 08.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.