3.1 Этапы проектирования баз данных
Этапы проектирования и создания базы данных определяются следующей последовательностью:
- построение информационно-логической модели данных предметной области;
- определение логической структуры реляционной базы данных;
- конструирование таблиц базы данных;
- создание схемы данных;
- ввод данных в таблицы (создание записей);
- разработка необходимых форм, запросов, макросов, модулей, отчетов;
- разработка пользовательского интерфейса.
В процессе разработки модели данных необходимо выделить информационные объекты, соответствующие требованиям нормализации данных, и определить связи между ними. Эта модель позволяет создать реляционную базу данных без дублирования, в которой обеспечивается однократный ввод данных при первоначальной загрузке и корректировках, а также целостность данных при внесении изменений.[2]
При разработке модели данных могут использоваться два подхода. В первом подходе сначала определяются основные задачи, для решения которых строится база, выявляются потребности задач в данных и соответственно определяются состав и структура информационных объектов. При втором подходе сразу устанавливаются типовые объекты предметной области. Наиболее рационально сочетание обоих подходов. Это связано с тем, что на начальном этапе, как правило, нет исчерпывающих сведений обо всех задачах. Использование такой технологии тем более оправдано, что гибкие средства создания реляционных баз данных позволяют на любом этапе разработки внести изменения в базу данных и модифицировать ее структуру без ущерба для введенных ранее данных.[2]
Процесс выделения информационных объектов предметной области, отвечающих требованиям нормализации, может производиться на основе интуитивного или формального подхода. Теоретические основы формального подхода были разработаны и полно изложены в монографиях по организации баз данных известного американского ученого Дж. Мартина.
При интуитивном подходе легко могут быть выявлены информационные объекты, соответствующие реальным объектам. Однако получаемая при этом информационно-логическая модель, как правило, требует дальнейших преобразований, в частности преобразования многозначных связей между объектами. При таком подходе возможны существенные ошибки, если отсутствует достаточный опыт. Последующая проверка выполнения требований нормализации обычно показывает необходимость уточнения информационных объектов.
Рассмотрим формальные правила, которые могут быть использованы для выделения информационных объектов:
- на основе описания предметной области выявить документы и их атрибуты, подлежащие хранению в базе данных;
-определить функциональные зависимости между атрибутами;
- выбрать все зависимые атрибуты и указать для каждого все его ключевые атрибуты, т. е. те, от которых он зависит;
- сгруппировать атрибуты, одинаково зависимые от ключевых атрибутов. Полученные группы зависимых атрибутов вместе с их ключевыми атрибутами образуют информационные объекты[2].
При определении логической структуры реляционной базы данных па основе модели каждый информационный объем адекватно отображается реляционной таблицей, а связи между таблицами соответствуют связям между информационными объектами.
В процессе создания сначала конструируются таблицы базы данных, соответствующие информационным объектам построенной модели данных. Далее может создаваться схема данных, в которой фиксируются существующие логические связи между таблицами. Эти связи соответствуют связям информационных объектов. В схеме данных могут быть заданы параметры поддержания целостности базы данных, если модель данных была разработана в соответствии с требованиями нормализации. Целостность данных означает, что в БД установлены и корректно поддерживаются взаимосвязи между записями разных таблиц при загрузке, добавлении и удалении записей в связанных таблицах, а также при изменении значений ключевых полей.[2]
После формирования схемы данных осуществляется ввод непротиворечивых данных из документов предметной области.
На основе созданной базы данных формируются необходимые запросы, формы, макросы, модули, отчеты, производящие требуемую обработку данных базы и их представление.
С помощью встроенных средств и инструментов базы данных создается пользовательский интерфейс, позволяющий управлять процессами ввода, хранения, обработки, обновления и представления информации базы данных.[2]
4 ЭТАПЫ РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА
Данная программа создана для учета успеваемости студентов.
Для работы с программой необходимо нужные группы или списки студентов копировать из имеющегося списка, в электронную таблицу «spisok.xls». Списки копируются однажды, после чего могут удаляться напрямую из базы данных «poseshaemost.mdb». После копирования списков или групп необходимо принять данные с помощью кнопки «Сервис - принять данные», в появившемся окне нажать кнопку «Принять данные». Для ввода специальности для выбранной группы нажать на кнопку «справочники- специальности», в появившемся окне ввести группу и код специальности, списки копируются однажды, после чего могут удаляться напрямую из базы данных «poseshaemost.mdb». Для добавления дисциплины для этой группы необходимо нажать на кнопку «справочники- дисциплины», в появившемся окне ввести дисциплины. Дисциплины копируются однажды, после чего могут удаляться напрямую из базы данных «poseshaemost.mdb».
Для ввода оценок нужно нажать на кнопку «Данные – Разноска», где выбирается месяц и год обучения, а также дисциплина, специальность и группа. После ввода данных в эти строки следует «Добавить данные по дисциплине», на экране выведется группа, фамилия имя и отчество студентов, а также пустая графа оценок по выбранной дисциплине, которую необходимо заполнить. Корректировка данных производиться при помощи команды «Данные - корректировка», где корректируются месяц и год обучения, а также дисциплина, специальность и группа. В графе отчеты можно подвести итоги по успеванию и качеству знаний по БПЭК. Подвести итоги можно как по группе, так и по специальности и по колледжу в целом за определенный месяц и год обучения. После нажатия кнопки «Вычислить». Выведется успеваемость и качество. Также в графе подведение итогов можно посмотреть списки студентов неуспевающих (у которых есть хотя бы одна оценка «2»), а также успевающих на отлично (средний бал успеваемости которых «5»). После нажатия кнопки «Вывести», выведется список в электронной таблице Excel, неуспевающих студентов, либо успевающих на отлично. В графе «Отчет» за введенный месяц после нажатия кнопки «Пересчитать итоги» и «Отчет» выведется группа, месяц и год, а также количество студентов и процентное соотношение успеваемости общей и качество в электронной таблице Excel.
unit Unit12;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, DB, ADODB;
type
TForm12 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
ADOConnection1: TADOConnection;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
procedure N9Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form12: TForm12;
implementation
uses Unit13, Unit15, Unit14, Unit16, Unit17, Unit18;
{$R *.dfm}
procedure TForm12.N9Click(Sender: TObject);
begin
Form13.Show;
end;
procedure TForm12.N11Click(Sender: TObject);
begin
Form15.Show;
end;
procedure TForm12.N12Click(Sender: TObject);
begin
Form14.Show;
end;
procedure TForm12.FormCreate(Sender: TObject);
begin
//Form16.Show;
end;
procedure TForm12.N2Click(Sender: TObject);
begin
Form16.Show;
end;
procedure TForm12.N3Click(Sender: TObject);
begin
Form17.show;
end;
procedure TForm12.N4Click(Sender: TObject);
begin
Form18.show;
end;
end.
unit Unit13;
interfa
ceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Unit12, Forms,
Dialogs, ExcelXP, OleServer, Grids, DBGrids, StdCtrls, DB, ADODB;
type
TForm13 = class(TForm)
Label1: TLabel;
DBGrid1: TDBGrid;
ExcelWorkbook1: TExcelWorkbook;
ExcelApplication1: TExcelApplication;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
Button1: TButton;
ADOQuery2: TADOQuery;
ADOQuery1gruppa: TWideStringField;
ADOQuery1fio: TWideStringField;
ADOQuery1Datapr: TWideStringField;
ADOQuery1Prim: TWideStringField;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form13: TForm13;
implementation
{$R *.dfm}
procedure TForm13.Button1Click(Sender: TObject);
var n: OleVariant;
i:integer;
//S:String;
begin
ADOQuery2.ExecSQL;
AdoQuery1.Open;
n:='d:\55\spisok.xls';
ExcelApplication1.Workbooks.Add(n,0);
Excelworkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
i:=2;
ADOQUERY1.Insert;
ExcelApplication1.Visible[0]:=False;
While i<2000 do
begin;
ADOQuery1.FieldByName('gruppa').AsString:=ExcelApplication1.Cells.Item[i,1].Value;
ADOQuery1.FieldByName('Fio').AsString:=ExcelApplication1.Cells.Item[i,2].Value;
ADOQuery1.FieldByName('Datapr').AsString:=ExcelApplication1.Cells.Item[i,3].Value;
ADOQuery1.FieldByName('Prim').AsString:=ExcelApplication1.Cells.Item[i,4].Value;
If ADOQuery1.FieldByName('gruppa').AsString='' then
begin
ADOQUERY1.Delete;
i:=2001;
end;
ADOQUERY1.Insert;
i:=i+1;
end;
ADOQuery1.Open;
Showmessage('Прием данных выполнен');
end;
end.
unit Unit14;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,Unit12, Controls, Forms,
Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids;
type
TForm14 = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
ADOQuery1Disziplina: TWideStringField;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form14: TForm14;
implementation
{$R *.dfm}
procedure TForm14.FormCreate(Sender: TObject);
begin
ADOQuery1.Active:=true;
end;
end.
unit Unit15;
interface
uses
Windows, Messages, SysUtils, Variants,Unit12,Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids;
type
TForm15 = class(TForm)
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DataSource1: TDataSource;
ADOQuery1Grupa: TWideStringField;
ADOQuery1Spez: TWideStringField;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form15: TForm15;
implementation
{$R *.dfm}
procedure TForm15.FormCreate(Sender: TObject);
begin
ADOQuery1.Active:=true;
end;
end.
unit Unit16;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,Unit12, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids;
type
TForm16 = class(TForm)
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DataSource1: TDataSource;
ADOQuery1stud: TWideStringField;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
ComboBox5: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Dobav: TADOQuery;
ADOQuery1ozenka: TIntegerField;
ADOQuery1koddis: TWideStringField;
ADOQuery2: TADOQuery;
ADOTable1: TADOTable;
ADOTable2: TADOTable;
ADOTable1DSDesigner: TAutoIncField;
ADOTable1Grupa: TWideStringField;
ADOTable1Disziplina: TWideStringField;
procedure Button1Click(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form16: TForm16;
implementation
{$R *.dfm}
procedure TForm16.Button1Click(Sender: TObject);
begin
Dobav.SQL.Clear;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:='delete from ozenka where(ozenka.kodspez = "'+Combobox4.Text+'"and ozenka.koddis = "'+Combobox3.Text+'"and ozenka.mes = "'+Combobox1.Text+'"and ozenka.god = "'+Combobox2.Text+'" and ozenka.gruppa="'+Combobox5.Text+'")';
ADOQuery2.ExecSQL;
Dobav.SQL.Add('Insert Into Ozenka ( gruppa,stud)');
Dobav.SQL.Add('Select gruppa,fio');
Dobav.SQL.Add(' From stud where (gruppa="'+Combobox5.text+'")');
//ShowMessage(Dobav.SQL.Text); //Dobav.SQL.Add(''
Dobav.ExecSQL;
Dobav.SQL.Clear;
Dobav.SQL.Add('UPDATE ozenka SET ozenka.kodspez = "'+Combobox4.Text+'", ozenka.koddis = "'+Combobox3.Text+'", ozenka.mes = "'+Combobox1.Text+'", ozenka.god = "'+Combobox2.Text+'" WHERE (((ozenka.gruppa)="'+Combobox5.Text+'")and(ozenka.koddis is null ));');
Dobav.ExecSQL;
ADOQUERY1.SQL.Clear;
ADOQUERY1.SQL.Add('Select* from ozenka where(ozenka.kodspez = "'+Combobox4.Text+'"and ozenka.koddis = "'+Combobox3.Text+'"and ozenka.mes = "'+Combobox1.Text+'"and ozenka.god = "'+Combobox2.Text+'" and ozenka.gruppa="'+Combobox5.Text+'")');
//ShowMessage(ADOQUERY1.SQL.Text);
ADOQUERY1.Active:=True;
end;
procedure TForm16.ComboBox4Change(Sender: TObject);
begin
ADOTable2.Open;
ADOTable2.First;
ComboBox5.Items.Clear;
While not ADOTable2.Eof do
begin
if ADOTable2.Fieldbyname('Spez').AsString=ComboBox4.Text Then
ComboBox5.Items.Add(ADOTable2.fieldbyname('grupa').AsString);
ADOTable2.Next;
end;
ADOTable2.Close;
ComboBox5.Sorted:=True;
end;
procedure TForm16.FormCreate(Sender: TObject);
begin
ADOTable1.Open;
ADOTable1.First;
ComboBox3.Items.Clear;
While not ADOTable1.Eof do
begin
ComboBox3.Items.Add(ADOTable1.fieldbyname('disziplina').AsString);
//ShowMessage(ADOTable1.fieldbyname('disziplina').AsString);
ADOTable1.Next;
end;
ADOTable1.Close;
ComboBox3.Sorted:=True;
end;
end.
unit Unit17;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids;
type
TForm17 = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
ComboBox5: TComboBox;
Button1: TButton;
ADOQuery1: TADOQuery;
ADOQuery1stud: TWideStringField;
DataSource1: TDataSource;
ADOQuery1ozenka: TIntegerField;
ADOQuery1koddis: TWideStringField;
ComboBox4: TComboBox;
ADOTable1: TADOTable;
ADOTable2: TADOTable;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form17: TForm17;
implementation
{$R *.dfm}
procedure TForm17.Button1Click(Sender: TObject);
begin
ADOQUERY1.SQL.Clear;
ADOQUERY1.SQL.Add('Select* from ozenka where(ozenka.kodspez = "'+Combobox4.Text+'"and ozenka.koddis = "'+Combobox3.Text+'"and ozenka.mes = "'+Combobox1.Text+'"and ozenka.god = "'+Combobox2.Text+'" and ozenka.gruppa="'+Combobox5.Text+'")');
//ShowMessage(ADOQUERY1.SQL.Text);
ADOQUERY1.Active:=True;
end;
procedure TForm17.FormCreate(Sender: TObject);
begin
ADOTable1.Open;
ADOTable1.First;
ComboBox3.Items.Clear;
While not ADOTable1.Eof do
begin
ComboBox3.Items.Add(ADOTable1.fieldbyname('disziplina').AsString);
//ShowMessage(ADOTable1.fieldbyname('disziplina').AsString);
ADOTable1.Next;
end;
ADOTable1.Close;
ComboBox3.Sorted:=True;
end;
procedure TForm17.ComboBox4Change(Sender: TObject);
begin
ADOTable2.Open;
ADOTable2.First;
ComboBox5.Items.Clear;
While not ADOTable2.Eof do
begin
if ADOTable2.Fieldbyname('Spez').AsString=ComboBox4.Text Then
ComboBox5.Items.Add(ADOTable2.fieldbyname('grupa').AsString);
ADOTable2.Next;
end;
ADOTable2.Close;
ComboBox5.Sorted:=True;
end;
end.
unit Unit18;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Buttons, ExtCtrls, ComCtrls, ExcelXP,
OleServer, Grids, DBGrids;
type
TForm18 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
RadioGroup1: TRadioGroup;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Label4: TLabel;
Label5: TLabel;
ADOQuery1: TADOQuery;
Edit1: TEdit;
Edit2: TEdit;
Label3: TLabel;
Label6: TLabel;
Label7: TLabel;
ComboBox3: TComboBox;
ComboBox6: TComboBox;
Label8: TLabel;
Label9: TLabel;
RadioGroup3: TRadioGroup;
ExcelWorkbook1: TExcelWorkbook;
ExcelApplication1: TExcelApplication;
BitBtn2: TBitBtn;
ADOQuery2: TADOQuery;
ComboBox7: TComboBox;
ComboBox8: TComboBox;
Label10: TLabel;
Label11: TLabel;
BitBtn3: TBitBtn;
ADOQuery3: TADOQuery;
ADOQuery4: TADOQuery;
ADOQuery5: TADOQuery;
ADOTable2: TADOTable;
ComboBox4: TComboBox;
ComboBox5: TComboBox;
DataSource1: TDataSource;
ADOQuery6: TADOQuery;
ADOTable6: TADOTable;
Button1: TButton;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
// procedure ComboBox4Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form18: TForm18;
implementation
{$R *.dfm}
procedure TForm18.BitBtn1Click(Sender: TObject);
var
k1:integer;
k2:integer;
k3:integer;
k4,k:double;
begin
//по группе
If radiogroup1.ItemIndex=0
then begin
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');
AdoQuery1.Active:=True;
k1:=AdoQuery1.fieldbyname('Count1').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');
AdoQuery1.Active:=True;
k2:=AdoQuery1.fieldbyname('Count2').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');
AdoQuery1.Active:=True;
k3:=AdoQuery1.fieldbyname('Count3').AsInteger;
k4:=Round((k3/k2*100)*100)/100;
k:=Round((k1/k2*100)*100)/100;
Edit1.Text:=FloatToStr(k4);
Edit2.Text:=FloatToStr(k);
end;
//по специальности
If radiogroup1.ItemIndex=1
then begin
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');
AdoQuery1.Active:=True;
k1:=AdoQuery1.fieldbyname('Count1').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');
AdoQuery1.Active:=True;
k2:=AdoQuery1.fieldbyname('Count2').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');
AdoQuery1.Active:=True;
k3:=AdoQuery1.fieldbyname('Count3').AsInteger;
k4:=Round((k3/k2*100)*100)/100;
k:=Round((k1/k2*100)*100)/100;
Edit1.Text:=FloatToStr(k4);
Edit2.Text:=FloatToStr(k);
end;
//по колледжу
If radiogroup1.ItemIndex=2
then begin
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');
AdoQuery1.Active:=True;
k1:=AdoQuery1.fieldbyname('Count1').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');
AdoQuery1.Active:=True;
k2:=AdoQuery1.fieldbyname('Count2').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');
AdoQuery1.Active:=True;
k3:=AdoQuery1.fieldbyname('Count3').AsInteger;
k4:=Round((k3/k2*100)*100)/100;
k:=Round((k1/k2*100)*100)/100;
Edit1.Text:=FloatToStr(k4);
Edit2.Text:=FloatToStr(k);
end;
end;
procedure TForm18.BitBtn2Click(Sender: TObject);
var n: OleVariant;
i:integer;
//S:String;
begin
if radiogroup3.ItemIndex=0 then begin
AdoQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT ozenka.ozenka, ozenka.stud, ozenka.gruppa, ozenka.koddis, ozenka.kodspez, ozenka.mes, ozenka.god FROM ozenka WHERE (((ozenka.ozenka)=2))');
ADOQuery1.SQL.Add('and mes="'+ combobox3.Text+'" and god="'+combobox6.Text+'"');
//Showmessage(adoquery1.SQL.Text);
ADOQuery1.Open;
ADOQuery1.First;
n:='d:\55\spisok55.xls';
ExcelApplication1.Workbooks.Add(n,0);
Excelworkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
i:=3;
ExcelApplication1.Cells.Item[1,1].Value:='Cписок неуспевающих';
ExcelApplication1.Cells.Item[1,2].Value:=Combobox3.Text;
ExcelApplication1.Cells.Item[1,3].Value:=Combobox6.Text;
ExcelApplication1.Visible[0]:=true;
While not ADOQuery1.Eof do
begin;
ExcelApplication1.Cells.Item[i,1].Value:=ADOQuery1.FieldByName('Stud').AsString;
ExcelApplication1.Cells.Item[i,2].Value:=ADOQuery1.FieldByName('koddis').AsString;
ExcelApplication1.Cells.Item[i,3].Value:=ADOQuery1.FieldByName('ozenka').AsString;
ExcelApplication1.Cells.Item[i,4].Value:=ADOQuery1.FieldByName('gruppa').AsString;
ADOQUERY1.Next;
//ADOQUERY1.Post;
i:=i+1;
end;
end;
if radiogroup3.ItemIndex=1 then begin
AdoQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT ozenka.stud, Avg(ozenka.ozenka) AS [Avg-ozenka], ozenka.mes,ozenka.gruppa, ozenka.god FROM ozenka');
ADOQuery1.SQL.Add('GROUP BY ozenka.stud, ozenka.mes,ozenka.gruppa, ozenka.god');
ADOQuery1.SQL.Add('HAVING (((Avg(ozenka.ozenka))=5));');
//ADOQuery1.SQL.Add('and mes="'+ combobox3.Text+'" and god="'+combobox6.Text+'"');
ADOQuery1.Open;
ADOQuery1.First;
n:='d:\55\spisok55.xls';
ExcelApplication1.Workbooks.Add(n,0);
Excelworkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
i:=3;
ExcelApplication1.Cells.Item[1,1].Value:='Cписок успевающих на отлично';
ExcelApplication1.Cells.Item[1,2].Value:=Combobox3.Text;
ExcelApplication1.Cells.Item[1,3].Value:=Combobox6.Text;
ExcelApplication1.Visible[0]:=true;
While not ADOQuery1.Eof do
begin;
ExcelApplication1.Cells.Item[i,1].Value:=ADOQuery1.FieldByName('Stud').AsString;
ExcelApplication1.Cells.Item[i,2].Value:='все';
ExcelApplication1.Cells.Item[i,3].Value:='5';
ExcelApplication1.Cells.Item[i,4].Value:=ADOQuery1.FieldByName('gruppa').AsString;
ADOQUERY1.Next;
//ADOQUERY1.Post;
i:=i+1;
end;
end;
end;
procedure TForm18.BitBtn3Click(Sender: TObject);
var
n: OleVariant;
i:integer;
k1:integer;
k2:integer;
k3:integer;
k4,k:double;
begin
ADOQuery4.SQL.Text:='drop table ots1';
ADOQuery4.ExecSQL;
//ADoQuery.Active:=false;
ADoQuery2.Active:=true;
ADOQuery2.Edit;
ADoQuery2.First;
ADoQuery5.Active:=true;
ADoQuery5.First;
ADOQuery2.insert;
ADoQuery3.SQL.Text:='Select* from spez';
ADOQuery3.Active:=true;
While not ADoQuery3.Eof do
begin
ADOQuery2.FieldByName('Gruppa').AsString:=ADOQuery3.FieldByName('Grupa').AsString;
ADOQuery2.FieldByName('Spez').AsString:=ADOQuery3.FieldByName('Spez').AsString;
ADOQuery2.FieldByName('kolledg').AsString:='koledg';
Combobox1.Text:=Combobox7.Text;
Combobox2.Text:=Combobox8.Text;
Combobox5.Text:=ADOQuery2.FieldByName('Gruppa').AsString;
Combobox4.Text:=ADOQuery2.FieldByName('Spez').AsString;
//Combobox1.Text:=Combobox7.Text;
//Combobox2.Text:=Combobox8.Text;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');
AdoQuery1.Active:=True;
k1:=AdoQuery1.fieldbyname('Count1').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');
AdoQuery1.Active:=True;
k2:=AdoQuery1.fieldbyname('Count2').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god, ozenka.gruppa ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.gruppa)="'+Combobox5.Text+'"))');
AdoQuery1.Active:=True;
k3:=AdoQuery1.fieldbyname('Count3').AsInteger;
//ShowMessage(FloatToStr(k4));
// ShowMessage(FloatToStr(k));
IF K2>0 then begin
k4:=Round((k3/k2*100));
k:=Round((k1/k2*100));
//Edit1.Text:=FloatToStr(k4);
//Edit2.Text:=FloatToStr(k);
ADOQuery2.FieldByName('usp').AsString:=FloatToStr(k4);
ADOQuery2.FieldByName('kas').AsString:=FloatToStr(k);
ADOQuery2.FieldByName('kol').AsString:=FloatToStr(k2);
end;
ADOQuery2.Insert;
ADOQuery3.Next;
end;
//по специальностям
ADoQuery2.Active:=true;
ADOQuery2.Edit;
ADoQuery2.First;
ADoQuery3.SQL.Text:='Select spez from spez';
ADoQuery3.Active:=true;
ADoQuery3.First;
ADOQuery2.insert;
While not ADoQuery3.Eof do
begin
//ADOQuery2.FieldByName('Gruppa').AsString:=ADOQuery3.FieldByName('Grupa').AsString;
ADOQuery2.FieldByName('Spez').AsString:=ADOQuery3.FieldByName('Spez').AsString;
ADOQuery2.FieldByName('kolledg').AsString:='koledg';
Combobox1.Text:=Combobox7.Text;
Combobox2.Text:=Combobox8.Text;
//Combobox5.Text:=ADOQuery2.FieldByName('Gruppa').AsString;
Combobox4.Text:=ADOQuery2.FieldByName('Spez').AsString;
//Combobox1.Text:=Combobox7.Text;
//Combobox2.Text:=Combobox8.Text;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');
AdoQuery1.Active:=True;
k1:=AdoQuery1.fieldbyname('Count1').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');
AdoQuery1.Active:=True;
k2:=AdoQuery1.fieldbyname('Count2').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god, ozenka.kodspez ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'") AND ((ozenka.kodspez)="'+Combobox4.Text+'"))');
AdoQuery1.Active:=True;
k3:=AdoQuery1.fieldbyname('Count3').AsInteger;
//ShowMessage(FloatToStr(k4));
//ShowMessage(FloatToStr(k));
IF K2>0 then begin
k4:=Round((k3/k2*100));
k:=Round((k1/k2*100));
//Edit1.Text:=FloatToStr(k4);
//Edit2.Text:=FloatToStr(k);
ADOQuery2.FieldByName('usp').AsString:=FloatToStr(k4);
ADOQuery2.FieldByName('kas').AsString:=FloatToStr(k);
ADOQuery2.FieldByName('kol').AsString:=FloatToStr(k2);
end;
ADOQuery2.Insert;
ADOQuery3.Next;
end;
//по колледжу
ADOQuery2.insert;
//ADOQuery2.FieldByName('Gruppa').AsString:=ADOQuery3.FieldByName('Grupa').AsString;
//ADOQuery2.FieldByName('Spez').AsString:=ADOQuery3.FieldByName('Spez').AsString;
ADOQuery2.FieldByName('kolledg').AsString:='koledg';
Combobox1.Text:=Combobox7.Text;
Combobox2.Text:=Combobox8.Text;
//Combobox5.Text:=ADOQuery2.FieldByName('Gruppa').AsString;
Combobox4.Text:=ADOQuery2.FieldByName('Spez').AsString;
//Combobox1.Text:=Combobox7.Text;
//Combobox2.Text:=Combobox8.Text;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count1] FROM ozenka where (((ozenka.ozenka)>3))GROUP BY ozenka.mes, ozenka.god');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');
AdoQuery1.Active:=True;
k1:=AdoQuery1.fieldbyname('Count1').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count2] FROM ozenka where (((ozenka.ozenka)>0))GROUP BY ozenka.mes, ozenka.god ');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');
AdoQuery1.Active:=True;
k2:=AdoQuery1.fieldbyname('Count2').AsInteger;
ADOQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT Count(ozenka.stud) AS [Count3] FROM ozenka where (((ozenka.ozenka)>2))GROUP BY ozenka.mes, ozenka.god');
AdoQuery1.SQL.Add('HAVING (((ozenka.mes)="'+Combobox1.Text+'") AND ((ozenka.god)="'+Combobox2.Text+'"))');
AdoQuery1.Active:=True;
k3:=AdoQuery1.fieldbyname('Count3').AsInteger;
//ShowMessage(FloatToStr(k4));
//ShowMessage(FloatToStr(k));
IF K2>0 then begin
k4:=Round((k3/k2*100));
k:=Round((k1/k2*100));
//Edit1.Text:=FloatToStr(k4);
//Edit2.Text:=FloatToStr(k);
ADOQuery2.FieldByName('usp').AsString:=FloatToStr(k4);
ADOQuery2.FieldByName('kas').AsString:=FloatToStr(k);
ADOQuery2.FieldByName('kol').AsString:=FloatToStr(k2);
ADOQuery2.Post;
end;
//S:String;
begin
//if radiogroup3.ItemIndex=0 then begin
AdoQuery6.Close;
ADOQuery6.SQL.Clear;
ADOQuery6.SQL.Add('SELECT ots.kolledg, ots.spez, ots.gruppa, ots.kol, ots.usp, ots.kas into ots1 FROM ots GROUP BY ots.kolledg, ots.spez, ots.gruppa, ots.kol, ots.usp, ots.kas');
//ORDER BY ots.kolledg DESC , ots.spez DESC , ots.gruppa DESCSELECT ozenka.ozenka, ozenka.stud, ozenka.gruppa, ozenka.koddis, ozenka.kodspez, ozenka.mes, ozenka.god FROM ozenka WHERE (((ozenka.ozenka)=2))');
ADOQuery6.SQL.Add('ORDER BY ots.kolledg DESC , ots.spez DESC , ots.gruppa DESC');
//Showmessage(adoquery1.SQL.Text);
ADOQuery6.ExecSQL;
{ADOTable6.TableName:='ots1';
ADOTable6.Active:=true;
ADOTable6.Active:=false;
ADOTable6.Active:=true;
//ADOTable6.First;
n:='d:\55\usp.xls';
ExcelApplication1.Workbooks.Add(n,0);
Excelworkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
i:=10;
ExcelApplication1.Cells.Item[1,2].Value:=Combobox7.Text;
ExcelApplication1.Cells.Item[1,3].Value:=Combobox8.Text;
ADOTable6.First;
//
If ADOTable6.FieldByName('gruppa').AsString<>'' then
ExcelApplication1.Cells.Item[i,2].Value:=ADOTable6.FieldByName('gruppa').AsString
else
// If (ADOQuery6.FieldByName('Spez').AsString<>'') then
ExcelApplication1.Cells.Item[i,2].Value:='итого по специальности '+ADOTable6.FieldByName('Spez').AsString;
If (ADOTable6.FieldByName('Spez').AsString='') then
ExcelApplication1.Cells.Item[i,2].Value:='итого по колледжу ';//+ADOQuery1.FieldByName('Kolledg').AsString;
ExcelApplication1.Cells.Item[i,3].Value:=ADOTable6.FieldByName('kol').AsString;
ExcelApplication1.Cells.Item[i,4].Value:=ADOTable6.FieldByName('usp').AsString;
ExcelApplication1.Cells.Item[i,5].Value:=ADOTable6.FieldByName('kas').AsString;
//While not ADOTable6.Eof do
begin;
ShowMessage('fdgiiii');
k4:= ADOTable6.FieldByName('usp').AsFloat;
k:=ADOTable6.FieldByName('kas').AsFloat;
ShowMessage(FloatToStr(k4));
If ADOTable6.FieldByName('gruppa').AsString<>'' then
ExcelApplication1.Cells.Item[i,2].Value:=ADOTable6.FieldByName('gruppa').AsString
else
// If (ADOQuery6.FieldByName('Spez').AsString<>'') then
ExcelApplication1.Cells.Item[i,2].Value:='итого по специальности '+ADOTable6.FieldByName('Spez').AsString;
If (ADOTable6.FieldByName('Spez').AsString='') then
ExcelApplication1.Cells.Item[i,2].Value:='итого по колледжу ';//+ADOQuery1.FieldByName('Kolledg').AsString;
ExcelApplication1.Cells.Item[i,3].Value:=ADOTable6.FieldByName('kol').AsString;
ExcelApplication1.Cells.Item[i,4].Value:=k4;
ExcelApplication1.Cells.Item[i,5].Value:=k;
ADOTable6.Next;
//ADOQUERY1.Post;
i:=i+1;
end;
end;
//ExcelApplication1.Visible[0]:=true; }
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Text:='delete * from ots';
ADOQuery4.ExecSQL;
ADOQuery4.SQL.Text:='drop table ots1';
//ADOQuery4.ExecSQL;
//end;
end;
ShowMessage('Перерасчет данных успешно выполнен можно делать отчет!');
end;
procedure TForm18.Button1Click(Sender: TObject);
var
n:Olevariant;
i:Integer;
k1:integer;
k2:integer;
k3:integer;
k4,k:double;
begin
ADOTable6.TableName:='ots1';
ADOTable6.Active:=true;
ADOTable6.Active:=false;
ADOTable6.Active:=true;
//ADOTable6.First;
n:='d:\55\usp.xls';
ExcelApplication1.Workbooks.Add(n,0);
Excelworkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
i:=10;
ExcelApplication1.Cells.Item[1,2].Value:=Combobox7.Text;
ExcelApplication1.Cells.Item[1,3].Value:=Combobox8.Text;
ADOTable6.First;
// If ADOTable6.FieldByName('gruppa').AsString<>'' then
ExcelApplication1.Cells.Item[i,2].Value:=ADOTable6.FieldByName('gruppa').AsString
else
// If (ADOQuery6.FieldByName('Spez').AsString<>'') then
ExcelApplication1.Cells.Item[i,2].Value:='итого по специальности '+ADOTable6.FieldByName('Spez').AsString;
If (ADOTable6.FieldByName('Spez').AsString='') then
ExcelApplication1.Cells.Item[i,2].Value:='итого по колледжу ';//+ADOQuery1.FieldByName('Kolledg').AsString;
ExcelApplication1.Cells.Item[i,3].Value:=ADOTable6.FieldByName('kol').AsString;
ExcelApplication1.Cells.Item[i,6].Value:=ADOTable6.FieldByName('usp').AsString;
ExcelApplication1.Cells.Item[i,7].Value:=ADOTable6.FieldByName('kas').AsString;
//While not ADOTable6.Eof do
begin;
ShowMessage(ADOTable6.FieldByName('kas').AsString);
k4:= ADOTable6.FieldByName('usp').AsFloat;
k:=ADOTable6.FieldByName('kas').AsFloat;
//ShowMessage(FloatToStr(k4));
If ADOTable6.FieldByName('gruppa').AsString<>'' then
ExcelApplication1.Cells.Item[i,2].Value:=ADOTable6.FieldByName('gruppa').AsString
else
// If (ADOQuery6.FieldByName('Spez').AsString<>'') then
ExcelApplication1.Cells.Item[i,2].Value:='итого по специальности '+ADOTable6.FieldByName('Spez').AsString;
If (ADOTable6.FieldByName('Spez').AsString='') then
ExcelApplication1.Cells.Item[i,2].Value:='итого по колледжу ';//+ADOQuery1.FieldByName('Kolledg').AsString;
ExcelApplication1.Cells.Item[i,3].Value:=ADOTable6.FieldByName('kol').AsString;
ExcelApplication1.Cells.Item[i,4].Value:=ADOTable6.FieldByName('usp').AsString;
ExcelApplication1.Cells.Item[i,5].Value:=ADOTable6.FieldByName('kas').AsString; ADOTable6.Next;
//ADOQUERY1.Post;
i:=i+1;
end;
ExcelApplication1.Visible[0]:=true;
end;
procedure TForm18.ComboBox4Change(Sender: TObject);
begin
ADOTable2.Open;
ADOTable2.First;
ComboBox5.Items.Clear;
While not ADOTable2.Eof do
begin
if ADOTable2.Fieldbyname('Spez').AsString=ComboBox4.Text Then
ComboBox5.Items.Add(ADOTable2.fieldbyname('grupa').AsString);
ADOTable2.Next;
end;
ADOTable2.Close;
ComboBox5.Sorted:=True;
end;
end.
... обращений к реестру были проконтролированы при помощи Registry Monitor от Sysinternals Corp. 4.4 Описание программы Автоматизированная система для оценки уровня знаний студентов с применением технологии «Клиент-сервер» предназначена для проведения централизованных итоговых занятий по разным дисциплинам в виде интерактивного тестирования. Данный проект поддерживает совместимость с пакетом ...
... программирования, и в целом изменилось отношение к требованиям, гарантирующим более высокое качество. 1990-1999 гг. Следующее "решение" проблемы качества программного обеспечения появилось в 90-х годах под названием "совершенствование процесса разработки программ". Основой этого движения была теперь популярная и часто критикуемая модель Capability Maturity Model. Для краткости упростим ...
... характеристикой. Министерство образования Российской Федерации Регистрационный № 06-0613-ВР ГОСУДАРСТВЕННЫЙ ОБРАЗОВАТЕЛЬНЫЙ СТАНДАРТ СРЕДНЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ГОСУДАРСТВЕННЫЕ ТРЕБОВАНИЯк минимуму содержания и уровню подготовки выпускников по специальности 0613 Государственное и муниципальное управление (базовый уровень среднего профессионального образования) Квалификация - ...
... , несмотря на такое лидерство, еще рано говорить о том, что информационные системы прочно вошли жизнь современных управленцев. 2 АНАЛИЗ ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ УПРАВЛЕНИЯ ПРЕДПРИЯТИЕМ 2.1 Общая характеристика объекта исследования ОАО «Технический университет КубГТУ» был создан 9 октября 1992 года. Новые экономические условия требовали создания в Кубанском государственном ...
0 комментариев