Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль / курсовые / склад / курсовик.doc
Скачиваний:
32
Добавлен:
10.12.2013
Размер:
80.38 Кб
Скачать

Приложения

Листинги программы

program mm;

uses crt;

type

sklad=record

name:string;{Название товара}

kol:integer;{Количество}

zen:integer;{Цена}

end;

const

norm=$17;{цвет невыделенного пункта}

sel=$70; {цвет выделенного пункта}

n=7;{количество пунктов в меню}

var

menu:array[1..n] of string[30]; {название пунктов меню}

punkt:integer;{номер выделенного пункта}

ch:char;{введенный символ}

mass:array[1..100]of sklad;

knt:byte;{количество наименований товаров}

poisk,open:byte;{флажок}

buf:sklad;

newt:sklad;{переменная имеющая тип записи}

ff:file of sklad;

x,y:integer;{координаты первой строки меню}

procedure Menutoscr;{вывод меню на экран}

var i:integer;

begin

clrscr;

for i:=1 to n do

begin

gotoxy(x,y+i-1);

write(menu[i]);

end;

{textattr-предопределенная переменная,отвечающая за цвет фона

и символов}

textattr:=sel;{цветом выделенного пункта}

gotoxy(x,y+punkt-1);

write(menu[punkt]); {выделим строку меню}

textattr:=norm;

end;

procedure newtov;{ввод нового товара}

begin

clrscr;

writeln('<<<Новое поступление товара>>>');

writeln('Название---:');

writeln('Количество-: (шт)');

writeln('Цена за шт-: (руб)');

writeln('Подтверждение (д/н):');

gotoxy(13,2);readln(newt.name);

gotoxy(13,3);readln(newt.kol);

gotoxy(13,4);readln(newt.zen);

gotoxy(21,5);readln(ch);

end;

procedure openfile;{открытие файла}

var i:byte;

begin

write('Создать новый список или использовать старый (д/н)');

readln(ch);

i:=1;

if ch='д' then

begin

rewrite(ff);

open:=0;

end

else

begin

reset(ff);

open:=1;

repeat

read(ff,buf);

mass[i]:=buf;

i:=i+1;

until eof(ff);

end;

knt:=i-1;

end;

procedure spisok;

var i:byte;

begin

writeln('Наименование количество в шт цена за шт в руб');

for i:=1 to knt do

begin

gotoxy(1,1+i);write(mass[i].name);

gotoxy(25,1+i);write(mass[i].kol);

gotoxy(50,1+i);write(mass[i].zen);

end;

end;

procedure search;

var i:byte;name1:string[30];

begin

poisk:=0;

write('Введите название товара-');readln(name1);

for i:=1 to knt do

if mass[i].name=name1 then

begin

writeln('Наименование количество в шт цена за шт в руб');

gotoxy(1,1+i);write(mass[i].name);

gotoxy(25,1+i);write(mass[i].kol);

gotoxy(50,1+i);write(mass[i].zen);

poisk:=1;

end;

end;

procedure deletetov;{удаление товара}

var i:byte;name1:string[30];

begin

poisk:=0;

write('Введите название товара-');readln(name1);

rewrite(ff);

for i:=1 to knt do

if mass[i].name=name1 then

begin

write('Товар найден! Удалить его из списка (д/н)-');readln(ch);

if ch<>'д' then

begin

writeln('Удаление отменено!');

write(ff,mass[i]);

end

else writeln('Элемент удалён!');

poisk:=1;

end

else write(ff,mass[i]);

if poisk=1 then begin

reset(ff);

open:=1;

i:=1;

repeat

read(ff,buf);

mass[i]:=buf;

i:=i+1;

until eof(ff);

knt:=i-1;

end;

end;

procedure sortirovka;

var i,f:byte;

begin

repeat

f:=0;

for i:=1 to knt do

begin

if (mass[i].name>mass[i+1].name) and (i<=knt-1) then

begin

buf:=mass[i];

mass[i]:=mass[i+1];

mass[i+1]:=buf;

f:=1;

end;

end;

until f=0;

rewrite(ff);

for i:=1 to knt do

begin

write(ff,mass[i]);

end;

writeln('Готово!');

end;

{основная программа}

Begin

clrscr;

menu[1]:='Список товаров на складе';

menu[2]:='Поиск товара';

menu[3]:='Новое поступление';

menu[4]:='Удаление из списка';

menu[5]:='Сортировать';

menu[6]:='Очистить список';

menu[7]:='Выход';

punkt:=1;x:=5;y:=5;textattr:=norm;

assign(ff,'sklad.dat');

open:=0;

openfile;

Menutoscr;{обращение к процедуре}

repeat

ch:=Readkey;

if ch=chr(0) then

begin

ch:=ReadKey;

case ch of

chr(80): {стрелка вниз}

if punkt<n then

begin

gotoxy(x,y+punkt-1);{курсор на место предыдущего пункта}

write(menu[punkt]);{печать предыдущего пункта}

punkt:=punkt+1;

textattr:=sel;{цвет для текущего пункта}

gotoxy(x,y+punkt-1);{курсор на текущий пункт}

write(menu[punkt]);{печать текущего пункта}

textattr:=norm; {цвет для пункта который будет считаться при сле-

дующем перемещении курсора предыдущим}

end;

chr(72):{стрелка вверх}

if (punkt<=n) and (punkt<>1) then

begin

gotoxy(x,y+punkt-1);

write(menu[punkt]);

punkt:=punkt-1;

textattr:=sel;

gotoxy(x,y+punkt-1);

write(menu[punkt]);

textattr:=norm;

end;

end; {case of}

end

else

if ch=chr(13) then {нажата клавиша <Enter>}

begin

case punkt of

1:

begin

clrscr;

if open=0 then writeln('Склад пуст!')

else spisok;

readln;

end;

2:

begin

clrscr;

if open=0 then

begin

writeln('Склад пуст!');

end

else

begin

search;

if poisk=0 then writeln('Товар не найден!');

end;

readln;

end;

3:

begin

clrscr;

repeat

newtov;

if ch='д' then

begin

mass[knt+1]:=newt;

knt:=knt+1;

write(ff,newt);

end;

write('Нажмите <Enter> для продолжения или любую клавишу для выхода в меню');

ch:=readkey;

until (ch=chr(27)) or (ch<>chr(13));

open:=1;

end;

4:begin

clrscr;

if open=0 then

begin

writeln('Склад пуст!');

end

else

begin

deletetov;

if poisk=0 then writeln('Товар не найден!');

end;

readln;

end;

5:begin

clrscr;

if open=0 then

begin

writeln('Склад пуст!');

end

else sortirovka;

readln;

end;

6:begin

clrscr;

if open=0 then

begin

writeln('Склад пуст!');

readln;

end

else openfile;

end;

7:ch:=chr(27); {выход}

end; {case of}

Menutoscr;

end;

until ch=chr(27);{27код <Esc>}

close(ff);

End.

Соседние файлы в папке склад