Помощь в написании студенческих работ
Антистрессовый сервис

Программа обработки информации о пропусках занятий студентами

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Развитие компьютерных технологий позволило упростить ручную, монотонную и расчетную работу. На данный момент создано большое количество программ, обрабатывающих разнотипную информацию. В настоящее время работа любого предприятия просто не мыслима без применения компьютерных технологий. Современные программы могут значительно упростить процесс управления предприятием и производством. И только… Читать ещё >

Программа обработки информации о пропусках занятий студентами (реферат, курсовая, диплом, контрольная)

АННОТАЦИЯ

В данном документе описывается программа, написанная в соответствии с постановкой задачи на курсовое проектирование по теме «Программа обработки информации о пропусках занятий студентами» по дисциплине «Основы программирования и алгоритмические языки». Входными данными является файл, в котором храниться таблица с информацией о студентах: группа, фамилия, пропуски занятий по предметам, оправданные пропуски занятий по предметам. Для проверки функционирования программы разработан тестовый пример. Результаты тестирования показывают, правильность выполнения программой всех операции по обработке входных данных и формированию выходных данных.

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

1. Назначение и область применения

2. Технические характеристики

2.1 Постановка задачи

2.2 Описание основных типов данных

2.3 Входные данные

2.4 Выходные данные

2.5 Описание алгоритма программы

2.5.1 Основная программа

2.5.2 Процедура Del

2.5.3 Процедура Saveto

2.5 Описание процедур

2.7 Выбор языка программирования

3. Основные технико-экономические показатели Заключение Библиографический список

Приложение

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

1. НАЗНАЧЕНИЕ И ОБЛАСТЬ ПРИМЕНЕНИЯ

Данная программа пример работы базы учебного заведения данных учебного заведения. В ней учитывается информация о студентах группа, фамилия, пропуски занятий по предметам, оправданные пропуски занятий по предметам. В зависимости от выбора пункта меню пользователем, результатами работы программы могут быть: 1-статистические данные по прогулам занятий 2-данные по определенному студенту 3-общий список данных по студентам.

К достоинствам данной программы можно отнести то что она написана в на языке Visual C++ и поэтому создает полноценное Windows-приложение, что удовлетворяет требованиям сегодняшнего времени.

Недостатком данной программы является то, что для обработки такой информации лучше использовать языки программирования, предназначенные для разработки баз данных, например FoxPro.

2. ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ

2.1 Постановка задачи

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

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

Структура записи: шифр группы (6 символов), фамилия (15 символов), пропущено часов, оправдано часов.

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

2.2 Описание основных типов данных

Для обработки и хранения входных данных в программе был создан класс StudData, включающий в себя структуру student и функции для работы для работы с объектами StudData:

struct student

{

char group[N], fam[N];

int propusk[5][M];

};

class StudData: public CVIC1_0Dlg

{

protected:

student stud;

StudData *left,*right;

public:

void vivod (StudData *ptop);

StudData *add_tree (student);

void progul_st1(StudData *, int*, int*);

int poisk (char *str);

void write_data ();

}*Top;

Информация, содержащаяся в полях структуры student:

grup — группа;

fio — фамилия;

propuskмассив, содержит оправданные и неоправданные пропуски по предметам ;

Информация, содержащаяся в полях структуры StudData:

Stud-объект структуры student содержит всю информацию о студентах (смотри student);

leftуказатель на левое поддерево

rightуказатель на правое поддерево

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

2.3 Входные данные

Входные данные представляют собой текстовый файл, в котором по строкам разбита информация о студентах — Таблица 2.1.

Таблица 2.1

Пример входных данных И-22 Бондарева 9 8 7 6 5 4 3 2 1 1

И-22 Герасимов 21 9 8 87 9 1 2 3 4 5

И-22 Заря 9 0 0 0 0 0 0 0 0 0 0

И-22 Хоролич 2 2 2 2 2 0 0 0 0 0

И-22 Гуща 12 8 9 9 9 0 5 5 1 1

2.4 Выходные данные

Выходные данные представляют собой информацию о зарплате — Таблица 2.2.

Таблица 2.2

Пример выходных данных Количество рабочих Средняя зарплата

N цеха Всего в том числе Всего в том числе Муж Жен Муж Жен

1 17 13 4 542 584 500

2 13 9 4 557 601 513

3 8 7 1 502 559 445

4 3 3 0 277 554 0

5 3 3 0 165 330 0

6 2 2 0 167 335 0

7 5 4 1 852 747 957

8 4 3 1 794 617 971

9 1 1 0 277 554 0

10 2 2 0 257 514 0

11 2 2 0 242 485 0

2.5 Описание алгоритма программы

2.5.1 Основная программа (рис. 2.1)

Блок 1. Присвоение начальных значений переменных.

Блок 2. Вызов процедуры Org — которая организует чтение списка из файла Блок 3. Вызов процедуры Show — которая выводит список на экран.

Блок 4. Вызов процедуры Main — в которой выполняются все действия по работе со списком.

Блок 5. Вызов процедуры Close — которая сохраняет список в файл и завершает выполнение программы.

Рисунок 2.1 — Основная программа

2.5.2 Процедура Del — удаление элементов из списка (рис. 2.2)

Блок 1. Проверка, выполняется ли условие cur=1, если да то дальше Блок 2, если нет Блок 5.

Блок 2. Так как выполнилось условие cur=1, то значит удаляется первый элемент. Переменной temp ставим указатель на первый элемент списка.

Блок 3. Вызывается процедура Dispose — освобождение памяти занимаемой переменной left.

Блок 4. Переменная left указывает на первый элемент списка. Количество элементов уменьшается на 1.

Блок 5. Проверка, удаляется ли последний элемент. Если да то Блок 6, в противном случае Блок 9.

Блок 6. Так как выполнилось условие cur=count, то значит удаляется последний элемент. Переменной temp ставим указатель на последний элемент списка.

Блок 7. Вызывается процедура Dispose — освобождение памяти занимаемой переменной right.

Блок 8. Переменная right указывает на последний элемент списка.

Блок 9. Переменная temp указывает на удаляемый элемент списка.

Блок 10. Вызывается процедура Dispose — освобождение памяти занимаемой переменной temp.

Блок 11. Количество элементов уменьшается на 1.

2.5.3 Процедура Saveto — сохранение списка в файл (рис. 2.3)

Блок 1. Переменной f присваивается указатель на файл `out.txt'.

Блок 2. Файл `out.txt' обнуляется.

Блок 3. Переменной temp присваивается указатель на начало списка.

Блок 4. Проверяется условие temp<>nil: если условие выполняется то Блок 5, если нет Блок 7.

Блок 5. Запись элемента списка в файл.

Блок 6. Указатель temp на следующий элемент списка.

Блок 7. Закрытие файла `out.txt'

Рисунок 2.2 — Процедура Del

2.6 Описание процедур

Функция getp(n:integer):ptabl - передается параметр n — номер элемента списка, возвращается указатель на элемент с этим номером;

Процедура sort(t:integer) — сортирует список по полю t;

Процедура org - создает список;

Рисунок 2.3 — Процедура Saveto

Процедура show - создает список;

Функция menum:integer — возвращает номер выбранного пункта меню;

Процедура saveto - сохраняет список в файл;

Процедура add - добавляет элемент в список;

Процедура edit - редактирует элемент списка;

Процедура del - удаляет элемент из списка;

Процедура help - вывод помощи;

Процедура close - выход из программы;

Процедура main - процедура, в которой идет обработка меню;

2.7 Выбор языка программирования

Выбрав языком программирования Turbo Pascal 7.0 я руководствовался следующими критериями:

1. Для разработки программ такого типа удобнее использовать язык высокого уровня;

2. Легкость в работе с указателями;

3. Достаточная скорость выполнения готовой программы;

Всем этим требованиям удовлетворяет язык программирования Turbo Pascal 7.0.

3. ОСНОВНЫЕ ТЕХНИКО-ЭКОНОМИЧЕСКИЕ ПОКАЗАТЕЛИ

В результате компиляции программы компилятором Turbo Pascal 7.0 был получен исполняемый файл формата DOS EXE размером 37 Кбайт, что является приемлемым размером для программ такого типа.

Для выполнения требуется процессор класса 286.

Программа может работать под управлением операционной системы класса DOS, при этом сохраняет работоспособность и в режиме эмуляции MS-DOS операционной системой Windows 9x.

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

Заключение

Данная программа, составлена в соответствии с постановкой задачи на курсовое проектирование по теме «Программа обработки информации о пропусках занятий студентами» по дисциплине «Основы программирования и алгоритмические языки» (ОПиАЯ). При написании программы использованы методические указания по курсовому проектированию по дисциплине «ОПиАЯ». Для проверки работоспособности программы и правильности обработки входных данных разработан тестовый пример. Тестирование программы подтвердило, что программа правильно выполняет обработку данных и выдаёт верные результаты. Всё это свидетельствует о работоспособности программы и позволяет сделать вывод о пригодности программы к решению практических задач по обработке экономической информации.

информационный программа пропуск занятие

ПРИЛОЖЕНИЕ А

Текст программы

uses dos, crt;

const

wdelay = 70;

mainmenu: array [1.7] of string=(' Добавление данных ',

' Редактирование данных ',

' Удаление данных ',

' Сортировка данных ',

' Обработка данных ',

' Помощь ',

' Выход ');

sortmenu: array [1.8] of string=(' Номеру ',

' Фамилии ',

' Году рождения ',

' Полу ',

' Стажу ',

' Разряду ',

' Номеру цеха ',

' Зарплате ');

type

Ptabl = ^Ttabl;

tablinf = record

num:string[5];

fio:string[22];

godr:string[4];

pol:string[7];

stazh:string[2];

razr:string[1];

ceh:string[2];

uch:string[4];

zarp:string[5];

end;

Ttabl=record

inf:tablinf;

next, prev: Ptabl;

end;

var

cehnum:array[1.20] of record

n:string;

rab_v, rab_m, rab_w:integer;

zar_v, zar_m, zar_w:integer;

end;

newe:tablinf;

temp, left, right, tabl: Ptabl;

j, c, starty, perc, i, cur, beg, lin, lnum, count: integer;

ch:char;

procedure cls;

var

r:registers;

begin

r.ah := $0 °F;

intr ($ 10,r);

r.ah := $ 00;

intr ($ 10,r);

end;

procedure hidecursor;

var

r:registers;

begin

r.ax := $ 0100;

r.cx := $ 2607;

intr ($ 10,r);

end;

procedure showcursor;

var

r:registers;

begin

r.ax := $ 0100;

r.cx := $ 0506;

intr ($ 10,r);

end;

function getp (n:integer):ptabl;

var

c:integer;

el:Ptabl;

begin

c := 1;

el := left;

while c<>n do

begin

inc (c);

el := el^.next;

end;

getp := el;

end;

function inttostr (i:longint):string;

var

s:string[11];

begin

str (i, s);

inttostr := S;

end;

function strtoint (s:string):longint;

var

i, code: integer;

begin

while s[1]=' ' do delete (s, 1,1);

while s[length (s)]=' ' do delete (s, length (s), 1);

val (s, i, code);

strtoint := i;

end;

procedure flip (var t1, t2:ptabl);

var

d:tablinf;

begin

d := t1^.inf;

t1^.inf := t2^.inf;

t2^.inf := d;

end;

procedure sort (t:integer);

var

temp1,temp2:ptabl;

s, i, j:integer;

begin

s := 1;

for i := 1 to count do

for j := 1 to count do begin

temp1 := getp (i);

temp2 := getp (j);

if s=2 then

case t of

1:if strtoint (temp1^.inf.num)>strtoint (temp2^.inf.num) then

flip (temp1,temp2);

2:if temp1^.inf.fio>temp2^.inf.fio then flip (temp1,temp2);

3:if strtoint (temp1^.inf.godr)>strtoint (temp2^.inf.godr) then

flip (temp1,temp2);

4:if temp1^.inf.pol>temp2^.inf.pol then flip (temp1,temp2);

5:if strtoint (temp1^.inf.stazh)>strtoint (temp2^.inf.stazh) then

flip (temp1,temp2);

6:if strtoint (temp1^.inf.razr)>strtoint (temp2^.inf.razr) then

flip (temp1,temp2);

7:if strtoint (temp1^.inf.ceh)>strtoint (temp2^.inf.ceh) then

flip (temp1,temp2);

8:if strtoint (temp1^.inf.zarp)>strtoint (temp2^.inf.zarp) then

flip (temp1,temp2);

end else

if s=1 then

case t of

1:if strtoint (temp1^.inf.num)

flip (temp1,temp2);

2:if temp1^.inf.fio

3:if strtoint (temp1^.inf.godr)

flip (temp1,temp2);

4:if temp1^.inf.pol

5:if strtoint (temp1^.inf.stazh)

flip (temp1,temp2);

6:if strtoint (temp1^.inf.razr)

flip (temp1,temp2);

7:if strtoint (temp1^.inf.ceh)

flip (temp1,temp2);

8:if strtoint (temp1^.inf.zarp)

flip (temp1,temp2);

end;

end;

end;

procedure org;

var

f:text;

begin

assign (f,'base.txt');

reset (f);

read (f, newe. num);

if newe. num='99 999' then exit;

read (f, newe. fio);read (f, newe. godr);

read (f, newe. pol);read (f, newe. stazh);

read (f, newe. razr);read (f, newe. ceh);

read (f, newe. uch);read (f, newe. zarp);

new (tabl);

tabl^.inf := newe;

tabl^.next := nil;

tabl^.prev := nil;

left := tabl;

right := tabl;

readln (f);

count := 1;

while true do begin

read (f, newe. num);

if newe. num='99 999' then exit;

read (f, newe. fio);read (f, newe. godr);

read (f, newe. pol);read (f, newe. stazh);

read (f, newe. razr);read (f, newe. ceh);

read (f, newe. uch);read (f, newe. zarp);

new (tabl);

tabl^.inf := newe;

tabl^.next := nil;

tabl^.prev := right;

right^.next := tabl;

right := tabl;

inc (count);

readln (f);

end;

close (f);

end;

procedure window (xs, ys: integer;cap:string);

procedure wind (w, h: integer;cap:string);

var

i, j, l, u: integer;

begin

l := (80-w) div 2;

u := (25-h) div 2;

for i := l to l + w — 1 do

for j := u to u + h — 1 do

begin

gotoxy (i, j);

write (' ');

end;

textcolor (1);textbackground (3);

gotoxy (l, u);write ('г');

gotoxy (l + w-1,u);write ('');

gotoxy (l, u + h-1);write ('L');

gotoxy (l + w-1,u + h-1);write ('-');

for i := u + 1 to u + h-2 do

begin

gotoxy (l, i);

write ('¦');

gotoxy (l + w-1,i);

write ('¦');

end;

for i := l + 1 to l + w-2 do

begin

gotoxy (i, u);

write ('=');

gotoxy (i, u + h-1);

write ('=');

end;

gotoxy (l + (w-length (cap) + 2) div 2−1,u);write (' ', cap,' ');

end;

begin

textcolor (1);textbackground (3);

for i := 40 downto ((80-xs) div 2) do

begin

gotoxy (i, 25 div 2);

writeln ('-');

gotoxy (80-i-2,25 div 2);

writeln ('-');

delay (wdelay);

end;

for i := 1 to ys do

begin

wind (xs, i, cap);

delay (wdelay + 20);

end;

textcolor (0);

textbackground (7);

end;

procedure inp (x, y, size:integer;cap, def: string);

var

k, i: integer;

ch:char;

s:string;

begin

k := x + length (cap) + 1;

gotoxy (x, y);

write (cap,' ');

textbackground (1);

for i := 1 to size do write (' ');

textcolor (15);

gotoxy (k, y);

write (def);

textcolor (1);textbackground (3);

end;

function input (x, y, size:integer;cap, def: string;num:boolean):string;

var

code, k, i:integer;

ch:char;

s:string;

begin

k := x + length (cap) + 1;

gotoxy (x, y);

write (cap,' ');

textbackground (1);

for i := 1 to size do write (' ');

textcolor (15);

gotoxy (k, y);

s := def;

write (s);

gotoxy (wherex-1,wherey);

repeat

ch := readkey;

if (ch<>#13) and (ch<>#27) then

begin

if (ch=#8) and (length (s)>0) then delete (s, length (s), 1) else

if num and (ch>='0') and (ch<='9') then

begin

if (length (s)=0) and (ch<>#8) then s:=s+ch;

if (length (s)=size) and (ch<>#8) then s[length (s)] := ch;

end else

if not num then

begin

if (length (s)=0) and (ch<>#8) then s:=s+ch;

if (length (s)=size) and (ch<>#8) then s[length (s)] := ch;

end;

gotoxy (k, y);

for i := 1 to size do write (' ');

gotoxy (k, y);

write (s);

if length (s)=size then gotoxy (wherex-1,wherey);

end;

until (ch=#13) or (ch=#27);

textcolor (1);textbackground (3);

input := s;

end;

procedure show;

begin

textcolor (0);

textbackground (7);

gotoxy (1,starty);

write

('write

'¦ Номер ¦ ФИО ¦ Годр ¦ Пол ¦ Ст ¦ Р ¦ НЦ ¦ НУч. ¦ Зарп. ¦');

write';

gotoxy (1,starty + 3);

temp := getp (beg);

for i := 1 to lnum do

begin

if i=lin then

begin

textcolor (7);

textbackground (1);

with temp^.inf do

write ('¦ ', num,' ¦ ', fio,' ¦ ', godr,' ¦ ', pol,' ¦ ', stazh,' ¦ ', razr,' ¦ ', ceh,' ¦

', uch,' ¦ ', zarp,' ¦');

textcolor (0);

textbackground (7);

end else

with temp^.inf do

write ('¦ ', num,' ¦ ', fio,' ¦ ', godr,' ¦ ', pol,' ¦ ', stazh,' ¦ ', razr,' ¦ ', ceh,' ¦

', uch,' ¦ ', zarp,' ¦');

temp := temp^.next;

end;

write'

textcolor (7);

textbackground (0);

perc := trunc ((100/count)*(beg + lin-1));

gotoxy (1,starty + lnum + 4);

textcolor (15);

write ('Запись №', cur:2,' из ', count);

gotoxy (80,starty + 2 + round ((lnum/100)*perc));

write';

textcolor (15);

textbackground (1);

gotoxy (33,starty + lnum + 5);

write (' TAB — Menu ');

end;

function menum: integer;

var

c:char;

i, lp: integer;

begin

lp := 1;

window (25,9,'Menu');

repeat

if (c=#80) and (lp<7) then inc (lp);

if (c=#72) and (lp>1) then dec (lp);

for i := 1 to 7 do if i=lp then

begin

textcolor (7);textbackground (1);

gotoxy (28,8 + i);

write (mainmenu[i]);

end else

begin

textcolor (1);textbackground (3);

gotoxy (28,8 + i);

write (mainmenu[i]);

end;

textcolor (1);textbackground (3);

c := readkey;

until (c=#27) or (c=#13);

if c=#13 then menum := lp;

end;

procedure saveto;

var

f:text;

begin

assign (f,'out.txt');

rewrite (f);

temp := getp (beg);

while temp<>nil do

with temp^.inf do

begin

writeln (f,'¦ ', num,' ¦ ', fio,' ¦ ', godr,' ¦ ', pol,' ¦ ', stazh,' ¦ ', razr,' ¦ ', ceh,' ¦

', uch,' ¦ ', zarp,' ¦');

temp := temp^.next;

end;

close (f);

end;

procedure add;

var

p, er: integer;

st:string;

begin

window (31,11,'Добавление:');

inp (26,8,5,'Номер:','');

inp (26,9,22,'ФИО:','');

inp (26,10,4,'Год рождения:','');

inp (26,11,7,'Пол:','');

inp (26,12,2,'Стаж:','');

inp (26,13,1,'Разряд:','');

inp (26,14,2,'Номер цеха:','');

inp (26,15,4,'Номер участка:','');

inp (26,16,5,'Зарплата:','');

st := input (26,8,5,'Номер:','', true);

if length (st)<5 then for p := 1 to 5-length (st) do st := st + ' ';

newe.num := st;

st := input (26,9,22,'ФИО:','', false);

if length (st)<22 then for p := 1 to 22-length (st) do st := st + ' ';

newe.fio := st;

st := input (26,10,4,'Год рождения:','', true);

if length (st)<4 then for p := 1 to 4-length (st) do st := st + ' ';

newe.godr := st;

st := input (26,11,7,'Пол:','', false);

if st<>'жен' then st:='муж';

if length (st)<7 then for p := 1 to 7-length (st) do st := st + ' ';

newe.pol := st;

st := input (26,12,2,'Стаж:','', true);

if length (st)<2 then for p := 1 to 2-length (st) do st := st + ' ';

newe.stazh := st;

st := input (26,13,1,'Разряд:','', true);

newe.razr := st;

st := input (26,14,2,'Номер цеха:','', true);

if length (st)<2 then for p := 1 to 2-length (st) do st := st + ' ';

newe.ceh := st;

st := input (26,15,4,'Номер участка:','', true);

if length (st)<4 then for p := 1 to 4-length (st) do st := st + ' ';

newe.uch := st;

st := input (26,16,5,'Зарплата:','', true);

if length (st)<5 then for p := 1 to 5-length (st) do st := st + ' ';

newe.zarp := st;

new (tabl);

tabl^.inf := newe;

tabl^.next := nil;

tabl^.prev := right;

right^.next := tabl;

right := tabl;

inc (count);

end;

procedure edit;

var

p, er: integer;

st:string;

begin

window (31,11,'Добавление:');

inp (26,8,5,'Номер:', getp (cur)^.inf.num);

inp (26,9,22,'ФИО:', getp (cur)^.inf.fio);

inp (26,10,4,'Год рождения:', getp (cur)^.inf.godr);

inp (26,11,7,'Пол:', getp (cur)^.inf.pol);

inp (26,12,2,'Стаж:', getp (cur)^.inf.stazh);

inp (26,13,1,'Разряд:', getp (cur)^.inf.razr);

inp (26,14,2,'Номер цеха:', getp (cur)^.inf.ceh);

inp (26,15,4,'Номер участка:', getp (cur)^.inf.uch);

inp (26,16,5,'Зарплата:', getp (cur)^.inf.zarp);

st := input (26,8,5,'Номер:', getp (cur)^.inf.num, true);

if length (st)<5 then for p := 1 to 5-length (st) do st := st + ' ';

getp (cur)^.inf.num := st;

st := input (26,9,22,'ФИО:', getp (cur)^.inf.fio, false);

if length (st)<22 then for p := 1 to 22-length (st) do st := st + ' ';

getp (cur)^.inf.fio := st;

st := input (26,10,4,'Год рождения:', getp (cur)^.inf.godr, true);

if length (st)<4 then for p := 1 to 4-length (st) do st := st + ' ';

getp (cur)^.inf.godr := st;

st := input (26,11,7,'Пол:', getp (cur)^.inf.pol, false);

if st<>'жен' then st:='муж';

if length (st)<7 then for p := 1 to 7-length (st) do st := st + ' ';

getp (cur)^.inf.pol := st;

st := input (26,12,2,'Стаж:', getp (cur)^.inf.stazh, true);

if length (st)<2 then for p := 1 to 2-length (st) do st := st + ' ';

getp (cur)^.inf.stazh := st;

st := input (26,13,1,'Разряд:', getp (cur)^.inf.razr, true);

getp (cur)^.inf.razr := st;

st := input (26,14,2,'Номер цеха:', getp (cur)^.inf.ceh, true);

if length (st)<2 then for p := 1 to 2-length (st) do st := st + ' ';

getp (cur)^.inf.ceh := st;

st := input (26,15,4,'Номер участка:', getp (cur)^.inf.uch, true);

if length (st)<4 then for p := 1 to 4-length (st) do st := st + ' ';

getp (cur)^.inf.uch := st;

st := input (26,16,5,'Зарплата:', getp (cur)^.inf.zarp, true);

if length (st)<5 then for p := 1 to 5-length (st) do st := st + ' ';

getp (cur)^.inf.zarp := st;

end;

procedure del;

begin

if cur=1 then

begin

temp := left^.next;

temp^.prev := nil;

dispose (left);

left := temp;

dec (count);

end else

if cur=count then

begin

temp := right^.prev;

temp^.next := nil;

dispose (right);

right := temp;

dec (count);

dec (beg);

end else

begin

temp := getp (cur);

temp^.prev^.next := temp^.next;

temp^.next^.prev := temp^.prev;

dispose (temp);

dec (count);

end;

lin := 1;

beg := 1;

end;

function sortby: integer;

var

c:char;

i, lp: integer;

begin

lp := 1;

window (30,10,'Сортировать по:');

repeat

if (c=#80) and (lp<8) then inc (lp);

if (c=#72) and (lp>1) then dec (lp);

for i := 1 to 8 do if i=lp then

begin

textcolor (7);textbackground (1);

gotoxy (26,7 + i);

write (sortmenu[i]);

end else

begin

textcolor (1);textbackground (3);

gotoxy (26,7 + i);

write (sortmenu[i]);

end;

textcolor (1);textbackground (3);

c := readkey;

until (c=#27) or (c=#13);

if c=#13 then sortby := lp;

end;

procedure inf;

var

n, nceh: integer;

sr_v, sr_m, sr_w:longint;

s:string;

begin

nceh := 1;

sort (7);

temp := left;

s := left^.inf.ceh;

cehnum[nceh]. n := s;

while temp<>nil do

begin

if s<>temp^.inf.ceh then

begin

inc (nceh);

cehnum[nceh]. n := temp^.inf.ceh;

end;

s := temp^.inf.ceh;

temp := temp^.next;

end;

for i := 1 to nceh do

begin

temp := left;

while temp<>nil do

begin

if strtoint (temp^.inf.ceh)=strtoint (cehnum[i]. n) then

begin

if temp^.inf.pol='муж ' then inc (cehnum[i]. rab_m) else

inc (cehnum[i]. rab_w);

if temp^.inf.pol='муж ' then cehnum[i]. zar_m := cehnum[i]. zar_m +

strtoint (temp^.inf.zarp) else

cehnum[i]. zar_w := cehnum[i]. zar_w + strtoint (temp^.inf.zarp);

end;

temp := temp^.next;

end;

temp := left;

end;

window (54,nceh + 8,'');

textcolor (1);textbackground (3);

gotoxy (13,3);

write ('');

gotoxy (13,4);

write ('¦ N цеха ¦ Количество рабочих ¦ Средняя зарплата ¦');

gotoxy (13,5);

write ('');

gotoxy (13,6);

write ('¦ ¦ Всего ¦ в том числе ¦ Всего ¦ в том числе ¦');

gotoxy (13,7);

write ('');

gotoxy (13,8);

write ('¦ ¦ ¦ Муж ¦ Жен ¦ ¦ Муж ¦ Жен ¦');

gotoxy (13,9);

write ('');

for i := 1 to nceh do

begin

gotoxy (13,9 + i);

write ('¦ ', cehnum[i]. n,' ¦ ',(cehnum[i]. rab_w + cehnum[i]. rab_m):2,' ¦

', cehnum[i]. rab_m:2,' ¦ ',

cehnum[i]. rab_w:2,' ¦ ');

if cehnum[i]. zar_m<>0 then

sr_m := cehnum[i]. zar_m div cehnum[i]. rab_m else sr_m := 0;

if cehnum[i]. zar_w<>0 then

sr_w := cehnum[i]. zar_w div cehnum[i]. rab_w else sr_w := 0;

if (cehnum[i]. rab_w + cehnum[i]. rab_m)<>0 then

sr_v := (sr_w + sr_m) div 2 else sr_v := 0;

write (sr_v:5,' ¦ ', sr_m:4,' ¦ ', sr_w:4,' ¦');

end;

gotoxy (13,10 + nceh);

write ('');

readkey;

end;

procedure help;

begin

window (40,15,'Помощь');

textcolor (1);textbackground (3);

gotoxy (22,6);

write ('Клавиши управления программой:');

gotoxy (22,7);write ('Up — на одну строку вверх');

gotoxy (22,9);write ('Down — на одну строку вниз');

gotoxy (22,10);write ('PgUp — на экран вверх');

gotoxy (22,11);write ('PgDown — на экран вниз');

gotoxy (22,12);write ('Home — в начало списка');

gotoxy (22,13);write ('End — в конец списка');

gotoxy (22,14);write ('Tab — меню');

gotoxy (22,15);write ('Esc — выход');

readkey;

end;

procedure close;

begin

saveto;

cls;

halt (1);

end;

procedure main;

begin

repeat

if keypressed then

begin

ch := readkey;

if ch=#71 then {home}

begin

lin := 1;beg := 1;

end;

if ch=#9 then {tab}

begin

case menum of

1:add;

2:edit;

3:del;

4:sort (sortby);

5:inf;

6:help;

7:close;

end;

end;

if ch=#79 then {end}

begin

lin := lnum;beg := count-lnum + 1;

end;

if (ch=#73) then {pageup}

begin

lin := 1;

beg := beg-lnum;

if beg<1 then beg := 1;

end;

if (ch=#81) then {pagedown}

begin

lin := lnum;

beg := beg + lnum;

if beg>(count-lnum) then beg := count-lnum + 1;

end;

if ch=#80 then {down}

begin

inc (lin);

if lin>lnum then

begin

lin := lnum;

if (beg + lnum)<=count then inc (beg);

end;

end;

if ch=#72 then {up}

begin

dec (lin);

if lin<1 then

begin

lin := 1;

if beg>1 then dec (beg);

end;

end;

cur := beg + lin-1;

show;

end;

until ch=#27;

end;

begin

cls;

lnum := 18;

starty := 2;

beg := 1;

lin := 1;

cur := 1;

org;

hidecursor;

show;

main;

close;

showcursor;

end.

ПРИЛОЖЕНИЕ Б

Руководство оператора

Для выполнения прграммы необходимо запустить исполняемый файл KURS.EXE. После запуска программы на экране появляется окно — Рисунок 1

Рисунок 1 — основное окно программы

  • При работе с программой используются следующие клавиши:
  • Up — на одну строку вверх;
  • Down — на одну строку вниз;
  • PgUp — на экран вверх;
  • PgDown — на экран вниз;
  • Home — в начало списка;
  • End — в конец списка;
  • Tab — меню;
  • Esc — выход;
  • После нажатия на Tab появляется меню — Рисунок 2
  • Рисунок 2 — основное меню программы
  • При выборе пункта Добавление данных появляется окно ввода данных — Рисунок 3, в котором можно добавить новый элемент в список.
  • Рисунок 3 — добавление элемента
  • При выборе пункта Редактирование данных появляется окно ввода данных — Рисунок 4, в котором можно добавить новый элемент в список.
  • Рисунок 4 — редактирование данных
  • После выбора пункта Удаление данных будет удален текущий элемент.
  • Выбрав Сортировка данных появится окно выбора поля, по которому будет производиться сортировка — Рисунок 5.
  • Рисунок 5 — тип сортировки
  • Пункт Обработка данных — вычисляется количество всего рабочих, из них мужчин и женщин, средняя зарплата, а так же средняя зарплата у мужчин и женщин в отдельности — Рисунок 6.
  • Рисунок 6 — обработка данных
  • Пункт Помощь — помощь в управлении программой — Рисунок 7.
  • Рисунок 7 — помощь
  • Пункт Выход — выход из программы
Показать весь текст
Заполнить форму текущей работой