.

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

Язык: русский
Формат: реферат
Тип документа: Word Doc
0 972
Скачать документ

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

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

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

Кафедра ЭВМ

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

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

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

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

Минск

2001 г.

СОДЕРЖАНИЕ

Название программы.

Поставленная задача.

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

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

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

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

Список используемой литературы

1. Название программы2. Поставленная задача

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

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

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

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

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

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

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

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

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

typedef struct {

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

char lastName[16]; – фамилия студента

char firstName[11]; – имя студента

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

char groupNumber[6]; – № группы студента

float mark; – средний балл учащегося

} data;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

void main()

Лист 01

void open() void interface(char *)

алгоритм сортировки (по № записи)

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

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

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

#include

#include

#include

#include

#include

#include

#include

#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(” eBase v1.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 (counter0) {

color[counter]=4;

color[–counter]=0;

}

break;

case RIGHT: if (counter=get_number(fn))

num–;

view(fn,num);

break;

}

if (key==283)

return;

if (key == ENTER)

{

switch(counter) {

case 0: add(fn); clrscr(); break;

case 1: del(fn); break;

case 2: edit(fn); clrscr(); break;

case 3: find(fn); break;

case 4: sort(fn); break;

case 5: 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>st.lastName;

gotoxy(20,8); cout>st.firstName;

gotoxy(20,10); cout>st.midName;

gotoxy(20,12); cout>st.groupNumber;

gotoxy(20,14); cout>st.lastName;

gotoxy(20,8);cout>st.firstName;

gotoxy(20,10);cout>st.midName;

gotoxy(20,12);cout>st.groupNumber;

gotoxy(20,14);cout0) {

color[counter]=4;

color[–counter]=0;

}

break;

case RIGHT: if (counter=get_number(fn))

num–;

view(fn,num); break;

}

if (key==283)

return;

if (key == ENTER)

{

if ((fp=fopen(fn,”rb+”)) == NULL)

{

cout 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 0) {

color[counter]=4;

color[–counter]=0;

} break;

case RIGHT: if (counter>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>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) {

coutmax)

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(“File could 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>fn;

strcat(fn,”.dat”);

if ((fp=fopen(fn,”wb”)) == NULL) {

cout>fn;

strcat(fn,”.dat”);

if (!(fp=fopen(fn,”rb”))) {

coutСПИСОК ЛИТЕРАТУРЫ Харви Дейтел, Пол Дейтел “Как программировать на Си” Е. М. Демидович “Основы алгоритмизации и программирования”, Минск 1999 г. Керниган Б., Ритчи Д. “Язык программирования Си”, Финансы и статистика, 1992 г. PAGE PAGE 2 open() Меню выбора create() Начало Конец Конец Начало Electronic Base (Электронная база данных) v 1.666 fn strcat(fn,”dat”) interface(fn) fopen да нет Меню выбора Начало edit(fn) add(fn) del(fn) view(fn,num) find(fn) sort(fn) 01 Начало Конец oldfs=1; newfs=0; да да нет нет да s1=s2 oldfs=1; newfs=0; newfs=1;

Нашли опечатку? Выделите и нажмите CTRL+Enter

Похожие документы
Обсуждение

Оставить комментарий

avatar
  Подписаться  
Уведомление о
Заказать реферат!
UkrReferat.com. Всі права захищені. 2000-2020