Реалізація програми у відповідних класам файлах

Зміст

1. Вступ. 4

2. Теоретичні відомості 5

Короткі відомості про оригінальний додаток. 5

Опис програми. 5

3. Опис класів та їх ієрархія. 12

Клас контактів. 12

Клас справ. 13

Клас головного вікна. 15

Реалізація програми у відповідних класам файлах. 18

4. Висновок. 34

5. Список використаної літератури. 35

 

 

 


Вступ

Метою цієї роботи є розробка програмного забезпечення із графічним інтерфейсом користувача із використанням бібліотеки Qt.

Qt – це крос-платформовий інструментарій для розробки додатків з графічним інтерфейсом мовою програмування С++. Також може бути використаним в інших мовах, таких як Ada (QtAda), C# (Qyoto/Kimono), Java (Qt Jambi), Qt Jambi, Pascal, Perl, PHP (PHP-Qt), Ruby (QtRuby), та Python (PyQt,PySide).

Qt дозволяє запускати написане з його допомогою ПЗ в більшості сучасних операційних систем шляхом простої компіляції програми для кожної ОС без зміни початкового коду. Включає в себе всі основні класи, які можуть знадобитися при розробці прикладного програмного забезпечення, починаючи від елементів графічного інтерфейсу і закінчуючи класами для роботи з мережею, базами даних і XML. Qt є повністю об'єктно-орієнтованим, легко розширюваним і підтримуючим техніку компонентного програмування.

Qt використовується в Autodesk Maya, Adobe Photoshop Elements, OPIE, Skype, Медиапроигрыватель VLC, VirtualBox, і Mathematica, и на European Space Agency, DreamWorks, Google, HP, KDE, Lucasfilm, Panasonic, Philips, Samsung, Siemens, Volvo і  Walt Disney Animation Studios.

Qt надає програмісту не тільки зручний набір бібліотек класів, а й певну модель розробки додатків, певний каркас їх структури. Проходження принципам і правилам «хорошого стилю програмування на C ++ / Qt» істотно знижує частоту таких важко відловлюють помилок в додатках, як витоку пам'яті, необроблені виключення, незакриті файли або незвільнені дескриптори ресурсних об'єктів.

 

 

Теоретичні відомості

Короткі відомості про оригінальний додаток

Тестування, у соьгоденні, - це одна із основних форм моніторингу за певними властивостями різних груп людей. Кожна людина хоча б раз у житті проходила тест, може колись у школі, може вчора, а може, навіть і в даний момент. Адже тести – це найшвидший спосіб моніторингу. Тому зараз є дуже популярні програми,  які дозволяють складати, редагувати та проходити тест.

Опис програми

Програма розроблена у середовищі Qt, мовою С++ .

При запуску програми з’явиться головне вікно, де спочатку доступні строки авторизації, кнопка «ok» ( для авторизації), та кнопка «Close» (для припинення роботи програми).

 

    Роботу програми можна умовно розділити на два режими: “teacher”

, “student”.

Почнемо з режиму “teacher”. Щоб активувати цей режим, потрібно у першу строку ввести користувача “master”, а у наступну – пароль “neznau”, та натиснути кнопку “ok”. Якщо авторизація пройшла вдало, напис “TextLabel” зміниться на “teacher”.

 

Також, стали доступні кнопки “results”, “Create new test”, “Test search”.

При натисканні на “results”, з’являється вікно, де показано всі користувачі, які проходили будь-який тест у цій програмі, та їх результати у вигляді таблиці. При натисканні кнопки “Clean”, всі записи з таблиці назавжди видаляються, а - “Close” , вікно закривається,

При натисканні кнопки “Create new test”, розпочинається процес створення нового тесту.

Поперше відкривається нове вікно , де, спочатку, недуступна кнопка «ок», вона стає доступна, при вводі назви тесту. Після назви, слід вибрати тип питання, яке буде йти у тксті першим: питання з 4-ма варіантами відповіді(1 type), питання на правдивість висловлювання(2 type), питання з ручним вводом відповіді( 3 type); та натиснути кнопку “ok” для продовження створення тесту. Залежно від вибраного типу може з’явитися 3 різні вікна.

