Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КР_Кушнір_текст.doc
Скачиваний:
2
Добавлен:
21.08.2019
Размер:
395.78 Кб
Скачать

Перелік використаних джерел та літератури

  1. Вендров А.М. Проектирование програмного обеспечения экономических информационных систем. – М., Финансы и статистика, 2000. – С.347.

  2. Глинський Я.М., Анохін В.Є., Ряжська В.А. Паскаль. Turbo Pascal & Delphi/ Навчальний посібник. Львів – 2003. – С.141.

  3. Митчелл К.Керман. Программирование и отладка в Delphi. Учебный курс. Москва – Санкт-Петербург – Киев - 2003. – С.669.

  4. Міжнародний стандарт ISO/IEC 12207: 1995-08-01.

  5. Орлов С.А.. Технологии разработки программного обеспечения. Учебник для ВУЗов. Москва-… 2002, - 463с.

  6. Пономаренко В.С. Проектування інформаційних систем. – К., ВЦ «Академія», 2002. – С.498.

  7. Пономаренко В.С. Інформаційні системи і технології в економіці. – К., ВЦ «Академія», 2002. – С.542.

ДОДАТОК

Програмний код

unit UM;

{Автоматизація обчислень в таблицях}

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, Menus, XPMan;

type

TFM = class(TForm)

StringGrid1: TStringGrid;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

N14: TMenuItem;

N21: TMenuItem;

N22: TMenuItem;

N31: TMenuItem;

N32: TMenuItem;

N23: TMenuItem;

N33: TMenuItem;

N41: TMenuItem;

N42: TMenuItem;

N43: TMenuItem;

N44: TMenuItem;

N45: TMenuItem;

N5: TMenuItem;

XPManifest1: TXPManifest;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

N24: TMenuItem;

N34: TMenuItem;

N46: TMenuItem;

procedure LoFromFile(filename: string);

procedure SaToFile(filename: string);

procedure calk_col;

procedure calk_row;

procedure FormActivate(Sender: TObject);

procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

procedure N11Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure N21Click(Sender: TObject);

procedure N22Click(Sender: TObject);

procedure N23Click(Sender: TObject);

procedure N24Click(Sender: TObject);

procedure N31Click(Sender: TObject);

procedure N32Click(Sender: TObject);

procedure N33Click(Sender: TObject);

procedure N34Click(Sender: TObject);

procedure N41Click(Sender: TObject);

procedure N42Click(Sender: TObject);

procedure N44Click(Sender: TObject);

procedure N45Click(Sender: TObject);

procedure N46Click(Sender: TObject);

end;

TTab=record

col: integer;

row: integer;

val: string[100];

end;

function rozdil: char;

var

FM: TFM;

rz: char; //Розділювач між цілою та дробовою частиною дійсного числа

ft: file of TTab;

Tab: TTab;

implementation

{$R *.dfm}

//Функція, що повертає символ розділювача

//між цілою та дробовою частиною дійсного числа

//працює лише при виконанні exe-файлу проекту

function rozdil: char;

begin

rozdil:='.';

try

strtofloat('1.1');

except

rozdil:=',';

end;

end;

//Процедура читання даних з файлів

procedure TFM.LoFromFile(filename: string);

var rc,rw: integer;

begin

assignfile(ft,filename);

reset(ft);

rc:=0;

rw:=0;

while not eof(ft) do

begin

read(ft, Tab);

if Tab.col>rc then rc:=Tab.col;

if Tab.row>rw then rw:=Tab.row;

StringGrid1.Cells[Tab.col,Tab.row]:=Tab.val;

end;

closefile(ft);

if (rc>2) and (rw>2)

then begin

StringGrid1.ColCount:=rc+1;

StringGrid1.RowCount:=rw+1;

end

else begin

showmessage('Помилка в даних файлу');

FM.FormActivate(self);

end;

end;

//Процедура запису даних у файл

