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

 

АННОТАЦИЯ


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

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

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



СОДЕРЖАНИЕ


ВВЕДЕНИЕ

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

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

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

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

.3 Входные данные

.4 Выходные данные

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

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

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

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

ЗАКЛЮЧЕНИЕ

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

ПРИЛОЖЕНИЕ А

ПРИЛОЖЕНИЕ Б



ВВЕДЕНИЕ


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

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

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


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


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

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


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


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


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

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

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

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


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

Шифр дисциплиныСредний баллПропущено занятийЛекцийПрактическихВсего

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



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


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


struct student {group[6];dis[6];int best, good, bad, poor;int miss_lection, miss_practic; };


typedef struct obrab

{dis[6];bal;bal_c;prop_pr;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 00604 20 10 10 40 0 100604 12 55 0 0 0 100504 22 35 55 60 0 200504 23 55 0 30 0 00804 10 50 20 1 1 10804 91 53 2 2 54 90804 12 34 0 0 0 19O804 0 0 0 0 0 00704 9 52 0 40 0 00704 1 1 1 1 1 10704 54 63 23 1 1 10704 96 55 0 0 40 00704 93 50 20 0 0 00704 21 55 0 0 0 100704 22 35 55 60 00914 10 9 8 0 7 60914 1 2 3 4 5 60914 5 4 6 77 9 880704 5 23 43 7 68 00704 10 55 0 40 0 00804 23 55 0 0 10 400804 3 3 4 5 6 70804 0 0 0 0 0 00804 23 13 14 10 9 50804 20 10 10 4 4 40804 0 0 0 0 0 00804 10 10 10 10 11 120704 1 11 11 22 3 40704 5 5 5 5 50804 6 36 24 13 23 90804 7 6 7 8 9 90804 0 0 0 0 0 00914 12 15 15 12 15 70914 5 5 5 5 5 50976 8 8 8 8 8 80976 1 1 1 1 1 10914 0 0 0 0 0 00914 6 6 6 47 12 32-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,53040400704 3,330000604 3,6200200504 3,320020

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

























Рисунок 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 80286, 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 //константа

student { //запись о студентахint x;group[6];dis[6];int best, good, bad, poor;int miss_lection, miss_practic; };

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

{dis[6];bal;bal_c;prop_pr;prop_lec;

};


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

{

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

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

};


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

student zap;

node *next; };


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

obrabotka nachalo,tmp,konec;struct node *listptr;student data;node *first, *temp, *nova, *temp1, *temp2, *left;

print(void); //объявление функцийorg (void);addelement(void);udal (void);edit(void);save(void);menu_edit(void);getel(int);sort(void);raschet();add_obrabotka(student dat);

int numer ;


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

{stroka[256];choice;

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

{

clrscr(); //очистка экрана("1 - Чтение данных \n");("2 - Просмотр исходной таблицы\n");("3 - Редактирование таблицы\n");("4 - Сортировка таблицы\n");("5 - Обработка таблицы\n");

printf("9 - Выход \n");


cin.getline (stroka, 256);

( strlen(stroka)!=1)(stroka, '\0');=atoi (stroka);

(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(" ---------- РЕДАКТИРОВАНИЕ ТАБЛИЦЫ ------------------\n\n");("1 - Добавление новой записи\n");("2 - Удаление записи\n");("3 - Редактирование записей\n");("4 - Сохранение таблицы\n");("5 - Выход\n");("Выберите пункт меню... ");


cin.getline(stroka,256);

if ( strlen(stroka)!=1)(stroka, '\0');=atoi (stroka);

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

{

case 1:

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

break; }

case 2:

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

break; }

case 3:

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

break; }

case 4:

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

break;}

case 5:

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


}

}


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

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

{filename[256];*fileptr;

=1;("Введите имя файла...\n");


cin.getline(filename,256);

(strlen(filename)>=13)

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

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

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

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

{ printf("HUI");();;}


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

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

getch();; }

>zap.x=numer;++; //увеличение на 1(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 ); //чтение данных из файла

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

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

getch();

exit(10); }


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

nova->next=NULL;=nova;=nova;

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

{>zap.x=numer;++; //увеличение на 1(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 );

//чтение данных из файла( (nova=(struct node*)malloc(sizeof (struct node) )) == NULL )

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

getch();

exit(10); }


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

temp->next=nova;=nova;>next=NULL; }

("Данные успешно считаны!\n");();(fileptr); //закрытие файла

}



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

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

