Цитата:
В овощном магазине имеется информация об ассортименте овощей, включающая: название (капуста, картофель, лук, чеснок, морковь, свёкла), а также цену, дату поступления и количество. Вам необходимо сделать следующее:
1. Обеспечить приём данных с клавиатуры в режиме диалога и запись их в файл.
2. После приёма данных программа должна рассортировать введённые данные по названию и записать их в различные файлы в порядке убывания стоимости, а при равенстве - в порядке возрастания количества.
3. После этого необходимо проверить наличие файлов на диске и распечатать список имеющихся файлов с краткими пояснениями о том, что находится в каждом файле. Кроме того, должна быть обеспечена возможность перехода в начало программы для добавления новых данных, а также возможность окончания работы с программой.
4. Затем должна быть обеспечена возможность выбора интересующего файла и распечатка его содержимого в окне белого цвета красными буквами (весь остальной экран должен быть голубого цвета).
5. После просмотра интересующего файла необходимо вернуться к пункту 3.
|
Очевидное решение (выглядит не супер, никаких доп. проверок на корректность данных нет - только выполнение задания - дорисуйте на свой вкус

):
Код:
program veg_shop; {Made by Paul Safre aka CPUser}
uses Crt;
type
vgtbl=record
tname:string[10];
pric,amou:integer;
dat:string[10];
end;
var
vti:array[1..6] of vgtbl;
curr,c2:byte;
sa,sb:integer; {sorting purposes}
sc:vgtbl; {same p. - 4 swap}
sf:string[14]; {a string for filenames}
f1:file of vgtbl;
label
inp,einp,chk,rk1,rk2;
begin
{Stage 1 ;)}
curr:=0;
TextColor(white);
TextBackground(black);
ClrScr;
writeln('Vegetable shop. v.1.0b');
writeln('______________________');
writeln('');
inp: inc(curr,1);
writeln('');
write('Veg.type (0 for none):');
readln(vti[curr].tname);
if vti[curr].tname='0' then
begin
curr:=curr-1;
goto einp;
end;
write('Its price:');
readln(vti[curr].pric);
write('Its delivery date:');
readln(vti[curr].dat);
write('Its amount:');
readln(vti[curr].amou);
writeln('');
goto inp;
einp: assign(f1,'vgtbl_db');
rewrite(f1);
for c2:=1 to curr do
write(f1,vti[c2]);
close(f1);
{Stage 2}
{Name sorting}
for sa:=1 to curr-1 do
for sb:=sa+1 to curr do
begin
if vti[sa].tname>vti[sb].tname then
begin
sc:=vti[sa];
vti[sa]:=vti[sb];
vti[sb]:=sc
end; {of IF}
end;
{Further sorting}
for sa:=1 to curr-1 do
for sb:=sa to curr do
begin
if vti[sa].pric<vti[sb].pric then
begin
sc:=vti[sa];
vti[sa]:=vti[sb];
vti[sb]:=sc
end; {of IF}
if (vti[sa].pric=vti[sb].pric) and (vti[sa].amou>vti[sb].amou) then
begin
sc:=vti[sa];
vti[sa]:=vti[sb];
vti[sb]:=sc
end; {of IF}
end;
for sa:=1 to curr do
begin
assign(f1,vti[sa].tname+'.dat');
rewrite(f1);
write(f1,vti[sa]);
close(f1);
end;
{Stage3}
chk: for sa:=1 to curr do
begin
writeln('');
sf:=vti[sa].tname+'.dat';
assign(f1,sf);
reset(f1);
read(f1,sc);
close(f1);
write(sf+' was');
TextColor(green);
write(' successfully found ');
TextColor(white);
writeln('with the information about '+sc.tname+' in it!');
end;
rk1: writeln('');
writeln('__________________');
writeln('');
writeln('What would you like to do now?');
writeln('[q] - quit the program');
writeln('[i] - add some products');
writeln('[p] - print a file (in the console)');
sf:=readkey;
if sf='q' then halt(0);
if sf='i' then goto inp;
if sf='p' then
begin
for sa:=1 to curr do
begin
write(sa);
writeln(' - '+vti[sa].tname+'.dat');
end; {of FOR}
rk2: sf:=readkey;
val(sf,sa,sb);
if (sa<1) or (sa>curr) then goto rk2;
TextBackground(blue);
ClrScr;
TextColor(red);
window(20,7,50,21);
GotoXY(1,1);
TextBackground(white);
ClrScr;
writeln('');
writeln('Product name:');
writeln(vti[sa].tname);
writeln('');
writeln('Price:');
writeln(vti[sa].pric:2);
writeln('');
writeln('Delivery date:');
writeln(vti[sa].dat);
writeln('');
writeln('Amount:');
writeln(vti[sa].amou:2);
writeln('');
write('[Strike any key to continue]');
readkey;
window(1,1,80,25);
TextBackground(black);
ClrScr;
TextColor(white);
end;
goto rk1;
end.
P.S. В приложении откомпиллированная программка