9. Запуск на других компьютерах
Было проведено тестирование программы на различных компьютерах. Для этого была выбрана операционная система Windows 7. Так же к программе добавились файлы dll обеспечивающие запуск приложения на компьютерах, на которых не установлен Qt SDK.
10. Классы
Основным классом программы является класс CDbTable. Он представляет из себя виджет в котором находится специальный класс для отображения виджетов в виде вкладок QTabWidget. В каждой вкладке представлены экземпляры классов, которые отображают ту или иную таблицу.
В приложении представленно описание этих классов, т.е. листинг заголовочных файлов.
Каждый из этих классов используют специальные функции для работы с базой данных,все эти функции выведены в отдельный файл dbFunc.cpp. Листинг данных функций можно увидеть в приложении.
Вывод
С помощью данной выпускной работы я:
-
Изучил принципы создания информационных систем для сфер малого бизнеса
-
Научился создавать базы данных
-
Изучил язык запросов SQL
-
Научился пользоваться средой Qt Creator
-
Получил опыт разработки программного обеспечения для конкретного заказчика.
-
Научился пользоваться инструментарием для разработки программного обеспечения гибким методом.
Планируется в дальнейшем изучать более сложные информационные системы с базами данных. В планах изучение MS SQL Server.
Литература
-
С.М. Дудаков SQL учебное пособие
-
Гринберг, Пол CRM со скоростью света = CRM at speed of light. — СПб.: Символ Плюс, 2007
-
Agile Project Management with Scrum, Ken Schwaber, Microsoft Press, January 2004
-
Пол Уилтон, Джон Колби. Язык запросов SQL для начинающих / Пер. с англ. — М.: Диалектика, 2005
-
http://ru.wikipedia.org/[электронный ресурс]
-
Жасмин Бланшет, Марк Саммерфилд - Qt 4 Программирование GUI на С++ 2 издание [2008]
Приложение
Листинг файла cdbstudentswidget.h
#ifndef CDBSTUDENTSWIDGET_H
#define CDBSTUDENTSWIDGET_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "dbfunc.h"
namespace Ui {
class CDbStudentsWidget;
}
class CDbStudentsWidget : public QWidget
{
Q_OBJECT
public:
explicit CDbStudentsWidget(QWidget *parent = 0);
void insertrow(); // добавить строку в таблицу
void deleterow(); // Удалить строку
void updateActions();// cсохранить изменения в модели в таблицу БД
~CDbStudentsWidget();
public slots:
void currentchangerow(){updateActions();} // слот для измениния значений в таблице
void on_actioninsertRow_triggered(){insertrow();} //действие вставка строки
void on_actiondeleteRow_triggered(){deleterow();} //Действие удаление строки
void on_TabtotxtBTN_clicked(); // кнопка экспорта в текстовый файл
void on_TabtopdfBTN_clicked(); // кнопка экспрта в ПДФ файл
void on_TabtoxlsBTN_clicked(); // кнопка экспорта в файл MS EXCEL
private:
Ui::CDbStudentsWidget *ui;
QSqlTableModel *m_modelstud; // Модель для табличного представления
};
#endif // CDBSTUDENTSWIDGET_H
Листинг файла cdbtariffwidget.h:
#ifndef CDBTARIFFWIDGET_H
#define CDBTARIFFWIDGET_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "dbfunc.h"
namespace Ui {
class CDbTariffWidget;
}
class CDbTariffWidget : public QWidget
{
Q_OBJECT
public:
explicit CDbTariffWidget(QWidget *parent = 0);
void insertrow(); // добавить строку в таблицу
void deleterow(); // Удалить строку
void updateActions();// cсохранить изменения в модели в таблицу БД
~CDbTariffWidget();
public slots:
void currentchangerow(){updateActions();} // слот для измениния значений в таблице
void on_actionInsertRow_triggered(){insertrow();} //действие вставка строки
void on_actionDeleteRow_triggered(){deleterow();} //Действие удаление строки
private:
Ui::CDbTariffWidget *ui;
QSqlTableModel *m_modelTariff; // Модель для табличного представления
};
#endif // CDBTARIFFWIDGET_H
Листинг файла cdbpaymentswidget.h:
#ifndef CDBPAYMENTSWIDGET_H
#define CDBPAYMENTSWIDGET_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "dbfunc.h"
namespace Ui {
class CDbPaymentsWidget;
}
class CDbPaymentsWidget : public QWidget
{
Q_OBJECT
public:
explicit CDbPaymentsWidget(QWidget *parent = 0);
void insertrow(); // добавить строку в таблицу
void deleterow(); // Удалить строку
void updateActions();// cсохранить изменения в модели в таблицу БД
~CDbPaymentsWidget();
public slots:
void currentchangerow(){updateActions();} // слот для измениния значений в таблице
void on_actionInsertRow_triggered(){insertrow();} //действие вставка строки
void on_actionDeleteRow_triggered(){deleterow();} //Действие удаление строки
private:
Ui::CDbPaymentsWidget *ui;
QSqlTableModel *m_modelPayments; // Модель для табличного представления
};
#endif // CDBPAYMENTSWIDGET_H
Листинг файла studentcard.h:
#ifndef STUDENTCARD_H
#define STUDENTCARD_H
#include
#include
#include "dbfunc.h"
#include "ui_studentcard.h"
namespace Ui {
class StudentCard;
}
class StudentCard : public QWidget
{
Q_OBJECT
public:
explicit StudentCard(QWidget *parent = 0);
~StudentCard();
private slots:
void add_card();//добавление карточки
void delete_card();//удаление карточки
private:
Ui::StudentCard *ui;
int indx1, indx2;
QItemSelectionModel *selectionModel;
QDataWidgetMapper *mapper; // класс обеспечивает отображение модели данных на виджете.
};
#endif // STUDENTCARD_H
Листинг файла dbfunc.cpp:
#include "dbfunc.h"
bool dbconnection() // подключение к базеданных
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("../dbstudents.sqlite");
if(!db.open()){
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.\n\n"
"Click Cancel to exit."), QMessageBox::Cancel);
return false;
}
return true;
}
void initModelStud(QSqlTableModel *model) // создаем модель таблицы из БД в Qt
{
model->setTable("students");
model->setEditStrategy(QSqlTableModel::OnRowChange);
model->select();
model->setHeaderData(0, Qt::Horizontal,QObject::tr("id student"));
model->setHeaderData(1, Qt::Horizontal,QObject::tr("first name"));
model->setHeaderData(2, Qt::Horizontal,QObject::tr("middle name"));
model->setHeaderData(3, Qt::Horizontal,QObject::tr("last name"));
model->setHeaderData(4, Qt::Horizontal,QObject::tr("group"));
model->setHeaderData(5, Qt::Horizontal,QObject::tr("study"));
}
void initModelTariff(QSqlTableModel *model)
{
model->setTable("tariff");
model->setEditStrategy(QSqlTableModel::OnRowChange);
model->select();
model->setHeaderData(0,Qt::Horizontal,QObject::tr("group"));
model->setHeaderData(1,Qt::Horizontal,QObject::tr("tariff"));
}
void initModelPay(QSqlTableModel *model)
{
model->setTable("payments");
model->setEditStrategy(QSqlTableModel::OnRowChange);
model->select();
model->setHeaderData(0,Qt::Horizontal,QObject::tr("id student"));
model->setHeaderData(1,Qt::Horizontal,QObject::tr("date"));
model->setHeaderData(2,Qt::Horizontal,QObject::tr("cash"));
}
void setupRelModelStud(QSqlRelationalTableModel *model)
{
model->setTable("students");
model->setEditStrategy(QSqlTableModel::OnRowChange);
model->select();
}
void setUpMapper(QSqlRelationalTableModel *model, QDataWidgetMapper *mapper)
{
mapper->setModel(model);
}
void setUpDebtors(QSqlRelationalTableModel *model)
{
model->setTable("payments");
model->setEditStrategy(QSqlTableModel::OnRowChange);
model->setRelation(0,QSqlRelation("students","id_student","first_name"));
QDate cur_month = QDate::currentDate();
int month = cur_month.month();
int tax = month*10000;
QString la = QString::number(tax);
QString filt ="tariff.cash<";
filt.append(la);
model->setFilter("tariff.cash<10000");
model->select();
}
|