Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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.
Схема данной базы данных будет выглядеть так: ЗАКЛЮЧЕНИЕ
|