
11.06.2010, 23:46
|
Прохожий
|
|
Регистрация: 11.06.2010
Сообщения: 1
Репутация: 10
|
|
успеваемость студентов
Решил переделать одну программку под свои нужды-но знаний пока маловато.не могли бы вы попочь начинающему кодеру...
Даны студенты
оператор вводит
группу фамилию 54354(и пять оценок в этом формате)
Прога записывает данные в файл-потом считывает-считает средний балл-умножает на коээф. если оценки 4-5 то 0,5 если 0-3 нет стипендии
считывание среднего балла
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,w:integer;
c : real;
str:string;
begin
Memo1.clear;
w:=0;
str:= edit1.text;
for i:=1 to length(str) do
w:=w+strtoint(str[i]);
c:=w/length(str);
а вот само тело проги
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, Dateutils, ComCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
BitBtn1: TBitBtn;
OpenDialog1: TOpenDialog;
Memo5: TMemo;
Label4: TLabel;
Edit3: TEdit;
Label5: TLabel;
Label6: TLabel;
Edit4: TEdit;
Memo4: TMemo;
Label7: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type stud = record
fam:string[100];
oc1:Integer;
oc2:integer;
oc3:integer;
end;
var
Form1: TForm1;
f:File of stud;
ft:TextFile;
w:Stud;
fname,fnamet:String;
zak:Boolean;
label5:Tlabel;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear; Memo2.Clear; Memo3.Clear; memo4.clear; Memo5.Clear;
Edit1.Clear; Edit2.Clear;Edit3.clear; edit4.clear;
zak:=False;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text<>'') and ((StrToIntDef(Edit2.Text,11)<11) or (StrToIntDef(Edit2.Text,0)>0)) then
if (Edit3.Text<>'') and ((StrToIntDef(Edit4.Text,11)<11) or (StrToIntDef(Edit4.Text,0)>0)) then
begin
Memo1.Lines.Add(Edit1.Text);
Memo2.Lines.Add(Edit2.Text);
Memo3.Lines.Add(Edit3.Text);
Memo5.Lines.Add(Edit4.Text);
end else ShowMessage('Error.check your student');
(*
w.fam:=Edit1.Text;
w.oc[1]:=StrToInt(Edit2.Text);
w.oc[2]:=StrToInt(Edit3.Text);
w.oc[4]:=StrToInt(Edit4.Text);
Write(f,w);
Memo1.Lines.Add(w.fam);
Memo2.Lines.Add(IntToStr(w.oc[1]));
Memo3.Lines.Add(IntToStr(w.oc[2]));
memo5.lines.add(IntToStr(w.oc[3]));
Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear;
*)
end;
procedure TForm1.Button2Click(Sender: TObject);
var
SaveDialog1:TSaveDialog;
i:integer;
begin
SaveDialog1 := TSaveDialog.Create(Self);
try
SaveDialog1.Title:='Создать файл';
SaveDialog1.DefaultExt:='dat';
if SaveDialog1.Execute Then
Begin
fname:=SaveDialog1.FileName;
//пишем сразу типизированый файл и в txt
AssignFile(f,fname);
ReWrite(f);
AssignFile(ft,ChangeFileExt(fname,'.txt'));
ReWrite(ft);
WriteLn(ft,'Общий список студентов');
WriteLn(ft,' Фамилия группа оценки участие ');
for I := 0 to Memo1.Lines.Count - 1 do
begin
//это в типизированый
w.fam:=Memo1.Lines.Strings[i];
w.oc1:=StrToInt(Memo2.Lines.Strings[i]);
w.oc2:=StrToint(Memo3.Lines.Strings[i]);
w.oc3:=StrToint(Memo5.Lines.Strings[i]);
Write(f,w);
//это в txt
WriteLn(ft,Memo1.Lines.Strings[i]:10,Memo2.Lines.Strings[i]:2,Memo3.Lines.Strings[i],Memo5.Lines.Strings[i]:10);
end;
End;
finally
CloseFile(f);
CloseFile(ft);
SaveDialog1.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
mi:integer;
rec_:boolean;
begin
OpenDialog1.Title:='Открыть файл';
if OpenDialog1.Execute Then
Begin
fname:=OpenDialog1.FileName;
AssignFile(f,fname);
Reset(f);
Memo1.Clear; Memo2.Clear; Memo3.Clear; memo5.Clear;
While Not EOF(f) Do
Begin
Read(f,w);
mi:=Memo3.Lines.Count-1;
rec_:=false;
repeat
if mi<0 then
begin
Memo1.Lines.Insert(0,w.fam);
Memo2.Lines.Insert(0,inttostr(w.oc1));
Memo3.Lines.Insert(0,inttostr(w.oc2));
rec_:=true;
end else
if (w.oc2<StrToDate(Memo3.Lines.Strings[mi])) then
begin
Memo1.Lines.Insert(mi+1,w.fam);
Memo2.Lines.Insert(mi+1,inttostr(w.oc1));
Memo3.Lines.Insert(mi+1,inttostr(w.oc2));
rec_:=true;
end;
inc(mi,-1);
until (MI<-1) or rec_
end;
End; // CloseFile(f);
Label5.Caption:='стипендии посчитаны в вормате групаа-фамилия-сумма';
end;
end.
господа если знаете как проще-я рад выслушать
в программе не хватает только доработки ср-балл-умножение на коээфициенты. минимальная стипендия скпжем 100р
|