Смекни!
smekni.com

Информационная система расчетов по договорам (стр. 1 из 3)

КУРСОВОЙ ПРОЕКТ

Тема:

«Информационная система расчетов по договорам»

Минск 2010

Введение

Для разработки программы была выбрана среда визуального проектирования Borland Delphi 7.0. Она позволяет за короткий промежуток времени и с наименьшими затратами физических и умственных сил создавать прикладные программы различной направленности, обеспечивая при этом наличие дружественного оконного интерфейса. Указанные (а также ряд других) преимущества среды Delphi 7.0. обуславливают широкое её использование при создании программного обеспечения разнообразного назначения.

Представленная для разработки в качестве курсового проекта программа является учебной, и предназначена для демонстрации возможностей технологии ООП и представляет собой форму чем-то похожую на приложение Excel.

Данная программа вносит данные в специальные файлы, сортирует их, осуществляет поиск, внося все данные при этом в специально приготовленную структуру.

Данная программа напоминает базу данных, но написанную вручную, данное ПО может успешно применяться в качестве учебного пособия, но не может применяться в качестве коммерческого проекта.


1.Состав проекта Delphi

Проект содержит главную форму, форму осуществления поиска, форму осуществления сортировки, форму очистки строк, главная форма содержит такие элементы как кнопки, StringGrid, CheckBox, RadioButton, меню и манифест Windows.

Проектсодержитмодули Unit1, Unit2, Unit3, Uni4, UnitCl.

Unit1 – головной файл программы

Unit2 – файл формы очистки строк

Unit3 – файл формы поиска

Unit4 – файл формы сортировки

Все методы инкапсулированы в класс. Класс (UnitCl) имеет следующие методы:

procedure RowC (AStringGrid:TStringGrid); – процедураразметкистрок

procedure XDGr (AStringGrid:TStringGrid); – процедурасозданиязаголовкадляХД

procedure WTKGr (AStringGrid:TStringGrid); – процедурасозданиязаголовкадляВТК

procedure BANGr (AStringGrid:TStringGrid); – процедурасозданиязаголовкадляБАНК

procedure Clear (AStringGrid:TStringGrid); – процедураочисткиформы

procedure WriteXD (AStringGrid:TStringGrid); – процедуразаписивфайлХД

procedure WriteWTK (AStringGrid:TStringGrid); – процедуразаписивфайлВТК

procedure WriteBAN (AStringGrid:TStringGrid); – процедуразаписивфайлБАНК

procedure ReadXD (AStringGrid:TStringGrid); – процедурачтенияизфайлаХД

procedure ReadWTK (AStringGrid:TStringGrid); – процедурачтенияизфайлаВТК

procedure ReadBAN (AStringGrid:TStringGrid); – процедурачтенияизфайлаБАНК

procedure BANK (AStringGrid:TStringGrid); – процедуравнесенияданныхвструктуру

procedure WTK (AStringGrid:TStringGrid); – процедуравнесенияданныхвструктуру

procedure XD (AStringGrid:TStringGrid); – процедуравнесенияданныхвструктуру

procedure XDShow; – процедура просмотра структуры ХД

procedure WTKShow; – процедура просмотра структуры ВТК

procedure BANKShow; – процедура просмотра структуры БАНК

procedure null; – процедура сброса начала списка

procedure FindXD (AEdit1:TEdit; AStringGrid:TStringGrid); – процедурапоискавХД

procedure FindWTK (AEdit1:TEdit; AStringGrid:TStringGrid); – процедурапоискавВТК

procedure FindBANK (AEdit1:TEdit; AStringGrid:TStringGrid); – процедурапоискавБАНК

procedure MoySort1 (AStringGrid:TStringGrid); – процедурасортировкиспискаХДпоатр. 1

procedure MoySort2 (AStringGrid:TStringGrid); – процедурасортировкиспискаХДпоатр. 2

procedure MoySort5 (AStringGrid:TStringGrid); – процедурасортировкиспискаХДпоатр. 5

procedure MoySort7 (AStringGrid:TStringGrid); – процедурасортировкиспискаХДпоатр. 7


2.Статические данные и структуры

