Посмотрите пожалуйста, что не так. (иногда может выбить ошибку 200, но это неважно). В меню записываются фамилии, успешно добавляется, но когда выбираешь показать все записи (не сортировать, по фамилии...) экран пуст. Может что-то неправильно в процедуре Writephone. Или они попросту не сохраняются?
program Phonebook; uses Crt; type Phone = record SurnameS : string[15]; NameS : string[15]; PhoneS : string[15]; AddressS: string[50]; end; var PhoneF : file of Phone; PhoneR : Phone; filename : string; a : array[1..600] of Phone; procedure WritePhone; begin Assign(PhoneF,filename); Reset(PhoneF); ClrScr; writeln('Vse zapisi: '); writeln; while not Eof(PhoneF) do begin PhoneR.SurnameS:=' '; PhoneR.NameS:=' '; PhoneR.PhoneS:=' '; PhoneR.AddressS:=' '; read(PhoneF,PhoneR); writeln; write(' ',PhoneR.SurnameS); write(' ',PhoneR.NameS); write(' ',PhoneR.PhoneS); write(' ',PhoneR.AddressS); end; Close(PhoneF); writeln; writeln; write('Nagmite lybuy klavishu ...'); ReadKey; end; procedure AddPhone; begin Assign(PhoneF,filename); Reset(PhoneF); while not Eof(PhoneF) do Read(PhoneF,PhoneR); PhoneR.SurnameS:=' '; PhoneR.NameS:=' '; PhoneR.PhoneS:=' '; PhoneR.AddressS:=' '; ClrScr; writeln('Dobavlenie zapisi: '); writeln; Write('Vvedite familiy: '); readln(PhoneR.SurnameS); write('Vvedite imya: '); readln(PhoneR.NameS); write('Vvedite nomer telefona: '); readln(PhoneR.PhoneS); write('Vvedite adres: '); readln(PhoneR.AddressS); write(PhoneF,PhoneR); Close(PhoneF); writeln; writeln('Zapis uspehno dobavlena v bazu !!!'); writeln; write('Nagmite lybuy klavishu ...'); ReadKey; end; procedure DeletePhone; var temp : file of Phone; Nazv : string[15]; begin Assign(PhoneF,filename); Reset(PhoneF); Assign(temp,filename); Rewrite(temp); PhoneR.SurnameS:=' '; PhoneR.NameS:=' '; PhoneR.PhoneS:=' '; PhoneR.AddressS:=' '; ClrScr; writeln('Udalenie zapisi: '); writeln; Write('Vvedite familiy: '); readln(Nazv); while not Eof(PhoneF) do begin Read(PhoneF,PhoneR); if PhoneR.SurnameS<>Nazv then Write(temp,PhoneR); end; Close(temp); Close(PhoneF); Erase(PhoneF); Rename(temp,filename); writeln; writeln('Zapis uspehno udalena iz bazu !!!'); writeln; write('Nagmite lybuy klavishu ...'); ReadKey; end; procedure EditPhone; var Nazv : string[15]; temp : file of Phone; begin Assign(PhoneF,filename); Reset(PhoneF); Assign(temp,filename); Rewrite(temp); PhoneR.SurnameS:=' '; PhoneR.NameS:=' '; PhoneR.PhoneS:=' '; PhoneR.AddressS:=' '; ClrScr; writeln('Redaktirovanie zapisi: '); writeln; Write('Vvedite familiy, kotoruy hotite izmenit: '); readln(Nazv); while not Eof(PhoneF) do begin PhoneR.SurnameS:=' '; PhoneR.NameS:=' '; PhoneR.PhoneS:=' '; PhoneR.AddressS:=' '; Read(PhoneF,PhoneR); if PhoneR.SurnameS<>Nazv then Write(temp,PhoneR); end; writeln; write('Vvedite novuy familiy: '); readln(PhoneR.SurnameS); write('Vvedite novoe imya: '); readln(PhoneR.NameS); write('Vvedite novyi nomer telefona: '); readln(PhoneR.PhoneS); write('Vveddite novyi adres: '); readln(PhoneR.AddressS); write(temp,PhoneR); Close(temp); Close(PhoneF); Erase(PhoneF); Rename(temp,filename); writeln; writeln('Zapis uspehno izmenena !!!'); writeln; write('Nagmite lybuy klavishy ...'); ReadKey; end; procedure FindSurname; var Nazv : string[15]; k : integer; begin k:=0; Assign(PhoneF,filename); Reset(PhoneF); ClrScr; writeln('Poisk zapisi po familii: '); writeln; Write('Vvedite familiy: '); readln(Nazv); while not Eof(PhoneF) do begin PhoneR.SurnameS:=' '; PhoneR.NameS:=' '; PhoneR.PhoneS:=' '; PhoneR.AddressS:=' '; read(PhoneF,PhoneR); if PhoneR.SurnameS=Nazv then begin writeln; write(' ',PhoneR.SurnameS); write(' ',PhoneR.NameS); write(' ',PhoneR.PhoneS); write(' ',PhoneR.AddressS); k:=k+1; end; end; Close(PhoneF); writeln; writeln; writeln('Poisk zavershen, naideno zapisei: ',k); writeln; write('Nagmite lybuy klavishu ...'); ReadKey; end; procedure FindPhone; var Nazv : string[15]; k : integer; begin k:=0; Assign(PhoneF,filename); Reset(PhoneF); ClrScr; writeln('Poisk zapisi po nomeru telefona: '); writeln; Write('Vvedite nomer telefona: '); readln(Nazv); while not Eof(PhoneF) do begin PhoneR.SurnameS:=' '; PhoneR.NameS:=' '; PhoneR.PhoneS:=' '; PhoneR.AddressS:=' '; read(PhoneF,PhoneR); if PhoneR.PhoneS=Nazv then begin writeln; write(' ',PhoneR.SurnameS); write(' ',PhoneR.NameS); write(' ',PhoneR.PhoneS); write(' ',PhoneR.AddressS); k:=k+1; end; end; Close(PhoneF); writeln; writeln; writeln('Poisk zavershen, naideno zapisei: ',k); writeln; write('Nagmite lybuy klavishu ...'); ReadKey; end; procedure SortSurname; var i,j,c: integer; tr: Phone; begin c:=0; Assign(PhoneF, filename); Reset(PhoneF); ClrScr; writeln('Sortirovka po familii: '); writeln; while not Eof(PhoneF) do begin inc(c,1); read(PhoneF,a[c]); end; for i:=1 to c do for j:=1 to c-1 do begin if a[j].SurnameS>a[j+1].SurnameS then begin tr:=a[j+1]; a[j+1]:=a[j]; a[j]:=tr; end; end; for i:=1 to c do begin writeln; write(a[i].SurnameS); write(' ',a[i].NameS); write(' ',a[i].PhoneS); write(' ',a[i].AddressS); end; Close(PhoneF); writeln; writeln; write('Nagmite lybuy klavishu ...'); ReadKey; end; procedure SortAddress; var i,j,c: integer; tr: Phone; begin c:=0; Assign(PhoneF, filename); Reset(PhoneF); ClrScr; writeln('Sortirovka po adresu: '); writeln; while not Eof(PhoneF) do begin inc(c,1); read(PhoneF,a[c]); end; for i:=1 to c do for j:=1 to c-1 do begin if a[j].AddressS>a[j+1].AddressS then begin tr:=a[j+1]; a[j+1]:=a[j]; a[j]:=tr; end; end; for i:=1 to c do begin writeln; write(a[i].SurnameS); write(' ',a[i].NameS); write(' ',a[i].PhoneS); write(' ',a[i].AddressS); end; Close(PhoneF); writeln; writeln; write('Nagmite lybuy klavishu ...'); ReadKey; end; procedure SortPhone; var i,j,c: integer; tr: Phone; begin c:=0; Assign(PhoneF, filename); Reset(PhoneF); ClrScr; writeln('Sortirovka po nomeru telefona: '); writeln; while not Eof(PhoneF) do begin inc(c,1); read(PhoneF,a[c]); end; for i:=1 to c do for j:=1 to c-1 do begin if a[j].PhoneS>a[j+1].PhoneS then begin tr:=a[j+1]; a[j+1]:=a[j]; a[j]:=tr; end; end; for i:=1 to c do begin writeln; write(a[i].SurnameS); write(' ',a[i].NameS); write(' ',a[i].PhoneS); write(' ',a[i].AddressS); end; Close(PhoneF); writeln; writeln; write('Nagmite lybuy klavishu ...'); ReadKey; end;
procedure SortType; var b: integer; begin repeat begin ClrScr; writeln('"Telefonnyi spravochnik" - meny sortirovki'); writeln; writeln('1. Ne sortirovat'); writeln('2. Sortirovat po familii'); writeln('3. Sortirovat po adresu'); writeln('4. Sortirovat po nomeru telefona'); writeln('----------------------------'); writeln('5. Vozvrat v glavnoe meny'); writeln; write('Vyberite punkt meny: '); readln(b); case b of 1 : WritePhone; 2 : SortSurname; 3 : SortAddress; 4 : SortPhone; end; end; until b=5; end; procedure PhoneMenu; var b: integer; begin repeat begin ClrScr; writeln('"Telefonnyi spravochnik" - glavnoe meny'); writeln; writeln('1. Pokazat vse zapisi'); writeln('2. Dobavit zapis'); writeln('3. Udalit zapis'); writeln('4. Redaktirovat zapis'); writeln('5. Poisk po familii'); writeln('6. Poisk po nomeru telefona'); writeln('----------------------------'); writeln('7. Vyhod'); writeln; write('Vyberite punkt meny: '); readln(b); case b of 1 : SortType; 2 : AddPhone; 3 : DeletePhone; 4 : EditPhone; 5 : FindSurname; 6 : FindPhone; end; end; until b=7; end; begin ClrScr; PhoneMenu; end.
Freedom
11.12.2010 2:43
Цитата(and 1 @ 10.12.2010 22:16)
Посмотрите пожалуйста, что не так. (иногда может выбить ошибку 200, но это неважно). В меню записываются фамилии, успешно добавляется, но когда выбираешь показать все записи (не сортировать, по фамилии...) экран пуст. Может что-то неправильно в процедуре Writephone. Или они попросту не сохраняются?
у меня с расширением .pas от Паскаль ABC, а при исправлении ошибок сохраняются файлы с расширением .bak и .exe в ТурбоПаскале 7.0
volvo
11.12.2010 3:07
Цитата
var PhoneF : file of Phone; PhoneR : Phone; filename : string; // <--- Вот эта переменная где-то инициализируется?
Можно показать, ГДЕ?
and 1
11.12.2010 3:11
убрал файлнэйм, теперь спрашивает о неизвестном идентификаторе
volvo
11.12.2010 3:13
Я не просил убирать, я просто намекнул, что если есть переменная, то надо в нее занести название файла, с которым программа работает. Ты этого в программе не сделал. Так каким образом оно вообще должно работать? Присвой переменной FileName значение: имя твоего файла данных...
and 1
11.12.2010 3:29
покажи как хоть в одной процедуре её указать
volvo
11.12.2010 6:05
А ее не надо в процедуре указывать. Нужно либо жестко "зашить" имя файла в программу, либо запросить его у пользователя в самом начале выполнения программы:
{ ... } begin ClrScr; FileName := 'MYFILE.DAT'; { <--- Путь не задается - файл будет в текущей директории } { или } { Write('Введите имя файла: '); ReadLn(FileName); } PhoneMenu; end.
and 1
11.12.2010 17:27
никак не получается, PhoneMenu пишется как неизвестный идентификатор
volvo
11.12.2010 17:41
Так... Давай-ка присоединяй свою программу файлом, а? Чтоб можно было НЕ КОПИРУЯ (исключим возможность ошибки при копировании полностью) взять и откомпилировать. И посмотреть, что именно не так. А то изменяешь, изменяешь, а что ты там изменяешь - непонятно.
Ты ж говоришь, что программа из первого поста работала у тебя? Что, добавил после ClrScr инициализацию переменной - теперь неизвестный идентификатор? Возникает вопрос а как оно до этого работало? Почему там не было неизвестного идентификатора???
and 1
11.12.2010 22:45
вот сам файл. Первый пост компилировался, но ВСЕ ЗАПИСИ не просматриваются как у Freedom (второй ответ)
Freedom
11.12.2010 23:44
Цитата(and 1 @ 11.12.2010 18:45)
вот сам файл. Первый пост компилировался, но ВСЕ ЗАПИСИ не просматриваются как у Freedom (второй ответ)
Поэтому я и спрашивал про входной файл. У меня заработало потому что я чуть чуть переделал
program Phonebook; uses Crt; type Phone = record SurnameS : string[15]; NameS : string[15]; PhoneS : string[15]; AddressS: string[50]; end; const filename='phone.txt'; // добавил это, и из переменных убрал filename var PhoneF : file of Phone; PhoneR : Phone; a : array[1..600] of Phone; ......
volvo
12.12.2010 1:40
Цитата
вот сам файл.
Это неизмененный файл. Я сказал, что надо с ним делать в посте №8. Ты покажи, КАК ты изменяешь, что у тебя
Цитата
PhoneMenu пишется как неизвестный идентификатор
and 1
12.12.2010 2:11
вот исправлено по 12 посту, но выбивает опять ошибку такую что не удается найти файл. Что я совсем запутался в теме Файлы
Assign (PhoneF, filename); Reset(PhoneF);
Freedom
12.12.2010 2:34
Цитата(and 1 @ 11.12.2010 22:11)
вот исправлено по 12 посту, но выбивает опять ошибку такую что не удается найти файл. Что я совсем запутался в теме Файлы
Assign (PhoneF, filename); Reset(PhoneF);
просто создайте в папке с программой файл 000000.txt
and 1
12.12.2010 2:44
писецццццццццц вроде все работает, благодарен тебе!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.