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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2008, 21:45   #1
Turok
 
Регистрация: 26.05.2008
Сообщений: 7
По умолчанию Помоги разобраться с ошибкой, пожалуйста

Я уже просто не знаю, что делать...

Программа на Динамические структуры данных...Содержит информацию об автобусном парке(номер автобуса, ФИО водителя, маршрут) Должна отображать автобусы в парке и автобусы на маршруте, через меню переводить автобусе с маршрута в парк, и обратно...

Ругаеться когда идёт обращение к полям записи...
Turok вне форума Ответить с цитированием
Старый 17.06.2008, 21:46   #2
Turok
 
Регистрация: 26.05.2008
Сообщений: 7
По умолчанию

Код:
{Лабораторная работа №4}
program laba4;
uses crt;
{Объявим запись}
type
    pSp=^park;
    park=record
    nomer:integer;
    FIO:string[25];
    marsh:integer;
    del:boolean;
end;

{Имя файла базы данных}
t=file of park;

var f:t;
    sp:pSp;
    safe:boolean;
    ex:boolean;
    key:char;
    i:integer;
procedure initdb;
begin
     {$I-}
     assign(f,'C:\din.dat');
     reset(f);
     if ioresult <> 0 then
     begin
          rewrite(f);
          close(f);
          reset(f);
          if ioresult<>0 then safe:=false else safe:=true;
     end
     else safe:=true;
     {$I+}
end;

procedure readrecord(n:integer;var rec:park);
var s:integer;
begin
if safe then
begin
     s:=filesize(f);
     if ((s>0) and (n<s)) then
     begin
     seek(f,n);
     read(f,rec);
     end
     else begin rec.nomer:=0;rec.FIO:='NULL';rec.marsh:=0 end;
end;
end;

procedure removerecord(n:integer);
var s:integer;
    rec:park;
begin
if safe then
begin
     s:=filesize(f);
     if ((s>0) and (n<s)) then
     begin
     seek(f,n);read(f,rec);
     rec.del:=true;
     seek(f,n);write(f,rec);
     end;
end;
end;

procedure addrecord(rec:park);
var n,s:integer;
    ex:boolean;
    rec2:park;
begin
if safe then
begin
     s:=filesize(f);
     n:=0;ex:=false;
     if (s>0) then
     begin
          repeat
          seek(f,n);
          read(f,rec2);
          if rec2.del=true then ex:=true else n:=n+1;
          until ((n>=s)or(ex=true)) ;
     end;
     rec.del:=false;
     seek(f,n);
     write(f,rec);
end;
end;

procedure writerecord(n:integer;rec:park);
var s:integer;
begin
if safe then
begin
     s:=filesize(f);
     if ((s>0) and (n<s)) then
     begin
     seek(f,n);
     rec.del:=false;
     write(f,rec);
     end;
end;
end;

procedure drawtable(x:boolean);
var rec:park;
begin
if safe then
begin
     writeln('####################################################################');
     writeln('#  ID |         NOMER            |           FIO            |MARSH #');
     writeln('#-----+--------------------------+--------------------------+------#');
     for i:=1 to filesize(f) do
     begin
          readrecord(i-1,rec);
          if x=false then if rec.del=false then writeln('#',(i-1):4,' |',rec.nomer:25,' |',rec.FIO:25,' |',rec.marsh:5,' #');
          if x=true then if rec.del=true then writeln('#',(i-1):4,' |',rec.nomer:25,' |',rec.FIO:25,' |',rec.marsh:5,' #');
     end;
     writeln('####################################################################');
end;
end;

