Курсовая: Автоматическое рабочее место для работника склада
| | | | | | |
| |
|
| | Кафедра общественно образовательных предметов |
|
|
| | |
|
| | Выполнила:студентка гр. ВМ1-99Н.В. ПоздняковаПроверил: старший преподаватель А.И. Волков |
|
|
| | |
ВВедение.
Данная программа автоматизированного рабочего места разработана для
работников складских помещений, естественно если у них имеется компьютер
классом не ниже 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(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.