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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.12.2012
Размер файла 135,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

АННОТАЦИЯ

В данном документе описывается программа, написанная в соответствии с постановкой задачи на курсовое проектирование по теме "Разработка программы об успеваемости студентов" по дисциплине "Основы программирования и алгоритмические языки". Структура записей входного файла имеет следующий шифр группы(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 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 //константа

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, '\0');

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(" ---------- РЕДАКТИРОВАНИЕ ТАБЛИЦЫ ------------------\n\n");

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, '\0');

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");

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");

}

temp->zap.x=numer;

numer++;

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);

temp=temp->next; }

}

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

}

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

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

{

int temp,i;

char dat[256];

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

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

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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("Количество н может превышать 999\n");

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) //пока не конец списка

{

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,

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

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

}

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=tmp->inf.bal/tmp->inf.bal_c;

printf(" |%d| ",u);

printf("%-5s|", tmp->inf.dis);

printf(" %-10f| ",c);

printf("%-3d| ",tmp->inf.prop_pr);

printf("%-3d| ",tmp->inf.prop_lec);

printf("%-4d| \n",tmp->inf.prop_pr+tmp->inf.prop_lec);

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

u++;

};

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

Размещено на Allbest.ru


Подобные документы

  • Разработка программы тестирования студентов по MS PowerPoint с кодом на языке Delphi. Создание алгоритма для решения функциональных требований задачи. Описание переменных, вспомогательных процедур, входных и выходных данных для реализации программы.

    курсовая работа [1,5 M], добавлен 21.09.2010

  • Сущность и виды СУБД Microsoft Access. Алгоритм создания базы данных сессионной успеваемости студентов ВУЗа. Проектирование форм для сводных таблиц с помощью конструктора окон. Разработка отчетов и запросов на выборку данных. Создание кнопочной формы.

    курсовая работа [5,4 M], добавлен 09.05.2011

  • Выбор типа программного обеспечения, к которому относится оцениваемый программный продукт. Выбор весовых коэффициентов и базовых значений. Восстановление программы после системного сбоя. Схема базы данных "Учет посещаемости студентов" в MS Access.

    контрольная работа [52,8 K], добавлен 22.12.2011

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

    курсовая работа [299,8 K], добавлен 27.06.2014

  • Проектировка и создание системы, направленной на упразднение трудной и рутинной работы преподавателей, за счет централизованного хранения данных об успеваемости студентов и удобного доступа к ним. Средства реализации и тестирование программного средства.

    курсовая работа [1,3 M], добавлен 28.08.2012

  • Технологии и языки программирования, используемые при разработке программы. Проектирование и реализация социальной сети. Описание и обоснование выбора организации входных и выходных данных. Алгоритм функционирования программы, таблицы базы данных.

    курсовая работа [3,5 M], добавлен 10.06.2014

  • Разработка эскизного и технического проектов программы, ее назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка рабочего проекта, спецификация программы.

    курсовая работа [700,6 K], добавлен 26.01.2010

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

    курсовая работа [27,5 K], добавлен 06.02.2013

  • Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.

    курсовая работа [81,7 K], добавлен 18.08.2014

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

    курсовая работа [907,1 K], добавлен 10.01.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.