У всіх трьох типів вікон є спільні кнопки: “1 type”(підтвердження даних цього завдання, додання його до тесту та перехід до наступного завдання 1-го типу), “2 type”(підтвердження даних цього завдання, додання його до тесту та перехід до наступного завдання 2-го типу),“3 type”(підтвердження даних цього завдання, додання його до тесту та перехід до наступного завдання 3-го типу), “close”(не зберігає дані та закриває вікно); спільні віджети : слайдер, спін бокс(зміна складності питання), поле вводу для самого питання. А різне:

 

1. Вікно для першого типу питань, має 4 поля вводу для кожного із варіантів, мітки для мітки правильної відповіді.

 

2. Вікно для другого типу питань має дві мітки для двох можливих відповідей (Так, Ні).

 

 

3. Вікно для третього типу питань має поле для вводу правильної відповіді на питання.

 

При натисканні у головному меню кнопки “Test search”, з’явиться вікно для вибору одного із створених тесті, тест вибирається при натискань на один із наявних у таблиці.

 

 

Після обрання тесту він стає активним, вікно тестів закривається, а у головному вікні з’являється напис з активним тестом. Також стають доступними кнопки “show quetions”, “delete test”, “Start”.

 

При натисканні на “delete test”, активний тест буде видалений і з’явиться відповідне повідомлення сатиристичного характеру, яке містить «відсилки», на певний продукт художньої творчості.

 

Також кнопки “show quetions”, “delete test”, “Start” знов стануть недоступні, до вибору наступного активного тесту.

При натисканні на “show quetions”, з’явиться вікно зтаблицею, де в лівій колонці записані питання, а в правій типи цих питань. При виборі одного з питань кнопка “delete” стає доступна, і при натисканні її обране питання видаляється.

 

При натисканні на “Start”, починається активне тестування і залежно від тесту може відкритися 3 типи вікон для кожного із типів питань. У першому та другому типі питань відповіді користувача вводяться мітками, а у третьому типі - з клавіатури.

1-ий тип

 

2-ий тип

3-ій тип

 

 

Кнопка “Next” переходить до наступного питання, якщо вони не закінчилися, або видає результат проходження тесту користувачем, в іншому випадку.

 

Кнопка “Close” достроково припиняє тест видає результат проходження тесту користувачем, до даного питання включно.

 

 Щоб активувати режим “student”, потрібно у першу строку ввести ім’я користувача , а у наступну можна залишити порожньою, та натиснути кнопку “ok”. Якщо авторизація пройшла вдало, напис “TextLabel” зміниться на “student”.

 

Логіка режиму “student”відрізняється від режиму “teacher”, недоступністю кнопок “show quetions”, “delete test”, “results”, “Create new test”.

    Всі функції обраного додатку розглянуто, усі орфографічні помилки у написах слід вважати способом захисту авторських прав.

 

Опис класів та їх ієрархія

Клас контактів

#ifndef CONTACT_H

#define CONTACT_H

 

#include <iostream>

#include <string>

#include <vector>

#include <QLineEdit>

 

using namespace std;

 

class Contact {

 

private:

string name;

string surname;

string group;

string phone;

 

public:

 

void setName(string name);

void setSurname(string surname);

void setGroup(string group);

void setPhone(string phone);

 

string getName();

 

 

string getSurname();

string getGroup();

string getPhone();

 

static void sortByName(vector <Contact> *contList);

static void sortBySurname(vector <Contact> *contList);

static void sortByGroup(vector <Contact> *contList);

static void sortByPhone(vector <Contact> *contList);

 

static void setContact(vector <Contact> *contList, string str1, string str2, string str3, string str4);

 

static void readContact(vector <Contact> *contList , ifstream &fin);

 

static void saveContact(vector <Contact> *contList, ofstream &fout);

 

static void getContact(vector <Contact> contList);

 

static vector <Contact> searchContact(vector <Contact> *contList, string key);

 

static void deleteContact(vector <Contact> *contList, string key);

 

};

 

#endif // CONTACT_H

 

Клас справ

#ifndef ACTIVITY_H

#define ACTIVITY_H

 

#include <iostream>

#include <string>

#include "date.h"

#include "contact.h"

 

using namespace std;

 

class Activity{

 

private:

   string descr;

 

 

   Date date;

   string place;

   string prior;

   string pers;

public:

 

   void setDate(string sDate);

   void setDescr(string descr);

   void setPlace(string place);

   void setPrior(string prior);

   void setPers(string pers);

 

   string getDescr();

   string getPlace();

  string getPrior();

   Date getDate();

   string getPers();

 

   static void sortByDescr(vector <Activity> *actList);

   static void sortByPlace(vector <Activity> *actList);

   static void sortByPrior(vector <Activity> *actList);

   static void sortByDate(vector <Activity> *actList);

 

   static void setAct(vector<Activity> *actList);

 

   static void readAct(vector<Activity> *actList , ifstream &fin);

 

   static void saveAct(vector <Activity> *actList, ofstream &fout);

 

   static Activity searchAct(vector <Activity> *actList, string key);

 

   static void deleteAct(vector <Activity> *actList, string key);

 

   static void setActivity(vector <Activity> *actList, string str1, string str2, string str3, string str4, string str5);

 

};

 

#endif // ACTIVITY_H

 

Клас дати

#ifndef DATE_H

 

 

#define DATE_H

 

#include <iostream>

using namespace std;

 

class Date

{

public:

int day;

int month;

int year;

string dateToString()

{

   string resDate = "";

   resDate += to_string(day)+"."+to_string(month)+"."+to_string(year);

   return resDate;

}

};

#endif // DATE_H

 

Клас головного вікна

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

 

#include <QMainWindow>

#include <vector>

#include "contact.h"

#include "activity.h"

 

namespace Ui {

class MainWindow;

}

 

class MainWindow : public QMainWindow

{

Q_OBJECT

 

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

 

vector <Contact> contList;

vector <Activity> actList;

 

private slots:

void on_addCont_triggered();

 

void on_showCont_triggered();

 

void on_addAct_triggered();

 

void on_showAct_triggered();

 

void on_btn1_clicked();

 

void on_saveCont_triggered();

 

void on_saveAct_triggered();

 

void contSort(int i);

 

void actSort(int i);

 

void on_btn2_clicked();

 

void on_ch1_toggled(bool checked);

 

void on_ch2_toggled(bool checked);

 

void on_ch3_toggled(bool checked);

 

void on_ch4_toggled(bool checked);

 

void on_rb1_toggled(bool checked);

 

void on_rb2_toggled(bool checked);

 

void on_rb3_toggled(bool checked);

 

void on_rb4_toggled(bool checked);

 

void on_btn3_clicked();

 

void on_btn4_clicked();

 

 

private:

Ui::MainWindow *ui;

};

 

#endif // MAINWINDOW_H

 

 

Реалізація програми у відповідних класам файлах

1) activity.cpp

#include <iostream>

#include <string>

#include <vector>

#include <fstream>

#include <algorithm>

#include <QString>

 

#include "activity.h"

 

using namespace std;

 

void Activity:: setDescr(string descr){

this->descr = descr;}

 

void Activity::setPlace(string place){

this->place = place;}

 

void Activity::setPrior(string prior){

this->prior = prior;}

 

void Activity::setDate(string sDate){

if (sDate == "")

   return;

 

Date X;

QString sDay= QString::fromStdString(sDate.substr(0,2));

X.day = sDay.toInt();

 

QString sMonth = QString::fromStdString(sDate.substr(3,2));

X.month = sMonth.toInt();

 

QString sYear = QString::fromStdString(sDate.substr(6,4));

X.year = sYear.toInt();

 

this->date = X;

}

 

void Activity::setPers(string pers){

   this->pers = pers;}

 

 

