Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2009, 23:06   #1
Proffy69
 
Регистрация: 31.03.2009
Сообщений: 4
По умолчанию Задача на записи (pascal)

Такая вот задачка есть:
Создать файл, содержащий сведения о месячной заработной плате рабочих завода. Каждая запись содержит поля – фамилия рабочего, наименование цеха, размер заработной платы за месяц. Количество записей – произвольное. Вычислить общую сумму выплат за месяц по цеху Х, а также среднемесячный заработок рабочего этого цеха. Напечатать для бухгалтерии ведомость для начисления заработной платы рабочим этого цеха.

Попытался решить сам, и получил следующее:


Код:
Type
    DB=record
       Name : String;
       Ceh  : String;
       Zarp : Real;
    end;
Var
   DBFile:file of DB;
   Current :DB;

Procedure Insert;
Begin
     clrscr;
     reset(DBFile);
     seek(DBFile,FileSize(DBFile));

     repeat
           WriteLn;
           Write('Введите фамилию ');
           ReadLn(Current.Name);
           Write('Введите название цеха ');
           ReadLn(Current.Ceh);
           Write('Введите зарплату ');
           ReadLn(Current.Zarp);
           Write(DBFile,Current);
           Write('Продолжить ?(д/н)');
     until ReadKey='н';
     WriteLn;
     close(DBFile);
     Menu;

End;

Procedure Menu;
Label 1;
Begin

     clrscr;
1:
     WriteLn('1. Добавить в базу');
     WriteLn('2. Расчет ');
     Write('3. Выход  ');
     repeat until keypressed;
     ch:=Readkey;
     case ch of
      '1':Insert;
      '2': Work;
      '3': Halt;
      else begin
           Writeln('Неправильно выбран пункт');
           clrscr;
          goto 1
      end;
     end;
End;
Procedure Work;
var
   temp,ceh : string;
   sum : real;
Begin
     clrscr;
     Reset(DBFile);
     Write('Введите название цеха: ');
     ReadLn(ceh);
     clrscr;
     WriteLn('Цех:   ',Ceh);
     WriteLn('--------------------------------------------------T--------------¬');
     WriteLn('¦Фамилия                                          ¦Зарплата      ¦');
     WriteLn('+-------------------------------------------------+--------------+');
     Sum:=0;
     i:=5;
     while not EOF(DBFile) do
     Begin
          Read(DBFile,Current);
          if Current.ceh=ceh then
          Begin
            sum:=sum+Current.Zarp;
            Write('¦',Current.Name);
            str(Current.Zarp:6:2,Temp);
            GoToXY(66-Length(Temp),i);
            Write(Temp,'¦');
            GoToXY(51,i);
            WriteLn('¦');
            i:=i+1;
          End;
     End;
     WriteLn('+-------------------------------------------------+--------------+');
     WriteLn('¦Итого                                                           ¦');
     WriteLn('L-------------------------------------------------+---------------');
     GoToXY(51,i+1);
     Write('¦');
     str(sum:6:2,Temp);
     GoToXY(66-Length(Temp),i+1);
     Write(Temp,'¦');
     repeat until keypressed;
     Menu;close(DBfile);
End;
Procedure Part3;
Begin
     assign(DBFile,'a:\kurs\DB.dat');Menu;
End;
Begin
          clrscr;
11:
     WriteLn('1. Часть 1');
     WriteLn('2. Часть 2 ');
     WriteLn('3. Часть 3 ');
     Write('4. Выход  ');
     repeat until keypressed;
     ch:=Readkey;
     case ch of
      '1':Part1;
      '2': Part2;
      '3': Part3;
      '4': Halt;
      else begin
           Writeln('Неправильно выбран пункт');
           clrscr;
          goto 11
      end;
     end;

End.
Но все равно ошибки есть, как мне кажется. Не могли бы Вы помочь мне и подправить программу? Желательно с небольшими комментариями действий
Proffy69 вне форума Ответить с цитированием
Старый 12.05.2009, 23:15   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Исправленный работающий код.
Код:
uses
  Crt;

