Клас головного вікна
#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
Реалізація програми у відповідних класам файлах
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;
}
}
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;
}
}
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 <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();
}