- •Кемерово 2015
- •Задание на курсовую работу
- •Содержание
- •Введение
- •1. Техническое задание
- •Формулировка задачи
- •1.2. Описание входной и выходной информации
- •1.3. Требования к комплексу технических средств
- •1.4. Требования к интерфейсу конечного пользователя
- •2. Технический проект
- •2.1. Разработка форм представления входных данных
- •2.2. Разработка форм представления выходных данных
- •2.3. Проектирование программных модулей
- •3. Рабочий проект
- •3.1. Описание программы
- •3.2. Руководство пользователя
- •3.3. Руководство программиста
- •Список использованной литературы
- •Приложение a Главный модуль программы
- •Модуль заставки
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;
