- •Содержание
- •Введение
- •Реферат
- •Р еферат
- •Постановка задачи и анализ предметной области
- •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.1. Структура приложения и его основных частей.
Приложение состоит из семи частей, каждая из которых состоит из подчастей.
Авторизация.
Состоит из полей ввода логина и пароля и кнопки авторизации.
2. Форма гостя.
Включает кнопки вывода информации о работниках и палатах.
Форма работника.
Состоит из полей ввода данных о пациенте, а также кнопки вывода информации о них.
Форма заведующего палатой.
Включает в себя поля ввода информации о новой заявке на склад, а также кнопки вывода информации о работниках, заявках, палатах, материалов и препаратов со складов.
Форма заведующего отделом кадров.
Состоит из полей ввода информации о новом сотруднике, формы поиска сотрудников по их квалификации и по их должности.
Форма заведующего.
Состоит из формы регистрации нового амбулаторного пациента, формы назначения медикаментов пациенту, формы поиска пациентов в палате, формы поиска пациентов в очереди к палате, формы показа отчёта о медикаментах, назначенных пациенту, а также вывода отчёта всех заявок, а также заявок в конкретную палату.
Форма главврача
Состоит из формы регистрации нового амбулаторного пациента, просмотра всех амбулаторных пациентов, формы поиска пациентов в палате, формы поиска пациентов в очереди к палате, вывода отчёта всех заявок, а также формы регистрации и вывода отчёта о поставщиках.
4.2. Входные и выходные потоки данных.
Входные данные передаются в запросы через элементы типа «Label» через функцию text(). Пример – запрос ввода в таблицу Supplier.
#define QUERY_26 "INSERT INTO \"Supplier\""\
"VALUES (:X1, :X2, :X3, :X4, :X5)"
int MainWindow::checkQuery(QSqlQuery query) {
if (!query.exec()) return -1;
return 0;
}
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::doQuery1(QSqlQuery query) {
query.exec();
}
void MainWindow::on_pushButton_30_clicked()
{
int result = checkQuery(this->createQuery1(ui->lineEdit_85->text(), ui->lineEdit_86->text(), ui->lineEdit_87->text(), ui->lineEdit_88->text(), ui->lineEdit_89->text(), QUERY_26));
if (result==-1) this->setStatus(ERROR_GETDATA,true);
else{
this->setStatus(ACCEPT_DATA,false);
this->doQuery1(this->createQuery1(ui->lineEdit_85->text(), ui->lineEdit_86->text(), ui->lineEdit_87->text(), ui->lineEdit_88->text(), ui->lineEdit_89->text(), QUERY_26));
}
}
Вывод информации производится через элемент Table. Пример – вывод информации о работниках.
#define QUERY_1 "SELECT \"Personnel\".\"FIO\",\"Personnel\".\"Number_phone\", \"Chamber\".\"Number_ch\", \"Chamber\".\"Name_ch\", \"Chamber\".\"Block\", \"Post\".\"Post_name\""\
"FROM \"Personnel\", \"Post\", \"Chamber\""\
"WHERE \"Personnel\".\"Id_post\"=\"Post\".\"Id_post\""\
"AND \"Personnel\".\"Id_chamber\"=\"Chamber\".\"Id_chamber\""\
"ORDER BY \"Personnel\".\"FIO\""
QSqlQuery MainWindow::createQuery(QString param) {
QSqlQuery query;
query.prepare(param);
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);
}
void MainWindow::on_pushButton_2_clicked()
{
QString ccQuery = QUERY_1;
int result = this->checkQuery(createQuery(ccQuery));
this->clearTables();
if (result==-1) this->setStatus(ERROR_GETDATA,true);
else {
this->setStatus(ACCEPT_DATA,false);
this->doQuery(createQuery(ccQuery),ui->tableWidget);
}
}