procedure TFM.SaToFile(filename: string);

var i,j: integer;

begin

assignfile(ft,filename);

rewrite(ft);

for i:=0 to StringGrid1.ColCount-1 do

for j:=0 to StringGrid1.RowCount-1 do

begin

Tab.col:=i;

Tab.row:=j;

Tab.val:=StringGrid1.Cells[i,j];

write(ft, tab);

end;

closefile(ft);

end;

//Обчислення сум по стовпцях

procedure TFM.calk_col;

var i,j: integer; sum: real;

begin

for i:=1 to StringGrid1.ColCount-2 do

begin

sum:=0;

for j:=1 to StringGrid1.RowCount-2 do

if StringGrid1.Cells[i,j]<>''

then sum:=sum+strtofloat(StringGrid1.Cells[i,j]);

StringGrid1.Cells[i,StringGrid1.RowCount-1]:=floattostr(sum);

end;

end;

//Обчислення сум по рядках

procedure TFM.calk_row;

var i,j: integer; sum: real;

begin

for i:=1 to StringGrid1.RowCount-2 do

begin

sum:=0;

for j:=1 to StringGrid1.ColCount-2 do

if StringGrid1.Cells[j,i]<>''

then sum:=sum+strtofloat(StringGrid1.Cells[j,i]);

StringGrid1.Cells[StringGrid1.ColCount-1,i]:=floattostr(sum);

end;

end;

//Визначення символу розділювача між цілою та дробовою частиною дійсного числа

//під час завантаження проекту на виконання

procedure TFM.FormActivate(Sender: TObject);

begin

{rz:=rozdil; }

rz:=',';

//Початкові заголовки та розміри таблиці

StringGrid1.Cells[1,0]:='Стовпець 1';

StringGrid1.Cells[2,0]:='Стовпець 2';

StringGrid1.Cells[3,0]:=' Суми по рядках';

StringGrid1.Cells[0,1]:='Рядок 1';

StringGrid1.Cells[0,2]:='Рядок 2';

StringGrid1.Cells[0,3]:='Суми по стовпцях';

StringGrid1.ColCount:=4;

StringGrid1.RowCount:=4;

end;

//Встановлення кольору останнього стовпця та рядку

procedure TFM.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

begin

if (ACol=StringGrid1.ColCount-1) or (ARow=StringGrid1.RowCount-1) then

begin

StringGrid1.Canvas.Brush.Color:=$008282FF;

StringGrid1.Canvas.Font.Color:=clWhite ;

StringGrid1.Canvas.Font.Size:=8;

StringGrid1.Canvas.FillRect(Rect);

StringGrid1.Canvas.TextOut(Rect.Left+3,Rect.Top+5,StringGrid1.Cells[ACol,ARow]);

end;

end;

//Заборона виділення підсумкових комірок

procedure TFM.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

begin

if (ACol=StringGrid1.ColCount-1) or (ARow=StringGrid1.RowCount-1) then

CanSelect:=false;

end;

//Керування дозволом введення символів для зображення дійсних чисел

procedure TFM.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9':;

'-': if length(StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row])>0 then key:=#0;

'.': if rz<>'.' then key:=#0 else

if pos('.',StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row])>0

then key:=#0;

',': if rz<>',' then key:=#0 else

if pos(',',StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row])>0

then key:=#0;

else key:=#0;

end;

end;

//Завантаження даних з файлу

procedure TFM.N11Click(Sender: TObject);

begin

if opendialog1.Execute then

LoFromFile(opendialog1.FileName);

end;

//Збереження даних у файлі

procedure TFM.N12Click(Sender: TObject);

begin

if savedialog1.Execute then

SaToFile(savedialog1.FileName);

end;

//Завершення роботи проекту

procedure TFM.N14Click(Sender: TObject);

begin

if fileexists('Dan.tmp')

then deletefile('Dan.tmp');

close;

end;

