Запустим файл «Pavlyuchkov.exe», появится окно:
Выберите пункт №1 и введите исходные данные, после чего с ними можно будет произвести одно из действий:
2.Вывод исходных и расчётных данных на экран;
К удобству пользователя программа имеет функцию сохранения данных в файл для последующего использования. Для сохранения выберите пункт №3, введите имя сохраняемого файла, если файл с таким именем уже существует, программа спросит вас: Дописать данные в файл? Для согласия введите “Д”, в противном случае введите “Н” и прежде хранящаяся в файле информация будет заменена новыми данными. Для загрузки ранее сохранённой информации выберите пункт №4, ведите имя нужного файла, в случае отсутствия файла с таким именем, программа сообщит об ошибке.
Пункт №5. Сохранение в текстовый файл. Версия для печати. По окончании сохранения появится сообщение “Отчёт готов”. Текстовый файл “pe4at” вы найдёте в папке с данной программой.
Пункт №6.Вывод на экран данных запрашиваемых пользователем. Эта функция позволяет пользователю отфильтровать все данные и вывести на экран только искомые. После выбора этой функции введите значение минимальной стоимости инвентаря необходимого вам.
Функция под пунктом №7 позволяет произвести сортировку гр.3 по убыванию.
Пункт №8. Функция вывода максимального и минимального значений гр.4;
Удаление строки с соответствующим порядковым номером в случае неверного ввода данных. Для этого выберите пункт №9 и укажите порядковый номер строки, которую необходимо удалить.
10.Выход из программы.
Внимание: ключевой клавишей в данной программе является «Enter»,
ее следует нажимать при каждом запросе для дальнейшей работы программы.
Внимание: при запуске программы нужно расширить таблицу, для этого нажмите правой кнопкой мыши на вкладку программы на панели пуск, выберите графу “Свойства”, закладку “Расположение ” и установите ширину окна 500.
4.Исходный код
program Pavlyuchkov;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
mebel=record
inum:word;
name:string[10];
cena:real;
pi:real;
ost:extended;
zos:string[10];
end;
mas=array[1..200]of mebel;
var
n,vsm:byte;
a:mas;
f:file of mebel;
ft:text;
function rus(a:string):string;
var i:byte;
begin
for i:=1 to length(a) do
begin
if (a[i]<='п') and (a[i]<>' ') and (a[i]<>':') and (a[i]<>'.')and (a[i]<>'"') and (a[i]<>'!') and(a[i]<>'/') then
a[i]:=chr(ord(a[i])-64);
if (a[i]>='р') and (a[i]<>' ') and (a[i]<>':') and (a[i]<>'.')and (a[i]<>'"') and (a[i]<>'!') and(a[i]<>'/') then
a[i]:=chr(ord(a[i])-16);
end;
rus:=a;
end;
function rus1(a:string):string;
var i:byte;
begin
for i:=1 to length(a) do
begin
if (a[i]<='п') and (a[i]<>' ') and (a[i]<>':') and (a[i]<>'"') and (a[i]<>'!') and(a[i]<>'/')and (a[i]<>',') then
a[i]:=chr(ord(a[i])+64);
if (a[i]>='р') and (a[i]<>' ') and (a[i]<>':') and (a[i]<>'"') and (a[i]<>'!') and(a[i]<>'/') and (a[i]<>'"') then
a[i]:=chr(ord(a[i])+16);
end;
rus1:=a;
end;
procedure vvod(var a:mas;var n:byte);
begin
inc(n);
write (rus('Введите инвентарный номер: '));
readln (a[n].inum);
write (rus('Введите наименование мебели: '));
readln (a[n].name);
write (rus('Введите стоимость: '));
readln (a[n].cena);
write (rus('Введите процент износа: '));
readln (a[n].pi);
a[n].ost:=a[n].cena-a[n].cena*a[n].pi/100;
if a[n].pi>80 then a[n].zos:= rus('Списать');
writeln; writeln;
end;
procedure vivod(a:mas;n:byte);
var i:byte;
icena:real; iost:extended;
begin
icena:=0;
iost:=0;
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('Инвентарный'),'|',rus('Наименование'),'| ',rus('Цена'),' | ',rus('Процент'),' |',rus('Остаточная'),' | ',rus('Заключение'), ' |');
writeln ('| ',rus('номер'),' | ',rus('мебели'),' | ',rus('руб'),' | ',rus('износа'),' | ',rus('стоимость'),' | ',rus('о списании'), ' |');
writeln ('| ', ' | ', ' | ', ' | ', ' | ',rus('руб'),' | ', ' |');
writeln ('| ', ' | ', ' | ', ' | ', ' | ', ' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
for i:= 1 to n do begin
write ('|',a[i].inum:10,' |');
write (a[i].name:12,'|');
write (a[i].cena:8:2,' |');
write (a[i].pi:8:2,' |');
write (a[i].ost:8:2,' |');
writeln (a[i].zos:9,' |');
icena:=icena+a[i].cena;
iost:=iost+a[i].ost;
end;
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('Итого '),'| |',icena:8:2,' | ', ' |',iost:8:2,' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('В среднем '),'| |',icena/n:8:2,' | ', ' |',iost/n:8:2,' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+'); writeln; writeln;
end;
procedure save(a:mas;n:byte);
var i:byte; otvet:char; name:string;
Begin
writeln('Введите имя файла для сохранения');
readln(name);
assign(f,name);
{$i-}
reset(f);
{$i+}
if IOResult=0 then
Begin
writeln('Дописать данные в файл д/н ');
readln(otvet);
if otvet= 'д' then seek(f,filesize(f))
else rewrite(f);
End
Else
rewrite(f);
for i:=1 to n do
write(f,a[i]); { запись в файл из массива}
close(f);
writeln ('Данные сохранены');
writeln;
end;
procedure open(var a:mas;var n:byte);
var name:string;
Begin
writeln (rus('Введите имя сохраненного файла'));
readln(name);
assign(f,name);
{$i-}
reset(f);
{$i+}
if ioresult<>0 then writeln(rus('Ошибка открытия'))
Else
Begin
n:=0;
while (not eof(f)) and (n<200) do
Begin
inc(n);
read(f,a[n]); { запись в массив из файла}
end;
close(f);
end;
vivod(a,n);
end;
procedure otchet(a:mas;n:byte);
var i:byte;
icena:real;
iost:extended;
Begin
icena:=0;
iost:=0;
assign(ft,'pe4at.txt');
rewrite(ft);
writeln (ft,' ****************************');
writeln (ft,' Ведомость на списание мебели');
writeln (ft,' ****************************');
writeln;
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
writeln (ft,'|Инвентарный|Наименование| Цена | Процент |Остаточная | Заключение |');
writeln (ft,'| номер | мебели | руб | износа | стоимость | о списании |');
writeln (ft,'| | | | | руб | |');
writeln (ft,'| | | | | | |');
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
for i:=1 to n do begin
write (ft,'|',a[i].inum:10,' |');
write (ft,rus1(a[i].name):12,'|');
write (ft,a[i].cena:8:2,' |');
write (ft,a[i].pi:8:2,' |');
write (ft,a[i].ost:8:2,' |');
writeln (ft,rus1(a[i].zos):9,' |');
icena:=icena+a[i].cena;
iost:=iost+a[i].ost;
end;
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
writeln (ft,'|Итого | |',icena:8:2,' | |',iost:8:2,' | |');
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
writeln (ft,'|В среднем | |',icena/n:8:2,' | |',iost/n:8:2,' | |');
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
write (rus('Отчет готов')); writeln; writeln;
end;
procedure filtr(a:mas;n:byte);
var
m:word;
fl:boolean;
i:byte;
icena:real;
iost:extended;
begin
write(rus('Введите минимальную стоимость товара '));
readln (m);
fl:=false;
for i:=1 to n do
if (a[i].cena>m) and (not fl) then
begin
icena:=0;
iost:=0;
fl:=true;
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('Инвентарный'),'|',rus('Наименование'),'| ',rus('Цена'),' | ',rus('Процент'),' |',rus('Остаточная'),' | ',rus('Заключение'), ' |');
writeln ('| ',rus('номер'),' | ',rus('мебели'),' | ',rus('руб'),' | ',rus('износа'),' | ',rus('стоимость'),' | ',rus('о списании'), ' |');
writeln ('| ', ' | ', ' | ', ' | ', ' | ',rus('руб'),' | ', ' |');
writeln ('| ', ' | ', ' | ', ' | ', ' | ', ' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
write ('|',a[i].inum:10,' |');
write (a[i].name:12,'|');
write (a[i].cena:8:2,' |');
write (a[i].pi:8:2,' |');
write (a[i].ost:8:2,' |');
writeln (a[i].zos:9,' |');
icena:=icena+a[i].cena;
iost:=iost+a[i].ost;
end
else
if a[i].cena>m then
begin
write ('|',a[i].inum:10,' |');
write (a[i].name:12,'|');
write (a[i].cena:8:2,' |');
write (a[i].pi:8:2,' |');
write (a[i].ost:8:2,' |');
writeln (a[i].zos:9,' |');
icena:=icena+a[i].cena;
iost:=iost+a[i].ost;
end;
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('Итого '),'| |',icena:8:2,' | ', ' |',iost:8:2,' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('В среднем '),'| |',icena/n:8:2,' | ', ' |',iost/n:8:2,' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln; writeln;
end;
procedure sort (a:mas; n:byte);
var
i,j:byte; c:mebel;
begin
for i:=1 to n do
begin
for j:=i to n do
if a[j].cena >= a[i].cena then
begin
c:=a[i];
a[i]:=a[j];
a[j]:=c;
end;
end;
vivod(a,n);
end;
procedure max_min(var a:mas; n:byte);
var
max,min:real;
i:byte;
begin
max:=0;
for i:=1 to n do
begin
if a[i].pi>max then max:=a[i].pi;
end;
writeln(rus('Максимальный процент износа'),': ',max:5:2);
writeln;
min:=max;
for i:=1 to n do
begin
if a[i].pi<min then
min:=a[i].pi;
end;
writeln(rus('Минимальный процент износа'),': ',min:5:2);
writeln;
end;
procedure del(var a:mas;var n:byte);
var m,i,j:byte;
begin
writeln(rus('Введите'),' ',rus('номер'),' ',rus('удаляемой'),' ',rus('строки'));
readln(m);
for i:=1 to n do
begin
if m=i then
begin
for j:=m to n do
a[j]:=a[j+1];
end;
end;
n:=n-1;
vivod(a,n);
end;
begin
writeln ('****************************');
writeln (rus('Ведомость на списание мебели'));
writeln ('****************************');
writeln;
n:=0;
repeat
writeln(rus('Главное меню'));
writeln('1.',rus('Ввод данных'));
writeln('2.',rus('Вывод списка'));
writeln('3.',rus('Сохранить данные'));
writeln('4.',rus('Загрузить данные'));
writeln('5.',rus('Версия для печати'));
writeln('6.',rus('Поиск по критерию'));
writeln('7.',rus('Сортировка по цене'));
writeln('8.',rus('Макс'),'/',rus('мин процент износа'));
writeln('9.',rus('Удаление строки'));
writeln('10.',rus('Выход'));
write(rus('Выберите номер пункта'));write(': ');
readln (vsm);
writeln; writeln;
case vsm of
1:vvod(a,n);
2:vivod(a,n);
3:save (a,n);
4:open (a,n);
5:otchet (a,n);
6:filtr (a,n);
7:sort (a,n);
8:max_min (a,n);
9:del(a,n);
10:writeln (rus('Ура! '),'=]');
end;
until vsm=10;
readln;
end.