Обработка набора данных, представленного в виде файла

 

Введение


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

  1. Создание набора данных.
  2. Добавление новых элементов в конец набора данных.
  3. Просмотр всех элементов набора данных.
  4. Поиск элемента по номеру.
  5. Переход к работе с другим набором данных.

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

1Удаление, элементов начиная от текущего

2Просмотр элементов и вычисление среднего, минимума и максимума из заданного диапазона

Множество данных должно представлять собой информацию об абонентах АТС:

  1. фамилия (string);
  2. оплата в месяц (longint);
  3. номер АТС (integer);
  4. дополнительные средства связи: факс-модем, модем, факс, отсутствуют (перечислимый тип).

Условия и ограничения, которые должны быть соблюдены при написании данного программного комплекса:

1Главную процедуру программы с реализацией простейшего меню следует определить в отдельном модуле.

2Процедуры, реализующие запросы, должны быть размещены в одном или более модулях.

Глобальные данные: Спецификация файла. Никаких других глобальных переменных использовать нельзя.

Вместе с меню на экране должно быть отображено:

  • номер текущего элемента;
  • содержимое текущего элемента.

5На экран выводить элементы в виде таблицы (один элемент - одна строка таблицы).

6Если после выполнения запроса изменяется хотя бы один элемент, то заканчивать запрос выводом всего множества элементов.

Тестами к заданиям служат 2 НД с правдоподобной информацией.


1. Описание программного комплекса


1.1Структура программного комплекса


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

Главная программа подключает следующие модули: crt, menu, sozd, perehod, vivod, poisk, dobavlenie, udalenie, sredmaxmin

Псевдокод программы kursach:

kursach;crt, menu, sozd, perehod, vivod, poisk, dobavlenie, udalenie{, sredmaxmin};kolvo=8; x=1; y=1;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;mass:mymenu;:integer;:string;:zapis;

{процедура прорисовки меню}vertmenu (mas:mymenu; x, y, kol:integer; var long:integer);max, i, j:integer; l:byte; key:char;

{нахождение максимальной строки}

{дополнение всех строк до максимальной}

{прорисовка рабочего окна}i:=1 to kol do

{вывод полей меню}

{end for i:=1 to kol do}

{инициализация long}

{подсветка первого поля меню}

{инициализация l}

{определение кода нажатой клавиши}

{реакция на нажатие командных клавиш}

{прорисовка поля меню в исходный цвет}

{подсветка следующего выбранного поля меню}false

{end repeat};


{процедура отключения курсора}cursor_off;


{процедура включения курсора}cursor_on;


{процедура очистки экрана}stir;


{прорисовка рабочего окна}

{инициализация полей меню}

{вызов процедуры отключения курсора}

{вывод меню}long of

{вызов процедур в соответствии с выбранным пунктом меню}

:begin

{очистка экрана и включение курсора}

{вызов процедуры создания нд}

{очистка экрана и отключение курсора}

{вывод меню};

:begin

{очистка экрана и включение курсора}

{вызов процедуры добавления элементов в конец нд}

{очистка экрана и отключение курсора}

{вывод меню};

:begin

{очистка экрана}

{вызов процедуры вывода нд}

{очистка экрана}

{вывод меню};

:begin

{включение курсора}

{вызов процедуры поиска элемента}

{отключение курсора};

:begin

{очистка экрана и включение курсора}

{вызов процедуры перехода к работе с другим нд}

{очистка экрана и отключение курсора}

{вывод меню};

:begin

{очистка экрана и включение курсора}

{вызов процедуры создания нд по ключевому полю}

{очистка экрана и отключение курсора}

{вывод меню};

:begin

{очистка экрана и включение курсора}

{вызов процедуры добавления всех эл-тов в другой нд}

{очистка экрана и отключение курсора}

{вывод меню};;long=kolvo;

{end repeat};.


1.2Описание модуля sozd.tpu

программный модуль данные файл

В модуле sozd.tpu описана процедура sozdanienab и типы создаваемого множества данных.

Описательная часть модуля:


unit sozd;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;sozdanie_nd;

Процедура sozdanienab создает новый набор данных.


Псевдокод процедуры sozdanienab:

procedure sozdanienab;fail:file of zapis;:zapis;, n, tg:integer;:string;

{ввод имени создаваемого файла}

{связывание переменной fail с набором данных}

{открытие файла fail для записи}

{ввод количества элементов n}i:=1 to n do

{ввод данных}

{запись данных в файл};

{end for i:=1 to n}

{закрытие файла};


