Программа обработки информации о пропусках занятий студентами
Разработка информационно-аналитической программы о пропусках занятий студентами учебных заведений. Технические характеристики; постановка задачи, основные типы данных; алгоритм программы, выбор языка программирования. Технико-экономические показатели.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.12.2012 |
Размер файла | 175,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
АННОТАЦИЯ
В данном документе описывается программа, написанная в соответствии с постановкой задачи на курсовое проектирование по теме "Программа обработки информации о пропусках занятий студентами" по дисциплине "Основы программирования и алгоритмические языки". Входными данными является файл, в котором храниться таблица с информацией о студентах: группа, фамилия, пропуски занятий по предметам, оправданные пропуски занятий по предметам. Для проверки функционирования программы разработан тестовый пример. Результаты тестирования показывают, правильность выполнения программой всех операции по обработке входных данных и формированию выходных данных.
Область применения программы - любое государственное или коммерческое учебное заведение, где требуется анализ информации о пропусках занятий студентов.
СОДЕРЖАНИЕ
Введение
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 CVIC_1_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 - которая сохраняет список в файл и завершает выполнение программы.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Рисунок 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'
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Рисунок 2.2 - Процедура Del
2.6 Описание процедур
Функция getp(n:integer):ptabl - передается параметр n - номер элемента списка, возвращается указатель на элемент с этим номером;
Процедура sort(t:integer) - сортирует список по полю t;
Процедура org - создает список;
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Рисунок 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 := $0F;
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)<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;
end;
end;
procedure org;
var
f:text;
begin
assign(f,'base.txt');
reset(f);
read(f,newe.num);
if newe.num='99999' 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='99999' 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)<size) and (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)<size) and (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 - помощь
- Пункт Выход - выход из программы
- Размещено на Allbest.ru
Подобные документы
Область применения – учебные учреждения, где ведется учет пропусков занятий студентами. Технические характеристики разрабатываемого проекта: описание основных типов входных и выходных данных, алгоритм программы. Технико-экономические показатели проекта.
курсовая работа [906,3 K], добавлен 28.12.2010Технические характеристики: постановка задачи, описание основных типов входных и выходных данных. Описание алгоритмов основной программы и процедур удаления и исправления данных в таблицах. Выбор языка программирования. Технико-экономические показатели.
курсовая работа [478,1 K], добавлен 28.12.2012Назначение программного модуля (базы данных). Разработка информационной базы данных для колледжа. Поиск пользователями информации о преподавателях и дисциплинах. Анализ входной и выходной информации. Разработка алгоритма работы программы-приложения.
реферат [513,1 K], добавлен 22.10.2012Си - это язык программирования общего назначения. Постановка задачи: разработка программы - калькулятора. Метод решения задачи. Алгоритм работы программы. Технические данные для использования. Описание основных функций.
курсовая работа [14,1 K], добавлен 23.05.2002Приобретение теоретических и практических навыков программирования на языке Паскаль. Математическая формулировка задачи и выбор метода обработки информации. Разработка алгоритма и его описание. Описание программы. Форма представления исходных данных.
курсовая работа [224,3 K], добавлен 11.02.2016Назначение и область применения, технические характеристики, постановка задачи, описание алгоритма и организация входных и выходных данных для программы. Разработка, описание логической структуры, используемые технические средства и условия выполнения.
курсовая работа [969,3 K], добавлен 26.03.2009Постановка задачи и математическое описание ее решения. Назначение программного обеспечения. Описание принятых идентификаторов. Выбор языка программирования и написание программы на входном языке. Методика отладки программы и проведение ее тестирования.
курсовая работа [96,1 K], добавлен 25.06.2013Организация вычислительных процессов и программирования на алгоритмическом языке. Создание программы "Калькулятор". Выбор языка и среды программирования. Функциональная схема работы программы, описание разработанных алгоритмов. Способы устранения ошибок.
курсовая работа [434,1 K], добавлен 27.08.2012Разработка технологии обработки информации, структуры и формы представления данных. Проектирование программных модулей. Блок-схема алгоритма и исходный код программы анализа арифметического выражения, синтаксического анализа простой программы на языке С.
курсовая работа [2,4 M], добавлен 12.12.2011Технико-математическое описание задачи. Требования к программе учета книг и читателей библиотеки. Описание языка программирования. Алгоритмы обработки информации. Текст программы. Инструкция на выполнение: вызов и загрузка, входные и выходные данные.
дипломная работа [1,2 M], добавлен 29.06.2012