logo
Разработка Windows приложения определения гороскопа по дате рождения

Заключение

Разработанная программа в рамках курсовой работы позволяет быстро получить гороскоп по выбранной дате. В процессе разработки были улучшены навыки работы со слотами, указателями, и классами.

Программа реализована на языке C++ в программной оболочке QtCreator 2.7.1. Изучение данного языка освоено на уровне, позволяющем справиться с данной задачей

Список литературы

1. Страуструп, Б. «Язык программирования C++» Москва: Бином, 2011г Шлее, М. «Qt 4.5. Профессиональное программирование на C++», Санкт-Петербург: БХВ-Петербург, 2009 г.

2. Характеристика знаков зодиака [Электронный ресурс], 2007. - Режим доступа: http://www.astrotime.ru/zodiak.html, свободный.

3. Знаки зодиака и гороскоп на английском языке [Электронный ресурс], 2005. - Режим доступа: http://www.homeenglish.ru/OtherGoroscop.htm, свободный.

4. Работа с файлами. Класс QFile [Электронный ресурс], 2011. - Режим доступа: http://www.homeenglish.ru/OtherGoroscop.htm, свободный.

5. Вронский, С. «Классическая Астрология. Введение в астрологию» - Москва: ВШКА, 2003 г.

Приложение 1. Результат работы программы

После запуска можно увидеть основное окно программы. В ней нужно выбрать желаемую дату и нажать кнопку «Получить».

В результате чего, получим нужный гороскоп по выбранной дате, в специальном окне.

Для редактирования гороскопа следует выбрать в «Меню» пункт «Редактировать гороскоп», либо нажать клавиши «Ctrl» + «E».

Откроется окно редактирования, где нужно нажать на кнопку «Открыть файл»

После чего выбрать нужный файл из списка и нажать «Открыть».

В окне редактирования изменить текущий текст на нужный.

Нажав кнопку «Сохранить» приложение сохранит новый гороскоп.

После чего можно продолжить работу с программой.

Приложение 2. Листинг программы

Файл dialog.h

#ifndef DIALOG_H

#define DIALOG_H

#include <QDialog>

namespace Ui {

class Dialog;

}

class Dialog : public QDialog

{

Q_OBJECT

QString fileName;

public:

explicit Dialog(QWidget *parent = 0);

~Dialog();

private slots:

void on_pushButton_clicked();

void on_pushButton_2_clicked();

private:

Ui::Dialog *ui;

};

#endif // DIALOG_H

Файл mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {

class MainWindow;

}

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

public:

QString what_sign(int day, int month);

QString name_sign(int day, int month);

private slots:

void on_pushButton_clicked();

void on_actionEdit_triggered();

private:

Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

Файл dialog.cpp

#include "dialog.h"

#include "ui_dialog.h"

#include <QtGui>

Dialog::Dialog(QWidget *parent) :

QDialog(parent),

ui(new Ui::Dialog)

{

ui->setupUi(this);

}

Dialog::~Dialog()

{

delete ui;

}

void Dialog::on_pushButton_clicked()

{

QString pp(PROJECT_PATH+QString("/zz/"));

fileName = QFileDialog::getOpenFileName(

this, // указатель на родительское окно

"Открыть файл", // заголовок окна

QString(pp), // выбор начинается с текущего каталога

QString("Текстовые файлы (*.txt);;Все файлы (*.*)") );

// фильтры для списка файлов

QFile file;

if (!fileName.isEmpty()) // если имя файла выбрано

{

file.setFileName(fileName);

// связываем объект file с физическим файлом

file.open(QIODevice::ReadOnly|QIODevice::Text);

file.setFileName(fileName);

// связываем объект file с физическим файлом

file.open(QIODevice::ReadOnly|QIODevice::Text);

QString text = file.readAll();

ui->textEdit->setText(text); // отображаем текст на экране

}

}

void Dialog::on_pushButton_2_clicked()

{

QString pp(PROJECT_PATH+QString("/zz/"));

if (!fileName.isEmpty()) // если имя файла задано

{

QFile rezFile(pp+fileName); // объявляем объект, соответствующий новому файлу

rezFile.setFileName(fileName); // связываем объект и файл

rezFile.open(QIODevice::WriteOnly|QIODevice::Text);

// открываем файл

QTextStream out(&rezFile); // создаем поток для работы с файлом

out << ui->textEdit->toPlainText(); // переписываем текст в файл

rezFile.close(); // обязательно закрываем созданный файл

QMessageBox::information(this,"Готово","Сохранено!");

}

else QMessageBox::critical(this,"Ошибка","Файл не выбран");

}

Файл main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

Файл mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "dialog.h"

#include <QtGui>

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

QTextCodec* codec = QTextCodec::codecForName("UTF-8");

QTextCodec::setCodecForCStrings(codec);

QTextCodec::setCodecForLocale(codec);

QTextCodec::setCodecForTr(codec);

}

