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