1.3Описание модуля dobavlenie.tpu


В модуле dobavlenie.tpu описана процедура dobavleniek и типы, необходимые для работы с множеством данных.

Описательная часть модуля:

dobavlenie;vivod;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;dobavleniek (name:string);

Процедура dobavleniek добавляет элементы в конец набора данных. В эту процедуру передается переменная name (имя файла).

Псевдокод процедуры dobavleniek:

procedure dobavleniek;fail:file of zapis;:zapis;, n, tg, max:integer;, oplatastr:string;

{связывание переменной fail с набором данных}

{открытие файла fail для записи}

{поиск последнего эл-та и установка указателя в конец файла}

{ввод кол-ва добавляемых элементов}i:=max+1 to n+max do

{ввод данных}

{запись данных в файл};

{end for}

{закрытие файла}

{вывод нд};


1.4Описание модуля vivod.tpu


В модуле vivod.tpu описана процедура vivodnab и типы, необходимые для работы с множеством данных.

Описательная часть модуля:

vivod;crt;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;vivodnab (name:string);


Процедура vivodnab обеспечивает вывод набора данных на экран в виде таблицы и скроллинг таблицы, если она не помещается в окне. В эту процедуру передается переменная name (имя файла).

Псевдокод процедуры vivodnab:

vivodnab;stroka:array [1..50] of string[80];:integer;:zapis;, oplatastr:string;:file of zapis;, m, a, l:integer;:char;

{связывание переменной fail с нд и открытие файла}

{инициализация k}

{инициализация stroka[1] и stroka[2]}

{чтение данных из файла}

{перевод данных в строковый тип}

{запись строк таблицы в массив строк}

{подготовка следующей итерации}eof(fail);

{end repeat}

{инициализация последней строки}

{отключение курсора}

{прорисовка рабочего окна}

{вывод первых 25-ти строк}

{инициализация m}

{определение кода нажатой клавиши}key of

{реакция на нажатие командых клавиш};

{end case key of}

{инициализация l}a:=m to m+24 do

{вывод строк в соответсвии с нажатой клавишей}key=#27;

{end repeat}

{закрытие файла};


1.5Описание модуля poisk.tpu


В модуле poisk.tpu описана процедура poiskel и типы, необходимые для работы с множеством данных.

Описательная часть модуля:

poisk;crt;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;poiskel (imya_faila:string);


Процедура poiskel обеспечивает поиск в наборе данных поиск элемента по номеру и вывод этого элемента вместе с главным меню. В эту процедуру передается переменная name (имя файла).

Псевдокод процедуры poiskel:

poiskel;fail:file of zapis;, i:byte;, nomstr, oplatastr:string;:zapis;

{прорисовка рабочего окна}

{ввод номера элемента}

{связывание файла с нд}

{открытие файла}

{нахождение максимального номера и проверка введенного номера}

{установка указателя на начало файла}

{чтение из файла}

{перевод данных из файла в строковое представление}zap.nom=n then

{вывод элемента}

{end if}eof(fail);

{end repeat}

{закрытие файла};


1.6Описание модуля perehod.tpu


В модуле perehod.tpu описана процедура perehodnab.

Описательная часть модуля:

perehod;perehodnab (var name:string);


Процедура perehodnab выполняет переход к работе с другим набором данных. Из этой процедуры в главную передается переменная name (имя файла).

Псевдокод процедуры perehodnab:

perehodnab;fail:file;

{ввод имени файла}

{связывание файла с нд}

{проверка ввода\вывода};

1.7Описание модуля udalenie.tpu


В модуле udalenie.tpu описана процедура udelenieel.

Описательная часть модуля:

sozd_key;crt, vivod;x=1; y=2; kol=4;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;udalenieel (name:string; nom:integer);


Процедура udelenieel удаляет данные начиная от текущуго номера. В эту процедуру передается переменная name (имя файла).

Псевдокод процедуры udalenieel:

udalenieel (name:string; nom:integer);

{открытие файла}

{удаление файла};.

1.8Описание модуля sredmaxmin.tpu:


В модуле sredmaxmin.tpu описана процедура nahojdenie. Также в модуле описаны типы, необходимые для работы с множеством данных.

Описательная часть модуля:

sredmaxmin;crt;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;naxogdenie (name:string);


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

Псевдокод процедуры dobavlenie:

naxogdenie (name:string);fail:file of zapis;:zapis;, niz, min, max, i, j, k:integer;_vo:array [1..100] of integer;, sredn:real;, oplatastr:string;

{ввод нижней и верхней границы}

