Используемые технические средства



Технические характеристики компьютера:

Pentium IV и выше;

Объем оперативной памяти не менее 512 Мб;

Жесткий диск объемом не менее 1 Гб.

Именно эти параметры создают условия для полноценной работы IDE Delphi 7 и программ, созданных в этой среде.

Дополнительных средств (принтер, сканер, дополнительные дисководы и т.д.) не требуется.

 

 

Вызов и загрузка

Исполняемый файл программы "Записная книжка" имеет название Note. EXE. Его работоспособность не зависит от расположения на диске. Наименования файлов входящих в проект и краткая информация об их содержании отображены в таблице 1.

 

Таблица 1

Наименование Обозначение Примечание
Note. dof Файл параметров проекта Содержит текущие установки проекта: настройки компилятора и компоновщика, имена служебных каталогов, условные директивы
Note. dpr Файл проекта Связывает все файлы, из которых состоит приложение
Note. cfg Файл, содержащий настройки проекта Содержит информацию о том, какие окна открыты и в каких позициях они расположены.
Note. res Файл ресурсов Содержит пиктограммы, графические изображения
unMain. pas Файл программного модуля для формы frmMain Определяет функциональность формы frmMain
unMain. dfm Файл формы frmMain Содержит список свойств всех компонентов, включённых в форму frmMain
unMain. dcu Объектный файл для unMain. pas Откомпилированная версия unMain. pas
unClient. pas Файл программного модуля для формы Client Определяет функциональность формы Client
unClient. dfm Файл формы Client Содержит список свойств всех компонентов, включённых в форму Client
unClient. dcu Объектный файл для unClient. pas Откомпилированная версия unClient. pas
unMessage. pas Файл программного модуля для формы Message Определяет функциональность формы Message
unClient. dfm Файл формы Message Содержит список свойств всех компонентов, включённых в форму Message
unClient. dcu Объектный файл для unMessage. pas Откомпилированная версия unMessage. pas

 

Текст программы

 

Текст программы для формы - frmMain:

unit Main;

Interface

Uses

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

Dialogs, ComCtrls, ExtCtrls, Menus, Grids, DBGrids, DB, ADODB, StdCtrls,

Buttons, DBCtrls,Mapi, OleServer, ExcelXP,DateUtils;

Type

TfrmMain = class (TForm)

ProgressBar1: TProgressBar;

PageControl1: TPageControl;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

DBGrid1: TDBGrid;

ADOConnection1: TADOConnection;

tbClient: TADOQuery;

dsClient: TDataSource;

tbCity: TADOQuery;

dsCity: TDataSource;

GroupBox1: TGroupBox;

DBGrid2: TDBGrid;

DBNavigator1: TDBNavigator;

Panel2: TPanel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

tbDomen: TADOQuery;

dsDomen: TDataSource;

GroupBox3: TGroupBox;

DBGrid4: TDBGrid;

DBNavigator2: TDBNavigator;

tbClientid: TAutoIncField;

tbClientfio: TWideStringField;

tbClientemail: TWideStringField;

tbClientphone: TWideStringField;

tbClientdater: TDateTimeField;

tbClientcity: TWideStringField;

tbClientflag: TIntegerField;

tbClientdomen: TWideStringField;

tbClientMail: TStringField;

BitBtn4: TBitBtn;

ExcelApplication1: TExcelApplication;

BitBtn10: TBitBtn;

BitBtn7: TBitBtn;

Panel3: TPanel;

Shape2: TShape;

Label4: TLabel;

GroupBox2: TGroupBox;

Label2: TLabel;

ComboBox2: TComboBox;

GroupBox4: TGroupBox;

Edit1: TEdit;

Label1: TLabel;

Edit2: TEdit;

Edit3: TEdit;

Label3: TLabel;

Label5: TLabel;

Shape1: TShape;

Label7: TLabel;

Shape3: TShape;

Label8: TLabel;

Temp: TADOQuery;

procedure N3Click (Sender: TObject);

procedure N2Click (Sender: TObject);

procedure FormShow (Sender: TObject);

procedure BitBtn3Click (Sender: TObject);

