Разработка программы успеваемости студентов

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

АННОТАЦИЯ

В данном документе описывается программа, написанная в соответствии с постановкой задачи на курсовое проектирование по теме «Разработка программы об успеваемости студентов» по дисциплине «Основы программирования и алгоритмические языки». Структура записей входного файла имеет следующий шифр группы (6символов), шифр дисциплины (6 символов), количество отличных, хороших, удовлетворительных, неудовлетворительных оценок, пропущено лекций, пропущено практических занятий.

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

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

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

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

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

ЗАКЛЮЧЕНИЕ

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

ПРИЛОЖЕНИЕ А

ПРИЛОЖЕНИЕ Б

ВВЕДЕНИЕ

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

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

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

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

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

Программа работает в текстовом режиме под управлением операционной системы MS DOS, а также Windows. Для загрузки списка требуется специально организованный файл. Вывод выходной таблицы производится как на экран, так и в файл, задаваемый пользователем. Для работы программы подходит практически любой PC компьютер, оснащенный цветным дисплеем.

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

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

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

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

Получить отчет по шифрам дисциплины содержащий: шифр каждой дисциплины, номер группы, средний бал студентов с данной дисциплины и количество пропущенных ими занятий (лекций и практических занятий). Результаты отпечатать в виде соответствующей таблицы (Таблица 2. 1)

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

Таблица 2.1 — Выходная таблица

Шифр дисциплины

Средний балл

Пропущено занятий

Лекций

Практических

Всего

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

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

Для внутреннего хранения входных данных о студенте в программе используется комбинированный тип данных:

struct student {

char group[6];

char dis[6];

unsigned int best, good, bad, poor;

unsigned int miss_lection, miss_practic; };

typedef struct obrab

{

char dis[6];

float bal;

float bal_c;

int prop_pr;

int prop_lec;

};

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

1. Структура student — структура с входными данными

group — шифр дисциплины;

dis — шифр дисциплины;

best — количество отличных оценок;

good — количество хороших оценок;

bad — количество удовлетворительных оценок;

poor — количество неудовлетворительных оценок;

miss_lection — количество пропущенных лекций;

miss_practic — количество пропущенных практик.

2. Структура obrab — структура для выходных данных

dis — шифр дисциплины

bal — суммарный балл

bal_c — количество оценок

prop_pr — кол-во пропущенных практик

prop_lec — кол-во пропущенных лекций

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

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

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

A-25 0704 10 55 0 40 0 0

A-23 0604 20 10 10 40 0 10

A-24 0604 12 55 0 0 0 10

B-25 0504 22 35 55 60 0 20

B-26 0504 23 55 0 30 0 0

I-11 0804 10 50 20 1 1 1

I-11 0804 91 53 2 2 54 9

I-12 0804 12 34 0 0 0 19

I-21 O804 0 0 0 0 0 0

A-11 0704 9 52 0 40 0 0

A-12 0704 1 1 1 1 1 1

A-12 0704 54 63 23 1 1 1

A-23 0704 96 55 0 0 40 0

A-23 0704 93 50 20 0 0 0

A-22 0704 21 55 0 0 0 10

A-22 0704 22 35 55 60 0

M-13 0914 10 9 8 0 7 6

M-12 0914 1 2 3 4 5 6

M-21 0914 5 4 6 77 9 88

A-32 0704 5 23 43 7 68 0

A-31 0704 10 55 0 40 0 0

I-32 0804 23 55 0 0 10 40

I-31 0804 3 3 4 5 6 7

I-24 0804 0 0 0 0 0 0

I-22 0804 23 13 14 10 9 5

I-22 0804 20 10 10 4 4 4

I-21 0804 0 0 0 0 0 0

I-22 0804 10 10 10 10 11 12

A-22 0704 1 11 11 22 3 4

A-41 0704 5 5 5 5 5

I-25 0804 6 36 24 13 23 9

I-15 0804 7 6 7 8 9 9

I-14 0804 0 0 0 0 0 0

M-25 0914 12 15 15 12 15 7

M-14 0914 5 5 5 5 5 5

P-13 0976 8 8 8 8 8 8

P-12 0976 1 1 1 1 1 1

M-21 0914 0 0 0 0 0 0

M-32 0914 6 6 6 47 12 32

I-33 0804 5 5 5 5 5 5

I-23 0804 7 7 7 7 7 7

A-21 0704 50 50 45 34 54 7

A-21 0704 10 10 8 9 7 0

Рисунок 2.1 — Пример входных данных

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

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

Таблица 2.2 — Пример выходных данных

Шифр дисциплины

Средний балл

Пропущено занятий

Лекций

Практических

Всего

0804

4,53

0

40

40

0704

3,33

0

0

0

0604

3,6

20

0

20

0504

3,3

20

0

20

Описание алгоритма программы об успеваемости студентов

Рисунок 2.3 — Организация списка

Блок 1 — Вывод на экран запроса о введении имени файла, который необходимо открыть

Блок 2 — Чтение имени файла

Блок 3 — Проверка правильности имени файла и его наличия

Блок 4 — Открытие файла

Блок 5 — Чтение первой записи

Блок 6 — Сохранение первой записи в структуре линейного списка. Запоминание указателя на первый элемент.

Блок 7 — Цикл, в основе которого лежит проверка окончания файла

Блок 8 — Печать на экран сообщения об успешном считывании данных

Блок 9 — Закрытие файла

Блок 10 — Чтение очередной записи

Блок 11 — Сохранение записи в общем списке.

Рисунок 2.4 — Сортировка по шифру дисциплины

Блок 1 — Проверка наличия записей. Осуществляется путем сравнивания порядкового номера (последней записи) с нулем

Блок 2 — Происходит проход по циклу n раз (где n — количество записей).

Блок 3 — Вызов функции getel, которая возвращает запись (temp1) с заданным порядковым номером (задается в параметре вызова)

Блок 4 — Происходит проход по циклу n раз (где n — количество записей).

Блок 5 — Вызов функции getel, которая возвращает запись (temp2) с заданным порядковым номером (задается в параметре вызова)

Блок 6 — Осуществляется проверка на равенство дисциплин в разных записях (temp1 и temp2)

Блок 7 — Производится обмен информационными полями

2.6 Описание функций, используемых программой

· org — функция организации линейного списка.

· print — распечатывает входные данные

· udal — функция удаления указанного элемента из линейного списка.

· sort — функция сортировки линейного списка.

· addelement — функция добавления нового элемента в линейный список (вручную).

· obrabotka — функция, которая обрабатывает данные и выводит таблицу результатов на экран.

· edit — функция корректирования данных в линейном списке.

· getel — получает элемент по номеру в списке

· save — функция, которая сохраняет данные из линейного списка в указанный файл

· menu_edit — функция вызывающая подменю редактирования таблицы

· raschet — функция производящая обработку данных и распечатку

· add_obrabotka — функция производящая непосредственный расчет выходных данных

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

Программа написана на языке высокого уровня С++ и скомпилирована компилятором Borland C 3.1 для MSDOS v.5.0 с использованием бесплатно распространяемого (посредством FIDO и Internet) пакета ComC для работы с текстовыми окнами, клавиатурой и т. д. Данный пакет предоставляет подобные TurboVision средства для работы с окнами, меню, но занимает значительно меньше места и работает быстрее.

Язык С++ и компилятор выбраны из-за его гибкости, широкого распространения, малого объема исполняемого файла и большой скорости выполнения. Компилятор Borland C++ к тому же включает в себя опциональную возможность оптимизации кода программы как по скорости, так и по размеру [1−3].

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

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

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

Всем этим требованиям удовлетворяет язык программирования Borland C++

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

Для нормальной работы программы необходима следующая аппаратная база: совместимый IBM-PC компьютер на базе процессора Intel 80 286, 640Кб оперативной памяти, накопитель жестких или гибких магнитных дисков объемом не менее 10 Мб, CGA VGA, SVGA видеоадаптеры, цветной монитор, поддерживающий текстовый режим 80×25.

