БД автомобилей

Автор: Пользователь скрыл имя, 29 Апреля 2013 в 11:22, практическая работа

Краткое описание

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

Оглавление

1. Название программы.
2. Поставленная задача.
3. Функциональное предназначение программы.
4. Описание управления, интерфейса, основных переменных и функций.
5. Блок-схема по ЕСПД 19.003-80.
6. Исходный код программы.
7. Список используемой литературы

Файлы: 1 файл

Отчет БД.doc

— 144.50 Кб (Скачать)

 

 

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

 

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

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

 

 

 

 

 

Кафедра ЭВМ

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

                                                                      

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

   студент гр.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 <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) {

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

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<<"Фамилия : "; 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("File could 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.file does 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;

int number,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("File could 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("File could 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);

Информация о работе БД автомобилей