База данных
Пояснительная записка к курсовой работе
по дисциплине «Базы данных»
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО
ОБРАЗОВАНИЯ
ТИХООКЕАНСКИЙ
ГОСУДАРСТВЕННЫЙ
УНИВЕРСИТЕТ
Хабаровск 2010
| Выполнил: | Ермаков А.В. ВМ-81 |
| Проверил: | Федосеев А. А. |
Содержание
- Введение…………………………………………………………
……………...3 - Задача
- Предметная
область и ER-диаграмма……………….……………………………
…………………..4 - Физическая модель данных (макеты таблиц)…………………………. 5
- Список явных
ограничений целостности…………………………………………………
…………….6 - Описание приложения
- Функции и процедуры, а так же связи.......………………………...……7
- Классы, их методы и поля класса………………………………………25
- Описание функционирования базы данных
- Процедуры
и функции по реализации ограничений целостности,
включая SQL запросы……………………………………………….
......28 - SQL запросы
по ведению электронного аналога документа………………………………………………………
…….…..29 - Описание экранных форм……………………………………………………...30
- Руководство
по эксплуатации………………………………………………
....31 - Заключение……………………………………………………
……………..….32 - Список литературы……………………………………………………
…..……33 - Приложение……………………………………………………
………….….…34
Введение
Данная курсовая есть результат работы, выполненной в ходе изучения дисциплины “Базы данных”. В качестве задания необходимо создать программу, предназначенную для работы с базой данных, содержащей в себе информацию об учебных планах. На мой взгляд, были выполнены все требования и пожелания преподавателя касаемо функционирования и представления данных. Работа была сопряжена с «двигателем» базы данных SQLite, средой QT, и генератором отчётов eXaro. Были реализованы необходимые запросы для функционирования базы, а также реализована возможность отображения в отчёте только тех данных, которые попали в результат поиска, что значительно повышает ценность данного приложения.
Описание предметной области
Разработанное
приложение предназначено для ведения
базы данных, содержащей в себе информацию
об учебных планах. С помощью этого приложения
можно добавлять и удалять из базы дисциплины,
преподавателей, студентов и учебные планы,
диски, просматривать содержимое базы
данных и многое др. Выходным документом
является отчёт, который формируется в
зависимости от выбранного студента. База
отвечает на вопросы: какие дисциплины
будет вести преподаватель у студентов,
обучающихся по индивидуальному плану
в 2003 году? С какими студентами, обучающимися
по индивидуальному плану, предстоит работать
преподавателю по предмету «Компьютерная
графика»? Нужно ли проводить прием экзамена
по дисциплине «БД» у студента Сидорова
К.Н.? Сколько часов лаб.работ необходимо
провести со студентом Петровым В.С. по
дисциплине «БД»?
Объекты обладают следующими связями:
- Дисциплины
- Код дисциплины
- Название дисциплины
- Студенты
- Код студента
- Имя студента
- Форма обучения
- Год поступления
- Преподаватели
- Код преподавателя
- Имя преподавателя
- Учебные ланы
- Код плана
- Название плана
- Год утверждеиия
- Продолжительность обучения
- Студент-План
- Код студента
- Код плана
Студент
может иметь только один учебный план,
а план может иметь неограниченное количество
студентов.
Студент
Учебный план
Дисциплина-преподаватель
- Код предмета
- Код преподавателя
У дисциплины может быть только один преподаватель, а преподаватель может преподавать несколько дисциплин.
Дисциплина
Преподаватель
- Дисциплина-План
- Код дисциплины
- Код плана
- Курс
- Лекции
- Лаб.работы
- Практики
- Зачёт
- Экзамен
У учебного
плана может быть до шести
одинаковых дисциплин (в
Учебные планы
Дисциплины
Физическая модель данных (макеты таблиц)
Объекты обладают следующими связями:
- Дисциплины
| Disciplina | |
| Код | Название |
| ID_disc* | a_ disc |
| I | A(20) |
- Студенты
| Student | |||
| Код | ФИО | Форма обуч. | Год поступления |
| ID_stud* | a_stud | b_stud | year_stud |
| I | A(30) | A(5) | I |
- Преподаватели
| Prepodavatel | |
| Код | ФИО |
| ID_prep* | а_prep |
| I | A(30) |
- Учебные планы
| Plan | |||
| Код | Название | Год | Продолжит. обуч. |
| ID_plan* | b_plan | year_plan | prod_year |
| I | A(30) | I | I |
- Студент-План
| Inf_Stud | |
| Код студента | Код плана |
| ID_stud* | ID_plan |
| I | I |
- Дисциплина-Преподаватель
| Inf_Disc | |
| Код дисциплины | Код преподавателя |
| ID_disc * | ID_prep |
| I | I |
- Дисциплина-Преподаватель
| Inf_Plan | |||||||
| Код
дисциплины |
Код
плана |
Курс | Лекц. | Лаб. | Практ. | Зачёт | Экзамен |
| ID_disc * | ID_prep* | kurs | lec | labs | prakt | zach | exam |
| I | I | I | I | I | I | I | I |
список явных ограничений целостности
- Не может быть больше одной дисциплины с одинаковым названием.
- Не может быть двух и более одинаковых учебных планов.
- Не может быть удалён студент, для которого определён учебный план. При удалении студента необходимо удалять связанные поля в таблице «Студент-План».
- При удалении дисциплины необходимо удалять также связанные поля в таблице «Дисциплина-Преподаватель» и «Дисциплина-План».
- При удалении учебного плана необходимо также удалять связанные поля в таблице «Дисциплина-План» и «Студент-План».
- При удалении преподавателя необходимо также удалять связанные поля в таблице «Дисциплина-Преподаватель».
- Нельзя добавлять связи для несуществующих студентов, преподавателей, планов и дисциплин.
функции и процедуры
Основной
класс MainWindow отвечает за соединение с
базой данных, а также за правильное
отображение, редактирование и поиск
данных. Пять зависимых класса визуально
облегчают представление и редактирование
данных. Основной класс содержит главные
функции и процедуры для работы с базой.
Соединение с базой выполняется следующим образом:
db=QSqlDatabase::addDatabase("
db.setDatabaseName("baza.db ");
db.open();
Отображение таблиц:
//Вывод таблицы Disciplina
Disciplina=new QSqlTableModel(0,db);
Disciplina->setTable("
Disciplina->select();
Disciplina->setEditStrategy(
ui->disc_viev->setModel(
ui->disc_viev->
//Вывод таблицы Prepodavatel
Prepodavatel=new QSqlTableModel(0,db);
Prepodavatel->setTable("
Prepodavatel->select();
Prepodavatel->
ui->prep_viev->setModel(
ui->prep_viev->
//Вывод таблицы Student
Student=new QSqlTableModel(0,db);
Student->setTable("
Student->select();
Student->setEditStrategy(
ui->stud_viev->setModel(
ui->stud_viev->
//Вывод таблицы Plan
Plan=new QSqlTableModel(0,db);
Plan->setTable("Plan");
Plan->select();
Plan->setEditStrategy(
ui->plan_viev->setModel(
ui->plan_viev->
//Вывод таблицы Prep_Plan
Prep_Plan=new QSqlTableModel(0,db);
Prep_Plan->setTable("
Prep_Plan->select();
Prep_Plan->
//Вывод таблицы Inf_Stud
Inf_Stud=new QSqlTableModel(0,db);
Inf_Stud->setTable("Inf_
Inf_Stud->select();
Inf_Stud->
//Вывод таблицы Inf_Disc
Inf_Disc=new QSqlTableModel(0,db);
Inf_Disc->setTable("Inf_
Inf_Disc->select();
Inf_Disc->
model44.setQuery("SELECT
b_disc,b_prep FROM Prepodavatel, Disciplina, Inf_Disc WHERE Prepodavatel.ID_prep=Inf_Disc.
ui->tableView_2->
//Вывод таблицы отчёт
QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery("SELECT
b_disc,b_stud,c_stud,b_prep,b_
ui->tableView->setModel(
Отображение кнопок:
ui->add_new_stud->setEnabled(
ui->del_new_stud->setEnabled(
ui->add_nagr->setEnabled(
ui->ok_nagruz->setEnabled(
ui->del_nagruz->setEnabled(
ui->ok_nagruz->setEnabled(
Сигналы:
//Сигналы для вкладки "Дисциплины и Преподаватели"
QObject::connect(ui->add_
QObject::connect(ui->del_
QObject::connect(ui->ok_
QObject::connect(ui->
QObject::connect(ui->add_
QObject::connect(ui->del_
QObject::connect(ui->ok_
//Сигналы для вкладки "Студенты и Учебные планы"
QObject::connect(ui->add_
QObject::connect(ui->del_plan,
QObject::connect(ui->ok_plan,
QObject::connect(ui->can_plan,
QObject::connect(ui->add_stud,
QObject::connect(ui->del_stud,
QObject::connect(ui->ok_stud,
QObject::connect(ui->can_stud,
QObject::connect(ui->add_new_
QObject::connect(ui->del_new_
QObject::connect(ui->plan_
this,SLOT(plan_and_students())
QObject::connect(ui->add_nagr,
QObject::connect(ui->del_
QObject::connect(ui->ok_
QObject::connect(ui->stud_
QObject::connect(ui->listView,
QObject::connect(ui->nagruz_
ui->add_new_stud->setEnabled(
ui->del_new_stud->setEnabled(
ui->add_nagr->setEnabled(
ui->ok_nagruz->setEnabled(
ui->del_nagruz->setEnabled(
ui->ok_nagruz->setEnabled(
//Сигналы для вкладки "Отчёт"
QObject::connect(ui->
QObject::connect(ui->
ComboBox для вкладки "Отчёт":
QSqlQuery q("select distinct b_stud from Student");
int i=0;
QString str;
while(q.next())
{
str=q.value(0).toString();
ui->comboBox_2->addItem(str,i)
i++;
}
Добавить запись:
//Описание функции кнопки Добавить
void MainWindow::add_dis()
{
add_disc form;
form.exec();
Disciplina->select();
}
void MainWindow::add_prep()
{
add_prepod form;
form.exec();
Prepodavatel->select();
}
void MainWindow::add_plan()
{
Plan->insertRecord(-1,
}
void MainWindow::add_stud()
{
Student->insertRecord(-1,
}
void MainWindow::add_nagr()
{
Prep_Plan->insertRecord(-1,
add_nagruz form;
form.exec();
Prep_Plan->select();
int a=ui->plan_viev->currentIndex(
QSqlRecord record1=Plan->record(a);
model1.setQuery(tr("SELECT
b_disc,kurs,lec,labs,prakt,
ui->nagruz_viev_2->setModel(&
}
void MainWindow::add_new_stud()
{
int a=ui->plan_viev->currentIndex(
QSqlRecord record1=Plan->record(a);
int n=ui->stud_viev->currentIndex(
QSqlRecord record2=Student->record(n);
int str=record1.value("ID_plan").
int str1=record2.value("ID_stud").
QSqlQuery query;
query.prepare("INSERT INTO Inf_Stud (ID_stud, ID_plan)"
"VALUES (:id1, :id2)");
query.bindValue(":id1",str1);
query.bindValue(":id2",str);
query.exec();
model11.setQuery(tr("SELECT
b_stud FROM Student, Inf_Stud, Plan WHERE (Student.ID_stud=Inf_Stud.ID_
ui->listView->setModel(&
Inf_Stud->submitAll();
ui->add_new_stud->setEnabled(
}
Удалить запись:
void MainWindow::del_dis()
{
int a=ui->disc_viev->currentIndex(
QSqlRecord record1=Disciplina->record(a);
bool k=false,l=false;
for(int i=0;i<Prep_Plan->rowCount();i+
{
QSqlRecord record2=Prep_Plan->record(i);
if(record1.value("ID_disc").
k=true;
}
for(int i=0;i<Inf_Disc->rowCount();i++
{
QSqlRecord record2=Inf_Disc->record(i);
if(record1.value("ID_disc").
l=true;
}
if (k==false&&l==false)
{
Disciplina->removeRow(a);
Disciplina->submitAll();
}
else
{
int r = QMessageBox::question(this, tr("DELETE DISCIPLINE"),
tr("Delete \"%1\" and its links?")
.arg(record1.value("b_disc").
QMessageBox::Yes | QMessageBox::Default,
QMessageBox::No | QMessageBox::Escape);
if (r == QMessageBox::No)
return;
else
{
for(int i=0;i<Prep_Plan->rowCount();i+
{
QSqlRecord record2=Prep_Plan->record(i);
if(record1.value("ID_disc").
{
Prep_Plan->removeRow(i);
Prep_Plan->submitAll();
}
}
for(int i=0;i<Inf_Disc->rowCount();i++
{
QSqlRecord record2=Inf_Disc->record(i);
if(record1.value("ID_disc").
{
Inf_Disc->removeRow(i);
Inf_Disc->submitAll();
}

- База данных
- База данных
- База данных
- База данных
- База данных
- База данных
- База данных
- Бағыт бойынша туынды. Градиент
- Бады для похудения из лекарственных растений
- База водителей автобусов
- База даних підприємства LADA-сервіс
- База даних станції технічного обслуговування автомобілів «Garage Inc.»
- База даних Шкільна канцелярія
- База данных