Автомастерская. Автоматическое рабочее место для работы со складом
Скачать 0.69 Mb.
|
Автоматическое рабочее место для работы со складом ВВедение. Данная программа автоматизированного рабочего места разработана для работников складских помещений, естественно если у них имеется компьютер классом не ниже Pentium. Сейчас на рынке программного обеспечения появляются все больше и больше различных программ для работы не только со складом, но и различные другие программные средства автоматизированного рабочего места, но стоимость их лицензионных копий доходит порой до нескольких десятков тысяч, а моя программа может быть конечно маленько еще “сыровата”, но в процессе работы с нею её можно “довести ее до ума” и все это лишь за пятерку по программированию цена не велика за произведение программного искусства. Каковы её плюсы: ну это естественно простота и понятность (для русского человека) интерфейса программы, что не требует дополнительного обучения или прохождения специальных курсов, особенно для женщин, работающих на складах и не посвященных в азы компьютеров и программного обеспечения; не требовательность к системным ресурсам машины; легкость ввода и отслеживания; простота резервирования базы данных (всего 1 файл), что не маловажно для такой программы. При написании и разработке курсового проекта я научился работать с BorlandPascal, MicrosoftWindows 95OSR2, MicrosoftWord 97 SR-2 которые использовались для работы над курсовым проектом, научился использовать справку и другие функции BorlandPascal при этом даже разобрался с английским языком и использованием электронных словарей переводчиков таких как Promt, Stylus, MagicGooddy 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. Текст программы. Programkursovoi; 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) 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 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 begin inc(stran); Ekran end; if ((curs<20) and (Schet>=20)) or ((Schet<20) and (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.6> |