Запись линейного односвязного списка для данных хозяйственных договоров. В данной записи все поля являются строковыми, строковое поле имеет размер памяти 8 байт, следовательно, запись ХД будет иметь размер 56 байт. Поле Next во всех трех структурах означает адрес следующего элемента в списке. Поскольку в задании предлагался линейный односвязный список то переход от одного элемента к другому возможен только вперед, в отличие от двухсвязного списка, где можно перемещаться как вперед так и назад. В квадратных скобках указано количество символов, которое может входить в строку данного поля.

type

TPSpisXD=^TSpisXD;

TSpisXD = record

numb:string[20]; // номер

datzak:string[20]; // дата заключения

datzav:string[20]; // дата завершения

temadog:string[40]; // тема

namorg:string[20]; // наименование организации

priznak:string[15]; // признак

stoimost:string[10]; // стоимость в тыс руб.

next: TPSpisXD; // следующий элемент списка

end;

Запись линейного односвязного списка для данных о временных трудовых коллективах. В данной записи все поля являются строковыми, строковое поле имеет размер памяти 8 байт, следовательно, запись ВТК будет иметь размер 80 байт.

type

TPSpisWTK=^TSpisWTK;

TSpisWTK=record

fam:string[20]; // фамилия

name:string[20]; // имя

otc:string[20]; // отчество

god:string[40]; // дата рождения

kod:string[20]; // код договора

prznak:string[15]; // признак

zarplat:string[20]; // зарплата

adres:string[20]; // адрес

banknum:string[20]; // номербанка

rasschet:string[40]; // Р/С

next: TPSpisWTK;

end;

Запись линейного односвязного списка для данных с атрибутами банка. В данной записи все поля являются строковыми, строковое поле имеет размер памяти 8 байт, следовательно, запись БАНК будет иметь размер 40 байт.

type

TPSpisBAN=^TSpisBAN;

TSpisBAN=record

numotd:string[20]; // фамилия

gorod:string[20]; // имя

adress:string[20]; // отчество

naim:string[40]; // дата рождения

kod:string[20]; // код отделения

next: TPSpisBAN;

end;

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

var

head1: TPSpisXD; // начало (голова) списка XD

head2: TPSpisWTK; // голова списка WTK

head3: TPSpisBAN; // голова списка BAN

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

kp:TKp;

i, Row, CP: Integer;

SList: TStringList;

n: integer; // длина (кол-во элементов) списка

st: string; // строковое представление списка

Fil: string;

FirstStr: string;

3. Логическая структура данных

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

type

TPSpisXD=^TSpisXD;

TSpisXD = record

numb:string[20]; // номер

datzak:string[20]; // дата заключения

datzav:string[20]; // дата завершения

temadog:string[40]; // тема

namorg:string[20]; // наименование организации

priznak:string[15]; // признак

stoimost:string[10]; // стоимость в тыс руб.

next: TPSpisXD; // следующий элемент списка

end;

Данная структура является примером линейного односвязного списка, в этой структуре возможен переход только к следующему элементу (next) т.е. только вперед.

В линейном односвязном списке можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента из данного не возможно. Точно такая же схема базовой структуры и у 2-х других списков, а именно списка временных трудовых коллективов и списка банков. (Из-за их абсолютной похожести, различается только их количество и название элементов) те две схемы не приводятся.

4. Логические схемы операций в базовой структуре данных

Процедура сортировки списка на примере списка ХД.

procedure TKp. MoySort1 (AStringGrid:TStringGrid);

var

node: TPSpisXD; // новый узел списка

curr: TPSpisXD; // текущий узел списка

pre: TPSpisXD; // предыдущий, относительно curr, узел

i:integer; // counter

begin

Kp.null;

i:=1;

//repeat

while (i<11) do

begin

new(node);

node^.numb:=AStringGrid. Cells [1, i];

node^.datzak:=AStringGrid. Cells [2, i];

node^.datzav:=AStringGrid. Cells [3, i];

node^.temadog:=AStringGrid. Cells [4, i];

node^.namorg:=AStringGrid. Cells [5, i];

node^.priznak:=AStringGrid. Cells [6, i];

node^.stoimost:=AStringGrid. Cells [7, i];

curr:=head1;

pre:=NIL;

while (curr <> NIL) and (node.numb > curr^.numb) do

begin

// введенное значение больше текущего

pre:= curr;

curr:=curr^.next; // к следующему узлу

end;

if pre = NIL

then

begin

node^.next:=head1;

head1:=node;

end

else

begin

