Заключение
Разработанная программа в рамках курсовой работы позволяет быстро получить гороскоп по выбранной дате. В процессе разработки были улучшены навыки работы со слотами, указателями, и классами.
Программа реализована на языке 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();
}
- Введение
- 1. Анализ задания, выбор технологии, языка и среды разработки
- 2. Разработка ПС
- 2.1 Описание задачи
- 2.2 Определение структуры ПС
- 2.4 Описание работы ПС
- 2.5 Организация данных
- 2.6 Разработка пользовательского интерфейса
- 3. Выбор стратегии тестирования и отладка ПС
- 4. Системные требования, возможности ПС
- Заключение