Материал: ПЗ

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

procedure ComboBox2_update (Sender: TObject);

procedure StrGridToHTML(const FileName: string; StrGrid: TStringGrid;

const Heading: string = '');

private

public

teacher_j, predmet_j, klass_j, quarter_j:String;

prnts:integer;

end;

var

Form_jurnal: TForm_jurnal;

persons_arr: TDynStringArray;

date_arr, marks_arr: TDynintArray_array;

arrcount:integer;

implementation

uses

unit_del_data, unit_about, unit_tz ;

{$R *.lfm}

{ TForm_jurnal }

procedure TForm_jurnal.persons_array(Sender: TObject); // При открытии заполняем учеников в массив

var

i:integer;

f:text;

begin

i := 1;

AssignFile(f, 'db\person_kl\' + klass_j + '.db');

Reset(f);

while not Eof(f) do

begin

SetLength(persons_arr, i+1);

Readln(f, persons_arr[i]);

inc(i);

end;

arrcount:=i-1;

CloseFile(f);

end;

procedure TForm_jurnal.ComboBox1_update(Sender: TObject); //Заполняем комбобокс данными учеников

var

i:integer;

begin

for i:=1 to arrcount do

ComboBox1.Items.Add(persons_arr[i]);

ComboBox1.ItemIndex:=0;

end;

procedure TForm_jurnal.ComboBox7_update(Sender: TObject); //Удалить оценку - Ученики

var

i,m:integer;

s,s1,s2:string;

begin

ComboBox7.Clear;

for i:=0 to Length(marks_arr)-1 do

begin

m:=marks_arr[i,1];

case m of

1: s:=('янв' + ' / '+ (inttostr(marks_arr[i,2])));

2: s:=('фев' + ' / '+ (inttostr(marks_arr[i,2])));

3: s:=('мар' + ' / '+ (inttostr(marks_arr[i,2])));

4: s:=('апр' + ' / '+ (inttostr(marks_arr[i,2])));

5: s:=('май' + ' / '+ (inttostr(marks_arr[i,2])));

6: s:=('июн' + ' / '+ (inttostr(marks_arr[i,2])));

7: s:=('июл' + ' / '+ (inttostr(marks_arr[i,2])));

8: s:=('авг' + ' / '+ (inttostr(marks_arr[i,2])));

9: s:=('сен' + ' / '+ (inttostr(marks_arr[i,2])));

10: s:=('окт' + ' / '+ (inttostr(marks_arr[i,2])));

11: s:=('ноя' + ' / '+ (inttostr(marks_arr[i,2])));

12: s:=('дек' + ' / '+ (inttostr(marks_arr[i,2])));

end;

case marks_arr[i,3] of

0: s1:='1';

1: s1:='2';

2: s1:='3';

3: s1:='4';

4: s1:='5';

5: s1:='6';

6: s1:='7';

7: s1:='8';

8: s1:='9';

9: s1:='10';

10: s1:='н';

11: s1:='*';

end;

s2:= persons_arr[marks_arr[i,0]+1];

ComboBox7.Items.Add(s2 + ' - ' + s + ' - ' + s1);

end;

ComboBox7.ItemIndex:=0;

end;

procedure TForm_jurnal.ComboBox6_update(Sender: TObject); //Заполняем комбобокс ДАТАМИ!!

var

i,m:integer;

begin

ComboBox6.clear;

for i:=0 to Length(date_arr)-1 do

begin

m:=date_arr[i,0];

case m of

1: ComboBox6.Items.add('январь' + ' / '+ (inttostr(date_arr[i,1])));

2: ComboBox6.Items.add('февраль' + ' / '+ (inttostr(date_arr[i,1])));

3: ComboBox6.Items.add('март' + ' / '+ (inttostr(date_arr[i,1])));

4: ComboBox6.Items.add('апрель' + ' / '+ (inttostr(date_arr[i,1])));

5: ComboBox6.Items.add('май' + ' / '+ (inttostr(date_arr[i,1])));

6: ComboBox6.Items.add('июнь' + ' / '+ (inttostr(date_arr[i,1])));

7: ComboBox6.Items.add('июль' + ' / '+ (inttostr(date_arr[i,1])));

8: ComboBox6.Items.add('август' + ' / '+ (inttostr(date_arr[i,1])));

9: ComboBox6.Items.add('сентябрь' + ' / '+ (inttostr(date_arr[i,1])));

10: ComboBox6.Items.add('октябрь' + ' / '+ (inttostr(date_arr[i,1])));

11: ComboBox6.Items.add('ноябрь' + ' / '+ (inttostr(date_arr[i,1])));

12: ComboBox6.Items.add('декабрь' + ' / '+ (inttostr(date_arr[i,1])));

end;

end;

ComboBox6.ItemIndex:=0;

end;

procedure TForm_jurnal.ComboBox2_update(Sender: TObject); //Добавить оценку - выбор даты!!! Заполнение комбобокса

var

i,m:integer;

begin

ComboBox2.clear;

for i:=0 to Length(date_arr)-1 do

begin

m:=date_arr[i,0];

case m of

1: ComboBox2.Items.add('январь' + ' / '+ (inttostr(date_arr[i,1])));

2: ComboBox2.Items.add('февраль' + ' / '+ (inttostr(date_arr[i,1])));

3: ComboBox2.Items.add('март' + ' / '+ (inttostr(date_arr[i,1])));

4: ComboBox2.Items.add('апрель' + ' / '+ (inttostr(date_arr[i,1])));

5: ComboBox2.Items.add('май' + ' / '+ (inttostr(date_arr[i,1])));

6: ComboBox2.Items.add('июнь' + ' / '+ (inttostr(date_arr[i,1])));

7: ComboBox2.Items.add('июль' + ' / '+ (inttostr(date_arr[i,1])));

8: ComboBox2.Items.add('август' + ' / '+ (inttostr(date_arr[i,1])));

9: ComboBox2.Items.add('сентябрь' + ' / '+ (inttostr(date_arr[i,1])));

10: ComboBox2.Items.add('октябрь' + ' / '+ (inttostr(date_arr[i,1])));

11: ComboBox2.Items.add('ноябрь' + ' / '+ (inttostr(date_arr[i,1])));

12: ComboBox2.Items.add('декабрь' + ' / '+ (inttostr(date_arr[i,1])));

end;

end;

ComboBox2.ItemIndex:=0;

end;

procedure TForm_jurnal.Updategrid_SB(Sender: TObject); // Средний бал

var

i,j,m,n:integer;

s,s1:real;

begin

if length(marks_arr)>0 then begin

StringGrid1.ColCount:=Length(date_arr)+3;

StringGrid1.Cells[Length(date_arr)+2, 0] := 'СР';

StringGrid1.Cells[Length(date_arr)+2, 1] := 'БЛ';

n:=0;

m:=0;

s:=0;

for j:=0 to length(persons_arr)-2 do

begin

for i:=0 to length(marks_arr)-1 do

begin

if j = marks_arr[i,0] then

if marks_arr[i,3] < 10 then

begin

inc(n);

m:= m + marks_arr[i,3]+1;

end;

if n>0 then begin

s1:= m / n;

s:= SimpleRoundTo(s1, -2);

StringGrid1.Cells[Length(date_arr)+2, j+2] := FloatToStr(s);

end;

end;

n:=0;

m:=0;

s:=0;

end;

end;

end;

procedure TForm_jurnal.Updategrid(Sender: TObject); // SG Ученики, номера

var

i:integer;

begin

StringGrid1.RowCount:=arrcount+2;

if arrcount = 0 then begin

ShowMessage ('В данном классе нет учеников!') ;

close;

exit;

end;

for i:=0 to arrcount do

begin

StringGrid1.Cells[1, i+1] := persons_arr[i];

StringGrid1.Cells[0, i+1] := inttostr(i) ;

end;

StringGrid1.Cells[1, 1] := 'Список учеников: '+klass_j+' класса;';

StringGrid1.Cells[0, 1] := '№';

StringGrid1.Cells[1, 0] := 'Сегодня: '+ DateToStr(Date);

end;

procedure TForm_jurnal.Updategrid_marks(Sender: TObject); // Обновление SG для оценок!!!

var

i,j:integer;

s1:string;

begin

for i:=0 to length(date_arr)-1 do

for j:=0 to length(persons_arr)-2 do

StringGrid1.Cells[i+2,j+2]:='';

for i:=0 to Length(marks_arr)-1 do begin

case marks_arr[i,3] of

0: s1:='1';

1: s1:='2';

2: s1:='3';

3: s1:='4';

4: s1:='5';

5: s1:='6';

6: s1:='7';

7: s1:='8';

8: s1:='9';

9: s1:='10';

10: s1:='н';

11: s1:='*';

end;

for j:=0 to Length(date_arr)-1 do

if marks_arr[i,1] = date_arr[j,0] then

if marks_arr[i,2] = date_arr[j,1] then

StringGrid1.Cells [ j+2 , marks_arr[i,0]+2]:= s1;

end;

Form_jurnal.Updategrid_SB (Sender);

end;

procedure TForm_jurnal.Updategrid_2(Sender: TObject); //Даты В ТАБЛИЦУ !!!!!!!!!!!!!!!!!

var

i,m:integer;

begin

StringGrid1.ColCount:=Length(date_arr)+2;

for i:=0 to Length(date_arr)-1 do

begin

m := date_arr[i,0];

case m of

1: StringGrid1.Cells [i+2,0] := 'янв';

2: StringGrid1.Cells [i+2,0] := 'фев';

3: StringGrid1.Cells [i+2,0] := 'мар';

4: StringGrid1.Cells [i+2,0] := 'апр';

5: StringGrid1.Cells [i+2,0] := 'май';

6: StringGrid1.Cells [i+2,0] := 'июн';

7: StringGrid1.Cells [i+2,0] := 'июл';

8: StringGrid1.Cells [i+2,0] := 'авг';

9: StringGrid1.Cells [i+2,0] := 'сен';

10: StringGrid1.Cells [i+2,0] := 'окт';

11: StringGrid1.Cells [i+2,0] := 'ноя';

12: StringGrid1.Cells [i+2,0] := 'дек';

end;

StringGrid1.Cells [i+2,1] := inttostr(date_arr[i,1]);

end;

end;

procedure TForm_jurnal.newFile(Sender: TObject); // При открытии создаем файл если нет ! СЧИТЫВАЕМ ЕСЛИ ЕСТЬ!

var

f:textfile;

i,j,f1,d,m,mr: integer;

s: string;

begin

if FileExists('db\jurnal\' + teacher_j + '_' + predmet_j + '_' + //ПРОВЕРКА наличия файла!

klass_j + '_' + quarter_j +'.db') then //Считываем если есть!!!

begin

AssignFile (f, 'db\jurnal\' + teacher_j + '_' + predmet_j + '_' +

klass_j + '_' + quarter_j +'.db');

Reset(f);

// ЗАНОСИМ ДАТЫ!!!!!!!

readln(f,s); // Считываем первую строку

i:=0;

while pos(' ',s)>0 do begin

setlength(date_arr,Length(date_arr)+1,2);

date_arr[i,0]:= strtoint(copy(s,1,pos(' ',s)-1));

delete(s,1,pos(' ',s));

date_arr[i,1]:= strtoint(copy(s,1,pos(' ',s)-1));

delete(s,1,pos(' ',s));

inc(i);

end;

Form_jurnal.ComboBox6_update (Sender);

Form_jurnal.ComboBox2_update (Sender);

Form_jurnal.Updategrid_2 (Sender);

readln(f); //Считываем оценки!!!

While not (EOF (f)) do begin

Readln (f, s); //Считываем ФИО записываем в s 1

if Length(s)>0 then begin

for i:=0 to Length(persons_arr)-1 do

if persons_arr[i] = s then // -1 !!! ТУТ ОШИБКА Ошибка External SIGSEGV РАБОТАЕТ!

begin

setlength(marks_arr,Length(marks_arr)+1,4);

marks_arr[Length(marks_arr)-1,0] := i-1;

Readln (f, s); //2

marks_arr[Length(marks_arr)-1,1] :=strtoint(s);

Readln (f, s); //3

marks_arr[Length(marks_arr)-1,2] :=strtoint(s);

Readln (f, s); //4

marks_arr[Length(marks_arr)-1,3] :=strtoint(s);

readln(f); //5

end;

end;

end;

CloseFile(f);

for i:=0 to Length(marks_arr)-1 do // Сортировка по Фамилии

for j:=0 to Length(marks_arr)-2 do

if marks_arr[j,0]>marks_arr[j+1,0] then

begin

f1:= marks_arr[j,0];

d:= marks_arr[j,1];

m:= marks_arr[j,2];

mr:= marks_arr[j,3];

marks_arr[j,0]:= marks_arr[j+1,0];

marks_arr[j,1]:= marks_arr[j+1,1];

marks_arr[j,2]:= marks_arr[j+1,2];

marks_arr[j,3]:= marks_arr[j+1,3];

marks_arr[j+1,0]:=f1;

marks_arr[j+1,1]:=d;

marks_arr[j+1,2]:=m;

marks_arr[j+1,3]:=mr;

end;

for i:=0 to Length(marks_arr)-1 do // Сортировка по дате МЕСЯЦ

for j:=0 to Length(marks_arr)-2 do

if marks_arr[j,0]=marks_arr[j+1,0] then

if marks_arr[j,1]>marks_arr[j+1,1] then

begin

f1:= marks_arr[j,0];

d:= marks_arr[j,1];

m:= marks_arr[j,2];

mr:= marks_arr[j,3];

marks_arr[j,0]:= marks_arr[j+1,0];

marks_arr[j,1]:= marks_arr[j+1,1];

marks_arr[j,2]:= marks_arr[j+1,2];

marks_arr[j,3]:= marks_arr[j+1,3];

marks_arr[j+1,0]:=f1;

marks_arr[j+1,1]:=d;

marks_arr[j+1,2]:=m;

marks_arr[j+1,3]:=mr;

end;

for i:=0 to Length(marks_arr)-1 do // Сортировка по дате День

for j:=0 to Length(marks_arr)-2 do

if marks_arr[j,0]=marks_arr[j+1,0] then

if marks_arr[j,1]=marks_arr[j+1,1] then

if marks_arr[j,2]>marks_arr[j+1,2] then

begin

f1:= marks_arr[j,0];

d:= marks_arr[j,1];

m:= marks_arr[j,2];

mr:= marks_arr[j,3];

marks_arr[j,0]:= marks_arr[j+1,0];

marks_arr[j,1]:= marks_arr[j+1,1];

marks_arr[j,2]:= marks_arr[j+1,2];

marks_arr[j,3]:= marks_arr[j+1,3];

marks_arr[j+1,0]:=f1;

marks_arr[j+1,1]:=d;

marks_arr[j+1,2]:=m;

marks_arr[j+1,3]:=mr;

end;

Form_jurnal.Updategrid_marks (Sender);

Form_jurnal.ComboBox7_update (Sender);

end;

end;

procedure TForm_jurnal.FormShow(Sender: TObject);

begin

if prnts = 1 then begin // чекаем откуда пришли

ComboBox4.Enabled:=False;

ComboBox5.Enabled:=False;

ComboBox6.Enabled:=False;

ComboBox1.Enabled:=False;

ComboBox2.Enabled:=False;

ComboBox3.Enabled:=False;

ComboBox7.Enabled:=False;

Button1.Enabled:=False;

Button2.Enabled:=False;

Button3.Enabled:=False;

Button4.Enabled:=False;

Button5.Enabled:=False;

Memo1.ReadOnly:=True;

end;

label12.Caption:=' Учитель: ' + teacher_j+'; '+'Предмет: '+predmet_j+ // Все данные которые передал нам зауч

'; '+'Класс: '+klass_j+'; ' + 'Четверть: ' + quarter_j +';';

Form_jurnal.persons_array(Sender); // Заполняем учеников в массив из класса

Form_jurnal.Updategrid (Sender); // Заносим учеников в SG + добавляем номера

Form_jurnal.ComboBox1_update (Sender); // Заносим в CB1 данные учеников

Form_jurnal.newFile (Sender); // Проверяем наличие файла и считываем если есть !

Form_jurnal.update_tems (Sender); // Загружаем темы

end;

procedure TForm_jurnal.MenuItem1Click(Sender: TObject);

begin

end;

procedure TForm_jurnal.MenuItem2Click(Sender: TObject); // сохранить табл

var

s:string;

begin

If Form_jurnal.SaveDialog2.Execute then

s:= Form_jurnal.SaveDialog2.FileName;

Form_jurnal.StrGridToHTML(s, StringGrid1, Label12.caption);

end;

procedure TForm_jurnal.MenuItem3Click(Sender: TObject); // Сохранить текст

begin

If Form_jurnal.SaveDialog1.Execute then

Form_jurnal.Memo1.Lines.SaveToFile(Form_jurnal.SaveDialog1.FileName);

end;

procedure TForm_jurnal.StrGridToHTML(const FileName: string; StrGrid: TStringGrid; // Сохраняем таблицу в HTML

const Heading: string = '');

var

Txt: TextFile;

i, ii: integer;

BgColor, TxColor: string;

begin

// Convert TColor to HTML Hex Color

BgColor := 'FFFFFF';

TxColor := '000000';

// Create output file

AssignFile(Txt, FileName);

Rewrite(Txt);

// HTML Header Info

WriteLn(Txt, '<HTML>');

WriteLn(Txt, '<HEAD>');

WriteLn(Txt, '<TITLE>' + ExtractFileName(FileName) + '</TITLE>');

WriteLn(Txt, '</HEAD>');

WriteLn(Txt);

WriteLn(Txt, '<BODY TEXT=#' + TxColor + ' BGCOLOR=#CCCCCC>');

WriteLn(Txt, '<H1>' + Heading + '</H1>');

WriteLn(Txt, '<TABLE WIDTH=100% CELLPADDING=2 CELLSPACING=2 ' +

'BGCOLOR=#' + BgColor + ' BORDER=1>');

// Column Descriptions

WriteLn(Txt, ' <TR>');

for i := 0 to StrGrid.ColCount - 1 do

WriteLn(Txt, ' <TH>' + StrGrid.Cells[i, 0] + '</TH>');

WriteLn(Txt, ' </TR>');

// Write out the Grid Data

for i := 1 to StrGrid.RowCount - 1 do

begin

WriteLn(Txt, ' <TR>');

for ii := 0 to StrGrid.ColCount - 1 do

WriteLn(Txt, ' <TD>' + StrGrid.Cells[ii, i] + '</TD>');

WriteLn(Txt, ' </TR>');

end;

// Footer

WriteLn(Txt, '<TABLE>');

WriteLn(Txt, '<P>');

WriteLn(Txt, '</BODY>');

WriteLn(Txt, '</HTML>');

CloseFile(Txt);

end;

procedure TForm_jurnal.MenuItem4Click(Sender: TObject);

begin

close;

end;

procedure TForm_jurnal.MenuItem6Click(Sender: TObject); // шрифты

begin

if FontDialog1.Execute then begin

Memo1.Font:=FontDialog1.Font;

stringGrid1.Font:=FontDialog1.Font;

end;

end;

procedure TForm_jurnal.MenuItem8Click(Sender: TObject); // об авторе

begin

Form_about.show;

end;

procedure TForm_jurnal.MenuItem9Click(Sender: TObject); // о программее

begin

Form_tz.Show;

end;

procedure TForm_jurnal.Button2Click(Sender: TObject); //КНОПКА Добавить дату занятий

var

i,j,m,d:integer;

begin

if (ComboBox4.ItemIndex < 0 ) then begin

ShowMessage ('Выберите месяц!');

Exit;

end;

if (ComboBox5.ItemIndex < 0 ) then begin

ShowMessage ('Выберите день!');

Exit;

end;

m:=ComboBox4.ItemIndex+1;

d:= strtoint(ComboBox5.Text);

for i:=0 to Length(date_arr)-1 do // Делаем -1 тк вылетает за пределы памяти

begin

if Length(date_arr)>0 then

if date_arr[i,0] = m then

if d = date_arr[i,1] then begin

ShowMessage ('Такая дата уже есть');

Exit;

end;

end;// else

begin

setlength(date_arr,Length(date_arr)+1,2);

date_arr[Length(date_arr)-1,0]:= m; //месяц

date_arr[Length(date_arr)-1,1]:= d; //день

for i:=0 to Length(date_arr)-1 do // Сортировка по месяцу

for j:=0 to Length(date_arr)-2 do

if date_arr[j,0]>date_arr[j+1,0] then

begin

m:= date_arr[j,0];

d:= date_arr[j,1];

date_arr[j,0]:= date_arr[j+1,0];

date_arr[j,1]:= date_arr[j+1,1];

date_arr[j+1,0]:=m;

date_arr[j+1,1]:=d;

end;

for i:=0 to Length(date_arr)-1 do // Сортировка по дню

for j:=0 to Length(date_arr)-2 do

if date_arr[j,0]=date_arr[j+1,0] then

if date_arr[j,1]>date_arr[j+1,1] then

begin

m:= date_arr[j,0];

d:= date_arr[j,1];

date_arr[j,0]:= date_arr[j+1,0];

date_arr[j,1]:= date_arr[j+1,1];

date_arr[j+1,0]:=m;

date_arr[j+1,1]:=d;

end;

Form_jurnal.ComboBox6_update (Sender);

Form_jurnal.ComboBox2_update (Sender);

Form_jurnal.Updategrid_2 (Sender);

Form_jurnal.Updategrid_marks (Sender);

end;

end;

procedure TForm_jurnal.Button1Click(Sender: TObject); // Кнопка добавить оценку

var

i,j,f,d,m,mr:integer ;

begin

if (ComboBox1.ItemIndex<0) then begin

ShowMessage ('Выберите ученика!') ;

Exit;

end;

if (ComboBox2.ItemIndex<0) then begin

ShowMessage ('Выберите дату!') ;

Exit;

end;

if (ComboBox3.ItemIndex<0) then begin

ShowMessage ('Выберите оценку!') ;

Exit;

end;

for i:=0 to Length(marks_arr)-1 do // Проверка на совпадения

begin

if Length(marks_arr)>0 then

if marks_arr[i,0] = ComboBox1.ItemIndex then

if marks_arr[i,1] = date_arr[ComboBox2.ItemIndex,0] then

if marks_arr[i,2] = date_arr[ComboBox2.ItemIndex,1] then

if marks_arr[i,3] = ComboBox3.ItemIndex then

begin

ShowMessage ('Такая оценка уже есть!');

Exit;

end;

end;

for i:=0 to Length(marks_arr)-1 do // Проверка на совпадения

begin

if Length(marks_arr)>0 then

if marks_arr[i,0] = ComboBox1.ItemIndex then

if marks_arr[i,1] = date_arr[ComboBox2.ItemIndex,0] then

if marks_arr[i,2] = date_arr[ComboBox2.ItemIndex,1] then

begin

ShowMessage ('В выбранный день у данного ученика уже есть оценка. Для обновления оценки сначала удалите старую запись!');

Exit;

end;

end;

setlength(marks_arr,Length(marks_arr)+1,4); // 4 ячейки

marks_arr[Length(marks_arr)-1,0]:= ComboBox1.ItemIndex; // ученик

marks_arr[Length(marks_arr)-1,1]:= date_arr[ComboBox2.ItemIndex,0]; // месяц

marks_arr[Length(marks_arr)-1,2]:= date_arr[ComboBox2.ItemIndex,1]; // день

marks_arr[Length(marks_arr)-1,3]:= ComboBox3.ItemIndex; // оценка

Источник: https://studfile.net/preview/16486423/