- •Содержание
- •Введение
- •Техническое задание
- •1.4. Технические требования к программе или программному изделию
- •3. Выбор языка и среды разработки.
- •3.1. Выбор компонентной базы для доступа к субд FireBird 2.1
- •4. Структура базы данных
- •4.1. Таблица персональных данных пользователя
- •4.2. Таблица параметров авторизации пользователя на почтовом сервере
- •5. Архитектура программного обеспечения
- •6. Структура программного обеспечения
- •6.1. Подсистема администрирования
- •6.2. Подсистема просмотра данных
- •6.3. Подсистема редактирования данных
- •6.4. Подсистема работы с сообщениями
- •7. Описание интерфейса программного обеспечения
- •7.1. Интерфейс – «Галочки»
- •8. Результаты тестирования
- •9. Контрольный пример работы программного обеспечения
- •10. Безопасность и экологичность проектных решений
- •10.1. Цель и решаемые задачи
- •10.2. Опасные и вредные факторы при работе с пэвм
- •10.3. Характеристика объекта исследования
- •10.4. Мероприятия по безопасности труда и сохранению работоспособности
- •10.4.3 Создание рационального освещения
- •10.4.4 Защита от шума
- •10.4.5 Обеспечение режимов труда и отдыха
- •10.4.6 Обеспечение электробезопасности
- •10.4.7 Защита от статического электричества
- •10.4.8 Обеспечение допустимых уровней электромагнитных полей
- •10.4.9 Обеспечение пожарной безопасности
- •10.4.10. Мероприятия и средства по защите окружающей среды
- •10.5. Расчеты.
- •11. Организационно-экономическая часть
- •11.1 Технико-экономическое обоснование объекта проектирования.
- •Результаты
- •11.1.2 Состав конструкторской группы и их должностные оклады.
- •11.1.3 Экономическая часть.
- •Затраты на страховые взносы.
- •11.1.3. Вывод.
- •12. Заключение
- •13. Список литературы
- •Приложение 1. Листинг
- •Приложение 2. Руководство пользователя.
11.1.3. Вывод.
По результат расчетов, для создания данного программного продукта потребуется 525348,8 рублей. Оценить эту сумму сложно, т.к. схожие программные продукты, присутствующие на рынке, не подходят для решения поставленной задачи. Тот факт, что разработанная программа будет использоваться только внутри университета и не будет представлена на рынке, позволяет нам отказаться от расчетов отпускной цены для данного продукта.
Для снижения сметы расходов можно предпринять ряд мер. Более половины суммы расходов, представляют собой затраты на оплату труда программиста. Добиться снижения этих затрат можно путем улучшения эффективности труда.
12. Заключение
В результате дипломного проектирования было разработано программное обеспечение АИС «Будущий абитуриент». Программное обеспечение отвечает требованиям, предъявленным в техническом задании. На данный момент программное обеспечение интегрировано в программный комплекс Информатизация МГОУ и используется в работе ЦПК.
Использование разработанного программного обеспечения позволяет оперативно получать статистическую и персональную информацию пользователем по каналам внутренней локальной сети из базы данных после предварительной установки специального клиентского ПО на рабочем месте. Программное обеспечение расширяет возможности для актуализации информации в базе данных по поступившим возможным абитуриентам.
13. Список литературы
Книги
Однотомные издания
Путилин А.Б., Юрагов Е.А. Компонентное моделирование и программирование на языке UML. Практическое руководство по проектированию информационных систем. - М. НТ Пресс 2005 г.
Путилин А.Б., Юрагов Е.А. Дипломное проектирование. Методическое пособие по подготовке выпускной квалификационной работы по направлению 654600 «Информатика и вычислительная техника», специальность 230105 «Программное обеспечение вычислительной техники и автоматизированных систем». - М. изд. МГОУ 2010 г.
Хелен Борри, InterBaseиFirebird. Практическое руководство для умных пользователей и начинающих разработчиков. –BHV, 2007 г.
Хелен Борри, FireBird: руководство разработчика баз данных. –BHV, 2007 г.
Эрик Хармон. Руководство разработчика баз данных в Delphi/Kylix. – Вильямс, 2002 г.
Интернет ресурсы
1. http://www.firebirdsql.org/manual/ru/qsg15-databases-ru.html. Работа с базами данных.
2. http://www.ibprovider.com/rus/documentation/firebird_interbase_delphi.html. Работа с Firebird и Interbase в Delphi. Часть 1.
Приложение 1. Листинг
{Модуль регистрации}
unit Vabit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, SDIEvent, cxGraphics, cxLookAndFeels,
cxLookAndFeelPainters, Menus, StdCtrls, cxButtons, cxControls,
cxContainer, cxEdit, dxCntner, dxExEdtr, dxEdLib, dxDBELib,
cxGroupBox, cxPC, cxStyles, cxCustomData, cxFilter, cxData,
cxDataStorage, DB, cxDBData, cxGridLevel, cxClasses,
cxGridCustomView, cxGridCustomTableView, cxGridTableView,
cxGridDBTableView, cxGrid, cxRadioGroup, cxDBEdit, cxTextEdit,
cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit,
cxDBLookupComboBox, cxCalendar, FIBDataSet, pFIBDataSet, DMmain,
cxCheckBox, cxImageComboBox, Grids, DBGrids, frxClass, frxDBSet,
frxFIBComponents;
type
TFvabit = class(TForm)
cxB_Print_ID: TcxButton;
cxGroupBox1: TcxGroupBox;
cxB_Registr: TcxButton;
cxB_Ok_Commit: TcxButton;
cxB_Cancel: TcxButton;
cxGroupBox2: TcxGroupBox;
Label2: TLabel;
cxPC_Vbr: TcxPageControl;
cxTabSheet1: TcxTabSheet;
cxTabSheet2: TcxTabSheet;
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
Label1: TLabel;
cxGrid2DBTableView1: TcxGridDBTableView;
cxGrid2Level1: TcxGridLevel;
cxGrid2: TcxGrid;
cxGroupBox3: TcxGroupBox;
cxGroupBox4: TcxGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
cxDBME_HP: TcxDBMaskEdit;
cxDBME_MP: TcxDBMaskEdit;
cxDBME_Mail: TcxDBMaskEdit;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
cxDBLCB_NameEduc: TcxDBLookupComboBox;
cxDBLookupComboBox3: TcxDBLookupComboBox;
cxGroupBox5: TcxGroupBox;
cxGroupBox6: TcxGroupBox;
cxDBDE_BD: TcxDBDateEdit;
cxDBRG_Sex: TcxDBRadioGroup;
cxGroupBox7: TcxGroupBox;
cxDBLCB_From: TcxDBLookupComboBox;
cxDBRG_Hostel: TcxDBRadioGroup;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
cxME_ID_Abit: TcxMaskEdit;
pFIBDS_All: TpFIBDataSet;
DS_All: TDataSource;
cxDBTextEdit1: TcxDBTextEdit;
cxDBTextEdit2: TcxDBTextEdit;
cxDBTextEdit3: TcxDBTextEdit;
pFIBDS_From: TpFIBDataSet;
DS_From: TDataSource;
cxDBImageCB_EducID: TcxDBImageComboBox;
pFIBDS_NameEduc: TpFIBDataSet;
DS_NameEduc: TDataSource;
pFIBDS_LivingEduc: TpFIBDataSet;
DS_LivingEduc: TDataSource;
pFIBDS_PayForm: TpFIBDataSet;
DS_PayForm: TDataSource;
cxDBLCB_Pay: TcxDBLookupComboBox;
cxDBRadioGroup1: TcxDBRadioGroup;
pFIBDS_Fakul: TpFIBDataSet;
pFIBDS_Spec: TpFIBDataSet;
DS_Fakul: TDataSource;
cxGrid1DBTableView1NAME: TcxGridDBColumn;
DS_Spec: TDataSource;
cxGrid2DBTableView1NAME: TcxGridDBColumn;
cxGrid1DBTableView1Column1: TcxGridDBColumn;
cxGrid2DBTableView1Column1: TcxGridDBColumn;
frxReport_Pirnt: TfrxReport;
frxDBDataset1: TfrxDBDataset;
frxFIBComponents1: TfrxFIBComponents;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure cxB_RegistrClick(Sender: TObject);
procedure cxB_Ok_CommitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure cxB_CancelClick(Sender: TObject);
procedure cxME_ID_AbitKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure cxB_Print_IDClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Fvabit: TFvabit;
implementation
{$R *.dfm}
{Обрабатываем закрытие формы}
procedure TFvabit.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := caFree;
end;
{Освобождаем память}
procedure TFvabit.FormDestroy(Sender: TObject);
begin
Fvabit := nil;
end;
{Обрабатываем нажатие кнопки Регистрация}
procedure TFvabit.cxB_RegistrClick(Sender: TObject);
begin
if pFIBDS_All.Modified then
if pFIBDS_All.Fieldbyname('ID').AsVariant <> null then
pFIBDS_All.Post
else
begin
//кто зарегистрировал
pFIBDS_All.FieldByName('USER_ADD').AsInteger :=
DM_Main.NickID;
//на каком мероприятии
pFIBDS_All.FieldByName('Source_ID').AsInteger :=
DM_Main.vSource;
pFIBDS_All.Post;
//Показываем список факультетов и специальностей
pFIBDS_Fakul.FullRefresh;
pFIBDS_Spec.FullRefresh;
//в поле ID записываем сгенерированный ID воз. абитуриента
cxME_ID_Abit.Text := pFIBDS_All.Fieldbyname('ID').AsString;
end;
if pFIBDS_Fakul.Modified then
pFIBDS_Fakul.Post;
if pFIBDS_Spec.Modified then
pFIBDS_Spec.Post;
DM_Main.pFIBTWrite.CommitRetaining;
end;
{Обрабатываем нажатие кнопки Сохранить}
procedure TFvabit.cxB_Ok_CommitClick(Sender: TObject);
begin
if pFIBDS_All.Modified then
pFIBDS_All.Post;
if pFIBDS_Fakul.Modified then
pFIBDS_Fakul.Post;
if pFIBDS_Spec.Modified then
pFIBDS_Spec.Post;
DM_Main.pFIBTWrite.CommitRetaining;
close;
ModalResult := mrOk;
end;
{Обрабатываем создание формы регистрации}
procedure TFvabit.FormCreate(Sender: TObject);
begin
pFIBDS_All.Active := true;
pFIBDS_From.Active := true;
pFIBDS_NameEduc.Active := true;
pFIBDS_LivingEduc.Active := true;
pFIBDS_PayForm.Active := true;
pFIBDS_Fakul.Active := true;
pFIBDS_Spec.Active := true;
end;
{Обрабатываем нажатие кнопки Отмена}
procedure TFvabit.cxB_CancelClick(Sender: TObject);
begin
DM_Main.pFIBTWrite.Rollback;
ModalResult := mrCancel;
close;
end;
{Обрабатываем введение в поле ‘ID’ идентификационный номер возможного абитуриента во время повторного посещения МГОУ}
procedure TFvabit.cxME_ID_AbitKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
begin
cxB_Registr.Visible := false;
pFIBDS_All.Active := false;
pFIBDS_All.ParamByName('ID').AsString := cxME_ID_Abit.Text;
pFIBDS_All.Active := true;
pFIBDS_All.Edit;
pFIBDS_All.FieldByName('REPEAT').AsInteger := 1;
end;
end;
{Обрабатываем нажатие кнопки Печать ID}
procedure TFvabit.cxB_Print_IDClick(Sender: TObject);
begin
//открываем окно предварительного просмотра карточки воз.абитуриента
frxReport_Pirnt.ShowReport(true);
end;
end.
{Модуль работы с сообщением}
unit UPost;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, SDIEvent, cxGraphics, cxControls, cxLookAndFeels,
cxLookAndFeelPainters, cxContainer, cxEdit, cxSplitter, cxGroupBox,
Menus, dxCntner, dxEditor, dxExEdtr, dxEdLib, dxDBELib, StdCtrls,
cxButtons, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxLookupEdit,
cxDBLookupEdit, cxDBLookupComboBox, cxStyles, cxCustomData,
cxFilter, cxData, cxDataStorage, DB, cxDBData, FIBDataSet,
pFIBDataSet, cxGridLevel, cxClasses, cxGridCustomView,
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
cxProgressBar, DMMain, cxCheckBox, cxMemo, cxDBEdit, Grids, DBGrids,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, IdMessage;
type
TFPost = class(TForm)
SDIEvents: TSDIEvents;
cxGroupBox5: TcxGroupBox;
cxSplitter1: TcxSplitter;
cxGroupBox1: TcxGroupBox;
cxGroupBox2: TcxGroupBox;
cxDBLCB_Tema: TcxDBLookupComboBox;
cxGroupBox3: TcxGroupBox;
cxGroupBox4: TcxGroupBox;
Label2: TLabel;
Label4: TLabel;
Label3: TLabel;
cxGroupBox6: TcxGroupBox;
cxB_Save: TcxButton;
cxB_Send: TcxButton;
cxProgressBar: TcxProgressBar;
Label1: TLabel;
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
pFIBDS_Post: TpFIBDataSet;
DataSource1: TDataSource;
cxGrid1DBTableView1SURNAME: TcxGridDBColumn;
cxGrid1DBTableView1NAME: TcxGridDBColumn;
cxGrid1DBTableView1EDUCATION_ID: TcxGridDBColumn;
cxGrid1DBTableView1PAY_FORM_ID: TcxGridDBColumn;
cxGrid1DBTableView1EMAIL: TcxGridDBColumn;
cxGrid1DBTableView1Column1: TcxGridDBColumn;
cxGrid1DBTableView1Column2: TcxGridDBColumn;
cxGrid1DBTableView1Column3: TcxGridDBColumn;
cxDBMemo1: TcxDBMemo;
DS_Mes: TDataSource;
pFIBDS_Mes: TpFIBDataSet;
DS_Theme: TDataSource;
pFIBDS_Theme: TpFIBDataSet;
cxGroupBox7: TcxGroupBox;
cxBnot: TcxButton;
cxBAll: TcxButton;
IdSMTP: TIdSMTP;
pFIBDS_Send: TpFIBDataSet;
OpenDialog: TOpenDialog;
dxBE_ADD: TdxButtonEdit;
dxBE_ADD1: TdxButtonEdit;
dxBE_ADD2: TdxButtonEdit;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure SDIEventsSDIActivate(Sender: TObject);
procedure cxB_SaveClick(Sender: TObject);
procedure cxB_SendClick(Sender: TObject);
procedure cxBAllClick(Sender: TObject);
procedure dxBE_ADDButtonClick(Sender: TObject; AbsoluteIndex:
Integer);
procedure dxBE_ADD1ButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
procedure dxBE_ADD2ButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
procedure cxBnotClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FPERSID: integer;
procedure SetPERSID(const Value: integer);
{ Private declarations }
public
property PERSID :integer read FPERSID write SetPERSID;
{ Public declarations }
end;
var
FPost: TFPost;
implementation
{$R *.dfm}
{Обрабатываем закрытие формы}
procedure TFPost.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := caFree;
end;
{Освобождаем память}
procedure TFPost.FormDestroy(Sender: TObject);
begin
FPost := nil;
end;
{Обрабатываем нажатие кнопки Сохранить}
procedure TFPost.cxB_SaveClick(Sender: TObject);
begin
pFIBDS_Mes.Edit;
//сохраняем прикрепленные файлы
pFIBDS_Mes.FieldByName('ENCLOSURE').AsString := dxBE_ADD.Text + ','
+ dxBE_ADD1.Text + ',' + dxBE_ADD2.Text;
if pFIBDS_Post.Modified then
pFIBDS_Post.Post;
if pFIBDS_Mes.Modified then
pFIBDS_Mes.Post;
DM_Main.pFIBTWrite.Commit;
close;
end;
{Обрабатываем нажатие кнопки Отправить}
procedure TFPost.cxB_SendClick(Sender: TObject);
var
M: TIdMessage;
ATT: Tidattachment;
i, MessageID: integer;
begin
cxB_Save.Click;
//начало отправки сообщений
Screen.Cursor := crHourGlass;
//проверяем тип авторизации пользователя на почтовом сервере
if pFIBDS_Send.FieldByName('AUTHENTICATIONTYPE').AsInteger = 0 then
begin
IdSMTP.AuthenticationType := atNone;
ShowMessage('- AUTHENTICATION: OFF');
end
else
// хост
IdSMTP.Host := pFIBDS_Send.FieldByName('Host').AsString;
// учетная запись
IdSMTP.Username := pFIBDS_Send.FieldByName('Username').AsString;
// порт
IdSMTP.Port := pFIBDS_Send.FieldByName('Port').AsInteger;
// пароль
IdSMTP.Password := pFIBDS_Send.FieldByName('Pass').AsString;
// создаем сообщение
M := TIdMessage.Create(self);
// формируем параметры сообщения
M.From.Text := '"' + pFIBDS_Send.FieldByName('MAILLOGIN').AsString
+ '"<' + pFIBDS_Send.FieldByName('USERNAME').AsString + '>';
m.Body.Add(cxDBMemo1.Text); //текст письма
M.Recipients.Add;
m.Subject := cxDBLCB_Tema.Text; //тема письма
M.IsEncoded := true;
try
try
Application.ProcessMessages;
idSMTP.Connect();
except
MessageBox(0, 'Не удалось соединиться с почтовым сервером.' +
#13 + #10 + 'Сообщения не будут отправлены.' + #13 + #10 +
'Проверьте наличие соединения с интернетом.', 'Соединение с
почтовым ящиком', MB_ICONSTOP or MB_OK or MB_TASKMODAL);
exit;
end;
// добавление файлов к сообщению
if dxBE_ADD.Text <> '' then
ATT := TIdAttachment.Create(m.MessageParts, dxBE_ADD.Text);
if dxBE_ADD1.Text <> '' then
ATT := TIdAttachment.Create(m.MessageParts, dxBE_ADD1.Text);
if dxBE_ADD2.Text <> '' then
ATT := TIdAttachment.Create(m.MessageParts, dxBE_ADD2.Text);
i := 1;
cxProgressBar.Properties.Max :=
cxGrid1DBTableView1.DataController.RowCount + 1;
{Добавление email выделенных возможных абитуриентов}
for i := 1 to cxGrid1DBTableView1.DataController.RowCount do
try
cxGrid1DBTableView1.DataController.RecNo := i;
Application.ProcessMessages;
cxProgressBar.Position := i + 1;
if pFIBDS_Post.FieldByName('CB').AsInteger = 0 then Continue;
M.Recipients.EMailAddresses :=
pFIBDS_Post.FieldByName('email').AsString;
idSMTP.Send(m);
except
MessageBox(0, 'Ошибка при отправке сообщения.' + #13 + #10 +
'Возможно соединение с интернетом было утерено.', 'Отправка
сообщения', MB_ICONERROR or MB_OK or MB_TASKMODAL);
break;
end;
finally
IdSMTP.Disconnect;
att.free;
m.Free;
screen.Cursor := crdefault;
if DM_Main.pFIBTWrite.Active then
DM_Main.pFIBTWrite.Commit;
end;
end;
{Обрабатываем нажатие кнопки Выделить все}
procedure TFPost.cxBAllClick(Sender: TObject);
var i:integer;
begin
pFIBDS_Post.DisableControls;
pFIBDS_Post.First;
for i := 0 to cxGrid1DBTableView1.DataController.RecordCount + 1 do
begin
pFIBDS_Post.Edit;
pFIBDS_Post.FieldByName('CB').AsInteger := 1;
pFIBDS_Post.Post;
cxGrid1DBTableView1.DataController.RecNo := i;
end;
pFIBDS_Post.EnableControls;
end;
{Прикрепление первого файла к сообщению}
procedure TFPost.dxBE_ADDButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
begin
if OpenDialog.Execute then
dxBE_ADD.Text := OpenDialog.FileName;
end;
{Прикрепление второго файла к сообщению}
procedure TFPost.dxBE_ADD1ButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
begin
if OpenDialog.Execute then
dxBE_ADD1.Text := OpenDialog.FileName;
end;
{Прикрепление третьего файла к сообщению}
procedure TFPost.dxBE_ADD2ButtonClick(Sender: TObject;
AbsoluteIndex: Integer);
begin
if OpenDialog.Execute then
dxBE_ADD2.Text := OpenDialog.FileName;
end;
{Обрабатываем нажатие кнопки Снять выделение}
procedure TFPost.cxBnotClick(Sender: TObject);
var i:integer;
begin
pFIBDS_Post.DisableControls;
pFIBDS_Post.First;
for i := 0 to cxGrid1DBTableView1.DataController.RecordCount + 1 do
begin
pFIBDS_Post.Edit;
pFIBDS_Post.FieldByName('CB').AsInteger := 0;
pFIBDS_Post.Post;
cxGrid1DBTableView1.DataController.RecNo := i;
end;
pFIBDS_Post.EnableControls
end;
{Создание формы}
procedure TFPost.FormCreate(Sender: TObject);
var i:integer;
begin
pFIBDS_Mes.Active := true;
pFIBDS_Mes.Insert;
// получение ID нового сообщения
i := pFIBDS_Mes.fieldByName('ID').AsInteger;
// получение ID пользователя, который создает сообщение
pFIBDS_Mes.FieldByName('USER_ID').AsInteger := DM_Main.NickID;
pFIBDS_Mes.Post;
DM_Main.pFIBTWrite.CommitRetaining;
pFIBDS_Mes.Active := false;
pFIBDS_Mes.ParamByName('ID').AsInteger := i;
pFIBDS_Mes.Active := true;
pFIBDS_Send.Active := true;
end;
{Установить персональный ID. Выбор адресата по переданному ID}
procedure TFPost.SetPERSID(const Value: integer);
begin
FPERSID := Value;
if pFIBDS_Post.Locate('pr_id', persid, [loCaseInsensitive]) then
begin
pFIBDS_Post.Edit;
pFIBDS_Post.FieldByName('CB').AsInteger := 1;
pFIBDS_Post.Post;
end;
end;
end.