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

Тип работы:
Реферат
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

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

ВВедение.

Данная программа автоматизированного рабочего места разработана для работников складских помещений, естественно если у них имеется компьютер классом не ниже Pentium. Сейчас на рынке программного обеспечения появляются все больше и больше различных программ для работы не только со складом, но и различные другие программные средства автоматизированного рабочего места, но стоимость их лицензионных копий доходит порой до нескольких десятков тысяч, а моя программа может быть конечно маленько еще «сыровата», но в процессе работы с нею её можно «довести ее до ума» и все это лишь за пятерку по программированию цена не велика за произведение программного искусства. Каковы её плюсы: ну это естественно простота и понятность (для русского человека) интерфейса программы, что не требует дополнительного обучения или прохождения специальных курсов, особенно для женщин, работающих на складах и не посвященных в азы компьютеров и программного обеспечения; не требовательность к системным ресурсам машины; легкость ввода и отслеживания; простота резервирования базы данных (всего 1 файл), что не маловажно для такой программы.

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

Задание.

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

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

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

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

Количество;

Цену;

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

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

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

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

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

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

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

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

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

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

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

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

naim — наименование товара;

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

price — цена товара;

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

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

date_p — дата прихода товара;

date_r — дата расхода товара.

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

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

schet - счетчик;

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

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

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

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.

ПоказатьСвернуть
Заполнить форму текущей работой