РефератыИнформатикаАвАвтоматическое рабочее место для работника склада

Автоматическое рабочее место для работника склада













Кафедра общественно образовательных предметов



Выполнила:
студентка гр. ВМ1-99
Н.В. Позднякова

Проверил:


старший преподаватель


А.И. Волков



г. Чайковский, 2000 г.


ВВедение.

Данная программа автоматизированного рабочего места разработана для работников складских помещений, естественно если у них имеется компьютер классом не ниже Pentium. Сейчас на рынке программного обеспечения появляются все больше и больше различных программ для работы не только со складом, но и различные другие программные средства автоматизированного рабочего места, но стоимость их лицензионных копий доходит порой до нескольких десятков тысяч, а моя программа может быть конечно маленько еще «сыровата», но в процессе работы с нею её можно «довести ее до ума» и все это лишь за пятерку по программированию цена не велика за произведение программного искусства. Каковы её плюсы: ну это естественно простота и понятность (для русского человека) интерфейса программы, что не требует дополнительного обучения или прохождения специальных курсов, особенно для женщин, работающих на складах и не посвященных в азы компьютеров и программного обеспечения; не требовательность к системным ресурсам машины; легкость ввода и отслеживания; простота резервирования базы данных (всего 1 файл), что не маловажно для такой программы. При написании и разработке курсового проекта я научился работать с Borland Pascal, Microsoft Windows 95OSR2, Microsoft Word 97 SR-2 которые использовались для работы над курсовым проектом, научился использовать справку и другие функции Borland Pascal при этом даже разобрался с английским языком и использованием электронных словарей переводчиков таких как Promt, Stylus, Magic Gooddy 98. Огромное спасибо Волкову А.И. – за отличное преподавание предметов, Billу Gaits – за то что он умеет зарабатывать деньги собственным умом, Мерзлякову Д.С. – за поддержку в трудную минуту, Барышеву А.А. – за техническую поддержку, Русских А.И. – за программную поддержку, Казакову В.С. – за разрешение работать на компьютере, Sting, Queen, и другим за хорошую музыку во время работы над курсовым.


I. Задание.


Составить программу автоматического рабочего места для работы со складом.


Программа должна предоставлять пользователю возможность:


1. Вводить новый товар, указывая следующие параметры


-Наименование;


-Количество;


-Цену;


-Дату поступления.


2. Осуществлять поиск товара по наименованию и выдавать его параметры.


3. Помечать выбывший товар, указывая дату выдачи.


4. Выводить список имеющегося товара с возможностью сортировки по любому параметру.


5. Выводить список выбывшего товара с возможностью сортировки по любому параметру.


6. Выдавать общую статистическую характеристику:


-Общая стоимость имеющегося товара;


-Количество имеющегося товара;


-Количество выбывшего товара.


7. Сохранять и восстанавливать всю информацию АРМ с диска.


II. описание переменных и алгоритма работы программы.


Описание переменных.


-basskl – основная запись с необходимыми переменными это:


-naim – наименование товара;


-kol – количество товара;


-price – цена товара;


-kol_p – количество пришедшего товара;


-kol_r – количество товара который ушел;


-date_p – дата прихода товара;


-date_r – дата расхода товара.


-f – file базы слада;


-list – массив данных базы;


-schet – cчетчик;


-curs – показатель позиции;


-stran – счетчик позиции курсора;


-i – переменная использования;


-mcurs – переменная начальной позиции меню;


-k –переменная определения клавиши;


-res –переменная выбора меню;


-da – переменная использования;


-er – переменная ошибки преобразования;


-tx – переменная текста при поиске;


-fil – переменная имени базы;


-key – флажок;


-seter – переменная использования.


Кроме переменных в программе используются процедуры и функции описание которых приведено ниже;


Функция
probel;


Используется для дополнения текста требуемыми количествами пробелов.


Вход: Текст, требуемая длина.


Выход: Текст требуемой длины.


Функция
Edtext;


Используется для вывода на экран в нужную позицию текста и его последующего редактирования


Функция работает следующим образом:


