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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 02.05.2015
Размер файла 2,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

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

Отчет

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

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

Выполнила:

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

Москва 2015

Оглавление

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

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

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

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

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

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

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

Выводы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. Файлы форм: 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

Varchar(50)

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

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

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

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

UParamRpt

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

Urpt

Хранит алгоритм построения макета отчета

Ulib

Хранит алгоритм сохранения данных в НД

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

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

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

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

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

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

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

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

Блок-схема процедуры формирования отчета представлена на рисунке 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), именем ярлыка установить «Учет оплаты обучения».

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

Запуск программы осуществляется с рабочего стола, путем двойного клика по ярылку с именем «Учет оплаты обучения». После запуска программы открывается меню. Вид меню представлен на рисунке 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. Текст программы

unit UMain;

interface

uses

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

Dialogs,DB, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, jpeg;

type

TFrmMain = class(TForm)

Panel1: TPanel;

GroupBox1: TGroupBox;

BitBtnDogov: TBitBtn;

Label1: TLabel;

BitBtnGruppa: TBitBtn;

BitBtnFackult: TBitBtn;

BitBtnStudent: TBitBtn;

Image1: TImage;

BBReport: TBitBtn;

procedure FormShow(Sender: TObject);

procedure BitBtnDogovClick(Sender: TObject);

procedure BitBtnFackultClick(Sender: TObject);

procedure BitBtnGruppaClick(Sender: TObject);

procedure BitBtnStudentClick(Sender: TObject);

procedure BBReportClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FrmMain: TFrmMain;

implementation

uses uDM, UDogovor, UFackult, UGroup, UStudent,Ulib, UParamRpt, Urpt;

{$R *.dfm}

procedure TFrmMain.FormShow(Sender: TObject);

var

i:integer;

begin

//DM.DB.Connected:=true;

try

i:=1;

while(not DM.DB.Connected)and

(i<=3) and f_con do begin

try

DM.DB.Connected:=true;

on E:EDataBaseError do

if f_con then

MessageDlg('Соединение с БД не удалось',mtError,[mbOk],0);

end;

inc(i);

end;

finally

if not DM.DB.Connected then

Application.Terminate;

end;

end;

procedure TFrmMain.BitBtnDogovClick(Sender: TObject);

begin

FrmDogovor.Show;

end;

procedure TFrmMain.BitBtnFackultClick(Sender: TObject);

begin

FrmFackult.Show;

end;

procedure TFrmMain.BitBtnGruppaClick(Sender: TObject);

begin

FrmGroup.Show;

end;

procedure TFrmMain.BitBtnStudentClick(Sender: TObject);

begin

FrmStudent.Show;

end;

procedure TFrmMain.BBReportClick(Sender: TObject);

begin

if not (frmParamRpt.ShowModal=mrOk) then

exit;

try

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

with DM.qSql do begin

sql.clear;

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

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

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

ParamByName('fdat').AsDate:= frmParamRpt.edDatFirst.Date;

ParamByName('tip').AsString:= frmParamRpt.CB_Kurs.Text;

try

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

Open;

except

end

// Проверка наличия данных

if DM.qSql.isEmpty then begin

ShowMessage('Нет данных для отчета');

Exit;

end;

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

frmRpt.QRLBData.caption:='на '+

DateToStr(frmParamRpt.edDatFirst.Date);

frmRpt.QRLBKurs.caption:='Курс '+

frmParamRpt.CB_Kurs.Text;

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

frmRpt.Preview;

finally

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

DM.qSQL.close

end

unit UGroup;

interface

uses

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

Dialogs, Grids, DBGrids, DBCtrls, Buttons, ExtCtrls;

type

TFrmGroup = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

SBRefresh: TSpeedButton;

DBNDogovor: TDBNavigator;

Panel3: TPanel;

DB: TDBGrid;

procedure SBRefreshClick(Sender: TObject);

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FrmGroup: TFrmGroup;

implementation

uses uDM;

{$R *.dfm}

procedure TFrmGroup.SBRefreshClick(Sender: TObject);

var

s_kod:string;

begin

