int fileopen() - данная процедура открывает исходный файл для чтения и считывает из него информацию о студентах. Далее открывается файл и посимвольно считываются из него данные, сначала о фамилии студента, далее об оценках. Так как в файле данные разделены запятыми, то и каждое поле считывается до запятой. Если встречается конец строки, то это является сигналом о том, что запись окончена. Считанные данные вводятся присваиваются полям структуры, новый элемент которой создается перед считыванием из файла новой строки. После того, как данные записаны происходит определение указателей, которые привязываются к предыдущему и последующим элементам. Таким образом формируется двунаправленный список. Если элемент списка первый по счету, то он объявляется головой списка. После окончания файла последний элемент списка объявляется хвостом списка.
Int screen() – данная процедура позволяет просматривать полученные списки. Перед началом выполнения программа обращается к голове списка. Вывод осуществлен в виде таблицы. Сначала выводится заголовок, затем построчно данные из списка. После вывод одной структуры происходит продвижение по списку вперед. После вывода 20 записей выполнение останавливается, пользователю предлагается нажать любую клавишу. Затем выводятся заголовок и следующие 20 записей. Так продолжается до тех пор, пока все записи не будут выведены на экран.
int add() - данная процедура осуществляет добавление информации о новом студенте в конец списка и в исходный файл. В начале выполнения отображается рабочее окно функции. Далее пользователю предлагается ввести информацию о студенте. После этого файл открывается для добавления и в конец файла дописывается новая запись. Введенная пользователем информация сохраняется так же в полях созданной структуры. После того как файл закрыт и структура заполнена необходимо добавить ее в конец списка. Для этого обращаемся к хвосту списка и перенаправляем его указатели таким образом, чтобы новый элемент стал последним. Теперь он будет хвостом списка. Алгоритм перенаправления подробно описан в предыдущем разделе.
int remove() – данная процедура позволяет скорректировать данные списка, а именно – удалить из него всех неуспевающих, то есть студентов имеющих двойки по всем предметам. Процедура перебирает элементы списка поочередно, от начала к концу. Если встречается неуспевающий студент, то данный элемент удаляется из списка путем перенаправления указателей предыдущего и последующего элементов, а сам элемент удаляется из памяти. Так же следует учитывать расположение удаляемого элемента, если он находится в голове или хвосте списка, то алгоритм перенаправления меняется. Исходный файл сформирован таким образом, чтобы были удалены данные из всех возможных мест.
Алгоритм перенаправления подробно описан в предыдущем разделе.
Следует отметить, что данная процедура удаляет данные только из списка, но не из файла. Это сделано для того чтобы можно было несколько раз продемонстрировать выполнение программы, не меняя перед каждой демонстрацией содержимого исходного файла.
int head() – функция вывода на экран заголовка таблицы.
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <bios.h>
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>
//uslovie peredvizheniya po punktam menu
#define STOP if(kod<0) kod=0; if(kod>=kodmax) kod=kodmax-1
#define VIDEO 0x10
//strucktura student
struct spis{
char fam[20]; //familiya studenta
int ocenka1; //ocenka po 1 predmetu
int ocenka2; //ocenka po 2 predmetu
int ocenka3; //ocenka po 3 predmetu
int ocenka4; //ocenka po 4 predmetu
struct spis *next; //ukazatel na sleduyushiy element
struct spis *prev; //ukazatel na predidushiy element
};
//shablon strukturi okno
typedef struct {
int LtRow,LtCol; //koordinati verhnego levogo ugla
int Width; //shirina okna
int Height; //visota okna
int TypteBorder; // tip ramki
char *Titl; //zagolovok
int SimvolColor; //cvet simvolov
int Background; //cvetfona
int n; //kolichestvo tem menu
char **Text; //Textovoe soderzhanie okna
}Menu_W;
//punkti menu
char *mnu1[]={"File \n",
"Add \n",
"Correct \n"};
//opisanie prototipov funkciy
int ShowWindow(Menu_W Menu);
int Select_tema(Menu_W Menu,int kod);
int Navig(Menu_W Menu);
int dile(int kod);
int fileopen();
int screen();
int add();
int remove();
int head();
Menu_W Menu={1,1,79,24,0,"Kursovaya rabota",RED,BLUE,0,NULL},
Menu1={2,2,16,4,0,"Deystvie",BLACK,LIGHTGRAY,3,mnu1},
Menu2={1,25,79,0,0,"Podskazka",RED,LIGHTGRAY,0,NULL},
Menu3={1,1,79,24,0,"Sozdanie spiska",BLACK,CYAN,0,NULL},
Menu4={1,1,79,24,0,"Dobavlenie v konec spiska",BLACK,CYAN,0,NULL},
Menu5={1,1,79,24,0,"Udalenie neuspevayushih",BLACK,CYAN,0,NULL},
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.