Зацикливается до тех пор пока не будет нажатия Enter или Esc. В это время выводит на экран текст в нужную позицию, обновляется , ожидает нажатия клавиш или delete.


Вход: Координаты, текст, длина текста, флажок.


Выход: Вывод на экран текста, отредактированный текст.


Функция
Cifri;


Подобна функции Edtext
только ввод текста ограничен цифрами.


Работает также.


Процедура
Prishlo;


Применяется для вывода на экран меню «Приход» и занесения данных в позицию базы.


Описание работы: Работает со строкой массива базы. Выводит на экран меню «Приход», преобразует текстовые переменные после ввода в строки меню.


Процедура
Ushlo;


Аналогична процедуре Prishlo
.Заменена только формула вычисления количества.


Процедура
Vvodnov;


Процедура обеспечивающая вывод на экран меню «Новый товар», ввод новой строки в базу.


Работает: Ограничивается строкой, для работы с переменными записи, выводит на экран меню, пользователем редактируются строки меню, преобразуются, увеличивается счетчик числа строк базы на 1.


Процедура
Edzapic
;


Используется для редактирования записи в текущей позиции курсора листинга перечня товаров.


Вход: Позиция


Выход: отредактированный текст в данной позиции.


Процедура
Ekran;


Отображает на экране заголовок таблицы базы и заполняет таблицу, рассчитывает и отображает на экране нижнюю строку состояния базы общую сумму, общий приход, общий расход, общее количество товаров.


Описание: Формирует окно для работы, отображает заголовок таблицы, цикл для вывода первых двадцати строк базы в окно, обнуление счетчиков сумм, цикл на все позиции базы, расчет сумм в этом цикле вывод результата на экран в виде строки состояния.


Функция
Vivstr;


Формирует строку по позиции в базе.


Обнуляется. Работает со строкой в массиве базы. Производит преобразование в стринговые переменные числовых значений базы (количества цены, приход, расход), сумма формируется путем вычисления. Добавление нужными пробелами функцией Probel.


Процедура
Vivlist;


Обеспечивает формирование экрана с помощью процедуры Ekran
, вывод поясняющей строки. Подкрашивание строки в позиции курсора, опрос клавиш курсора и служебных (для ввода новой, корректировки, удаления). Работает следующим образом: Выполняет процедуру Ekran,
прорисовывает строку пояснения, цикл пока не нажата клавиша «влево», «вправо», «Enter», «Esc» – опрашивает клавиатуру с помощью функции «Readkey» если нажата «Вниз» или «Вверх» уменьшаетя или увеличивается соответственно текущий счетчик позиций меню


Функция
Vstroca;


Функция организует главное меню в верхней строке экрана.


Устанавливает параметры цвета, выводит на экран массив с переменными меню т.е. названиями меню. Опрашивает клавиатуру на нажатие клавиши «Влево», «Вправо», «Enter» выполняет соответствующие этим клавишам команды. Затем если было нажато «Esc» функция принимает значение меньшее 1 и затем в головной программе происходит выход.


Процедура
Sortirovka;


Сортирует данные по заданной колонке.


Организуется цикл на все позиции массива базы. База переносит данные в стороннюю базу. Выбирает столбец сортировки сравнивает со сторонней базой если больше то переносит в стороннюю базу запоминает позицию. В конце цикла переставляет позиции основной базы.


Описание алгоритма работы программы.


Очищается экран выводится меню для указания месторасположения и названия файла базы по умолчанию это «С:base.dat» затем проверяется создан ли файл если нет то создается. Организуется цикл до конца файла переписываются данные в массив базы. Обнуляются переменные. организуется меню по данным функции Vstroka
затем происходи выбор с помощью оператора Case по которому осуществляются переходы. В случае «1» прихода функции Vstroka
выводится листинг данных базы и заголовков, организация движения курсора по строкам базы при помощи процедуры Vivlist
. В случае результата «2» формируется окно с тенью «Пришло», заполняется окно с помощью процедуры Prishlo
по текущей позиции курсора экрана и листинга.
«3» формируется окно «Расход», заполняется с помощью процедуры Ushlo.
«4» организуется окно «Найти наименование» вводится текст с помощью функции Edtext
. сравнивается с наименованиями базы если находит устанавливает курсор на это место. Если не находит выводит сообщение и устанавливает на конечную позицию. «5» Окно сортировки. Выполняется процедура Sortirovka
. При других значениях функции Vstroca
происходит запись файла базы, закрытие файла.


