Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа Чиркин.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
326.14 Кб
Скачать

3. Рабочий проект

3.1. Описание программы

В рамках данной работы была разработана программа «Телефонная станция». Программа была разработана в объектно-ориентированной среде Lazarus и имеет модуль запуска в виде exe-файла, таким образом, для работы программы не нужно дополнительное программное обеспечение.

Данная программа составлена из модулей, листинг которых приведен в Приложении 1. Их роль, связь и выполняемые функции описаны ниже.

Для запуска программы нужно запустить файл ATS.exe

Из главного меню модуля ATSmain.pas можно запустить любую функцию программы. При нажатии пункта меню «Сохранить как» пользователь получает возможность сохранить базу в нужный ему файл. При выборе пункта меню «Открыть как» пользователь выбирает файл с нужной ему БД. Для того чтобы открыть данные об абонентах необходимо выбрать пункт «Открыть» в меню «Файл».

При нажатии пункта меню «Формат» появляется подменю, состоящее из пункта: «Шрифт». При нажатии на который, пользователь получит возможность редактировать шрифт некоторых компонентов.

При выборе пункта меню «Справка», пользователь получает краткую информацию о программе.

Пункт меню «Выход» осуществляет выход из программы в ОС.

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

Для того чтобы начать работу в программе, необходимо запустить файл ATS.exe. После этого на экране появится загрузочный экран программы (рис.3.2.1).

Рис.3.2.1 Загрузочный экран программы «Телефонная база»

Затем на экране отобразится главное окно программы (рис.3.2.2).

Рис.3.2.2. Внешний вид главного окна программы

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

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

Основные компоненты программы (обе таблицы и поле ввода информации) имеют собственное контекстное меню.

1)Меню для поля ввода информации содержит в себе два пункта:

  • Очистить поле

  • Справка

2)Меню для таблицы вывода всех абонентов содержит в себе четыре пункта:

  • Открыть

  • Сохранить как

  • Очистить

  • Справка

3)Меню для таблицы вывода абонентов с задолженностью содержит в себе три пункта

  • Показать список

  • Очистить

  • Справка

При помощи круговой диаграммы программа демонстрирует две категории абонентов:

  • Абоненты, у которых нет задолженности

  • Абоненты, имеющие задолженность

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

1)Функция StringisNumber – проверяет является ли символ строки, находящейся в файле цифрой.

function StringIsNumber(Data:String): Boolean;

var start, i: Integer;

res: Boolean;

begin

res:= true;

if Length(Data) = 0

then res:= false

else

begin

start:= 1;

if (Data[start] = '-')

then start:= 2;

for i:= start to Length(Data) do

begin

if not (Data[i] in ['0'..'9'])

then

begin

res:= false;

break;

end;

end;

end;

Result:= res;

end;

2)Процедура Grafik – отвечает за постройку графика в прогармме.

procedure Grafik (SG:TStringGrid; res: TPieSeries);[2]

var neg,pos1:integer;

begin

neg:=0;

pos1:=0;

for i:=1 to SG.RowCount-1 do

if strtoint(SG.cells[3,i])<40 then

inc(neg) else

inc(pos1);

if pos1+neg>0 then

With res do

begin

Clear;

Add(pos1,'Нет долгов',clYellow);

Add(neg,'Имеется долг',clBlue);

end;

end;

3) Процедура spisok – формирует строку, выводящуюся в справку.[5]

procedure spisok(SG:TStringGrid);

var

row:integer;

ind,nomer,MTP,balance,ost,s:string;

begin

row:=SG.row;

ind:='Выделен абонент с номером: '+SG.cells[0,row]+#13#10+#13#10;

nomer:='Номер телефона: ' + SG.cells[0,row]+#13#10;

MTP:='Расходы на МТР: ' +SG.cells[1,row]+' р'+#13#10;

balance:='Внесённая сумма: ' +SG.cells[2,row]+' р'+#13#10;

