Используемые технические средства
Технические характеристики компьютера:
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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!