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 <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(" 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 (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) {
case 0:
create();break;
case 1:
open();break;
case 2:
exit(10);
}
}
}
}
void interface(char *fn)
{
FILE *fp;
data st;
int num=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(" 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 (counter<5) {