Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 - Текст пояснювальної записки.docx
Скачиваний:
4
Добавлен:
12.05.2015
Размер:
12.71 Mб
Скачать

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

#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;

}

}

  1. 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;

}

}

  1. main.cpp

#include "mainwindow.h"

#include <QApplication>

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

{

QApplication a(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

  1. 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();

}