Type
  DB = record
    Name : String;
    Ceh  : String;
    Zarp : Real;
  end;

 procedure Menu; forward;

Var
  DBFile : file of DB;
  Current : DB;
  Ch : Char;

Procedure Insert;
Begin
  clrscr;
{$I-}
  reset(DBFile);
  if IOResult <> 0 then
    Rewrite(DBFile);
  seek(DBFile, FileSize(DBFile));
{$I+}

  repeat
    WriteLn;
    Write('Введите фамилию ');
    ReadLn(Current.Name);
    Write('Введите название цеха ');
    ReadLn(Current.Ceh);
    Write('Введите зарплату ');
    ReadLn(Current.Zarp);
    Write(DBFile,Current);
    Write('Продолжить ?(y/n)');
  until ReadKey='n';
  WriteLn;
  close(DBFile);
  Menu;
End;

Procedure Work;
var
  temp, ceh : string;
  sum : real;
  i : word;
Begin
  clrscr;

{$I-}
  Reset(DBFile);
  if IOResult <> 0 then begin
    WriteLn('Файл не создан! (Нажмите любую клавишу)');
    repeat until keypressed;
    Menu;
  end;
{$I+}

  Write('Введите название цеха: ');
  ReadLn(ceh);
  clrscr;
  WriteLn('Цех:   ',Ceh);
  WriteLn('--------------------------------------------------T--------------┐');
  WriteLn('│Фамилия                                          │Зарплата      │');
  WriteLn('+-------------------------------------------------+--------------+');
  Sum:=0;
  i:=5;

  while not EOF(DBFile) do Begin
    Read(DBFile,Current);
    if Current.ceh=ceh then Begin
      sum:=sum+Current.Zarp;
      Write('│',Current.Name);
      str(Current.Zarp:6:2,Temp);
      GoToXY(66-Length(Temp),i);
      Write(Temp,'│');
      GoToXY(51,i);
      WriteLn('│');
      i:=i+1;
    End;
  End;
  close(DBfile);

  WriteLn('+-------------------------------------------------+--------------+');
  WriteLn('│Итого                                                           │');
  WriteLn('L-------------------------------------------------+---------------');
  GoToXY(51,i+1);
  Write('│');
  str(sum:6:2,Temp);
  GoToXY(66-Length(Temp),i+1);
  Write(Temp,'│');
  repeat until keypressed;
  Menu;
End;

Procedure Menu;
Label 1;
Begin
    clrscr;
1:
  WriteLn('1. Добавить в базу');
  WriteLn('2. Расчет ');
  Write('3. Выход  ');
  repeat until keypressed;
  ch:=Readkey;
  case ch of
    '1':Insert;
    '2': Work;
    '3': Halt;
    else begin
      Writeln('Неправильно выбран пункт');
      clrscr;
      goto 1
    end;
  end;
End;

Procedure Part3;
Begin
  assign(DBFile,'a:\kurs\DB.dat');
  Menu;
End;

label 11;

Begin
  clrscr;
11:
  WriteLn('1. Часть 1');
  WriteLn('2. Часть 2 ');
  WriteLn('3. Часть 3 ');
  Write('4. Выход  ');
  repeat until keypressed;
  ch := Readkey;
  case ch of
{    '1':Part1;}
{    '2': Part2;}
    '3': Part3;
    '4': Halt;
    else begin
      Writeln('Неправильно выбран пункт');
      clrscr;
      goto 11
    end;
  end;
end.
Скандербег вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записи (Pascal) ALLELE Помощь студентам 3 09.05.2009 15:36
Задача на Записи(Pascal) Desha Паскаль, Turbo Pascal, PascalABC.NET 2 07.04.2009 13:37
задача на записи Pascal kitty Помощь студентам 9 18.04.2008 18:14