База данных
Автор работы: Пользователь скрыл имя, 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
Файлы: 1 файл
Курсовая работа.docx
— 546.75 Кб (Скачать файл)Класс 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 запросы
- Не может быть больше одной дисциплины с одинаковым названием.
При попытке
добавления дисциплины, уже имеющейся
в базе данных, или при изменении
названия существующей дисциплины на
уже имеющееся, выскакивает сообщение
о невозможности данного
- Не может быть двух и более одинаковых учебных планов. При попытке добавления учебного плана, уже имеющейся в базе данных, или при изменении существующего плана на уже имеющееся, выскакивает сообщение о невозможности данного действия. Листинг представлен на странице 15.
- Не может быть удалён студент, для которого определён учебный план. При удалении студента необходимо удалять связанные поля в таблице «Студент-План». При удалении студента, имеющего связи с планами, выскакивает диалог об удалении связей. При нажатии «ДА» удаляются студент и его связи. Листинг представлен на странице 13.
- При удалении дисциплины необходимо удалять также связанные поля в таблице «Дисциплина-Преподаватель» и «Дисциплина-План. При удалении дисциплины, имеющей связи, выскакивает диалог об удалении связей. При нажатии «ДА» удаляется дисциплина и её связи. Листинг представлен на странице 10.
- При удалении учебного плана необходимо также удалять связанные поля в таблице «Дисциплина-План» и «Студент-План». При удалении плана, имеющего связи, выскакивает диалог об удалении связей. При нажатии «ДА» удаляется план и его связи. Листинг представлен на странице 12.
- При удалении преподавателя необходимо также удалять связанные поля в таблице «Дисциплина-Преподаватель». При удалении преподавателя, имеющего связи, выскакивает диалог об удалении связей. При нажатии «ДА» удаляется преподаватель и его связи. Листинг представлен на странице 11.
- Нельзя добавлять связи для несуществующих студентов, преподавателей, планов и дисциплин. Это ОЦ реализовано с помощью ограничения пользователя в выборе параметров только из справочников.
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);
SQL запросы по ведению электронного аналога документа
В приложении пользователю предоставляется выбор, по какому студенту сформировать отчёт.
При генерации
отчёта выполняется запись выбранной
ФИО студента в таблицу 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();
Описание экранных форм
- В первой,
второй, третьей и четвёртой экранной
форме добавляются и
редактируются дисциплины и преподаватели, при этом не может быть добавлены дисциплины с одинаковыми названиями. Также из формы 1 может быть вызвана форма удаления/добавления связи Дисциплина-Преподаватель, при этом нельзя добавить существующую связь (см. приложение 1,2,3,4). При удалении дисциплины или преподавателя, имеющих связи, появляются диалоги (приложение 5). При добавлении существующей связи Дисциплина-Преподаватель появляется диалог (приложение 6). - Во пятой форме добавляются учебные планы и студенты, при этом нельзя добавить два и более одинаковых плана (приложение 7). При удалении связанных объектов выскакивает диалог подобный приложению 5. Также здесь отображается список студентов, учащихся по выбранному плану, и нагрузка по предметам на этот план. Ограничение целостности на удаление/добавление студента в таблицу связи Студент-План осуществляется путём разрешения/запрещения пользователю нажимать соответствующие кнопки. Из этой формы можно вызвать формы добавления нового учебного плана нажатием кнопки «Новый план» (приложение 8) и изменения существующего нажатием кнопки «Изменить» (приложение 9).
- В следующей экранной форме отображается вся база данных целиком и здесь же можно выбрать критерий формирования отчёта и получить его в виде, удобном для просмотра и печати (приложение 10).
- При нажатии на кнопку «Сгенерировать отчёт» выводится отчёт по выбранному студенту в виде, удобном для сохранения, печати и просмотра (приложение 11).
Руководство по эксплуатации
- При внесении информации в приложение используются 7 таблиц: дисциплины, преподаватели, учебные планы, студенты, связь дисциплина-преподаватель, связь студент-план, связь дисциплина-план.
- При внесении информации в таблицу «Дисциплины» необходимо учитывать то, что название дисциплины не может повторяться. А при удалении происходит удаление не только самих дисциплин, но и всех их связей». То же самое относится и к таблицам «Студенты», «Преподаватели», «Учебные планы».
- Для добавления связи дисциплина-преподаватель необходимо нажать кнопку «Дисциплина-Преподаватель» во вкладке главного окна «Дисциплины и преподаватели». В появившемся окне (приложение 4) необходимо выбрать дисциплину и преподавателя из соответствующих списков, после чего станет активной кнопка «Добавить». Для удаления нужно выбрать удаляемую строку и нажать на кнопку «Удалить».
- При добавлении записей в таблицы связей нет необходимости следить, чтобы не добавить запись для несуществующих объектов, т.к. выбор добавляемых объектов осуществляется только из описанных в справочниках. При удалении связи важно помнить, что разрывается связь между дисциплинами, преподавателями, студентами или планами.
- Для того чтобы добавлять записи в таблицы связь студент-план и связь дисциплина-план, необходимо выбрать учебный план, с которым будет производиться дальнейшая работа. После данного действия в соответствующих окнах отобразится вся информация по этому плану, а именно список студентов и нагрузка. Чтобы внести изменения в нагрузку учебного плана, необходимо сначала выбрать план, затем выбрать предмет, для которого нужно изменить нагрузку. После этого кнопка «Изменить» станет активной.
- Кнопка «Добавить студента» в таблицу связи «студент-план» (зелёная стрелка, направленная влево) активна только если выделен учебный план, добавляемый студент и если для этого студента ещё не назначено плана. Кнопка «Удалить студента» из таблицы связи «студент-план» (зелёная стрелка, направленная вправо) доступна если выбрать учебный план и студента, который к нему относится.
- Таблица «Отчёт» дана для учёта данных, в ней невозможно изменять информацию. В приложении, также реализована возможность выбора студента для формирования отчёта. Кнопка «обновить» служит для обновления таблицы после внесения изменений в базу данных. Кнопка «генерировать отчёт» предназначена для формирования отчёта в зависимости от выбранного студента.
Заключение
В ходе
проделанной работы были получены навыки
программирования на QT, а также создания
простых приложений. Ознакомился с основными
запросами SQLite и принципами ведения простейшей
базы данных. Были получены навыки формирования
отчётов с помощью генератора EXARO. Результатом
работы явилось, функциональное и удобное
для пользователя приложение, которое
может использоваться для работы с учебными
планами.
Список использованной литературы
- Qt4. Профессиональное программирование на C++. – СПб.: БХВ-Петербург, 2007. – 880 с: ил.+ CD-ROM – (В подлиннике)
- Введение в системы баз данных, 7-е издание. : Пер. с англ. – М. : Издательский дом “Вильямс”, 2001. – 1072 с. : ил. – Парал. тит. англ.
- Qt4. Программирование GUI на С++.:Ж.Бланшет, М.Саммерфилд.: КУДИЦ-ПРЕСС Москва, 2007. – 641с
Приложение
Приложение 1
Приложение 2
Приложение 3
Приложение 4
Приложение 5
Приложение 6
Приложение 7
Приложение 8
Приложение 9