2.2 Програмна модель.
Завданням роботи є створення програми – органайзера для планування робочого часу, ведення записної і телефонної книжки. До складу додатка повинні входити: калькулятор, записна і телефонна книжка, годинник, календар. Захистити додаток від копіювання шляхом прив’язки до параметра в системному реєстрі. Створити інсталяцію, оптимізовану для розповсюдження на дискетах.
Програма створена в середовищі Borland Delphi 7 і складається з кількох модулів. Крім того, в ній застосовуються XML таблиці.
Основними операціями, виконуваними програмою, є: робота з базами, обчислення(калькулятор), вивод поточної дати і часу.
Загальний алгоритм роботи програми нескладний: при роботі з базами записника і телефонної книги користувач вводить дані, які, за умови коректного вводу, записуються в базу. Після цього обирається певна опція з переліку доступних з виділенням запису, якщо це операція над окремим елементом або опція маніпуляції всією базою. Якщо всі дії виконано, обирається опція виходу.
Графічне відображення алгоритму має такий вигляд(схема1):
Схема 1. Загальний алгоритм роботи програми.
Решта функцій, визначених у програмі, має схожий, стандартний алгоритм, тому нема потреби ще раз повторювати схему.
Розділ 3. Розробка інтерфейсу і тестування програми
3.1 Інтерфейс
Для створення програми були використані XML-таблиці і елементи ClientDataSet та DataSourse, що застосовуються для розробки баз даних і розташовані на вкладці Data Access. Крім того, необхідними є компоненти DBGrid і DBNavigator, розташовані на вкладці DataControls.
В ході розробки програми було визначено, що програма складатиметься з кількох модулів: головного і підлеглих. Підлеглі модулі викликликаються і використовуються головним модулем. Головний модуль міститиме в собі записник, годинник, календар і інформаційне повідомлення.
Один з підлеглих модулів вміщує телефонну книгу, подібну за структурою до записника. Другий модуль вміщує в собі калькулятор.
Для розробки інтерфейсу було використано 3 форми, відповідно до числа модулів: 1 головна(рис.1) і 2 модальні.
Рис. 1 Головна форма.
Основою форми є вже вищезгадані ClientDataSet та DataSourse, DBGrid і DBNavigator.
DBGrid – це поле, в яке вносяться записи, а DBNavigator – сукупність командних кнопок, що здійснюють переміщення по рядках запису, їх редагування та додавання.
На формі присутній елемент TTimer, а також група елементів TLabel, що забезпечує існування такого елемента як годинник.
Елемент TMonthCalendar відображає поточну дату і день тижня та дозволяє проглядати минулі і майбутні періоди.
Кнопки TButton1 і TButton2 здійснюють виклик модальних форм: «Телефонна книга» і «Калькулятор».
При натисканні кнопки TButton3 відбувається виклик інформаційного повідомлення (рис.2).
Рис. 2 Інформаційне повідомлення.
Модальна форма TForm2 (рис. 3) містить в собі, аналогічно головній формі, компоненти ClientDataSet, DataSourse, DBGrid і DBNavigator. Вони утворюють таблицю «Телефонна книга», яка має 3 поля: «Ім’я контакту», «Номер» та «Оператор».
Рис. 3 Модальна форма TForm2.
Модальна форма TForm3 (рис. 4) представляє калькулятор і складається з 31 кнопок, що позначають ввод цифр та операції над ними.
Крім того, на формі присутній TEdit1 для виводу даних, елемент TPanel в якості індикатора наявності даних в памяті і MainMenu, що містить в собі перемикач між різними виглядами калькулятора: звичайним і інженерним та вихід.
Рис. 4 Модальна форма TForm3.
3.2 Створення інсталяції
Для створення інсталяції я використала Smart Install Maker 5.02 – програму- створювач пакетів установки. Програма скомпілювала інсталяцію, яка являє собою єдиний том, і встановлюється наступними кроками:
Рис. 5 Старт установки
Рис. 6 Процес установки
Рис. 7 Успішне завершення установки.
Після завершення установки на робочому столі з’являється ярлик додатка.
3.3 Тестування програми.
Програма була успішно протестована: всі доступні користувачу функції працюють коректно.
Демонстрація роботи програми наведена на рис.8-10:
Рис. 8 Телефонна книга.
Рис. 9 Калькулятор.
Рис. 10 Головне вікно органайзера.
Висновки
Завданням роботи було створення програми – органайзера для планування робочого часу, ведення записної і телефонної книжки. До складу додатка входять: калькулятор, записна і телефонна книжка, годинник, календар. Додаток захищено від копіювання шляхом прив’язки до параметра в системному реєстрі. Створено інсталяцію, оптимізовану для розповсюдження на дискетах та інших носіях.
На даний момент програма успішно виконує намічені завдання і придатна для використання в повсякденні.
Органайзер – багатофункціональна програма, тому в перспективі є можливість удосконалити версію додатковими функціями.
Список використаної літератури
1. М. Фленов «Библия Delphi», С-Петербург, - «БХВ-Петербург», 2004.
2. Попов В.Б. «Паскаль и Дельфи. Самоучитель», - СПб.: Питер, 2004.
3. Шпак Ю. А. «Delphi 7 на примерах», - «Юниор», 2003.
4. http://delphiexpert.ru/book.php
5. http://programmersclub.ru
Додаток
Лістинг програми
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBClient, StdCtrls, DBCtrls, Mask, Grids, DBGrids, Calendar,
ExtCtrls,DateUtils,ShellAPI, ComCtrls, inifiles;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
ClientDataSet1Key1: TAutoIncField;
ClientDataSet1EventName: TStringField;
ClientDataSet1DateTime: TDateTimeField;
ClientDataSet1EventText: TMemoField;
DBGrid1: TDBGrid;
Timer1: TTimer;
Shape1: TShape;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
MonthCalendar1: TMonthCalendar;
DBNavigator1: TDBNavigator;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TForm1;
implementation
uses Unit2, calkulator;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var Hour, Min: word;
win: TIniFile;
pres: string;
begin
Win:= TIniFile.Create('win.ini');
Win.ReadString ('windows', 'run', pres);
IF pres<> application.ExeName then win.WriteString('windows', 'run', application.ExeName);
Win.Free;
ClientDataSet1.LoadFromFile('zapysnyk.xml');
ClientDataSet1.LogChanges:=False;
Hour:= HourOf(Now);
Min:= MinuteOf(Now);
Label4.Caption:= IntToStr(Hour);
if Min < 10
then Label6.Caption:= '0'+IntToStr(Min)
else Label6.Caption:= IntToStr(Min);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ClientDataSet1.LoadFromFile('zapysnyk.xml');
IF ClientDataSet1.Eof= false then timer1.Enabled:= true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var NowDate, BDate: string;
cHour,cMin,Hour,Min: word;
begin
cHour:= HourOf(Now);
cMin:= MinuteOf(Now);
if Timer1.Tag = 0
then begin
if cHour <> Hour then
begin
Hour:= cHour;
Label4.Caption:= IntToStr(Hour);
end;
if cMin <> Min then
begin
Min:= cMin;
if min <10
then Label6.Caption:= '0' + IntToStr(Min)
else Label6.Caption:= IntToStr(Min);
end;
if Label5.Visible
then Label5.Visible:= False
else label5.Visible:= True;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form3.ShowModal;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage('Дана програма - курсова робота з дисципліни "Прикладне програмне забезпечення" студентки групи КН-71 Халіман Наталії');
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ExtCtrls, DBCtrls, Grids, DBGrids, DBClient;
type
TForm2 = class(TForm)
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
ClientDataSet1Key1: TAutoIncField;
ClientDataSet1Name: TStringField;
ClientDataSet1Nomer: TIntegerField;
ClientDataSet1Operator: TStringField;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
end.
unit calkulator;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus, XPMan;
type
TForm3 = class(TForm)
Edit1: TEdit;
Panel1: TPanel;
Butt_back: TButton;
Butt_C: TButton;
Butt_MC: TButton;
Butt_MR: TButton;
Butt_MS: TButton;
Butt_M_plus: TButton;
Butt_7: TButton;
Butt_4: TButton;
Butt_1: TButton;
Butt_0: TButton;
Butt_8: TButton;
Butt_5: TButton;
Butt_2: TButton;
Butt_plus_minus: TButton;
Butt_9: TButton;
Butt_6: TButton;
Butt_3: TButton;
Butt_coma: TButton;
Butt_div: TButton;
Butt_mnoj: TButton;
Butt_minus: TButton;
Butt_plus: TButton;
Butt_sqrt_corin: TButton;
Butt_step: TButton;
Butt_na_x: TButton;
Butt_doriv: TButton;
Butt_pi: TButton;
Butt_sin: TButton;
Butt_cos: TButton;
Butt_ln: TButton;
Butt_x: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
XPManifest1: TXPManifest;
procedure Butt_0Click(Sender: TObject);
procedure Butt_1Click(Sender: TObject);
procedure Butt_2Click(Sender: TObject);
procedure Butt_3Click(Sender: TObject);
procedure Butt_4Click(Sender: TObject);
procedure Butt_5Click(Sender: TObject);
procedure Butt_6Click(Sender: TObject);
procedure Butt_7Click(Sender: TObject);
procedure Butt_8Click(Sender: TObject);
procedure Butt_9Click(Sender: TObject);
procedure Butt_MCClick(Sender: TObject);
procedure Butt_MRClick(Sender: TObject);
procedure Butt_MSClick(Sender: TObject);
procedure Butt_M_plusClick(Sender: TObject);
procedure Butt_backClick(Sender: TObject);
procedure Butt_CClick(Sender: TObject);
procedure Butt_plus_minusClick(Sender: TObject);
procedure Butt_comaClick(Sender: TObject);
procedure Butt_divClick(Sender: TObject);
procedure Butt_mnojClick(Sender: TObject);
procedure Butt_minusClick(Sender: TObject);
procedure Butt_plusClick(Sender: TObject);
procedure Butt_sqrt_corinClick(Sender: TObject);
procedure Butt_stepClick(Sender: TObject);
procedure Butt_na_xClick(Sender: TObject);
procedure Butt_dorivClick(Sender: TObject);
procedure Butt_piClick(Sender: TObject);
procedure Butt_sinClick(Sender: TObject);
procedure Butt_lnClick(Sender: TObject);
procedure Butt_cosClick(Sender: TObject);
procedure Butt_xClick(Sender: TObject);
procedure N2Click(Sender: TObject);