s_kod:=DM.QGruppa.FieldByName('Kod_gr').AsString;

with DM.QGruppa do begin

DisableControls;

Close;

Open;

Filter:='Kod_gr='+s_kod;

FindFirst;

EnableControls;

end;

end;

procedure TFrmGroup.FormShow(Sender: TObject);

begin

if not DM.QGruppa.Active then

try

DM.QGruppa.Open;

except

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

end;

unit UStudent;

interface

uses

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

Dialogs, Grids, DBGrids, DBCtrls, Buttons, ExtCtrls;

type

TFrmStudent = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

SBRefresh: TSpeedButton;

DBNDogovor: TDBNavigator;

Panel3: TPanel;

DB: TDBGrid;

procedure SBRefreshClick(Sender: TObject);

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FrmStudent: TFrmStudent;

implementation

uses uDM;

{$R *.dfm}

procedure TFrmStudent.SBRefreshClick(Sender: TObject);

var

s_kod:string;

begin

s_kod:=DM.QStudent.FieldByName('Kod_stud').AsString;

with DM.QStudent do begin

DisableControls;

Close;

Open;

Filter:='Kod_stud='''+s_kod+'''';

FindFirst;

EnableControls;

end;

end;

procedure TFrmStudent.FormShow(Sender: TObject);

begin

if not DM.QStudent.Active then

try

DM.QStudent.Open;

except

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

end;

end; end.

unit UFackult;

interface

uses

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

Dialogs, Grids, DBGrids, DBCtrls, Buttons, ExtCtrls;

type

TFrmFackult = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

SBRefresh: TSpeedButton;

DBNDogovor: TDBNavigator;

Panel3: TPanel;

DB: TDBGrid;

procedure SBRefreshClick(Sender: TObject);

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FrmFackult: TFrmFackult;

implementation

uses uDM;

{$R *.dfm}

procedure TFrmFackult.SBRefreshClick(Sender: TObject);

var

s_kod:string;

begin

s_kod:=DM.QFackultet.FieldByName('krat_naim_fackult').AsString;

with DM.QFackultet do begin

DisableControls;

Close;

Open;

Filter:='krat_naim_fackult='''+s_kod+'''';

FindFirst;

EnableControls;

end;

procedure TFrmFackult.FormShow(Sender: TObject);

begin

if not DM.QFackultet.Active then

try

DM.QFackultet.Open;

except

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

end.

unit UDogovor;

interface

uses

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

Dialogs, Grids, DBGrids, ExtCtrls, Buttons, DBCtrls;

type

TFrmDogovor = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

DB: TDBGrid;

DBNDogovor: TDBNavigator;

SBRefresh: TSpeedButton;

SB_Ins: TSpeedButton;

SB_Edit: TSpeedButton;

procedure SBRefreshClick(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure SB_InsClick(Sender: TObject);

procedure SB_EditClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FrmDogovor: TFrmDogovor;

s_kod:string;

implementation

uses uDM, uEdDogovor, ulib;

{$R *.dfm}

procedure TFrmDogovor.SBRefreshClick(Sender: TObject);

begin

DM.DogovorRefresh;

end;

procedure TFrmDogovor.FormShow(Sender: TObject);

begin

if not DM.QDogovor.Active then

DM.QDogovor.Open;

except

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

end;

end;

procedure TFrmDogovor.SB_InsClick(Sender: TObject);

begin

DM.QDogovor.Insert;

with TFrmedDogovor.Create(Application) do

try

ShowModal;

finally;

free;

end;

DM.DogovorRefresh;

end;

procedure TFrmDogovor.SB_EditClick(Sender: TObject);

begin

DM.QDogovor.Edit;

with TFrmedDogovor.Create(Application) do

try

ShowModal;

finally;

free;

end;

DM.DogovorRefresh;

end;

unit UConnect;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls;

type

TFrmConnect = class(TForm)

Panel1: TPanel;

Label1: TLabel;

Label2: TLabel;

EdUser: TEdit;

EdPsw: TEdit;

BtnOk: TButton;

BtnCancel: TButton;

private

{ Private declarations }

public

{ Public declarations }

end;

var

FrmConnect: TFrmConnect;

implementation

{$R *.dfm}

end.

unit uDM;

interface

uses

SysUtils, Classes, DB, DBTables,Forms,Controls, Dialogs, Messages,

Windows, Variants;

type

TDM = class(TDataModule)

DB: TDatabase;

QDogovor: TQuery;

QFackultet: TQuery;

QGruppa: TQuery;

QOplata: TQuery;

QStoimost: TQuery;

QStudent: TQuery;

QDogovorId_dogov: TIntegerField;

QDogovorNum_dogov: TIntegerField;

QDogovorDate_dogov: TDateField;

QDogovorObsch_stoim: TFloatField;

QDogovorOplacheno: TFloatField;

QDogovorKod_stud: TStringField;

QDogovorKod_gr: TStringField;

QStoimostId_stoim: TIntegerField;

QStoimostGod_obuch: TSmallintField;

QStoimostStoimost: TFloatField;

QStoimostId_dogov: TIntegerField;

QGruppaKod_gr: TStringField;

QGruppakrat_naim_fackult: TStringField;

QDogovorDogGrup_l: TStringField;

QOplataId_opl: TIntegerField;

QOplataDate_opl: TDateField;

QOplataNum_kvitanc: TIntegerField;

QOplataGod_obuch: TSmallintField;

QOplataSum_opl: TFloatField;

QOplataPrimech: TStringField;

QOplataId_dogov: TIntegerField;

QDogovorDogStud_l: TStringField;

QGruppaGrupFack_l: TStringField;

QDogovorOplacheno_Calcul: TFloatField;

QStudentKod_stud: TStringField;

QStudentFam: TStringField;

QStudentName: TStringField;

QStudentOtchest: TStringField;

QStudentProcent_opl: TFloatField;

DSDogovor: TDataSource;

DSOplata: TDataSource;

DSStoimost: TDataSource;

DSGruppa: TDataSource;

DSStudent: TDataSource;

DSFackultet: TDataSource;

QFackultetkrat_naim_fackult: TStringField;

QFackultetPoln_naim_fackult: TStringField;

qSql: TQuery;

procedure DBLogin(Database: TDatabase; LoginParams: TStrings);

procedure QDogovorCalcFields(DataSet: TDataSet);

procedure QStoimostStoimostValidate(Sender: TField);

procedure QFackultetAfterPost(DataSet: TDataSet);

procedure QGruppaAfterPost(DataSet: TDataSet);

procedure QStudentAfterPost(DataSet: TDataSet);

procedure QDogovorAfterPost(DataSet: TDataSet);

procedure QDogovorBeforeDelete(DataSet: TDataSet);

procedure QDogovorBeforeEdit(DataSet: TDataSet);

procedure QDogovorBeforeInsert(DataSet: TDataSet);

procedure qrChange(Sender:TField);

procedure QDogovorAfterOpen(DataSet: TDataSet);

procedure QDogovorBeforePost(DataSet: TDataSet);

procedure DogovorRefresh;

procedure QOplataBeforePost(DataSet: TDataSet);

procedure QOplataBeforeDelete(DataSet: TDataSet);

procedure QOplataBeforeEdit(DataSet: TDataSet);

procedure QOplataAfterPost(DataSet: TDataSet);

procedure QStoimostAfterPost(DataSet: TDataSet);

procedure QStoimostBeforeDelete(DataSet: TDataSet);

procedure QStoimostBeforeEdit(DataSet: TDataSet);

procedure QStoimostBeforePost(DataSet: TDataSet);

procedure QOplataAfterOpen(DataSet: TDataSet);

procedure QStoimostAfterOpen(DataSet: TDataSet);

procedure AppException(Sender:TObject;E:Exception);

private

{ Private declarations }

public

{ Public declarations }

end;

var

s_kod: string;

DM: TDM;

f_con:boolean=true;

implementation

uses UConnect, uMain, Ulib;

{$R *.dfm}

procedure TDM.DBLogin(Database: TDatabase; LoginParams: TStrings);

begin

f_con:=true;

try

FrmConnect:=TFrmConnect.Create(application);

if FrmConnect.ShowModal = mrOk then begin

loginparams.Values['USER NAME']:=FrmConnect.EdUser.Text;

loginParams.Values['PASSWORD']:= FrmConnect.EdPsw.Text;

end else

f_con:=false;

finally

FrmConnect.Free;

end;

if not f_con then abort

end;

procedure TDM.QDogovorCalcFields(DataSet: TDataSet);

begin

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

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

(DataSet.FieldByName('Obsch_stoim').AsFloat))/100 }

end;

procedure TDM.QStoimostStoimostValidate(Sender: TField);

begin

if Sender.Value < 0 then begin

ShowMessage('Стоимость не может быть отрицательной!');

Sender.Value:= Null;

abort;

end;

procedure TDM.QFackultetAfterPost(DataSet: TDataSet);

var s_kod:string;

begin

s_kod:=DM.QFackultet.FieldByName('krat_naim_fackult').AsString;

with DM.QFackultet do begin

DisableControls;

Close;

Open;

Filter:='krat_naim_fackult='''+s_kod+'''';

FindFirst;

EnableControls;

end;

end;

procedure TDM.QGruppaAfterPost(DataSet: TDataSet);

var

s_kod:string;

begin

s_kod:=DM.QGruppa.FieldByName('Kod_gr').AsString;

with DM.QGruppa do begin

DisableControls;

Close;

Open;

Filter:='Kod_gr='+s_kod;

FindFirst;

EnableControls;

end;

procedure TDM.QStudentAfterPost(DataSet: TDataSet);

var

s_kod:string;

begin

s_kod:=DM.QStudent.FieldByName('Kod_stud').AsString;

with DM.QStudent do begin

DisableControls;

Close;

Open;

Filter:='Kod_stud='''+s_kod+'''';

FindFirst;

EnableControls;

end;

procedure TDM.QDogovorAfterPost(DataSet: TDataSet);

var

s_kod:string;

begin

s_kod:=DM.QDogovor.FieldByName('Id_dogov').AsString;

with DM.QDogovor do begin

DisableControls;

Close;

Open;

Filter:='Id_dogov='+s_kod;

FindFirst;

EnableControls;

end;

procedure TDM.QDogovorBeforeDelete(DataSet: TDataSet);

begin

if not CreateDeleteSql('Dogovor', 'Id_dogov',

DataSet.FieldByName('Id_dogov').AsString)then

abort;

end;

procedure TDM.QDogovorBeforeEdit(DataSet: TDataSet);

begin

ClearUpdate(DataSet);

s_kod:= DataSet.FieldByName('Id_dogov').AsString;

end;

procedure TDM.QDogovorBeforeInsert(DataSet: TDataSet);

begin

ClearUpdate(DataSet);

s_kod:= '-1';

end;

procedure TDM.qrChange(Sender: TField);

begin

Sender.Tag:=1;

end;

procedure TDM.QDogovorAfterOpen(DataSet: TDataSet);

var

i:word;

begin

for i:=0 to DataSet.FieldCount-1 do begin

if not (DataSet.Fields[i].Lookup or DataSet.Fields[i].Calculated) then

DataSet.Fields[i].OnChange:=qrChange;

if UpperCase(DataSet.Fields[i].FieldName)= 'DATE_DOGOV' then

DataSet.Fields[i].EditMask:='!99.99.0000;1;_';

end;

procedure TDM.QDogovorBeforePost(DataSet: TDataSet);

begin

dsBeforePost(DataSet,'Dogovor','Id_dogov', s_kod);

end;

procedure TDM.DogovorRefresh;

var

s_id:string;

begin

s_id:=QDogovor.FieldByName('Id_dogov').AsString;

QDogovor.Close;

QDogovor.Open;

QDogovor.Filter:= 'Id_dogov='+s_id;

QDogovor.FindFirst;

end;

procedure TDM.QOplataBeforePost(DataSet: TDataSet);

begin

if DataSet.State in [dsInsert] then

DataSet.FieldByName('Id_dogov').AsString:=

QDogovor.FieldByName('Id_dogov').AsString;

dsBeforePost(DataSet,'Oplata','Id_opl',s_kod);

end;

procedure TDM.QOplataBeforeDelete(DataSet: TDataSet);

begin

if not CreateDeleteSql('Oplata','Id_opl',DataSet.FieldByName('Id_opl').AsString) then

abort;

QDogovor.Refresh;

end;

procedure TDM.QOplataBeforeEdit(DataSet: TDataSet);

begin

ClearUpdate(DataSet);

s_kod:= DataSet.FieldByName('Id_opl').AsString;

end;

procedure TDM.QOplataAfterPost(DataSet: TDataSet);

begin

DogovorRefresh;

end;

procedure TDM.QStoimostAfterPost(DataSet: TDataSet);

begin

DogovorRefresh;

end;

procedure TDM.QStoimostBeforeDelete(DataSet: TDataSet);

begin

if not CreateDeleteSql('Stoimost','Id_opl',DataSet.FieldByName('Id_stoim').AsString) then

abort;

DogovorRefresh;

end;

procedure TDM.QStoimostBeforeEdit(DataSet: TDataSet);

begin

ClearUpdate(DataSet);

s_kod:= DataSet.FieldByName('Id_stoim').AsString;

end;

procedure TDM.QStoimostBeforePost(DataSet: TDataSet);

begin

if DataSet.State in [dsInsert] then

DataSet.FieldByName('Id_dogov').AsString:=

QDogovor.FieldByName('Id_dogov').AsString;

dsBeforePost(DataSet,'Stoimost','Id_stoim',s_kod);

end;

procedure TDM.QOplataAfterOpen(DataSet: TDataSet);

var

i:word;

begin

for i:=0 to DataSet.FieldCount-1 do begin

if not (DataSet.Fields[i].Lookup or DataSet.Fields[i].Calculated) then

DataSet.Fields[i].OnChange:=qrChange;

if UpperCase(DataSet.Fields[i].FieldName)= 'DATE_OPL' then

DataSet.Fields[i].EditMask:='!99.99.0000;1;_';

end;

end;

procedure TDM.QStoimostAfterOpen(DataSet: TDataSet);

var

i:word;

begin

for i:=0 to DataSet.FieldCount-1 do begin

if not (DataSet.Fields[i].Lookup or DataSet.Fields[i].Calculated) then

DataSet.Fields[i].OnChange:=qrChange;

end;

end;

procedure TDM.AppException(Sender: TObject; E: Exception);

var s_mes,s_msgerr: string;

i,s_pos,n_kod: integer;

begin

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

if E is EDivByZero then

MessageDlg('Ошибка деления на 0 ',mtError,[mbOk],0)

// Ошибка ввода неправ.даты

else if E is EConvertError then begin

s_pos:=pos('is not a valid date',

EconvertError(e).Message);

if s_pos>0 then begin

s_mes:=copy(EconvertError(e).Message,1,

s_pos-1)+

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

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

end

end

// Ошибки БД

else if E is EDBEngineError then begin

s_mes:='';

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

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

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

n_kod:=EdbEngineError(e).Errors[1].NatiVeError;

if n_kod<>0 then begin

case n_kod of

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

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

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

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

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

-195: // Наруш Not Null

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

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

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

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

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

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

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

for i:=1 to EDBEngineError(e).ErrorCount-1

do begin

s_msgerr:=EdbEngineError(e)

Errors[i].Message;

if s_mes<>'' then s_mes:=s_mes+' ';

s_pos:=pos('RAISERROR EXECUTED ',//19симв

UpperCase(s_msgerr));

if s_pos>0 then

s_mes:=s_mes+copy(s_msgerr,s_pos+19,

length(s_msgerr)-s_pos-19+2)

else

s_mes:=s_mes+s_msgerr

end // -99999

end; // case

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

End // n_kod<>0

Else begin

for i:=0 to EDBEngineError(e).ErrorCount-1 do

s_mes:=s_mes+EDBEngineError(e).Errors[i].Message;

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

End

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

Application.ShowException(E);

end;

end.

unit uEdDogovor;

interface

uses

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

Dialogs, StdCtrls, DBCtrls, Grids, DBGrids, ExtCtrls, Mask, Buttons,DB;

type

TFrmEdDogovor = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

Panel3: TPanel;

DBG_Oplata: TDBGrid;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

BbOk: TBitBtn;

BbCancel: TBitBtn;

DBN_Oplata: TDBNavigator;

Panel4: TPanel;

DBN_Stoimost: TDBNavigator;

DBEdNom_dogov: TDBEdit;

DBEdData: TDBEdit;

DBEdOplach: TDBEdit;

DBGStoimost: TDBGrid;

DBEdObStoim: TDBEdit;

DBLCB_KodSt: TDBLookupComboBox;

DBLCB_Kod_gr: TDBLookupComboBox;

procedure FormShow(Sender: TObject);

procedure SetButton;

procedure BbOkClick(Sender: TObject);

procedure BbCancelClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FrmEdDogovor: TFrmEdDogovor;

implementation

uses uDM;

{$R *.dfm}

procedure TFrmEdDogovor.FormShow(Sender: TObject);

begin

if not DM.QOplata.Active then

DM.QOplata.Open;

if not DM.QStoimost.Active then

DM.QStoimost.Open;

if not DM.QStudent.Active then

DM.QStudent.Open;

if not DM.QGruppa.Active then

DM.QGruppa.Open;

SetButton;

end;

procedure TFrmEdDogovor.SetButton;

begin

if DM.QDogovor.State in [dsInsert,dsEdit] then begin

BbOk.Caption:= 'Сохранить' ;

BbCancel.Caption:='Отмена';

DBN_Oplata.Enabled:= false;

DBG_Oplata.ReadOnly:= true;

end

else begin

BbOk.Caption:= 'Редактировать' ;

BbCancel.Caption:='Выход';

DBN_Oplata.Enabled:= true;

DBG_Oplata.ReadOnly:= false;

end;

procedure TFrmEdDogovor.BbOkClick(Sender: TObject);

begin

if DM.QDogovor.State in

[dsInsert, dsEdit] then

DM.QDogovor.Post

else

DM.QDogovor.Edit;

SetButton;

end;

procedure TFrmEdDogovor.BbCancelClick(Sender: TObject);

begin

if DM.QDogovor.State = dsEdit then

DM.QDogovor.Cancel

else begin

if DM.QDogovor.State = dsInsert then

begin

DM.QDogovor.Cancel;

Close;

exit;

end

else begin

Close;

Exit;

end;

SetButton;

end;

unit Ulib;

interface

USES Windows,sysutils,DB,

DbTables,Forms,

Controls,Dialogs;

procedure ClearUpdate(DS: TDataSet);

procedure SetUpdate(sender: Tfield);

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

function CreateDeleteSql(ntable: string; fld_name,fld_value: string):Boolean;

procedure dsBeforePost(DS: TDataSet; ntable, fld_name, fld_value: string);

implementation

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

procedure ClearUpdate(DS: TDataSet);

var i: word;

begin

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

if ds.fields[i].readOnly=false then

DS.Fields[i].tag:=0 //(DataSet.Fields[i].tag AND $FFFE)

end;

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

procedure SetUpdate(sender: Tfield);

begin

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

end;

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

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

// Параметры

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

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

// ntable - изменяемая таблица БД

var i: word;

f: boolean;

s: string;

c: char;

count: integer;

begin

count:=0;

if DS.state=dsInsert then

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

with qSQL do begin

close;

SQL.clear;

dataSource:=NIL;

sql.ADD('INSERT INTO '+ntable+'(');

f:=false;

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

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

if ((DS.Fields[i].tag AND 1)=1) AND (DS.Fields[i].ReadOnly=false) then begin

if f then

s:=','

else begin

s:='';

f:=true

end;

sql.ADD(s+DS.Fields[i].FieldName);

count:=count+1;

end;

sql.ADD(') VALUES(');

c:=DecimalSeparator;

DecimalSeparator:='.';

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

f:=false;

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

if ((DS.Fields[i].tag AND 1)=1) AND (DS.Fields[i].ReadOnly=false) then begin

if f then

s:=','

else begin

s:='';

f:=true

end;

if DS.Fields[i].IsNull then

sql.ADD(s+'null')

else begin

// в зависимости от типа поля

if DS.Fields[i] is TnumericField then

sql.ADD(s+DS.Fields[i].AsString)

else if (DS.Fields[i] is TStringField) then begin

if DS.Fields[i].AsString='' then

sql.ADD(s+'null')

else

sql.ADD(s+''''+DS.Fields[i].AsString+'''')

end

else if DS.Fields[i].DataType in [ftDate] then

sql.ADD(s+''''+FormatDateTime('yyyy-mm-dd',DS.Fields[i].AsDateTime)+'''')

else

sql.ADD(s+''''+DS.Fields[i].AsString+'''');

end;

sql.ADD(')');

DecimalSeparator:=c;

End

else

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

with qSQL do begin

SQL.clear;

dataSource:=NIL;

sql.ADD('UPDATE '+ntable+' SET');

c:=DecimalSeparator;

DecimalSeparator:='.';

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

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

f:=false;

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

if ((DS.Fields[i].tag AND 1)=1) AND (DS.Fields[i].ReadOnly=false) then begin

if f then

s:=','

else begin

s:='';

f:=true

end;

count:=count+1;

if DS.Fields[i].IsNull then

sql.ADD(s+DS.Fields[i].FieldName+'=NULL')

else

if DS.Fields[i] is TnumericField then

sql.ADD(s+DS.Fields[i].FieldName+'='+DS.Fields[i].AsString)

else if (DS.Fields[i] is TStringField) then begin

if DS.Fields[i].AsString='' then

sql.ADD(s+DS.Fields[i].FieldName+'=NULL')

else

sql.ADD(s+DS.Fields[i].FieldName+'='''+DS.Fields[i].AsString+'''')

end

else if DS.Fields[i].DataType in [ftDate] then

sql.ADD(s+DS.Fields[i].FieldName+'='''+FormatDateTime('yyyy-mm-dd',DS.Fields[i].AsDateTime)+'''')

else

sql.ADD(s+DS.Fields[i].FieldName+'='''+DS.Fields[i].AsString+'''');

end;

DecimalSeparator:=c;

end;

if count=0 then qSQL.SQL.clear;

end;

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

function CreateDeleteSql(ntable: string; fld_name, fld_value: string):Boolean;

var q: TQuery;

f: Boolean;

begin

f:=false;

if MessageDlg('Удалить запись?',

mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin

q:=TQuery.Create(Application);

try

with q do begin

q.DatabaseName:='DB';

//close;

//sql.clear;

//dataSource:=NIL;

sql.ADD('DELETE FROM '+ntable);

sql.ADD('WHERE '+fld_name+'='''+fld_value+'''');

EXECSQL;

end;

f:=true;

finally

q.free;

Result:=f;

end

Result:=f;

end;

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

procedure dsBeforePost(DS: TDataSet; ntable, fld_name, fld_value: string);

var i: integer;

r: boolean;

o: TFieldNotifyEvent;

f: Tfield;

q: Tfield;

begin

screen.cursor:=crSQLWait;

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

CreateUpdateSQL(DS,Dm.qSql,ntable);

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

with Dm.qSql do

if sql.count>0 then begin

if DS.state=dsInsert then begin

try

ExecSQL;

finally

close;

dataSource:=nil;

end;

sql.Clear;

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

if fld_value='' then begin

sql.ADD('select * from '+ntable+' WHERE '+fld_name+'=:s_kod'); //

Params[0].Value:=DS.FieldByName(fld_name).AsString;

end

else

sql.ADD('select * from '+ntable+' WHERE '+fld_name+'=@@identity');

end // end dsInsert

else begin

// dsUpdate

// Условие поиска изменяемой записи

sql.ADD('WHERE '+fld_name+'=:kod'); //'''+DS.FieldByName(fld).AsString+'''')

Params[0].Value:=fld_value;

try

ExecSQL;

finally

close;

end;

sql.Clear;

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

sql.ADD('select * from '+ntable+' WHERE '+fld_name+'=:kod'); //'='''+DS.FieldByName(fld_name).AsString+'''');

Params[0].Value:=DS.FieldByName(fld_name).AsString;

end; // end dsUpdate

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

open;

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

for i:=0 to DS.FieldCount-1 do begin

q:=DS.Fields[i];

f:=FindField(q.FieldName);

if f<>nil then begin

r:=q.readOnly;

o:=q.OnValidate;

q.readOnly:=false;

q.OnValidate:=NIL;

q.value:=f.value;

q.readOnly:=r;

q.OnValidate:=o;

end;

end;

close;

end;

screen.cursor:=crDefault;

nd;end.

unit Urpt;

interface

uses Windows, SysUtils, Messages, Classes, Graphics, Controls,

StdCtrls, ExtCtrls, Forms, QuickRpt, QRCtrls;

type

TFrmRpt = class(TQuickRep)

QRBTitle: TQRBand;

QRLBTitle: TQRLabel;

QRLBData: TQRLabel;

QRBColHead: TQRBand;

QRLabel2: TQRLabel;

QRLabel3: TQRLabel;

QRShape1: TQRShape;

QRShape2: TQRShape;

QRBDetail: TQRBand;

QRDBDetail: TQRDBText;

QRBSum: TQRBand;

QRSysData1: TQRSysData;

QRBPgFoot: TQRBand;

QRSysData2: TQRSysData;

QRLabel6: TQRLabel;

QRLabel7: TQRLabel;

QRLBKurs: TQRLabel;

QRLabel4: TQRLabel;

QRShape7: TQRShape;

QRShape9: TQRShape;

QRDBText1: TQRDBText;

QRDBTproc: TQRDBText;

QRGroup1: TQRGroup;

QRLabel1: TQRLabel;

QRDBText3: TQRDBText;

QRBand1: TQRBand;

QRExpr1: TQRExpr;

QRExpr2: TQRExpr;

QRBand2: TQRBand;

QRExpr3: TQRExpr;

QRExpr4: TQRExpr;

QRLabel5: TQRLabel;

QRLabel8: TQRLabel;

QRShape3: TQRShape;

QRShape4: TQRShape;

QRShape5: TQRShape;

QRShape6: TQRShape;

QRShape8: TQRShape;

private

public

end;

var

FrmRpt: TFrmRpt;

implementation

uses uDM;

{$R *.DFM}

end.

Выводы

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

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

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

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

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

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

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

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

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

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

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

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

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [610,1 K], добавлен 08.08.2013

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

    курсовая работа [2,6 M], добавлен 28.08.2012

  • Разработка программного продукта - базы данных "Экскурсия" в интегрированной среде программирования C++ Builder 6. Определение порядка просмотра данных базы, их редактирования и удаления. Особенности руководства пользователя и общего интерфейса программы.

    курсовая работа [2,4 M], добавлен 03.11.2013

  • Разработка базы данных для автоматизации учета и хранения сведений о заявках от работодателей. Проектирование приложения в СУБД Access. Описание запросов, отчетов и представлений данных. Интерфейс, условия выполнения и тестирование программного продукта.

    курсовая работа [3,7 M], добавлен 05.04.2012

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

    практическая работа [4,4 M], добавлен 02.04.2009

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

    курсовая работа [1,9 M], добавлен 02.10.2014

  • Концептуальная модель базы данных "Бюро по трудоустройству". Разработка информационного и программного обеспечения объектов автоматизации. Реализация базы данных в СУБД MsAccess. Запросы к базе данных. Таблицы, отчеты и макросы. Интерфейс пользователя.

    курсовая работа [5,2 M], добавлен 30.05.2016

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

    курсовая работа [2,5 M], добавлен 29.08.2014

  • Техническое задание на разработку программного продукта и требования к программе. Написание алгоритма работы и разработка интерфейса программы. Руководство системного программиста и оператора. Основные методы и принципы тестирования базы данных.

    дипломная работа [2,7 M], добавлен 27.01.2013

  • Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.

    курсовая работа [81,7 K], добавлен 18.08.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.