Программный код с комментариями
Модуль основного интерфейса программы представляет собой работу основных функциональных элементов программы. Этот модуль является основой программы, исходный код, который представлен ниже.
unit usprint;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Printers, ComCtrls, DBGrids, Clipbrd,
OleServer, EXCEL97, EXCEL2000, ComObj, ActiveX, ExtCtrls, ExcelXP;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
SaveDialog1: TSaveDialog;
XLApp: TExcelApplication;
Panel1: TPanel;
Label1: TLabel;
Button3: TButton;
ComboBox1: TComboBox;
Button8: TButton;
ComboBox2: TComboBox;
Button4: TButton;
Button12: TButton;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure StringGrid1Click(Sender: TObject);
procedure StringGrid1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses adsbaz;
{$R *.dfm}
type
TNote=record
kod: string[200];
prod: string[255];
kol: string[150];
st: string[150];
data: string[100];
post: string[200];
adr: string[200];
post1: string[200];
adr1: string[150];
end;
var
NoteFile: file of TNote;
NoteData: TNote;
_Pos: integer;
function GetProgramPath : String;
begin
GetProgramPath:=ExtractFilePath(ParamStr(0));
end;
procedure ShowRecord;
begin
Form3.Edit1.Text:=NoteData.kod;
Form3.RichEdit1.Text:=NoteData.prod;
Form3.Edit2.Text:=NoteData.kol;
Form3.Edit3.Text:=NoteData.st;
Form3.Edit6.Text:=NoteData.data;
Form3.ComboBox2.Text:=Notedata.post;
Form3.ComboBox3.Text:=Notedata.adr;
Form3.ComboBox1.Text:=Notedata.post1;
Form3.ComboBox4.Text:=Notedata.adr1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AssignFile(NoteFile,GetProgramPath+'data\'+'adsbaz.dat'); // ñâÿçûâàåìïåðåìåííóþ ñ ôàéëîì
Reset(NoteFile); // îòêðûòèåôàéëà
_Pos:=0;
if not Eof(NoteFile) then // åñëè â ôàéëååñòüäàííûå
begin
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
_Pos:=FilePos(NoteFile)-1; // îïðåäåëåíèåðàñïîëîæ. óêàçàòåëÿ
ShowRecord; // ïîêàçàòüäàííûå
end;
StringGrid1.ColWidths[0]:=10;
StringGrid1.ColWidths[1]:=50;
StringGrid1.ColWidths[2]:=100;
StringGrid1.ColWidths[3]:=100;
StringGrid1.ColWidths[4]:=98;
StringGrid1.ColWidths[5]:=100;
StringGrid1.ColWidths[6]:=95;
StringGrid1.ColWidths[7]:=95;
StringGrid1.ColWidths[8]:=100;
StringGrid1.ColWidths[9]:=100;
StringGrid1.ColWidths[10]:=100;
StringGrid1.RowHeights[0]:=20;
StringGrid1.RowCount:=2;
StringGrid1.Cells[1,0]:='¹';
StringGrid1.Cells[2,0]:='Êîäïðîäóêöèè';
StringGrid1.Cells[3,0]:='Íàèìåíîâàíèåïðîäóêöèè';
StringGrid1.Cells[4,0]:='Êîëè÷åñòâî';
StringGrid1.Cells[5,0]:='Ñòîèìîñòü';
StringGrid1.Cells[6,0]:='Äàòà';
StringGrid1.Cells[7,0]:='Ïîñòàâùèê';
StringGrid1.Cells[8,0]:='Àäðåñ';
StringGrid1.Cells[9,0]:='Îòäåë';
StringGrid1.Cells[10,0]:='Àäìèíèñòðàòîð';
Form1.Caption:='Âûáîðêà... (0 çàïèñåéèç '+IntToStr(FileSize(NoteFile))+')';
end;
procedure TForm1.Button3Click(Sender: TObject);
Label Thenext1;
Label Thenext2;
Label Thenext3;
var
pPos,i,ch,zap: integer;
s: string;
begin
ch:=0;
for i:=1 to StringGrid1.RowCount-1 do
StringGrid1.Rows[i].Clear;
StringGrid1.RowCount:=2;
StringGrid1.FixedCols:=1;
StringGrid1.FixedRows:=1;
////////////////////////////////////////////////////////////////
if ComboBox1.Text='Äàòà'
then
begin
zap:=0;
for pPos:=0 to FileSize(NoteFile)-1 do
begin
Seek(NoteFile,pPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
if NoteData.data=''
then goto Thenext2;
s:=NoteData.data;
if pos(ComboBox2.Text,s)<>0
then
begin
ch:=ch+1;
StringGrid1.Cells[1,ch]:=IntToStr(ch)+'.';
StringGrid1.Cells[2,ch]:=NoteData.kod;
StringGrid1.Cells[3,ch]:=NoteData.prod;
StringGrid1.Cells[4,ch]:=NoteData.kol;
StringGrid1.Cells[5,ch]:=NoteData.st;
StringGrid1.Cells[6,ch]:=NoteData.data;
StringGrid1.Cells[7,ch]:=NoteData.post;
StringGrid1.Cells[8,ch]:=NoteData.adr;
StringGrid1.Cells[9,ch]:=NoteData.post1;
StringGrid1.Cells[10,ch]:=NoteData.adr1;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
zap:=zap+1;
Form1.Caption:='Âûáîðêà ('+IntToStr(zap)+' çàïèñåéèç '+IntToStr(FileSize(NoteFile))+')';
Application.ProcessMessages;
end;
Thenext2:
end;
Form1.Caption:='Âûáîðêà... ('+IntToStr(zap)+' çàïèñåéèç '+IntToStr(FileSize(NoteFile))+')';
StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;
////////////////////////////////////////////////////////////////
if ComboBox1.Text='Ïîñòàâùèê'
then
begin
zap:=0;
for pPos:=0 to FileSize(NoteFile)-1 do
begin
Seek(NoteFile,pPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
if NoteData.post='' then goto Thenext1;
s:=NoteData.post;
if s=ComboBox2.Text then
begin
ch:=ch+1;
StringGrid1.Cells[1,ch]:=IntToStr(ch)+'.';
StringGrid1.Cells[2,ch]:=NoteData.kod;
StringGrid1.Cells[3,ch]:=NoteData.prod;
StringGrid1.Cells[4,ch]:=NoteData.kol;
StringGrid1.Cells[5,ch]:=NoteData.st;
StringGrid1.Cells[6,ch]:=NoteData.data;
StringGrid1.Cells[7,ch]:=NoteData.post;
StringGrid1.Cells[8,ch]:=NoteData.adr;
StringGrid1.Cells[9,ch]:=NoteData.post1;
StringGrid1.Cells[10,ch]:=NoteData.adr1;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
zap:=zap+1;
Form1.Caption:='Âûáîðêà... ('+IntToStr(zap)+' çàïèñåéèç '+IntToStr(FileSize(NoteFile))+')';
Application.ProcessMessages;
end;
Thenext1:
end;
Form1.Caption:='Âûáîðêà... ('+IntToStr(zap)+' çàïèñåéèç '+IntToStr(FileSize(NoteFile))+')';
StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;
////////////////////////////////////////
if ComboBox1.Text='Íàèìåíîâàíèåïðîäóêöèè'
then
begin
zap:=0;
for pPos:=0 to FileSize(NoteFile)-1 do
begin
Seek(NoteFile,pPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
if NoteData.prod='' then goto Thenext3;
s:=NoteData.prod;
if s=ComboBox2.Text then
begin
ch:=ch+1;
StringGrid1.Cells[1,ch]:=IntToStr(ch)+'.';
StringGrid1.Cells[2,ch]:=NoteData.kod;
StringGrid1.Cells[3,ch]:=NoteData.prod;
StringGrid1.Cells[4,ch]:=NoteData.kol;
StringGrid1.Cells[5,ch]:=NoteData.st;
StringGrid1.Cells[6,ch]:=NoteData.data;
StringGrid1.Cells[7,ch]:=NoteData.post;
StringGrid1.Cells[8,ch]:=NoteData.adr;
StringGrid1.Cells[9,ch]:=NoteData.post1;
StringGrid1.Cells[10,ch]:=NoteData.adr1;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
zap:=zap+1;
Form1.Caption:='Âûáîðêà... ('+IntToStr(zap)+' çàïèñåéèç '+IntToStr(FileSize(NoteFile))+')';
Application.ProcessMessages;
end;
Thenext3:
end;
Form1.Caption:='Âûáîðêà... ('+IntToStr(zap)+' çàïèñåéèç '+IntToStr(FileSize(NoteFile))+')';
StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;
////////////////////////////////////////////////////////////////
if ComboBox1.Text='Âñå'
then
begin
zap:=0;
for pPos:=0 to FileSize(NoteFile)-1 do
begin
Seek(NoteFile,pPos);
Read(NoteFile,NoteData); //÷òåíèåäàííûõ
StringGrid1.Cells[1,pPos+1]:=IntToStr(pPos+1)+'.';
StringGrid1.Cells[2,pPos+1]:=NoteData.kod;
StringGrid1.Cells[3,pPos+1]:=NoteData.prod;
StringGrid1.Cells[4,pPos+1]:=NoteData.kol;
StringGrid1.Cells[5,pPos+1]:=NoteData.st;
StringGrid1.Cells[6,pPos+1]:=NoteData.data;
StringGrid1.Cells[7,pPos+1]:=NoteData.post;
StringGrid1.Cells[8,pPos+1]:=NoteData.adr;
StringGrid1.Cells[9,pPos+1]:=NoteData.post1;
StringGrid1.Cells[10,pPos+1]:=NoteData.adr1;
StringGrid1.RowCount:=StringGrid1.RowCount+1;
zap:=zap+1;
Form1.Caption:='Âûáîðêà... ('+IntToStr(zap)+' çàïèñåéèç '+IntToStr(FileSize(NoteFile))+')';
Application.ProcessMessages;
end;
Form1.Caption:='Âûáîðêà... ('+IntToStr(zap)+' çàïèñåéèç '+IntToStr(FileSize(NoteFile))+')';
StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;
////////////////////////////////////////////////////////////////
//Button1.Enabled:=true;
//Button2.Enabled:=true;
// Button6.Enabled:=true;
//Button6.Enabled:=true;
Button8.Enabled:=true;
//Button9.Enabled:=true;
Button12.Enabled:=true;
end;
procedure AutoSizeGridColumn(Grid: TStringGrid; column: integer);
var
i: integer;
temp: integer;
max: integer;
begin
max:=0;
for i:=0 to Grid.RowCount-1 do
begin
temp:=Grid.Canvas.TextWidth(Grid.Cells[column, i]);
if temp>max
then max:=temp;
end;
Grid.ColWidths[column]:=Max+Grid.GridLineWidth+6;
end;
procedure TForm1.Button8Click(Sender: TObject);
var
i: integer;
begin
for i:=0 to StringGrid1.ColCount-1 do
AutoSizeGridColumn(StringGrid1, i);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
var
cPos, i, j: integer;
s: string;
begin
if ComboBox1.Text='Âñå'
then ComboBox2.Enabled:=false
else ComboBox2.Enabled:=true;
//////////// ïîñòàâùèê
if ComboBox1.Text='Ïîñòàâùèê' then
begin
ComboBox2.Text:='';
ComboBox2.Items.Clear;
cPos:=0;
Seek(NoteFile,cPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
s:=NoteData.post;
for i:=0 to FileSize(NoteFile)-1 do
begin
if s<>'' then
begin
ComboBox2.Text:=s;
ComboBox2.Items.Add(s);
break;
end;
inc(cPos);
Seek(NoteFile,cPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
s:=NoteData.post;
end;
for cPos:=0 to FileSize(NoteFile)-1 do
begin
Seek(NoteFile,cPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
s:=NoteData.post;
if s<>'' then
begin
for i:=0 to ComboBox2.Items.Count-1 do
if pos(s,ComboBox2.Items.Strings[i])=0
then j:=2
else
begin
j:=1;
Break;
end;
end;
if j=2 then ComboBox2.Items.Add(s);
j:=0;
end;
end;
//////////// Íàèìåíîâàíèå
if ComboBox1.Text='Íàèìåíîâàíèåïðîäóêöèè' then
begin
ComboBox2.Text:='';
ComboBox2.Items.Clear;
cPos:=0;
Seek(NoteFile,cPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
s:=NoteData.prod;
for i:=0 to FileSize(NoteFile)-1 do
begin
if s<>'' then
begin
ComboBox2.Text:=s;
ComboBox2.Items.Add(s);
break;
end;
inc(cPos);
Seek(NoteFile,cPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
s:=NoteData.prod;
end;
for cPos:=0 to FileSize(NoteFile)-1 do
begin
Seek(NoteFile,cPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
s:=NoteData.prod;
if s<>'' then
begin
for i:=0 to ComboBox2.Items.Count-1 do
if pos(s,ComboBox2.Items.Strings[i])=0
then j:=2
else
begin
j:=1;
Break;
end;
end;
if j=2 then ComboBox2.Items.Add(s);
j:=0;
end;
end;
//////////////Äàòà
if ComboBox1.Text='Äàòà' then
begin
ComboBox2.Text:='';
ComboBox2.Items.Clear;
cPos:=0;
Seek(NoteFile,cPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
s:=NoteData.data;
for i:=0 to FileSize(NoteFile)-1 do
begin
if s<>'' then
begin
ComboBox2.Text:=s;
ComboBox2.Items.Add(s);
break;
end;
inc(cPos);
Seek(NoteFile,cPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
s:=NoteData.data;
end;
for cPos:=0 to FileSize(NoteFile)-1 do
begin
Seek(NoteFile,cPos);
Read(NoteFile,NoteData); // ÷òåíèåäàííûõ
s:=NoteData.data;
if s<>'' then
begin
for i:=0 to ComboBox2.Items.Count-1 do
if pos(s,ComboBox2.Items.Strings[i])=0
then j:=2
else
begin
j:=1;
Break;
end;
end;
if j=2 then ComboBox2.Items.Add(s);
j:=0;
end;
////////////////////////////////////////////////////////////////
ComboBox2.Sorted:=true;
end;
end;
procedure TForm1.Button12Click(Sender: TObject);
var
i,j,r,c: integer;
Excel,WorkBook,Sheet,TabGrid: Variant;
iIndex: OleVariant;
s: string;
f: textfile;
begin
AssignFile(f,ExtractFilePath(Application.ExeName)+'\data\firm_name.txt');
if FileExists(ExtractFilePath(Application.ExeName)+'\data\firm_name.txt')
then
begin
Reset(f);
Read(f,s);
end
else
begin
s:='Íàèìåíîâàíèå îðãàíèçàöèè';
Rewrite(f);
Write(f,s);
end;
CloseFile(f);
//
s:=InputBox('Íàèìåíîâàíèå âàøåéîðãàíèçàöèè','Ââåäèòåíàèìåíîâàíèå:',s);
if s='' then
begin
MessageDlg('Äëÿïåðåäà÷èäàííûõ â Excelòðåáóåòñÿââåñòèíàçâàíèåâàøåéîðãàíèçàöèè!',mtInformation,[mbOK],0);
Exit;
end;
//
AssignFile(f,ExtractFilePath(Application.ExeName)+'\data\firm_name.txt');
Rewrite(f);
Write(f,s);
CloseFile(f);
// 'ÍàèìåíîâàíèåÂàøåéîðãàíèçàöèè:'
//
iIndex:=1;
r:=StringGrid1.RowCount; // êîë-âîñòðîê
c:=StringGrid1.ColCount; // êîë-âîñòîëáöîâ
// Ñîçäà¸ììàññèâ-ìàòðèöó
TabGrid:=VarArrayCreate([0,(r-1),0,(c-1)],VarOleStr);
i:=0;
// Îïðåäåëÿåìöèêëäëÿçàïîëíåíèÿìàññèâà-ìàòðèöû
repeat
for j:=0 to (c-1) do // çàïîëíåíèåTabGridèç StringGrid1
TabGrid[i,j]:=StringGrid1.Cells[j+1,i];
inc(i,1);
until i>(r-1);
// ÇàãðóæàåìExcel
try
Excel:=CreateOleObject('Excel.Application'); // äëÿîñòàëüíûõ
except
Excel:=CreateOleObject('Excel.Application.10'); // äëÿ Office XP
end;
Excel.SheetsInNewWorkbook:=1;
WorkBook:=Excel.WorkBooks.Add;
Sheet:=WorkBook.WorkSheets[1];
Sheet.Name:='Êëàäîâùèê - Îò÷åò';
Sheet.Range['A6',Sheet.Cells.Item[r+5,c-1]].Value:=TabGrid;
// Îðèåíòàöèÿñòðàíèöû: êíèæíàÿ (xlPortraitèëè :=1)
Sheet.PageSetup.CenterHorizontally:=true;
Sheet.PageSetup.Orientation:=xlLandscape; // àëüáîìíàÿ (èëè :=2)
// Ïîëÿ (äðîáíûå ÷èñëàðàçäåëÿþòñÿòîëüêî '.')
Sheet.PageSetup.LeftMargin:=Excel.CentimetersToPoints(1);
Sheet.PageSetup.RightMargin:=Excel.CentimetersToPoints(1);
Sheet.PageSetup.TopMargin:=Excel.CentimetersToPoints(1);
Sheet.PageSetup.BottomMargin:=Excel.CentimetersToPoints(1);
// Êîëîíòèòóëû (äðîáíûå ÷èñëàðàçäåëÿþòñÿòîëüêî '.')
Sheet.PageSetup.HeaderMargin:=Excel.CentimetersToPoints(0.5);
// &Ñ, &Ê, &Ä - ñòðàíèöà, êîëâî (âñåãî), äàòà (dd,mm,yy)
// òîëüêîäëÿðóññêîãî MS-Office; äëÿ English - &P, &N, &D
Sheet.PageSetup.RightHeader:='Ñòðàíèöà&Ñ èç&Ê - &Ä';
// Ñâîéñòâàòàáëèöû
Sheet.Columns.WrapText:=true; // ïåðåíîñèòüïîñëîâàì
Sheet.Cells.Columns.AutoFit; // àâòîâûñîòàñòðîê
Sheet.Range['A'+IntToStr(6),'J'+IntToStr(6)].RowHeight:=28;
Sheet.Columns.HorizontalAlignment:=xlLeft;
Sheet.Columns.VerticalAlignment:=xlCenter;
Sheet.Columns.ColumnWidth:=12;
Sheet.Columns.Font.Size:=8;
// Øàïêàíàäòàáëèöåé ([3,4] - ñòðîêà, ñòîëáåö)
Sheet.Cells[3,4]:=s+' - Îò÷åòçà '+DateToStr(Date);
Sheet.Range['A3','J3'].HorizontalAlignment:=xlHAlignCenter;
Sheet.Range['A3','J3'].Font.Name:='Times New Roman';
Sheet.Range['A3','J3'].Font.Bold:=true;
Sheet.Range['A3','J3'].Font.Size:=14;
Sheet.Range['A3','J3'].Columns.WrapText:=false;
// Îáðàìëåíèåÿ÷ååê (xlDouble,...)
Sheet.Range['A'+IntToStr(6),'J'+IntToStr(r+5)].Columns.Borders.LineStyle:=xlContinuous;
// Øèðèíàñòîëáöîâ
Sheet.Range['A'+IntToStr(6),'A'+IntToStr(r+5)].ColumnWidth:=6;
Sheet.Range['B'+IntToStr(6),'B'+IntToStr(r+5)].ColumnWidth:=24;
Sheet.Range['C'+IntToStr(6),'C'+IntToStr(r+5)].ColumnWidth:=22;
Sheet.Range['D'+IntToStr(6),'D'+IntToStr(r+5)].ColumnWidth:=14;
Sheet.Range['E'+IntToStr(6),'E'+IntToStr(r+5)].ColumnWidth:=12;
Sheet.Range['F'+IntToStr(6),'F'+IntToStr(r+5)].ColumnWidth:=12;
Sheet.Range['G'+IntToStr(6),'G'+IntToStr(r+5)].ColumnWidth:=8;
Sheet.Range['H'+IntToStr(6),'H'+IntToStr(r+5)].ColumnWidth:=12;
Sheet.Range['I'+IntToStr(6),'I'+IntToStr(r+5)].ColumnWidth:=12;
Sheet.Range['J'+IntToStr(6),'J'+IntToStr(r+5)].ColumnWidth:=12;
// Ðàçìåðøðèôòà 6-ãî ñòîëáöà
Sheet.Range['A'+IntToStr(6),'J'+IntToStr(6)].Font.Size:=10;
// Âûðàâíèâàíèåïåðâîãîñòîëáöà
Sheet.Range['A'+IntToStr(6),'A'+IntToStr(r+5)].HorizontalAlignment:=xlHAlignCenter;
Sheet.Range['A'+IntToStr(6),'A'+IntToStr(r+5)].Font.Bold:=true;
// Âûðàâíèâàíèåïåðâîéñòðîêè
Sheet.Range['A'+IntToStr(6),'J'+IntToStr(6)].HorizontalAlignment:=xlCenter;
Sheet.Range['A'+IntToStr(6),'J'+IntToStr(6)].Font.Bold:=true;
// Ïîêàçûâàåì Excel
Excel.Visible:=True;
Excel.ScreenUpdating:=true;
// Unassign the Delphi Variant Matrix
Excel:=Unassigned;
WorkBook:=Unassigned;
Sheet:=Unassigned;
TabGrid:=Unassigned;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
StringGrid1.ShowHint:=false;
end;
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
i,j:integer;
begin
StringGrid1.ShowHint:=true;
j:=StringGrid1.Row;
StringGrid1.Hint:=StringGrid1.Cells[1,j];
for i:=2 to StringGrid1.ColCount-1 do
StringGrid1.Hint:=StringGrid1.Hint+' - '+StringGrid1.Cells[i,j];
end;
end.
С листингом остальных модулей можно ознакомиться в приложении на диске с программой.
Руководство пользователя
Программный продукт, разработанный в курсовом проекте, не требует установки и запускается с помощью исполняемого файла kommplat.exe с диска (Приложение В).
При запуске программного продукта появляется окно, для входа в программу. В окне необходимо ввести имя пользователя и пароль. Для входа в программу нужно нажать кнопку «Вход», а для отмены работы - кнопку «Отмена». Экранная форма окна входа в программу представлена на рисунке 14.
Рисунок 14 – Экранная форма входа в программу.
После успешного входа в программу на экране появляется главное окно, экранная форма которого представлена на рисунке 15.
Рисунок 15 – Экранная форма главного окна программы.
На главной форме представлена область с данными, которая в исходном состоянии неактивна. Также главная форма имеет строку меню, в которой сгруппированы основные операции работы с программой.
В программе существует два основных режима работы:
- просмотр оплаты платежей,
- работа со справочниками.
Когда установлена чистая база данных, то пользователю необходимо наполнить программу справочными данными. К таким данным относятся справочник «Абоненты» и справочник «Платежи». Доступ к работе со справочниками организован с помощью меню «Справочники» и выбора соответствующего подменю. Вид меню «Справочники» представлен на рисунке 16.
Рисунок 16 – Вид меню «Справочники».
При выборе пункта меню «Абоненты» пользователю на экран выводится окно справочника (рисунок 17), в котором можно выполнять ввод и редактирование информации об абонентах.
Рисунок 17 – Вид экранной формы справочника абонентов
Выбор пункта меню «Платежи» активизирует форму справочника платежей (список коммунальных услуг), которые абоненты должны оплачивать. Внешний вид формы справочника платежей представлен на рисунке18. В этой форме пользователю предоставляются возможности ввода и редактирования информации о платежах.
Рисунок 18 – Вид экранной формы справочника платежей.
Для просмотра информации об оплаченных платежах абонентов необходимо ввести параметры для просмотра. К ним относятся лицевой счет абонента или диапазон дат оплаты платежей. Для ввода параметров отведена специальная область в главном окне программы над таблицей с данными. Параметры просмотра можно вводить как по одному, так и комбинацией. Для отображения данных необходимо нажать кнопку «Показать», а для сброса и возврата программы в исходное состояние необходимо нажать кнопку «Сбросить». Внешний вид главной формы окна программы в режиме просмотра данных представлен на рисунке 19.
В режиме «Операции» возможно добавление, изменение и удаление данных. Эти операции доступны из контекстного меню на таблице с данными и продублированы в строке меню. Этот режим обеспечивает возможность редактирования оплаты платежей абонентов и доступен только при просмотре данных.
Операции добавления и редактирования информации об оплате сведены в единую экранную форму (рисунок 20), которая вызывается соответствующим пунктом меню или командой панели инструментов.После появления экранной формы редактирования, в элементы формы необходимо ввести информацию и нажать кнопку «Сохранить» либо нажать кнопку «Закрыть», если работы были завершены.
Удаление информации происходит путем выбора соответствующего пункта меню и выполняется непосредственно в окне главной формы.
Рисунок 19 – Вид главной формы программы при просмотре данных.
Рисунок 20 – Экранная форма редактирования данных об оплатах.
Кроме основных операций в программе предусмотрена печать справки об оплате. Данный режим доступен только при просмотре оплат абонента и активизируется по выполнению команды «Печать оплаты» главного меню программы «операции». В этом случае, на экране появится окно предварительного просмотра (рисунок 21). В окне присутствуют возможности просмотра бланка в различных режимах, настройка принтера и непосредственно, печать бланка.
В программе предусмотрен режим работы с учетными записями пользователей. Вид формы для работы с пользователями представлен на рисунке 22. Вызов режима осуществляется с помощью меню «Сервис» - «Пользователи».
Рисунок 21 – Экранная форма предварительного просмотра печати.
Рисунок 22 – Экранная форма работы с пользователями программы.
Работа с пользователями осуществляется с помощью кнопок навигатора, расположенного внизу таблицы. Данные кнопки позволяют добавлять, редактировать и удалять информацию.
Выход из программы осуществляется с помощью закрытия окна программы специальной кнопкой либо с помощью пункта меню «Файл» - «Выход».
Заключение
В ходе работы над курсовым проектом в соответствии с техническим заданием был создан программный продукт для учета коммунальных платежей. Назначение программы состоит в систематизации, учете, просмотра и печати информации о коммунальных платежах абонентов.
В результате проектирования дан анализ технического задания, на основе которого приведены и рассмотрены основные пути решения поставленной задачи. Рассмотрены основные средства разработки программы, достоинства и недостатки которых позволили найти оптимальный вариант программных и аппаратных средств разработки приложения. Описан алгоритм работы программы и приведена методика пользователя. Одним из этапов проектирования являлось проведение тестирования программы, в ходе которого выявлено, что программа является логически завершенной и не содержит явных ошибок.
Областью применения данной программы могут служить информационные центры организаций по учету и обработке коммунальных платежей населения.
Литература
1 MicrosoftAccess 2007: справочник – СПб: Питер, 2011 – 354 с.
2 MicrosoftOffice XP. Шаг за шагом: Практ. пособ. - М.: Издательство ЭКОМ, 2010 – 875 с.
3 Архангельский А. Я. Язык SQL в Delphi 2009– М.: ЗАО «Издательство БИНОМ», 2010 – 214 с.
4 Брябрин В. М. Программное обеспечение персональных ЭВМ. - М.: Hаука, 2009 – 311 с.
5 Вирт Н. Алгоритмы и структуры данных – М.: Мир, 2010 – 326 с.
6 Гетц К., Литвин П., Бэрон Э. Access. Сборник рецептов для профессионалов – СПб: Питер, 2010 – 326 с.
7 Гофман В. А., Хомоненко А. Д. Delphi2009 – СПб.: БХВ - Санкт – Петербург, 2010 – 328 с.
8 Зелковиц М., Шоу А., Гэннон Дж. Принципы разработки программного обеспечения – М.: Мир, 2009 - 368 с
9 Колесниченко Н. А., Шишигин В. С. Аппаратные средства РС. – СПб.: БХВ - Санкт – Петербург, 2009 – 542 с.
10 Кулаков А. Ф. Оценка качества программ ЭВМ. - Киев: Техника, 2010 – 167 с.
Приложение А
Блок – схема алгоритма работы программы
Рисунок А. 1 – Блок-схема алгоритма работы программы
Приложение Б
Структура базы данных
Рисунок Б. 1 – Структура базы данных
Приложение В
Диск с программой