begin
     ex:=false;
     initdb;
     repeat
     clrscr;
     writeln('* Главное меню *');
     writeln('1. Автобусы в парке');
     writeln('2. Автобусы на маршруте');
     writeln('3. Добавление записи');
     writeln('4. Изменение записи');
     writeln('5. На маршрут');
     writeln('6. В парк');
     writeln('0. Выход');
     key:=readkey;
     case key of
          '0':begin ex:=true;close(f) end;

          '1':begin
                   clrscr;
                   drawtable(false);
                   readkey;
              end;

          '2':begin
                   clrscr;
                   drawtable(true);
                   readkey;
              end;

          '3':begin
                   clrscr;
                   write('Введите номер автобуса ');readln(nomer);
                   write('Введите ФИО водителя (Не > 25 знаков) ');readln(f.FIO);
                   write('Введите номер маршрута');readln(f.marsh);
                   addrecord(f);
              end;

          '4':begin
                   clrscr;
                   drawtable(false);
                   write('Введите ID записи для её изменения ');readln(i);
                   readrecord(i,f);
                   if (f.nomer=0) or (f.del=true) then
                   begin writeln('Введен неправильный номер '); readkey end
                   else
                   begin
                        write('Введите номер автобуса ');readln(f.nomer);
                        write('Введите ФИО водителя (Не > 25 знаков) ');readln(f.FIO);
                        write('Введите номер маршрута');readln(f.marsh);
                        writerecord(i,f);
                   end;
              end;

          '5':begin
                   clrscr;
                   drawtable(false);
                   write('Введите ID записи для её удаления ');readln(i);
                   readrecord(i,f);
                   if (f.nomer=0) or (f.del=true) then
                   begin writeln('Введен неправильный номер '); readkey end
                   else removerecord(i);
              end;
Turok вне форума Ответить с цитированием
Старый 17.06.2008, 21:46   #3
Turok
 
Регистрация: 26.05.2008
Сообщений: 7
По умолчанию

Код:

           '6':begin
                   clrscr;
                   drawtable(true);
                   write('Введите ID записи для её восстановления ');readln(i);
                   readrecord(i,f);
                   if (f.nomer=0) or (f.del=false) then
                   begin writeln('Введен неправильный номер (либо записей нету) '); readkey end
                   else
                   begin
                        readrecord(i,f);
                        f.del:=false;
                        writerecord(i,f);
                   end;
              end;
     else
         ex:=false;
     end;

     until ex=true;
end.
Turok вне форума Ответить с цитированием
Старый 17.06.2008, 22:31   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот примерно отсюда и до конца везде f.____ заменить на sp^.____, что я и сделал, программа работает. f - это у Вас файл, а sp^ - запись.
Код:
'3':begin
    clrscr;
    write('Введите номер автобуса ');readln(sp^.nomer);
    write('Введите ФИО водителя (Не > 25 знаков) ');readln(sp^.FIO);
    write('Введите номер маршрута');readln(sp^.marsh);
    addrecord(sp^);
    end;
  
'4':begin
    clrscr;
    drawtable(false);
    write('Введите ID записи для её изменения ');readln(i);
    readrecord(i,sp^);
    if (sp^.nomer=0) or (sp^.del=true) then
      begin
        writeln('Введен неправильный номер ');
        readkey
      end
    else
      begin
       write('Введите номер автобуса ');readln(sp^.nomer);
       write('Введите ФИО водителя (Не > 25 знаков) ');readln(sp^.FIO);
       write('Введите номер маршрута');readln(sp^.marsh);
       writerecord(i,sp^);
      end;
    end;

'5':begin
    clrscr;
    drawtable(false);
    write('Введите ID записи для её удаления ');readln(i);
    readrecord(i,sp^);
    if (sp^.nomer=0) or (sp^.del=true) then
       begin writeln('Введен неправильный номер ');
         readkey
       end
    else removerecord(i);
    end;
'6':begin
    clrscr;
    drawtable(true);
    write('Введите ID записи для её восстановления ');readln(i);
    readrecord(i,sp^);
    if (sp^.nomer=0) or (sp^.del=false) then
      begin
        writeln('Введен неправильный номер (либо записей нету) ');
        readkey
      end
    else
      begin
        readrecord(i,sp^);
        sp^.del:=false;
        writerecord(i,sp^);
      end;
   end;
     else  
         ex:=false;   
     end;   
  
     until ex=true;   
end.
puporev вне форума Ответить с цитированием
Старый 17.06.2008, 22:58   #5
Turok
 
Регистрация: 26.05.2008
Сообщений: 7
По умолчанию

Спасибо огрмоное....спасибо....
Turok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ГОРИТ ДИПЛОМ!!!! пожалуйста помогите разобраться с программой alexs2141 Фриланс 6 03.06.2008 20:30
Пожалуйста помогите разобраться) Atij1 Общие вопросы C/C++ 4 13.04.2008 20:32