IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> типизированный файл, косяк с корректировкой и удалением записей.
сообщение
Сообщение #1


только вперед...
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Здравствуйте.
У меня тут некоторая проблемка с типизированным файлом. Прошу помощи.
Итак, суть задачи: создать основную программу и модуль. В основной выводится меню и считывается номер пункта. В модуле расположены процедуры на пункты меню.
Создается типизированный файл(справочник 2), куда вводятся данные о номенклатурном номере изделия, наименовании изделия и цене изделия. После создания файл можно распечатать и откорректировать(удалить запись, добавить запись или редактировать запись).
Собственно все работает, кроме корректирови и удаления записи. wacko.gif
выкладываю кусок модуля с процедурами на создание файла, корректировку и удаление записей.

unit modmenu4;
interface
uses crt;
type
tsprav2=record{собственно запись данных}
nom_num:integer;
name_izdel:string;
price:integer
end;
ztsprav2=array[1..30] of tsprav2;{тип записи}
var
name2:string;
n,m,i:integer;
flag,fl:boolean;
answer:char;
zap_sprav2:ztsprav2;
sprav2:file of tsprav2;

procedure vvod_sprav2;
procedure udal_zap_sprav2;
procedure corr_zap_sprav2;

implementation

procedure vvod_sprav2;{ввод типизированного файла}
var
i:integer;
name2,answer:string;
begin
i:=0;
repeat
writeln('vvedite imya faila-spravo4nika 2:');
readln(name2);
assign(sprav2,name2);
{$I-} reset (sprav2); {$I+}
if ioresult=0 then
begin
writeln('imya faila *',name2,'* yje est');
close(sprav2);
fl:=false;
end
else
begin
rewrite(sprav2);
fl:=true;
end;
until fl;
flag:=true;

while(flag=true) do
begin
inc(i);
writeln('Zapis N',i);
write('>Vvedite nom.nomer izdeliya:');
readln(zap_sprav2[i].nom_num);
write('>vvedite naimenovanie izdeliya:');
readln(zap_sprav2[i].name_izdel);
write('>vvedite cenu izdeliya:');
readln(zap_sprav2[i].price);
write(sprav2,zap_sprav2[i]);
writeln('prodoljat zapis? <y/n>');
readln(answer);
if (answer='n') or (answer='N') then
flag:=false;

end;
close(sprav2);
end;



процедура на удаление отдельных строк записи

procedure udal_zap_sprav2;
var
flag,flag1:boolean;
j,i:integer;
temp:file of tsprav2;
namet:string;
begin
repeat
writeln('vvedite imya faila-spravo4nika 2:');
readln(name2);
assign(sprav2,name2);
{$I-} reset (sprav2); {$I+}
if ioresult<>0 then
begin
writeln('imya faila *',name2,'* net');

fl:=false;
end
else
begin
reset(sprav2);
fl:=true;
end;
until fl;
namet:='temp2';
assign(temp,namet);
rewrite(temp);
m:=filesize(sprav2);

writeln('N':3,'nom.nomer':10,'name izdeliya':16,'cena':8);
writeln;
for j:=1 to m do
begin
read(sprav2,zap_sprav2[j]);
writeln('',j,'':3,zap_sprav2[j].nom_num:10,zap_sprav2[j].name_izdel:16,zap_sprav2[j].price:8);
end;
while flag=true do
begin
Write('Vvedite nomer redactiruemoy zapisi: ');{дальше этого момента прога не работает}
readln(i);
if (i<1) or (i>m) then
begin
WriteLn('Neverniy nomer!');
writeln;
writeln('Prodoljat vvod nomera? <y,n>');
readln(answer);
if (answer='n') or (answer='N') then
flag:=false;
close(sprav2);
close(temp);
erase(temp);
end
else
flag:=false;
end;
for j:=1 to i do
begin
read(sprav2,zap_sprav2[j]);
write(temp,zap_sprav2[j]);
end;
for j :=i to m-1 do
begin
zap_sprav2[j]:=zap_sprav2[j+1];
dec(m);
end;
seek(temp,filesize(temp));
for j:=i to m do
write(temp,zap_sprav2[j]);
close(sprav2);
close(temp);
erase(sprav2);
rename(temp,name2)
end;


процедура для корректировки отдельных строк записи

procedure corr_zap_sprav2;
var i,j,m:integer;
zap:ztsprav2;
s:integer;
s1,namet:string;
fl:boolean;
temp:file of tsprav2;
begin
repeat
writeln('vvedite imya faila-spravo4nika 2:');
readln(name2);
assign(sprav2,name2);
{$I-} reset (sprav2); {$I+}
if ioresult<>0 then
begin
writeln('imya faila *',name2,'* net');
fl:=false;
end
else
begin
reset(sprav2);
fl:=true;
end;
until fl;
namet:='temp3';
assign(temp,namet);
rewrite(temp);
writeln('Spravo4nik 2');
writeln('N':4,'nom.nomer':10,'name izdeliya':16,'cena':8);
writeln;
m:=filesize(sprav2);
for j:=1 to m do
begin
read(sprav2,zap_sprav2[j]);
write('',j,'':4,zap_sprav2[j].nom_num:10,zap_sprav2[j].name_izdel:16,zap_sprav2[j].price:8);
writeln;
end;
fl:=true;
repeat
begin
Writeln('--> Vvedite nomer redactiruemoy zapisi: ');{здесь тоже аналогично}
readln(i);
if (i<1) or (i>m) then
begin
WriteLn('Neverniy nomer!');
writeLn;
end
else
fl:=false;

