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; // оценка