Применение инструментов WINAPI И Qt для разработки субд-приложений в современных операционных системах

Автор работы: Пользователь скрыл имя, 08 Декабря 2013 в 08:40, лабораторная работа

Описание работы

Вариант 9 (Худоногов А.Н.)
Разработать приложение для сопровождения базы данных Рецептов и Продуктов. База данных должна состоять из следующих таблиц.

Файлы: 1 файл

Операц.сит отчет 1.doc

— 64.00 Кб (Скачать файл)

Федеральное государственное образовательноеавтономного учреждение

Высшего профессионального образования

«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

Филиал федерального государственного автономного образовательного учреждения

Высшего профессионального образования

«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

В Железногорске кафедра АСОИУ

 

Лабораторная работа №1

на тему

ПРИМЕНЕНИЕ ИНСТРУМЕНТОВ WINAPI И Qt

ДЛЯ РАЗРАБОТКИ СУБД-ПРИЛОЖЕНИЙ В СОВРЕМЕННЫХ ОПЕРАЦИОННЫХ СИСТЕМАХ

 

 

 

 

 

 

 

 

Выполнил:

студент 2-го курса

группы ИТ 232Ж      

Худоногов А.Н

 

Проверил:

преподаватель кафедры     

АСОИУ

Вершинин А.В

 

 

 

 

 

 

 

 

Железногорск 2013

Теоретическое описание задачи

Вариант 9 (Худоногов  А.Н.)

Разработать приложение для сопровождения базы данных Рецептов и Продуктов. База данных должна состоять из следующих таблиц.

При разработке приложения необходимо обеспечить реализацию требований, описанных в разделе «Общие требования». В дополнение к общим требованиям, реализовать следующие запросы  на выбор данных:

 

1. Вывести список продуктов,  необходимых для приготовления рецепта «Х».

2. Определить, в каких  рецептах присутствует продукт  «Х». 

3. Вывести информацию  о рецепте, для которого требуется  наибольшее количество продукта  «Х». 

 

4.1 Создание MDI оболочки приложения. Определение  структур данных в соответствии с заданием

4.1.1 Создание MDI оболочки  приложения 

Перед созданием проекта, создайте каталог для будущего проекта. Рекомендуется организовать следующую  иерархию каталогов: «d:\Os\< Рецепт >\< Продукт >\< Рецепт_продукт >», где:

<Рецепт>

Название, описание, время приготовления, фото

<Продукт>

Наименование, единица измерения, цена за 1 ед, температура хранения

<Рецепт_продукт>

  Наименование, Название, кол-во продукта, способ использования




 
Выполните команду File – New File or Project. В появившемся окне “New” найдите группу “Project” и выберите “Application”, далее в центральной области окна выберите “Qt ui Application” и нажмите “Choose…”. В появившемся окне задайте название проекта и укажите каталог для сохранения, далее нажать “Next”.

На следующем этапе выберите (отметьте) конфигурацию сборки приложения “Desktop Qt 5.1.1 MinGW 32 bit” (необходимо чтобы  была отмечена только одна конфигурация из всех предложенных). Остальные этапы  оставляем без изменений и  создаем проект нажатием клавиши “Finish”.

Далее произведѐм изменение заголовка  приложения. В дереве проекта “Projects”  раскройте узел дерева “Forms”, и двойным  нажатием левой клавиши мыши выберите файл с расширением “ *.ui ” рисунок 4.1.

Рисунок 4.1 – Просмотр существующих форм приложения

В открывшемся редакторе форм найдите  окно свойств объекта (по умолчанию  это правый нижний угол редактора  форм). Для изменения свойств объекта  “mainwindow.ui”, в списке свойств объекта MainWindow найдите свойство “windowTitle”, введите  в нѐм имя Вашего приложения и нажмите Enter. Запустите приложение клавишей F5, либо нажатием на панели инструментов кнопки.

4.1.2 Определение структур данных 