{

numer=1;


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

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

{ printf("Не обнаружено данных!\n"); //печать строки на экран("Считайте данные из файла!\n");

getch();

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


else { //оператор «иначе»

//вывод на экран верхушки исходной таблицы

printf(" Исходная таблица \n");

printf(" +--+------+------+-------------------+---------+\n");

printf(" | | | | Кол-во оценок | |\n");

printf(" |# | Шифр | Шифр +----+----+----+----|Пропуcки |\n");

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

printf(" +--+------+------+----+----+----+----+----+----|\n");


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

{

if ((numer%16)==0)

{

printf(" +--+------+------+----+----+----+----+----+----+\n");

printf("Нажмите калвишу для продолжения");

getch();

clrscr();

printf(" +--+------+------+-------------------+---------+\n");

printf(" | | | | Кол-во оценок | |\n");

printf(" |# | Шифр | Шифр +----+----+----+----|Пропуcки |\n");

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

printf(" +--+------+------+----+----+----+----+----+----|\n");


}

>zap.x=numer;++;(" |%-2d|%-6s|%-6s|% -4d|% -4d|% -4d|% -4d|% -4d|% -4d|\n",>zap.x, temp->zap.group, temp->zap.dis, temp->zap.best, temp->zap.good, temp->zap.bad,>zap.poor, temp->zap.miss_lection, temp->zap.miss_practic);

=temp->next; }

}(" +--+------+------+----+----+----+----+----+----+\n");

}


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

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

{temp,i;dat[256];

//заполнение полей списка("Введите данные для записи:\n\n");

("Введите шифр группы \n");

cin.getline(dat,256);( (strlen(dat)>5 )||(strlen(dat)==0) )

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

getch();;}(data.group, dat);


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

cin.getline(dat,256);( (strlen(dat)>5 )||(strlen(dat)==0) )

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

getch();; }(data.dis, dat);


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

cin.getline(dat,256);(i=0; i<=strlen(dat); i++)( (isalpha(dat[i]) ) || (isspace(dat[i])) )

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);.best=temp;

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

cin.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]))

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);.good=temp;

("Введите количсетво плохих оценок\n");.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]))

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);.bad=temp;

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

cin.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]))

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);.poor=temp;

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

cin.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]) )

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);.miss_lection=temp;

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

cin.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]))

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);.miss_practic=temp;

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

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

getch();

exit(10); }


nova->zap=data;=first;=nova;

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

}


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

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

{choose, boolean = 0;stroka [256];

(first==NULL)

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

getch();

return;}


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


cin.getline(stroka,256);( strlen(stroka)> 4)

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

getch();

return; }

=atoi(stroka);(choose<=0)

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

getch();;}

(first->zap.x==choose)

{=first;=first->next;

free(temp2);("Запись найдена и удалена!\n");

boolean=1;();

}

{=first; (temp!=NULL) //пока не конец списка

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

{=temp->next;>next=temp2->next;

free(temp2);("Запись найдена и удалена!\n");

boolean=1;

getch();

};

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

};

};(boolean==0)

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

}

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

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

{num, numx, choose;boolean=0;stroka[256], dat[256];i, tem;(); //очистка экрана

(first==NULL)

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

getch();

return;}



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


cin.getline(stroka,256);( strlen(stroka)>4)

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

getch();;}

=atoi (stroka);(); //очистка экрана=first;(temp!=NULL) //пока не конец списка

{(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);(" +--+------+------+----+----+----+----+----+----+\n\n");

("1. Шифр группы\n");("2. Шифр дисциплины\n");("3. Количество отличных оценок\n");("4. Количество хороших оценок\n");("5. Количество плохих оценок\n");("6. Количество очень плохих оценок\n");("7. Количесвто пропущенных лекций\n");("8. Количесвто пропущенных практик\n");("Какое поле заменть? ");


cin.getline(stroka,256);

if ( strlen(stroka)!=1)

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

(i=0; i<=strlen(stroka); i++)(isalpha(stroka[i]))

{printf("Выбор не буквенный !!!\n");();;}

=atoi(stroka);

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

{("Введите шифр группы \n");.getline(stroka,256);( (strlen(stroka)>5 )||(strlen(stroka)==0) )

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

getch();;}(temp->zap.group, stroka);=1;; }2:

{ printf("Введите шифр дисциплины\n");.getline(stroka,256);( (strlen(stroka)>5 )||(strlen(stroka)==0) )

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

getch();; }(temp->zap.dis, stroka);=1;

break; }

case 3:

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

cin.getline(stroka,256);(i=0; i<=strlen(stroka); i++)( (isalpha(stroka[i]) ) || (isspace(stroka[i])) )

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

getch();; }(strlen(stroka)>3)

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

getch();;}=atoi(stroka);>zap.best=tem;

=1;;}

case 4:

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

cin.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]))

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);>zap.good=tem;

=1;;}5:

{("Введите количсетво плохих оценок\n");.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]))

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);>zap.bad=tem;=1;;}

case 6:

{("Введите количество очень плохихи оценок\n");

cin.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]))

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);>zap.poor=tem;=1;;}

case 7:

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

cin.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]) )

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);>zap.miss_lection=tem;=1;

break;}

case 8:

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

cin.getline(dat,256);(i=0; i<=strlen(dat); i++) (isalpha(dat[i]))

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

getch();; }(strlen(dat)>3)

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

getch();;}=atoi(dat);>zap.miss_practic=tem;=1;;}

:

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

getch();

break; }}


}

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


}(boolean!=1)

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

getch() ; }

else if (boolean==1)

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

getch(); }


}


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

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

{

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

char file_save[256];


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

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

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


cin.getline(file_save,256);

(strlen(file_save)>13)

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

getch();

return;}

( (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");=1;=first;(temp!=NULL) //пока не конец списка

{


temp->zap.x=numer;

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

//запись в файл

fprintf (file," |%-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,>zap.poor, temp->zap.miss_lection, temp->zap.miss_practic);

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


}

(file," +--+------+------+----+----+----+----+----+----+\n");("Файл сохранен!");();

}

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

{(numer>0)

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

{=getel(j);(int k=0;k<numer;k++)

{=getel(k);(strcmp(temp2->zap.dis,temp1->zap.dis)>0)

{ data=temp1->zap;->zap=temp2->zap;->zap=data; }

}

}("Таблица отсортирована!!");();

};

} ;


// -----------------------------------------для сортировки------------------getel(int h)

{

=first;(int c=0;c!=h;c++)=temp->next;temp;

};


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

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

{temp;

(nachalo==NULL)

{=(struct obrabotk*)malloc(sizeof(struct obrabotk));(tmp->inf.dis,dat.dis);>inf.bal=(dat.best*5)+(dat.good*4)+(dat.bad*3)+(dat.poor*2);>inf.bal_c=dat.best+dat.good+dat.bad+dat.poor;>inf.prop_pr=dat.miss_practic;>inf.prop_lec=dat.miss_lection;=tmp;>next=NULL;=nachalo;;

}

{=nachalo; (temp!=NULL) //пока не конец списка

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

{>inf.bal=temp->inf.bal+((dat.best*5)+(dat.good*4)+(dat.bad*3)+(dat.poor*2));>inf.bal_c=temp->inf.bal_c+(dat.best+dat.good+dat.bad+dat.poor);>inf.prop_pr=temp->inf.prop_pr+dat.miss_practic;>inf.prop_lec=temp->inf.prop_lec+dat.miss_lection;;

};

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

};=(struct obrabotk*)malloc(sizeof(struct obrabotk));(tmp->inf.dis,dat.dis);>inf.bal=(dat.best*5)+(dat.good*4)+(dat.bad*3)+(dat.poor*2);>inf.bal_c=dat.best+dat.good+dat.bad+dat.poor;>inf.prop_pr=dat.miss_practic;>inf.prop_lec=dat.miss_lection;>next=NULL;>next=tmp;=tmp;;

};

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

{u=1;(numer>0)

{=first;c;(temp!=NULL)

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

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

//вывод резльтата(" Отчет по дисциплинам \n");(" +-+------+-------------+------------------+\n");(" | | | | Пропуски занятий |\n");(" |#| Шифр | Средний бал +-----+-----+------|\n");(" | | дисц | | Прк | Лек | Всего|\n");

printf(" +-+------+-------------+-----+-----+------|\n");


tmp=nachalo;

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

{=tmp->inf.bal/tmp->inf.bal_c;(" |%d| ",u);("%-5s|", tmp->inf.dis);(" %-10f| ",c);("%-3d| ",tmp->inf.prop_pr);("%-3d| ",tmp->inf.prop_lec);("%-4d| \n",tmp->inf.prop_pr+tmp->inf.prop_lec);=tmp->next; //переход к следующему элементу

u++;

};

printf(" +-+------+-------------+-----+-----+------+\n");();

};

};



ПРИЛОЖЕНИЕ Б

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

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

Для выполнения программы необходимо запустить исполняемый файл 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 (Выход) будет осуществлен выход из программы.


АННОТАЦИЯ В данном документе описывается программа, написанная в соответствии с постановкой задачи на курсовое проектирование по теме "Разработка пр

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