III.





Алгоритм программы.IV. Текст программы.

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(p

osiz: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);


str(kol_r,rkol);


VIVSTR:=Probel(naim,20)+Probel(skol,6)+Probel(sprice,11)+Probel(summ,11)+


Probel(Pkol,6)+Probel(Date_p,10)+Probel(Rkol,6)+Probel(Date_r,9);


end;


end;


procedure Ekran;


var i:integer;


Summ_,Sum_p,Sum_r:Double;


begin


Window(1,2,80,25);


Textbackground(5);


TextColor(10);


Clrscr;


gotoxy(1,1);


Textbackground(3);


write(Probel('Наименование',20)+Probel('Кол-во',9)+Probel('Цена',10)+


Probel('Сумма',7)+Probel('Приход ',7)+Probel('Дата пост',10)+Probel('Расход',6)


+Probel(' Дата выд',9));


Textbackground(5);


TextColor(14);


for i:=0 to 20 do


begin


gotoxy(1,2+i); Write(Vivstr(i+stran));


end;


Textbackground(15);


TextColor(0);


gotoxy(1,1+curs); write(VIVSTR(curs+stran-1));


Summ_:=0; Sum_p:=0; Sum_r:=0;


for i:=0 to Schet-1 do


begin


Summ_:=Summ_+(List[i].price*List[i].kol);


Sum_p:=Sum_p+(List[i].price*List[i].kol_p);


Sum_r:=Sum_r+(List[i].price*List[i].kol_r);


end;


Textbackground(4);


TextColor(15);


gotoxy(1,23); write(Probel('',80));


gotoxy(1,23); write(' Итого: ',


Summ_:12:2,' руб. Приход: ',Sum_p:0:2,' руб. Расход:',Sum_r:0:2,' руб.');


gotoxy(15,24); write ('Общее количество наименований товара: ',schet,' шт');


end;


procedure Sortirovka(num:Integer);


var i,j,k:Integer;


Bas:Basskl;


begin


for i:=0 to Schet-1 do


begin


Bas:=List[i];


for j:=i+1 to Schet-1 do


begin


case Num of


1: if Bas.Naim>List[j].naim then begin Bas:=List[j]; k:=j end;


2: if Bas.kol>List[j].kol then begin Bas:=List[j]; k:=j end;


3: if Bas.price>List[j].price then begin Bas:=List[j]; k:=j end;


5: if Bas.kol_p>List[j].kol_p then begin Bas:=List[j]; k:=j end;


6: if Bas.date_p>List[j].date_p then begin Bas:=List[j]; k:=j end;


7: if Bas.kol_r>List[j].kol_r then begin Bas:=List[j]; k:=j end;


8: if Bas.date_r>List[j].date_r then begin Bas:=List[j]; k:=j end;


end;


end;


List[k]:=List[i]; List[i]:=Bas;


end;


end;


procedure Vivlist(var seek,curs:integer);


var c,k:char;


i:integer;


begin


Ekran;


Textbackground(3);


gotoxy(1,24); write(Probel(' <- -> - меню | Ins - Добавить | Ctrl+F8 - Удалить | Ctrl+Enter - Изменить',79));


Textbackground(15);


TextColor(1);


gotoxy(1,1+curs); write(VIVSTR(curs+stran-1));


repeat


c:=readkey;


Textbackground(5);


TextColor(14);


gotoxy(1,1+curs); write(VIVSTR(curs+stran-1));


if c=#0 then k:=readkey;


case k of


#72: begin {Вверх курсор}


if (curs=1) and (stran>0) then begin dec(stran); Ekran end;


if (curs>1) then dec(curs);


end;


