4 Анализ результатов тестирования

В ходе испытаний программы была проверена правильность её работы при вводе , редактировании , удалении и поиске определённых элементов базы данных по отдельным значениям полей.

В ходе проведения тестирования выяснилось , что программа полностью работоспособна.

Заключение

В процессе работы была определена структура данных программы , разработан алгоритм решения задачи , была разработана структура программы.

Реализация программы была проведена на алгоритмическом языке С++l v.3.10.

Результаты тестирования показали , что программа работает правильно.

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <graphics.h>

#include <string.h>

#include <dos.h>

#include <sysstat.h>

#include <io.h>

#include <fcntl.h>

// ОПИСАНИЯ КЛАССОВ -------------------------------------------

// Класс, определяющий один элемент базы данных

class One_Record {

public:

char fio[60]

// ФИО

char yy[5]

 // Год рождения

char addr[60]

// Адрес

char grp[10]

// Группа

One_Record * next

 // Следующий

One_Record * last

 // Предыдущий

One_Record(int,One_Record *)

// Конструктор - читает элемент из файла

// Конструктор - создает новый элемент

One_Record(char * m_fio,char * m_yy,char * m_addr,char * m_grp)

// Деструктор

~One_Record(){}

// Запись в файл

void save(int)

// Поиск вперед

One_Record * FindUp(char * m_fio,char * m_yy,char * m_addr,char * m_grp)

// Поиск назад

One_Record * FindDown(char * m_fio,char * m_yy,char * m_addr,char * m_grp)

// Добавление

void add(One_Record * )

}

// Класс окон

class wind {

public:

int x,y,dx,dy

// Координаты и размеры окна

int pap,ink,apap

// Цвета окна

char ts

// Активизируется или нет при нажатии TAB

wind * next

// Следующее

wind(int,int,int,int)

// Конструктор

~wind(){}

// Деструктор

void add(void * p)

 // Добавить в список

void setact(char)

 // Изменить значение флага TS

virtual void redr()

// Перерисовка

virtual void * active()

// Активизироать - возвращает указатель на

// следующее активное

}

// Потомок класса WIND - строка редактирования

class ed_win:public wind {

public:

char capt[100]

// Содержимое

char pcapt[100]

// Предыдущее содержимое

int maxlen

 // Максимальная длинна

public:

// Конструктор

ed_win(int,int,int,int,char *,int)

// Перерисовка

virtual void redr()

// Активизация

virtual void * active()

}

// Потомок WIND - кнопка

class bt_win:public wind {

void (*fun)()

 // Вызываемая при нажатии функция

char capt[50]

// Название

public:

// Конструктор

bt_win(int,int,int,int,char *,void (*)())

// Перерисовка

virtual void redr()

// Активизация

virtual void * active()

}

// Скроллер

class sc_win:public wind {

public:

// Маска выбора

char * m_fio

char * m_addr

char * m_yy

char * m_grp

// Начальный элемент

One_Record * pnt

// Конструктор

sc_win(int,int,int,int,One_Record *,char*,char*,char*,char*)

// Перерисовка

virtual void redr()

// Активизация

virtual void * active()

}

// ПРОТОТИПЫ ФУНКЦИЙ КНОПОК -----------------------------------

void fun_add()

void fun_del()

void up()

void down()

void find()

void edit()

void fun_exit()

void about()

// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ --------------------------------------

// Указатель на активное окно

wind * act

// Флаг, устанавливаемый для выхода

int f_exit=0

// Список окон оснвного меню

wind * stwin

// Список окон меню ввода данных

wind * edwin

// Первый и текущий элементы базы данных

One_Record * ndb=NULL

One_Record * ctb=NULL

// Данные о окнах меню

// Основное меню

bt_win add_w(10,10,60,30," New ",fun_add)

bt_win del_w(80,10,60,30," Del ",fun_del)

bt_win edt_w(150,10,60,30," Edit ",edit)

bt_win fin_w(220,10,60,30," Find ",find)

bt_win ext_w(290,10,60,30," Exit ",fun_exit)

bt_win abt_w(360,10,60,30," About ",about)

bt_win up_w(430,10,30,14," Up ",up)

bt_win down_w(430,26,30,14," Dn ",down)

// Ввод/редактирование данных о студенте/ввод маски поиска

ed_win ifio(100,100,400,30," FIO ",55)

ed_win iyy(100,140,400,30,"Year",4)

ed_win iaddr(100,180,400,30," Addres ",55)

ed_win igrp(100,220,400,30," Group ",9)

// ГЛОБАЛЬНЫЕ ФУНКЦИИ -----------------------------------------

// Функция сравнения строки A с маской B

int stc(char * a,char * b) {

int n

if (strlen(a)<strlen(b)) return 0

for (n=0

n<strlen(b)

n++) if (a[n]!=b[n]) return 0

return 1

}

// ОПИСАНИЯ МЕТОДОВ КЛАССОВ -----------------------------------

// Объект ЗАПИСЬ ------------------------------------------

// Конструктор

One_Record::One_Record(char * m_fio,char * m_yy,char * m_addr,char * m_grp) {

strcpy(fio,m_fio)

strcpy(yy,m_yy)

strcpy(addr,m_addr)

strcpy(grp,m_grp)

next=NULL

last=NULL

}

// Коснтруктор для случая чтения из файла

One_Record::One_Record(int handle,One_Record * lst) {

char rs[140]

// Чтение во временную строку

read(handle,rs,140)

strcpy(fio,rs)

strcpy(yy,rs+60)

strcpy(addr,rs+65)

strcpy(grp,rs+125)

next=NULL

last=lst

if (!eof(handle))

 next=new One_Record(handle,this)

}

// Запись данных файл

void One_Record::save(int handle) {

char rs[140]

strcpy(rs,fio)

strcpy(rs+60,yy)

strcpy(rs+65,addr)

strcpy(rs+125,grp)

_write(handle,rs,140)

if (next!=NULL) next->save(handle)

}

// Добавление записи в список

void One_Record::add(One_Record * a) {

// Проверка, дальше ли запись по алфавиту

if (strcmp(a->fio,fio)<0) {

// Вставка перед этим элементом

 if (last!=NULL) {

a->last=last

a->next=this

last->next=a

last=a

 } else {

a->next=this

a->last=NULL

last=a

 }

// Дальше - либо добавление в конец, либо переход к следующему

} else if (next!=NULL) next->add(a)

else {

 next=a

 a->last=this

 a->next=NULL

}

}

// Найти вверх по списку элемент, попадающий под маску

One_Record * One_Record::FindUp(char * m_fio,char * m_yy,char * m_addr,char * m_grp) {

if (stc(fio,m_fio)&&

stc(fio,m_fio)&&

stc(fio,m_fio)&&

stc(fio,m_fio)) return this

if (last!=NULL) return last->FindUp(m_fio,m_yy,m_addr,m_grp)

else return NULL

}

// Найти вниз по списку элемент, попадающий под маску

One_Record * One_Record::FindDown(char * m_fio,char * m_yy,char * m_addr,char * m_grp) {

if (stc(fio,m_fio)&&

stc(yy,m_yy)&&

stc(addr,m_addr)&&

stc(grp,m_grp)) return this

if (next!=NULL) return next->FindDown(m_fio,m_yy,m_addr,m_grp)

else return NULL

}

// Класс окон ---------------------------------------------

// Конструктор

wind::wind(int ix,int iy,int idx,int idy) {

x=ix

y=iy

dx=idx

dy=idy

pap=8

ink=15

apap=1

ts=1

next=NULL

}

// Перерисовка

void wind::redr() {

setfillstyle(1,pap)

setcolor(ink)

bar(x,y,x+dx,y+dy)

rectangle(x+3,y+3,x+dx-3,y+dy-3)

if (next!=NULL) next->redr()

}

// Добавление в список

void wind::add(void * p) {

if (next!=NULL) next->add(p)

else next=(wind *) p

}

// Активизация

void * wind::active() {

// Проверка, активизировать ли

if (ts) {

// Прорисовка активного состояния

 setfillstyle(1,apap)

 setcolor(ink)

 bar(x,y,x+dx,y+dy)

 rectangle(x+3,y+3,x+dx-3,y+dy-3)

 char c

// Обработка клавиатуры - TAB - следующее, ESC - выход

 do {

c=getch()

 } while ((c!=9)&&(c!=27))

 if (c==27) f_exit=1

 return next

} else return next

 // Нет - вернуть указатель на следующее

}

// Изменение флага TS

void wind::setact(char a) {

ts=a

}

// Класс строк редактирования -----------------------------

// Конструктор

ed_win::ed_win(int ix,int iy,int idx,int idy,char * p,int mln):

wind(ix,iy,idx,idy) {

maxlen=mln

strcpy(capt,p)

strcpy(pcapt,p)

}

// Перерисовка

void ed_win::redr(){

setfillstyle(1,pap)

setcolor(ink)

bar(x,y,x+dx,y+dy)

rectangle(x+3,y+3,x+dx-3,y+dy-3)

settextjustify(1,1)

outtextxy(x+dx/2,y+dy/2,capt)

if (next!=NULL) next->redr()

}

// Активизация

void * ed_win::active(){

unsigned char c

char ps[200]

if (!ts) return next

// Проверка, активизировать или пропустить

// Перерисовка

setfillstyle(1,apap)

setcolor(ink)

bar(x,y,x+dx,y+dy)

rectangle(x+3,y+3,x+dx-3,y+dy-3)

settextjustify(1,1)

do {

// Вывод строки с символом "_" в качестве курсора

 strcpy(ps,capt)

 strcat(ps,"_")

 bar(x+4,y+4,x+dx-4,y+dy-4)

 outtextxy(x+dx/2,y+dy/2,ps)

// Опрос клавиатуры

 c=getch()

 if (c==0) c=getch()

else {

if (c==8) {

// Удалить - переместить конец строки 0 на единицу левее

if (strlen(capt)>0) capt[strlen(capt)-1]=0

}

if (c==13) strcpy(pcapt,capt)

// ENTER - запомнить содержимое

if (c==27) strcpy(capt,pcapt)

// ESC - восстановить содержимое

if ((c>32)&&(strlen(capt)<maxlen)) {

// Иначе - добавить символ

capt[strlen(capt)+1]=0

capt[strlen(capt)]=c

}

 }

} while (c!=9)

return next

}

// Класс кнопок -------------------------------------------

// Конструктор

bt_win::bt_win(int ix,int iy,int idx,int idy,char * p,void (*ifun)()):

wind(ix,iy,idx,idy) {

apap=12

pap=3

strcpy(capt,p)

fun=ifun

}

// Перерисовка

void bt_win::redr(){

setfillstyle(1,pap)

setcolor(ink)

bar(x,y,x+dx,y+dy)

rectangle(x+3,y+3,x+dx-3,y+dy-3)

settextjustify(1,1)

outtextxy(x+dx/2,y+dy/2,capt)

if (next!=NULL) next->redr()

}

// Активизация

void * bt_win::active(){

char c

if (ts) {

// Перерисовка активной кнопки

 setfillstyle(1,apap)

 setcolor(ink)

 bar(x,y,x+dx,y+dy)

 rectangle(x+3,y+3,x+dx-3,y+dy-3)

 settextjustify(1,1)

 outtextxy(x+dx/2,y+dy/2,capt)

// Обработка событий

 do {

c=getch()

if (c==13) fun()

// ENTER - выполнение функции

 } while ((c!=13)&&(c!=9)&&(c!=27)&&(!f_exit))

// Проверка условия завершения

 if (c==27) f_exit=1

// Если ESC - выход из программы

}

return next

}

// Класс скроллеров ---------------------------------------

// Конструктор

sc_win::sc_win(int ix,int iy,int idx,int idy,One_Record * ipnt,char * ifio,char * iyy,char * iaddr,char * igrp):

wind(ix,iy,idx,idy) {

apap=1

pap=1

strcpy(m_fio,ifio)

strcpy(m_addr,iaddr)

strcpy(m_yy,iyy)

strcpy(m_grp,igrp)

pnt=ipnt->FindDown(ifio,iyy,iaddr,igrp)

}

// Перерисовка

