Автор работы: Пользователь скрыл имя, 27 Марта 2011 в 09:22, курсовая работа
Данная курсовая есть результат работы, выполненной в ходе изучения дисциплины “Базы данных”. В качестве задания необходимо создать программу, предназначенную для работы с базой данных, содержащей в себе информацию об учебных планах. На мой взгляд, были выполнены все требования и пожелания преподавателя касаемо функционирования и представления данных.
1.Введение………………………………………………………………………...3
2.Задача
a.Предметная область и ER-диаграмма……………….………………………………………………..4
b.Физическая модель данных (макеты таблиц)…………………………. 5
c.Список явных ограничений целостности……………………………………………………………….6
3.Описание приложения
a.Функции и процедуры, а так же связи.......………………………...……7
b.Классы, их методы и поля класса………………………………………25
4.Описание функционирования базы данных
a.Процедуры и функции по реализации ограничений целостности, включая SQL запросы……………………………………………….......28
b.SQL запросы по ведению электронного аналога документа…………………………………………………………….…..29
5.Описание экранных форм……………………………………………………...30
6.Руководство по эксплуатации………………………………………………....31
7.Заключение…………………………………………………………………..….32
8.Список литературы………………………………………………………..……33
9.Приложение……………………………………………………………….….…34
Класс add_disc (добавить дисциплину):
class add_disc : public QDialog {
Q_OBJECT
public:
add_disc(QWidget *parent = 0);
~add_disc();
protected:
void changeEvent(QEvent *e);
private:
Ui::add_disc *m_ui;
QSqlDatabase db;
QSqlTableModel *Disciplina;
private slots:
void add();
};
Класс add_nagruz(добавить связь Дисциплина-План):
class add_nagruz : public QDialog {
Q_OBJECT
public:
add_nagruz(QWidget *parent = 0);
~add_nagruz();
QSqlQueryModel model1,model2;
//QSqlTableModel *Prep_Plan;
protected:
void changeEvent(QEvent *e);
private:
Ui::add_nagruz *m_ui;
QSqlDatabase db;
QCheckBox *checkBox,*checkBox_2;
QTextEdit *textEdit,*textEdit_2;
QSqlTableModel *Prep_Plan,*tmp;
private slots:
void add1();
};
Класс add_prepod (Добавить преподавателя):
class add_prepod : public QDialog {
Q_OBJECT
public:
add_prepod(QWidget *parent = 0);
~add_prepod();
protected:
void changeEvent(QEvent *e);
private:
Ui::add_prepod *m_ui;
QSqlDatabase db;
QSqlTableModel *Prepodavatel;
private slots:
void add();
Класс dis_prep (добавить связь Дисциплина-Преподаватель):
class dis_prep : public QDialog {
Q_OBJECT
public:
dis_prep(QWidget *parent = 0);
~dis_prep();
QSqlQueryModel model1, model2, model3, model4 ;
protected:
void changeEvent(QEvent *e);
private:
Ui::dis_prep *m_ui;
QSqlDatabase db;
QSqlTableModel *Prepodavatel,*Disciplina,*
private slots:
void disc(); void prepod(); void disc_and_prepod(); void add3(); void del();
};
Класс izmenitnagr (Изменить связь Дисциплина-План):
class izmenitnagr : public QDialog {
Q_OBJECT
public:
izmenitnagr(QWidget *parent = 0);
~izmenitnagr();
QSqlQueryModel model1,model2;
protected:
void changeEvent(QEvent *e);
private:
Ui::izmenitnagr *m_ui;
QSqlDatabase db;
QCheckBox *checkBox,*checkBox_2;
QTextEdit *textEdit,*textEdit_2;
QSqlTableModel Disciplina,*Prep_Plan,*tmp;
private slots:
void add1();
};
При попытке
добавления дисциплины, уже имеющейся
в базе данных, или при изменении
названия существующей дисциплины на
уже имеющееся, выскакивает сообщение
о невозможности данного
SQL запросы по созданию таблиц:
CREATE TABLE Disciplina (ID_DISC INTEGER PRIMARY KEY, b_disc VARCHAR(20));
CREATE TABLE Student (ID_stud INTEGER PRIMARY KEY, b_stud VARCHAR(30), c_stud VARCHAR(5));
CREATE TABLE Prepodavatel (ID_PREP INTEGER PRIMARY KEY, b_prep VARCHAR(30));
CREATE TABLE Plan (ID_plan INTEGER PRIMARY KEY, b_plan VARCHAR(30), year_plan INTEGER, year_prod INTEGER);
CREATE TABLE Prep_Plan (ID_disc INTEGER, ID_plan INTEGER, kurs INTEGER, lec INTEGER, labs INTEGER, prakt INTEGER, zach INTEGER, exam INTEGER, PRIMARY KEY(ID_disc,ID_plan,kurs));
CREATE TABLE Inf_Stud (ID_stud INTEGER, ID_plan INTEGER, PRIMARY KEY(ID_stud));
CREATE TABLE Inf_Disc (ID_disc INTEGER, ID_prep INTEGER, PRIMARY KEY(ID_disc));
CREATE TABLE tmp (b_stud VARCHAR(30), year_plan INTEGER PRIMARY KEY);
В приложении пользователю предоставляется выбор, по какому студенту сформировать отчёт.
При генерации
отчёта выполняется запись выбранной
ФИО студента в таблицу tmp. После этого
вызывается отчёт, в котором с помощью
простого запроса отображается значение
полей, относящихся к выбранному студенту.
Такой метод позволяет изменять содержимое
отчёта в зависимости от конкретных требований.
Далее представлен листинг.
Листинг в eXaro:
SELECT
Disciplina.b_disc,Student.b_
Листинг в Qt:
QString k,y;
k=ui->comboBox_2->currentText(
QSqlQuery query;
query.exec("delete from tmp");
query.prepare("INSERT INTO tmp (b_stud, year_plan)"
"VALUES (:id1, :id2)");
query.bindValue(":id1",k);
query.bindValue(":id2",y);
query.exec();
В ходе
проделанной работы были получены навыки
программирования на QT, а также создания
простых приложений. Ознакомился с основными
запросами SQLite и принципами ведения простейшей
базы данных. Были получены навыки формирования
отчётов с помощью генератора EXARO. Результатом
работы явилось, функциональное и удобное
для пользователя приложение, которое
может использоваться для работы с учебными
планами.
Приложение 1
Приложение 2
Приложение 3
Приложение 4
Приложение 5
Приложение 6
Приложение 7
Приложение 8
Приложение 9