45833 (Разработать программу на алгоритмическом языке программирования С++ , реализующую учебную систему управления базой данных)

2016-07-31СтудИзба

Описание файла

Документ из архива "Разработать программу на алгоритмическом языке программирования С++ , реализующую учебную систему управления базой данных", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "45833"

Текст из документа "45833"

Разработать программу на алгоритмическом языке программирования С++ , реализующую учебную систему управления базой данных (СУБД).

Отчёт к работе по курсу "Системное программирование"

Разработал: Чепасов И.А.

Пензенский Государственный Технический Университет, Кафедра: "Информационно-вычислительные системы"

1998

1 Формулировка задачи

Разработать программу на алгоритмическом языке программирования С++ , реализующую учебную систему управления базой данных (СУБД).

2 Техническое задание

2.1 Основание для разработки

Основанием для разработки служит задание по дисциплине "Системное программирование", выданное на кафедре ИВС ПГТУ.

2.2 Требования к программе

2.2.1 Требования к функциональным характеистикам

Программа должна выполнять операции ввода , хранения , редактирования , удаления и поиска информации о студентах , хранящейся в базе данных.

Информация о студентах должна содержать следующие данные:

ФИО

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

Адрес

Учебная группа.

Входными данными программы являеются: исходная база данных , которая хранится на диске под именем base_o.dat и данные , вводимые или изменяемые пользователем в процессе работы программы.

Выходными данными в программе является база данных , которая записывается на диск под именем base_o.dat по завершении работы программы.

2.2.2 Требования к составу и параметрам технических средств

Программа должна работать на стандартном комплексе технических средств из состава персональных компьютеров IBM PC с процессором i386 или выше.

2.2.3 Требования к программной и информационной совместимости

Программа должна работать с операционной системой MS-DOS 6.0 или выше.

Программа должна быть написана на языке программирования С++l v.3.1.

2.3 Порядок контроля и приёмки

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

3 Проектирование

Проектирование производится отдельно для части программы, организующей работу с базой данных, и для интерфейсной части программы, поскольку каждая из этих частей может быть использована отдельно. Фактически каждая часть программы строится на основе разных объектов. Основой интерфейса является абстрактный класс wind, потомками которого являются собственно элементы интерфейса, а база данных основана на классе One_Record, выполняющем основные функции работы с базами данных.

Интерфейсная часть программы основана на абстрактном классе wind, содержащем общие для всех окон данные, такие как расположение, размер и цвет окон, и виртуальные методы, такие как перерисовка, активизация. На основе этого класса создаются все остальные классы, перекрывающие виртуальные методы конкретно для данного типа визуальных объектов. Создается цепочка окон, адресуемая через её первый элемент. При запуске метода redr первого элемента он должен обеспечить перерисовку вех последующих путем вызова того же метода всех остальных объектов, поскольку в цепочку могут быть соединены любые классы на основе wind. При нажатии TAB активным становится следующий в цепочке элемент.

Конкретно кажждый класс содержит следующие поля и методы:

Класс wind - абстрактный класс, при использовании выдает рамку

Поля:

x,y,dx,dy - расположение и размеры окна

pap,ink,apap - цвета окна

ts - возможность активизации

next - указатель на следующее окно.

Методы:

add - добавление нового окна в список.

Класс ed_win - класс строк редактирования, при ts=0 используется как строка вывода без возможности редактирования.

Собственные поля:

capt - содержимое

pcapt - старое содержимое

maxlen - максимальная длина строки.

Виртуальные методы:

redr, active.

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

Собственные поля:

fun - указатель на вызываемую при активизации функцию

capt - содержимое кнопки.

Виртуальные методы:

redr, active.

Класс sc_win - класс скроллеров, зависит от конкретного применения

Собственные поля:

m_fio, m_addr, m_yy, m_grp - маски полей класса One_Record

pnt - первый элемент списка.

Виртуальные методы:

redr, active.

База данных представлена классом One_Record, содержащим все необходимые поля данных и методы. Для организации базы используются указатели на начальный и на текущий элементы базы.

Поля класса:

fio, yy, addr, grp - данные о студенте

next - следующий элемент

last - предыдущий элемент.

Методы класса:

save - запись в файл текущего и всех последующих элементов

FindUp - поиск вверх по списку

FindDown - поиск вниз по списку.

Эти методы возвращают указатель на найденый элемент списка:

add - добавление элемента в список.

Для уничтожения элемента используется деструктор, причем этот деструктор уничтожает все последующие элементы. Для инициализации существует два вида конструкторов - инициализация загрузкой из файла и непосредственным указанием всех полей нового элемента. Второй способ используется только при пустой базе данных и используется функцией add внутри класса.

При проектировании программы создаются два списка окон - один для главного меню, другой для подменю ввода и редактирования. Все основное меню состоит из объектов класса кнопок, для каждой из которых пишется своя функция - обработчик события. Организуется цикл перерисовка -> активизация -> проверка флага выхода.

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

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

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

Заключение

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

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

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

#include

#include

#include

#include

#include

#include

#include

#include

#include

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

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

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)

for (n=0

n

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

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее