Обработка набора данных, представленного в виде файла
Целью данной курсовой работы является практическая обработка набора данных, представленного в виде файла. В данной работе необходимо обеспечить реализацию следующих запросов к заданному множеству структурированной информации: Для удаления элементов, начиная от текущего нужно выбрать элемент, а затем выбрать в меню пункт «Удаление элементов, начиная от текущего», после этого программа удалит все… Читать ещё >
Обработка набора данных, представленного в виде файла (реферат, курсовая, диплом, контрольная)
Целью данной курсовой работы является практическая обработка набора данных, представленного в виде файла. В данной работе необходимо обеспечить реализацию следующих запросов к заданному множеству структурированной информации:
Создание набора данных.
Добавление новых элементов в конец набора данных.
Просмотр всех элементов набора данных.
Поиск элемента по номеру.
Переход к работе с другим набором данных.
В соответствии с заданием моего варианта необходимо обеспечить реализацию двух запросов к заданному множеству структурированной информации:
1 Удаление, элементов начиная от текущего
2 Просмотр элементов и вычисление среднего, минимума и максимума из заданного диапазона Множество данных должно представлять собой информацию об абонентах АТС:
фамилия (string);
оплата в месяц (longint);
номер АТС (integer);
дополнительные средства связи: факс-модем, модем, факс, отсутствуют (перечислимый тип).
Условия и ограничения, которые должны быть соблюдены при написании данного программного комплекса:
1 Главную процедуру программы с реализацией простейшего меню следует определить в отдельном модуле.
2 Процедуры, реализующие запросы, должны быть размещены в одном или более модулях.
3 Глобальные данные: Спецификация файла. Никаких других глобальных переменных использовать нельзя.
4 Вместе с меню на экране должно быть отображено:
номер текущего элемента;
содержимое текущего элемента.
5 На экран выводить элементы в виде таблицы (один элемент — одна строка таблицы).
6 Если после выполнения запроса изменяется хотя бы один элемент, то заканчивать запрос выводом всего множества элементов.
7 Тестами к заданиям служат 2 НД с правдоподобной информацией.
1. Описание программного комплекса
1.1 Структура программного комплекса
Программный комплекс состоит из семи модулей, которые содержат процедуры, реализующие запросы, модуля, содержащего главную процедуру и исполняемой программы, вызывающей главную процедуру.
Главная программа подключает следующие модули: crt, menu, sozd, perehod, vivod, poisk, dobavlenie, udalenie, sredmaxmin
Псевдокод программы kursach:
Program kursach;
uses crt, menu, sozd, perehod, vivod, poisk, dobavlenie, udalenie{, sredmaxmin};
const kolvo=8; x=1; y=1;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
var mass: mymenu;
long:integer;
name:string;
zap:zapis;
{процедура прорисовки меню}
procedure vertmenu (mas:mymenu; x, y, kol: integer; var long: integer);
var max, i, j: integer; l: byte; key: char;
begin
{нахождение максимальной строки}
{дополнение всех строк до максимальной}
{прорисовка рабочего окна}
for i:=1 to kol do
{вывод полей меню}
{end for i:=1 to kol do}
{инициализация long}
{подсветка первого поля меню}
repeat
{инициализация l}
{определение кода нажатой клавиши}
{реакция на нажатие командных клавиш}
{прорисовка поля меню в исходный цвет}
{подсветка следующего выбранного поля меню}
until false
{end repeat}
end;
{процедура отключения курсора}
procedure cursor_off;
{процедура включения курсора}
procedure cursor_on;
{процедура очистки экрана}
procedure stir;
begin
{прорисовка рабочего окна}
{инициализация полей меню}
{вызов процедуры отключения курсора}
repeat
{вывод меню}
case long of
{вызов процедур в соответствии с выбранным пунктом меню}
1:begin
{очистка экрана и включение курсора}
{вызов процедуры создания нд}
{очистка экрана и отключение курсора}
{вывод меню}
end;
2:begin
{очистка экрана и включение курсора}
{вызов процедуры добавления элементов в конец нд}
{очистка экрана и отключение курсора}
{вывод меню}
end;
3:begin
{очистка экрана}
{вызов процедуры вывода нд}
{очистка экрана}
{вывод меню}
end;
4:begin
{включение курсора}
{вызов процедуры поиска элемента}
{отключение курсора}
end;
5:begin
{очистка экрана и включение курсора}
{вызов процедуры перехода к работе с другим нд}
{очистка экрана и отключение курсора}
{вывод меню}
end;
6:begin
{очистка экрана и включение курсора}
{вызов процедуры создания нд по ключевому полю}
{очистка экрана и отключение курсора}
{вывод меню}
end;
7:begin
{очистка экрана и включение курсора}
{вызов процедуры добавления всех эл-тов в другой нд}
{очистка экрана и отключение курсора}
{вывод меню}
end;
end;
until long=kolvo;
{end repeat}
end;
end.
1.2 Описание модуля sozd. tpu
программный модуль данные файл
В модуле sozd. tpu описана процедура sozdanienab и типы создаваемого множества данных.
Описательная часть модуля:
unit sozd;
interface
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure sozdanie_nd;
implementation
Процедура sozdanienab создает новый набор данных.
Псевдокод процедуры sozdanienab:
procedure sozdanienab;
var fail: file of zapis;
zap:zapis;
i, n, tg: integer;
name:string;
begin
{ввод имени создаваемого файла}
{связывание переменной fail с набором данных}
{открытие файла fail для записи}
{ввод количества элементов n}
for i:=1 to n do
begin
{ввод данных}
{запись данных в файл}
end;
{end for i:=1 to n}
{закрытие файла}
end;
1.3 Описание модуля dobavlenie. tpu
В модуле dobavlenie. tpu описана процедура dobavleniek и типы, необходимые для работы с множеством данных.
Описательная часть модуля:
unit dobavlenie;
interface
uses vivod;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure dobavleniek (name:string);
implementation
Процедура dobavleniek добавляет элементы в конец набора данных. В эту процедуру передается переменная name (имя файла).
Псевдокод процедуры dobavleniek:
procedure dobavleniek;
var fail: file of zapis;
zap:zapis;
i, n, tg, max: integer;
sredstvastr, oplatastr: string;
begin
{связывание переменной fail с набором данных}
{открытие файла fail для записи}
{поиск последнего эл-та и установка указателя в конец файла}
{ввод кол-ва добавляемых элементов}
for i:=max+1 to n+max do
begin
{ввод данных}
{запись данных в файл}
end;
{end for}
{закрытие файла}
{вывод нд}
end;
1.4 Описание модуля vivod. tpu
В модуле vivod. tpu описана процедура vivodnab и типы, необходимые для работы с множеством данных.
Описательная часть модуля:
unit vivod;
interface
uses crt;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure vivodnab (name:string);
implementation
Процедура vivodnab обеспечивает вывод набора данных на экран в виде таблицы и скроллинг таблицы, если она не помещается в окне. В эту процедуру передается переменная name (имя файла).
Псевдокод процедуры vivodnab:
procedure vivodnab;
var stroka: array [1.50] of string[80];
i:integer;
zap:zapis;
sredstvastr, oplatastr: string;
fail:file of zapis;
k, m, a, l: integer;
key:char;
begin
{связывание переменной fail с нд и открытие файла}
{инициализация k}
{инициализация stroka[1] и stroka[2]}
repeat
{чтение данных из файла}
{перевод данных в строковый тип}
{запись строк таблицы в массив строк}
{подготовка следующей итерации}
until eof (fail);
{end repeat}
{инициализация последней строки}
{отключение курсора}
{прорисовка рабочего окна}
{вывод первых 25-ти строк}
{инициализация m}
repeat
{определение кода нажатой клавиши}
case key of
{реакция на нажатие командых клавиш}
end;
{end case key of}
{инициализация l}
for a:=m to m+24 do
{вывод строк в соответсвии с нажатой клавишей}
until key=#27;
{end repeat}
{закрытие файла}
end;
1.5 Описание модуля poisk. tpu
В модуле poisk. tpu описана процедура poiskel и типы, необходимые для работы с множеством данных.
Описательная часть модуля:
unit poisk;
interface
uses crt;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure poiskel (imya_faila:string);
implementation
Процедура poiskel обеспечивает поиск в наборе данных поиск элемента по номеру и вывод этого элемента вместе с главным меню. В эту процедуру передается переменная name (имя файла).
Псевдокод процедуры poiskel:
procedure poiskel;
var fail: file of zapis;
n, i: byte;
sredstvastr, nomstr, oplatastr: string;
zap:zapis;
begin
{прорисовка рабочего окна}
{ввод номера элемента}
{связывание файла с нд}
{открытие файла}
{нахождение максимального номера и проверка введенного номера}
{установка указателя на начало файла}
repeat
{чтение из файла}
{перевод данных из файла в строковое представление}
if zap. nom=n then
{вывод элемента}
{end if}
until eof (fail);
{end repeat}
{закрытие файла}
end;
1.6 Описание модуля perehod. tpu
В модуле perehod. tpu описана процедура perehodnab.
Описательная часть модуля:
unit perehod;
interface
procedure perehodnab (var name: string);
implementation
Процедура perehodnab выполняет переход к работе с другим набором данных. Из этой процедуры в главную передается переменная name (имя файла).
Псевдокод процедуры perehodnab:
procedure perehodnab;
var fail: file;
begin
{ввод имени файла}
{связывание файла с нд}
{проверка вводавывода}
end;
1.7 Описание модуля udalenie. tpu
В модуле udalenie. tpu описана процедура udelenieel.
Описательная часть модуля:
unit sozd_key;
interface
uses crt, vivod;
const x=1; y=2; kol=4;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure udalenieel (name:string; nom: integer);
implementation
Процедура udelenieel удаляет данные начиная от текущуго номера. В эту процедуру передается переменная name (имя файла).
Псевдокод процедуры udalenieel:
procedure udalenieel (name:string; nom: integer);
{открытие файла}
{удаление файла}
end;
end.
1.8 Описание модуля sredmaxmin. tpu:
В модуле sredmaxmin. tpu описана процедура nahojdenie. Также в модуле описаны типы, необходимые для работы с множеством данных.
Описательная часть модуля:
unit sredmaxmin;
interface
uses crt;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure naxogdenie (name:string);
implementation
Процедура nahojdenie обеспечивает нахождение среднего, максимального и минимального элементов текущего набора данных. В эту процедуру передается переменная name (имя исходного файла).
Псевдокод процедуры dobavlenie:
procedure naxogdenie (name:string);
var fail: file of zapis;
zap:zapis;
verh, niz, min, max, i, j, k: integer;
kol_vo:array [1.100] of integer;
sum, sredn: real;
sredstvastr, oplatastr: string;
begin
{ввод нижней и верхней границы}
{вывод шапки таблицы}
repeat
{вывод эллементов попавших в данный диапазон}
until eof (fileout);
{end repeat}
{вычисление среднего, максимального и минимального эллементов}
{вывод эллементов}
end;
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, получил опыт разработки программных комплексов и на практике освоил основы модульного программирования. Все условия данной курсовой работы были соблюдены. Все запросы выполняются корректно.
Список использованных источников
Исходники.ру [Электронный ресурс]. — 2012. — Режим доступа:
http://forum.sources.ru. — Дата доступа: 15.05.2012.
Зуев, Е. А. Программирование на языке Turbo Pascal 6.0, 7.0 / Е. А. Зуев. — Радио и связь, Веста, 1993. — С. 215−227.
Приложение
Текст главной программы:
program kursach;
uses crt, menu, sozd, perehod, vivod, poisk, dobavlenie, udalenie, sredmaxmin;
const kolvo=8; x=1; y=1;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
var mas: mymenu;
long:integer;
name:string;
zap:zapis;
procedure cursor_off;
begin
asm
mov ah, 1
mov cx, 2020h
int 10h
end;
end;
procedure cursor_on;
assembler;
asm
mov ah, 1
mov cx, 0607h
int 10h
end;
procedure stir;
begin
window (1,1,80,25);
textbackground (black);
textcolor (white);
clrscr;
end;
begin
window (1,1,80,25);
textcolor (white);
textbackground (black);
mas[1]: ='Создать новый НД';
mas[2]: ='Добавить элементы в конец НД';
mas[3]: ='Просмотреть все элементы НД';
mas[4]: ='Найти элемент по номеру';
mas[5]: ='Перейти к работе с другим НД';
mas[6]: ='Удаление элементов, начиная от текущего';
mas[7]: ='Просмотр элементов и вычисление среднего, минимума и максимума';
mas[8]: ='Выход';
clrscr;
cursor_off;
repeat
vertmenu (mas, x, y, kolvo, long);
case long of
1:begin
stir;
cursor_on;
sozdanienab;
clrscr;
cursor_off;
vertmenu (mas, x, y, kolvo, long);
end;
2:begin
stir;
cursor_on;
dobavleniek (name);
clrscr;
cursor_off;
vertmenu (mas, x, y, kolvo, long);
end;
3:begin
stir;
vivodnab (name);
clrscr;
vertmenu (mas, x, y, kolvo, long);
end;
4:begin
cursor_on;
poiskel (name);
cursor_off;
end;
5:begin
stir;
cursor_on;
perehodnab (name);
clrscr;
cursor_off;
vertmenu (mas, x, y, kolvo, long);
end;
6:begin
stir;
cursor_on;
udalenieel (name, nom);
clrscr;
cursor_off;
vertmenu (mas, x, y, kolvo, long);
end;
7:begin
stir;
cursor_on;
naxogdenie (name);
clrscr;
cursor_off;
vertmenu (mas, x, y, kolvo, long);
end;
end;
{end case}
until long=kolvo;
{end repeat}
end.
Текст модуля sozd.tpu:
unit sozd;
interface
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure sozdanienab;
implementation
procedure sozdanienab;
var fail: file of zapis;
zap:zapis;
i, n, tg: integer;
name:string;
begin
writeln ('введите имя файла');
readln (name);
assign (fail, name);
rewrite (fail);
writeln ('введите количество элементов');
readln (n);
for i:=1 to n do
begin
writeln ('введите фамилию');
readln (zap.familiya);
writeln ('введите оплату');
readln (zap.oplata);
writeln ('введите номер');
readln (zap.nomerATS);
writeln ('выберите дополнительное средство');
writeln ('1 — факс-модем');
writeln ('2 — модем');
writeln ('3 — факс');
writeln ('4 — нету');
repeat
readln (tg);
if (tg<1) or (tg>4) then
writeln ('ошибка, введите заново');
until (tg>=1) and (tg<=4);
{end repeat}
case tg of
1:zap.sredstva:=faxmodem;
2:zap.sredstva:=modem;
3:zap.sredstva:=fax;
4:zap.sredstva:=nety;
end;
{end case}
zap.nom:=i;
write (fail, zap);
end;
{end for}
close (fail);
readln;
end;
end.
Текст модуля dobavlenie.tpu:
unit dobavlenie;
interface
uses vivod;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure dobavleniek (name:string);
implementation
procedure dobavleniek;
var fail: file of zapis;
zap:zapis;
i, n, tg, max: integer;
sredstvastr, oplatastr: string;
begin
assign (fail, name);
reset (fail);
repeat
read (fail, zap);
if zap. nom>max then
max:=zap.nom;
until eof (fail);
{end repeat}
seek (fail, max);
writeln ('введите количество добавляемых элементов');
readln (n);
for i:=max+1 to n+max do
begin
writeln ('введите фамилию');
readln (zap.familiya);
writeln ('введите оплату в месяц');
readln (zap.oplata);
writeln ('введите номер');
readln (zap.nomerATS);
writeln ('выберите дополнительные средства');
writeln ('1 — факс-модем');
writeln ('2 — модем');
writeln ('3 — факс');
writeln ('4 — отсутствует');
repeat
readln (tg);
if (tg<1) or (tg>4) then
writeln ('ошибка, введите заново');
until (tg>=1) and (tg<=4);
{end repeat}
case tg of
1:zap.sredstva:=faxmodem;
2:zap.sredstva:=modem;
3:zap.sredstva:=fax;
4:zap.sredstva:=nety;
end;
{end case}
zap.nom:=i;
write (fail, zap);
end;
{end for}
vivodnab (name);
close (fail);
end;
end.
Текст модуля vivod.tpu:
unit vivod;
interface
uses crt;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure vivodnab (name:string);
implementation
procedure vivodnab;
var stroka: array [1.50] of string[80];
i:integer;
zap:zapis;
sredstvastr, oplatastr, nomerATSstr: string;
fail:file of zapis;
k, m, a, l: integer;
key:char;
begin
assign (fail, name);
reset (fail);
k:=3;
stroka[1]: ='г==========T=========T==========T===============';
stroka[2]:='¦ Фамилия ¦ Оплата ¦ Номер ¦ Доп. средства ¦';
repeat
read (fail, zap);
for i:=length (zap.familiya) to 9 do
zap.familiya:=' '+zap.familiya;
{end for}
case ord (zap.sredstva)+1 of
1:sredstvastr:=' факс-модем';
2:sredstvastr:=' модем';
3:sredstvastr:=' факс';
4:sredstvastr:=' нету';
end;
{end case}
str (zap.oplata, oplatastr);
for i:=length (oplatastr) to 8 do
oplatastr:=oplatastr+' ';
{end for}
str (zap.nomerATS, nomerATSstr);
for i:=length (nomerATSstr) to 9 do
nomerATSstr:=nomerATSstr+' ';
stroka[k]: ='¦==========+=========+==========+===============¦';
stroka [k+1]: ='¦'+zap.familiya+'¦'+oplatastr+'¦'+nomerATSstr+'¦'+sredstvastr+'¦';
k:=k+2;
until eof (fail);
{end repeat}
stroka[k]: ='L==========¦=========¦==========¦===============-';
asm
mov ah, 1
mov cx, 2020h
int 10h
end;
window (1,1,80,25);
textbackground (black);
textcolor (white);
clrscr;
for i:=1 to 24 do
writeln (stroka[i]);
write (stroka[25]);
m:=1;
repeat
key:=readkey;
case key of
#80:if m+24
m:=m+1;
{end if}
#72:if m>1 then
m:=m-1;
{end if}
#81:if m+24
begin
m:=m+24;
if m+24>k then
m:=k-25;
{end if}
end;
{end if}
#73:if m>25 then
m:=m-24
else
m:=1;
{end if}
end;
{end case}
l:=1;
for a:=m to m+24 do
begin
gotoxy (1, l);
write (stroka[a]);
l:=l+1;
end;
until key=#27;
{end repeat}
close (fail);
end;
end.
Текст модуля poisk.tpu:
unit poisk;
interface
uses crt;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure poiskel (imya_faila:string);
implementation
procedure poiskel;
var fail: file of zapis;
n, i: byte;
sredstvastr, nomstr, oplatastr: string;
zap:zapis;
begin
window (1,12,80,25);
textcolor (white);
textbackground (black);
clrscr;
writeln ('введите номер элемента');
readln (n);
assign (fail, imya_faila);
reset (fail);
clrscr;
repeat
read (fail, zap);
str (zap.nom, nomstr);
for i:=length (nomstr) to 5 do
nomstr:=nomstr+' ';
{end for}
for i:=length (zap.familiya) to 9 do
zap.familiya:=' '+zap.familiya;
{end for}
str (zap.oplata, oplatastr);
for i:=length (oplatastr) to 8 do
oplatastr:=oplatastr+' ';
{end for}
case ord (zap.sredstva)+1 of
1:sredstvastr:=' Факс-модем';
2:sredstvastr:=' Модем';
3:sredstvastr:=' Факс';
4:sredstvastr:=' Нету';
end;
{end case}
if zap. nom=n then
begin
writeln ('текущий элемент:');
writeln ('г======T==========T=========T=========T===============');
writeln ('¦номер ¦ Фамилия ¦ Оплата ¦Номер АТС¦ Доп. средсва ¦');
writeln ('¦======+==========+=========+=========+===============¦');
writeln ('¦', nomstr, '¦', zap. familiya, '¦', oplatastr, '¦', zap. nomerATS:9,'¦', sredstvastr:15,'¦');
writeln ('L======¦==========¦=========¦=========¦===============-');
end;
{end if}
until eof (fail);
{end repeat}
close (fail);
end;
end.
Текст модуля perehod.tpu:
unit perehod;
interface
procedure perehodnab (var name: string);
implementation
procedure perehodnab;
var fail: file;
begin
writeln ('ўўҐ¤ЁвҐ Ёп д (c)" ');
readln (name);
assign (fail, name);
reset (fail, 1);
close (fail);
end;
end.
Текст модуля serdmaxmin.tpu:
unit sredmaxmin;
interface
uses crt;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
procedure naxogdenie (name:string);
implementation
procedure naxogdenie (name:string);
var fail: file of zapis;
zap:zapis;
verh, niz, min, max, i, j, k: integer;
kol_vo:array [1.100] of integer;
sum, sredn: real;
sredstvastr, oplatastr: string;
begin
assign (fail, name);
reset (fail);
repeat
writeln ('введите нижнюю границу диапазона');
readln (niz);
writeln ('введите верхнюю границу диапазона');
readln (verh);
if niz>verh then
writeln ('верхяя граница должна быть больше нижней');
{end if}
until verh>=niz;
{end repeat}
k:=1;
writeln ('г==========T=========T===========T===============');
writeln ('¦ Фамилия ¦ Оплата ¦ Номер ¦ Доп. средства ¦');
repeat
read (fail, zap);
for i:=length (zap.familiya) to 9 do
zap.familiya:=' '+zap.familiya;
{end for}
case ord (zap.sredstva)+1 of
1:sredstvastr:=' факс-модем';
2:sredstvastr:=' модем';
3:sredstvastr:=' факс';
4:sredstvastr:=' нету';
end;
{end case}
str (zap.oplata, oplatastr);
for i:=length (oplatastr) to 8 do
oplatastr:=oplatastr+' ';
{end for}
if (zap.oplata>=niz) and (zap.oplata<=verh) then
begin
kol_vo[k]: =zap.oplata;
k:=k+1;
writeln ('¦==========+=========+===========+===============¦');
writeln ('¦', zap. familiya, '¦', oplatastr:9,'¦', zap. nomerATS:11,'¦', sredstvastr, '¦');
end;
until eof (fail);
{end repeat}
writeln ('L==========¦=========¦===========¦===============-');
max:=kol_vo[1];
min:=kol_vo[1];
for j:=1 to k-1 do
begin
if kol_vo[j]>max then
max:=kol_vo[j];
if kol_vo[j]
min:=kol_vo[j];
sum:=sum+kol_vo[j];
end;
writeln ('макс. элемент — ', max);
writeln ('мин. элемент — ', min);
sredn:=sum/(k-1);
writeln ('среднее — ', sredn:0:3);
readln;
end;
end.
Текст модуля udalenie.tpu:
unit udalenie;
interface
uses crt;
type dopsredstva = (faxmodem, modem, fax, nety);
zapis = record
nom:byte;
familiya:string;
oplata:longint;
nomerATS:integer;
sredstva:dopsredstva;
end;
var
fail:file of zapis;
zap:dopsredstva;
name:string;
nom:integer;
procedure udalenieel (name:string; nom: integer);
implementation
procedure udalenieel (name:string; nom: integer);
begin
clrscr;
assign (fail, name);
reset (fail);
seek (fail, nom);
truncate (fail);
end;
end.
Текст модуля menu.tpu:
unit menu;
interface
uses crt;
type mymenu=array [1.25] of string;
procedure vertmenu (mas:mymenu; x, y, kol: integer; var long: integer);
implementation
procedure vertmenu;
var max, i, j: integer; l: byte; key: char;
begin
max:=length (mas[1]);
for i:=2 to kol do
if length (mas[i])>max then
max:=length (mas[i]);
{end if}
{end for}
for i:=1 to kol do
for j:=length (mas[i])+1 to max do
mas[i]: =mas[i]+' ';
{end for}
{end for}
window (x, y, x+max, y+kol);
textbackground (blue);
clrscr;
for i:=1 to kol do
begin
gotoxy (1, i);
write (mas[i]);
end;
{end for}
long:=1;
gotoxy (1,1);
textbackground (red);
textcolor (white);
write (mas[1]);
repeat
l:=long;
key:=readkey;
if key=#0 then
key:=readkey;
{end if}
case key of
#80:if long
long:=long+1
else
long:=1;
{end if}
#72:if long>1 then
long:=long-1
else
long:=kol;
{end if}
#13:exit;
end;
{end case}
gotoxy (1, l);
textcolor (white);
textbackground (blue);
write (mas[l]);
gotoxy (1, long);
textbackground (red);
textcolor (white);
write (mas[long]);
until false
{end repeat}
end;
end.