1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Задача состоит в следущем: создать многоуровневую диалоговую программу, с помощью которой создается основной файл и 2 файла справочника. Для основного файла надо предусмотреть создание нового, открытие существующего, печать, также его редактирование(добавление, удаление записей) и сортировку входных данных по первому компоненту.
В общем проблема возникла с основным файлом,т.к. отсортировать или отредактировать у меня его не получилось...никак...
вот основная прога, которая выводит основное меню и запускает модуль
Program menu1; Uses modmenu111;
var choice,count,code:integer; flag:boolean; answer:char; choice1:string;
begin writeln(' Laboratornaya rabota 2 '); writeln(' Variant 4 ');
writeln; flag:=true; while flag=true do begin writeln('..................MENU...................'); writeln('..1. Vedenie osnovnogo faila ..'); writeln('..2. Vedenie spravo4nikov ..'); writeln('..3. Formirovanie vedomostei ..'); writeln('..4. Vihod ..'); writeln('..........................................'); writeln; writeln('vash vibor:');
count:=0; repeat readln(choice1); val(choice1,choice,code); if (code<>0)then writeln ('vvedeno ne 4islo'); count:=count+1; if count>3 then begin writeln ('4islo popitok is4erpano'); halt; end until code=0; Case choice of 1:begin podmenu1;; end; 2:begin podmenu2; end; 3:begin podmenu3; end; 4:begin writeln('Vi deistvitelno hotite viyti iz programmi? <y\n>'); readln(answer); if answer='y' then flag:=false; end else writeln('Oshibka!!!Vibran nevirnyi punkt menu:',choice); end; end; end.
.
вот сам модуль(выкладываю только процедуры на основной файл)
unit modmenu1; {модуль всех процедур для пунктов главного меню и всех подменю} interface type tosnfile=record {основной файл} cod_stock:integer; cod_ceh:integer; nom_num:integer; data:string; kol_vo:integer end; procedure podmenu1; procedure vvodfile; procedure printfile; procedure drawtabfile; procedure drawlegs; procedure sort(var f:atosnfile;n:byte); implementation --------------------------------{подменю для первого пункта меню}----------------------------------------------- procedure podmenu1; var choice,count,code:integer; flag:boolean; answer:char; choice1:string; begin flag:=true; while(flag=true) do begin writeln('.1.Vedenie osnovnogo faila............'); writeln('......................................'); writeln('.1.1 Sozdanie novogo faila .'); writeln('.1.2 Korrektirovka osnovnogo faila .'); writeln('.1.3 Prosmotr osnovnogo faila .'); writeln('.1.4 Pe4at osnovnogo faila .'); writeln('.1.5 Vozvrat v glavnoe menu .'); writeln('......................................'); writeln; writeln('vash vibor:'); count:=0; repeat readln(choice1); val(choice1,choice,code); if (code<>0)then writeln ('vvedeno ne 4islo'); count:=count+1; if count>3 then begin writeln ('4islo popitok is4erpano'); halt; end until code=0; case choice of 1:begin vvodfile; end; 2:begin end; 3:begin printfile; end; 4:begin printfile; end; 5:begin flag:=false; end else writeln('Oshibka!!!Vibran neverniy punkt menu:',choice); end; end; end;
------------------- {процедура создания нового основного файла}------------------------------- procedure vvodfile; var osnfile:file of atosnfile; zap:atosnfile; namefile:string; flajok:boolean; answer:char; i,n:byte; begin writeln('vvedite imya osnovhogo faila(s rasshireniem .txt):'); readln(namefile); assign(osnfile,namefile); rewrite(osnfile); flajok:=true; writeln('Vvedite kol-vo zapisey, kotorie sobiraetes vvodit:'); readln(n); for i:=1 to n do with zap[i] do begin writeln('ZaPiS N ',i); writeln('>Vvedite kod sklada:'); readln(cod_stock); writeln('>vvedite kod ceha-izgotovitelya:'); readln(cod_ceh); writeln('>vvedite nomen. nomer izdeliya:'); readln(nom_num); writeln('>data postupleniya /ddmmyy/ :'); readln(data); writeln('>vvedite kol-vo izdelii:'); readln(kol_vo); write(osnfile,zap); writeln('vvod dannih zavershen? <y/n>: '); readln(answer); if answer='y' then Break; end; close(osnfile); assign(osnfile,namefile); reset(osnfile); sort(zap,n); write(osnfile,zap); close(osnfile); end; ---------------------------{процедура распечатки(вывода на экран) основного файла}--------------------------------- procedure printfile; var namefile:string; osnfile:file of tosnfile; zap:tosnfile; begin writeln ('Vvedite imiya faila dlya pe4ati'); readln (namefile); assign(osnfile,namefile);
reset(osnfile); writeln('Pe4at faila: ',namefile); drawtabfile; repeat read(osnfile,zap); writeln('*',zap.cod_stock:12,'*',zap.cod_ceh:10,'*', zap.nom_num:10,'*',zap.data:8,'*',zap.kol_vo:8,'*'); drawlegs; until (EOF(osnfile)); close(osnfile); writeln; end; --------------------------{процедура рисует подобие таблицы}------------------------------------------------ procedure drawtabfile; begin writeln('******************************************************'); writeln('* KOD * KOD CEHA * NOMEN. * DATA * KOL-VO *'); writeln('* SKLADA * IZGOTOV. * NOMER * * IZDELIY*'); writeln('******************************************************'); end; -------------------------------{процедура рисует линии-ограничители}----------------------------------------------- procedure drawlegs; begin writeln('******************************************************'); end; -------------------------------{процедура сортировки по коду склада}---------------------------------------------- вот в ней то и проблема procedure sort(var f:atosnfile;n:byte); var i:byte; zap:tosnfile; flag:boolean; begin repeat flag:=true; for i:=1 to n-1 do if not (f[i].cod_stock >= f[i+1].cod_stock) then begin zap:=f[i]; f[i]:=f[i+1]; f[i+1]:=zap; flag:=false; end; until flag; end; end.
.
все на что меня хватило.Дальше - мозговой затык.... Отредактировать файл уже нет мыслей никаких.... Подскажите, пожалуйста....уже замучалась....
Сообщение отредактировано: what is - 4.04.2007 21:22
Во первых что за тип atosnfile ? Что-то я его описания в упор не вижу Во вторых в процедуре ввода, ты в цикле считываешь записи поэлементно zap[i], и там-же в цикле зачемто пытаешься писать каждый раз весь массив в файл.
Либо уж записывай массив в файл поэлементно, либо сначала введи все записи в массив а потом его полностью запиши файл, судя по всему тебе нужен второй вариант ибо файл у тебя описан как file of atosnfile, а atosnfile - подозреваю что это массив записей.
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'