//Додавання стовпця

procedure TFM.N21Click(Sender: TObject);

var zagcol, zagrow: string;

begin

zagcol:=Stringgrid1.Cells[Stringgrid1.ColCount-1,0];

zagrow:=Stringgrid1.Cells[0,Stringgrid1.RowCount-1];

Stringgrid1.cols[Stringgrid1.ColCount-1].Clear;

Stringgrid1.rows[Stringgrid1.RowCount-1].Clear;

Stringgrid1.ColCount:=Stringgrid1.ColCount+1;

Stringgrid1.Cells[Stringgrid1.ColCount-1,0]:=zagcol;

Stringgrid1.Cells[0,Stringgrid1.RowCount-1]:=zagrow;

FM.Width:=FM.Width+Stringgrid1.ColWidths[Stringgrid1.ColCount-2];

end;

//Видалення стовпця

procedure TFM.N22Click(Sender: TObject);

var i,w: integer; zagcol, zagrow: string;

begin

zagcol:=Stringgrid1.Cells[Stringgrid1.ColCount-1,0];

zagrow:=Stringgrid1.Cells[0,Stringgrid1.RowCount-1];

Stringgrid1.cols[Stringgrid1.ColCount-1].Clear;

Stringgrid1.rows[Stringgrid1.RowCount-1].Clear;

Stringgrid1.Cells[Stringgrid1.ColCount-1,0]:=zagcol;

Stringgrid1.Cells[0,Stringgrid1.RowCount-1]:=zagrow;

if Stringgrid1.ColCount>4 then

begin

w:=Stringgrid1.ColWidths[Stringgrid1.col];

for i:=Stringgrid1.Col to Stringgrid1.ColCount-1 do

Stringgrid1.Cols[i]:=Stringgrid1.Cols[i+1];

Stringgrid1.ColCount:=Stringgrid1.ColCount-1;

FM.Width:=FM.Width-w;

end;

end;

//Зміна заголовку поточного стовпця

procedure TFM.N23Click(Sender: TObject);

var zag: string;

begin

zag:=stringgrid1.Cells[stringgrid1.Col,0];

if InputQuery('','',zag) then stringgrid1.Cells[stringgrid1.Col,0]:=zag;

end;

//Змінити заголовок підсумкового стовпця

procedure TFM.N24Click(Sender: TObject);

var zag: string;

begin

zag:=stringgrid1.Cells[stringgrid1.ColCount-1,0];

if InputQuery('','',zag) then stringgrid1.Cells[stringgrid1.ColCount-1,0]:=zag;

end;

//Додавання рядку

procedure TFM.N31Click(Sender: TObject);

var zagcol, zagrow: string;

begin

zagcol:=Stringgrid1.Cells[Stringgrid1.ColCount-1,0];

zagrow:=Stringgrid1.Cells[0,Stringgrid1.RowCount-1];

Stringgrid1.cols[Stringgrid1.ColCount-1].Clear;

Stringgrid1.rows[Stringgrid1.RowCount-1].Clear;

Stringgrid1.RowCount:=Stringgrid1.RowCount+1;

Stringgrid1.Cells[Stringgrid1.ColCount-1,0]:=zagcol;

Stringgrid1.Cells[0,Stringgrid1.RowCount-1]:=zagrow;

FM.Height:=FM.Height+Stringgrid1.RowHeights[Stringgrid1.rowCount-2];

end;

//Видалення рядку

procedure TFM.N32Click(Sender: TObject);

var i,h: integer; zagcol, zagrow: string;

begin

zagcol:=Stringgrid1.Cells[Stringgrid1.ColCount-1,0];

zagrow:=Stringgrid1.Cells[0,Stringgrid1.RowCount-1];

Stringgrid1.cols[Stringgrid1.ColCount-1].Clear;

Stringgrid1.rows[Stringgrid1.RowCount-1].Clear;

Stringgrid1.Cells[Stringgrid1.ColCount-1,0]:=zagcol;

Stringgrid1.Cells[0,Stringgrid1.RowCount-1]:=zagrow;

if Stringgrid1.RowCount>4 then

begin

h:=Stringgrid1.RowHeights[Stringgrid1.row];

for i:=Stringgrid1.Row to Stringgrid1.RowCount-1 do

Stringgrid1.Rows[i]:=Stringgrid1.Rows[i+1];

Stringgrid1.RowCount:=Stringgrid1.RowCount-1;

FM.Height:=FM.Height-h;

end;

end;

//Зміна заголовку поточного рядку

procedure TFM.N33Click(Sender: TObject);

var zag: string;

begin

zag:=stringgrid1.Cells[0,stringgrid1.Row];

if InputQuery('','',zag) then stringgrid1.Cells[0,stringgrid1.Row]:=zag;

end;

//Зміна заголовок підсумкового рядку

procedure TFM.N34Click(Sender: TObject);

var zag: string;

begin

zag:=stringgrid1.Cells[0,stringgrid1.RowCount-1];

if InputQuery('','',zag) then stringgrid1.Cells[0,stringgrid1.RowCount-1]:=zag;

end;

//Обчислення підсумки по рядках

procedure TFM.N41Click(Sender: TObject);

begin

calk_row;

end;

//Обчислення підсумки по стовпцях

procedure TFM.N42Click(Sender: TObject);

begin

calk_col;

end;

//Сортування за спаданням в підсумковому стовпці

procedure TFM.N44Click(Sender: TObject);

var sorted: boolean; i: integer;

begin

SaTofile('Dan.tmp');

try

repeat

sorted:= true;

for i:=1 to StringGrid1.RowCount-3 do

begin

if strtofloat(StringGrid1.Cells[StringGrid1.colcount-1,i]) <

strtofloat(StringGrid1.Cells[StringGrid1.colcount-1,i+1])

then

begin

StringGrid1.Rows[StringGrid1.RowCount]:=StringGrid1.Rows[i];

StringGrid1.Rows[i]:=StringGrid1.Rows[i+1];

StringGrid1.Rows[i+1]:=StringGrid1.Rows[StringGrid1.RowCount];

sorted:=false;

end;

end;

StringGrid1.Rows[StringGrid1.RowCount].Clear;

until sorted;

n44.Enabled:=false;

n45.Enabled:=false;

n46.Enabled:=true;

except

showmessage('Невідповідність типів даних')

end;

end;

//Сортування за зростанням в підсумковому стовпці

procedure TFM.N45Click(Sender: TObject);

var sorted: boolean; i: integer;

begin

SaTofile('Dan.tmp');

try

repeat

sorted:= true;

for i:=1 to StringGrid1.RowCount-3 do

begin

if strtofloat(StringGrid1.Cells[StringGrid1.colcount-1,i]) >

strtofloat(StringGrid1.Cells[StringGrid1.colcount-1,i+1])

then

begin

StringGrid1.Rows[StringGrid1.RowCount]:=StringGrid1.Rows[i];

StringGrid1.Rows[i]:=StringGrid1.Rows[i+1];

StringGrid1.Rows[i+1]:=StringGrid1.Rows[StringGrid1.RowCount];

sorted:=false;

end;

end;

StringGrid1.Rows[StringGrid1.RowCount].Clear;

n44.Enabled:=false;

n45.Enabled:=false;

n46.Enabled:=true;

until sorted;

except

showmessage('Невідповідність типів даних')

end;

end;

//Відновлення порядку розташування рядків

procedure TFM.N46Click(Sender: TObject);

begin

if fileexists('Dan.tmp') then

begin

LoFromFile('Dan.tmp');

DeleteFile('Dan.tmp');

n44.Enabled:=true;

n45.Enabled:=true;

n46.Enabled:=false;

end;

end;

end.