string Activity::getDescr(){

return descr;}

 

string Activity::getPlace(){

return place;}

 

string Activity::getPrior(){

return prior;}

 

Date Activity::getDate(){

return date;}

 

string Activity::getPers(){

return pers;}

 

bool descrCompare(Activity act1, Activity act2){

return( act1.getDescr().compare(act2.getDescr())<0);}

 

void Activity::sortByDescr(vector <Activity> *actList){

sort(actList->begin(), actList->end(), descrCompare);}

 

bool dateCompare(Activity act1, Activity act2){

if(act1.getDate().year < act2.getDate().year)

   return true;

else if(act1.getDate().year == act2.getDate().year){

   if( act1.getDate().month < act2.getDate().month)

       return true;

   else if( act1.getDate().month == act2.getDate().month){

       if(act1.getDate().day < act2.getDate().day)

           return true;

       else

           return false;

   }

   else

       return false;

}

else

   return false;

}

 

void Activity::sortByDate(vector <Activity> *actList){

sort(actList->begin(), actList->end(), dateCompare);}

 

bool placeCompare(Activity act1, Activity act2){

return( act1.getPlace().compare(act2.getPlace())<0);}

 

void Activity::sortByPlace(vector <Activity> *actList){

sort(actList->begin(), actList->end(), placeCompare);}

 

bool priorCompare(Activity act1, Activity act2){

return( act1.getPrior().compare(act2.getPrior())<0);}

 

void Activity::sortByPrior(vector <Activity> *actList){

sort(actList->begin(), actList->end(), priorCompare);}

 

Activity Activity:: searchAct(vector <Activity> *actList, string key){

Activity tdBuf;

 

if(key.find(".")!=string::npos){

   Date dKey;

 

   QString sDay = QString::fromStdString(key.substr(0,2));

   dKey.day = sDay.toInt();

 

   QString sMonth = QString::fromStdString(key.substr(3,2));

   dKey.month = sMonth.toInt();

 

   QString sYear = QString::fromStdString(key.substr(6,4));

   dKey.year = sYear.toInt();

 

   for(int i=0; i<actList->size(); i++){

       tdBuf = actList->at(i);

 

       if(tdBuf.getDate().day == dKey.day && tdBuf.getDate().month == dKey.month && tdBuf.getDate().year == dKey.year)

           return tdBuf;

   }

}

else{

   for(int i=0; i<actList->size(); i++){

       tdBuf = actList->at(i);

       if(tdBuf.getPlace() == key || tdBuf.getPrior() == key || tdBuf.getDescr() == key || tdBuf.getPers() == key)

           return tdBuf;

       else{

           tdBuf.setDescr("");

 

 

           tdBuf.setPlace("");

           tdBuf.setPrior("");

           tdBuf.setPers("");

           tdBuf.setDate("");

           return tdBuf;

       }

   }

}

 

}

 

void Activity:: setActivity(vector <Activity> *actList, string str1, string str2, string str3, string str4, string str5){

 

Activity act;

 

act.setDescr(str1);

act.setDate(str2);

act.setPlace(str3);

act.setPrior(str4);

act.setPers(str5);

 

actList->push_back(act);

}

 

void Activity:: readAct(vector <Activity> *actList , ifstream &fin){

char *buf = new char[50];

Activity act;

string str;

 

while(!fin.eof()){

   fin.getline(buf,49);

   str = buf;

   act.setDescr(str);

 

   fin.getline(buf,49);

   str = buf;

   act.setPlace(str);

 

   fin.getline(buf,49);

   str = buf;

   act.setDate(str);

 

   fin.getline(buf,49);

 

   str = buf;

   act.setPrior(str);

 

   fin.getline(buf,49);

   str = buf;

   act.setPers(str);

 

   actList->push_back(act);

}

}

 

