Руководство пользователя. В верхней части экрана находится сетка, в которой выводятся данные из таблицы




После запуска программы на экране появляется форма, на которой расположены все элементы управления.

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

Программа рассматривает частный случай – «одна специальность – один факультет». Поэтому они жестко связаны между собой.

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

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

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

Фильтрация записей выполняется по фамилиям и по оценке по физике. Для этого надо указать тип фильтрации, ввести условие фильтрации и нажать метку «Фильтрация». Строковые данные вводятся в апострофах. Результат фильтрации будет виден в сетке 2.

Если щелкнуть мышкой по названию поля в сетке абитуриентов, то в сетке 3 находящейся с правой стороны выведутся абитуриенты, отсортированные по данному полю.

Под элементами фильтрации находится длинное текстовое поле для ввода произвольных sql запросов. Чтобы выполнить введенный запрос надо щелкнуть по метке «Выполнить sql запрос».

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

Далее расположена кнопка «Количество по специальностям», нажатие на которую приводит к выводу в сетке3 двух столбцов s_code и total. В первом столбце выводится код специальности, а во втором – количество абитуриентов.

Нажав метку «О программе…» можно посмотреть информацию о разработчике.

Нажатие метки «Выход» завершает работу программу с сохранением измененных таблиц.

Если были пропущены обязательные данные (в данном случае за этим следит BDE автоматически), то программа остановит свою работу и запись не будет добавлена до тех пор, пока не будут введены правильные.

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

Данная программа разрабатывалась с использованием системы быстрой разработки программ (IDE) Delphi 5. Минимальные требования для работы: 256 Мб оперативной памяти, частота процессора 666 МГц, операционная система Windows 9x,Me,XP. Для работы программы требуется поддержка BDE, в связи с этим можно рекомендовать увеличение оперативной памяти.

Таблица 3. Сообщения программы

Сообщение программы Тип сообщения Действия оператора
Не указано условие фильтрации! Предупреждение Ввести условие или оставить по умолчанию. Во втором случае выведутся все записи.
Неправильное использование фильтра! Ошибка Правильно ввести условие фильтрации.
Не получилось выполнить SQL запрос! Ошибка Ввести правильный запрос.
Оценка допустима только от 2 до 5! Перехват ошибки. Ввести правильную оценку.

 


Заключение

В данном курсовом проекте были выполнены все поставленные задачи в соответствии с техническим заданием.

Определены состав и структура данных в виде 2-х связанных таблиц. Определены методы решения задач, разработаны SQL-запросы для выборки данных из БД, разработана программа в средстве разработки Borland Delphi. Описаны компоненты, использовавшиеся для разработки программы.

Документированы возможности программы, разработано руководство пользователя.


Литература

1. Вейскас Д. Эффективная работа с Microsoft Access 97. /Вейскас Д. – С-Пб.: Питер, 1999.

2. Калверт Ч. Borland C++ Builder / Калверт Ч., Рейсдорф К. – М.: Нолидж, 1998.

3. Фаронов В.В. Система программирования Delphi / В.В. Фаронов – М.: Нолидж, 2002.

4. Фаронов В.В. Системное программирование / В.В. Фаронов – М.: Нолидж, 2003.

5. Inprise Corporation. Delphi Help. / Borland Press, 2000.

 

Приложение А

Схема данных

 



 

 

Приложение Б

Схема работы программы



 

 

Приложение В

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

 


A.pas

unit a;

 

interface

 

uses

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

Grids, DBGrids, ExtCtrls, Db, DBTables, DBCtrls, StdCtrls;

 

type

Ta_f = class(TForm)

Panel2: TPanel;

Panel3: TPanel;

DBGrid1: TDBGrid;

DBGrid2: TDBGrid;

DBNavigator1: TDBNavigator;

Label1: TLabel;

Panel1: TPanel;

DBNavigator2: TDBNavigator;

DBLookupComboBox1: TDBLookupComboBox;

RadioGroup1: TRadioGroup;

Label2: TLabel;

Edit1: TEdit;

Label3: TLabel;

Edit2: TEdit;

Label4: TLabel;

DBGrid3: TDBGrid;

Label5: TLabel;

Label6: TLabel;

Label8: TLabel;

Label9: TLabel;

Button1: TButton;

Label7: TLabel;

procedure DBLookupComboBox1Enter(Sender: TObject);

procedure DBLookupComboBox1CloseUp(Sender: TObject);

procedure Label4Click(Sender: TObject);

procedure DBGrid2TitleClick(Column: TColumn);

procedure Label3Click(Sender: TObject);

procedure Label6Click(Sender: TObject);

procedure Label8Click(Sender: TObject);

procedure Label9Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Label7Click(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

a_f: Ta_f;

 

implementation

 

uses a_r, dm_u, a_r2, a_about;

 

{$R *.DFM}

 

procedure Ta_f.DBLookupComboBox1Enter(Sender: TObject);

begin

dm.Table2.MasterSource:=Nil;

dm.Table2.MasterFields:='';

dm.Table2.IndexName:='';

end;

 

procedure Ta_f.DBLookupComboBox1CloseUp(Sender: TObject);

begin

dm.Table2.MasterSource:=dm.DataSource1;

dm.Table2.MasterFields:='S_id';

dm.Table2.IndexName:='a_index';

end;

 

procedure Ta_f.Label4Click(Sender: TObject);

var

filter: string;

begin

if Edit1.Text=''

then

begin

ShowMessage('Не указано условие фильтрации!');

dm.Table2.Filtered:=False;

Edit1.SetFocus;

Exit;

end;

if RadioGroup1.ItemIndex=0

then

filter:='A_surname';

if RadioGroup1.ItemIndex=1

then

filter:='A_physic';

try

dm.Table2.Filter:=filter+Edit1.Text;

dm.Table2.Filtered:=True;

except

ShowMessage('Неправильное использование фильтра!');

Edit1.SetFocus;

Edit1.Text:='';

Exit;

end;

end;

 

procedure Ta_f.DBGrid2TitleClick(Column: TColumn);

begin

try

if column.FieldName='A_surname'

then

begin

dm.Query1.Close;

dm.Query1.SQL.Clear;

dm.Query1.SQL.add('select A_surname,A_math,A_physic,A_composition from "abiturients.db" order by A_surname asc');

dm.Query1.Open;

end;

if column.FieldName='A_math'

then

begin

dm.Query1.Close;

dm.Query1.SQL.Clear;

dm.Query1.SQL.add('select A_math,A_surname,A_physic,A_composition from "abiturients.db" order by A_math desc');

dm.Query1.Open;

end;

if column.FieldName='A_physic'

then

begin

dm.Query1.Close;

dm.Query1.SQL.Clear;

dm.Query1.SQL.add('select A_physic,A_surname,A_math,A_composition from "abiturients.db" order by A_physic desc');

dm.Query1.Open;

end;

if column.FieldName='A_composition'

then

begin

dm.Query1.Close;

dm.Query1.SQL.Clear;

dm.Query1.SQL.add('select A_composition,A_surname,A_math,A_physic from "abiturients.db" order by A_composition desc');

dm.Query1.Open;

end;

except

ShowMessage('Не получилось выполнить SQL запрос!');

end;

end;

 

procedure Ta_f.Label3Click(Sender: TObject);

begin

try

dm.Query1.Close;

dm.Query1.SQL.Clear;

dm.Query1.SQL.Add(Edit2.Text);

dm.Query1.Open;

except

ShowMessage('Не получилось выполнить SQL запрос!');

end;

end;

 

procedure Ta_f.Label6Click(Sender: TObject);

begin

a_r_f.Query1.Active:=False;

a_r_f.Query1.Active:=True;

a_r_f.report1.Preview;

end;

 

procedure Ta_f.Label8Click(Sender: TObject);

begin

if dm.Table1.Modified

then

dm.Table1.Post;

if dm.Table2.Modified

then

dm.Table2.Post;

Close;

end;

 

procedure Ta_f.Label9Click(Sender: TObject);

begin

a_r2_f.Query1.Active:=False;

a_r2_f.Query1.Active:=True;

a_r2_f.QuickRep1.Preview;

end;

 

procedure Ta_f.Button1Click(Sender: TObject);

begin

try

dm.Query1.Close;

dm.Query1.SQL.Clear;

dm.Query1.SQL.Add('select s.s_code, count (a.a_id) total from abiturients a, specialities s where a.a_s_id=s.s_id group by s.s_id,s_code');

dm.Query1.Open;

except

ShowMessage('Не получилось выполнить SQL запрос!');

end;

end;

 

procedure Ta_f.Label7Click(Sender: TObject);

begin

AboutBox.ShowModal;

end;

 

procedure Ta_f.FormPaint(Sender: TObject);

begin

dm.Table2.MasterSource:=dm.DataSource1;

dm.Table2.MasterFields:='S_id';

dm.Table2.IndexName:='a_index';

end;

 

end.

 

A_about.pas

unit a_about;

 

interface

 

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls;

 

type

TAboutBox = class(TForm)

Panel1: TPanel;

ProgramIcon: TImage;

ProductName: TLabel;

Version: TLabel;

Copyright: TLabel;

Comments: TLabel;

OKButton: TButton;

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

AboutBox: TAboutBox;

 

implementation

 

{$R *.DFM}

 

end.

 

A_r.pas

unit a_r;

 

interface

 

uses

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

ExtCtrls, QuickRpt, Qrctrls, Db, DBTables, TeEngine, Series, TeeProcs,

Chart, DBChart, QrTee;

 

type

Ta_r_f = class(TForm)

report1: TQuickRep;

Table1: TTable;

DataSource1: TDataSource;

DataSource2: TDataSource;

Table2: TTable;

DetailBand1: TQRBand;

QRSubDetail1: TQRSubDetail;

QRLabel5: TQRLabel;

TitleBand1: TQRBand;

QRLabel10: TQRLabel;

ColumnHeaderBand1: TQRBand;

QRGroup1: TQRGroup;

QRLabel1: TQRLabel;

QRLabel2: TQRLabel;

QRLabel3: TQRLabel;

QRLabel11: TQRLabel;

QRLabel12: TQRLabel;

QRShape2: TQRShape;

QRDBText4: TQRDBText;

QRDBText5: TQRDBText;

QRDBText6: TQRDBText;

QRDBText7: TQRDBText;

QRExpr1: TQRExpr;

QRLabel4: TQRLabel;

QRDBText1: TQRDBText;

QRBand1: TQRBand;

QRExpr2: TQRExpr;

QRLabel6: TQRLabel;

Query1: TQuery;

DataSource3: TDataSource;

QRChart1: TQRChart;

QRDBChart1: TQRDBChart;

Series1: TPieSeries;

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

a_r_f: Ta_r_f;

 

implementation

 

uses dm_u;

 

{$R *.DFM}

 

procedure Ta_r_f.FormCreate(Sender: TObject);

var

DBPath: String; {путь к базе данных}

begin

if Table1.Active=true

then

Table1.Active:=false;

if Table2.Active=true

then

Table2.Active:=false;

if Query1.Active=True

then

Query1.Active:=False;

DBPath:=ExtractFilePath(Application.ExeName)+'db'; //определение пути к БД

Query1.DatabaseName:=DBPath;

Table1.DatabaseName:=DBPath;

Table1.Open;

Table2.DatabaseName:=DBPath;

Table2.Open;

Query1.Active:=True;

end;

 

end.

 

A_r2.pas

unit a_r2;

 

interface

 

uses

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

Db, DBTables, ExtCtrls, QuickRpt, Qrctrls, TeEngine, Series, TeeProcs,

Chart, DBChart, QrTee;

 

type

Ta_r2_f = class(TForm)

QuickRep1: TQuickRep;

DataSource1: TDataSource;

Query1: TQuery;

QRBand1: TQRBand;

QRLabel1: TQRLabel;

QRBand2: TQRBand;

QRGroup1: TQRGroup;

QRLabel2: TQRLabel;

QRLabel3: TQRLabel;

QRLabel4: TQRLabel;

QRDBText1: TQRDBText;

QRBand3: TQRBand;

QRLabel5: TQRLabel;

QRDBText4: TQRDBText;

QRShape1: TQRShape;

QRDBText2: TQRDBText;

QRDBText3: TQRDBText;

QRBand4: TQRBand;

QRExpr1: TQRExpr;

QRChart1: TQRChart;

QRDBChart1: TQRDBChart;

Series1: TPieSeries;

procedure QuickRep1StartPage(Sender: TCustomQuickRep);

procedure FormCreate(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

a_r2_f: Ta_r2_f;

 

implementation

 

{$R *.DFM}

 

procedure Ta_r2_f.QuickRep1StartPage(Sender: TCustomQuickRep);

begin

QRDBChart1.CheckDatasource(Series1);

end;

 

procedure Ta_r2_f.FormCreate(Sender: TObject);

var

DBPath: String; {путь к базе данных}

begin

if Query1.Active=True

then

Query1.Active:=False;

DBPath:=ExtractFilePath(Application.ExeName)+'db'; //определение пути к БД

Query1.DatabaseName:=DBPath;

end;

 

end.

 

 

Dm_u.pas

unit dm_u;

 

interface

 

uses

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

Db, DBTables;

 

type

Tdm = class(TDataModule)

Query1: TQuery;

DataSource3: TDataSource;

Table2: TTable;

Table2A_id: TAutoIncField;

Table2A_surname: TStringField;

Table2A_math: TSmallintField;

Table2A_physic: TSmallintField;

Table2A_composition: TSmallintField;

Table2A_s_id: TSmallintField;

Table2sum: TIntegerField;

DataSource2: TDataSource;

Table1: TTable;

DataSource1: TDataSource;

db: TDatabase;

procedure Table2CalcFields(DataSet: TDataSet);

procedure Table2A_mathValidate(Sender: TField);

procedure Table2A_physicValidate(Sender: TField);

procedure Table2A_compositionValidate(Sender: TField);

procedure DataModuleCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

dm: Tdm;

 

implementation

 

{$R *.DFM}

 

procedure Tdm.Table2CalcFields(DataSet: TDataSet);

begin

dm.Table2sum.Value:=dm.Table2A_math.Value+dm.Table2A_physic.Value+dm.Table2A_composition.Value;

end;

 

procedure Tdm.Table2A_mathValidate(Sender: TField);

begin

if (dm.Table2A_math.Value<2) or (dm.Table2A_math.Value>5)

then

begin

ShowMessage('Оценка допустима только от 2 до 5!');

Abort;

end;

end;

 

procedure Tdm.Table2A_physicValidate(Sender: TField);

begin

if (dm.Table2A_physic.Value<2) or (dm.Table2A_physic.Value>5)

then

begin

ShowMessage('Оценка допустима только от 2 до 5!');

Abort;

end;

end;

 

procedure Tdm.Table2A_compositionValidate(Sender: TField);

begin

if (dm.Table2A_composition.Value<2) or (dm.Table2A_composition.Value>5)

then

begin

ShowMessage('Оценка допустима только от 2 до 5!');

Abort;

end;

end;

 

procedure Tdm.DataModuleCreate(Sender: TObject);

var

DBPath: String; {путь к базе данных}

begin

with dm do

begin

if table1.Active=True

then

table1.active:=false;

if table2.active=true

then

table2.active:=false;

end;

DBPath:=ExtractFilePath(Application.ExeName)+'db'; //определение пути к БД

DM.Table1.DatabaseName:=DBPath; {указать базу}

DM.Table1.Open; {открыть таблицу}

DM.Table2.DatabaseName:=DBPath;

DM.Table2.Open;

Query1.DatabaseName:=DBPath;

end;

 

end.

 


Приложение Г

Примеры экранных форм диаграмм и отчетов


Рисунок Г.1 – Количество абитуриентов по специальностям – отчет и диаграмма

 

Рисунок Г.2 – Сортировка по сумме баллов – отчет и диаграмма

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-01-14 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: