Реферат: Отчет по учебной практике ОАиП база данных студентов (создание, поиск, удаление, сортировка, все, что надо написанная на С++)

Министерство Образования Республики Беларусь

Белорусский Государственный Университет

Информатики и Радиоэлектроники

Кафедра ЭВМ

Отчёт по учебной практике

                                                                      

   Выполнил :                                                                                    Проверил :

   студент гр.050505                                                                         Калабухов Е.В.

   Свентицкий С. М.

                                                                           

Минск

  2001 г.

СОДЕРЖАНИЕ

 

Название программы. Поставленная задача. Функциональное предназначение программы. Описание управления, интерфейса, основных переменных и функций. Блок-схема по ЕСПД 19.003-80. Исходный код программы. Список используемой литературы
Electronic Base (Электронная база данных) v 1.666   />1. Названиепрограммы
2.Поставленная задача

Написать базу данных (БД) на языке С++ позволяющуюхранить информацию о студентах (Ф.И.О., номер группы, средний балл, уникальныйкод записи (порядковый №)). База данных должна содержать основные функции:добавление записи, удаление записи, редактирование записи, поиск и сортировкупо заданным параметрам.

3.Функциональноепредназначение программы

Данная программа представляет собойбазу данных позволяющую хранить информацию о студентах (Фамилию, Имя, Отчество,№ группы, средний балл). Программа позволяет использовать следующие возможности: создание новой БД, либо открытий уже созданной, добавление новых данных вфайл БД, удаление записей, редактирование имеющихся записей, поиск существующихзаписей по их уникальному коду, по фамилии, по имени, также предусмотренасортировка записей в файле по Ф.И.О, по уникальному коду, по номеру группы, посреднему баллу (причем в этом случае записи располагаются от максимальногосреднего балла вниз, то есть по убыванию). Каждой новой записи присваиваетсясвой индивидуальный номер (код), для упрощения ввода этот код присваиваетсяавтоматически: функций find_max_num(char *) находит максимальный номерзаписи в файле и последующий код присваивается  введенной записи.Такжепредусмотрена проверка вводимых данных на идентичность, при вводе идентичныхданных пользователю будет выдано предупреждение и дана возможность ввести новыеданные. Программа eBase v1.666 использует очень удобный и  понятныйинтерфейс, организована система меню и подменю, внизу окна специально созданагорячая подсказка. Так же предусмотрен так называемый скроллинг (прокрутка)выводимой информации клавишами вверх-вниз,

4. Описание управления, интерфейса, основныхпеременных и функций.

Все данные вводятся склавиатуры.

Используемые клавиши:

Enter (для выбора илиподтверждения), Esc (для отмены, выхода в предыдущее меню), стрелкивправо, влево (для перемещения по меню), вверх,  вниз (для скроллингаданных).

Основные переменные:

структура записей :

            

typedefstruct {

             int num;  -   уникальный № (код) записи

             charlastName[16];  -  фамилия  студента

             charfirstName[11];    -    имя студента

             char midName[16];  -   отчество студента

             chargroupNumber[6]; — № группы студента

             floatmark;   -   средний балл учащегося

             } data;

            

             fn — имя рабочего файла;

Вызываемые функции:

voidinterface(char *) — функция основного интерфейса программы. В качестве входногопараметра принимает имя рабочего файла fn которое передается функциями voidcreate() или void open(). В этой функции реализовано весьма удобноеменю, через которое и происходит вызов последующий функция добавления,сортировки, удаления, поиска и редактирования;

voidadd(char *) — функция добавление записи в БД. Входной параметр fn имяфайла. Использует функцию int find_max_num(char *) для присваиваниявводимой записи свой уникальный номер.

 

voiddel(char *) — функция удаление записи из БД. Входной параметр fn имяфайла. Использует временный файл temp.$$$, в конце выполнения функциивременный файл переименовывается в файл под именем переменной fn;

 

voidedit(char *)  — функция редактирования существующей записи. Входной параметр fnимя файла. Позволяет изменять № (код) записи, а также любую информацию записи;

 

voidview(char *, int ) — функция вывода данных на экран. Входной параметр fn имяфайла;

 

voidfind(char *) — функция поиска  записи по (ее уникальному №, по Фамилии, поИмени). Входной параметр fn имя файла;

 

voidsort(char *) — функция сортировки записей БД по (№ записей, Ф.И.О, среднемубаллу учащихся, № группы студента). Входной параметр fn имя файла.Использует “пузырьковый” метод сортировки данных в файле.

 

intfind_max_num(char *) — функция поиска максимального № записи  в файле БД. Входнойпараметр fn имя файла. Возвращает значение № максимальной записи в файле… для функции void add(char *);

intget_number(char *) — возвращает количество записей в файле. Входной параметр fnимя файла;

 

voidcreate() — создание файла БД. Идет запрос на имя файла, после этого к имени файлаавтоматически добавляется расширение “.dat” имя этого файласчитается рабочим для всей программы. При удачном создании файла его имяпередается в функцию void interface(char *) и т.д.;

 

voidopen() — открытие файла БД. Идет запрос на имя файла, после этого к имени файлаавтоматически добавляется расширение “.dat” имя этого файласчитается рабочим для всей программы. При удачном открытии файла его имяпередается в функцию void interface(char *) и т.д.;

intcheck(char*, data) – функция проверки при вводе информации на ее идентичность.Вызывается функциями добавления записи void add(char *) и редактированиязаписи void edit(char *). В качестве первого входного значенияиспользуется имя рабочего файла fn, в качестве второгоструктура данных типа data(описанная в разделе основные переменные). В качествевозвращаемого параметра используется переменная pr, которая можетпринимать значения 0 или 1, для определения идентичности данных;

Нестандартныеи системные средства, вроде бы, не используются

Все, кроме двух,аварийные ситуации, вроде бы, ликвидированы:

1) Еслидиск заполнен или защищён от записи невозможно записать информацию в файл;

2) Еслиневозможно открыть файл программа выдает сообщениеоб этом и закроется

5.Блок-схема поЕСПД 19.003-80.

 

voidmain()

Лист 01/> /> /> /> /> <td/> /> /> /> />

/>/>/>/>/>/>/>

strcat(fn,”dat”)

 

нет

  />

да

  />/>voidopen()
void interface(char *)/> /> /> /> /> /> /> <td/> /> />
алгоритмсортировки (по № записи)

fp – указатель на файл; s1,s2 – структуры данных типа data;

oldfs,newfs – флаги (признаки),

/>
6.Исходный код программы

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <io.h>

#include <iostream.h>

#include <string.h>

#include <bios.h>

#define ENTER 7181

#define ESC  283

#define LEFT  19200

#define RIGHT 19712

#define UP 18432

#define DOWN 20480

typedef struct {

        int num;

        char lastName[16];

        char firstName[11];

        char midName[16];

        char groupNumber[6];

        float mark;

} data;

void interface(char *);

void add(char *);

void del(char *);

void edit(char *);

void view(char *, int );

void find(char *);

void sort(char *);

int find_max_num(char *);

int get_number(char *);

void create();

void open();

int check(char *, data);

void main()

{

        int key=0,counter=0;

        int color[]={0,4,4};

        while (1) {

                textbackground(1);textcolor(WHITE);

                clrscr();_setcursortype(_NOCURSOR); textcolor(10);

                cprintf("::::::::::::::::::");

                textcolor(15);

                cprintf(" eBasev1.666 Copyright (C) Serj Sventitski ");

                textcolor(10);

                cprintf("::::::::::::::::::");

                switch(key) {

                        case LEFT:if (counter>0) {

                                       color[counter]=4;

                                       color[--counter]=0;

                               }

                               break;

                        case RIGHT:if (counter<2) {

                                       color[counter]=4;

                                       color[++counter]=0;

                               }

                               break;

                }

                textbackground(4); cprintf("                      ");

                textcolor(WHITE);

                textbackground(color[0]); cprintf("   Создать   ");

                textbackground(color[1]); cprintf("   Открыть   ");

                textbackground(color[2]); cprintf("   Выход   ");

                textbackground(4); cprintf("                     ");

                textbackground(1);

                key=bioskey(0);

                if (key == ENTER) {

                        switch(counter){

                               case0:

                                       create();break;

                               case1:

                                       open();break;

                               case2:

                                       exit(10);

                        }

                }

        }

}

void interface(char *fn)

{

        FILE *fp;

        data st;

        intnum=1,key=0,counter=0,color[]={0,4,4,4,4,4};

        clrscr();

        while(1) {

                window(1,1,80,3);

                textbackground(1); textcolor(WHITE);

                _setcursortype(_NOCURSOR); textcolor(10);

                cprintf("::::::::::::::::::");

                textcolor(15);

                cprintf(" eBasev1.666 Copyright (C) Serj Sventitski ");

                textcolor(10);

                cprintf("::::::::::::::::::");

                switch(key)

                {

                        case LEFT:if (counter>0) {

                                       color[counter]=4;

                                       color[--counter]=0;

                               }

                               break;

                        case RIGHT:if (counter<5) {

                                       color[counter]=4;

                                       color[++counter]=0;

                               }

                               break;

                }

                textbackground(4);cprintf("    ");

                textcolor(WHITE);

                textbackground(color[0]);cprintf(" Добавить  ");

                textbackground(color[1]);cprintf(" Удалить  ");

                textbackground(color[2]);cprintf(" Редактировать  ");

                textbackground(color[3]);cprintf(" Поиск  ");

                textbackground(color[4]);cprintf(" Сортировка  ");

                textbackground(color[5]);cprintf(" Назад  ");

                textbackground(4);cprintf("    ");

                textbackground(1);

                view(fn,num);

                key=bioskey(0);

                switch(key)

                {

                        case UP:    num--;if(num==0)

                               num++;

                               view(fn,num);

                               break;

                        case DOWN:num++;if (num+16>=get_number(fn))

                               num--;

                               view(fn,num);

                               break;

                }

                if (key==283)

                        return;

                if (key == ENTER)

                {

                        switch(counter) {

                               case0: add(fn); clrscr(); break;

                               case1: del(fn); break;

                               case2: edit(fn); clrscr(); break;

                               case3: find(fn); break;

                               case4: sort(fn); break;

                               case5: return;

                        }

                }

        }

}

void add(char *fn)

{

        FILE *fp;

        data st;

        int pr;

        while (1) {

                st.num=find_max_num(fn)+1;

                clrscr();

                _setcursortype(_SOLIDCURSOR);

                gotoxy(20,6); cout<<«Фамилия: »; cin>>st.lastName;

                gotoxy(20,8);     cout<<«Имя: »;  cin>>st.firstName;

                gotoxy(20,10);   cout<<«Отчество: »; cin>>st.midName;

                gotoxy(20,12); cout<<"№ группы: "; cin>>st.groupNumber;

                gotoxy(20,14);  cout<<«Средний балл студента: »;

                fflush(stdin);scanf("%f",&st.mark);

                if (!check(fn, st)){

                        if ((fp =fopen(fn,«ab+»)) == NULL)  {

                               printf(«Filecould not be opened.\n»);

                               return;

                        }

                        fwrite(&st,sizeof(data),1,fp);

                        fclose(fp);

                        return;

                }

                else {

                        gotoxy(20,18);

                        cout<<«Такая запись ужесуществует»;

                        getch();

                }

        }

}

void del(char *fn)

{

        FILE *fp,*temp;

        data st;

        int pr=1;

        int number;

        gotoxy(4,25);

        textcolor(11);

        cprintf(«Введите № записи для удаления:             „);

        textcolor(YELLOW);

        gotoxy(36,25);

        int key = 0;

        cscanf(“%d»,&number);

        textcolor(WHITE);

        while(kbhit())

        if (!(key=getch()))

                key << 8;

        if( key == '\r' ) {

                if((fp=fopen(fn,«rb»)) == NULL) {

                        cout<<«error.filedoes not exist.»;

                        return;

                }

                if((temp=fopen(«temp.$$$»,«wb»)) == NULL) {

                        cout<<«error.temp file couldn't be create»;

                        return;

                }

                while(fread(&st,sizeof(data),1,fp)) {

                        if(feof(fp))

                               break;

                        if (st.num!= number)

                               fwrite(&st,sizeof(data),1,temp);

                        else

                               pr=0;

                }

                fclose(fp);

                fclose(temp);

                if (remove(fn) ==-1) {

                        perror(«remove»);

                        return;

                }

                if(rename(«temp.$$$»,fn) == -1)  {

                        perror(«rename»);

                        return;

                }

                if (pr) {

                        textcolor(11);

                        gotoxy(4,25);

                cprintf("\r  Ошибка. Нет записи стаким номером          ");

                        getch();

                        textcolor(WHITE);

                }

        }

        clrscr();

}

void edit(char *fn)

{

        FILE *fp;

        data st;

        int pr=1;

        intnumber,size=sizeof(data);

        fpos_t filepos;

        gotoxy(4,25);

        textcolor(11);

        cprintf(«Введите № записи дляредактирования   :       „);

        textcolor(YELLOW);

        gotoxy(44,25);

        int key = 0;

        cscanf(“%d»,&number);

        textcolor(WHITE);

        while( kbhit())

                if( !(key =getch()))

                        key <<8;

                if( key == '\r' )

                {

                        if ((fp =fopen(fn,«rb+»)) == NULL)

                        {

                               printf(«Filecould not be opened.\n»);

                               return;

                        }

                        while(fread(&st,size,1,fp))

                        {

                               if(feof(fp))

                                       break;

                               if(st.num == number)

                               {

                                       fseek(fp,-1*size,1);

                                       fgetpos(fp,&filepos);

                                       pr=1;

                                       break;

                               }

                               else

                                       pr=0;

                        }

                        if (pr)

                        {

                               while(1)

                               {

                               clrscr();

                               _setcursortype(_SOLIDCURSOR);

                               gotoxy(20,6);cout<<«Фамилия:                »;

                               cin>>st.lastName;

                               gotoxy(20,8);cout<<«Имя:                    »;

                               cin>>st.firstName;

                               gotoxy(20,10);cout<<«Отчество :               »;

                               cin>>st.midName;

                               gotoxy(20,12);cout<<"№группы :               ";

                               cin>>st.groupNumber;

                               gotoxy(20,14);cout<<«Средний балл студента :  »;

                               scanf("%f",&st.mark);

                               if(!check(fn, st))

                               {

                                       fsetpos(fp,&filepos);

                                       fwrite(&st,sizeof(data),1,fp);

                                       break;

                                       }

                                       else{

                                               gotoxy(20,18);

                                               cout<<«Такая запись ужесуществует»;

                                               getch();

                                       }

                               }

                        }

                        else {

                               textcolor(11);

                               gotoxy(4,25);

cprintf("\r   Ошибка… Нет записи с таким номером         ");

                               getch();

                               textcolor(WHITE);

                        }

                fclose(fp);

                }

}

void view(char *fn,int n)

{

        void ramka();

        FILE *fp;

        data st;

        char c;

        int counter=0;

        if ((fp =fopen(fn,«rb»)) == NULL)  {

                printf(«Filecould not be opened.\n»);

                return;

        }

        ramka();

        window(1,6,80,23);

        fseek(fp,(n-1)*sizeof(data),SEEK_SET);

        while (counter != 18)

        {

                fread(&st,sizeof(data),1,fp);

                if (feof(fp))

                        break;

                else

                {

                               printf("%4d   %-16s %-12s %-17s %8s     "

                               "%7.2f\n",st.num,st.lastName,st.firstName,

                               st.midName,st.groupNumber,st.mark);

                               counter++;

                }

        }

        window(1,24,80,25);

        cprintf("-----------------------------------"

        "---------------------------------------------");

        cprintf("   %c — вверх, %c- вниз, %c — влево,"

        "%c — вправо,  ESC — отмена ",0x018,0x019,0x01B,0x01A);

        textcolor(10);     textbackground(1);cprintf("%14s",fn);

        window(1,1,80,25); textcolor(15);

        fclose(fp);

}

void sort(char *fn)

{

        FILE *fp;

        data s1,s2;

        intnum=1,size=sizeof(data),counter=0,key=0;

        intoldfs,newfs,color[]={0,4,4,4,4};

        while(1)

        {

                        _setcursortype(_NOCURSOR); textcolor(10);

        cprintf("::::::::::::::::::::::::: М ен ю  с о р т и р о в к и "

                ":::::::::::::::::::::::::");

                switch(key)

                {

                        case LEFT:if (counter>0) {

                                       color[counter]=4;

                                       color[--counter]=0;

                               }

                               break;

                        case RIGHT:if (counter<4) {

                                       color[counter]=4;

                                       color[++counter]=0;

                               }

                               break;

                }

                textbackground(4);cprintf("        "); textcolor(WHITE);

                textbackground(color[0]);cprintf(" по № записи  ");

                textbackground(color[1]);cprintf(" по Ф.И.О  ");

                textbackground(color[2]);cprintf(" по № группы ");

                textbackground(color[3]);cprintf(" по ср.балу  ");

                textbackground(color[4]);cprintf(" Назад  ");

                textbackground(4);cprintf("       "); textbackground(1);

                view(fn,num);

                key=bioskey(0);

                switch(key)

                {

                        case UP:    num--;if(num==0)

                               num=1;

                               view(fn,num);break;

                        case DOWN:num++;if (num+16>=get_number(fn))

                               num--;

                               view(fn,num);break;

                }

                if (key==283)

                        return;

                if (key == ENTER)

                {

                        if((fp=fopen(fn,«rb+»)) == NULL)

                        {

                               cout<<«error.filedoes not exist.»;

                               return;

                        }

                switch(counter)  {

                case 1:  /*-----------поФ.И.О--------------------*/

                               oldfs=1;  newfs=0;

                               fread(&s1,size,1,fp);

                               while(oldfs){

                                       fread(&s2,size,1,fp);

                                       if(feof(fp)){

                                       if(!newfs)

                                               break;

                                       oldfs=1;newfs=0;

                                       rewind(fp); 

                                       fread(&s1,size,1,fp);

                                       continue;  

                               }

                               if(strcmp(s1.lastName,s2.lastName) > 0) {

                                       fseek(fp,-2*size,1);

                                       fwrite(&s2,size,1,fp);

                                       fwrite(&s1,size,1,fp);

                                       newfs=1;

                               }

                               if(strcmp(s1.lastName,s2.lastName) == 0)

                                       if(strcmp(s1.firstName,s2.firstName) > 0) {

                                               fseek(fp,-2*size,1);

                                               fwrite(&s2,size,1,fp);

                                               fwrite(&s1,size,1,fp);

                                               newfs=1;

                                       }

                               if(strcmp(s1.firstName,s2.firstName) == 0)

                                       if      (strcmp(s1.midName,s2.midName)> 0)        {

                                                       fseek(fp,-2*size,1);

                                                        fwrite(&s2,size,1,fp);

                                                       fwrite(&s1,size,1,fp);

                                                       newfs=1;

                                               }

                                               else

                                                       s1=s2;

                               else

                                       s1=s2;

                               }

                               break;

                case 0:     /*------------ПО НОМЕРУЗАПИСИ-----------*/

                               oldfs=1;  newfs=0;

                               fread(&s1,size,1,fp);

                               while(oldfs){

                                               fread(&s2,size,1,fp);

                                               if(feof(fp)){

                                               if(!newfs)

                                                       break;

                                               oldfs=1;newfs=0;

                                               rewind(fp);

                                               fread(&s1,size,1,fp);

                                               continue;

                                       }

                                       if(s1.num > s2.num)  {

                                               fseek(fp,-2*size,1);

                                               fwrite(&s2,size,1,fp);

                                               fwrite(&s1,size,1,fp);

                                               newfs=1;

                                       }

                                       else

                                               s1=s2;

                               }

                               break;

                case 2:     /*----------ПО НОМЕРУГРУППЫ---------------*/

                               oldfs=1;  newfs=0;

                               fread(&s1,size,1,fp);

                               while(oldfs){

                                       fread(&s2,size,1,fp);

                                       if(feof(fp)){

                                               if(!newfs)

                                                       break;

                                               oldfs=1;newfs=0;

                                               rewind(fp);

                                               fread(&s1,size,1,fp);

                                               continue;

                                       }

                        if(strcmp(s1.groupNumber,s2.groupNumber) > 0) {

                                               fseek(fp,-2*size,1);

                                               fwrite(&s2,size,1,fp);

                                               fwrite(&s1,size,1,fp);

                                               newfs=1;

                                       }

                                       else

                                               s1=s2;

                               }

                               break;

                        case 3:    /*---------ПО СР.БАЛУ----------------*/

                               oldfs=1; newfs=0;

                               fread(&s1,size,1,fp);

                               while(oldfs){

                                       fread(&s2,size,1,fp);

                                       if(feof(fp)){

                                       if(!newfs)

                                               break;

                                       oldfs=1;newfs=0;

                                       rewind(fp);

                                       fread(&s1,size,1,fp);

                                       continue;

                                       }

                                       if(s1.mark < s2.mark) {

                                               fseek(fp,-2*size,1);

                                               fwrite(&s2,size,1,fp);

                                               fwrite(&s1,size,1,fp);

                                               newfs=1;

                                       }

                                       else

                                               s1=s2;

                               }break;

                        case 4:

                               fclose(fp);

                               return;

                        }

                fclose(fp);

                }

        }

}

void find(char *fn)

{

        void ramka();

        FILE* fp;

        data st;

        char string[15];

        int pr,prs;

        int key=0,counter=0;

        int color[]={0,4,4,4};

        while (1) {

                clrscr();textcolor(10);

          cprintf("::::::::::::::::::::::::::::: М е н ю  П о и с к а "

                ":::::::::::::::::::::::::::::");

                textcolor(WHITE);

                textbackground(4);

                cprintf("                  ");

                switch(key)

                {

                        case LEFT:if (counter>0) {

                                       color[counter]=4;

                                       color[--counter]=0;

                               }break;

                        case RIGHT:if (counter<3) {

                                       color[counter]=4;

                                       color[++counter]=0;

                               }break;

                }

                textbackground(color[0]); cprintf(" по № записи ");

                textbackground(color[1]); cprintf(" по Фамилии ");

                textbackground(color[2]); cprintf(" по Имени ");

                textbackground(color[3]); cprintf(" Отмена ");

                textbackground(4);

                cprintf("                 ");

                textbackground(1);

                key=bioskey(0);

                if (key==283)

                        return;

                if (key == ENTER)

                {

                        if((fp=fopen(fn,«rb»))==NULL){

                               puts(«Filecouldn't be open»);

                               return;

                        }

                        switch(counter)

                        {

                        case 0:

                               intnumber;

                               pr=0;

                               prs=1;

                               cout<<«ВВЕДИТЕ НОМЕР ЗАПИСИ:»;

                               fflush(stdin);

                               scanf("%d",&number);

                               rewind(fp);

                               while(fread(&st,sizeof(data),1,fp)){

                                       if(feof(fp)) {

                                               break;

                                       }

                                       if(st.num== number)  {

                                               if(prs) {

                                                       ramka();

                                                       gotoxy(1,6);

                                                       prs=0;

                                               }

                                       printf("%4d   %-16s %-12s %-17s %8s     "

                                       "%7.2f\n",st.num,st.lastName,st.firstName,   

                                       st.midName,st.groupNumber,st.mark); 

                                       pr=1;               

                                       }

                               }

                               if(!pr){

                        cout<<"\nЗАПИСИ С ТАКИМ НОМЕРОМ НЕСУЩЕСТВУЕТ";

                                       }

                               getch();

                               break;

                        case 1:

                               prs=1;

                               pr=0;

                               cout<<«ВВЕДИТЕ ФАМИЛИЮ:»;

                               fflush(stdin);

                               cin>>string;

                               rewind(fp);

                               while(fread(&st,sizeof(data),1,fp)){

                                       if(feof(fp))

                                               break;

                                       if(!strcmp(st.lastName,string)){

                                               if(prs) {

                                                       ramka();

                                                       gotoxy(1,6);

                                                       prs=0;

                                               }

                                       printf("%4d   %-16s %-12s %-17s %8s     "

                                       "%7.2f\n",st.num,st.lastName,st.firstName,

                                       st.midName,st.groupNumber,st.mark);

                                       pr=1;

                                       }

                               }

                               if(!pr){

                                       cout<<"\nНЕТ ДАННЫХ";

                               }

                               getch();

                               break;

                        case 2:

                               prs=1;

                               pr=0;

                               cout<<«ВВЕДИТЕ ИМЯ: »;

                               fflush(stdin);

                               cin>>string;

                               rewind(fp);

                               while(fread(&st,sizeof(data),1,fp)){

                                       if(feof(fp))

                                               break;

                                       if(!strcmp(st.firstName,string)){

                                               if(prs) {

                                                       ramka();

                                                       gotoxy(1,6);

                                                       prs=0;

                                               }

                                       printf("%4d   %-16s %-12s %-17s %8s     "

                                       "%7.2f\n",st.num,st.lastName,st.firstName,

                                       st.midName,st.groupNumber,st.mark);

                                       pr=1;

                                       }

                               }

                               if(!pr){

                                       cout<<"\nНЕТ ДАННЫХ";

                               }

                               getch();

                               break;

                        case 3:

                               fclose(fp);

                               return;

                        }

                fclose(fp);

                }

        }

}

void ramka()

{

                window(1,3,80,6);

                cprintf("------------------------------------"

                "--------------------------------------------");

                textcolor(14);

                cprintf("%5s  %-16s %-12s %-17s %-8s %12s   ",

                "№",«Фамилия»,«Имя»,«Отчество»,"№группы",«Ср.балл»);

                textcolor(WHITE);

                cprintf("------------------------------------"

                "--------------------------------------------");

                window(1,1,80,25);

}

int find_max_num(char *fn)

{

        FILE  *fp;

        data st;

        int max;

        if ((fp =fopen(fn,«rb»)) == NULL)  {

                        printf(«Filecould not be opened.\n»);

                        return -1;

                }

        max=0;

        while(fread(&st,sizeof(data),1,fp)) {

                if (feof(fp))

                        break;

                if (st.num>max)

                        max=st.num;

        }

        fclose(fp);

        return max;

}

int get_number(char *fn)

{

        FILE *fp;

        int fd,n=0;

        if ((fp =fopen(fn,«rb»)) == NULL)

        {

                printf(«Filecould not be opened.\n»);

                return -1;

        }

        fd=fileno(fp);

        n=filelength(fd)/sizeof(data);

        fclose(fp);

        return n;

}

void create()

{

        FILE *fp;

        char *fn;

        cout<<«Введите имя новой БД:»;

        fflush(stdin);

        cin>>fn;

        strcat(fn,".dat");

        if((fp=fopen(fn,«wb»)) == NULL) {

                cout<<«Ошибка… Файл не можетбыть создан\n»;

                getch();

                exit(10);

        }

        fclose(fp);

        interface(fn);

}

void open()

{

        FILE *fp;

        char *fn;

                cout<<«Введите имя БД:»;

                fflush(stdin);

                cin>>fn;

                strcat(fn,".dat");

                if(!(fp=fopen(fn,«rb»))) {

                        cout<<«Ошибка… Файл не можетбыть открыт\n»;

                        getch();

                        exit(10);

                }

                fclose(fp);

                interface(fn);

}

int check(char *fn, data st)

{

        FILE *fp;

        data temp;

        int pr=0;

        if ((fp =fopen(fn,«rb»)) == NULL) {

                printf(«Filecould not be opened.\n»);

                return 0;

        }

        while ( fread( &temp,sizeof( data ), 1, fp)) {

                if (feof(fp))

                        break;

                if(!strcmp(st.lastName,temp.lastName)

                 &&!strcmp(st.firstName,temp.firstName)

                 &&!strcmp(st.midName,temp.midName)

                 &&!strcmp(st.groupNumber,temp.groupNumber)

                 && (st.mark== temp.mark))  {

                               pr=1;

                               break;

                }

        } fclose(fp);

  return pr;

}


СПИСОКЛИТЕРАТУРЫХарви Дейтел, Пол Дейтел “Как программировать на Си” Е. М. Демидович “Основы алгоритмизации и программирования”, Минск 1999 г. Керниган Б., Ритчи Д. “Язык программирования Си”, Финансы и     статистика, 1992 г.
еще рефераты
Еще работы по информатике, программированию