MainWindow::~MainWindow()

{

delete ui;

}

QString MainWindow::what_sign(int day, int month){ //функция определения знака и его файла

QString filename;//имя файла

if ( (month == 3 && day >= 21) || (month == 4 && day <= 20) )

filename="Aries.txt"; // Овен

else

if ( (month == 4 && day >= 21) || (month == 5 && day <= 20) )

filename="Taurus.txt"; //Телец

else

if ( (month == 5 && day >= 21) || (month == 6 && day <= 21) )

filename="Gemini.txt"; // Близнецы

else

if ( (month == 6 && day >= 22) || (month == 7 && day <= 22) )

filename="Cancer.txt"; // Рак

else

if ( (month == 7 && day >= 23) || (month == 8 && day <= 23) )

filename="Leo.txt"; // Лев

else

if ( (month == 8 && day >= 24) || (month == 9 && day <= 23) )

filename="Virgo.txt"; // Дева

else

if ( (month == 9 && day >= 24) || (month == 10 && day <= 22) )

filename="Libra.txt"; //Весы

else

if ( (month == 10 && day >= 23) || (month == 11 && day <= 22) )

filename="Scorpio.txt"; // Скорпион

else

if ( (month == 11 && day >= 23) || (month == 12 && day <= 21) )

filename="Sagittarius.txt"; // Стрелец

else

if ( (month == 12 && day >= 22) || (month == 1 && day <= 20) )

filename="Capricorn.txt"; // Козерог

else

if ( (month == 1 && day >= 21) || (month == 2 && day <= 19) )

filename="Aquarius.txt"; // Водолей

else

if ( (month == 2 && day >= 20) || (month == 3 && day <= 20) )

filename="Pisces.txt"; // Рыбы

return filename;//возвращаем имя файла

}

QString MainWindow::name_sign(int day, int month){ //функция определения знака и его названия

QString name;

if ( (month == 3 && day >= 21) || (month == 4 && day <= 20) )

name="Овен"; // Овен

else

if ( (month == 4 && day >= 21) || (month == 5 && day <= 20) )

name="Телец"; //Телец

else

if ( (month == 5 && day >= 21) || (month == 6 && day <= 21) )

name="Близнецы"; // Близнецы

else

if ( (month == 6 && day >= 22) || (month == 7 && day <= 22) )

name="Рак"; // Рак

else

if ( (month == 7 && day >= 23) || (month == 8 && day <= 23) )

name="Лев"; // Лев

else

if ( (month == 8 && day >= 24) || (month == 9 && day <= 23) )

name="Дева"; // Дева

else

if ( (month == 9 && day >= 24) || (month == 10 && day <= 22) )

name="Весы"; //Весы

else

if ( (month == 10 && day >= 23) || (month == 11 && day <= 22) )

name="Скорпион"; // Скорпион

else

if ( (month == 11 && day >= 23) || (month == 12 && day <= 21) )

name="Стрелец"; // Стрелец

else

if ( (month == 12 && day >= 22) || (month == 1 && day <= 20) )

name="Козерог"; // Козерог

else

if ( (month == 1 && day >= 21) || (month == 2 && day <= 19) )

name="Водолей"; // Водолей

else

if ( (month == 2 && day >= 20) || (month == 3 && day <= 20) )

name="Рыбы"; // Рыбы

return name;

}

void MainWindow::on_pushButton_clicked()

{

QDate date = ui->dateEdit->date();//считываем дату

int day = date.day();//разделяем день

int month = date.month();//и месяц

QDialog *dlg = new QDialog(this);//создаем указатель на диалоговое окно

QTextEdit *textEdit = new QTextEdit(dlg);//и указатель текст , который будет выводится из файла

textEdit->viewport()->setAutoFillBackground(false);//сделаем фон прозрачный

textEdit->setFrameStyle(QFrame::NoFrame);//и без рамки

textEdit->setReadOnly(true);//и только для чтения

QString filename,name;// перменные текстового файла и знака

// Вычисляем знак зодиака

filename = what_sign(day,month);// получаем название текст. файла

name = name_sign(day,month);//и название гороскопа

QString pp(PROJECT_PATH);//путь к папке с гороскопами

QFile file(pp+"/zz/"+filename); /* объявляем файл */

if (file.exists()) // если файл найден

{

file.open(QIODevice::ReadOnly|QIODevice::Text);//открываем для чтения

QString text = file.readAll(); // считываем весь текст

textEdit->setText(text); // выводим текст файла на экран

textEdit->show();//выводим текст

dlg->setWindowTitle(name);//установиим название окна

dlg->show();//и выведем окно

}

else// если не найдет файл выведем предупреждение об ошибке

QMessageBox::critical(this,"Ошибка","Файл "+filename+" не найден");

}

void MainWindow::on_actionEdit_triggered()//слот взывающий диалоговое окно редактирования прогноза

{

Dialog *dlg = new Dialog(this);

dlg->exec();

}