В соответствии с пунктом 3 «Общих требований» необходимо определить структуры хранения данных таблиц. Описание структур данных необходимо производить в отдельном файле. Для этого выполните File – New File or Project. В появившемся окне “New” найдите группу “Files and Classes” и выберите “C++”, далее в центральной области окна выберите “C++ Header File” и нажмите “Choose…”. Задать имя файла “structdef” (описание структур) и нажать “Next” и “Finish”.

Описание структур данных в соответствии с заданием (файл “structdef.h”)

// Запрещает дублированное  подключение .h файла 

#pragma once

#include <string.h>

#include <QtCore/QDate>

#include <QtGui/QPixmap>

#include <QtCore/QString>

// Описание структр  для чтения из и записи в  файлы 

#pragma pack(1) // Включает однобайтовое  выравнивание структур в памяти 

namespace id

{

/*!

\struct TDiscipline

Структура TDiscipline содержит таблицу описания дисциплины

*/

struct TDiscipline

{

TDiscipline() { memset(this, 0x0, sizeof(id::TDiscipline)); }

unsigned int disciplineNum; // Номер дисциплины 

char caption[20]; // Название дисциплины 

char teacher[50]; // Преподаватель

unsigned char term; // Семестр

};

/*!

\struct TStudent

Структура TStudent содержит таблицу  с информацией о студенте

*/

struct TStudent

{

TStudent() { memset(this, 0x0, sizeof(TStudent)); }

char certificateNum[10]; // Номер студенческого билета

char name[50]; // ФИО

char groupNum[10]; // Номер группы

double birthdayDate; // Дата рождения

char address[20]; // Адрес

int photoLen; // Длина поля фото

};

/*!

\struct TDisciplineStudent

Структура TDisciplineStudent содержит таблицу с информацией об успеваемости Студента

*/

struct TDisciplineStudent

{

TDisciplineStudent() { memset(this, 0x0, sizeof(TDisciplineStudent)); }

unsigned int disciplineNum; // Номер дисциплины 

char certificateNum[10]; // Номер студенческого  билета 

unsigned char mark; // Оценка

};

}

#pragma pack() // Отключает выравнивание  структур 

// Описание структур для  ОСНОВНОЙ работы с данными  в памяти приложения 

class Discipline

{

public:

Discipline()

{

m_disciplineNum = 0;

m_term = 0;

}

inline unsigned int disciplineNum() const { return m_disciplineNum; }

inline void setDisciplineNum(const unsigned int &disciplineNum) { m_disciplineNum = disciplineNum; }

inline QString caption() const { return m_caption; }

inline void setCaption(const QString &caption) { m_caption = caption; }

inline QString teacher() const { return m_teacher; }

inline void setTeacher(const QString &teacher) { m_teacher = teacher; }

inline unsigned char term() const { return m_term; }

inline void setTerm(const unsigned char &term) { m_term = term; }

private:

unsigned int m_disciplineNum; // Номер дисциплины

QString m_caption; // Название дисциплины

QString m_teacher; // Преподаватель

unsigned char m_term; // Семестр

};

class Student

{

public:

Student() {}

inline QString certificateNum() const { return m_certificateNum; }

inline void setCertificateNum(const QString &certificateNum) { m_certificateNum = certificateNum;}

inline QString name() const { return m_name; }

inline void setName(const QString &name) { m_name = name; }

inline QString groupNum() const { return m_groupNum; }

inline void setGroupNum(const QString &groupNum) { m_groupNum = groupNum; }

inline QDate birthdayDate() const { return m_birthdayDate; }

inline void setBirthdayDate(const QDate &birthdayDate) { m_birthdayDate = birthdayDate; }

inline QString address() const { return m_address; }

inline void setAddress(const QString &address) { m_address = address; }

inline QPixmap photo() const { return m_photo; }

inline void setPhoto(const QString &photo) { m_photo = photo; }

private:

QString m_certificateNum; // Номер студенческого билета

QString m_name; // ФИО

QString m_groupNum; // Номер группы

QDate m_birthdayDate; // Дата рождения

QString m_address; // Адрес

QPixmap m_photo; // Фото - массив байт 

};

