13.05.2009, 16:25
|
Прохожий
|
|
Регистрация: 13.05.2009
Сообщения: 1
Репутация: 10
|
|
Ошибки в задаче Delphi
Помогите, пожалуйста, разобраться с ошибками в задаче. Задача: заданы сведения о сотрудниках организации- фамилия, заработная плата. Количество сведений любое.Сохранить сведения в файле. Прочитать из файла по запросу и определить среднюю заработную плату всех сотрудников организации. Предусмотреть дополнение сведений и их исправление. Задачу вцелом я решил, но немогу разобраться с замечаниями преподавателя (коментарии красным шрифтом).
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, Grids, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
StatusBar1: TStatusBar;
StringGrid1: TStringGrid;
ListBox1: TListBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
MainMenu1: TMainMenu;
OpenDialog1: TOpenDialog;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
str=string[20];
sotrud=record
fam_name:str;
zarplata:real;
end;
massiv=array of sotrud;
var
Form1: TForm1;
mas:massiv;
n:integer;
implementation
{$R *.dfm}
function Count(var s:massiv):real;// функция вычисления средней зарплаты
var i:integer;
p:real;
begin
p:=0;
for i:=0 to n-1 do
with s[i] do
p:=p+s[i].zarplata;
result:=p/n;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='Familii';
StringGrid1.Cells[1,0]:='Zarabotna plata';
Edit1.Text:=' ';
ListBox1.Clear;
N2.Enabled:=False;
end;
procedure TForm1.N5Click(Sender: TObject);// Сохранение данных в памяти
var i:integer;
begin
i:=1;
setlength(mas,1);
while StringGrid1.Cells[0,i]<>'' do
begin
mas[i-1].fam_name:=StringGrid1.Cells[0,i];
mas[i-1].zarplata:=StrToInt(StringGrid1.Cells[1,i]);
i:=i+1;
Setlength(mas,i);
end;
n:=i-1;
statusBar1.Panels.Items[0].Text:='n ='+ IntToStr(n);
end;
procedure TForm1.N6Click(Sender: TObject);// запись в файл
var i:integer;
f:file of sotrud;
begin
assignfile(f,'sotrud.dat');
rewrite(f);
For i:=0 to Length(mas)-1 do
write(f,mas[i]);
closefile(f);
MessageDlg('Zapisano v file', mtinformation,[mbOK],0);
N2.Enabled:=True;
end;
procedure TForm1.N7Click(Sender: TObject); //средний заработок
var k:real;
begin
k:=count(mas);
Edit1.Text:=FloatToStrF(k,ffFixed,4,4);
end;
procedure TForm1.N2Click(Sender: TObject);
var i:integer;
f:file of sotrud; // У вас такой файл работать не будет! (а почему?)
s:string;
begin
if OpenDialog1.Execute then
AssignFile(f,OpenDialog1.FileName)
else
begin
MessageDlg('file ne naiden', mtinformation,[mbOK],0);
exit;
end;
i:=0;
reset(f);
SetLength(mas,FileSize(f));
While Not Eof(f) Do
begin
read(f,mas[i]); // Читаем массив из файла!
inc(i);
end;
CloseFile(f);
for i:=1 to StringGrid1.RowCount-1 do // Зачем из таблицы читаете? Надо было список по фамилиям прочитать из массива mas
begin
s:=stringGrid1.Cells[0,i];
ListBox1.Items.Add(s);
end;
StatusBar1.Panels.Items[1].Text:=OpenDialog1.FileName;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
ListBox1.Sorted:=true;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Close;
end;
end.
Admin: Пользуемся тегами!
Последний раз редактировалось Admin, 13.05.2009 в 16:31.
|