{вывод шапки таблицы}

{вывод эллементов попавших в данный диапазон}eof(fileout);

{end repeat}

{вычисление среднего, максимального и минимального эллементов}

{вывод эллементов};


2.Описание работы программы по контрольному примеру


Программ начинается с вывода меню. Для передвижения по пунктам меню нужно использовать клавиши «Вверх» и «Вниз» (Рисунок 1).


Рисунок 1 - Главное меню


2.1Создание набора данных


Чтобы создать новый набор данных, нужно выбрать в меню пункт «Создать новый НД». После выбора программа попросит ввести имя создаваемого файла, затем количество элементов, после чего мы приступим к вводу самих элементов. После завершения ввода программа вернется в меню. Создадим набор данных, состоящий из трех элементов (рисунок 2), и выведем его (рисунок 3).


Рисунок 2 - Создание набора данных


2.2Добавление элементов в конец набора данных


Чтобы добавить в уже существующий набор данных новые элементы, нужно выбрать в меню пункт «Добавить элементы в конец НД». Программа попросит ввести количество добавляемых элементов, после ввода количества мы сможем ввести сами элементы. На на рисунке 5 - процесс добавления элементов, на рисунке 6 - конечное состояние набора данных.


Рисунок 5 - Добавление элементов в конец нд


Рисунок 6 - Конечное состояние нд


2.3Просмотр всех элементов набора данных


Для просмотра всех элементов набора данных нужно выбрать в меню пункт «Просмотреть все элементы НД». Если таблица с элементами не будет помещаться в окно, программа обеспечит скроллинг при помощи клавиш «Вверх», «Вниз», «PageUp» и «PageDown» (рисунки 7 и 8).


Рисунок 7 - Вывод набора данных (Часть 1)


Рисунок 8 - Вывод набора данных (Часть 2)


2.4Поиск элемента по номеру


Для поиска элемента в наборе данных по номеру необходимо выбрать в меню пункт «Найти элемент по номеру», ввести номер, после чего программа выведет данный элемент. Для примера возьмем набор данных из предыдущего примера и выведем второй элемент.


Рисунок 9 - Поиск элемента по номеру


2.5Переход к работе с другим набором данных


Для перехода к работе с другим набором данных нужно выбрать в меню пункт «Перейти к работе с другим НД» и ввести имя файла, который нам нужно открыть. В примере, изображенном на рисунках 11 и 12 я перейду от нд из пункта 2.3 к нд из пункта 2.2.


Рисунок 10 - Переход к работе с другим нд


Рисунок 11 - Вывод нд, к которому перешли


2.6Удаление элементов, начиная от текущего


Для удаления элементов, начиная от текущего нужно выбрать элемент, а затем выбрать в меню пункт «Удаление элементов, начиная от текущего», после этого программа удалит все элементы начиная от выбранного.


Рисунок 13 - Ввод имени создаваемого файла


Рисунок 16 - Вывод созданного набора данных


2.7Просмотр элементов и вычисление среднего, минимума и масимума из заданного диапазона


Для просмотра элементов и вычисление среднего, минимума и масимума из заданного диапазона нужно выбрать в меню пункт «Просмотр элементов и вычисление среднего, минимума и масимума из заданного диапазона», после чего программа попросит ввести верхний и нижний дивпазоны (рисунок 17).


Рисунок 17 - Ввод нижнего и верхнего диапазонов


Рисунок 18 - Вывод результата


Заключение


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



Список использованных источников


  1. Исходники.ру [Электронный ресурс]. - 2012. - Режим доступа:

#"justify">Зуев, Е.А. Программирование на языке Turbo Pascal 6.0, 7.0 / Е.А. Зуев. - Радио и связь, Веста, 1993. - С. 215-227.

Приложение


Текст главной программы:


program kursach;crt, menu, sozd, perehod, vivod, poisk, dobavlenie, udalenie, sredmaxmin;kolvo=8; x=1; y=1;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;mas:mymenu;:integer;:string;:zapis;

cursor_off;ah, 1cx, 2020h10h;;

cursor_on;;ah, 1cx, 0607h10h;

stir;(1,1,80,25);(black);(white);;;

(1,1,80,25);(white);(black);[1]:='Создать новый НД';[2]:='Добавить элементы в конец НД';[3]:='Просмотреть все элементы НД';[4]:='Найти элемент по номеру';[5]:='Перейти к работе с другим НД';[6]:='Удаление элементов, начиная от текущего';[7]:='Просмотр элементов и вычисление среднего, минимума и максимума';[8]:='Выход';;_off;(mas, x, y, kolvo, long);long of