void sc_win::redr() {

int n

int dlt=dx/5

One_Record * p

// Перерисовка

setfillstyle(1,apap)

setcolor(ink)

bar(x,y,x+dx,y+dy)

rectangle(x+3,y+3,x+dx-3,y+dy-3)

settextjustify(1,1)

// Вывод всех строк таблицы

p=pnt

n=20

while ((p!=NULL)&&(n<dy)) {

 outtextxy(x+dlt,y+n,p->fio)

 outtextxy(x+dlt*2,y+n,p->yy)

 outtextxy(x+dlt*3,y+n,p->addr)

 outtextxy(x+dlt*4,y+n,p->grp)

 // Попытка найти следующий элемент

 if (p->next!=NULL) p=p->next->FindDown(m_fio,m_yy,m_addr,m_grp)

else p=NULL

 n+=20

}

}

// Активизация

void * sc_win::active() {

char c

One_Record * p

do {

 redr()

 c=getch()

 if (!c) c=getch()

 if (c==72) if (pnt!=NULL) {

 // Вверх

p=pnt->FindUp(m_fio,m_yy,m_addr,m_grp)

if (p!=NULL) pnt=p

 }

 if (c==80) if (pnt!=NULL) {

 // Вниз

p=pnt->FindDown(m_fio,m_yy,m_addr,m_grp)

if (p!=NULL) pnt=p

 }

} while (c!=27)

setfillstyle(3,4)

bar(0,0,639,479)

return next

}

// ТЕЛА ФУНКЦИЙ КНОПОК ----------------------------------------

// Выход - просто установка флага

void fun_exit() {

f_exit=2

}

// Вверх - перемещение указателя и перерисовка полей редактирования

void up() {

if (ctb!=NULL) if (ctb->next!=NULL) {

 ctb=ctb->next

 strcpy(ifio.capt,ctb->fio)

 strcpy(iyy.capt,ctb->yy)

 strcpy(iaddr.capt,ctb->addr)

 strcpy(igrp.capt,ctb->grp)

 edwin->redr()

}

}

// Вниз - перемещение указателя и перерисовка полей редактирования

void down() {

if (ctb!=NULL) if (ctb->last!=NULL) {

 ctb=ctb->last

 strcpy(ifio.capt,ctb->fio)

 strcpy(iyy.capt,ctb->yy)

 strcpy(iaddr.capt,ctb->addr)

 strcpy(igrp.capt,ctb->grp)

 edwin->redr()

}

}

// Удаление

void fun_del() {

if (ctb!=NULL) {

 if (ctb->last==NULL) {

ndb=ctb->next

ctb->next->last=NULL

delete ctb

ctb=NULL

if (ndb==NULL) setfillstyle(3,4)

bar(0,0,639,479)

 } else {

ctb->last->next=ctb->next

ctb->next->last=ctb->last

delete ctb

ctb=NULL

 }

}

}

// Добавление

void fun_add() {

wind * act

act=edwin

One_Record * a

do {

 edwin->redr()

 act=(wind *) act->active()

 if (act==NULL) act=edwin

} while (!f_exit)

if (f_exit==2) {

 a=new One_Record(ifio.capt,iyy.capt,iaddr.capt,igrp.capt)

 if (ndb==NULL) ndb=a

else {

ndb->add(a)

if (ndb->last!=NULL) ndb=ndb->last

 }

}

f_exit=0

}

// Поиск

void find() {

act=edwin

if (ctb==NULL) return

do {

 edwin->redr()

 act=(wind *) act->active()

 if (act==NULL) act=edwin

} while (!f_exit)

if (f_exit==2) {

 sc_win a(10,100,500,300,ndb,ifio.capt,iyy.capt,iaddr.capt,igrp.capt)

 a.active()

}

f_exit=0

}

// Редактирование

void edit() {

act=edwin

if (ctb==NULL) return

do {

 edwin->redr()

 act=(wind *) act->active()

 if (act==NULL) act=edwin

} while (!f_exit)

if (f_exit==2) {

 strcpy(ctb->fio,ifio.capt)

 strcpy(ctb->yy,iyy.capt)

 strcpy(ctb->addr,iaddr.capt)

 strcpy(ctb->grp,igrp.capt)

}

f_exit=0

}