#80: begin {Вниз курсор}


if (curs=20) and (stran+20<Schet) then


begin inc(stran); Ekran end;


if ((curs<20) and (Schet>=20))


or ((Schet<20) and (curs<Schet)) then inc(curs);


end;


#101: begin{Удалить} {Ctrl+F8}


if Schet>0 then


for i:=curs+stran-1 to Schet-1 do


begin


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


end;


dec(Schet);


dec(curs);


Ekran;


end;


#82: begin {Ins - новая запись}


Window(12,12,72,17);


Textbackground(0);


clrscr;


Window(10,11,70,16);


Textbackground(7);


clrscr;


{новоя запись}


Vvodnov;


Sortirovka(1);


Window(1,1,80,25);


Ekran;


end;


end;


if c=#10 then {Ctrl+Enter}


begin


Window(12,12,72,17);


Textbackground(0);


clrscr;


Window(10,11,70,16);


Textbackground(7);


clrscr;


{новоя запись}


Edzapic(Curs+stran-1);


Sortirovka(1);


Window(1,1,80,25);


Ekran;


end;


Textbackground(15);


TextColor(1);


gotoxy(1,1+curs); write(VIVSTR(curs+stran-1));


until (k=#27) or (k=#13) or (k=#75)or (k=#77);


Window(1,1,80,25);


end;


begin


clrscr;


Window(16,12,66,15);


Textbackground(9);


textcolor (3);


clrscr;


write (' Введите название и полный путь базы');


gotoxy (3,3);


readln (files);


if files='' then files:='c:base.dat';


assign(f,files);


{$I-}


reset(f);


{$I+}


if IOResult<>0 then rewrite(f);


Schet:=0;


While not eof(f) do


begin


inc(Schet);


read(f,List[Schet-1]);


end;


Textbackground(0);


clrscr;


curs:=1; stran:=0; mcurs:=1; seter:=15;


repeat


Ekran;


Window(1,1,80,25);


res:=vstroca(mcurs);


case res of


1:begin


Vivlist(stran,curs);


Window(1,1,80,25);


end;


2:begin


Window(16,12,66,15);


Textbackground(0);


clrscr;


Window(14,11,64,14);


Textbackground(7);


clrscr;


{Запуск новой записи}


Prishlo(Curs+stran-1);


Window(1,1,80,25);


end;


3:begin


Window(16,12,66,15);


Textbackground(0);


clrscr;


Window(14,11,64,14);


Textbackground(7);


clrscr;


{Запуск новой записи}


Ushlo(Curs+stran-1);


Window(1,1,80,25);


end;


4:begin {Поиск}


Window(16,12,66,14);


Textbackground(7);


clrscr;


Window(14,11,64,13);


Textbackground(8);


clrscr;


Gotoxy(2,2); Write('Найти наименование:');


Tx:=Edtext(25,2,'',20,key);


for i:=0 to Schet-1 do


if List[i].naim=tx then begin seter:=1; break; end;


if i>20 then begin curs:=1; stran:=i end


else begin curs:=i+1; stran:=0; end;


if seter<>1 then


begin


Window(16,12,66,14);


Textbackground(7);


clrscr;


Window(14,11,64,13);


Textbackground(8);


clrscr;


Gotoxy(2,2); Write('Наименование ненайдено'); readln; stran:=1; curs:=1;


end;


Vivlist(stran,curs);


Window(1,1,80,25);


end;


5:begin {Сортировка}


Window(16,12,66,14);


Textbackground(0);


clrscr;


Window(14,11,64,13);


Textbackground(7);


clrscr;


Gotoxy(2,2); Write('Введите поле для сортировки (1..8):');


val(Cifri(38,2,'',1,key),da,er);


if da in [1..8] then Sortirovka(da);


Window(1,1,80,25);


end;


end;


until (res<1) or (res=6);


Rewrite(f);


Sortirovka(1);


for i:=0 to Schet-1 do Write(f,List[i]);


close(f);


end.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Автоматическое рабочее место для работника склада

Слов:2889
Символов:28330
Размер:55.33 Кб.