// новыйузелпосле pre, перед curr

node^.next:=pre^.next;

pre^.next:=node;

end;

i:=i+1;

end;

Kp.XDShow;

end;

procedure TKp.XDShow;

var

curr: TPSpisXD; // текущийэлементсписка

// st:string; // строковое представление списка

begin

n:=0;

st:='';

curr:=head1;

while curr <> NIL do

begin

n:=n+1;

st:=st+curr^.numb+' '+curr^.datzak+' '+curr^.datzav+' '+curr^.temadog+' '+curr^.namorg+' '+curr^.priznak+' '+curr^.stoimost+#13;

curr:=curr^.next;

end;

if n <> 0

then ShowMessage ('Список:'+#13+#13+st)

else ShowMessage ('В списке нет элементов.');

end;

procedure TKp.XD (AStringGrid:TStringGrid);

var

node: TPSpisXD; // новыйузелсписка

curr: TPSpisXD; // текущийузелсписка

pre: TPSpisXD; // предыдущий, относительно curr, узел

i:integer; // counter

// n:integer; // длина (кол-во элементов) списка

// st:string; // строковое представление списка

begin

i:=1;

//repeat

while (i<11) do

begin

new(node);

node^.numb:={Edit1. Text;} AStringGrid. Cells [1, i];

node^.datzak:= {Edit2. Text;} AStringGrid. Cells [2, i];

node^.datzav:= {Edit3. Text;} AStringGrid. Cells [3, i];

node^.temadog:= {Edit4. Text;} AStringGrid. Cells [4, i];

node^.namorg:= {Edit5. Text;} AStringGrid. Cells [5, i];

node^.priznak:= {Edit6. Text;} AStringGrid. Cells [6, i];

node^.stoimost:= {Edit7. Text;} AStringGrid. Cells [7, i];

// подходящееместодляузла

curr:=head1;

pre:=NIL;

while (curr <> NIL) and (node.numb > curr^.numb) do

begin

// введенное значение больше текущего

pre:= curr;

curr:=curr^.next; // к следующему узлу

end;

if pre = NIL

then

begin

node^.next:=head1;

head1:=node;

end

else

begin

// новыйузелпосле pre, перед curr

node^.next:=pre^.next;

pre^.next:=node;

end;

i:=i+1;

//until (i<11);

end;

ShowMessage (' ГОТОВО– СПИСОКХД!');

end;

procedure TKp. FindXD (AEdit1:TEdit; AStringGrid:TStringGrid);

var

curr:TPSpisXD; // текущий, проверяемыйузел

pre: TPSpisXD; // предыдущийузел

found:boolean; // TRUE – узел, которыйнадоудалить

// st:string;

// a:integer;

begin

if head1 = NIL then

begin

MessageDlg ('Списокпустой!', mtError, [mbOk], 0);

Exit;

end;

curr:=head1; // текущийузел– первыйузел

pre:=NIL; // предыдущегоузланет

found:=FALSE;

// найтиузел

=======

while (curr <> NIL) and (not found) do

begin

if (curr^.numb = {'13'} AEdit1. Text) xor (curr^.datzak = AEdit1. Text)

xor (curr^.datzav = AEdit1. Text) xor (curr^.temadog = AEdit1. Text)

xor (curr^.namorg = AEdit1. Text) xor (curr^.priznak = AEdit1. Text)

xor (curr^.stoimost = AEdit1. Text)

then found:=TRUE // нужныйузелнайден

else // кследующемуузлу

begin

pre:=curr;

curr:=curr^.next;

end;

=======

end;

if found then

begin

Kp. Clear(AStringGrid);

Kp.XDGr(AStringGrid);

Kp. RowC(AStringGrid);

ShowMessage ('Элементнайден');

AStringGrid. Cells [1,1]:=''+curr^.numb;

AStringGrid. Cells [2,1]:=''+curr^.datzak;

AStringGrid. Cells [3,1]:=''+curr^.datzav;

AStringGrid. Cells [4,1]:=''+curr^.temadog;

AStringGrid. Cells [5,1]:=''+curr^.namorg;

AStringGrid. Cells [6,1]:=''+curr^.priznak;

AStringGrid. Cells [7,1]:=''+curr^.stoimost;

end

else // если искомого в списке нет

MessageDlg ('Элементненайден', mtError, [mbOk], 0);

end;


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