Программный интерфейс
Разработка программного проекта для осуществления автоматизированного учета оплаты обучения в количественном и стоимостном выражении. Описание алгоритма формирования отчета и структуры таблицы базы данных. Осуществление просмотра и редактирования данных.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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