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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    162,38 Кб
  • Опубликовано:
    2014-01-02
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

Введение


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

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

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

{инициализация 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   Просмотр всех элементов набора данных


Рисунок 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. - Режим доступа:

http://forum.sources.ru. - Дата доступа: 15.05.2012.

2 Зуев, Е.А. Программирование на языке 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:

{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};.

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!