ost:='Остаток на счёте: ' +SG.cells[3,row]+' р'+#13#10;

s:=ind+nomer+MTP+balance+ost;

ShowMessage(s);

end;

3)Процедура AddNumber – отвечает за добавление новых строк в файл.[2]

procedure AddNumber(FileName:String; NewLine:String);

var OTable1: TextFile;

begin

AssignFile(OTable1, FileName);

Append(OTable1);

Writeln(OTable1, NewLine);

CloseFile(OTable1);

end;

4)Процедура ReplaceNumber – отвечает за замену, существующей строки в файле. Замена происходит при повторном введении одинаковых телефонных номеров, если пользователь согласится на неё.[5,6]

procedure ReplaceNumber(FileName:String; Position:Integer; NewLine:String);

var i: Integer;

OTable1: TextFile;

NewText, OldLine: String;

begin

AssignFile(OTable1, FileName);

Reset(OTable1);

i:= 0;

NewText:= '';

while not eof (OTable1) do

begin

Readln(OTable1, OldLine);

if i = Position

then NewText:= NewText + NewLine + #13#10

else NewText:= NewText + OldLine + #13#10;

inc(i);

end;

CloseFile(OTable1);

Rewrite(OTable1);

Write(OTable1, NewText);

CloseFile(OTable1);

end;

5)Функция CheckNumber – проверяет сколько “групп” цифр находится в строке. Программа работает с четырьмя “группами” цифр (номер телефона, баланс, МТР, остаток).[2]

function CheckNumber(FileName:String; Phone:String): Integer;

var position, i : Integer;

OTable1: TextFile;

strTemp: String;

List: TStrings;

begin

AssignFile(OTable1, FileName);

Reset(OTable1);

i:= -1;

position:= -1;

while not eof (OTable1) do

begin

Readln(OTable1, strTemp);

List := TStringList.Create;

ExtractStrings(['|'], [], PChar(strTemp), List);

inc(i);

if List.Count > 0

then

if List[0] = Phone

then

begin

position:= i;

break;

end;

end;

CloseFile(OTable1);

Result:= position;

end;

6) Процедура DeleteNumber – служит для удаления выделенной строки из файла.[6,5]

procedure DeleteNumber(FileName:String; Position:Integer);

var i: Integer;

OTable1: TextFile;

NewText, OldLine: String;

begin

AssignFile(OTable1, FileName);

Reset(OTable1);

i:= 0;

NewText:= '';

while not eof (OTable1) do

begin

Readln(OTable1, OldLine);

if i <> Position

then NewText:= NewText + OldLine + #13#10;

inc(i);

end;

CloseFile(OTable1);

Rewrite(OTable1);

Write(OTable1, NewText);

CloseFile(OTable1);

end;

7)Функция LoadDataInGrid – данная функция загружает выбранный пользователем файл в таблицу.[6]

function LoadDataInGrid(FileName:String; SG: TStringGrid): Boolean;

var i, k, t: Integer;

OTable1: TextFile;

strTemp: String;

List: TStrings;

res: Boolean;

begin

res:=true;

AssignFile(OTable1, FileName);

k:= 1;

Reset(OTable1);

while not eof (OTable1) do

begin

Readln(OTable1, strTemp);

if strTemp <> '' then

begin

List:= TStringList.Create;

ExtractStrings(['|'], [], PChar(strTemp), List);

if List.Count < 4

then res:= false

else

begin

for t:= 1 to 3 do

if not StringIsNumber(List[t])

then

begin

res:= false;

break; // конец цикла for t:= 1 to 3 do

end;

end;

if res

then

begin

if k > SG.RowCount - 1

then SG.RowCount:= k + 1;

for i:= 0 to 3 do

SG.Cells[i, k]:= List[i];

inc(k);

end

else

break; // конец цикла while not eof (OTable1) do

end;

end;

CloseFile(OTable1);

Result:= res;

end;