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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    886,17 Кб
  • Опубликовано:
    2014-11-12
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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

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

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

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






Отчет

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

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


Выполнила:

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





Москва 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, поле ключа

Студент

Код_студ

Код студента

Number

Char(10)

PK


Фамилия

Фамилия

String

Varchar(30)



Имя

Имя

String

Varchar(30)



Отчество

Отчество

String

Varchar(30)



Процент_опл

Процент оплаты

Number

Numeric(3,1)


Договор

Идентиф_догов

Идентификатор договора

Number

Integer

PK


Ном_догов

Number

Int



Дата_догов

Дата договора

Datetime

Date



Код_студ

Код студента

Number

Char(10)

FK


Общ_стоим

Общая стоимость

Number

Numeric(10,2)

Default:Zero


Оплачено

Оплачено

Number

Numeric(10,2)



Код_гр

Код группы

Number

Char(10)

FK

Стоимость

Идентиф_стоим

Идентификатор стоим

Number

Integer

PK


Год_обуч

Год обучения

Number

Smallint



Стоимость

Стоимость

Number

Numeric(10,2)

Default:Zero


Идентиф_догов

Идентификатор договора

Number

Integer

FK

Оплата

Идентиф_опл

Идентификатор оплаты

Number

Integer

PK


Дата_опл

Дата оплаты

Datetime

Date



Ном_квитанц

Номер квитанции

Number

Integer



Год_обуч

Год обучения

Number

Smallint



Сум_опл

Сумма оплаты

Number

Numeric10,2)



Примечание

Примечание

String



Идентиф_догов

Идентификатор договора

Number

Integer


Факультеты

Крат_наим_факульт

Крат нимен факульт

String

Char(10)

PK


Полн_наим_факульт

Полное наимен факультета

String

Varchar(65)


Группы

Код_гр

Код группы

String

Char(10)

PK


Крат_наим_факульт

Крат нимен факульт

String

Char(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

Хранит алгоритм редактирования справочника студентов и добавления в него новых записей

Хранит алгоритм указания параметров формирования отчета

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 - нарушение уникальности неключ.реквизита

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

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 с.

Похожие работы на - Программный интерфейс

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!