2. Сценарий диалога с пользователем.

В начале работы программа спрашивает пароли, чтобы определить статус пользователя и его полномочия. Система спрашивает последовательно два пароля, известных соответственно председателю профкома и бухгалтеру. При правильном вводе одного из паролей пользователь получает доступ к просмотру, но не изменению данных системы. Если оба пароля введены правильно, то система позволяет просматривать и изменять данные, если же оба пароля введены неправильно, то система отказывает пользователю в доступе.

Непосредственно после ввода паролей на экране появляется приветствие пользователя и запрос сегодняшней даты. Эта дата используется по умолчанию при вводе в полях, имеющих тип "Дата". В этом запросе пользователь может либо подтвердить ту дату, которая стоит на машине по умолчанию, нажатием "Enter" либо ввести новую дату, если дата на машине установлена неправильно.

После этого на экране высвечивается главное меню системы ( Экран 1). При помощи стрелок управления курсором пользователь выбирает интересующий его пункт.

Выбор первого пункта означает, что пользователь желает просмотреть нормативно - справочную информацию, использующуюся в системе. При выборе этого пункта на экране высвечивается меню нормативно-справочной информации ( Экран 2). В зависимости от выбора пользователя ему предоставляется возможность просмотреть и редактировать тот или иной справочник. Отмена режима справочников осуществляется клавишей ESC. В этом случае система возвращается в предыдущее меню.

Выбор второго пункта означает, что пользователь хочет работать с записной книжкой бухгалтера, в которой хранятся данные о выдаче кредитов, материальной помощи и так далее. ( Экран 3).

Пользователь может вводить новые данные в записную книжку( выбор первого пункта), или осуществлять поиск в текущих данных (выбор пункта 2). В этом режиме пользователь вводит табельный номер интересующего его сотрудника и получает список всех выданных этому сотруднику льгот. Выход из режима осуществляется клавишей ESC.

Выбор третьего пункта дает возможность пользователю рассчитать заработную плату сотрудников профкома( Экран 4). В этом режиме пользователь может просматривать и редактировать файл начислений (выбор первого пункта меню), файл взысканий с сотрудников (второй пункт), список сотрудников с окладами (третий пункт), просматривать общий фонд заработной платы( четвертый пункт), а также поэтапно рассчитывать заработную плату. Сначала пользователь может посчитать оклад сотрудников вместе со всеми начислениями (пятый пункт). При  этом система запросит у него дату, которая показывает, за какой месяц начисляется зарплата. Он может также посчитать все взыскания с сотрудников за этот месяц. Для этого пользователь должен выбрать 6-й пункт меню и ввести дату, за которую считаются взыскания.

Пользователь может отдельно посчитать налоги, вычитаемые с заработной платы (седьмой пункт) или получить сразу полную ведомость. При выборе девятого пункта система подсчитывает экономию фонда заработной платы в каком-либо году. Выход из режима осуществляется клавишей ESC.

Выбирая четвертый пункт Главного меню, пользователь выбирает работу с ведомостью заработной платы ( Экран 5). В этом режиме пользователь может просмотреть ведомость, причем если ведомость не была рассчитана, то система рассчитает ее, распечатать ведомость, занести ее в архив, найти ведомость в архиве. Выход из режима осуществляется клавишей ESC.

При выборе пятого пункта меню пользователь получает возможность работать с банковскими документами ( Экран 6). Он может вводить и просматривать платежные поручения, банковские выписки, банковские объявления на взнос.

При выборе шестого пункта пользователь выбирает работу с главной книгой бухгалтера ( Экран 7). В этом режиме он может приказать системе добавить в главную книгу данные по последней ведомости заработной платы, добавить данные по последним платежным поручениям, просмотреть  главную книгу.

Выбор седьмого пункта меню дает возможность пользователю просмотреть сальдо счетов.( Экран 8) Для того, чтобы система подсчитывала сальдо во какому-нибудь конкретному счету, он должен находиться в списке счетов.

В этом режиме пользователь может рассчитать текущее сальдо, просмотреть его, занести сальдо в архив или найти его в архиве. При поиске или занесении в архив сальдо у пользователя спрашивается уникальный ключ-дата, который будет будет связан с этим сальдо.

В режиме редактирования любого файла данных системы пользователь имеет возможность получить справку об активных в данный момент клавишах с помощью нажатия F1. Также пользователь может изменить по своему выбору размеры и местоположение на экране окна, в котором происходит редактирование файла данных. Пользователь может одновременно открыть еще несколько файлов данных одновременно, если ему нужно просмотреть какие-то данные прямо в процессе редактирования. Пример: Пользовательвводит очередные начисления сотрудникам. При вводе табельного номера он забывает, какой у интересующего его сотрудника табельный номер. В этом случае ему нужно нажать клавишу F10, выбрать из предлагаемого списка ( Экран 9 ) пункт " Cписок сотрудников", и на экране появится окно с номером 2, в котором будет отражаться файл сатрудников. Теперь пользователь должен нажать Ctrl - F5 для перехода в режим изменения размера окна, расположить первое и второе окна так, чтобы они не перекрывались, и продолжать вводить файл начислений. При этом список сотрудников с их фамилиями будут у него перед глазами.

2.2 Структура программного комплекса.

 
                              ---------------¬
                              ¦              ¦
                              ¦   main       ¦
                              ¦              ¦
                              L-----T---------
                                    ¦
    ---------------T-------T-------T+------T--------T---------T----------¬
    ¦              ¦       ¦       ¦       ¦        ¦         ¦          ¦
    ¦        ------+-----¬ ¦  -----+------¬¦  ------+-----¬   ¦   -------+---¬
    ¦        ¦ Spr_work  ¦ ¦  ¦ saldo_work¦¦  ¦ Regimes   ¦   ¦   ¦ bank     ¦
    ¦        L----T------- ¦  L---T--------¦  L------T-----   ¦   L-----T-----
 ---+--T--T-T--T-¬¦  ------+-----¬¦--------+----¬    ¦    ----+-------¬ ¦
 1  2  3  4 5  6 7¦  ¦ Greatbook ¦¦¦ salarywork ¦    ¦    ¦ Copybook  ¦ ¦
                  ¦  L----T-------¦L-----T-------    ¦    L------T----- ¦
                  ¦       ¦       ¦      ¦           ¦           ¦      ¦
                  8    ---+-¬ --T-+-T-¬  ¦      --T--+--T--T--¬  ¦      8
                       28   8 8 14 12 13 ¦      8 14    22 23 24 ¦
                                    --T-T+-T--T--T---¬           ¦
                    2               9 8 10 11 12 13 14      5    ¦
    1              ¦                3         4             ¦    8
    ¦              ¦                ¦         ¦             ¦
    ¦              ¦                ¦         ¦             ¦
 ---+-------¬ -----+--------¬  -----+-----¬ --+--------¬ ----------¬
 ¦ load_crc ¦ ¦check_begin  ¦  ¦          ¦ ¦          ¦ ¦ good    ¦
 ¦          ¦ ¦             ¦  ¦querryparo¦ ¦creatcrc  ¦ ¦morning  ¦
 L----------- L--------------  L----------- L----------- L----------

      ¦6                ¦7                 ¦8           ¦9
      ¦                 ¦                  ¦            ¦
 -----+--------¬        +-----------¬ -----+-------¬----+--------¬
 ¦loadwindow   ¦        ¦savewindow ¦ ¦   global   ¦¦   salary   ¦
 ¦             ¦        ¦           ¦ ¦            ¦¦            ¦
 L--------------        L------------ L-----T-------L-------------
                                            ¦
   ¦                                        ¦
 11¦                   12         13¦ ---T--+---T---T-T-¬  14
   ¦                    ¦           ¦ 15  16  17 18 ¦ ¦21   ¦
   ¦                    ¦           ¦              19 20    ¦
 --+----------¬ --------+-------¬---+------------¬     -----+-------¬
 ¦checksalary1¦ ¦Load_data_file ¦¦save_data_file ¦     ¦ input_key  ¦
 L------------- L----------------L----------------     L-------------
     15¦                 16¦              17¦         18¦
       ¦                   ¦                ¦           ¦
-------+---------¬   ------+------¬ --------+--¬        +----------¬
¦ readfileinfo   ¦   ¦writetable  ¦ ¦readtable ¦        ¦edittable ¦
L-----------------   L------------- L-----------        ¦          ¦
                                                        L------T----
   19¦               20¦              21¦                  ----+--T----¬
     ¦                 ¦                ¦                 17   25 16   ¦
 ----+---------¬   ----+---------¬ -----+--------¬                    26
 ¦  printtable ¦   ¦ creatfield  ¦ ¦ clearfield  ¦
 L--------------   L-------------- L--------------
   22¦              23¦          24¦             25 ¦          26¦
     ¦                ¦            ¦                ¦            ¦
 ----+--------¬   ----+----¬  -----+-----¬     -----+-------¬ ------------¬
 ¦    add     ¦   ¦  sub   ¦  ¦  nalogs  ¦     ¦   help     ¦ ¦editwindow ¦
 L-------------   L---------  L-----------     L------------- L------------
    27¦                  28
      ¦                    ¦
 -----+-------¬      ------+------¬
 ¦ search     ¦      ¦  great     ¦
 L-------------      L-------------