Программа предназначена для работы в среде операционной системы MS-DOS. Также работоспособность программы сохранится при использовании ее под линии Windows 9х. Все вышеперечисленные требования являются оптимальными.

ЗАКЛЮЧЕНИЕ

Данная программа, составлена в соответствии с постановкой задачи на курсовое проектирование по теме «Разработка программы об успеваемости студентов» по дисциплине «Основы программирования и алгоритмические языки» (ОП и АЯ).

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

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

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

ПРИЛОЖЕНИЕ А

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

#include < stdio. h> //подключение модулей

#include < string. h>

#include < conio. h>

#include < stdlib. h>

#include < ctype. h>

#include < iostream. h>

#define cons zero //константа

struct student { //запись о студентах

unsigned int x;

char group[6];

char dis[6];

unsigned int best, good, bad, poor;

unsigned int miss_lection, miss_practic; };

typedef struct obrab //объявление типа структуры

{

char dis[6];

float bal;

float bal_c;

int prop_pr;

int prop_lec;

};

struct obrabotk //структура элемента списка

{

obrab inf; //информационное поле

obrabotk *next; //ссылка на структуру obrabotk

};

struct node { // структура элемента списка

student zap;

node *next; };

typedef struct obrabotk *obrabotka; //объявление переменных

obrabotka nachalo, tmp, konec;

typedef struct node *listptr;

struct student data;

struct node *first, *temp, *nova, *temp1, *temp2, *left;

void print (void); //объявление функций

void org (void);

void addelement (void);

void udal (void);

void edit (void);

void save (void);

void menu_edit (void);

listptr getel (int);

void sort (void);

void raschet ();

void add_obrabotka (student dat);

unsigned int numer;

//-------------------- ---------MAIN--------------------------------

void main () //основная программа

{

char stroka[256];

int choice;

textbackground (BLUE); //установка цвета фона

for (; ;) //бесконечный цикл вывода меню на экран

{

clrscr (); //очистка экрана

printf («1 — Чтение данных n»);

printf («2 — Просмотр исходной таблицыn»);

printf («3 — Редактирование таблицыn»);

printf («4 — Сортировка таблицыn»);

printf («5 — Обработка таблицыn»);

printf («9 — Выход n»);

cin. getline (stroka, 256);

if (strlen (stroka)≠1)

strcpy (stroka, '');

choice=atoi (stroka);

switch (choice) //оператор выбора функций

{

case 1:

{ org (); break;} //вызов функции организации списка

case 2:

{ clrscr ();

print (); //вызов функции распечатки таблицы на экран

getch ();

break; }

case 3:

{ menu_edit (); break; } //вызов функции редактирования списка

case 4:

{sort (); break;} //вызов функции сортировки

case 5:

{ raschet (); //вызов функции обработки таблицы

break; }

case 9:

{ exit (9); break; } //вызов функции выхода из программы

}

} } //конец основной программы

//----------------------------------Edit menu ------------------------------

void menu_edit () // функция подменю редактирования списка

{

char stroka[256]; //объявление переменных

int choice; //объявление переменных

for (; ;)

{

clrscr (); //очистка экрана

printf («---------- РЕДАКТИРОВАНИЕ ТАБЛИЦЫ ------------------nn»);

printf («1 — Добавление новой записиn»);

printf («2 — Удаление записиn»);

printf («3 — Редактирование записейn»);

printf («4 — Сохранение таблицыn»);

printf («5 — Выходn»);

printf («Выберите пункт меню… «);

cin. getline (stroka, 256);

if (strlen (stroka)≠1)

strcpy (stroka, '');

choice=atoi (stroka);

switch (choice) //оператор выбора

{

case 1:

{ addelement (); //добавление новой записи

break; }

case 2:

{ udal (); //удаление записи

break; }

case 3:

{ edit (); //редактирование записи

break; }

case 4:

{ save (); //сохранение записи

break; }

case 5:

return; } //выход в главное меню

}

}

//---------------------Чтение данных из файла------------------------

void org () //функция организации и чтения данных в списке

{

char filename[256];

FILE *fileptr;

numer=1;

printf («Введите имя файла… n»);

cin. getline (filename, 256);

if (strlen (filename)> =13)

{printf («Неправильное имя файла!!!»);

getch (); //ожидание нажатия любой клавиши

return;} //выход в главное меню

for (int i=0; i< =strlen (filename); i++) //цикл чтения из файла

if (filename[i]==' ')

{ printf («HUI»);

getch ();

return; }

if ((fileptr = fopen (filename, «r»))==NULL) //проверка наличия файла

{ printf («Файл не обнаружен! n»);

getch ();

return; }

temp-> zap. x=numer;

numer++; //увеличение на 1

fscanf (fileptr,"%s%s%d%d%d%d%d%d", & data. group, & data. dis,

& data. best, & data. good, & data. bad,

& data. poor, & data. miss_lection, & data. miss_practic); //чтение данных из файла

if ((nova=(struct node*)malloc (sizeof (struct node))) == NULL)

{printf («No memory»); //оператор проверки нужного кол-ва опер. памяти

getch ();

exit (10); }

nova-> zap=data; //организация 1-го элемента списка

nova-> next=NULL;

temp=nova;

first=nova;

while (!feof (fileptr)) //пока не конец файла

{

temp-> zap. x=numer;

numer++; //увеличение на 1

fscanf (fileptr,"%s%s%d%d%d%d%d%d", & data. group, & data. dis,

& data. best, & data. good, & data. bad,

& data. poor, & data. miss_lection, & data. miss_practic);

//чтение данных из файла

if ((nova=(struct node*)malloc (sizeof (struct node))) == NULL)

{printf («No memory»); //оператор проверки нужного кол-ва опер. памяти

getch ();

exit (10); }

nova-> zap=data; //организация последующих элементов списка

temp-> next=nova;

temp=nova;

nova-> next=NULL; }

printf («Данные успешно считаны! n»);

getch ();

fclose (fileptr); //закрытие файла

}

//-------------------------Печать исходной таблицы------------------------

void print () //функция печати исходной таблицы

{

numer=1;

temp=first; //присвоить temp к началу списка

if (temp==NULL) //если список пустой

{ printf («Не обнаружено данных! n»); //печать строки на экран

printf («Считайте данные из файла! n»);

getch ();

return; } //выход из функции

else

printf («±-±-----±-----±---±---±---±---±---±---+n»);

}

//-------------------------------Добавление записи------------------------

void addelement () //добавление элемента в список

