Программный интерфейс

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Московский государственный университет дизайна и технологии»

Кафедра автоматизированных систем обработки информации и управления








Отчет

по курсовой работе

«Программный интерфейс»




Выполнила:

Скворцова Е.С.







Москва 2015

Оглавление


1. Описание структуры базы данных учета оплаты за обучение

. Описание программного проекта

. Описание алгоритма формирования отчета

. Руководство программиста

. Руководство пользователя

. Описание контрольного примера

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

Выводы

Список использованных источников


1. Описание структуры базы данных учета оплаты за обучение


Студенты учебного заведения обучаются на договорной основе.

По каждому студенту фиксируется код, ФИО, принадлежность к учебной группе, процентом оплаты от установленной платы. Каждая группа, характеризуется номером, принадлежностью к факультету. Каждый факультет характеризуется кодом (кратким наименованием) и полным наименованием.

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

Получить отчет о задолженности по оплатам студентов заданного курса на заданную дату: ФИО, группа, сумма начислений, задолженность по оплате. Данные отчета отсортировать по факультетам и фамилиям.

Схема логической модели данных приведена на рисунке 1.


Рис. 1. Схема логической модели данных

Схема физической модели данных приведена на рисунке 2.


Рис. 2. Схема физической модели данных


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


2. Описание программного проекта


Программный проект Proj_Oplata_Obuch включает в себя следующие файлы:

. Файл проекта: Proj_Oplata_Obuch.dpr

. Файлы форм: UConnect.dfm, UMain.dfm, uDM.dfm, UDogovor.dfm, uEdDogovor.dfm, UFackult.dfm, UGroup.dfm, UParamRpt.dfm, Urpt.dfm, UStudent.dfm.


Таблица 1. Описание структуры таблиц БД

Название сущностиНазвание поля в информационной моделиИмя поля в логической моделиТип поля в логической моделиТип поля в физической моделиДополнительные сведения: PK, FK, поле ключаСтудентКод_студКод студентаNumberChar(10)PKФамилияФамилияStringVarchar(30)ИмяИмяStringVarchar(30)ОтчествоОтчествоStringVarchar(30)Процент_оплПроцент оплатыNumberNumeric(3,1)ДоговорИдентиф_договИдентификатор договораNumberInteger PKНом_договНомер договораNumberIntДата_договДата договораDatetimeDateКод_студКод студентаNumberChar(10)FKОбщ_стоимОбщая стоимостьNumberNumeric(10,2)Default:ZeroОплаченоОплаченоNumberNumeric(10,2)Код_грКод группыNumberChar(10)FKСтоимостьИдентиф_стоимИдентификатор стоимNumberInteger PKГод_обучГод обученияNumberSmallintСтоимостьСтоимостьNumberNumeric(10,2)Default:ZeroИдентиф_договИдентификатор договораNumberIntegerFKОплатаИдентиф_оплИдентификатор оплатыNumberIntegerPKДата_оплДата оплатыDatetimeDateНом_квитанцНомер квитанцииNumberIntegerГод_обучГод обученияNumberSmallintСум_оплСумма оплатыNumberNumeric10,2)ПримечаниеПримечаниеStringVarchar(50)Идентиф_договИдентификатор договораNumberIntegerФакультетыКрат_наим_факультКрат нимен факультStringChar(10)PKПолн_наим_факультПолное наимен факультетаStringVarchar(65)ГруппыКод_грКод группыStringChar(10)PKКрат_наим_факультКрат нимен факультStringChar(10)FK


3. Файлы программных модулей: UConnect.pas, UMain.pas, uDM.pas, UDogovor.pas, uEdDogovor.pas, UFackult.pas, UGroup. pas, UParamRpt. pas, Urpt. pas, UStudent. pas, Ulib.pas.

Формы предназначены для вывода графических элементов интерфейса для взаимодействия с пользователем. Их назначения описаны в таблице 2.


Таблица 2. Описания файлов форм проекта.

Имя файла формыНазначениеUConnectОсуществляет подключение к базе данных UMainПредназначена для выбора необходимых действий(открытие форм)uDMПредназначена для связи с базой данныхUDogovorПредназначена для просмотра списка договоров, вызова формы редактирования или добавления новых записейuEdDogovorПредназначена для работы со списком договоров, редактирования и добавления в него новых записейUFackultПредназначена для просмотра и редактирования справочника факультетов и добавления в него новых записейUGroupПредназначена для просмотра и редактирования справочника групп и добавления в него новых записейUStudentПредназначена для редактирования справочника студентов и добавления в него новых записейUParamRptПредназначена для указания параметров формирования отчетаUrptМакет отчета

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


