- •Содержание
- •Введение
- •Реферат
- •Р еферат
- •Постановка задачи и анализ предметной области
- •1.1 Цель создания системы бд.
- •1.2 Функциональный анализ предметной области.
- •1.3 Пользовательские представления о предметной области.
- •Проектирование базы данных
- •2.1 Концептуальная модель
- •2.1.1 Типы сущностей
- •2.1.2 Типы связей
- •2.1.3 Атрибуты и их домены
- •2.1.4 Локальные концептуальные модели пользователей
- •2.1.5 Диаграмма глобальной концептуальной модели
- •2.2 Логическая модель
- •2.2.1 Отношения
- •2.2.2 Ограничения целостности
- •2.2.3 Представления
- •2.3 Физическая модель
- •2.3.1 Анализ транзакций
- •2.3.2 Файловая структура отношений
- •2.3.3 Индексы
- •2.3.4 Средства защиты
- •3. Проектирование пользовательского интерфейса
- •3.1 Архитектура пользовательского интерфейса
- •3.2 Формы ввода/вывода
- •3.3 Запросы и отчеты
- •Проектирование програмного обеспечения
- •4.1. Структура приложения и его основных частей.
- •4.2. Входные и выходные потоки данных.
- •4.3. Описание взаимодействия серверной и клиентской части программного комплекса
- •4.4. Инструментальная среда разработки и язык(и) программирования
- •4.5. Организация доступа к данным
- •Список использованнных источников
4.3. Описание взаимодействия серверной и клиентской части программного комплекса
Чтобы программа могла обращаться к базе данных, необходимо установить между ними соединение. В программе эту функцию выполняет метод CreateConnection.
bool MainWindow::createConnection() {
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("PostgreSQL35W");
db.setHostName("localhost");
db.setUserName("postgres");
db.setPassword("7531280");
if (!db.open())
{
return false;
}
return true;
}
Далее создаётся параметризированный или непараметризированный запрос. Параметры передаются через интерфейс.
//непараметризированный запрос
QSqlQuery MainWindow::createQuery(QString param) {
QSqlQuery query;
query.prepare(param);
return query;
}
//параметризированный запрос
QSqlQuery MainWindow::createQuery1(QString param1, QString param2, QString param3, QString param4, QString param5, QString qtext) {
QSqlQuery query;
query.prepare(qtext);
query.bindValue(":X1", param1);
query.bindValue(":X2", param2);
query.bindValue(":X3", param3);
query.bindValue(":X4", param4);
query.bindValue(":X5", param5);
return query;
}
После этого запрос отправляется на выполнение, и, если необходимо, результат выводится в таблицу.
void MainWindow::doQuery(QSqlQuery query, QTableWidget *table) {
query.exec();
QSqlRecord rec = query.record();
QTableWidgetItem *buf;
int rows = 0;
table->setRowCount(rows);
table->setColumnCount(rec.count());
for (int col=0; col<rec.count(); col++) {
buf = new QTableWidgetItem;
buf->setText(rec.fieldName(col));
table->setHorizontalHeaderItem(col,buf);
}
while (query.next())
{
int i=0;
table->setRowCount(rows+1);
table->setRowHeight(rows,20);
while (query.value(i).isValid())
{
buf = new QTableWidgetItem;
buf->setText(query.value(i).toString());
table->setItem(rows,i,buf);
i++;
}
rows++;
}
this->resizeTable(table);
}
4.4. Инструментальная среда разработки и язык(и) программирования
Инструментальной средой разработки был выбран Qt Creator — свободная интегрированная среда разработки модульных кроссплатформенных приложений.
Qt Creator (ранее известная под кодовым названием Greenhouse) — кроссплатформенная свободная IDE для работы с фреймворком Qt, разработанная Trolltech (Nokia).
Языком разработки выбран C++. С++ поддерживает такие парадигмы программирования как процедурное программирование, модульность, раздельная компиляция, обработка исключений, абстракция данных, типы (объекты), виртуальные функции, объектно-ориентированное программирование, обобщенное программирование, контейнеры и алгоритмы, сочетает свойства как высокоуровневых, так и низкоуровневых языков.
4.5. Организация доступа к данным
Доступ к данным получают только зарегистрированные в системе пользователи. Метод, обеспечивающий авторизацию:
void MainWindow::on_pushButton_clicked()
{
QString str1;
QString str2;
str1=ui->lineEdit->text();
str2=ui->lineEdit_2->text();
if ((str1=="1")&&(str2=="1")){
ui->tab_1->setEnabled(true);
ui->tab_2->setEnabled(false);
ui->tab_3->setEnabled(false);
ui->tab_4->setEnabled(false);
ui->tab_5->setEnabled(false);
ui->tab_6->setEnabled(false);
}
if ((str1=="2")&&(str2=="2")){
ui->tab_1->setEnabled(false);
ui->tab_2->setEnabled(true);
ui->tab_3->setEnabled(false);
ui->tab_4->setEnabled(false);
ui->tab_5->setEnabled(false);
ui->tab_6->setEnabled(false);
}
if ((str1=="3")&&(str2=="3")){
ui->tab_1->setEnabled(false);
ui->tab_2->setEnabled(false);
ui->tab_3->setEnabled(true);
ui->tab_4->setEnabled(false);
ui->tab_5->setEnabled(false);
ui->tab_6->setEnabled(false);
}
if ((str1=="4")&&(str2=="4")){
ui->tab_1->setEnabled(false);
ui->tab_2->setEnabled(false);
ui->tab_3->setEnabled(false);
ui->tab_4->setEnabled(true);
ui->tab_5->setEnabled(false);
ui->tab_6->setEnabled(false);
}
if ((str1=="5")&&(str2=="5")){
ui->tab_1->setEnabled(false);
ui->tab_2->setEnabled(false);
ui->tab_3->setEnabled(false);
ui->tab_4->setEnabled(false);
ui->tab_5->setEnabled(true);
ui->tab_6->setEnabled(false);
}
if ((str1=="6")&&(str2=="6")){
ui->tab_1->setEnabled(false);
ui->tab_2->setEnabled(false);
ui->tab_3->setEnabled(false);
ui->tab_4->setEnabled(false);
ui->tab_5->setEnabled(false);
ui->tab_6->setEnabled(true);
}
}
Пользователи:
- гость
- работник
- заведующий по палате
- начальник отдела кадров
- заведующий
-главврач.
ВЫВОДЫ
Результатом проектирования данной БД стало создание достаточно функционального и гибкого в отношении последующего усовершенствования и адаптации к конкретным специфическим запросам конечного пользователя программного продукта. Данное приложение не претендует на абсолютное совершенство в своей сфере; оно лишь реализовывает базовые требования. В результате выполнения данного курсового проекта были реализованы все требования, изложенные в задании, в результате чего появилось работоспособное корпоративное приложение не требующие больших ресурсов.
В качестве одного из путей дальнейшего усовершенствования приложения можно назвать усовершенствование графического интерфейса пользователя, организацию обслуживания расширенных запросов на поиск и статистическую обработку данных и тому подобное. Это позволит применять данное приложение для решения еще более широкого класса задач управления данными.