{

int temp, i;

char dat[256];

//заполнение полей списка

printf («Введите данные для записи: nn»);

printf («Введите шифр группы n»);

cin. getline (dat, 256);

if ((strlen (dat)>5)||(strlen (dat)==0))

{ printf («Номер группы должен состоять не меньше чем из 1 символа и не больше чем из 5!!! n»);

getch ();

return; }

strcpy (data. group, dat);

printf («Введите шифр дисциплиныn»);

cin. getline (dat, 256);

if ((strlen (dat)>5)||(strlen (dat)==0))

{ printf («Номер шифра должен состоять не меньше чем из 1 символа и не больше чем из 5!!! n»);

getch ();

return; }

strcpy (data. dis, dat);

printf («Введите количество отличных оценокn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if ((isalpha (dat[i])) || (isspace (dat[i])))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

temp=atoi (dat);

data. best=temp;

printf («Введите количество хороших оценокn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

temp=atoi (dat);

data. good=temp;

printf («Введите количсетво плохих оценокn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

temp=atoi (dat);

data. bad=temp;

printf («Введите количество очень плохихи оценокn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

temp=atoi (dat);

data. poor=temp;

printf («Введите количесвто пропоущенных лекцийn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

temp=atoi (dat);

data. miss_lection=temp;

printf («Введите количество пропущенных практикn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

temp=atoi (dat);

data. miss_practic=temp;

if ((nova=(struct node*)malloc (sizeof (struct node))) == NULL)

{ printf («Недостаточно памяти для выполнения программы. Программы будет оключена: -0»);

getch ();

exit (10); }

nova-> zap=data;

temp2=first;

first=nova;

first-> next=temp2; //переход к следующему элемента

}

//------- --------------------Удаление записи------------------------

void udal () //удаление элемента списка

{

int choose, boolean = 0;

char stroka [256];

if (first==NULL)

{printf («Необходимо прочитать файл! n»);

getch ();

return; }

clrscr ();

print ();

printf («Выберите запись, которую необходимо удалитьn»);

cin. getline (stroka, 256);

if (strlen (stroka)> 4)

{ printf («Неправильный выбор!!! n»);

getch ();

return; }

choose=atoi (stroka);

if (choose< =0)

{printf («Несуществует такой записи!!! n»);

getch ();

return; }

if (first-> zap. x==choose)

{

temp2=first;

first=first-> next;

free (temp2);

printf («Запись найдена и удалена! n»);

boolean=1;

getch ();

}

else

{

temp=first;

while (temp≠NULL) //пока не конец списка

{

if (temp-> next->zap. x==choose)

{

temp2=temp-> next;

temp-> next=temp2->next;

free (temp2);

printf («Запись найдена и удалена! n»);

boolean=1;

getch ();

};

temp=temp-> next; //переход к следующему элементу

};

};

if (boolean==0)

{ printf («Запись с указанным номером не найдена! n»);

getch (); }

}

//------------------------Редактирование записей-------------------

void edit () //функция редактирования элемента списка

{

int num, numx, choose;

int boolean=0;

char stroka[256], dat[256];

int i, tem;

clrscr (); //очистка экрана

if (first==NULL)

{ printf («Прочитайте данные из файла! n»);

getch ();

return; }

print ();

printf («nВыберите запись для редактирования «);

cin. getline (stroka, 256);

if (strlen (stroka)> 4)

{printf («Неверный ввод записи! n»);

getch ();

return; }

num=atoi (stroka);

clrscr (); //очистка экрана

temp=first;

while (temp≠NULL) //пока не конец списка

{

if (temp-> zap. x==num)

{

//печать верхушки таблицы

printf («±-±-----±-----±------------------±--------+n»);

printf («| | | | Кол-во оценок | |n»);

printf («|# | Шифр | Шифр ±---±---±---±---|Пропуcки |n»);

printf («| |группы| дисц |5-ки|4-ки|3-ки|2-ки|лек прак|n»);

printf («±-±-----±-----±---±---±---±---±---±---|n»);

printf («|%-2d|%-6s|%-6s|% -4d|% -4d|% -4d|% -4d|% -4d|% -4d|n»,

//печать элементов списка

temp-> zap. x, temp-> zap. group, temp-> zap. dis, temp-> zap. best, temp-> zap. good, temp-> zap. bad,

temp-> zap. poor, temp-> zap. miss_lection, temp-> zap. miss_practic);

printf («±-±-----±-----±---±---±---±---±---±---+nn»);

printf («1. Шифр группыn»);

printf («2. Шифр дисциплиныn»);

printf («3. Количество отличных оценокn»);

printf («4. Количество хороших оценокn»);

printf («5. Количество плохих оценокn»);

printf («6. Количество очень плохих оценокn»);

printf («7. Количесвто пропущенных лекцийn»);

printf («8. Количесвто пропущенных практикn»);

printf («Какое поле заменть? «);

cin. getline (stroka, 256);

if (strlen (stroka)≠1)

{printf («Неправильный выбор!!! n»);

getch ();

return; }

for (i=0; i< =strlen (stroka); i++)

if (isalpha (stroka[i]))

{printf («Выбор не буквенный!!! n»);

getch ();

return; }

choose=atoi (stroka);

switch (choose) { //оператор выбора

case 1:

{

printf («Введите шифр группы n»);

cin. getline (stroka, 256);

if ((strlen (stroka)>5)||(strlen (stroka)==0))

{ printf («Номер группы должен состоять не меньше чем из 1 символа и не больше чем из 5!!! n»);

getch ();

return; }

strcpy (temp-> zap. group, stroka);

boolean=1;

break; }

case 2:

{ printf («Введите шифр дисциплиныn»);

cin. getline (stroka, 256);

if ((strlen (stroka)>5)||(strlen (stroka)==0))

{ printf («Номер шифра должен состоять не меньше чем из 1 символа и не больше чем из 5!!! n»);

getch ();

return; }

strcpy (temp-> zap. dis, stroka);

boolean=1;

break; }

case 3:

{printf («Введите количество отличных оценокn»);

cin. getline (stroka, 256);

for (i=0; i< =strlen (stroka); i++)

if ((isalpha (stroka[i])) || (isspace (stroka[i])))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (stroka)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

tem=atoi (stroka);

temp-> zap. best=tem;

boolean=1;

break; }

case 4:

{ printf («Введите количество хороших оценокn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

tem=atoi (dat);

temp-> zap. good=tem;

boolean=1;

break; }

case 5:

{

printf («Введите количсетво плохих оценокn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

tem=atoi (dat);

temp-> zap. bad=tem;

boolean=1;

break; }

case 6:

{

printf («Введите количество очень плохихи оценокn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

tem=atoi (dat);

temp-> zap. poor=tem;

boolean=1;

break; }

case 7:

{printf («Введите количесвто пропоущенных лекцийn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

tem=atoi (dat);

temp-> zap. miss_lection=tem;

boolean=1;

break; }

case 8:

{printf («Введите количество пропущенных практикn»);

cin. getline (dat, 256);

for (i=0; i< =strlen (dat); i++)

if (isalpha (dat[i]))

{ printf («Здесь не должно быть букв!!! n»);

getch ();

return; }

if (strlen (dat)> 3)

{ printf («Количество н может превышать 999n»);

getch ();

return; }

tem=atoi (dat);

temp-> zap. miss_practic=tem;

boolean=1;

break; }

default:

{printf («Вы сделали ошибку! Выбрали несуществующее поле! n»);

getch ();

break; }}

}

temp=temp-> next; //переход к следующему элементу

}

if (boolean≠1)

{ printf («Вы ошиблись! Такой записи не существует!»);

getch (); }

else if (boolean==1)

{printf («Запись обновлена!»);

getch (); }

}

//---- Сохранение исходной таблицы-----------------------------------

void save () //сохранение списка

{

FILE *file; //объявление файловой переменной

char file_save[256];

if (first==NULL) //если список пуст

{printf («Отсутствуют данные для сохранения! n»);

getch ();

return; }

printf («Введите имя файла в который сохранить таблицуn»);

cin. getline (file_save, 256);

if (strlen (file_save)> 13)

{printf («Неправильное имя файла!!!»);

getch ();

return; }

if ((file=fopen (file_save, «w+»)) == NULL)

{ printf («Ошибка с созданием файла!!! n»);

getch ();

return; }

//печать верхушки таблицы

fprintf (file, «Исходная таблица n»);

fprintf (file, «±-±-----±-----±------------------±--------+n»);

fprintf (file, «| | | | Кол-во оценок | |n»);

fprintf (file, «|# | Шифр | Шифр ±---±---±---±---|Пропуcки |n»);

fprintf (file, «| |группы| дисц |5-ки|4-ки|3-ки|2-ки|лек прак|n»);

fprintf (file, «±-±-----±-----±---±---±---±---±---±---|n»);

numer=1;

temp=first;

while (temp≠NULL) //пока не конец списка

% -4d

fprintf (file," ±-±-----±-----±---±---±---±---±---±---+n");

printf («Файл сохранен!»);

getch ();

}

// -----------------------------------------сортировка-----------------------void sort () //функция сортировки данных

{

if (numer> 0)

{

for (int j=0; j<numer;j++)

{

temp1=getel (j);

for (int k=0; k<numer;k++)

{

temp2=getel (k);

if (strcmp (temp2-> zap. dis, temp1->zap. dis)>0)

{ data=temp1-> zap;

temp1-> zap=temp2->zap;

temp2-> zap=data; }

}

}

printf («Таблица отсортирована!!»);

getch ();

};

};

// -----------------------------------------для сортировки------------------

listptr getel (int h)

{

temp=first;

for (int c=0; c≠h;c++)

temp=temp-> next;

return temp;

};

//--------------------------------------obrabotka---------------------

void add_obrabotka (student dat) //функция обработки данных

{

obrabotka temp;

if (nachalo==NULL)

{

tmp=(struct obrabotk*)malloc (sizeof (struct obrabotk));

strcpy (tmp-> inf. dis, dat. dis);

tmp-> inf. bal=(dat. best*5)+(dat. good*4)+(dat. bad*3)+(dat. poor*2);

tmp-> inf. bal_c=dat. best+dat. good+dat. bad+dat. poor;

tmp-> inf. prop_pr=dat. miss_practic;

tmp-> inf. prop_lec=dat. miss_lection;

nachalo=tmp;

nachalo-> next=NULL;

konec=nachalo;

return;

}

else

{

temp=nachalo;

while (temp≠NULL) //пока не конец списка

{

if (strcmp (temp-> inf. dis, dat. dis)==0)

{

temp-> inf. bal=temp->inf. bal+((dat. best*5)+(dat. good*4)+(dat. bad*3)+(dat. poor*2));

temp-> inf. bal_c=temp->inf. bal_c+(dat. best+dat. good+dat. bad+dat. poor);

temp-> inf. prop_pr=temp->inf. prop_pr+dat. miss_practic;

temp-> inf. prop_lec=temp->inf. prop_lec+dat. miss_lection;

return;

};

temp=temp-> next; //переход к следующему элменту

};

tmp=(struct obrabotk*)malloc (sizeof (struct obrabotk));

strcpy (tmp-> inf. dis, dat. dis);

tmp-> inf. bal=(dat. best*5)+(dat. good*4)+(dat. bad*3)+(dat. poor*2);

tmp-> inf. bal_c=dat. best+dat. good+dat. bad+dat. poor;

tmp-> inf. prop_pr=dat. miss_practic;

tmp-> inf. prop_lec=dat. miss_lection;

tmp-> next=NULL;

konec-> next=tmp;

konec=tmp;

return;

};

};

void raschet () //функция расчёта

{

int u=1;

if (numer> 0)

{

temp=first;

float c;

while (temp≠NULL)

{

add_obrabotka (temp-> zap);

temp=temp-> next; //переход к следующему элементу

};

clrscr (); //очистка экрана

//вывод резльтата

printf («Отчет по дисциплинам n»);

printf («±±-----±------------±-----------------+n»);

printf («| | | | Пропуски занятий |n»);

printf («|#| Шифр | Средний бал ±----±----±-----|n»);

printf («| | дисц | | Прк | Лек | Всего|n»);

printf («±±-----±------------±----±----±-----|n»);

tmp=nachalo;

while (tmp≠NULL) //пока не конец списка

", c);

printf («%-3d;

printf («±±-----±------------±----±----±-----+n»);

getch ();

};

};

ПРИЛОЖЕНИЕ Б

программа алгоритм студент данные

ВЫПОЛНЕНИЕ ПРОГРАММЫ

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

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

При выборе пункта 1 (чтение данных) из меню (Рис 2. 1) будет сделан запрос о имени файла с данными: «введите имя файла» и в случае открытия файла на экране появится информация о том что он открыт успешно.

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

При выборе пункта 3 (Редактирование таблицы) появиться следующее меню — рис. 2. 2

Рисунок 2.2 Меню редактирования таблицы

При выборе пункта 3.1 можно будет добавить новую запись, при этом запроситься ввести все данные по полям

При выборе пункта 3.2 удалить запись из списка, указав ее номенклатурный номер, который запроситься.

При выборе пункта 3.3 и 3.4 происходит сохранение редактирование в списке, при этом запросится имя файла, куда нужно сохранить изменения.

При выборе пункта 4 (сортировка таблицы), в данном меню сортирует первые 3 столбца в исходной таблице.

Выбрав любое меню сортировки, список будет отсортирован по этому полю.

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

При выборе пункта 9 (Выход) будет осуществлен выход из программы.

ПоказатьСвернуть
Заполнить форму текущей работой