Таблица 3. Описания файлов модулей проекта.

Имя модуляНазначениеUConnectОсуществление идентификацииUMainХранит алгоритм работы с кнопками, алгоритм построения макета отчета, проверки соединения с БДuDMХранит алгоритм соединения с БДUDogovorХранит алгоритм редактирования просмотра списка договоровuEdDogovorХранит алгоритм редактирования данных, добавления новыхUFackultХранит алгоритм редактирования справочника факультетов и добавления в него новых записейUGroupХранит алгоритм редактирования справочника групп и добавления в него новых записейUStudentХранит алгоритм редактирования справочника студентов и добавления в него новых записейUParamRptХранит алгоритм указания параметров формирования отчетаUrptХранит алгоритм построения макета отчетаUlibХранит алгоритм сохранения данных в НД

3. Описание алгоритма формирования отчета


Алгоритм формирования отчета имеет следующий вид:

.Вывод окна для задания параметров отчета. Если не нажата кнопка «Вывести» - выход из процедуры.

.При первом формировании отчета создание запроса, при последующих формированиях ее очистка.

.Проверка данных на наличие, если они есть-продолжаем, если нет, выводим сообщение.

.Заполняем заголовок отчета.

. Выводим отчет в режиме Priview.

.Закрываем НД.

Блок-схема процедуры формирования отчета представлена на рисунке 3.

Объяснение процедуры формирования отчета представлено в разделе 7, в исходном тексте модуля uMain.


Рис. 3. Блок-схема процедуры формирования отчета


4. Руководство программиста


Для установки программы необходимо разместить исполняемый файл Proj_Oplata_Obuch.exe данных в папке C:\Program Files\ Proj_Oplata_Obuch

Файлы базы данных необходимо разместить в каталоге C:\Program Files\ Proj_Oplata_Obuch После этого необходимо в программе ODBC Administrator добавить источник данных пользователя для обращения к базе данных. Источник должен иметь имя Oplata_obuchenia и в поле Database file на вкладке Database должен быть указан путь размещения файлов базы данных (C:\Program Files\ Proj_Oplata_Obuch \db).

Ярлык приложения необходимо разместить в удобном для пользователя месте (например на рабочем столе), в качестве объекта указать путь к исполняемому файлу (C:\Program Files\ Proj_Oplata_Obuch \ Proj_Oplata_Obuch.exe), именем ярлыка установить «Учет оплаты обучения».


. Руководство пользователя


Запуск программы осуществляется с рабочего стола, путем двойного клика по ярылку с именем «Учет оплаты обучения». После запуска программы открывается меню. Вид меню представлен на рисунке 4.


Рис. 4. Вид меню программы


Форма меню имеет следующие элементы: сгруппированные кнопки для выбора справочников, кнопка основная и кнопка для вывода отчета, заголовок и картинка.

При нажатии на кнопку Договороткрывается форма для ее просмотра с кнопками для открытия формы дальнейшего редактирования или добавления данных, с навигатором о списку и кнопкой обновления.. Вид формы представлен на рис. 5

Рис. 5. Форма просмотра списка договоров.


Основная форма имеет два основных элемента: элемент отображения данных с навигацией и панель управления данными. Элемент отображения данных служит для отображения данных о договорах, а также для навигации в пределах набора данных.

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


Рис. 6. Форма добавления данных

После заполнения всех полей верхней панели, кроме поля «Оплачено» и «Общая стоимость», необходимо кликнуть по кнопке «Сохранить». Затем на нижней левой панели нажать на кнопку навигатора со значком «+» и заполнить поля. После этого нажать на кнопку навигатора с изображением галочки для сохранения изменений. То же самое проделать и для заполнения второй таблицы. Нажать на кнопку «Выход» для закрытия формы добавления.

Для открытия справочников, на основной форме необходимо выбрать нужный справочник и нажать на соответствующую кнопку. Внешний вид формы справочника «Факультеты» представлен на рисунке 7.


Рис. 7. Вид формы «Факультеты»


На форме представлены данные таблицы, которые можно редактировать, добавлять новые, удалять. Также есть кнопка обновления данных .

Для формирования отчета (оборотной ведомости) о задолженностях по оплате, необходимо на основной форме кликнуть по кнопке «Отчет». На экране появится форма для ввода параметров отчета. Форма приведена на рисунке 8.


Рисунок 8 - Форма «Параметры отчета»


В форме указывается Дата и курс, по которым будет сформирован отчет.Для указания даты используется календарь, а курс можно выбрать из выпадающего списка. При нажатии кнопки «Вывести» будет сформирован отчет, при нажатии кнопки «Отмена» или закрытии формы отчет выводиться не будет. Пример формирования отчета приведен в разделе 6.