void Activity:: saveAct(vector <Activity> *actList, ofstream &fout){

string str;

Activity buffer;

 

for(int i=0; i<actList->size(); i++){

   buffer = actList->at(i);

 

   str = buffer.getDescr();

   fout<<str<<endl;

 

   str = buffer.getPlace();

   fout<<str<<endl;

 

   if(buffer.getDate().day < 10 && buffer.getDate().month < 10){

   str = "0"+(QString::number(buffer.getDate().day)).toStdString() + ".0" + (QString::number(buffer.getDate().month)).toStdString() + "." + (QString::number(buffer.getDate().year)).toStdString();

   fout<<str<<endl;

   }

   else if(buffer.getDate().day < 10 && buffer.getDate().month >= 10){

       str = "0"+(QString::number(buffer.getDate().day)).toStdString() + "." + (QString::number(buffer.getDate().month)).toStdString() + "." + (QString::number(buffer.getDate().year)).toStdString();

       fout<<str<<endl;

   }

   else if(buffer.getDate().day >= 10 && buffer.getDate().month < 10){

       str = (QString::number(buffer.getDate().day)).toStdString() + ".0" + (QString::number(buffer.getDate().month)).toStdString() + "." + (QString::number(buffer.getDate().year)).toStdString();

       fout<<str<<endl;

   }

   else if(buffer.getDate().day > 10 && buffer.getDate().month > 10){

       str = (QString::number(buffer.getDate().day)).toStdString() + "." + (QString::number(buffer.getDate().month)).toStdString() + "." + (QString::number(buffer.getDate().year)).toStdString();

       fout<<str<<endl;

   }

 

   str = buffer.getPrior();

   fout<<str<<endl;

 

   str = buffer.getPers();

     fout<<str<<endl;

}

}

 

2) contact.cpp

#include <iostream>

#include <string>

#include <algorithm>

#include <fstream>

#include "contact.h"

#include <QLineEdit>

#include <vector>

using namespace std;

 

void Contact:: setName(string name){

this->name = name;}

 

void Contact:: setSurname(string surname){

this->surname = surname;}

 

void Contact::setGroup(string group){

this->group = group;}

 

void Contact::setPhone(string phone){

this->phone = phone;}

 

string Contact:: getName(){

return name;}

 

string Contact::getSurname(){

return surname;}

 

 

string Contact::getGroup(){

return group;}

 

string Contact::getPhone(){

return phone;}

 

QString Contact::show(){

QString qstr = QString::fromStdString(name);

return qstr;}

 

bool nameCompare(Contact con1, Contact con2){

return( con1.getName().compare(con2.getName())<0);}

 

void Contact::sortByName(vector <Contact> *contList){

sort(contList->begin(), contList->end(), nameCompare);}

 

bool surnameCompare(Contact con1, Contact con2){

return( con1.getSurname().compare(con2.getSurname())<0);}

 

void Contact::sortBySurname(vector <Contact> *contList){

sort(contList->begin(), contList->end(), surnameCompare);}

 

bool groupCompare(Contact con1, Contact con2){

return(con1.getGroup().compare(con2.getGroup())<0);}

 

void Contact::sortByGroup(vector <Contact> *contList){

sort(contList->begin(), contList->end(), groupCompare);}

 

bool numCompare(Contact con1, Contact con2){

return(con1.getPhone().compare(con2.getPhone())<0);}

 

void Contact::sortByPhone(vector <Contact> *contList){

sort(contList->begin(), contList->end(), numCompare);}

 

 

vector <Contact> Contact:: searchContact(vector <Contact> *contList, string key){

vector <Contact> cSearchList;

for(int i=0; i<contList->size(); i++){

   if(contList->at(i).getName() == key || contList->at(i).getSurname() == key || contList->at(i).getGroup() == key || contList->at(i).getPhone() == key){

       cSearchList.push_back(contList->at(i));

   }

 

 

}

return cSearchList;

}

 

void Contact:: setContact(vector <Contact> *contList, string str1, string str2, string str3, string str4){

Contact person;

 

person.setName(str1);

person.setSurname(str2);

person.setGroup(str3);

person.setPhone(str4);

 

contList->push_back(person);

}

 

void Contact:: readContact(vector <Contact> *contList , ifstream &fin){

char *buf = new char[50];

Contact person;

string str;

 

while(!fin.eof()){

   fin.getline(buf,49);

   str = buf;

   person.setName(str);

 

   fin.getline(buf,49);

   str = buf;

   person.setSurname(str);

 

   fin.getline(buf,49);

   str = buf;

   person.setGroup(str);

 

   fin.getline(buf,49);

   str = buf;

   person.setPhone(str);

 

   contList->push_back(person);

}

}

 

void Contact:: saveContact(vector <Contact> *contList, ofstream &fout){

 

 

string str;

Contact buffer;

 

for(int i=0; i<contList->size(); i++){

   buffer = contList->at(i);

 

   str = buffer.getName();

   fout<<str<<endl;

 

   str = buffer.getSurname();

   fout<<str<<endl;

 

   str = buffer.getGroup();

   fout<<str<<endl;

 

   str = buffer.getPhone();

   fout<<str<<endl;

}

}

 

3) main.cpp

#include "mainwindow.h"

#include <QApplication>

 

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

{

QApplication a(argc, argv);

MainWindow w;

w.show();

 

return a.exec();

}

 

4) mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QMessageBox>

#include "contact.h"

#include "activity.h"

 

 

#include <fstream>

 

using namespace std;

 

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ifstream fin("D:\\tmp\\Contacts.txt");

 

if(!fin.eof()){

   Contact::readContact(&contList, fin);

   contList.pop_back();

}

else if(fin.eof()){

   contList.erase(contList.begin());

}

fin.close();

 

 

ifstream fin1("D:\\tmp\\Notes.txt");

 

if(!fin1.eof()){

   Activity:: readAct(&actList, fin1);

   actList.pop_back();

}

else if(fin1.eof()){

   actList.erase(actList.begin());

}

fin1.close();

 

 

ui->setupUi(this);

ui->contTable->setRowCount(contList.size());

ui->contTable->setColumnCount(4);

ui->contTable->setHorizontalHeaderLabels(QStringList()<<"Ім'я" << "Прізвище" << "Група" << "Номер телефону");

 

 

ui->actTable->setRowCount(actList.size());

ui->actTable->setColumnCount(5);

ui->actTable->setHorizontalHeaderLabels(QStringList()<<"Назва" << "Дата" << "Місце" << "Пріоритет"<<"Ім'я");

}

 

MainWindow::~MainWindow()

{

delete ui;

}

 

void MainWindow::on_addCont_triggered()

{

ui->stackedWidget->setCurrentWidget(ui->page);

}

 

 

void MainWindow::on_showCont_triggered()

{

ui->stackedWidget->setCurrentWidget(ui->page_2);

 

ui->contTable->setRowCount(contList.size());

 

for(int i = 0; i<contList.size(); i++){

 

   QString qstr = QString::fromStdString(contList.at(i).getName());

   QTableWidgetItem *itm = new QTableWidgetItem(qstr);

   ui->contTable->setItem(i,0,itm);

 

   QString qstr1 = QString::fromStdString(contList.at(i).getSurname());

    QTableWidgetItem *itm1 = new QTableWidgetItem(qstr1);

   ui->contTable->setItem(i,1,itm1);

 

   QString qstr2 = QString::fromStdString(contList.at(i).getGroup());

   QTableWidgetItem *itm2 = new QTableWidgetItem(qstr2);

   ui->contTable->setItem(i,2,itm2);

 

   QString qstr3 = QString::fromStdString(contList.at(i).getPhone());

   QTableWidgetItem *itm3 = new QTableWidgetItem(qstr3);

   ui->contTable->setItem(i,3,itm3);

}

}

 

void MainWindow::on_addAct_triggered()

{

ui->stackedWidget->setCurrentWidget(ui->page_3);

}

 

void MainWindow::on_showAct_triggered()

