Автоматическое рабочее место для работника складаРефераты >> Программирование и компьютеры >> Автоматическое рабочее место для работника склада
Функция организует главное меню в верхней строке экрана.
Устанавливает параметры цвета, выводит на экран массив с переменными меню т.е. названиями меню. Опрашивает клавиатуру на нажатие клавиши «Влево», «Вправо», «Enter» выполняет соответствующие этим клавишам команды. Затем если было нажато «Esc» функция принимает значение меньшее 1 и затем в головной программе происходит выход.
Процедура Sortirovka;
Сортирует данные по заданной колонке.
Организуется цикл на все позиции массива базы. База переносит данные в стороннюю базу. Выбирает столбец сортировки сравнивает со сторонней базой если больше то переносит в стороннюю базу запоминает позицию. В конце цикла переставляет позиции основной базы.
Описание алгоритма работы программы.
Очищается экран выводится меню для указания месторасположения и названия файла базы по умолчанию это «С:\base.dat» затем проверяется создан ли файл если нет то создается. Организуется цикл до конца файла переписываются данные в массив базы. Обнуляются переменные. организуется меню по данным функции Vstroka затем происходи выбор с помощью оператора Case по которому осуществляются переходы. В случае «1» прихода функции Vstroka выводится листинг данных базы и заголовков, организация движения курсора по строкам базы при помощи процедуры Vivlist. В случае результата «2» формируется окно с тенью «Пришло», заполняется окно с помощью процедуры Prishlo по текущей позиции курсора экрана и листинга. «3» формируется окно «Расход», заполняется с помощью процедуры Ushlo. «4» организуется окно «Найти наименование» вводится текст с помощью функции Edtext. сравнивается с наименованиями базы если находит устанавливает курсор на это место. Если не находит выводит сообщение и устанавливает на конечную позицию. «5» Окно сортировки. Выполняется процедура Sortirovka. При других значениях функции Vstroca происходит запись файла базы, закрытие файла.
III.
Program kursovoi;
uses crt;
type basskl = record
naim:string[40];
kol:integer;
price:single;
kol_p:integer;
date_p:string[8];
kol_r:integer;
date_r:string[8];
end;
var f:file of basskl;
List:array[0 255] of basskl;
Schet:Integer;
curs,stran,i,mcurs:integer;
k:char;
Res,da,er,seter:Integer;
Tx,files:String;
key:boolean;
const
mnu:array[1 6] of string[13]=(
' Ввод ',
' Приход ',
' Расход ',
' Найти ',
' Сортировка ',
' Выход ');
function Probel(Text:String;Len:Integer):String;
begin
While length(Text)<Len do Text:=Text+' ';
Probel:=copy(Text,1,len)
end;
function Edtext(x,y:Integer; Text:String;Len:Integer;var key:boolean):String;
var c:char;
begin
key:=true;
Edtext:='';
repeat
gotoxy(x,y);
write(Text);
write(Probel('',len));
gotoxy(x,y);
write(Text);
c:=Readkey;
if c=#8 then delete(Text,length(Text),1);
if c in ['A' 'z',' ','.','0' '9','А' 'я','-'] then Text:=Text+c;
Text:=copy(Text,1,len);
until (c=#27) or (c=#13);
if c=#13 then Edtext:=Text else key:=false;
end;
function Cifri(x,y:Integer; Text:String;Len:Integer;var key:boolean):String;
var c:char;
begin
key:=true;
Cifri:='';
repeat
gotoxy(x,y);
write(Text);
write(Probel('',len));
gotoxy(x,y);
write(Text);
c:=Readkey;
if c=#8 then delete(Text,length(Text),1);
if c in ['.','0' '9','-'] then Text:=Text+c;
Text:=copy(Text,1,len);
until (c=#27) or (c=#13);
if c=#13 then Cifri:=Text else key:=false;
end;
procedure Prishlo(posiz:integer);
var Tx:String;
er:integer;
key:Boolean;
kl:integer;
begin
clrscr;
With List[Posiz] do begin
writeln(' Приход');
writeln(' Количество ->');
writeln(' Дата прихода ДД.ММ.ГГ->');
val(Cifri(25,2,'',6,key),kl,er); if NOT key then exit;
kol_p:=kol_p+kl; kol:=kol+kl;
Date_p:=Cifri(25,3,'',8,key); if NOT key then exit;
end;
end;
procedure Ushlo(posiz:integer);
var er:integer;
key:Boolean;
kl:integer;
begin
clrscr;
With List[Posiz] do begin
writeln(' Расход');
writeln(' Количество ->');
writeln(' Дата расхода ДД.ММ.ГГ->');
val(Cifri(25,2,'',6,key),kl,er); if NOT key then exit;
kol_r:=kol_r+kl; kol:=kol-kl;
Date_r:=Cifri(25,3,'',8,key); if NOT key then exit;
end;
end;
procedure Vvodnov;
var Tx:String;
er:integer;
key:Boolean;
begin
clrscr;
With List[Schet] do begin
writeln(' Новый товар');
writeln(' Наименование товара :');
writeln(' Количество :');
writeln(' Цена :');
writeln(' Дата прихода ДД.ММ.ГГ:'); {readln(date_p);}
Naim:=Edtext(25,2,'',20,key); if NOT key then exit;
val(Cifri(25,3,'',6,key),kol,er); if NOT key then exit;
kol_p:=kol;
val(Cifri(25,4,'',10,key),price,er); if NOT key then exit;
Date_p:=Cifri(25,5,'',8,key); if NOT key then exit;
inc(Schet);
end;
end;
procedure Edzapic(posiz:integer);
var Tx:String;
er:integer;
key:Boolean;
begin
clrscr;
With List[posiz] do begin
writeln(' Редактирование товара');
writeln(' Наименование товара :');
writeln(' Цена :');
Tx:=Edtext(25,2,Naim,20,key); if key then Naim:=tx;
str(price:0:2,tx);
tx:=Cifri(25,3,tx,10,key); if key then val(tx,price,er);
end;
end;
function vstroca(var curs:integer):integer;
var i:integer;
begin
Textbackground(15);
TextColor(0);
gotoxy(1,1); write(Probel('',80));
for i:=0 to 5 do
begin
gotoxy(i*13+1,1); write(mnu[i+1]);
end;
Textbackground(0);
TextColor(14);
gotoxy((curs-1)*13+1,1); write(mnu[curs]);
repeat
k:=readkey;
Textbackground(15);
TextColor(0);
gotoxy((curs-1)*13+1,1); write(mnu[curs]);
if k=#0 then k:=readkey;
case k of
#75: if curs>1 then dec(curs) else curs:=6;
#77: if curs<6 then inc(curs) else curs:=1;
end;
Textbackground(0);
TextColor(14);
gotoxy((curs-1)*13+1,1); write(mnu[curs]);
if k=#13 then vstroca:=curs;
until (k=#27) or (k=#13);
if k=#27 then vstroca:=-1;
end;
function VIVSTR(nstr:integer):String;
var Skol,sprice,summ,
Pkol,Rkol:String[10];
begin
VIVSTR:='';
if (nstr<Schet) and (nstr>=0) then
With List[nstr] do
begin
str(kol,skol);
str(price:9:2,sprice);
str(price*kol:9:2,summ);
str(kol_p,pkol);