| |
| |
|Министерство Образования Республики Беларусь |
| |
|Белорусский Государственный Университет |
|Информатики и Радиоэлектроники |
| |
| |
| |
| |
| |
|Кафедра ЭВМ |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|Отчёт по учебной практике |
| |
| |
| |
| |
| |
|Выполнил : |
|Проверил : |
|студент гр.050505 |
|Калабухов Е.В. |
|Свентицкий С. М. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|Минск |
|2001 г. |
СОДЕРЖАНИЕ
1. Название программы.
2. Поставленная задача.
3. Функциональное предназначение программы.
4. Описание управления, интерфейса, основных переменных и функций.
5. Блок-схема по ЕСПД 19.003-80.
6. Исходный код программы.
7. Список используемой литературы
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); coutst.lastName; gotoxy(20,8); coutst.firstName; gotoxy(20,10); coutst.midName; gotoxy(20,12); coutst.groupNumber; gotoxy(20,14); cout