procedure ComboAdd (Combo: tComboBox; TableStr,FieldStr: string);

procedure ComboBox1CloseUp (Sender: TObject);

procedure BitBtn1Click (Sender: TObject);

procedure BitBtn2Click (Sender: TObject);

procedure tbClientGoCalcFields (DataSet: TDataSet);

procedure BitBtn4Click (Sender: TObject);

function SendEMail (Handle: THandle; Mail: TStrings): Cardinal;

procedure BitBtn7Click (Sender: TObject);

procedure big_report (Title: String; dbgrida: TDBGrid; ITOGO: integer = 0);

procedure BitBtn10Click (Sender: TObject);

procedure DBGrid1DrawColumnCell (Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

procedure Edit1Change (Sender: TObject);

procedure Edit2Change (Sender: TObject);

procedure Edit3Change (Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

Var

frmMain: TfrmMain;

implementation

uses unAbout, unClient, unMessage;

{$R *. dfm}

procedure TfrmMain. N3Click (Sender: TObject);

begin

Close; // Закрытие главного окна

end;

procedure TfrmMain. N2Click (Sender: TObject);

begin

// Открытие форма о программе

AboutProgram. ShowModal;

end;

procedure TfrmMain. FormShow (Sender: TObject);

begin

// поиск и подключение БД к программе

ADOConnection1. Close ();

ADOConnection1. ConnectionString: = 'Provider=Microsoft. Jet. OLEDB.4.0; Data Source='+GetCurrentDir+'\Note. mdb; Persist Security Info=False';

ADOConnection1. Open ();

// Открытие таблиц

tbClient. Open;

tbCity. Open;

tbDomen. Open;

// Заполнение ComboBox2

ComboAdd (ComboBox2, 'tbCity','City_name');

end;

procedure TfrmMain. BitBtn3Click (Sender: TObject);

begin // если таблица открыта

if tbClient. Active then

if tbClient. RecordCount > 0 then

begin

// удаляем выбранную запись

Temp. Close;

Temp. SQL. Clear;

Temp. SQL. Add ('DELETE FROM tbClient where id = '+inttostr (tbClient ['id']));

Temp. ExecSQL;

// обновляем таблицу

tbClient. Close;

tbClient. Open;

end;

end;

// процедура заполнения ComboBox

procedure TfrmMain.comboAdd (Combo: tComboBox; TableStr,FieldStr: string);

var

ado: TADOQuery;

temp: Variant;

begin

try

ado: = TADOQuery. Create (nil);

ado. Connection: = ADOConnection1;

ado. CursorType: = ctStatic;

ado. Close;

ado. SQL. Clear;

ado. SQL. Add ('Select '+FieldStr+' from '+TableStr);

ado. Open;

except

MessageDlg ('Error in unFuncProc: in the ComboAdd () procedure!!! ',mtError, [mbOK],0);

exit;

end;

ado. First;

Combo. Items. Clear;

while not ado. Eof do

begin

temp: = ado [fieldstr];

Combo. Items. Add (trim (temp));

ado. Next;

end;

end;

procedure TfrmMain.comboBox1CloseUp (Sender: TObject);

begin

try

// при выборе города, поиск по заданному городу

tbClient. Close;

tbClient. SQL. Clear;

tbClient. SQL. Add ('Select * from tbClient where flag<>3');

if ComboBox2. ItemIndex <> - 1 then

tbClient. SQL. Add (' and city = '''+ComboBox2. Text+'''');

tbClient. Open;

except

end;

end;

procedure TfrmMain. BitBtn1Click (Sender: TObject);

begin

// Открытие формы, для добавления человека в записную книжку

frmClient: = TfrmClient. Create (frmClient);

try

unClient. flag_save: = 1;

frmClient. ShowModal;

finally

FreeAndNil (frmClient);

end;

end;

procedure TfrmMain. BitBtn2Click (Sender: TObject);

begin

// Открытие формы, для редактирования человека в записную книжку

frmClient: = TfrmClient. Create (frmClient);

try

unClient. flag_save: = 2;

frmClient. ShowModal;

finally

FreeAndNil (frmClient);

end;

end;

procedure TfrmMain. tbClientGoCalcFields (DataSet: TDataSet);

begin // создано поля для отображения соединенных двух полей

DataSet. FieldValues ['Mail']: = DataSet. FieldValues ['email'] +'@'+ DataSet. FieldValues ['domen'];

end;

procedure TfrmMain. BitBtn4Click (Sender: TObject);

begin

// обновить программу

tbClient. Close;

tbClient. SQL. Clear;

tbClient. SQL. Add ('Select * from tbClient');

tbClient. Open;

end;

// функция для отправки письма

function TfrmMain. SendEMail (Handle: THandle; Mail: TStrings): Cardinal;

type

TAttachAccessArray = array [0.0] of TMapiFileDesc;

PAttachAccessArray = ^TAttachAccessArray;

var

MapiMessage: TMapiMessage;

Receip1: TMapiRecipDesc;

Attachments: PAttachAccessArray;

AttachCount: Integer;

i1: integer;

FileName: string;

dwRet: Cardinal;

MAPI_Session: Cardinal;

WndList: Pointer;

begin

dwRet: = MapiLogon (Handle,

PChar (''),

PChar (''),

MAPI_LOGON_UI or MAPI_NEW_SESSION,

0, @MAPI_Session);

if (dwRet <> SUCCESS_SUCCESS) then

begin

MessageBox (Handle,

PChar ('Error while trying to send email'),

PChar ('Error'),

MB_ICONERROR or MB_OK);

end

else

begin

FillChar (MapiMessage, SizeOf (MapiMessage), #0);

Attachments: = nil;

FillChar (Receip1, SizeOf (Receip1), #0);

// FillChar (Receip, SizeOf (Receip), #0);

// **************************************************************

if Mail. Values ['to1'] <> '' then

begin

Receip1. ulReserved: = 0;

Receip1. ulRecipClass: = MAPI_TO;

Receip1. lpszName: = StrNew (PChar (Mail. Values ['to1']));

Receip1. lpszAddress: = StrNew (PChar ('SMTP: ' + Mail. Values ['to1']));

Receip1. ulEIDSize: = 0;

MapiMessage. nRecipCount: = 1;

MapiMessage. lpRecips: = @Receip1;

end;

// **************************************************************

AttachCount: = 0;

for i1: = 0 to MaxInt do

begin

if Mail. Values ['attachment' + IntToStr (i1)] = '' then

break;

Inc (AttachCount);

end;

if AttachCount > 0 then

begin

GetMem (Attachments, SizeOf (TMapiFileDesc) * AttachCount);

for i1: = 0 to AttachCount - 1 do

begin

FileName: = Mail. Values ['attachment' + IntToStr (i1)];

Attachments [i1]. ulReserved: = 0;

Attachments [i1]. flFlags: = 0;

Attachments [i1]. nPosition: = ULONG ($FFFFFFFF);

Attachments [i1]. lpszPathName: = StrNew (PChar (FileName));

Attachments [i1]. lpszFileName: =

StrNew (PChar (ExtractFileName (FileName)));

Attachments [i1]. lpFileType: = nil;

end;

MapiMessage. nFileCount: = AttachCount;

MapiMessage. lpFiles: = @Attachments^;

end;

if Mail. Values ['subject'] <> '' then

MapiMessage. lpszSubject: = StrNew (PChar (Mail. Values ['subject']));

if Mail. Values ['body'] <> '' then

MapiMessage. lpszNoteText: = StrNew (PChar (Mail. Values ['body']));

WndList: = DisableTaskWindows (0);

try

Result: = MapiSendMail (MAPI_Session, Handle,

MapiMessage, MAPI_DIALOG, 0);

finally

EnableTaskWindows (WndList);

end;

for i1: = 0 to AttachCount - 1 do

begin

StrDispose (Attachments [i1]. lpszPathName);

StrDispose (Attachments [i1]. lpszFileName);

end;

if Assigned (MapiMessage. lpszSubject) then

StrDispose (MapiMessage. lpszSubject);

if Assigned (MapiMessage. lpszNoteText) then

StrDispose (MapiMessage. lpszNoteText);

if Assigned (Receip1. lpszAddress) then

StrDispose (Receip1. lpszAddress);

if Assigned (Receip1. lpszName) then

StrDispose (Receip1. lpszName);

MapiLogOff (MAPI_Session, Handle, 0, 0);

end;

end;

// отправка письма выбранному человека

procedure TfrmMain. BitBtn7Click (Sender: TObject);

var

mail: TStringList;

begin

mail: = TStringList. Create ();

try

frmMessage. Edit1. Text: ='Привет ' +tbClient ['fio'];

frmMessage. Caption: = 'Отправить сообщение ' +tbClient ['fio'];

frmMessage. ShowModal;

mail. values ['to1']: = trim (tbClient ['email'] +'@'+tbClient ['domen']);

mail. values ['subject']: = frmMessage. Edit1. Text;

mail. values ['body']: = frmMessage. Memo1. Text;

SendEMail (Handle, mail);

finally

mail. Free;

end;

end;

// процедура отправки Записной книжки в Excel

procedure TfrmMain. big_report (Title: String; dbgrida: TDBGrid; ITOGO: integer = 0);

var

WorkBk: _WorkBook; // определяем WorkBook

WorkSheet: _WorkSheet; // определяем WorkSheet

XL: TExcelApplication;

i,j,c: Smallint;

begin

TRY

XL: = TExcelApplication. Create (nil);

XL. Disconnect;

XL. ConnectKind: = ckRunningOrNew;

XL. Connect;

XL. Visible [0]: = false;

XL. EnableEvents: = false;

XL. SheetsInNewWorkbook [0]: = 1; // N - новое количество листов (integer)

XL. Workbooks. Add (EmptyParam,0);

WorkBk: = XL. ActiveWorkbook;

WorkSheet: = WorkBk. Worksheets. Get_Item (1) as _WorkSheet;

dbgrida. DataSource. DataSet. First;

ProgressBar1. Position: = 0;

ProgressBar1. Max: = dbgrida. DataSource. DataSet. RecordCount;

c: = 0;

// добавляем информацию для имён колонок

WorkSheet. Cells. Item [1,1]: = Title;

for i: = 0 to dbgrida. FieldCount - 1 do

if dbgrida. Columns. Items [i]. Visible then

begin

Inc (c);

with WorkSheet. Range ['A2','A'+IntToStr (c+1)] do

begin

Item [1,c]: = dbgrida. Columns [i]. Title. Caption;

Item [1,c]. Font. Bold: = true;

Item [1,c]. Borders. Weight: = 3;

Item [1,c]. Borders. LineStyle: = 1;

end;

end;

// добавляем данные

for i: = 1 to dbgrida. DataSource. DataSet. RecordCount do

begin

ProgressBar1. Position: = i;

c: = 0;

for j: = 0 to dbgrida. FieldCount - 1 do

if dbgrida. Columns. Items [j]. Visible then

begin

Inc (c);

WorkSheet. Cells. Item [i+2,c]. NumberFormat: = '@';

WorkSheet. Cells. Item [i+2,c]: = dbgrida. Fields [j]. AsString;

WorkSheet. Cells. Item [i+2,c]. Borders. Weight: = 2;

WorkSheet. Cells. Item [i+2,c]. Borders. LineStyle: = 1;

end;

dbgrida. DataSource. DataSet. Next;

end;

if ITOGO = 1 then

begin

WorkSheet. Cells. Item [i+2,1]: = 'ИТОГО: ';

WorkSheet. Cells. Item [i+2,2]: = inttostr (dbgrida. DataSource. DataSet. RecordCount);

end;

XL. Visible [0]: = true;

FINALLY

XL. Disconnect;

FreeAndNil (XL);

ProgressBar1. Position: = 0;

END;

end;

procedure TfrmMain. BitBtn10Click (Sender: TObject);

begin

// Отчет

big_report ('',DBGrid1,1);

end;

// процедура напоминаний о днях рождениях за 1 день, за неделю, за месяц

procedure TfrmMain. DBGrid1DrawColumnCell (Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

const

clPaleGreen = TColor ($CCFFCC);

clPaleRed = TColor ($CCCCFF);

var

holdColor: TColor;

begin

if tbClient. RecordCount > 0 then

begin

holdColor: = DBGrid1. Canvas. Brush. Color;

// если день рождения в этом месяце

if Column. FieldName='dater' then

if StrToDate (Formatdatetime ('dd. mm. '+inttostr (YearOf (now)),tbClient ['dater']))

> StrToDate (Formatdatetime ('dd. mm. yyyy',now)) then

if Formatdatetime ('mm',tbClient ['dater']) = Formatdatetime ('mm',now) then

begin

DBGrid1. Canvas. Brush. Color: =clActiveCaption;

DBGrid1. DefaultDrawColumnCell (Rect, DataCol, Column, State);

DBGrid1. Canvas. Brush. Color: = holdColor;

end;

// если день рождения на этой недели

if Column. FieldName='dater' then

if StrToDate (Formatdatetime ('dd. mm. '+inttostr (YearOf (now)),tbClient ['dater']))

> StrToDate (Formatdatetime ('dd. mm. yyyy',now)) then

if WeekOf (StrToDate (Formatdatetime ('dd. mm. '+inttostr (YearOf (now)),tbClient ['dater'])))

= WeekOf (StrToDate (Formatdatetime ('dd. mm. yyyy',now))) then

begin

DBGrid1. Canvas. Brush. Color: = clMoneyGreen;

DBGrid1. DefaultDrawColumnCell (Rect, DataCol, Column, State);

DBGrid1. Canvas. Brush. Color: = holdColor;

end;

// если день рождения сегодя

if Column. FieldName='dater' then

if Formatdatetime ('dd. mm',tbClient ['dater']) = Formatdatetime ('dd. mm',now) then

begin

DBGrid1. Canvas. Brush. Color: =clYellow;

DBGrid1. DefaultDrawColumnCell (Rect, DataCol, Column, State);

DBGrid1. Canvas. Brush. Color: = holdColor;

end;

end;

end;

// выборка записной книжки по ФИО

procedure TfrmMain. Edit1Change (Sender: TObject);

begin

tbClient. Close;

tbClient. SQL. Clear;

tbClient. SQL. Add ('Select * from tbClient where fio like ''%'+Edit1. Text+'%''');

tbClient. Open;

if tbClient. RecordCount = 0 then

MessageDlg ('Записей не найдено! ',mtInformation, [mbOK],0);

end;

// выборка записной книжки по Емайлу

procedure TfrmMain. Edit2Change (Sender: TObject);

begin

tbClient. Close;

tbClient. SQL. Clear;

tbClient. SQL. Add ('Select * from tbClient where email like '''+Edit2. Text+'%''');

tbClient. Open;

if tbClient. RecordCount = 0 then

MessageDlg ('Записей не найдено! ',mtInformation, [mbOK],0);

end;

// выборка записной книжки по номеру телефона

procedure TfrmMain. Edit3Change (Sender: TObject);

begin

tbClient. Close;

tbClient. SQL. Clear;

tbClient. SQL. Add ('Select * from tbClient where phone like '''+Edit3. Text+'%''');

tbClient. Open;

if tbClient. RecordCount = 0 then

MessageDlg ('Записей не найдено! ',mtInformation, [mbOK],0);

end;

end.

Текст программы для формы - frmClient:

unit unClient;

Interface

Uses

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

Dialogs, ExtCtrls, StdCtrls, Buttons, ComCtrls;

Type

TfrmClient = class (TForm)

Panel1: TPanel;

BitBtn1: TBitBtn;

BitBtn3: TBitBtn;

BitBtn2: TBitBtn;

Panel2: TPanel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

GroupBox1: TGroupBox;

Label2: TLabel;

Label1: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit4: TEdit;

DateTimePicker1: TDateTimePicker;

ComboBox1: TComboBox;

Label6: TLabel;

ComboBox2: TComboBox;

procedure BitBtn3Click (Sender: TObject);

procedure FormShow (Sender: TObject);

procedure BitBtn1Click (Sender: TObject);

procedure BitBtn2Click (Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

Var

frmClient: TfrmClient;

flag_save: integer = 0;

Implementation

uses Main;

{$R *. dfm}

procedure TfrmClient. BitBtn3Click (Sender: TObject);

begin // закрываем окно

Close;

end;

procedure TfrmClient. FormShow (Sender: TObject);

begin

// заполняем списки данными

frmMain.comboAdd (ComboBox1, 'tbDomen','Domen');

frmMain.comboAdd (ComboBox2, 'tbCity','City_name');

// Если окно открыто для добавления записи

if flag_save = 1 then

begin

BitBtn1. Enabled: =true;

end;

// если окно открыто для редактирования

if flag_save = 2 then

begin

BitBtn2. Enabled: =true;

if frmMain. tbClient ['FIO'] <>NULL then

Edit1. Text: = trim (frmMain. tbClient ['FIO']);

if frmMain. tbClient ['email'] <>NULL then

Edit2. Text: = trim (frmMain. tbClient ['email']);

if frmMain. tbClient ['phone'] <>NULL then

Edit4. Text: = trim (frmMain. tbClient ['phone']);

if frmMain. tbClient ['city'] <>NULL then

ComboBox2. Text: = trim (frmMain. tbClient ['city']);

if frmMain. tbClient ['domen'] <>NULL then

ComboBox1. Text: = trim (frmMain. tbClient ['domen']);

if frmMain. tbClient ['dater'] <>NULL then

DateTimePicker1. Date: = frmMain. tbClient ['dater'];

end;

end;

procedure TfrmClient. BitBtn1Click (Sender: TObject);

begin

// Добавляем человека в записную книжку

frmMain. Temp. Close;

frmMain. Temp. SQL. Clear;

frmMain. Temp. SQL. Add ('INSERT INTO tbClient');

frmMain. Temp. SQL. Add (' (fio, email, phone, dater, city, flag, domen) ');

frmMain. Temp. SQL. Add ('VALUES ('''+Edit1. Text+'''');

frmMain. Temp. SQL. Add (','''+Edit2. Text+'''');

frmMain. Temp. SQL. Add (','''+Edit4. Text+'''');

frmMain. Temp. SQL. Add (','''+DateToStr (DateTimePicker1. Date) +'''');

frmMain. Temp. SQL. Add (','''+ComboBox2. Text+'''');

frmMain. Temp. SQL. Add (',0');

frmMain. Temp. SQL. Add (','''+ComboBox1. Text+''') ');

frmMain. Temp. ExecSQL;

frmMain. tbClient. Close;

frmMain. tbClient. Open;

Close;

end;

procedure TfrmClient. BitBtn2Click (Sender: TObject);

begin

// редактируем человека

frmMain. Temp. Close;

frmMain. Temp. SQL. Clear;

frmMain. Temp. SQL. Add ('UPDATE tbClient');

frmMain. Temp. SQL. Add ('SET fio = '''+Edit1. Text+'''');

frmMain. Temp. SQL. Add (',email = '''+Edit2. Text+'''');

frmMain. Temp. SQL. Add (', phone ='''+Edit4. Text+'''');

frmMain. Temp. SQL. Add (',dater = '''+DateToStr (DateTimePicker1. Date) +'''');

frmMain. Temp. SQL. Add (',city ='''+ComboBox2. Text+'''');

frmMain. Temp. SQL. Add (',domen = '''+ComboBox1. Text+'''');

frmMain. Temp. SQL. Add ('where id ='+inttostr (frmMain. tbClient ['id']));

frmMain. Temp. ExecSQL;

frmMain. tbClient. Close;

frmMain. tbClient. Open;

Close;

end;

end.

 

 

Тестирование программы

Данное приложение выполняет несколько заданий:

1) ввод данных;

2) проверка на корректировку информации;

3) запрос - поиск необходимой информации;

4) фильтрацию информации;

5) вывод информации.

 


3 Рекомендации к применению программы Разработка программы “Калькулятор”

Приложение позволяет перевести денежную единицу из одной в другую.

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

 

 


 

ЗАКЛЮЧЕНИЕ

Считаю, что программа выполнена на 100 процентов, так же были добавлены дополнительные возможности, как отправка электронные сообщения выбранному человеку. Подцветка предстоящих событий, день рождения.

 

 


 


Дата добавления: 2021-07-19; просмотров: 63; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!