{

 

ui->stackedWidget->setCurrentWidget(ui->page_4);

ui->actTable->setRowCount(actList.size());

 

for(int i = 0; i<actList.size(); i++){

 

   QString qstr = QString::fromStdString(actList.at(i).getDescr());

   QTableWidgetItem *itm = new QTableWidgetItem(qstr);

   ui->actTable->setItem(i,0,itm);

 

   QString d = QString::number(actList.at(i).getDate().day) + "." + QString::number(actList.at(i).getDate().month) + "." + QString::number(actList.at(i).getDate().year);

   QTableWidgetItem *itm1 = new QTableWidgetItem(d);

   ui->actTable->setItem(i,1,itm1);

 

   QString qstr2 = QString::fromStdString(actList.at(i).getPlace());

   QTableWidgetItem *itm2 = new QTableWidgetItem(qstr2);

   ui->actTable->setItem(i,2,itm2);

 

   QString qstr3 = QString::fromStdString(actList.at(i).getPrior());

   QTableWidgetItem *itm3 = new QTableWidgetItem(qstr3);

   ui->actTable->setItem(i,3,itm3);

 

   QString qstr4 = QString::fromStdString(actList.at(i).getPers());

   QTableWidgetItem *itm4 = new QTableWidgetItem(qstr4);

   ui->actTable->setItem(i,4,itm4);

}

}

 

void MainWindow::on_btn1_clicked()

{

string name = ui->name->text().toStdString();

string surname = ui->surname->text().toStdString();

string phone = ui->phone->text().toStdString();

string group = ui->group->currentText().toStdString();

 

Contact::setContact(&contList, name, surname, group, phone);

 

}

 

void MainWindow::on_saveCont_triggered()

{

ofstream fout("D:\\tmp\\Contacts.txt");

 

 

Contact:: saveContact(&contList ,fout);

fout.close();

}

 

void MainWindow::on_saveAct_triggered()

{

ofstream fout("D:\\tmp\\Notes.txt");

Activity::saveAct(&actList, fout);

fout.close();

}

 

void MainWindow::on_btn2_clicked()

{

string dateToStr = "";

 

string descr = ui->descr->text().toStdString();

string place = ui->place->text().toStdString();

 

dateToStr=ui->date->date().toString("dd.MM.yyyy").toStdString();

string prior = ui->prior->currentText().toStdString();

string pers = ui->name2->text().toStdString();

Activity::setActivity(&actList, descr, dateToStr, place, prior, pers);

}

 

void MainWindow::contSort(int i){

if(i==0)

   Contact::sortByName(&contList);

else if(i==1)

   Contact::sortBySurname(&contList);

else if(i==2)

   Contact::sortByGroup(&contList);

else if(i==3)

   Contact::sortByPhone(&contList);

 

for(int i = 0; i<contList.size(); i++){

   QString qstr = QString::fromStdString(contList.at(i).getName());

   QTableWidgetItem *itm = new QTableWidgetItem(qstr);

   ui->contTable->setItem(i,0,itm);

 

   QString qstr1 = QString::fromStdString(contList.at(i).getSurname());

   QTableWidgetItem *itm1 = new QTableWidgetItem(qstr1);

   ui->contTable->setItem(i,1,itm1);

 

   QString qstr2 = QString::fromStdString(contList.at(i).getGroup());

   QTableWidgetItem *itm2 = new QTableWidgetItem(qstr2);

   ui->contTable->setItem(i,2,itm2);

 

   QString qstr3 = QString::fromStdString(contList.at(i).getPhone());

   QTableWidgetItem *itm3 = new QTableWidgetItem(qstr3);

   ui->contTable->setItem(i,3,itm3);

}

}

 