end;
until fl=false;
m:=filesize(sprav2);
for j:=1 to i do
read(sprav2,zap_sprav2[j]);
write(temp,zap_sprav2[j]);
Write('Vvedite novoe zna4enie i najmite *ENTER*');
with zap_sprav2[i] do
begin
Write('Nom.nomer izdeliya: ',nom_num,'--->');
ReadLn(s);
nom_num:=s;
Write('Naimenovanie izdeliya: ',name_izdel,'--->');
ReadLn(s1);
name_izdel:=s1;
Write('cena izdeliya: ',price,'--->');
ReadLn(s);
price:=s;
seek(temp,filesize(temp));
write(temp,zap_sprav2[i]);
seek(temp,filesize(temp));
for j:=i+1 to m do
read(sprav2, zap_sprav2[j]);
write(temp, zap_sprav2[j]);
end;
close(sprav2);
close(temp);
erase(sprav2);
rename(temp,name2);
end;
end.

.
Помогите пожалуйста....уже замучалась.... mega_chok.gif

Сообщение отредактировано: what is -


--------------------
Завтра будет. Лучше???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


только вперед...
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Помогите пожалуйста....плиззз...
а то мне завтра сдавать эту прогу....
blink.gif


--------------------
Завтра будет. Лучше???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


ИМХО, твой код ваще надо с 0-ля писать ))
Где ты видела программу при запуске корректировки запсиси не выпустит пользователя из запроса ВВЕДИТЕ НОМЕР КОРРЕКТИРУЕМОЙ ЗАПИСИ, пока ты не введёшь номер и не откорректируешь.

Читаю твой код и просто глаза плывут )

Всё же по сути просто:
удаление - переписываешь нужные записи во второй фаил, а первый потом удаляешь, а второй переименовываешь
корректировка - переписываешь все записи до корректируемой во второй фаил, потом внего вписываешь как бы новую запись, а потом переписываешь все остальные записи. первый удаляешь, второй переименовываешь.


Procedure Ydalenie2;
Var
h:string;
n2,code,i,n1:integer;
help2:file of TZ2;
otvet:char;
Begin
clrscr;
vivodilka2; {тут выводит на экран все записи}
writeln('Хотите ли удалить запись(Y/N) ?');
otvet:=danet; {функция по определению 'y' или 'n'}
IF otvet in ['Y','y'] then
begin
writeln('Удаление записи:');
repeat
reset(spravochnik2);
n1:=0;
while not eof(spravochnik2) do
begin
read(spravochnik2,Zap2);
inc(n1);
end;
close(spravochnik2);
reset(spravochnik2);
assign(help2,'help');
rewrite(help2);
writeln('Какую запись вы хотите удалить?');
readln(h);
Val(h,n2,code);
If (n1 < n2) or (n2=0) then
begin
writeln('Такой записи не существует!!');
readkey;
close(spravochnik2);
close(help2);
end
Else
begin
i:=0;
repeat
inc(i);
If not (i=n2) then
begin
read(spravochnik2,Zap2);
write(help2,Zap2);
end
else read(spravochnik2,Zap2);
until eof(spravochnik2);
close(help2);
close(spravochnik2);
erase(spravochnik2);
rename(help2,'spravka2');
end;
clrscr;
vivodilka2;
writeln('Хотите ли вы удалить ещё одну запись(Y/N)?');
otvet:=DaNet;
until otvet in ['N','n'];
end;
End;



Вот тебе удаление, вроде всё просто и понятно всем...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
удаление - переписываешь нужные записи во второй фаил, а первый потом удаляешь, а второй переименовываешь
С типизированным-то файлом? Ну-ну...

Вместо того, чтобы последнюю запись перенести на место удаляемой, и сделать Truncate по предпоследней записи (пример - в поиске по слову Truncate) ты будешь все записи переносить в другой файл?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


только вперед...
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Эм..да....
сама пугалась своей проги( norespect.gif (

спасибо большое.....
будем переделывать)


--------------------
Завтра будет. Лучше???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 3.05.2007 19:17) *

С типизированным-то файлом? Ну-ну...

Вместо того, чтобы последнюю запись перенести на место удаляемой, и сделать Truncate по предпоследней записи (пример - в поиске по слову Truncate) ты будешь все записи переносить в другой файл?


мне мой способ просто понятен сразу стал )
Кстати, что-то я и не подумал про Truncate, а с ним жить-то легче, ты прав ) и процедура в разы сократится, вот токо уже лабу сделал как сделал, но спасиб, на будущее буду помнить smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 3:05
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name