class DisciplineStudent

{

public:

DisciplineStudent()

{

m_disciplineNum = 0;

m_mark = 0;

}

inline unsigned int disciplineNum() const { return m_disciplineNum; }

inline void setDisciplineNum(const unsigned int &disciplineNum) { m_disciplineNum = disciplineNum; }

inline QString certificateNum() const { return m_certificateNum; }

inline void setCertificateNum(const QString &certificateNum) { m_certificateNum = certificateNum;}

inline unsigned char mark() const { return m_mark; }

inline void setMark(const unsigned char &mark) { m_mark = mark; }

private:

unsigned int m_disciplineNum; // Номер дисциплины

QString m_certificateNum; // Номер студенческого билета

unsigned char m_mark; // Оценка

};

Множество выше описанных структур следует логически  разбить на две подгруппы. Первая подгруппа - структуры, описанные в  блоке #pragma pack(1) – #pragma pack() и начинающихся с приставки «T», – предназначена  для записи и чтения данных из файлов формата “ *.tbl ” на жѐстком диске. Вторая подгруппа – тип определения данных (класс), начинающихся со строчного символа, – предназначена для работы с данными (строками таблиц), расположенными непосредственно в памяти приложения.

Для обеспечения читабельности  исходного кода необходимо также описать созданные классы и структуры в виде комментариев. Для этого необходимо создать файл “C++ Source File” выполнив команду меню File – New File or Project и выбрать соответствующий вид файла, нажать клавишу “Choose…”. Задать имя файла “structdef” и нажать “Next” и “Finish”.

Описание структур данных в соответствии с заданием (файл “structdef.cpp”)

#include "structdef.h"

/*!

\class id::Discipline

\brief Класс id::Discipline содрежит информацию о дисциплинах 

*/

/*!

\fn unsigned int id::Discipline::disciplineNum()

Возвращает идентификатор дисциплины

*/

/*!

\fn void id::Discipline::setDisciplineNum(const unsigned int &disciplineNum)

Устанавливает идентификатор дисциплины

*/

/*!

\fn QString id::Discipline::caption()

Возвращает название дисциплины

*/

/*!

\fn void id::Discipline::setCaption(const QString &caption)

Устанавливает название дисциплины

*/

/*!

\fn QString id::Discipline::teacher()

Возвращает фамилию преподавателя

*/

/*!

\fn void id::Discipline::setTeacher(const QString &teacher)

Устанавливает фамилию преподавателя

*/

/*!

\fn unsigned char id::Discipline::term()

Возвращает номер семестра

*/

/*!

\fn void id::Discipline::setTerm(const unsigned char &term)

Устанавливает номер семестра

*/

4.2 Добавление строк в таблицы, а также добавление фотографий

Действия, описанные в разделах 4.2.1 – Ошибка! Источник ссылки не найден., необходимо повторить для каждой отдельной создаваемой таблицы.

4.2.1 Создание диалога  для добавления строк в таблицы 

Согласно пункту 5 «Общих требований» операция добавления строк в таблицы, должна производиться в отдельном графическом окне. Для создания нового графического окна выполните File – New File or Project. В появившемся окне “New” найдите группу “Files and Classes” и выберите “Qt”, далее в центральной области окна выберите “Qt Designer Form Class” и нажмите “Choose…”. Далее выбрать тип формы “Dialog with Buttons Bottom”, ввести имя класса в поле “Class name”, например StudentDialog нажать “Next” и “Finish”.

Разместите необходимые графические элементы в редакторе формы “Qt Designer”, при этом не забывая присваивать осмысленные наименования объектам, например: объект для ввода номера студенческого билета – leCertificateNum, объект для ввода ФИО – leName и т.д. Примерный вид окна представлен на рисунке 4.2.


Информация о работе Применение инструментов WINAPI И Qt для разработки субд-приложений в современных операционных системах