Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Материалы индивидуального задания





Спроектировать вспомогательную систему формирования отчетов о по кадровому составу (по таблице информация о преподавателе, формировать распределение исследователей по возрасту)

 

Образец получившегося отчета:

Для распределения исследователей по возрасту используются следующие запросы:

select count(*) from teacher where now()-born<=29;

Данный запрос вычисляет количество преподавателей, возраст которых, меньше или равен 29 годам.

select count(*) from teacher where now()-born>29 and now()-born<=39;

Данный запрос вычисляет количество преподавателей, которые старше 29, но не старше 39 лет.

select count(*) from teacher where now()-born>39 and now()-born<=49;

Данный запрос вычисляет количество преподавателей, которые старше 39, но не старше 49 лет.

select count(*) from teacher where now()-born>49 and now()-born<=54;

Данный запрос вычисляет количество преподавателей, которые старше 49, но не старше 54 лет.

select count(*) from teacher where now()-born>54 and now()-born<=59;

Данный запрос вычисляет количество преподавателей, которые старше 54, но не старше 59 лет.

select count(*) from teacher where now()-born>59 and now()-born<=69;

Данный запрос вычисляет количество преподавателей, которые старше 59, но не старше 69 лет.

select count(*) from teacher where now()-born>=70;

Данный запрос вычисляет количество преподавателей, возраст которых, больше или равен 70 годам.

 

Для более удобного доступа к информации, на языке Object Pascal, была придумана программа, которая отправляет запрос в базу данных и полученные сведения описывает в таблице, пример которой был приведен выше.

unit Unit1;

 

{$mode objfpc}{$H+}

 

interface

 

uses

Classes, SysUtils, mysql50conn, sqldb, db, FileUtil, Forms, Controls,

Graphics, Dialogs, StdCtrls;

 

type

 

{ TForm1 }

 

TForm1 = class(TForm)

Button1: TButton;

Datasource1: TDatasource;

MySQL50Connection1: TMySQL50Connection;

SQLQueryWorker: TSQLQuery;

SQLTransaction1: TSQLTransaction;

procedure Button1Click(Sender: TObject);

procedure ConnectToBase();

procedure FormCreate(Sender: TObject);

procedure MySQL50Connection1AfterConnect(Sender: TObject);

function SQLCountTeachers(cond_degree,cond_gender:string;

ageMin,ageMax:integer):string;

function SqlOpen(sql:string):integer;

procedure WriteRow(s:string;bappend:boolean);

procedure Select_Teacher_On_Range(ageMin,ageMax:integer);

private

{ private declarations }

public

{ public declarations }

end;

const women='1';

doctors='1';

candidates='2';

filename='result.csv';

var

Form1: TForm1;

 

implementation

 

{$R *.lfm}

 

{ TForm1 }

function TForm1.SqlOpen(sql:string):integer;

begin

if SQLQueryWorker.Active then SQLQueryWorker.Close;

SQLQueryWorker.SQL.Clear;

 

SQLQueryWorker.SQL.Add(sql);

SQLQueryWorker.Open;

 

end;

 

function TForm1.SQLCountTeachers(cond_degree,cond_gender:string;

ageMin,ageMax:integer):string;

var cond,age:string;

begin

result:='';

age:='DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(born)), "%Y")+0';

cond:=' laid_off = false and '+age+'>= '+IntToStr(ageMin);

if ageMax>0 then begin

cond:=cond+' and '+age+' <= '+IntToStr(ageMax);

end;

if cond_degree<>'' then begin

cond:=cond+' and academic_degree = '+cond_degree;

end;

if cond_gender<>'' then begin

cond:=cond+' and gender = '+cond_gender;

end;

 

SqlOpen('Select count(*) '+

' from teacher '+

' where ' +cond+

' LIMIT 1'+

';');

WriteRow(SQLQueryWorker.SQL.Text,true);

if Datasource1.DataSet.IsEmpty then begin

exit;

end

else begin

Datasource1.DataSet.First;

with Datasource1.DataSet do begin

result:=FieldByName('count(*)').AsWideString;

end;

end;

 

end;

procedure TForm1.WriteRow(s:string;bappend:boolean);

var f:text;

begin

assignfile(f,filename);

if fileexists(filename) and bappend then begin

append(f);

end

else begin

Rewrite(f);

end;

WriteLn(f,s);

closefile(f)

end;

procedure TForm1.Select_Teacher_On_Range(ageMin,ageMax:integer);

var

total,total_women,doctors_common,

doctors_women,candidates_common,candidates_women,Row:string;

begin

total:=SQLCountTeachers('','',ageMin,ageMax);

total_women:=SQLCountTeachers('',women,ageMin,ageMax);

doctors_common:=SQLCountTeachers(doctors,'',ageMin,ageMax);

doctors_women:=SQLCountTeachers(doctors,women,ageMin,ageMax);

candidates_common:=SQLCountTeachers(candidates,'',ageMin,ageMax);

candidates_women:=SQLCountTeachers(candidates,women,ageMin,ageMax);

Row:='';

if ageMin>0 then Row:='от '+ intToStr(ageMin);

if ageMax>0 then Row:=Row+' до '+ intToStr(ageMax);

Row:=Row+';'+total+';'+total_women+';'+doctors_common+';'+

doctors_women+';'+candidates_common+';'+candidates_women;

WriteRow(Row,true);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

WriteRow(';всего;из них женщин;'+

'докторов;из них женщин;'+

'кандидатов; из них женщин',false);

Select_Teacher_On_Range(0,29);

Select_Teacher_On_Range(30,39);

Select_Teacher_On_Range(40,49);

Select_Teacher_On_Range(50,54);

Select_Teacher_On_Range(55,59);

Select_Teacher_On_Range(60,69);

Select_Teacher_On_Range(70,0);

end;

procedure TForm1.ConnectToBase();

begin

try

MySQL50Connection1.Connected:=true;

except

exit;

end;

SQLQueryWorker.sql.add(

'SET character_set_client='+#39+'utf8'+#39+

', character_set_connection='+#39+'utf8'+#39+

',character_set_results='+#39+'utf8'+#39+';');

SQLQueryWorker.ExecSQL;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

ConnectToBase();

end;

end.

 

Схема данной базы данных будет выглядеть так:


ЗАКЛЮЧЕНИЕ

Date: 2016-07-25; view: 551; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию