Обработка табличной информации
При чем шифр группы (6 символов), шифр дисциплины (6 символов), количество отличных, хороших, удовлетворительных, неудовлетворительных оценок, пропущено лекций, пропущено практических занятий, (все последние значения представлены вещественным типом). Шифр группы представляет собой группу студентов; шифр дисциплины это предмет изучаемый группой; оценки отлично, хорошо, удовлетворительно… Читать ещё >
Обработка табличной информации (реферат, курсовая, диплом, контрольная)
Аннотация
В данном документе описывается программа, написанная в соответствии с постановкой задачи на курсовое проектирование по теме «Обработка табличной информации» по дисциплине «Основы программирования и алгоритмические языки». Структура записей входного файла имеет следующий вид: шифр группы (6 символов), шифр дисциплины (6 символов), количество отличных, хороших, удовлетворительных, неудовлетворительных оценок, пропущено лекций, пропущено практических занятий.
Для проверки функционирования программы разработан тестовый пример. Результаты тестирования показывают, правильность выполнения программой всех операции по обработке входных данных и формированию выходных данных.
Область применения программы — любое высшее учебное заведение, где требуется анализ информации об успеваемости и количестве пропущенных занятий.
По окончанию курса «Основы программирования и алгоритмические языки» стоит задача в закреплении навыков программирования на ЭВМ. Она состоит в написании программы на языке высокого уровня (Си), знакомстве с организацией и принципами действия операционных систем, изучение правил оформление программной документации. В современном мире обработки информации очень удобно использование диалогового режима работы. Так как базы данных широко применяются в современном обществе то необходимо улучшать и более широко применять данный тип информации. Записи являются прообразом баз данных. Для небольших объемов данных и достаточно простых расчетов (в обучающих целях) можно использовать высокоуровневые языки программирования, такие как Си, Паскаль и т. д. данные языки позволяют использовать динамические и статические структуры данных, которые можно использовать для обработки такой информации. Такую программу можно применять в высших учебных заведениях, где используются компьютерная техника. К программе прилагается пояснительная записка, в которой говорится о назначении и области применения этой программы, о ее технических характеристиках, показан тестовый пример выполнения, а также представлено полное описание работы программы.
1. Назначение и область применения
Данная программа пример работы базы данных высшего учебного заведения. В ней учитывается информация о студентах: шифр группы, шифр дисциплины, оценки отлично, хорошо, удовлетворительно, не удовлетворительно, пропущенных лекций и практических занятий. В результате работы программы выводится таблица, в которой подсчитывается средний балл по шифру группы, пропущенных лекций и практик у всей группы и по всем дисциплинам, то есть всего.
Программа работает в текстовом режиме под управлением операционной системы MSDOS v.5.0, а так же Windows3.1/95/98/2000/XP. Для загрузки списка требуется специально организованный файл. Вывод выходной таблицы производится как на экран, так и в файл, задаваемый пользователем. Для работы программы подходит практически любой PC компьютер, оснащенный цветным дисплеем.
1.1 Постановка задачи
Дан входной файл следующей структуры: таблицы с шапкой; в таблице присутствуют следующие поля: Структура записей входного файла имеет следующий вид: шифр группы (6 символов), шифр дисциплины (6 символов), количество отличных, хороших, удовлетворительных, неудовлетворительных оценок, пропущено лекций, пропущено практических занятий, (все последние значения представлены целым типом, ширина поля для них -6 символов, максимальное значение 32 767, минимальное — 0). Требуется обработать входные данные и вывести в файл или на экран выходную таблицу вида, представленного на таблице 2.1.
Таблица 1 — Вид выходной таблицы
Шифр группы | Средний балл | Пропущено занятий | |||
Лекций | Практических | Всего | |||
Интерфейсная часть программы должна быть оформлена в виде меню:
Создание Чтение Данных Добавление Данных Построить таблицу (входные) Удалить данные Корректировать данные Построить таблицу (выходные)
Сохранить в файл Выход из программы Программа также выводит выходную таблицу на дисплей и загружает входные данные из специально подготовленного файла.
1.2 Входные данные
Входными данными служит специальный текстовый файл. Он представляет собой таблицу вида, соответствующего таблице 2.2.
Таблица 2.2 — Выходные данные
Шифр Группы | Шифр дисциплины | Отл. | Хор. | Удовл. | Неуд. | Пропущено | ||
лекций | Практик | |||||||
При чем шифр группы (6 символов), шифр дисциплины (6 символов), количество отличных, хороших, удовлетворительных, неудовлетворительных оценок, пропущено лекций, пропущено практических занятий, (все последние значения представлены вещественным типом). Шифр группы представляет собой группу студентов; шифр дисциплины это предмет изучаемый группой; оценки отлично, хорошо, удовлетворительно, неудовлетворительно—это успеваемость группы по изучаемой дисциплине; пропущено лекций и практик—это посещаемость группы конкретной дисциплины. Количество записей в файле ограничено только доступной оперативной памятью, все записи объединены в таблицу, нарисованную символами псевдографики (при просмотре из-под операционных систем, отличных от MSDOS может некорректно отображаться таблица из-за несоответствия кодировок символов).
1.3 Выходные данные
Выходные данные представлены в таблице 2.3. Шифр группы представляет собой группу студентов; пропущено занятий — это сумма пропущенных лекций и практик по курсу, итого—это итог по всем полям выходной таблици. Эта таблица может быть выведена на дисплей. Как уже указывалось в предыдущем пункте данная таблица может выглядеть некорректно в операционных системах отличных от MSDOS v.5.0 из-за несоответствия кодировок символов и различных шрифтов. Для корректного просмотра в программе типа блокнота для операционных систем Windows 9X следует выставит шрифт ' Terminal ', набор символов ` OEM/DOS `.
Таблица 2.3 — Вид выходных данных
Курс | Пропущено занятий | Количество оценок, % | ||||
Отл. | Хор. | Удовл. | Неуд. | |||
Итого | ||||||
1.4 Выбор и описание структур данных
Построение таблиц, требуемых по заданию, могут включать в себя неизвестное заранее количество элементов, поэтому для хранения входной информации статические переменные неприемлемы. Наиболее подходящим оказывается двунаправленный список так как только в нем возможны: перестановка порядка следования элементов без копирования самой структуры; поиск как в прямом, так и обратном направлении; вставка и удаление элементов наиболее оптимальным образом. В тоже время не требуется поддержка сложных структур данных и методов работы, как в деревьях.
Следующая структура используется для хранения записей входного файла:
struct zap{
char group[6]; //строка из шести символов
char disc[6]; //строка из шести символов
unsigned int otl, hor, udov, neud, //целочисленный тип
lekc, prakt;
};
Информация, содержащаяся в полях:
group — шифр группы;
disc — шифр дисциплины;
otl — количество оценок отлично;
hor — количество оценок хорошо;
udov — количество оценок удовлетворительно;
neud — количество оценок неудовлетворительно;
lekc — пропущено лекций;
prakt — пропущено практик.
Для того чтобы возможно было обрабатывать множество записей, необходимо организовать их в массив или список. В данном случае используется список, так как заранее неизвестно количество элементов, поэтому нельзя задать размер массива. Для удобства работы организуется двунаправленный список записей. При использовании двунаправленного списка возможно организовать просмотр записей как от начала в конец (прямое направление) так и из конца в начало (обратное), что используется в процедурах редактирования и удаления записей при перемещении от одной записи к другой.
1.5 Описание алгоритма программы
Основная программа рассчитана на вызов меню и запуск соответствующей функции программы. Далее последовательно идут блок-схемы всех основных функций программы.
Рисунок 1.1 — Структурная схема алгоритма основной программы Рисунок 1.2 — Продолжение структурной схемы алгоритма
1.оrg1 — функция, которая создает двунаправленный список.
2.оrg — функция, которая считывает данные из предварительно подготовленного файла.
3.dob — функция, которая добавляет элемент в двунаправленный список.
4.vivod — позволяет вводить предварительно обработанные данные, которые используются в программе.
5.udal — позволяет удалять данные из двунаправленного списка как частично так и полностью удаление по шифру группы.
Рисунок 2 — Структурная схема алгоритма функции удаления
6. Korectir — позволяет корректировать данные в двунаправленном списке. Корректировка производится по шифру группы при вводе нужного шифра группы происходит корректирование всей записи.
Рисунок 3 — Структурная схема алгоритма функции корректировки
6. Vihodnaya — позволяет выводить предварительно обработанные данные, которые используются в основной таблице.
7. Save — Сохраняет обработанные данные на жесткий или какой-нибудь другой предварительно подготовленный (указанный) диск.
8. Exit — выход из программы.
1.6 Выбор языка программирования
Программа написана на языке высокого уровня С++ и скомпилирована компилятором Borland C 3.1 для MSDOS v.5.0 с использованием бесплатно распространяемого (посредством FIDO и Internet) пакета ComC для работы с текстовыми окнами, клавиатурой и т. д. Данный пакет предоставляет подобные TurboVision средства для работы с окнами, меню, но занимает значительно меньше места и работает быстрее.
Язык С++ и компилятор выбраны из-за его гибкости, широкого распространения, малого объема исполняемого файла и большой скорости выполнения. Компилятор Borland C++ к тому же включает в себя опциональную возможность оптимизации кода программы как по скорости, так и по размеру
[1−3].
Для разработки программ такого типа удобнее использовать язык высокого уровня;
1. Легкость в работе с указателями;
2. Достаточная скорость выполнения готовой программы;
Всем этим требованиям удовлетворяет язык программирования Borland C++
программа таблица данные алгоритм
2. Технико-экономические показатели
В результате компиляции программы компилятором Borland C++ 3.1 был получен исполняемый файл формата MSDOS EXE размером 52Кбайта, что является приемлемым как для компьютеров десятилетней давности, так тем более современных.
Для работы программа требует приблизительно 1Мбайт оперативной памяти (зависит от количества загруженных записей). Данный объем позволяет программе выполнятся на самом широком круге компьютеров, фактических всех поддерживающих операционную систему DOS.
Для выполнения требуется процессор класса 80×86, видео адаптер поддерживающий VGA, цветной монитор, поддерживающий текстовый режим 80×50 и иметь конфигурацию pal/secam, клавиатура 101keys.
При тщательной оптимизации возможна компиляция данного файла в модели памяти tiny, то есть получение исполняемого файла формата COM, что ещё снижает требования к компьютеру.
Размер входного файла зависит от количества записей в нем и для 36 записей составляет 2Кбайта.
В программе отсутствует ресурсоемкие функции, поэтому производительность центрального процессора не критична.
Программа может работать под управлением операционной системы класса MSDOS v.1.0, при этом сохраняет работоспособность и в режиме эмуляции MS-DOS операционной системой Windows9X, Me, ХР и RedHat Linux. Работоспособность в режиме эмуляции под другими операционными системами не проверялось.
Таким образом программа может выполняться практически на любом доступном PC компьютере.
3. Тестовый пример
Проведем тестовый эксперимент чтобы убедиться в работоспособности программы.
Создадим следующую входную таблицу, такую как таблица 4.1.
Таблица 4.1 — Вид входных данных.
Шифр Группы | Шифр дисциплины | Отл. | Хор. | Удовл. | Неуд. | Пропущено | ||
лекций | практик | |||||||
И-14д | ОС | |||||||
И-21д | Физика | |||||||
И-33д | БЖД | |||||||
И-44д | ТИМС | |||||||
И для этого случая мы получим следующую выходную таблицу, такую же, как и та, что представлена в таблице 4.2.
Таблице 4.2 — Вид выходных данных.
Курс | Пропущено занятий | Количество оценок, % | ||||
Отл. | Хор. | Удовл. | Неуд. | |||
10,0 | 20,0 | 30,0 | 40,0 | |||
18,2 | 22,7 | 27,3 | 31,8 | |||
20,6 | 23,5 | 26,5 | 29,4 | |||
21,7 | 23,9 | 26,1 | 28,3 | |||
Итого | 70,5 | 90,2 | 109,0 | 129,5 | ||
Заключение
Данная программа, составлена в соответствии с постановкой задачи на курсовое проектирование по теме «Разработка программы обработки табличная информации» по дисциплине «Основы программирования и алгоритмические языки» (ОПиАЯ). При написании программы использованы методические указания по курсовому проектированию по дисциплине «ОПиАЯ». Для проверки работоспособности программы и правильности обработки входных и входных данных разработан тестовый пример. Тестирование программы подтвердило, что программа правильно выполняет обработку данных и выдаёт верные результаты. Всё это свидетельствует о работоспособности программы и позволяет сделать вывод о пригодности программы к решению практических задач по обработке табличной информации.
Приложение
Назначение программы
Эта работа является примером программного продукта, который может быть использован в учебных целях. Программа предназначена для подсчета количества пропущенных занятий и количество оценок (в %) в высшем учебном заведении это удобно если в высшем учебном заведении много групп студентов. Она позволяет наглядно представить информацию и проследить своеобразные тенденции рабочего процесса.
1 Условия выполнения программы:
Для работы программа требует приблизительно 200 Кбайт оперативной памяти (зависит от количества загруженных записей). Данный объем позволяет программе выполнятся на самом широком круге компьютеров, фактических всех поддерживающих операционную систему MSDOS v5,0.
Для выполнения требуется процессор класса 80×86, цветной монитор, поддерживающий текстовый режим 80×50.
Размер входного файла зависит от количества записей в нем и для 36 записей составляет 2Кбайта. Размер выходного файла — 742 байта.
1 Выполнение программы:
Управление программой состоит в выборе того или иного пункт меню. Итак, рассмотрим все пункты последовательно.
a) Организация списка:
Данный пункт служит для создания полей структуры непосредственно с клавиатуры. При выборе пункта отображается поля, при последовательном введении данных создаются поля записи об определенных группах.
Для того, чтобы выйти из функции необходимо в поле шифр группы ввести «end».
При выборе пункта отображается поля, при последовательном введении данных создаются поля записи об определенных группах.
После введения нового значения следует нажать «enter» или «Для того, чтобы выйти из функции необходимо в поле шифр группы ввести «end». Далее пользователь вернется к пункту 1 и сможет выбрать следующую запись для изменения. Измененные значения сразу отображаются в выходной таблице на заднем плане.
б) Чтение данных из файла:
При выборе этого пункта текстовый фаил загружается автоматически.
в) Добавление данных в список:
После нажатия клавиши «enter» предлагается ввести данные, при выборе пункта отображаются поля, при последовательном введении данных добавляются поля записи об определенных рабочих.
г) Входная таблица:
Строит выходную таблицу и отображает её на экране.
г) Удаление:
Удаление элемента происходит по шифру группы.
После нажатии клавиши «Enter» предлагается ввести поле шифра группы, если в списке есть искомая группа то происходит её удаление, а если нет то выводится сообщение о том что её нет.
е) Корректировка данных:
В появившемся окне пользователь может ввести шифр группы. При этом если группы нет, то будет выведено соответствующее.
Иначе поле будет откорректировано.
ж) Выходная таблица:
Строит выходную таблицу и отображает её на экране. При этом происходит подсчет соответствующих значений.
з) Сохранение данных:
В появившемся окне пользователь может ввести имя выходного файла. При этом если файл уже присутствовал до того или недоступен для записи пользователь получит соответствующее сообщение.
и) Выход из программы:
Осуществляется клавишей «ESC» или пункта меню. Выходит из программы без сохранения выходного файла.
Содержимое выходной таблицы будет утеряно, так что следует сохранить её заранее.
#include <iostream.h>
#include
#include
#include
#include
typedef char string[30];
const string menu[9] = {
" Создание " ,
" Чтение " ,
" Добавление " ,
" Входная таблица " ,
" Удаление " ,
" Корректировка " ,
" Выходная таблица " ,
" Сохранение " ,
" Выход " };
struct zap
{
char group[6] ;
char disc[7] ;
float otl, hor, udov, neud, lekc, prakt;
};
struct query
{
zap inf;
struct query *nr,*nl;
};
struct query *left,*right,*temp,*temp1,*newe;
struct zap z;
struct vihod
{char kurs;
int lekc_prakt;
float otl, hor, udov, neud;
};
struct query_v
{
vihod inf;
struct query_v *nr,*nl;
};
struct query_v *left_v,*right_v,*temp_v;
struct vihod z_v;
void org1();
void org (FILE *open);
void dob ();
void udal (query *);
void korectir (query *);
void save ();
void vivod (query *);
void vihodnaya (query *);
//—————————————————————————————-
void main ()
{
int key, i, s=0; // key — Нажатая клавиша; s — пункт меню
_setcursortype (_NOCURSOR);//убираем курсор
char filename1[20]; //описание переменной типа char
do
{textbackground (1);
clrscr ();
textcolor (7);
//очистка экрана
gotoxy (26,9); printf («г========================»);//Вывод на экран
gotoxy (26,10); printf («¦ ¦»);//Вывод на экран
gotoxy (26,11); printf («¦ ¦»);//Вывод на экран
gotoxy (26,12); printf («¦ ¦»);//Вывод на экран
gotoxy (26,13); printf («¦ ¦»);//Вывод на экран
gotoxy (26,14); printf («¦ ¦»);//Вывод на экран
gotoxy (26,15); printf («¦ ¦»);//Вывод на экран
gotoxy (26,16); printf («¦ ¦»);//Вывод на экран
gotoxy (26,17); printf («¦ ¦»);//Вывод на экран
gotoxy (26,18); printf («¦ ¦»);//Вывод на экран
gotoxy (26,19); printf («L========================-»);//Вывод на экран
for (i=0;i<=8;i++)
{
gotoxy (28,i+10);
printf («%s», menu[i]); //Вывод на экран меню
}
gotoxy (28,s+10);
textbackground (0);
cprintf (menu[s]); //подсвечивание
key=getch ();
gotoxy (28,s+10);
switch (key) {
case 72: s—; break;
case 80: s++; break;
case 13: switch (s) {
case 0: {
/*clrscr ();*/org1();break;}
case 1 :{ clrscr ();
FILE *open;//указатель на файл
open=fopen («e:\input1.txt» ," r");//открытие файла в режиме записи
if (open≠NULL)
org (open);
else {
clrscr ();printf («Такого файла нет!n»);
getch ();
break;
}
}break;
case 2: dob ();break;
case 3: /*clrscr ();*/vivod (right);break;
case 4: udal (right);break;
case 5: korectir (right);break;
case 6: vihodnaya (right);break;
case 7: save ();break;
case 27,8: {exit (1); break;}
} }
if (s>8) s=0; //ограничения для курсора меню
if (s<0) s=8;
}
while (key≠27); //Условие выхода из цикла — нажатие клавиши ESC
} //1
//————————————————————————————————-
void org1()
{
printf (« выполняется функция создания файлаn»);
printf (« для окончания ввода введите 'end' n»);
printf («Введите шифр группы: n»);
scanf («%s» ,&z.group);
if (strcmp (z.group," end")==0)
return;
printf («Введите шифр дисциплины:n»);
scanf («%s» ,&z.disc);
printf («Введите количество оценок отлично: n»);
scanf («%f» ,&z.otl);
printf («Введите количество оценок хорошо: n»);
scanf («%f» ,&z.hor);
printf («Введите количество оценок удовлетворительно: n»);
scanf («%f» ,&z.udov);
printf («Введите количество оценок неудовлетворительно: n»);
scanf («%f» ,&z.neud);
printf («Введите количество пропущенно лекций: n»);
scanf («%f» ,&z.lekc);
printf («Введите количество пропущенных практических занятий: n»);
scanf («%f» ,&z.prakt);
newe=(struct query*) malloc (sizeof (struct query));
newe->inf=z;
newe->nr=NULL;
newe->nl=NULL;
left=newe;
right=newe;
while (z.group≠"end")
{
printf (« для окончания ввода введите 'end'n»);
printf («Введите шифр группы: n»);
scanf («%s» ,&z.group);
if (strcmp (z.group," end")==0)
break;
printf («Введите шифр дисциплины:n»);
scanf («%s» ,&z.disc);
printf («Введите количество оценок отлично: n»);
scanf («%f» ,&z.otl);
printf («Введите количество оценок хорошо: n»);
scanf («%f» ,&z.hor);
printf («Введите количество оценок удовлетворительно: n»);
scanf («%f» ,&z.udov);
printf («Введите количество оценок неудовлетворительно: n»);
scanf («%f» ,&z.neud);
printf («Введите количество пропущенно лекций: n»);
scanf («%f» ,&z.lekc);
printf («Введите количество пропущенных практических занятий: n»);
scanf («%f» ,&z.prakt);
newe=(struct query*) malloc (sizeof (struct query));
newe->inf=z;
newe->nr=left;
left->nl=newe;
left=newe;
}
left->nl=NULL;
}
//—————————————————————————————————-
void org (FILE *open){
fscanf (open," %s" ,&z.group);
fscanf (open," %s" ,&z.disc);
fscanf (open," %f" ,&z.otl);
fscanf (open," %f" ,&z.hor);
fscanf (open," %f" ,&z.udov);
fscanf (open," %f" ,&z.neud);
fscanf (open," %f" ,&z.lekc);
fscanf (open," %f" ,&z.prakt);
newe=(struct query*) malloc (sizeof (struct query));
newe->inf=z;
newe->nr=NULL;
newe->nl=NULL;
left=newe;
right=newe;
while (!feof (open))
{
fscanf (open," %s" ,&z.group);
fscanf (open," %s" ,&z.disc);
fscanf (open," %f" ,&z.otl);
fscanf (open," %f" ,&z.hor);
fscanf (open," %f" ,&z.udov);
fscanf (open," %f" ,&z.neud);
fscanf (open," %f" ,&z.lekc);
fscanf (open," %f" ,&z.prakt);
newe=(struct query*) malloc (sizeof (struct query));
newe->inf=z;
newe->nr=left;
left->nl=newe;
left=newe;
}
left->nl=NULL;
if (feof (open)==0)
exit;
}
//—————————————————————
void dob ()
{
if (right==NULL)
{
printf («nНеправильно, нажмите 1 или 0:»);
getch ();
return;
}
printf («Добавим элемент: n»);
printf («Для окончания ввода введите в поле Шифр группы 'end'n»);
printf («Введите шифр группы: n»);
scanf («%s» ,&z.group);
if (strcmp (z.group," end")==0)
return;
printf («Введите шифр дисциплины:n»);
scanf («%s» ,&z.disc);
printf («Введите количество оценок отлично: n»);
scanf («%f» ,&z.otl);
printf («Введите количество оценок хорошо: n»);
scanf («%f» ,&z.hor);
printf («Введите количество оценок удовлетворительно: n»);
scanf («%f» ,&z.udov);
printf («Введите количество оценок неудовлетворительно: n»);
scanf («%f» ,&z.neud);
printf («Введите количество пропущенно лекций: n»);
scanf («%f» ,&z.lekc);
printf («Введите количество пропущенных практических занятий: n»);
scanf («%f» ,&z.prakt);
newe=(struct query*) malloc (sizeof (struct query));
newe->inf=z;
newe->nl=right;
right->nr=newe;
right=newe;
right->nr=NULL;
}
//—————————————————————————————————-
void udal (query *)
{
clrscr ();
char group[6];
char a;
int g=0;
temp=right;
newe=left;
printf («Вы, хотите очистить весь список? Y or Nn»);
a=getch ();
while ((a≠'n') && (a≠'y')&&(a≠'т') && (a≠'н')){
clrscr ();
printf (« Нажмите Y или N! »);
a=getch ();
}
if ((a=='n')||(a=='y')||(a=='т')||(a=='н'))
{
if (right==NULL)
{
printf («Список пуст!»);
getch ();
free (right);
return;
}
if ((a=='y')||(a=='н'))
{
while (temp≠NULL)
{
free (temp);
temp=temp->nl;
}
right=NULL;
clrscr ();
printf («Список удалён»);
getch ();
}
if ((a=='n')||(a=='т'))
{
clrscr ();
printf («Удаление элемента: n»);
printf («Введите шифр группы: n»);
scanf («%s» ,&group);
while (temp≠NULL)
{
if (strcmp (group, temp->inf.group)==0)
if (temp==right)
{
newe=temp->nl;
free (right);
right=newe;
right->nr=NULL;
temp=right;
g=1;
}
temp=temp->nl;
}
if (g==0)
printf («Такой группы нет! n»);
else
printf («Строка удалена! n»);
getch ();
}
}
}
//—————————————————————————————————-
void vivod (query *)
{int j, key; // j — Счётчик;key — Нажатая клавиша
struct query *first_i, *last_i;// i — Порядковый номер; first_i — элемент, который
clrscr ();
printf («выполняется функция просмотра таблицыn»);
printf («для выхода нажмите клавишу ESCn»);
first_i=right;
_setcursortype (_NOCURSOR);
do
// первым выводится на экран; j — Счётчик;
{textbackground (1);
clrscr (); // key — Нажатая клавиша
printf (« Просмотр входной таблицы! n»);
printf («г==============ТАБЛИЦА№ 1===========n;
printf («¦===T====T==T===T====T====T=======¦;
printf («¦шифр¦шифр ¦отл¦хор.¦удовл.¦неуд.¦___пропущено____¦n»);
printf («¦груп¦дисц ¦ ¦ ¦ ¦ ¦ лекций практик¦n»);
printf («¦===+====+==+==+====+====+===+===¦;
gotoxy(1,7);
temp=first_i;
if (temp==NULL){ //uslovie pustogo spiska
printf («L===¦====¦==¦==¦====¦===¦==¦====-;
printf (« Список пуст!n»);
getch ();
return;
} // первым выводится на экран;
for (j=1;j<=15;j++) // выводится на экран 15 элементов
{
printf («¦ %-7s», temp->inf.group);
printf («¦ %-11s», temp->inf.disc);
printf («¦ %-5.0f», temp->inf.otl);
printf («¦ %-5.0f», temp->inf.hor);
printf («¦ %-6.0f «, temp->inf.udov);
printf («¦ %-5.0f «, temp->inf.neud);
printf («¦ %-6.0f «, temp->inf.lekc);
printf («¦ %-6.0f ¦ «, temp->inf.prakt);
printf («n»);
if (temp==NULL)break;
temp=temp->nl;
if (temp==NULL){
printf («L===¦===¦===¦===¦====¦===¦====¦=====-;
printf («Нажмите что-нибудь.n»);
getch ();
return;
}
}
printf («L==¦===¦===¦===¦===¦==¦===¦====-;
printf («Передвижение по списку стрелками _ и _n»);
printf («Для выхода нажмите ESC»);
last_i=temp;
key=getch (); //считывает нажатую клавишу
switch (key){
case 72: if (first_i->nr≠NULL) {first_i=first_i->nr;} break;
case 80: if (last_i->nl≠NULL) {first_i=first_i->nl;} break;
}
}while (key≠27); //Условие выхода из цикла — нажатие клавиши ESC
}
//—————————————————————————————————-
void save (){
char filename1[20];
FILE *open; //=fopen («d:\output.txt» ," w+");
printf («nВведите путь и название файла: n»);
scanf («%s», filename1);
open=fopen (filename1," w+");//открытие файла в режиме записи
temp=right;
while (temp≠NULL){
fprintf (open," %s %s %f %f %f %f %f %f n", temp->inf.group, temp->inf.disc, temp->inf.otl, temp->inf.hor, temp->inf.udov, temp->inf.neud, temp->inf.lekc, temp->inf.prakt);
temp=temp->nl;
if (temp->nl==NULL)
break;
}
fclose (open);
}
//—————————————————————————————————-
void korectir (query *){
char group[6];
int f=0;
temp=right;
printf («nВведите шифр группы: n»);
scanf («%s» ,&group);
while (temp≠NULL){
if (strcmp (group, temp->inf.group)==0){
printf («Корректировка Строки: n»);
printf («Введите шифр группы: n»);
scanf («%s» ,&temp->inf.group);
printf («Введите шифр дисциплины: n»);
scanf («%s» ,&temp->inf.disc);
printf («Введите количество оценок отлично: n»);
scanf («%f» ,&temp->inf.otl);
printf («Введите количество оценок хорошо: n»);
scanf («%f» ,&temp->inf.hor);
printf («Введите количество оценок удовлетворительно: n»);
scanf («%f» ,&temp->inf.udov);
printf («Введите количество оценок неудовлетворительно: n»);
scanf («%f» ,&temp->inf.neud);
printf («Введите количество пропущенных лекций: n»);
scanf («%f» ,&temp->inf.lekc);
printf («Введите количество пропущенных практических занятий: n»);
scanf («%f» ,&temp->inf.prakt);
f=1;
}
temp=temp->nl;
}
if (f==0)
{
printf («Нет такой группы! n»);
getch ();
}
}
//—————————————————————————————————-
void vihodnaya (query *)
{
struct vihod group_v[5];
temp=right;
int i=1;
int v=0;
int vsego=0;
group_v[i]. kurs=10;
while (temp≠NULL){
if (group_v[i].kurs≠temp->inf.group[2])
group_v[i].kurs=temp->inf.group[2];
i++;
temp=temp->nl;
v=i;}
textbackground (1);
temp=right;
float f1, f2,f3,f4;
float itog2, itog3,itog4,itog5;
int itog1;
itog1=0;
f1=0;f2=0;f3=0;f4=0;
float h=0;int k=0;
for (i=1;i<=v;i++){
while (temp≠NULL){
if (group_v[i]. kurs==temp->inf.group[2]){ vsego=vsego+(temp->inf.otl+temp->inf.hor+temp->inf.udov+temp->
inf.neud);
f1=f1+temp->inf.otl;f2=f2+temp->inf.hor;
f3=f3+temp->inf.udov;f4=f4+temp->inf.neud;
group_v[i]. lekc_prakt=temp->inf.lekc+temp->inf.prakt;
itog1=itog1+group_v[i].lekc_prakt;}
temp=temp->nl;
}
group_v[i].otl=f1*100/vsego;
group_v[i].hor=f2*100/vsego;
group_v[i].udov=f3*100/vsego;
group_v[i].neud=f4*100/vsego;
temp=right;
}
clrscr ();
printf (« Выходная таблица № 2n»);
printf («г==================ТАБЛИЦА№ 2===========================n»);
printf («¦======T============T==================================¦n»);
printf («¦ ¦ ¦ Количество оценок % ¦n»);
printf («¦ курс ¦ пропущено ¦========T========T========T=======¦n»);
printf («¦ ¦ занятий ¦ Отл. ¦ Хор. ¦ Удовл. ¦ Неуд. ¦n»);
printf («¦======+============+========+========+========+=======¦n»);
for (i=1;i<=(v-1);i++)
{printf («¦ %-7d ¦ %-13d ¦ %-6.1f ¦ %-6.1f ¦ %-6.1f ¦ %-6.1f ¦n» ,
group_v[i]. kurs-'0',
group_v[i].lekc_prakt, group_v[i].otl,
group_v[i].hor, group_v[i].udov, group_v[i].neud);
itog2=itog2+group_v[i].otl;
itog3=itog3+group_v[i].hor;
itog4=itog4+group_v[i].udov;
itog5=itog5+group_v[i].neud;}
printf («¦ Итого ¦»);
printf («%-13d ¦ %-6.1f ¦ %-6.1f ¦ %-6.1f ¦ %-6.1f ¦n», itog1, itog2,itog3,itog4,itog5);
printf («L======¦============¦========¦========¦=======¦========-n»);
printf («Для продолжения нажмите что-нибудь!n»);
getch ();
}