2.3 Схема модуля вычисления зарплаты.

 
                              ¦
                      --------+-------¬
                      ¦открыть  f1,f4 ¦
                      ¦n = fsize (f1) ¦
                      L-------T--------
                            6 ¦
                       -------+--------¬да 7
                       ¦ конец файла?  +-------
                       L------T---------
                              ¦
                       -------+-----------¬
                       ¦ считываем в маs  ¦
                       ¦ 1 запись         ¦
                       L-----T-------------
                             ¦
                      -------+--------¬
                      ¦ww=0  xx =0    ¦
                      L------T---------
                     --------+-------¬
                     ¦открываем файл ¦
                     ¦начислений F2  ¦
                     ¦               ¦
                     L-------T--------
                             ¦
                      -------+----¬
                      ¦ конец f2  +---------------------¬
                      L------T-----                     ¦
                      -------+------------T----¬        ¦
                      ¦cчитываем из F2 rr ¦    ¦        ¦
                      L------T-------------    ¦        ¦
                  -----------+---------¬ нет   ¦        ¦
                  ¦   mas.tab = rr.tab?+--------        ¦
                  L----------T----------                ¦
                             ¦да                        ¦
                  -----------+--------------¬           ¦
                  ¦    inc(ww ,rr.sum)      ¦           ¦
                  L----------T---------------           ¦
                             ¦                          ¦
                    ---------+---------T-----------------
                    ¦открываем F3      ¦
                    ¦файл взысканий    ¦
                    L------T------------
                           ¦
                           ¦
                    -------+--------¬
                    ¦ конец F3      +-----------------¬
                    L------T---------                 ¦
                    -------+------------T---¬         ¦
                    ¦cчитываем из F3 rr ¦   ¦         ¦
                    L------T-------------   8         ¦
                           2                ¦         3
                -----------+---------¬ нет  ¦         ¦
                ¦   mas.tab = rr.tab?+-------         ¦
                L----------T----------                ¦
                           ¦да                        ¦
                -----------+--------------¬           ¦
                ¦    inc(xx,rr.sum)       ¦           ¦
                L----------T---------------           ¦
                           ¦                          ¦
                           +---------------------------
                   --------+-------------¬
                   ¦s.tab = mas.tab      ¦
                   ¦s.name = mas.name    ¦
                   ¦s.okl = mas.oklad    ¦
                   ¦s.plus = ww          ¦
                   ¦s.minuis = xx        ¦
                   L--------T-------------
                            ¦
                ------------+------------¬ нет
                ¦    есть ли декларация? +------¬
                ¦       dekl             ¦      ¦
                L-----------T-------------      ¦
                            ¦ да          ------+--------¬
                            ¦ 4           ¦  dekl = 0    ¦
                                          ¦              ¦
                                          L-----T---------
                                                ¦4
                           4
                           ¦
             --------------+-------------¬  да -----------------------¬
             ¦dekl   < 10000000          +-----+ s.pn =(s.okl+ ww  -  +-¬
             L-------------T--------------     L----------------------- ¦
             --------------+----------¬                                 ¦
             ¦ s.pn = (s.okl+  ww  -  ¦                                 ¦
             ¦         -  xx   -      ¦                                 ¦
             ¦         - 833333) *0.2+¦                                 ¦
             ¦         +100000        ¦                                 ¦
             L-------------T-----------                                 ¦
                           ¦                                            ¦
                           +---------------------------------------------
                 ----------+--------------¬
                 ¦s.penf = (s.okl+ ww   - ¦
                 ¦- xx)*0.01              ¦
                 L---------T---------------
                           ¦
                  ---------+-------------------¬
                  ¦s.itog = s.okl+ww[i] -xx[i]-¦
                  ¦-s.pn - p.penf              ¦
                  L--------T--------------------
                  ---------+-------------------¬
                  ¦         запись s           ¦
                  L-------T---------------------
             6            ¦
            ---------------
                              ¦7
                   -----------+-------¬
                   ¦     конец        ¦
                   L-------------------

2.4 Описание mодулей и процедур программы.

                 ---Главная программа
                 ¦
                 ¦
                 +-  работа со справочниками------------------------¬
                 ¦                                                  ¦
                 +- работа с записной книжкой ---------------------¬¦
                 ¦                                                 ¦¦
                 +- вычисление заработной платы ------------------¬¦¦
                 ¦                                                ¦¦¦
                 +- операции с расчетной ведомостью ------------¬ ¦¦¦
                 ¦                                              ¦ ¦¦¦
                 +- работа c банковскими документами-----------¬¦ ¦¦¦
                 ¦                                             ¦¦ ¦¦¦
                 +- работа с главной книгой-------------------¬¦¦ ¦¦¦
                 ¦                                            ¦¦¦ ¦¦¦
                 L- работа с сальдо счетов-------------------¬¦¦¦ ¦¦¦
                                                             ¦¦¦¦ ¦¦¦
                                                             ¦¦¦¦ ¦¦¦
                                             подсчет сальдо -+¦¦¦ ¦¦¦
                                             (saldo)         ¦¦¦¦ ¦¦¦
                                           просмотр сальдо  -+¦¦¦ ¦¦¦
                                           global            ¦¦¦¦ ¦¦¦
                                     запись сальдо в архив  -+¦¦¦ ¦¦¦
                                        save_data_file       ¦¦¦¦ ¦¦¦
                                    чтение сальдо из архива -+¦¦¦ ¦¦¦
                                        load_data_file       ¦¦¦¦ ¦¦¦
                                             печать сальдо  --¦¦¦ ¦¦¦
                                        printtable            ¦¦¦ ¦¦¦
                                                              ¦¦¦ ¦¦¦
                                                              ¦¦¦ ¦¦¦
                              добавление данных по зарплате  -+¦¦ ¦¦¦
                                salary_great_book             ¦¦¦ ¦¦¦
                                добавление данных по банку   -+¦¦ ¦¦¦
                                 scan_bank_for_great          ¦¦¦ ¦¦¦
                                     просмотр главной книги  --¦¦ ¦¦¦
                                    global                     ¦¦ ¦¦¦
                                                               ¦¦ ¦¦¦
                                                               ¦¦ ¦¦¦
                                     ввод платежных поручений -+¦ ¦¦¦
                                       global                  ¦¦ ¦¦¦
                                    ввод обьявлений на взнос  -+¦ ¦¦¦
                                       global                  ¦¦ ¦¦¦
                                        ввод выписок из банка --¦ ¦¦¦
                                       global                   ¦ ¦¦¦
                                                                ¦ ¦¦¦
                                           получение ведомости -+ ¦¦¦
                                            salary              ¦ ¦¦¦
                                            просмотр ведомости -+ ¦¦¦
                                             global             ¦ ¦¦¦
                                            занесение в архив  -+ ¦¦¦
                                             save_data_file     ¦ ¦¦¦
                                              чтение из архива -+ ¦¦¦
                                            loads_data_file     ¦ ¦¦¦
                                             печать ведомости   - ¦¦¦
                                             printtable           ¦¦¦
                                                                  ¦¦¦
                                    просмотр файла начислений    -+¦¦
                                       global                     ¦¦¦
                                      просмотр файла взысканий   -+¦¦
                                        global                    ¦¦¦
                                              расчет начислений  -+¦¦
                                              add                 ¦¦¦
                                               расчет взысканий   -¦¦             
                                                 sub               ¦¦
                                                                   ¦¦
                                          ввод в записную книжку  -+¦
                                                 global            ¦¦
                                          поиск в записной книжке --¦
                                              search                ¦
                                                                    ¦
                                           справочник начислений   -+
                                               global               ¦
                                              справочник налогов   -+
                                                global              ¦
                                       спроавосчник общих налогов  -+
                                                global              ¦
                                             справочник разрядов   -+
                                               global               ¦
                                   справочник минимальной зарплаты -+
                                             read_min_salary        ¦
                                                 таблица аудита    --
                                               global
------------T-------------------------T--------------T-----------------¬ ¦ Модуль ¦ Назначение ¦ Вход.файл ¦ Выход.файл ¦ ¦ ¦ ¦ ¦ ¦ ¦ spr_work ¦ Работа со справочной ¦ salary.dat ¦ salary.dat ¦ ¦ ¦ информацией ¦ spr2.arm ¦ spr2.arm ¦ ¦ ¦ ¦ spr3.arm ¦ spr3.arm ¦ ¦ ¦ ¦ spr4.arm ¦ spr4.arm ¦ ¦ ¦ ¦ spr5.arm ¦ spr5.arm ¦ ¦ ¦ ¦ spr6.arm ¦ spr6.arm ¦ ¦ ¦ ¦ audit.arm ¦ audit.arm ¦ ¦ ¦ ¦ ¦ ¦ ¦Saldo_work ¦Работа с сальдо счетов ¦ great.arm ¦ saldo.arm ¦ ¦ ¦ ¦ saldo.arm ¦ saldo.ind ¦ ¦ ¦ ¦ saldo.ind ¦ saldo.sav ¦ ¦ ¦ ¦ saldo.sav ¦ prn ¦ ¦ ¦ ¦ ¦ ¦ ¦ Great ¦ Работа с главной книгой ¦ Great.arm ¦ great.arm ¦ ¦ ¦ ¦ bank3.arm ¦ prn ¦ ¦ ¦ ¦ sal.arm ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ copybook ¦ Работа с записной ¦ copybook.arm ¦copybook.arm ¦ ¦ ¦ книгой бухгалтера ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦salary_work¦ Работа с расчетной ¦ sal.arm ¦ sal.arm ¦ ¦ ¦ ведомостью ¦ sal.sav ¦ sal.sav ¦ ¦ ¦ ¦ sal.ind ¦ sal.ind ¦ ¦ ¦ ¦ ¦ ¦ ¦ salary ¦ Создание ведомости ¦ salary3.arm ¦ sal.arm ¦ ¦ ¦ ¦ ¦ ¦ ¦ add ¦ Расчет насчислений ¦ spr1.arm ¦ salary1.arm ¦ ¦ ¦ ¦ spsotr.arm ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ sub ¦ Расчет вычетов ¦ spr2.arm ¦ salary2.arm ¦ ¦ ¦ ¦ salary1.arm ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ nalogs ¦ Вычет налогов ¦ salary2.arm ¦salary3.arm ¦ ¦ ¦ ¦ spnal.arm ¦ ¦ ¦ search ¦ Поиск в записной книге ¦ Copybook.arm ¦ ttt.arm ¦ ¦ ¦ ¦ ¦ ¦ ¦ bank.arm ¦ Работа с банковскими¦ bank1.arm ¦ bank1.arm ¦ ¦ ¦ документами ¦ bank2.arm ¦ bank2.arm ¦ ¦ ¦ ¦ bank3.arm ¦ bank3.arm ¦ ¦cck_salary1¦ Проверка на соответствие¦ spsotr.arm ¦ ¦ ¦ ¦ окладов разрядам ¦ spr6.arm ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦chk_slalry2¦Проверка на соответствие ¦ spsotr.arm ¦ ¦ ¦ ¦окладов фонду зарплаты ¦ fonds.dat ¦ ¦ ¦ ¦ ¦ ¦ ¦ L-----------+-------------------------+--------------+------------------

Модуль Windenv

Процедура Savewindow(x1,y1,x2,y2:byte;

var a:buffertype)

Сохраняет в оперативной памяти содержимое прямоугольной области экрана.

x1,y1,x2,y2 - Координаты области экрана.

а - переменная, в которую заносится адрес области ОП.

 

Процедура loadwindow(x1,y1,x2,y2:byte;

var a:buffertype)

Восстанавливает прямоугольную область экрана, предварительно сохраненную процедурой Savewindow, и освобождает оперативную память, в которой хранилась область.

Область экрана должна иметь ту же форму, но, вообще говоря, не обязательно те же координаты, что и сохраненная.

x1,y1,x2,y2 - Координаты области на экране.

а - адрес в оперативной памяти, где хранится область.

Модуль Inter

Функция Max(a,b:integer):integer

Возвращает максимум из чисел a и b.

Функция Min(a,b:integer):integer

Возвращает минимум из чисел а и b.

Процедура curs_off

Делает курсор на экране невидимым.

Процедура Error(s:string);

Создает в центре экрана окно красного цвета необходимого размера и выводит в него сообщение об ошибке, после чего ждет нажатия на любую клавишу.

s - Сообщение об ошибке.

Процедура Input(x,y,l:byte;var s:string;w:settype)

Расширенная процедура ввода. Позволяет вводить строчку заданной длины, отслеживая недопустимые символы. Позволяет использовать клавиши "Влево","Вправо", Del,Backspase.

Позволяет использовать строку по умолчанию, есть возможность Undo.

x,y - Координаты вводимой строки на экране.

l - Максимальная длина вводимой строки.

s - Строка по умолчанию. В ней же возвращается введенная строка. Если в течении ввода была нажата клавиша ESC, возвращается пустая строка.

w - Множество допустимых символов.

Модуль Files2

Функция FOpen(FName:string;FMode:Word):Word

Открывает безтиповый файл. Возвращает заголовок файла.

В случае ошибки внутренняя переменная Fsuccess принимает значение False.

Fname - Имя файла.

Fmode - Режим (0 - только для чтения,1 - только для записи, 2 - и для чтения, и для записи.)

Функция FCreate(FName:String;FAttr:Word):Word

Создает безтиповый файл. Возвращает заголовок файла.

В случае ошибки внутренняя переменная Fsuccess принимает значение False.

FName - Имя файла.

FAttr - атрибуты создаваемого файла.

Функция FRead(Handle,Segment,Offset,Bytes:Word):Word

Читает из безтипового файла блок. В случае ошибки чтения внутренняя переменная Fsuccess принимает значение False. Возвращает количество реально прочитанных байтов.

Наndle - Заголовок файла.

Segment - Сегментная часть адреса в оперативной памяти, в которую производится чтение.

Offset - Смещение этой области относительно сегмента в оперативной памяти.

Bytes - Сколько байтов необходимо прочитать.

Функция FWrite(Handle,Segment,Offset,Bytes:Word):Word

Записывает в безтиповый файл блок памяти. В случае ошибки записи внутренняя переменная Fsuccess принимает значение false. Возвращает количество реально записанных байтов.

Наndle - Заголовок файла.

Segment - Сегментная часть адреса в оперативной памяти, из которой происходит чтение.

Offset - Смещение этой области относительно сегмента в оперативной памяти.

Bytes - Сколько байтов необходимо записать.

Процедура FClose(Handle:Word)

Закрывает безтиповый файл. В случае ошибки внутренняя переменная Fsuccess принимает значение False.

Наndle - Заголовок файла.

Процедура FSeek(Handle:Word; PosPnt:LongInt)

Перемещает указатель безтипового файла.

В случае ошибки внутренняя переменная Fsuccess принимает значение False.

Наndle - Заголовок файла.

PosPnt - новое положение указателя.

Функция FTell(Handle:Word):LongInt

Возвращает позицию указателя файла.

В случае ошибки внутренняя переменная Fsuccess принимает значение False.

Наndle - Заголовок файла.

Функция FSize(FName:String;FAttr:Word):LongInt

Возвращает размер файла в байтах.

В случае ошибки внутренняя переменная Fsuccess принимает значение False.

FName - Имя файла.

FAttr - Атрибуты файла.

Модуль Field

В программе используются специальные объекты, которые мы в дальнейшем будем именовать "Таблицами".

Они описаны ниже:

type ftype=array [1..32000] of word

fieldtype=record

field: ^ftype;

tc,tb:byte;

xmax,ymax:integer;

currentx,currenty:integer;

end;

Функция creatfield(var T:fieldtype;X,Y:integer):integer

Создает таблицу заданного размера. Возвращает признак успеха.

T - Таблица.

X - Размер по горизонтали.

Y - Размер по вертикали.

Процедура clearfield(var T:fieldtype;Beg:integer;Textc,Textb:byte)

Очищает созданную таблицу и устанавливает цвет текста и фона для выводимой информации.

T - Таблица.

Beg - Строка таблицы, начиная с которой идет очищение.

Textc - цвет текста для выводимой информации.

Textb - цвет фона для выводимой информации.

Процедура Window_To_Field(T:fieldtype;X1,Y1,X2,Y2,Xx,Yy:integer)

Сохраняет прямоугольную область экрана в таблицу. Для правильной работы процедуры необходимо, чтобы эта область умещалась в таблицу, иначе будет сохранена только часть области.

T - Таблица.

X1,Y1,X2,Y2 - координаты области на экране.

Xx,Yy - Координаты области внутри таблицы.

Процедура field_to_window(T:fieldtype;X1,Y1,X2,Y2,Xx,Yy:integer)

Выводит часть таблицы на экран. Для правильной работы процедуры необходимо, чтобы область не выходила за границы таблицы, иначе на экране будет только часть области.

T - Таблица

X1,Y1 - Координаты левого верхнего угла области.

X2,Y2 - Координаты правого нижнего угла области.

Xx, Yy - Координаты области внутри таблицы.

Процедура put_char(T:fieldtype;X,Y:integer;Sym,Textc,Textb:byte)

Выводит в таблицу символ по заданным координатам с заданным цветом текста и цветом фона.

T - Таблица.

X,Y - Координаты в таблице.

Sym - Код символа.

Textc - Цвет текста.

Textb - Цвет фона.

Процедура deletefield(var T:fieldtype)

Удаляет таблицу, высвобождает память, занятую ей.

T - Таблица.

Модуль Data

Процедура strtotable(X,Y,L:integer;Source:arr;T:fieldtype)

Выводит в таблицу строку символов.

X,Y - координаты в таблице.

L - Максималная длина строки.

Sourсe - Массив, в котором находится строка.

T - Таблица.

Процедура numtotable(X,Y,L:integer;D:longint;T:fieldtype)

Выводит в таблицу целое число.

X,Y - координаты в таблице.

L - Максималная длина поля.

D - Выводимое число.

T - Таблица.

Процедура tabletostr(X,Y,L:integer;var S:string;T:fieldtype);

Считывает поле из таблицы.

X,Y - координаты в таблице.

L - Максималная длина поля.

S - Строка, в которую помещается поле.

T - Таблица.

Модуль Types

Описание типов

rectype= record

len :word;

typ: char;

end;

Запись, описывающая поле в базе данных.

len - длина поля в текстовом представлении.

typ - тип поля.

fileinfo= record

Name:string[20];

Size:longint;

Nf:byte;

Ptr:longint;

Names:longint;

LNames:longint;

end;

Запись, хранящая информацию о файле базы данных.

Name - Имя реального файла на диске.

Size - Его размер.

Nf - Число полей в базе.

Ptr - Ссылка на файл описания полей.

Names - Ссылка на файл имен полей.

LNames - Длина участка в файле имен полей.

schet=record

Cod:string[10];

Name:string[30];

Debet,Kredit:longint;

end;

Запись файла счетов.

Cod - Код счета.

Name - Имя счета.

Debet - Дебет счета.

Kredit - Кредит счета.

windowtype=record

X1,Y1:byte;

X2,Y2:byte;

Save:buffertype;

X,Y:integer;

NF:integer;

Currentline:integer;

currentrow:integer;

priority:longint;

end;

Запись, описывающая объект "окно" в системе многооконного интерфейса.

X1,Y1 - Координаты левого верхнего угла окна на экране.

X2,Y2 - Координаты правого нижнего угла окна на экране.

Save - Буфер, хранящий образ окна.

X,Y - Координаты окна левого верхнего угла в таблице

NF - Номер файла базы, с которым связано окно.

Currenline - Текущая запись в файле.

Currentrow - Текущее поле в файле.

Priority - Приоритет окна.

fnw = record

Dat:Date;

F:string[25];

Tab:string[10];

Sum:longint;

Cod:string[10];

end;

Запись в файлах начислений и взысканий.

Dat - Дата начисления.

F - Фамилия сотрудника.

Tab - Табельный номер.

Sum - Сумма.

Cod - Код начисления.

sp_nal = record

Kod:string[10];

Name:string[25];

Val:string[15];

end;

Запись в файле-справочнике налогов.

Kod - Код налога.

Name - Название налога.

Val - Величина налога.

string1=string[15];

pl_p=record

Numb:longint;

D:date;

Source::string[30];

Bank1:string[30];

Cod1:string[10];

Dest:string[30];

Bank2:string[30];

Cod2:string[10];

Debet:string[10];

Credit:string[10];

Sum:longint;

Target:string[30];

end;

Запись в файле платежных поручений.

Numb - Номер платежного поручения.

D - Дата.

Source - Плательщик.

Bank1 - Банк плательщика.

Cod1 - Код плательщика.

Dest - Получатель.

Bank2 - Банк получателя.

Cod2 - Код получателя.

Debet - Дебетуемый счет.

Crtedit - Кредитуемый счет.

Sum - Сумма.

Target - Назначение.

great_book_type=record

num:longint;

target:string[30];

sum:longint;

cod1,cod2:string[15];

end;

Запись в файле главной книги.

Num - Порядковый номер.

Target - Назначение платежа.

Sum - Сумма.

Cod1 - Дебетуемый счет.

Cod2 - Кредитуемый счет.

levels=record

L:longint;

Coeff:string[15];

end;

Запись в справочнике разрядов.

L - Разряд.

Coeff - Коэффициент.

Sp_sotr= record

Tab:string[10];

Name:string[25];

Raz:longint;

Oklad:longint;

Prof:string[6];

Obosnov:string[30];

end;

Запись в справочнике сотрудников.

Tab - Табельный номер

Name - Ф.И.О.

Raz - Разряд.

Oklad - Оклад.

Prof - Членство в профсоюзе.

Obosnov - Обоснование оклада.

spr_nw=record

Kod:string[10];

Name:string[30];

end;

Запись в файле-справочнике начислений.

Кod - Код начисления.

Name - Наименование начисления.

index=record

Beg:longint;

Key:date;

Len:longint;

end;

Запись в индексном файле.

Beg - Адрес начала данных.

Кеу - Ключ для доступа.

Len - Длина данных.

Sal=record

Num:longint;

Dd:date;

Tab:string[10];

Oklad:longint;

Pn:longint;

Penf:longint;

Ost:longint;

Plus:longint;

Minus:longint;

Itog:longint;

end;

Запись в ведомости зарплаты.

Num - Номер по порядку.

Dd - Дата.

Tab - Табельный номер.

Oklad - Оклад.

Pn - Подоходный налог.

Penf - Пенсионный фонд.

Ost - Остаток.

Plus - Начисления.

Minus - Взыскания.

Itog - Итого на руки.

Модуль Main

Процедура Readfileinfo(Number:integer;var R:rec; var Name:string1;

var N:integer; var Aon:strarr)

Процедура считывает структуру рабочего файла из файла-каталога.

Number - Номер рабочего файла.

R - Массив, в котором возвращается информация о файле.

Массив содержит столько элементов, сколько полей в рабочем файле.

Name - Имя рабочего файла.

N - Количество полей в рабочем файле.

Aon - Массив, в котором хранятся имена полей рабочего файла.

Массив содержит столько элементов, сколько полей в рабочем файле.

Функция Exists(Fname:string1):boolean

Функция проверяет существование файла на диске.

Возвращает True, если файл существует, и False в противном случае.

Fname - Имя файла.

Процедура Check_begin

Процедура проверяет работоспособность программы.

Вначале проверяется количество свободной памяти, потом существование необходимых внутренних файлов системы.

Функция Vmenu(Size,Current, X1,Y1,Len,Mask:byte):integer

Функция обработки вертикального меню небольшого размера.

Используется, если все пункты меню помещаются на экране.

Возвращает номер выбранного элемента.

Size - Размер меню по вертикали.

Current - Номер элемента, на котором вначале стоит указатель.

X1,Y1 - Координаты первого элемента.

Len - Длина элементов.

Mask - Переменная, показывающая, как изменять цвет фона и символа у выделенного элемента.

Процедура Translate(S:string;var Ns:string)

Процедура предназначена для расшифровывания паролей, считанных из файла паролей.

S - Зашифрованная строка.

Ns - Расшифрованная строка.

Процедура Input_key(var S:string;Ss:string;L:byte;W:settype)

Процедура создает на экране окно и считывает в нем с клавиатуры строчку. После этого процедура восстанавливает старое содержимое экрана.

S - Вводимая строка.

SS - Строка подсказки.

L - Максимальная длина строки.

W - Множество допустимых символо в строке.

Процедура Querry_parole

Запрашивает в начале работы пароли и пло ним определяет статус пользователя и его полномочия.

Функция Is_number(S:string):boolean

Проверяет, является ли строка числом.

S - Проверяемая строка.

Процедура Stringtotable(S:string;X,Y:integer;T:fieldtype)

Процедура помещает произвольную строку в таблицу по заданным координатам.

S - Строка.

X,Y - Координаты строки в таблице.

T - Таблица.

Процедура Memcopy(P1,P2:pointer;L:word)

Процедура копирует участок памяти.

P1 - Адрес источника.

P2 - Адрес приемника.

L - Длина участка.

Процедура Help(Index:integer)

Процедура активизируется по нажатию клавиши F1 и выдает контекстно-ориентированный Help.

Index - Номер контекста.

Функция StrtoDate(Str:string;var D:date):integer

Переводит дату из строковой записи во внутренний формат. Возвращает 0 в случае успеха.

Str - Строка, содержащая дату.

D - Запись, содержащая дату после работы процедуры.

Функция Move_file(Source,Dest:string1):integer

Копирует файл. Возвращает 0 в случае успеха, -1 в случае нехватки памяти, -2 в случае ошибки чтения или записи на диск.

Source - Название исходного файла.

Dest - Имя нового файла.

Процедура Lines(T:fieldtype,R:rec;N,N1:integer)

Процедура разделяет таблицу на шапку и графы путем внесения в таблицу символов псевдографики. Используется при печати таблиц.

T - Имя таблицы.

R - Массив, хранящий описание структуры файла базы.

N - Количество столбцов в таблице.

N1 - Количество строк в таблице.

Функция Load_data_file(Fname:string1;D:date):integer

Функция ищет в архиве файл, связанный с ключом - датой, и делает этот файл текущим.

Fname - Имя файла, в который нужно поместить файл из архива.

D - Ключ-дата, по которой осуществляется поиск.

Процедура Good_morning(var D:string1)

Процедура приветствует пользователя при начале работы и просит подтвердить текущую дату. У пользователя есть возможность изменить ее, если она его чем-то не устраивает. В дальнейшем эта дата используется как значение по умолчанию при вводе полей типа "Дата".

D - Текущая дата в строковом виде.

Функция Writetable(Nl,Fp:integer;R:rec;Nr:integer; Fname:string;

Reclen:integer;N:integer;T:fieldtype):integer;

Функция производит запись на диск таблицы. Возвращает 0 в случае успеха.

Nl - Номер строки таблицы, с которой производится запись.

Fp - Позиция в файле, с которой производится запись.

R - Массив, хранящий описание структуры таблицы.

Nr - Размер таблицы по вертикали.

Fname - Имя файла, в который необходимо записать таблицу.

Reclen - Длина записи файла в байтах.

N - Количество столбцов в таблице.

T - Имя таблицы.

Функция Readtable(Nl,Fp:integer;R:rec;var Nr:integer;Fname:string;

Reclen:integer;N:integer;T:fieldtype;

var Eof:boolean):integer;

Функция производит чтение таблицы из файла. Возвращает 0 в случае успеха.

Nl - Номер строки таблицы, с которой производится запись.

Fp - Позиция в файле, с которой производится запись.

R - Массив, хранящий описание структуры таблицы.

Nr - Размер таблицы по вертикали.

Fname - Имя файла, в который необходимо записать таблицу.

Reclen - Длина записи файла в байтах.

N - Количество столбцов в таблице.

T - Имя таблицы.

Eof - Признак конца файла.

Функция Edittable(R:rec;Fname,D_date:string;T:fieldtype;

var Win:windowtype;Nw:integer;var Numberlines:integer;

N,Maxlines,Reclen:integer;var Filepos:longint;

Eof:boolean):integer;

Функция редактирует базу, находящуюся в таблице. При редактировании возможно изменять размеры окна, в котором происходит редактирование.

По нажатию клавишы F1 происходит выдача контекстно ориентированной помощи. Функция автоматически сохраняет базу при выходе из нее.

R - Массив, хранящий сведения о структуре таблицы.

Fname - Имя файла, с которым связана таблица.

D_date - Дата, использующаяся по умолчанию при вводе.

T - Имя таблицы.

Win - Запись, в которой хранятся сведения об окне, в котором находится таблица.

Nw - Номер этого окна.

Numberlines - Число информационных строк в таблице.

N - Число столбцов в таблице.

Maxlines - Максимальное число строк, которое может находиться в таблице.

Reclen - Длина записи в файле данных в байтах.

Filepos - Позиция в файле, на которой происходит редактирование.

Eof - Признак конца файла данных.

Процедура Save_data_file(Fname:string1;D:date)

Процедура записывает файл данных в архив, связывая его с ключом-датой.

Fname - Имя файла данных.

D - Дата-ключ.

Процедура Printtable(T:fieldtype;Fname:string1;N:integer)

T - Таблица.

Fname - Имя файла.

N - Длина таблицы по вертикали.

Процедура Salary(D:date)

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

D - Текущая дата.

Функция Check_Salary2(var N:longint):integer

Проверяет в файле сотрудников соответствие окладов фонду заработной платы. Возвращает 0, если все в порядке.

N - Фонд заработной платы.

Функция Check_Salary1( var Errorline:integer):longint

Функция проверяет соответствие окладов сотрудников разрядной сетке. Если все в порядке, возвращает 0.

Errorline - Номер ошибочной записи.

Процедура Global(First:integer)

Осуществляет работу с базами. Создает таблицы и связывает их с файлами базы данных.

First - Номер в каталоге первоначального файла в каталоге.

Процедура Saldo

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

Процедура Read_min_salary

Запрашивает у пользователя значение минимальной заработной платы.

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

Процедура Search(Tn:string1)

Осуществляет поиск в записной книжке записей о выдаче мат. помощи конкретному лицу.

Tn - Табельный номер конкретного лица.

Процедура Copy_book

Осуществляет работу с записной книжкой бухгалтера.

Процедура Great_book

Процедура осуществляет работу с Главной книгой, внесение туда своевременнных изменений.

Процедура Saldo_work

Процедура подсчитывает сальдо счетов и позволяет пользователю оперативно просматривать их. Предусмотрена возможность сохранять в архиве сальдо за долгий срок.

Процедура salary_work

Осуществляет работу с заработной платой сотрудников, то есть формирует расчетную ведомость, позволяет ее просматривать, записывать в архив и считывать из архива, печатать на принтере.