:begin;_on;;;_off;(mas, x, y, kolvo, long);;

:begin;_on;(name);;_off;(mas, x, y, kolvo, long);;

:begin;(name);;(mas, x, y, kolvo, long);;

:begin_on;(name);_off;;

:begin;_on;(name);;_off;(mas, x, y, kolvo, long);;

:begin;_on;(name, nom);;_off;(mas, x, y, kolvo, long);;

:begin;_on;(name);;_off;(mas, x, y, kolvo, long);;;

{end case}long=kolvo;

{end repeat}.


Текст модуля sozd.tpu:

sozd;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;sozdanienab;sozdanienab;fail:file of zapis;:zapis;, n, tg:integer;:string;('введите имя файла');(name);(fail, name);(fail);('введите количество элементов');(n);i:=1 to n do('введите фамилию');(zap.familiya);('введите оплату');(zap.oplata);('введите номер');(zap.nomerATS);('выберите дополнительное средство');('1 - факс-модем');('2 - модем');('3 - факс');('4 - нету');(tg);(tg<1) or (tg>4) then('ошибка, введите заново');(tg>=1) and (tg<=4);

{end repeat}tg of

:zap.sredstva:=faxmodem;

:zap.sredstva:=modem;

:zap.sredstva:=fax;

:zap.sredstva:=nety;;

{end case}.nom:=i;(fail, zap);;

{end for}(fail);;;.


Текст модуля dobavlenie.tpu:


unit dobavlenie;vivod;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;dobavleniek (name:string);dobavleniek;fail:file of zapis;:zapis;, n, tg, max:integer;, oplatastr:string;(fail, name);(fail);(fail, zap);zap.nom>max then:=zap.nom;eof(fail);

{end repeat}(fail, max);('введите количество добавляемых элементов');(n);i:=max+1 to n+max do('введите фамилию');(zap.familiya);('введите оплату в месяц');(zap.oplata);('введите номер');(zap.nomerATS);('выберите дополнительные средства');('1 - факс-модем');('2 - модем');('3 - факс');('4 - отсутствует');(tg);(tg<1) or (tg>4) then('ошибка, введите заново');(tg>=1) and (tg<=4);

{end repeat}tg of

:zap.sredstva:=faxmodem;

:zap.sredstva:=modem;

:zap.sredstva:=fax;

:zap.sredstva:=nety;;

{end case}.nom:=i;(fail, zap);;

{end for}(name);(fail);;.

Текст модуля vivod.tpu:

unit vivod;crt;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;vivodnab (name:string);vivodnab;stroka:array [1..50] of string[80];:integer;:zapis;, oplatastr, nomerATSstr:string;:file of zapis;, m, a, l:integer;:char;(fail, name);(fail);:=3;[1]:='?????????????????????????????????????????????????';[2]:='? Фамилия ? Оплата ? Номер ? Доп. средства ?';(fail, zap);i:=length (zap.familiya) to 9 do.familiya:=' '+zap.familiya;

{end for}ord (zap.sredstva)+1 of

:sredstvastr:=' факс-модем';

:sredstvastr:=' модем';

:sredstvastr:=' факс';

:sredstvastr:=' нету';;

{end case}(zap.oplata, oplatastr);i:=length(oplatastr) to 8 do:=oplatastr+' ';

{end for}(zap.nomerATS, nomerATSstr);i:=length(nomerATSstr) to 9 do:=nomerATSstr+' ';[k]:='?????????????????????????????????????????????????';[k+1]:='?'+zap.familiya+'?'+oplatastr+'?'+nomerATSstr+'?'+sredstvastr+'?';:=k+2;eof(fail);

{end repeat}[k]:='?????????????????????????????????????????????????';

ah, 1cx, 2020h10h;

(1,1,80,25);(black);(white);;

i:=1 to 24 do(stroka[i]);(stroka[25]);:=1;:=readkey;key of

#80:if m+24<k then:=m+1;

{end if}

#72:if m>1 then:=m-1;

{end if}

#81:if m+24<k then:=m+24;m+24>k then:=k-25;

{end if};

{end if}

#73:if m>25 then:=m-24:=1;

{end if};

{end case}:=1;a:=m to m+24 do(1, l);(stroka[a]);:=l+1;;key=#27;

{end repeat}(fail);;.


Текст модуля poisk.tpu:

unit poisk;crt;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;poiskel (imya_faila:string);poiskel;fail:file of zapis;, i:byte;, nomstr, oplatastr:string;:zapis;(1,12,80,25);(white);(black);;('введите номер элемента');(n);(fail, imya_faila);(fail);;(fail, zap);(zap.nom, nomstr);i:=length(nomstr) to 5 do:=nomstr+' ';

{end for}i:=length (zap.familiya) to 9 do.familiya:=' '+zap.familiya;

{end for}(zap.oplata, oplatastr);i:=length(oplatastr) to 8 do:=oplatastr+' ';

{end for}ord (zap.sredstva)+1 of

:sredstvastr:=' Факс-модем';

:sredstvastr:=' Модем';

:sredstvastr:=' Факс';

:sredstvastr:=' Нету';;

{end case}zap.nom=n then('текущий элемент:');('???????????????????????????????????????????????????????');('?номер ? Фамилия ? Оплата ?Номер АТС? Доп. средсва ?');('???????????????????????????????????????????????????????');('?', nomstr, '?', zap.familiya, '?', oplatastr, '?', zap.nomerATS:9,'?', sredstvastr:15,'?');('???????????????????????????????????????????????????????');;

{end if}eof(fail);

{end repeat}(fail);;.


Текст модуля perehod.tpu:

unit perehod;perehodnab (var name:string);perehodnab;fail:file;('ўўҐ¤ЁвҐ Ё¬п д ©» ');(name);(fail, name);(fail, 1);(fail);;.


Текст модуля serdmaxmin.tpu:

unit sredmaxmin;crt;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;naxogdenie (name:string);naxogdenie (name:string);fail:file of zapis;:zapis;, niz, min, max, i, j, k:integer;_vo:array [1..100] of integer;, sredn:real;, oplatastr:string;(fail, name);(fail);('введите нижнюю границу диапазона');(niz);('введите верхнюю границу диапазона');(verh);niz>verh then('верхяя граница должна быть больше нижней');

{end if}verh>=niz;

{end repeat}:=1;('??????????????????????????????????????????????????');('? Фамилия ? Оплата ? Номер ? Доп.средства ?');(fail, zap);i:=length (zap.familiya) to 9 do.familiya:=' '+zap.familiya;

{end for}ord (zap.sredstva)+1 of

:sredstvastr:=' факс-модем';

:sredstvastr:=' модем';

:sredstvastr:=' факс';

:sredstvastr:=' нету';;

{end case}(zap.oplata, oplatastr);i:=length(oplatastr) to 8 do:=oplatastr+' ';

{end for}(zap.oplata>=niz) and (zap.oplata<=verh) then_vo[k]:=zap.oplata;:=k+1;('??????????????????????????????????????????????????');('?', zap.familiya, '?', oplatastr:9,'?', zap.nomerATS:11,'?', sredstvastr, '?');;eof(fail);

{end repeat}('??????????????????????????????????????????????????');:=kol_vo[1];:=kol_vo[1];j:=1 to k-1 dokol_vo[j]>max then:=kol_vo[j];kol_vo[j]<min then:=kol_vo[j];:=sum+kol_vo[j];;('макс. элемент - ', max);('мин. элемент - ', min);:=sum/(k-1);('среднее - ', sredn:0:3);;;.


Текст модуля udalenie.tpu:

unit udalenie;crt;dopsredstva = (faxmodem, modem, fax, nety);= record:byte;:string;:longint;:integer;:dopsredstva;;:file of zapis;:dopsredstva;:string;:integer;

udalenieel (name:string; nom:integer);

udalenieel (name:string; nom:integer);;(fail, name);(fail);(fail, nom);(fail);;.


Текст модуля menu.tpu:

menu;crt;mymenu=array [1..25] of string;vertmenu (mas:mymenu; x, y, kol:integer; var long:integer);vertmenu;max, i, j:integer; l:byte; key:char;:=length (mas[1]);i:=2 to kol dolength (mas[i])>max then:=length (mas[i]);

{end if}

{end for}i:=1 to kol doj:=length (mas[i])+1 to max do[i]:=mas[i]+' ';

{end for}

{end for}(x, y, x+max, y+kol);(blue);;i:=1 to kol do(1, i);(mas[i]);;

{end for}:=1;(1,1);(red);(white);(mas[1]);:=long;:=readkey;key=#0 then:=readkey;

{end if}key of

#80:if long<kol then:=long+1:=1;

{end if}

#72:if long>1 then:=long-1:=kol;

{end if}

#13:exit;;

{end case}(1, l);(white);(blue);(mas[l]);(1, long);(red);(white);(mas[long]);false

{end repeat};.


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

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