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

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

ВВедение.

Данная программа автоматизированного рабочего места разработана для

работников складских помещений, естественно если у них имеется компьютер

классом не ниже 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. Вводить новый товар, указывая следующие параметры

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

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

V Цену;

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

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

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

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

параметру.

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

параметру.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

V schet – cчетчик;

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

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

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

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

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

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

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

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

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

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

V key – флажок;

V 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 происходит запись файла базы, закрытие файла.

II. Алгоритм программы.

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)');

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=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=20))

or ((Schet0 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.

-----------------------

Выполнила:

студентка гр. ВМ1-99

Н.В. Позднякова

Проверил:

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

А.И. Волков

Ижевского Государственного Технического Университета

Чайковский Технологический Институт

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

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

ТЕМА: Автоматическое рабочее место для работы со складом.

Курсовая работа

Министерство общего и профессионального образования РФ