void about() {

cleardevice()

setfillstyle(6,5)

bar(0,0,639,479)

setfillstyle(1,0)

bar(100,100,539,379)

rectangle(100,100,539,379)

outtextxy(320,130," О ПРОГРАММЕ ")

getch()

setfillstyle(3,4)

bar(0,0,639,479)

}

// Основная программа

void main() {

int drv,mode

int handle

drv=DETECT

initgraph(&drv,&mode,"")

setfillstyle(3,4)

bar(0,0,639,479)

ed_win hlp(10,440,620,40,

 " Выбор пункта - TAB, Активизация - ENTER, Выход - ESC ",0)

hlp.setact(0)

// попытка считать базу данных

handle=open("base_o.dat",O_RDONLY|O_BINARY)

if (handle>=0) {

 ndb=new One_Record(handle,NULL)

}

// Добавление в списки соответствующих окон

wind * stwin

stwin=(wind *) new ed_win(10,50,590,20," Student database ",5)

stwin->setact(0)

stwin->add(&hlp)

stwin->add(&add_w)

stwin->add(&del_w)

stwin->add(&edt_w)

stwin->add(&fin_w)

stwin->add(&ext_w)

stwin->add(&abt_w)

stwin->add(&up_w)

stwin->add(&down_w)

act=stwin

edwin=(wind *) new bt_win(250,300,100,20," OK ",fun_exit)

edwin->add(&ifio)

edwin->add(&iyy)

edwin->add(&iaddr)

edwin->add(&igrp)

// Обработка событий

do {

// Проверка, чтобы указатель на текущий при непустом списке всегда

// показывал на один из элементов

 if (ctb==NULL) ctb=ndb

 if (ctb!=NULL) {

strcpy(ifio.capt,ctb->fio)

strcpy(iyy.capt,ctb->yy)

strcpy(iaddr.capt,ctb->addr)

strcpy(igrp.capt,ctb->grp)

edwin->redr()

 }

// Перерисовка

 stwin->redr()

// Активизация очередного окна

 act=(wind *) act->active()

 if (act==NULL) act=stwin

} while (!f_exit)

closegraph()

// Запись в файл или его удаление при пустой базе

if (ndb!=NULL) {

 handle=open("base_o.dat",O_WRONLY|O_TRUNC|O_CREAT|O_BINARY)

 if (handle>=0) {

while (ndb->last!=NULL) ndb=ndb->last

ndb->save(handle)

 } else perror(" Error: ")

} else {

 remove("base_o.dat")

}

close(handle)


Информация о работе «Разработать программу на алгоритмическом языке программирования С++ , реализующую учебную систему управления базой данных»
Раздел: Информатика, программирование
Количество знаков с пробелами: 19595
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
183471
45
12

... Java, JavaScript и встроенные в сервер средства LiveConnect. Более мощными реляционными возможностями доступа к базе данных и более эффективным выполнением виртуальной Java-машины будут расширены услуги разработки приложений, обеспечиваемых в Enterprise Server 2.0,. Сервис управления. В дополнение к использованию встроенной машины каталога LDAP Enterprise Server 2.0 будет управляем через общие ...

Скачать
122582
1
9

... в процессе обучения, необходима разработка совершенно новых подходов к работе с таким видом информационных ресурсов как базы данных. Глава 2.Технология использования баз данных математических задач в процессе подготовки учащихся к ЕГЭ по математике 2.1 Реализация модели В соответствии с теорией поэтапного формирования умственных действий учащихся, подготовку к сдаче единого ...

Скачать
16057
6
13

... При работе пользователя с базой данных над ее содержимым выполняются следующие основные операции: выбор, добавление, модификация (замена) и удаление данных. Целью данной курсовой работы является ЛИСП – реализация основных операций над базами данных. 1 Постановка задачи Требуется разработать программу, реализующую основные операции над базами данных: выбор, добавление, модификация и удаление ...

Скачать
235892
25
6

... работе в графическом режиме предназ­начается для обучения студентов младших курсов Санкт-Петербургской государственной Академии аэрокосмического приборостроения навыкам программирования, а именно работе в графическом режиме языка Turbo-Pascal . Для работы с настоящей программой необходимо знание стандарта языка, интегрированной среды и элементарным навыкам работы с персональным компьютером . ...

0 комментариев


Наверх