Программа обработки экономической информации
Аннотация
В данном документе описывается программа, написанная в соответствии с
постановкой задачи на курсовое проектирование по дисциплине "Основы
программирования и алгоритмические языки". Входными данными является файл,
в котором храниться таблица с информацией: группа, предмет, количество
отличных, хороших, удовлетворительных, неудовлетворительных оценок, а также
количество пропущенных лекций и практик. Для проверки функционирования
программы разработан тестовый пример. Результаты тестирования показывают,
правильность выполнения программой всех операции по обработке входных данных и
формированию выходных данных.
Введение
Развитие компьютерных технологий позволило упростить ручную, монотонную и
расчетную работу. На данный момент создано большое количество программ,
обрабатывающих разнотипную информацию. В настоящее время работа любого
предприятия просто не мыслима без применения компьютерных технологий.
Современные программы могут значительно упростить процесс управления
предприятием и производством. И только с использованием компьютеров и
соответствующих программ современное предприятие может плодотворно работать и
достигать немыслимых при некомпьютерной обработке информации результатов.
1.
Назначение и область применения
Данная программа может применяться в институтах или университетах. В ней
учитывается информация о оценках и пропущенных парах. В результате работы
программы выводится таблица, в которой подсчитываются для каждой группы средняя
оценка по предметам.
2. Технические характеристики
.1 Постановка
задачи
Требуется написать программу обработки экономической информации,
осуществляющую ввод исходной информации из файла, необходимую ее организацию,
обработку в соответствии с вариантом задания, а также печать содержимого
исходных файлов и файлов расчетов. Выводимую информацию оформить в виде таблицы
со всеми необходимыми полями записей и результатов расчетов.
Даны учетные записи группах университета или института, в которых
указываются оценки по предметам, а так же количество пропущенных пар. Подсчитать
среднюю оценку для каждой группы, а так же количество пропущенных лекций,
практик и общее количество пропущенных пар (Таблица 2.1)
Структура записей входного массива имеет следующий вид: шифр группы (6
символов), шифр дисциплины (6 символов), количество отличных, хороших,
удовлетворительных, неудовлетворительных оценок, пропущено лекций, пропущено
практических занятий шифр.
Таблица 2.1 -
Выходная таблица
Курс
|
Средний балл
|
Пропущено занятий
|
|
|
лекций
|
практических
|
всего
|
|
|
|
|
|
|
|
|
|
|
В программе необходимо организовать процедуры: открытия файла
с данными, сортировки, добавления, редактирования и удаления данных, а так же
вывод информации по заданию.
2.2
Описание основных типов данных
Для внутреннего хранения входных данных о рабочем в программе
используется комбинированный тип данных:
Ptabl = ^Ttabl;= record:string[6];:string[6];:integer;:
integer;: integer;: integer;: integer;: integer;;=record:tablinf;,prev:Ptabl;
end;
Информация, содержащаяся в полях:
grup:
шифр группы
predm:
предмет
otl: количество
отличных оценок
hor:
количество хороших оценок
ud:
количество удовлетворительных оценок
neud:
количество неудовлетворительных оценок
plec:
количество пропущенных лекций
pprak:
количество пропущенных практик
Для того чтобы возможно было обрабатывать множество записей, необходимо
организовать их в массив или список. В данном случае используется список, так
как заранее неизвестно количество элементов, поэтому нельзя задать размер
массива. Для удобства работы организуется двунаправленный список записей. При
использовании двунаправленного списка возможно организовать просмотр записей
как от начала в конец (прямое направление) так и из конца в начало (обратное),
что используется в процедурах редактирования и удаления записей при перемещении
от одной записи к другой.
2.3 Входные данные
Входные данные представляют собой текстовый файл, в котором по строкам
разбита информация о работниках группах - Таблица 2.2.
Таблица 2.2 - Пример входных данных
И-21д матем 7 6 0 2 22 34
И-21д физик 5 1 5 5 23 44
И-21д прогр 8 5 0 3 23 65
И-21д истор 1 9 8 5 12 12
И-21д химия 2 3 1 1 53 26
И-21д физра 1 5 9 5 22 50
И-21д одм 9 8 8 2 23 10
И-21д опиая 2 0 1 5 18 93
И-22д матем 1 6 3 9 24 56
И-22д физик 4 1 3 3 02 14
И-22д прогр 1 5 6 2 52 30
И-22д истор 6 9 5 0 16 57
И-22д химия 8 6 2 5 12 34
И-22д физра 4 3 9 8 20 54
И-22д одм 9 2 4 6 23 65
И-22д опиая 2 5 6 3 19 18
И-23д матем 6 6 2 2 19 44
И-23д физик 5 2 0 1 20 02
И-23д прогр 8 1 5 5 19 81
И-23д истор 3 7 8 6 19 77
И-23д химия 1 6 6 9 25 44
И-23д физра 9 5 6 8 11 18
И-23д одм 0 3 3 7 11 25
И-23д опиая 3 2 4 4 32 98
И-24д матем 9 0 8 1 32 54
И-24д физик 5 0 9 9 12 08
И-24д прогр 2 2 6 1 30 54
И-24д истор 1 5 5 2 16 59
И-24д химия 4 1 2 5 26 79
И-24д физра 9 3 1 8 14 76
И-24д одм 6 6 8 3 26 59
И-24д опиая 3 1 9 0 24 56
И-25д матем 5 8 6 1 12 90
И-25д физик 2 2 3 9 25 49
И-25д прогр 8 9 1 5 35 97
И-25д истор 9 4 1 7 25 28
И-25д химия 5 3 2 3 32 21
И-25д физра 6 1 5 6 25 88
И-25д опиая 2 5 9 0 35 63
999999
2.4 Выходные данные
Выходные данные представляют собой информацию о зарплате - Таблица 2.3.
Таблица 2.3 - Пример выходных данных
.5 Описание алгоритма программы
2.5.1 Основная программа (рис. 2.4)
Блок 1. Присвоение начальных значений переменных.
Блок 2. Вызов процедуры Org -
которая организует чтение списка из файла
Блок 3. Вызов процедуры Show -
которая выводит список на экран.
Блок 4. Вызов процедуры Main -
в которой выполняются все действия по работе со списком.
Блок 5. Вызов процедуры Close
- которая сохраняет список в файл и завершает выполнение программы.
Рисунок 2.4 - Основная программа
.5.2 Процедура Del - удаление элементов из списка (рис.
2.5)
Блок 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 - Процедура Del
2.5.3 Процедура Saveto - сохранение списка в файл (рис.
2.6)
Блок 1. Переменной f
присваивается указатель на файл ‘out.txt’.
Блок 2. Файл ‘out.txt’ обнуляется.
Блок 3. Переменной temp
присваивается указатель на начало списка.
Блок 4. Проверяется условие temp<>nil: если условие выполняется то Блок 5,
если нет Блок 7.
Блок 5. Запись элемента списка в файл.
Блок 6. Указатель temp
на следующий элемент списка.
Блок 7. Закрытие файла ‘out.txt’.
Рисунок 2.6 - Процедура Saveto
.6 Описание процедур
Функция getp(n:integer):ptabl - передается параметр n - номер элемента списка, возвращается указатель на элемент с
этим номером;
Процедура sort(t:integer) - сортирует список по полю t;
Процедура org - создает список;
Процедура inf - вывод результирующей таблицы;
Процедура show - создает список;
Процедура saveto - сохраняет список в файл;
Процедура add - добавляет элемент в список;
Процедура edit - редактирует элемент списка;
Процедура del - удаляет элемент из списка;
Процедура close - выход из программы.
.7 Выбор языка программирования
Выбрав языком программирования Turbo Pascal 7.0 я
руководствовался следующими критериями:
1. Для разработки программ такого типа удобнее использовать язык высокого
уровня;
2. Легкость в работе с указателями;
. Достаточная скорость выполнения готовой программы;
Всем этим требованиям удовлетворяет язык программирования Turbo Pascal 7.0.
3. Основные технико-экономические показатели
В результате компиляции программы компилятором Turbo Pascal 7.0 был получен исполняемый файл формата DOS EXE, что является приемлемым размером для программ такого
типа.
Для выполнения требуется процессор класса 286.
Программа может работать под управлением операционной системы класса DOS, при этом сохраняет
работоспособность и в режиме эмуляции MS-DOS операционной системой Windows 9x.
Таким образом, программа может выполняться практически на любом доступном
PC компьютере.
Заключение
Данная программа, составлена в соответствии с постановкой задачи на
курсовое проектирование по теме " Программа обработки ведомости о работе
сотрудников" по дисциплине "Основы программирования и алгоритмические
языки" (ОПиАЯ). При написании программы использованы методические указания
по курсовому проектированию по дисциплине "ОПиАЯ". Для проверки
работоспособности программы и правильности обработки входных данных разработан
тестовый пример. Тестирование программы подтвердило, что программа правильно
выполняет обработку данных и выдаёт верные результаты. Всё это свидетельствует
о работоспособности программы и позволяет сделать вывод о пригодности программы
к решению практических задач по обработке экономической информации.
Приложение 1
Текст программы
uses dos,crt;
type= ^Ttabl;=
record:string[6];:string[6];:integer;:integer;:integer;:integer;:integer;:integer;;=record:tablinf;,prev:Ptabl;;:array
[1..50] of
tablinf;:tablinf;,left,right,tabl:Ptabl;,c,starty,perc,i,cur,beg,lin,lnum,count:integer;:char;getp(n:integer):ptabl;:integer;:Ptabl;:=
1;:= left;c<>n do(c);:= el^.next;;:=
el;;inttostr(i:longint):string;:string[11];(i,s);:=
S;;strtoint(s:string):longint;,code:integer;s[1]=' ' do
delete(s,1,1);s[length(s)]=' ' do delete(s,length(s),1);(s,i,code);:=
i;;flip(var t1,t2:ptabl);:tablinf;:= t1^.inf;^.inf := t2^.inf;^.inf :=
d;;sort(t:integer);,temp2:ptabl;,i,j:integer;:= 1;i := 1 to count doj := 1 to
count do begin:= getp(i);:= getp(j);s=2 thent of
:if
temp1^.inf.grup>temp2^.inf.grup then flip(temp1,temp2);
:if
temp1^.inf.predm>temp2^.inf.predm then flip(temp1,temp2);
:if
temp1^.inf.hor>temp2^.inf.hor then flip(temp1,temp2);
:if
temp1^.inf.ud>temp2^.inf.ud then flip(temp1,temp2);
:if
temp1^.inf.neud>temp2^.inf.neud then flip(temp1,temp2);
:if
temp1^.inf.plec>temp2^.inf.plec then flip(temp1,temp2);
:if
temp1^.inf.pprak>temp2^.inf.pprak then flip(temp1,temp2);elses=1 thent of
:if
temp1^.inf.grup<temp2^.inf.grup then flip(temp1,temp2);
:if
temp1^.inf.predm<temp2^.inf.predm then flip(temp1,temp2);
:if
temp1^.inf.otl<temp2^.inf.otl then flip(temp1,temp2);
:if
temp1^.inf.hor<temp2^.inf.hor then flip(temp1,temp2);
:if
temp1^.inf.ud<temp2^.inf.ud then flip(temp1,temp2);
:if
temp1^.inf.neud<temp2^.inf.neud then flip(temp1,temp2);
:if
temp1^.inf.plec<temp2^.inf.plec then flip(temp1,temp2);
:if
temp1^.inf.pprak<temp2^.inf.pprak then
flip(temp1,temp2);;;;org;:text;(f,'base.txt');(f);(f,newe.grup);newe.grup='999999'
then exit;(f,newe.predm);read(f,newe.otl);(f,newe.hor);read(f,newe.ud);(f,newe.neud);read(f,newe.plec);(f,newe.pprak);(tabl);^.inf
:= newe;^.next := nil;^.prev := nil;:= tabl;:= tabl;(f);:= 1;true do
begin(f,newe.grup);newe.grup='999999' then
exit;(f,newe.predm);read(f,newe.otl);(f,newe.hor);read(f,newe.ud);(f,newe.neud);read(f,newe.plec);(f,newe.pprak);(tabl);^.inf
:= newe;^.next := nil;^.prev := right;^.next := tabl;:=
tabl;(count);(f);;(f);;show;(0);lnum<20 then
clrscr;(15);(3);(1,starty);('');('│ Группа │ Предм.
│ 5 │ 4 │ 3 │ 2 │ ПЛ │ ПП │');('');(1,starty + 3);:= getp(beg);i := 1 to lnum doi=lin
then(1);(6);temp^.inf do('│ ',grup,' │ ',predm,' │ ',otl:2,' │
',hor:2,' │ ',ud:2,' │ ',neud:2,' │ ',plec:2,' │
',pprak:2,' │');(15);(3);elsetemp^.inf do('│ ',grup,' │
',predm,' │ ',otl:2,' │ ',hor:2,' │ ',ud:2,' │
',neud:2,' │ ',plec:2,' │ ',pprak:2,' │');:=
temp^.next;;('');(7);(0);(1,starty + lnum + 5);('Запись
№',cur:2,' из ',count);
write('''S''-Сортировать
''A''-Добавить ''E''-Редактировать ''D''-Удалить ''I''-Таблица');
end;saveto;:text;(f,'out.txt');(f);:=
getp(beg);temp<>nil dotemp^.inf do('│ ',grup,' │ ',predm,' │
',otl,' │ ',hor,' │ ',ud,' │ ',neud,' │ ',plec,' │
',pprak,' │');:= temp^.next;;(f);;add;,p,er:integer;:string;(0);;
writeln('Добавление:');('Группа:');
readln(st); if
length(st)<6 then for p := 1 to 6-length(st) do st := st + ' ';.grup :=
st;('Предмет:');(st); if length(st)<6 then for p := 1 to
6-length(st) do st := st + ' ';.predm := st;('5:');(l);newe.otl :=
l;('4:');(l); newe.hor := l;('3:');(l); newe.ud := l;('2:');(l); newe.neud :=
l;('Пропущено лекций:');(l); newe.plec := l;('Пропущено практик:');(l);
newe.pprak := l;(tabl);^.inf := newe;^.next := nil;^.prev := right;^.next :=
tabl;:= tabl;(count);count<=20 then
lnum:=count;;;edit;,p,er:integer;:string;(0);;('Редактирование:');
write('Группа:');
readln(st); if
length(st)<6 then for p := 1 to 6-length(st) do st := st + '
';(cur)^.inf.grup := st;('Предмет:');(st); if length(st)<6 then for p :=
1 to 6-length(st) do st := st + ' ';(cur)^.inf.predm := st;('5:');(l); getp(cur)^.inf.otl
:= l;('4:');(l); getp(cur)^.inf.hor := l;('3:');(l); getp(cur)^.inf.ud :=
l;('2:');(l); getp(cur)^.inf.neud := l;('Пропущено лекций:');(l); getp(cur)^.inf.plec := l;('Пропущено практик:');(l);
getp(cur)^.inf.pprak := l;(0);;;del;count>1 then begincur=1 then:=
left^.next;^.prev := nil;(left);:= temp;(count);elsecur=count then:=
right^.prev;^.next := nil;(right);:= temp;(count);(beg);else:=
getp(cur);^.prev^.next := temp^.next;^.next^.prev :=
temp^.prev;(temp);(count);;:= 1;:= 1;count<lnum then lnum:=count;;;sortby:integer;:char;,lp:integer;(0);;('Сортировать:');('1: Группа');('2: Предмет');('3: Отл');('4: Хор');('5: Уд');('6: Неуд');
writeln('7: Пропущено
лекций');('8: Пропущено практик');
readln(lp);lp>8
then lp:=8;lp<1 then lp:=1;:= lp;;;inf;:integer;,new:integer;,p: real;(1);:=
left;:= 1;[1] := temp^.inf;[1].otl := 0;[1].hor := 0;[1].ud := 0;[1].neud :=
0;temp<>nil dogrupmas[n].grup=temp^.inf.grupbegin[n].otl :=
grupmas[n].otl + temp^.inf.otl;[n].hor := grupmas[n].hor + temp^.inf.hor;[n].ud
:= grupmas[n].ud + temp^.inf.ud;[n].neud := grupmas[n].neud +
temp^.inf.neud;[n].neud := grupmas[n].neud + temp^.inf.neud;[n].plec :=
grupmas[n].plec + temp^.inf.plec;[n].pprak := grupmas[n].pprak +
temp^.inf.pprak;else(n);[n] := temp^.inf;;:= temp^.next;;i:=1 to n
do;(0);;(15);textbackground(3);('');
writeln('Средний Пропущено ');
writeln('Группа ');
writeln(' балл лекц. практ всего ');
writeln('');
for i := 1 to n
do:=grupmas[i].otl*5+grupmas[i].hor*4+[i].ud*3+grupmas[i].neud*2;:=p/(grupmas[i].otl+grupmas[i].hor+[i].ud+grupmas[i].neud);('
',grupmas[i].grup,' ',s:8:3,' ',grupmas[i].plec:5,' ',[i].pprak:5,'
',grupmas[i].plec+grupmas[i].pprak:5,' ');;('');;;close;;;(1);;main;keypressed
then:= readkey;ch=#71 then {home}:= 1;beg := 1;;ch=#79 then {end}:= lnum;beg :=
count-lnum + 1;;(ch=#73) then {pageup}:= 1;:= beg-lnum;beg<1 then beg :=
1;;(ch=#81) then {pagedown}:= lnum;:= beg + lnum;beg>(count-lnum) then beg
:= count-lnum + 1;;ch=#80 then {down}(lin);lin>lnum then:= lnum;(beg +
lnum)<=count then inc(beg);;;ch=#72 then {up}(lin);lin<1 then:=
1;beg>1 then dec(beg);;;(ch='s') or (ch='ы') then sort(sortby);(ch='a') or (ch='ф')
then add;(ch='e') or (ch='у') then edit;(ch='d') or (ch='в')
then del;(ch='i') or (ch='ш') then inf;:= beg +
lin-1;;;ch=#27;;(0);;:= 20;:= 1;:= 1;:= 1;:= 1;;;;;
end.
Приложение 2
Руководство оператора
Для выполнения программы
необходимо запустить исполняемый файл KURS.EXE. После
запуска программы на экране появляется окно - Рисунок 2.1
Рисунок 2.1 -
основное окно программы
При работе с программой используются следующие клавиши:
Up
- на одну строку вверх;
Down - на одну строку вниз;
PgUp - на экран вверх;
PgDown - на экран вниз;
Home - в начало списка;
End
- в конец списка;
Esc
- выход;
‘S’ - сортировка
по полю, которое можно выбрать, нажав соответствующую цифру;
‘A’ - добавление
элемента в список;
‘D’ - удаление
элемента из списка;
‘E’ -
редактирование текущего элемента списка;
При нажатии на клавишу “I” на
экран выводится результирующая таблица - Рисунок 2.2