void MainWindow::actSort(int i){

if(i==0)

    Activity::sortByDescr(&actList);

else if(i==1)

    Activity::sortByDate(&actList);

else if(i==2)

    Activity::sortByPlace(&actList);

if(i==3)

    Activity::sortByPrior(&actList);

 

for(int i = 0; i<actList.size(); i++){

 

    QString qstr = QString::fromStdString(actList.at(i).getDescr());

    QTableWidgetItem *itm = new QTableWidgetItem(qstr);

    ui->actTable->setItem(i,0,itm);

 

    QString d = QString::number(actList.at(i).getDate().day) + "." + QString::number(actList.at(i).getDate().month) + "." + QString::number(actList.at(i).getDate().year);

    QTableWidgetItem *itm1 = new QTableWidgetItem(d);

    ui->actTable->setItem(i,1,itm1);

 

    QString qstr2 = QString::fromStdString(actList.at(i).getPlace());

    QTableWidgetItem *itm2 = new QTableWidgetItem(qstr2);

    ui->actTable->setItem(i,2,itm2);

 

    QString qstr3 = QString::fromStdString(actList.at(i).getPrior());

    QTableWidgetItem *itm3 = new QTableWidgetItem(qstr3);

    ui->actTable->setItem(i,3,itm3);

}

 

}

 

void MainWindow::on_ch1_toggled(bool checked){

contSort(0);}

 

void MainWindow::on_ch2_toggled(bool checked){

contSort(1);}

 

void MainWindow::on_ch3_toggled(bool checked){

contSort(2);}

 

void MainWindow::on_ch4_toggled(bool checked){

contSort(3);}

 

void MainWindow::on_rb1_toggled(bool checked){

actSort(0);}

 

void MainWindow::on_rb2_toggled(bool checked){

actSort(1);}

 

void MainWindow::on_rb3_toggled(bool checked){

actSort(2);}

 

void MainWindow::on_rb4_toggled(bool checked){

actSort(3);}

 

void MainWindow::on_btn3_clicked()

{

string key = ui->search->text().toStdString();

vector <Contact> csList;

csList = Contact::searchContact(&contList, key);

QMessageBox msgBox;

msgBox.setWindowTitle("Результати пошуку");

QString msg = "";

for(int i=0; i<csList.size(); i++){

   msg += QString::fromStdString(csList.at(i).getName()+"\n"+csList.at(i).getSurname()+"\n"+csList.at(i).getGroup()+"\n"+csList.at(i).getPhone()+".\n");

}

if(msg != "")

   msgBox.setText(msg);

else

   msgBox.setText("Немає такого контакту.");

msgBox.exec();

}

 

 

void MainWindow::on_btn4_clicked()

{

string key = ui->search2->text().toStdString();

Activity result = Activity::searchAct(&actList, key);

 

QString msg;

msg = QString::fromStdString(result.getDescr()+"\n"+result.getDate().dateToString()+"\n"+result.getPlace()+"\n"+result.getPrior()+"\n"+result.getPers()+".");

 

QMessageBox msgBox;

msgBox.setWindowTitle("Результати пошуку");

 

 

vector <Contact> csList;

csList = Contact::searchContact(&contList, key);

 

QString msg2 = "";

for(int i=0; i<csList.size(); i++){

   msg2 += QString::fromStdString(csList.at(i).getName()+"\n"+csList.at(i).getSurname()+"\n"+csList.at(i).getGroup()+"\n"+csList.at(i).getPhone()+".\n");

}

 

if(result.getPers() != "")

   msgBox.setText(msg);

else{

   if(msg2 != "")

       msgBox.setText(msg2);

   else

       msgBox.setText("Немає таких даних.");

}

 

msgBox.exec();

}


Висновок

У даній роботі реалізовано програму «Органайзер». Реалізовані такі елементи:

·  Виведення записів телефонної книги та списку справ у вигляді таблиці.

·  Сортування кожного виду товару за різними критеріями.

·  Пошук контактів та справ за відповідними ключами.

Для більш приємного вигляду було додано на кожну сторінку програмного додатку відмет з календарем, який, щоправда ніяк не пов’язаний з даними, якими оперує користувач. Його наявність обумовлена тим, що для стандартного органайзера це є характерним .

Введені дані зберігаються при виклику відповідної операції, що є прототипом бази даних.

Реалізувавши всі вищезгадані елементи програми, було досягнуто мети курсової роботи.

 


 


Дата добавления: 2022-11-11; просмотров: 26; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!