6.Описание контрольного примера


Для демонстрации работы программы таблицы были заполнены данными контрольного примера. Содержание таблиц базы данных приведены на рисунках 9-12.


Рис. 9. Пример заполнения данными формы

Рис.10. Содержание таблицы Group


Рис.11. Содержание таблицы Student


Рис.12. Содержание таблицы Fackultet


При формировании отчета в качестве параметров программа запрашивает дату и курс обучающегося.Пример заполнения представлен на рисунке 13.


Рис. 13. Форма задания параметров отчета


Результат вывода отчета представлен на рисунке 14.


Рис.14 Вывод отчета по контрольному примеру

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

UMain;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,,DB, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, jpeg;= class(TForm): TPanel;: TGroupBox;: TBitBtn;: TLabel;: TBitBtn;: TBitBtn;: TBitBtn;: TImage;: TBitBtn;FormShow(Sender: TObject);BitBtnDogovClick(Sender: TObject);BitBtnFackultClick(Sender: TObject);BitBtnGruppaClick(Sender: TObject);BitBtnStudentClick(Sender: TObject);BBReportClick(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrmMain;uDM, UDogovor, UFackult, UGroup, UStudent,Ulib, UParamRpt, Urpt;

{$R *.dfm}TFrmMain.FormShow(Sender: TObject);:integer;

//DM.DB.Connected:=true;:=1;

while(not DM.DB.Connected)and

(i<=3) and f_con do begin.DB.Connected:=true;E:EDataBaseError dof_con then('Соединение с БД не удалось',mtError,[mbOk],0);

end;(i);;not DM.DB.Connected then.Terminate;;;TFrmMain.BitBtnDogovClick(Sender: TObject);.Show;;TFrmMain.BitBtnFackultClick(Sender: TObject);.Show;;TFrmMain.BitBtnGruppaClick(Sender: TObject);.Show;;TFrmMain.BitBtnStudentClick(Sender: TObject);.Show;;TFrmMain.BBReportClick(Sender: TObject);

if not (frmParamRpt.ShowModal=mrOk) then;

try

// Для формирования отчета используем набор данных DM.qSql

with DM.qSql do begin.clear;

// Запрос выполнения процедуры БД формирования отчета

sql.add('call Procedura1(:fdat,:tip)');

// Параметры процедуры,берутся из формы параметров отчета

ParamByName('fdat').AsDate:= frmParamRpt.edDatFirst.Date;('tip').AsString:= frmParamRpt.CB_Kurs.Text;

// Открываем набор данных

Open;

except

// Проверка наличия данныхDM.qSql.isEmpty then begin('Нет данных для отчета');

Exit;

end;

// Заполнение заголовка отчета заданными параметрами

frmRpt.QRLBData.caption:='на '+(frmParamRpt.edDatFirst.Date);.QRLBKurs.caption:='Курс '+.CB_Kurs.Text;

// Вывод отчета в режиме предпросмотра

frmRpt.Preview;

finally

// Закрытие набора данных

DM.qSQL.closeUGroup;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, DBGrids, DBCtrls, Buttons, ExtCtrls;= class(TForm): TPanel;: TPanel;: TSpeedButton;: TDBNavigator;: TPanel;: TDBGrid;SBRefreshClick(Sender: TObject);FormShow(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrmGroup;uDM;

{$R *.dfm}TFrmGroup.SBRefreshClick(Sender: TObject);_kod:string;_kod:=DM.QGruppa.FieldByName('Kod_gr').AsString;DM.QGruppa do begin;;;:='Kod_gr='+s_kod;;;;;TFrmGroup.FormShow(Sender: TObject);not DM.QGruppa.Active then

DM.QGruppa.Open;

except

ShowMessage ('Ошибка при открытии справочника "Договор"' ');

end;UStudent;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, DBGrids, DBCtrls, Buttons, ExtCtrls;= class(TForm): TPanel;: TPanel;: TSpeedButton;: TDBNavigator;: TPanel;: TDBGrid;SBRefreshClick(Sender: TObject);FormShow(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrmStudent;uDM;

{$R *.dfm}TFrmStudent.SBRefreshClick(Sender: TObject);_kod:string;_kod:=DM.QStudent.FieldByName('Kod_stud').AsString;DM.QStudent do begin;;;:='Kod_stud='''+s_kod+'''';;;;;TFrmStudent.FormShow(Sender: TObject);not DM.QStudent.Active then.QStudent.Open;('Ошибка при открытии справочника "Договор"');;; end.UFackult;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, DBGrids, DBCtrls, Buttons, ExtCtrls;= class(TForm): TPanel;: TPanel;: TSpeedButton;: TDBNavigator;: TPanel;: TDBGrid;SBRefreshClick(Sender: TObject);FormShow(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrmFackult;uDM;

{$R *.dfm}TFrmFackult.SBRefreshClick(Sender: TObject);_kod:string;_kod:=DM.QFackultet.FieldByName('krat_naim_fackult').AsString;DM.QFackultet do begin;;;:='krat_naim_fackult='''+s_kod+'''';;;;TFrmFackult.FormShow(Sender: TObject);not DM.QFackultet.Active then.QFackultet.Open;('Ошибка при открытии справочника "Договор"');.

UDogovor;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, DBGrids, ExtCtrls, Buttons, DBCtrls;= class(TForm): TPanel;: TPanel;: TDBGrid;: TDBNavigator;: TSpeedButton;_Ins: TSpeedButton;_Edit: TSpeedButton;SBRefreshClick(Sender: TObject);FormShow(Sender: TObject);SB_InsClick(Sender: TObject);SB_EditClick(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrmDogovor;_kod:string;uDM, uEdDogovor, ulib;

{$R *.dfm}TFrmDogovor.SBRefreshClick(Sender: TObject);.DogovorRefresh;;

TFrmDogovor.FormShow(Sender: TObject);not DM.QDogovor.Active then.QDogovor.Open;

except

ShowMessage ('Ошибка при открытии справочника "Договор"');

end;;TFrmDogovor.SB_InsClick(Sender: TObject);.QDogovor.Insert;TFrmedDogovor.Create(Application) do;;;;.DogovorRefresh;;TFrmDogovor.SB_EditClick(Sender: TObject);.QDogovor.Edit;TFrmedDogovor.Create(Application) do;;;;.DogovorRefresh;;

UConnect;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls;= class(TForm): TPanel;: TLabel;: TLabel;: TEdit;: TEdit;: TButton;: TButton;

{ Private declarations }

{ Public declarations };: TFrmConnect;

{$R *.dfm}.uDM;, Classes, DB, DBTables,Forms,Controls, Dialogs, Messages,, Variants;= class(TDataModule): TDatabase;: TQuery;: TQuery;: TQuery;: TQuery;: TQuery;: TQuery;_dogov: TIntegerField;_dogov: TIntegerField;_dogov: TDateField;_stoim: TFloatField;: TFloatField;_stud: TStringField;_gr: TStringField;_stoim: TIntegerField;_obuch: TSmallintField;: TFloatField;_dogov: TIntegerField;_gr: TStringField;_naim_fackult: TStringField;_l: TStringField;_opl: TIntegerField;_opl: TDateField;_kvitanc: TIntegerField;_obuch: TSmallintField;_opl: TFloatField;: TStringField;_dogov: TIntegerField;_l: TStringField;_l: TStringField;_Calcul: TFloatField;_stud: TStringField;: TStringField;: TStringField;: TStringField;_opl: TFloatField;: TDataSource;: TDataSource;: TDataSource;: TDataSource;: TDataSource;: TDataSource;_naim_fackult: TStringField;_naim_fackult: TStringField;: TQuery;DBLogin(Database: TDatabase; LoginParams: TStrings);QDogovorCalcFields(DataSet: TDataSet);QStoimostStoimostValidate(Sender: TField);QFackultetAfterPost(DataSet: TDataSet);QGruppaAfterPost(DataSet: TDataSet);QStudentAfterPost(DataSet: TDataSet);QDogovorAfterPost(DataSet: TDataSet);QDogovorBeforeDelete(DataSet: TDataSet);QDogovorBeforeEdit(DataSet: TDataSet);QDogovorBeforeInsert(DataSet: TDataSet);qrChange(Sender:TField);QDogovorAfterOpen(DataSet: TDataSet);QDogovorBeforePost(DataSet: TDataSet);DogovorRefresh;QOplataBeforePost(DataSet: TDataSet);QOplataBeforeDelete(DataSet: TDataSet);QOplataBeforeEdit(DataSet: TDataSet);QOplataAfterPost(DataSet: TDataSet);QStoimostAfterPost(DataSet: TDataSet);QStoimostBeforeDelete(DataSet: TDataSet);QStoimostBeforeEdit(DataSet: TDataSet);QStoimostBeforePost(DataSet: TDataSet);QOplataAfterOpen(DataSet: TDataSet);QStoimostAfterOpen(DataSet: TDataSet);AppException(Sender:TObject;E:Exception);

{ Private declarations }

public

{ Public declarations };_kod: string;: TDM;_con:boolean=true;UConnect, uMain, Ulib;

{$R *.dfm}TDM.DBLogin(Database: TDatabase; LoginParams: TStrings);_con:=true;:=TFrmConnect.Create(application);FrmConnect.ShowModal = mrOk then begin.Values['USER NAME']:=FrmConnect.EdUser.Text;.Values['PASSWORD']:= FrmConnect.EdPsw.Text;else_con:=false;.Free;;not f_con then abort;TDM.QDogovorCalcFields(DataSet: TDataSet);

{DataSet.FieldByName('Oplacheno').AsFloat:=

((DataSet.FieldByName('Procent_opl').AsFloat) *

(DataSet.FieldByName('Obsch_stoim').AsFloat))/100 };TDM.QStoimostStoimostValidate(Sender: TField);Sender.Value < 0 then begin('Стоимость не может быть отрицательной!');

Sender.Value:= Null;;;TDM.QFackultetAfterPost(DataSet: TDataSet);s_kod:string;_kod:=DM.QFackultet.FieldByName('krat_naim_fackult').AsString;DM.QFackultet do begin;;

Open;:='krat_naim_fackult='''+s_kod+'''';

FindFirst;;;;TDM.QGruppaAfterPost(DataSet: TDataSet);_kod:string;_kod:=DM.QGruppa.FieldByName('Kod_gr').AsString;DM.QGruppa do begin;;;:='Kod_gr='+s_kod;;;;TDM.QStudentAfterPost(DataSet: TDataSet);_kod:string;_kod:=DM.QStudent.FieldByName('Kod_stud').AsString;DM.QStudent do begin;;;:='Kod_stud='''+s_kod+'''';;;;TDM.QDogovorAfterPost(DataSet: TDataSet);_kod:string;_kod:=DM.QDogovor.FieldByName('Id_dogov').AsString;DM.QDogovor do begin;;;:='Id_dogov='+s_kod;;;;TDM.QDogovorBeforeDelete(DataSet: TDataSet);not CreateDeleteSql('Dogovor', 'Id_dogov',.FieldByName('Id_dogov').AsString)then;;TDM.QDogovorBeforeEdit(DataSet: TDataSet);(DataSet);_kod:= DataSet.FieldByName('Id_dogov').AsString;;TDM.QDogovorBeforeInsert(DataSet: TDataSet);(DataSet);_kod:= '-1';;TDM.qrChange(Sender: TField);.Tag:=1;;TDM.QDogovorAfterOpen(DataSet: TDataSet);:word;i:=0 to DataSet.FieldCount-1 do beginnot (DataSet.Fields[i].Lookup or DataSet.Fields[i].Calculated) then.Fields[i].OnChange:=qrChange;UpperCase(DataSet.Fields[i].FieldName)= 'DATE_DOGOV' then.Fields[i].EditMask:='!99.99.0000;1;_';;TDM.QDogovorBeforePost(DataSet: TDataSet);(DataSet,'Dogovor','Id_dogov', s_kod);;TDM.DogovorRefresh;_id:string;_id:=QDogovor.FieldByName('Id_dogov').AsString;.Close;.Open;.Filter:= 'Id_dogov='+s_id;.FindFirst;;TDM.QOplataBeforePost(DataSet: TDataSet);DataSet.State in [dsInsert] then.FieldByName('Id_dogov').AsString:=.FieldByName('Id_dogov').AsString;(DataSet,'Oplata','Id_opl',s_kod);;TDM.QOplataBeforeDelete(DataSet: TDataSet);not CreateDeleteSql('Oplata','Id_opl',DataSet.FieldByName('Id_opl').AsString) then;.Refresh;;TDM.QOplataBeforeEdit(DataSet: TDataSet);(DataSet);_kod:= DataSet.FieldByName('Id_opl').AsString;;TDM.QOplataAfterPost(DataSet: TDataSet);;;TDM.QStoimostAfterPost(DataSet: TDataSet);;;TDM.QStoimostBeforeDelete(DataSet: TDataSet);not CreateDeleteSql('Stoimost','Id_opl',DataSet.FieldByName('Id_stoim').AsString) then;;;TDM.QStoimostBeforeEdit(DataSet: TDataSet);(DataSet);_kod:= DataSet.FieldByName('Id_stoim').AsString;;TDM.QStoimostBeforePost(DataSet: TDataSet);DataSet.State in [dsInsert] then.FieldByName('Id_dogov').AsString:=.FieldByName('Id_dogov').AsString;(DataSet,'Stoimost','Id_stoim',s_kod);;TDM.QOplataAfterOpen(DataSet: TDataSet);:word;i:=0 to DataSet.FieldCount-1 do beginnot (DataSet.Fields[i].Lookup or DataSet.Fields[i].Calculated) then.Fields[i].OnChange:=qrChange;UpperCase(DataSet.Fields[i].FieldName)= 'DATE_OPL' then.Fields[i].EditMask:='!99.99.0000;1;_';;;TDM.QStoimostAfterOpen(DataSet: TDataSet);:word;i:=0 to DataSet.FieldCount-1 do beginnot (DataSet.Fields[i].Lookup or DataSet.Fields[i].Calculated) then.Fields[i].OnChange:=qrChange;;;TDM.AppException(Sender: TObject; E: Exception);s_mes,s_msgerr: string;,s_pos,n_kod: integer;

// Ошибки, не связанные с БД

if E is EDivByZero then('Ошибка деления на 0 ',mtError,[mbOk],0)

// Ошибка ввода неправ.датыif E is EConvertError then begin_pos:=pos('is not a valid date',(e).Message);s_pos>0 then begin_mes:=copy(EconvertError(e).Message,1,_pos-1)+

неверный формат даты!';

MessageDlg (s_mes, mtError, [mbOk], 0)

// Ошибки БДif E is EDBEngineError then begin_mes:='';

// For Sybase5 берем код последней ошибки

//n_kod:=EdbEngErr(e).Err..s[EdbEngErr(e).ErrorCount-1].NatiVe;

// For Sybase8 берем код 2-й ошибки

n_kod:=EdbEngineError(e).Errors[1].NatiVeError;n_kod<>0 then beginn_kod of

-193:// -193 - код ош.Sybase Нарушение РК

// Коды ошибок BDE $2601: {9729}

s_mes:='Дублир. записи не допускается';

: //Нарушение FK

s_mes:='Такого кода в справочнике нет';

: // Наруш Not Null

s_mes:='Поле должно быть заполнено';

: // Есть ссылка в дочерних

s_mes:='На запись есть ссылка в др.таблице! Удалять нельзя';

// -121 - нарушение прав доступа

// -209 - нарушение огранич.на поле табл

// -196 - нарушение уникальности неключ.реквизита

: // Ошибки из триггеров БД

for i:=1 to EDBEngineError(e).ErrorCount-1begin_msgerr:=EdbEngineError(e)[i].Message;s_mes<>'' then s_mes:=s_mes+' ';_pos:=pos('RAISERROR EXECUTED ',//19симв(s_msgerr));s_pos>0 then_mes:=s_mes+copy(s_msgerr,s_pos+19,(s_msgerr)-s_pos-19+2)_mes:=s_mes+s_msgerr// -99999; // case(s_mes, mtError, [mbOk], 0)// n_kod<>0begini:=0 to EDBEngineError(e).ErrorCount-1 do_mes:=s_mes+EDBEngineError(e).Errors[i].Message;(s_mes, mtError, [mbOk], 0);

else {Если ошибка не определена, даем возможность вывести ошибку Delphi}

Application.ShowException(E);;.uEdDogovor;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, DBCtrls, Grids, DBGrids, ExtCtrls, Mask, Buttons,DB;= class(TForm): TPanel;: TPanel;: TPanel;_Oplata: TDBGrid;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TBitBtn;: TBitBtn;_Oplata: TDBNavigator;: TPanel;_Stoimost: TDBNavigator;_dogov: TDBEdit;: TDBEdit;: TDBEdit;: TDBGrid;: TDBEdit;_KodSt: TDBLookupComboBox;_Kod_gr: TDBLookupComboBox;FormShow(Sender: TObject);SetButton;BbOkClick(Sender: TObject);BbCancelClick(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrmEdDogovor;uDM;

{$R *.dfm}TFrmEdDogovor.FormShow(Sender: TObject);not DM.QOplata.Active then.QOplata.Open;not DM.QStoimost.Active then.QStoimost.Open;not DM.QStudent.Active then.QStudent.Open;not DM.QGruppa.Active then.QGruppa.Open;;;TFrmEdDogovor.SetButton;DM.QDogovor.State in [dsInsert,dsEdit] then begin

BbOk.Caption:= 'Ñîõðàíèòü' ;.Caption:='Îòìåíà';

DBN_Oplata.Enabled:= false;_Oplata.ReadOnly:= true;begin

BbOk.Caption:= 'Ðåäàêòèðîâàòü' ;.Caption:='Âûõîä';

DBN_Oplata.Enabled:= true;_Oplata.ReadOnly:= false;;TFrmEdDogovor.BbOkClick(Sender: TObject);DM.QDogovor.State in

[dsInsert, dsEdit] then.QDogovor.Post.QDogovor.Edit;;;TFrmEdDogovor.BbCancelClick(Sender: TObject);DM.QDogovor.State = dsEdit then.QDogovor.CancelbeginDM.QDogovor.State = dsInsert then.QDogovor.Cancel;;;begin;;;;;Ulib;Windows,sysutils,DB,,Forms,,Dialogs;ClearUpdate(DS: TDataSet);SetUpdate(sender: Tfield);CreateUpdateSql(DS: TDataSet; qSQL:TQuery; ntable: string);CreateDeleteSql(ntable: string; fld_name,fld_value: string):Boolean;dsBeforePost(DS: TDataSet; ntable, fld_name, fld_value: string);

// Подготовка НД перед редактированием (сброс флага tag в 0)

procedure ClearUpdate(DS: TDataSet);i: word;i:=0 to ds.FieldCount-1 dods.fields[i].readOnly=false then.Fields[i].tag:=0 //(DataSet.Fields[i].tag AND $FFFE);

// Установка флага tag в 1

procedure SetUpdate(sender: Tfield);

sender.tag:=1;//(Sender.tag OR $1)

end;

// Подготовка оператора SQL на изменение данных

procedure CreateUpdateSql(DS: TDataSet; qSQL:TQuery; ntable: string);

// Параметры

// DS - редактируемый набор данных (отсюда берутся названия и значения полей)

// qSQL - набор данных для формирования SQL

// ntable - изменяемая таблица БДi: word;: boolean;: string;: char;: integer;:=0;DS.state=dsInsert then

// формирование оператора INSERT

with qSQL do begin

close;.clear;:=NIL;.ADD('INSERT INTO '+ntable+'(');:=false;

// Цикл заполнения имен добавляемых полей

for i:=0 to DS.FieldCount-1 do((DS.Fields[i].tag AND 1)=1) AND (DS.Fields[i].ReadOnly=false) then beginf then:=','begin:='';:=true;.ADD(s+DS.Fields[i].FieldName);:=count+1;;.ADD(') VALUES(');:=DecimalSeparator;:='.';


// Цикл заполнения значений для добавляемых полей


f:=false;i:=0 to DS.FieldCount-1 do((DS.Fields[i].tag AND 1)=1) AND (DS.Fields[i].ReadOnly=false) then beginf then:=','begin:='';:=true;DS.Fields[i].IsNull then.ADD(s+'null')begin

// в зависимости от типа поляDS.Fields[i] is TnumericField then.ADD(s+DS.Fields[i].AsString)if (DS.Fields[i] is TStringField) then beginDS.Fields[i].AsString='' then.ADD(s+'null').ADD(s+''''+DS.Fields[i].AsString+'''')if DS.Fields[i].DataType in [ftDate] then.ADD(s+''''+FormatDateTime('yyyy-mm-dd',DS.Fields[i].AsDateTime)+'''').ADD(s+''''+DS.Fields[i].AsString+'''');;.ADD(')');:=c;

// формирование оператора UPDATEqSQL do begin.clear;:=NIL;.ADD('UPDATE '+ntable+' SET');:=DecimalSeparator;:='.';

// формирование строк ПОЛЕ=Значение

// для всех изменяемых полей

f:=false;i:=0 to DS.FieldCount-1 do((DS.Fields[i].tag AND 1)=1) AND (DS.Fields[i].ReadOnly=false) then beginf then:=','begin:='';:=true;:=count+1;DS.Fields[i].IsNull then.ADD(s+DS.Fields[i].FieldName+'=NULL')DS.Fields[i] is TnumericField then.ADD(s+DS.Fields[i].FieldName+'='+DS.Fields[i].AsString)if (DS.Fields[i] is TStringField) then beginDS.Fields[i].AsString='' then.ADD(s+DS.Fields[i].FieldName+'=NULL').ADD(s+DS.Fields[i].FieldName+'='''+DS.Fields[i].AsString+'''')if DS.Fields[i].DataType in [ftDate] then.ADD(s+DS.Fields[i].FieldName+'='''+FormatDateTime('yyyy-mm-dd',DS.Fields[i].AsDateTime)+'''').ADD(s+DS.Fields[i].FieldName+'='''+DS.Fields[i].AsString+'''');;:=c;;count=0 then qSQL.SQL.clear;;

// Подготовка и выполнение оператора SQL на удаление данных

function CreateDeleteSql(ntable: string; fld_name, fld_value: string):Boolean;q: TQuery;: Boolean;:=false;MessageDlg('Удалить запись?',, [mbYes, mbNo], 0) = mrYes then begin:=TQuery.Create(Application);q do begin.DatabaseName:='DB';

//close;

//sql.clear;

//dataSource:=NIL;.ADD('DELETE FROM '+ntable);.ADD('WHERE '+fld_name+'='''+fld_value+'''');;;:=true;.free;:=f;:=f;;

// Выполнение оператора изменения данных и считывание результата изменения

procedure dsBeforePost(DS: TDataSet; ntable, fld_name, fld_value: string);i: integer;: boolean;: TFieldNotifyEvent;: Tfield;: Tfield;

screen.cursor:=crSQLWait;

// 1. Формируем оператор SQL на изменение данных

CreateUpdateSQL(DS,Dm.qSql,ntable);

// 2. Выполняем оператор SQL на изменение данных

with Dm.qSql dosql.count>0 then beginDS.state=dsInsert then begin;;:=nil;;

sql.Clear;

// Формируем оператор считывания добавленной записи

if fld_value='' then begin.ADD('select * from '+ntable+' WHERE '+fld_name+'=:s_kod'); //[0].Value:=DS.FieldByName(fld_name).AsString;.ADD('select * from '+ntable+' WHERE '+fld_name+'=@@identity');// end dsInsertbegin

// dsUpdate

// Условие поиска изменяемой записи.ADD('WHERE '+fld_name+'=:kod'); //'''+DS.FieldByName(fld).AsString+'''')[0].Value:=fld_value;;;;.Clear;

// Формируем оператор считывания измененной записи.ADD('select * from '+ntable+' WHERE '+fld_name+'=:kod'); //'='''+DS.FieldByName(fld_name).AsString+'''');[0].Value:=DS.FieldByName(fld_name).AsString;; // end dsUpdate

// 3. Считываем измененную запись

open;

// 4. Перечитываем поля измененной записи в поля редактируемого НД

for i:=0 to DS.FieldCount-1 do begin:=DS.Fields[i];:=FindField(q.FieldName);f<>nil then begin:=q.readOnly;:=q.OnValidate;.readOnly:=false;.OnValidate:=NIL;.value:=f.value;.readOnly:=r;.OnValidate:=o;;;;;.cursor:=crDefault;;end.Urpt;Windows, SysUtils, Messages, Classes, Graphics, Controls,, ExtCtrls, Forms, QuickRpt, QRCtrls;= class(TQuickRep): TQRBand;: TQRLabel;: TQRLabel;: TQRBand;: TQRLabel;: TQRLabel;: TQRShape;: TQRShape;: TQRBand;: TQRDBText;: TQRBand;: TQRSysData;: TQRBand;: TQRSysData;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRShape;: TQRShape;: TQRDBText;: TQRDBText;: TQRGroup;: TQRLabel;: TQRDBText;: TQRBand;: TQRExpr;: TQRExpr;: TQRBand;: TQRExpr;: TQRExpr;: TQRLabel;: TQRLabel;: TQRShape;: TQRShape;: TQRShape;: TQRShape;: TQRShape;;: TFrmRpt;uDM;

{$R *.DFM}

end.


Выводы


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

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

программный обучение алгоритм отчет

Список использованных источников


1.Голованов М., Веселов Создание компонентов в средеDelphi. Руководство разработчика; Е.; Год: 2004, 320 с.;

2.Кренке Д. Теория и практика построения баз данных: [пер.с англ] / Д. Кренке. - 9 - е изд. - СПб.: Питер, 2005. - 858 с.

3.Delphi 2006 на примерах (+ CD-ROM): Владимир Шупрута - Москва, БХВ-Петербург, 2006 г.- 528 с.

4.Delphi 7. Основы программирования. Решение типовых задач. Самоучитель: Л.М. Климова - Санкт-Петербург, КУДИЦ-Образ, 2006 г.- 480 с.

.Delphi. Профессиональное программирование: Дмитрий Осипов - Москва, Символ-Плюс, 2006 г. - 1056 с.

.Основы программирования в интегрированной среде Delphi. Практикум: А. Желонкин - Санкт-Петербург, Бином. Лаборатория знаний, 2006 г.- 240 с.

.Программирование в Turbo Pascal. Переход к Delphi (+ CD-ROM): Ю. А. Шпак - Санкт-Петербург, МК-Пресс, 2006 г.- 416 с.

.Программируем в Turbo Delphi: С.А. Любавин - Москва, НТ Пресс, 2008 г.- 320 с.


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