diff --git a/src/ChangShaTour/ChangShaTour.pro b/src/ChangShaTour/ChangShaTour.pro index a63e201..a35860c 100644 --- a/src/ChangShaTour/ChangShaTour.pro +++ b/src/ChangShaTour/ChangShaTour.pro @@ -16,7 +16,6 @@ DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ - addhistory.cpp \ cglobal.cpp \ conditionwidget.cpp \ confirmwidget.cpp \ @@ -48,7 +47,6 @@ SOURCES += \ webwidget.cpp HEADERS += \ - addhistory.h \ cglobal.h \ conditionwidget.h \ confirmwidget.h \ diff --git a/src/ChangShaTour/ChangShaTour.pro.user b/src/ChangShaTour/ChangShaTour.pro.user index 4a7ba2b..a23a8f9 100644 --- a/src/ChangShaTour/ChangShaTour.pro.user +++ b/src/ChangShaTour/ChangShaTour.pro.user @@ -1,10 +1,10 @@ - + EnvironmentId - {4109ff11-a646-43d1-9619-aeb32783df6e} + {d82e82d4-1ed7-46a6-9098-5e0a8f0d7fa3} ProjectExplorer.Project.ActiveTarget @@ -64,14 +64,14 @@ ProjectExplorer.Project.Target.0 - Desktop Qt 5.14.2 MSVC2017 64bit - Desktop Qt 5.14.2 MSVC2017 64bit - qt.qt5.5142.win64_msvc2017_64_kit + Desktop Qt 5.14.2 MinGW 32-bit + Desktop Qt 5.14.2 MinGW 32-bit + qt.qt5.5142.win32_mingw73_kit 0 0 0 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug + D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Debug true @@ -119,7 +119,7 @@ 2 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Release + D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Release true @@ -167,7 +167,7 @@ 0 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Profile + D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Profile true @@ -287,19 +287,19 @@ 2 - Qt4ProjectManager.Qt4RunConfiguration:C:/Users/13648/Desktop/TourInChangSha/src/ChangShaTour/ChangShaTour.pro - C:/Users/13648/Desktop/TourInChangSha/src/ChangShaTour/ChangShaTour.pro + + ProjectExplorer.CustomExecutableRunConfiguration + false false true - true false false true - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug + 1 @@ -314,7 +314,7 @@ 0 0 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Debug + D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Debug true @@ -362,7 +362,7 @@ 2 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Release + D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Release true @@ -410,7 +410,7 @@ 0 - E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Profile + D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Profile true diff --git a/src/ChangShaTour/cglobal.cpp b/src/ChangShaTour/cglobal.cpp index 4f2bf5c..9b51c56 100644 --- a/src/ChangShaTour/cglobal.cpp +++ b/src/ChangShaTour/cglobal.cpp @@ -4,8 +4,97 @@ qint64 Id; QSqlDatabase meituanDb; QSqlDatabase userDb; QSqlDatabase listDb; +QMap labelToDb; + cglobal::cglobal() { } +void cglobal::labelmap() +{ + //food + labelToDb[QStringLiteral("代金券")]="food"; + labelToDb[QStringLiteral("蛋糕甜点")]="food"; + labelToDb[QStringLiteral("自助餐")]="food"; + labelToDb[QStringLiteral("小吃快餐")]="food"; + labelToDb[QStringLiteral("火锅")]="food"; + labelToDb[QStringLiteral("日韩料理")]="food"; + labelToDb[QStringLiteral("西餐")]="food"; + labelToDb[QStringLiteral("烧烤烤肉")]="food"; + labelToDb[QStringLiteral("川湘菜")]="food"; + labelToDb[QStringLiteral("东北菜")]="food"; + labelToDb[QStringLiteral("江浙菜")]="food"; + labelToDb[QStringLiteral("中式烧烤/烤串")]="food"; + labelToDb[QStringLiteral("香锅烤鱼")]="food"; + labelToDb[QStringLiteral("粤菜")]="food"; + labelToDb[QStringLiteral("西北菜")]="food"; + labelToDb[QStringLiteral("咖啡酒吧")]="food"; + labelToDb[QStringLiteral("京菜鲁菜")]="food"; + labelToDb[QStringLiteral("云贵菜")]="food"; + labelToDb[QStringLiteral("东南亚菜")]="food"; + labelToDb[QStringLiteral("海鲜")]="food"; + labelToDb[QStringLiteral("素食")]="food"; + labelToDb[QStringLiteral("台湾/客家菜")]="food"; + labelToDb[QStringLiteral("创意菜")]="food"; + labelToDb[QStringLiteral("汤/洲/炖菜")]="food"; + labelToDb[QStringLiteral("蒙餐")]="food"; + labelToDb[QStringLiteral("新疆菜")]="food"; + labelToDb[QStringLiteral("其他美食")]="food"; + labelToDb[QStringLiteral("聚餐宴请")]="food"; + //attractions + labelToDb[QStringLiteral("景点")]="attractions"; + //entertainment + labelToDb[QStringLiteral("新奇体验")]="entertainment"; + labelToDb[QStringLiteral("团建拓展")]="entertainment"; + labelToDb[QStringLiteral("足疗/按摩")]="entertainment"; + labelToDb[QStringLiteral("洗浴/汗蒸")]="entertainment"; + labelToDb[QStringLiteral("KTV")]="entertainment"; + labelToDb[QStringLiteral("酒吧")]="entertainment"; + labelToDb[QStringLiteral("电玩/游戏厅")]="entertainment"; + labelToDb[QStringLiteral("运动健身")]="entertainment"; + labelToDb[QStringLiteral("私人影院")]="entertainment"; + labelToDb[QStringLiteral("DIY手工坊")]="entertainment"; + labelToDb[QStringLiteral("密室逃脱")]="entertainment"; + labelToDb[QStringLiteral("网吧网咖")]="entertainment"; + labelToDb[QStringLiteral("茶馆")]="entertainment"; + labelToDb[QStringLiteral("轰趴馆")]="entertainment"; + labelToDb[QStringLiteral("棋牌室")]="entertainment"; + labelToDb[QStringLiteral("桌游")]="entertainment"; + labelToDb[QStringLiteral("真人CS")]="entertainment"; + labelToDb[QStringLiteral("采摘/农家乐")]="entertainment"; + labelToDb[QStringLiteral("VR")]="entertainment"; + //hotel + labelToDb[QStringLiteral("经济型酒店")]="hotel"; + labelToDb[QStringLiteral("主题酒店")]="hotel"; + labelToDb[QStringLiteral("商务酒店")]="hotel"; + labelToDb[QStringLiteral("公寓")]="hotel"; + labelToDb[QStringLiteral("豪华酒店")]="hotel"; + labelToDb[QStringLiteral("客栈")]="hotel"; + labelToDb[QStringLiteral("青年旅舍")]="hotel"; + labelToDb[QStringLiteral("度假酒店")]="hotel"; + labelToDb[QStringLiteral("别墅")]="hotel"; + labelToDb[QStringLiteral("民宿")]="hotel"; + //sport + labelToDb[QStringLiteral("滑翔伞")]="sport"; + labelToDb[QStringLiteral("赛车")]="sport"; + labelToDb[QStringLiteral("游泳")]="sport"; + labelToDb[QStringLiteral("健身中心")]="sport"; + labelToDb[QStringLiteral("羽毛球")]="sport"; + labelToDb[QStringLiteral("台球")]="sport"; + labelToDb[QStringLiteral("武术")]="sport"; + labelToDb[QStringLiteral("保龄球")]="sport"; + labelToDb[QStringLiteral("高尔夫")]="sport"; + labelToDb[QStringLiteral("篮球")]="sport"; + labelToDb[QStringLiteral("滑冰")]="sport"; + labelToDb[QStringLiteral("射击射箭")]="sport"; + labelToDb[QStringLiteral("网球")]="sport"; + labelToDb[QStringLiteral("骑马")]="sport"; + labelToDb[QStringLiteral("乒乓球")]="sport"; + labelToDb[QStringLiteral("体育球馆")]="sport"; + + //recommendlabel<<"代金券"<<"蛋糕甜点"<<"自助餐"<<"小吃快餐"<<"火锅"<<"西餐"<<"烧烤烤肉"<"川湘菜"<<"东北菜"<<"江浙菜"<<"香锅烤鱼"<<"粤菜"<<"西北菜"<<"咖啡酒吧"<<"京菜鲁菜"<<"东南亚菜"<<"海鲜"<<"素食"<<"台湾/客家菜"<<"创意菜"<<"蒙餐"<<"新疆菜"<<"其他美食"<<"聚餐宴请"; + //recommendlabel<<"经济型酒店"<<"主题酒店"<<"商务酒店"<<"公寓"<<"豪华酒店"<<"客栈"<<"青年旅社"<<"度假酒店"<<"别墅"<<"民宿"; + //recommendlabel<<"新奇体验"<<"团建扩展"<<"足疗/按摩"<<"洗浴/汗蒸"<<"KTV"<<"酒吧"<<"电玩/游戏厅"<<"运动健身"<<"私人影院"<<"DIY手工坊"<<"密室逃脱"<<"网吧网咖"<<"茶馆"<<"棋牌室"<<"轰趴馆"<<"桌游"<<"真人CS"<<"采摘/农家乐 VR",\ + //recommendlabel<<"休闲运动 游泳 健身中心 羽毛球 台球 武术 保龄球 高尔夫 篮球 滑冰 射击射箭 网球 骑马 乒乓球 体育场馆"; +} diff --git a/src/ChangShaTour/cglobal.h b/src/ChangShaTour/cglobal.h index c5d5c12..5c7a21e 100644 --- a/src/ChangShaTour/cglobal.h +++ b/src/ChangShaTour/cglobal.h @@ -1,6 +1,8 @@ #ifndef CGLOBAL_H #define CGLOBAL_H #include +#include +#include #include //全局变量定义文件,include该文件即可获得用户Id extern qint64 Id; @@ -8,11 +10,14 @@ extern qint64 Id; extern QSqlDatabase meituanDb; extern QSqlDatabase userDb; extern QSqlDatabase listDb; +extern QMap labelToDb; +extern QStringList recommendlabel; class cglobal { public: cglobal(); + void labelmap(); }; #endif // CGLOBAL_H diff --git a/src/ChangShaTour/historywidget.cpp b/src/ChangShaTour/historywidget.cpp index ac6bd48..1daefa9 100644 --- a/src/ChangShaTour/historywidget.cpp +++ b/src/ChangShaTour/historywidget.cpp @@ -8,7 +8,11 @@ HistoryWidget::HistoryWidget(QWidget *parent) : ui->setupUi(this); limit = 10; - history = new AddHistory(); + cateList.append("food"); + cateList.append("entertainment"); + cateList.append("hotel"); + cateList.append("attractions"); + cateList.append("sport"); mainLayout = new QVBoxLayout(); @@ -60,13 +64,14 @@ void HistoryWidget::getHistory() { QSqlQuery historyQuery(userDb); - historyQuery.prepare("select url from history where id=:id order by createdtime DESC"); + historyQuery.prepare("select url,cateId from history where id=:id order by createdtime DESC"); historyQuery.bindValue(":id", Id); historyQuery.exec(); while (historyQuery.next() == true) { // qDebug() << historyQuery.value("url").value(); historyList.append(historyQuery.value("url").value()); + cateIdList.append(historyQuery.value("cateId").value()); } } @@ -77,10 +82,15 @@ void HistoryWidget::getShops() for (int i = 0; i < historyList.length(); i++) { - shopQuery.prepare("select title from food where detail=:url"); - shopQuery.bindValue(":url", historyList[i]); - shopQuery.exec(); - shopQuery.next(); + for (int j = 0; j < cateList.length(); j++) + { + shopQuery.prepare("select title from " + cateList[j] + " where detail=:url"); + shopQuery.bindValue(":url", historyList[i]); + shopQuery.exec(); + shopQuery.next(); + if (shopQuery.isValid()) + break; + } // qDebug() << shopQuery.value("title").value(); nameList.append(shopQuery.value("title").value()); } @@ -92,7 +102,7 @@ void HistoryWidget::setBtns() { btnList[i]->setText(nameList[i]); // btnList[i]->setFixedSize(QSize(200,200)); - connect(btnList[i], &QPushButton::clicked, this, [=](){web->loadPage(historyList[i]); history->add(historyList[i]); web->setVisible(true); subWidget->setVisible(false);}); + connect(btnList[i], &QPushButton::clicked, this, [=](){web->loadPage(historyList[i],cateIdList[i]); web->setVisible(true); subWidget->setVisible(false);}); } } @@ -101,6 +111,7 @@ void HistoryWidget::refresh() { historyList.clear(); nameList.clear(); + cateIdList.clear(); getHistory(); getShops(); diff --git a/src/ChangShaTour/historywidget.h b/src/ChangShaTour/historywidget.h index 07f7dd1..e094c49 100644 --- a/src/ChangShaTour/historywidget.h +++ b/src/ChangShaTour/historywidget.h @@ -8,7 +8,7 @@ #include #include "webwidget.h" #include "cglobal.h" -#include "addhistory.h" + #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") @@ -38,7 +38,7 @@ private: Ui::HistoryWidget *ui; int limit; - AddHistory *history; + QStringList cateList; QVBoxLayout *mainLayout; @@ -51,6 +51,7 @@ private: QStringList historyList; //店铺url QStringList nameList; //店铺名称 + QStringList cateIdList; }; #endif // HISTORYWIDGET_H diff --git a/src/ChangShaTour/imgdownloader.cpp b/src/ChangShaTour/imgdownloader.cpp index 3cf16dc..58a6f03 100644 --- a/src/ChangShaTour/imgdownloader.cpp +++ b/src/ChangShaTour/imgdownloader.cpp @@ -7,7 +7,7 @@ imgDownloader::imgDownloader() void imgDownloader::downloadFileFromUrl(QString strUrl, QString strFilePath) { - qDebug() << strUrl << " " << strFilePath; +// qDebug() << strUrl << " " << strFilePath; QFile file; file.setFileName(strFilePath); if (!file.exists()) diff --git a/src/ChangShaTour/loginmanager.cpp b/src/ChangShaTour/loginmanager.cpp index fa0744e..e0f2631 100644 --- a/src/ChangShaTour/loginmanager.cpp +++ b/src/ChangShaTour/loginmanager.cpp @@ -13,7 +13,7 @@ bool LoginManager::loginVerify(QString account,QString password) query.next(); QString passwordget=query.value("password").toString(); Id=query.value("id").toInt(); - qDebug()<labelmap(); MainWindow w; w.show(); diff --git a/src/ChangShaTour/mainwindow.cpp b/src/ChangShaTour/mainwindow.cpp index 8f43eb2..8f601f9 100644 --- a/src/ChangShaTour/mainwindow.cpp +++ b/src/ChangShaTour/mainwindow.cpp @@ -41,44 +41,58 @@ void MainWindow::switchToMain() mainWidget = new MainWidget(); setWindowTitle("长沙游"); setCentralWidget(mainWidget); - } else { QMessageBox::warning(this,"警告","用户名或密码错误!",QMessageBox::Yes); - - return ; } - } void MainWindow::switchToRegister() { loginWidget->deleteLater(); registerWidget = new RegisterWidget(); - connect(registerWidget->getConfirmButton(), &QPushButton::clicked, this, &MainWindow::switchToLogin); + registerManager = new RegisterManager(); + connect(registerWidget->getConfirmButton(), &QPushButton::clicked, this, &MainWindow::registerConfirmSwitch); + connect(registerWidget->getCancelButton(), &QPushButton::clicked, this, &MainWindow::switchToLogin); + connect(registerWidget->getGetVerificationCodeButton(), &QPushButton::clicked, this, &MainWindow::clickGetVerificationCodeButton); setWindowTitle("注册"); setCentralWidget(registerWidget); } -void MainWindow::switchToLogin() +void MainWindow::clickGetVerificationCodeButton() { - QString emailAddress = registerWidget->getEmailAddress(); - QString password = registerWidget->getPassword(); - QString confirmPassword = registerWidget->getConfirmPassword(); + registerManager->setEmailAddress(registerWidget->getEmailAddress()); + registerManager->sendVerificationCode(); + if(registerManager->getSendEmailSuccess()) + { + registerWidget->setEmailAddressNotEditable(); + QMessageBox::information(this, "提示", "验证码已发送"); + } +} - RegisterManager * registerManager = new RegisterManager(); - if(registerManager->registerVerify(emailAddress, password, confirmPassword)) +void MainWindow::registerConfirmSwitch() +{ + registerManager->setEmailAddress(registerWidget->getEmailAddress()); + registerManager->setPassword(registerWidget->getPassword()); + registerManager->setConfirmPassword(registerWidget->getConfirmPassword()); + registerManager->setVerificationCode(registerWidget->getVerificationCode()); + if(registerManager->registerVerify()) { QMessageBox::information(this, "提示", "注册成功!"); - registerWidget->deleteLater(); - loginWidget = new LoginWidget(); - connect(loginWidget->getLoginButton(), &QPushButton::clicked, this, &MainWindow::switchToMain); - connect(loginWidget->getRegisterButton(), &QPushButton::clicked, this, &MainWindow::switchToRegister); - setWindowTitle("登陆"); - setCentralWidget(loginWidget); + switchToLogin(); } } +void MainWindow::switchToLogin() +{ + registerWidget->deleteLater(); + loginWidget = new LoginWidget(); + connect(loginWidget->getLoginButton(), &QPushButton::clicked, this, &MainWindow::switchToMain); + connect(loginWidget->getRegisterButton(), &QPushButton::clicked, this, &MainWindow::switchToRegister); + setWindowTitle("登陆"); + setCentralWidget(loginWidget); +} + MainWindow::~MainWindow() { delete ui; diff --git a/src/ChangShaTour/mainwindow.h b/src/ChangShaTour/mainwindow.h index f37ea1a..dbad5c0 100644 --- a/src/ChangShaTour/mainwindow.h +++ b/src/ChangShaTour/mainwindow.h @@ -30,11 +30,14 @@ private: LoginWidget *loginWidget; MainWidget *mainWidget; RegisterWidget *registerWidget; + RegisterManager * registerManager; public slots: void switchToMain(); void switchToRegister(); void switchToLogin(); + void registerConfirmSwitch(); + void clickGetVerificationCodeButton(); }; #endif // MAINWINDOW_H diff --git a/src/ChangShaTour/recommendwidget.cpp b/src/ChangShaTour/recommendwidget.cpp index 0f06c24..1c2e6a2 100644 --- a/src/ChangShaTour/recommendwidget.cpp +++ b/src/ChangShaTour/recommendwidget.cpp @@ -9,10 +9,12 @@ RecommendWidget::RecommendWidget(QWidget *parent) : row = 8; column = 3; - history=new AddHistory(); + page = 0; + displaynumber=row*column;//显示的数量 + labellimit = 4; web = new WebWidget(); - QSqlQuery query(meituanDb); - + idList = (int *)malloc(sizeof(int) * row * column); + algorithm(); verLayout = new QVBoxLayout(); scroll = new QScrollArea(); @@ -37,9 +39,7 @@ RecommendWidget::RecommendWidget(QWidget *parent) : } //读取数据库,获取按钮信息,初始化各List - query.prepare("select * from food limit :limit"); - query.bindValue(":limit", row * column); - queryDatabase(query); + queryDatabase(page); //设置按钮界面 setBtns(); @@ -86,36 +86,57 @@ QToolButton *RecommendWidget::setBtn(QToolButton *btn, const QString iconPath, c return btn; } -void RecommendWidget::queryDatabase(QSqlQuery query) +void RecommendWidget::queryDatabase(int page) { - query.exec(); + QSqlQuery query(meituanDb); + QMap::iterator iter=labelCount.begin(); int i=0; - while(query.next()==true&&i<(row * column)) + + while(iter!=labelCount.end()) { - i++; - QVariant id = query.value("id"); - - QVariant detail = query.value("detail"); - - QVariant frontimg = query.value("frontimg"); - - QVariant title = query.value("title"); - QVariant avgscore = query.value("avgscore"); - QVariant comments = query.value("comments"); - QVariant address = query.value("address"); - QVariant avgprice = query.value("avgprice"); - - QString name = title.value(); - QString score = QString::number(avgscore.value()); - QString commentNum = QString::number(comments.value()); - QString addr = address.value(); - QString price = QString::number(avgprice.value()); - QString text = name + "\n" + score + "分 " + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "元"; - idList.append(id.value()); - urlList.append(detail.value()); - imgList.append(frontimg.value()); - textList.append(text); + QString sqlToExec="select * from "; + sqlToExec.append(labelToDb[iter.key()]); + sqlToExec.append(" limit ?, ?"); + query.prepare(sqlToExec); + query.addBindValue(iter.value()*page); + query.addBindValue(iter.value()); + //qDebug()<(); + //qDebug() << name; + QString score = QString::number(avgscore.value()); + QString commentNum = QString::number(comments.value()); + QString addr = address.value(); + QString price = QString::number(avgprice.value()); + QString text = name + "\n" + score + "分 " + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "元"; + idList[i] = id.value(); + urlList.append(detail.value()); + imgList.append(frontimg.value()); + cateIdList.append(cateId.value()); + textList.append(text); + + } + iter++; } + + } void RecommendWidget::setBtns() @@ -127,25 +148,75 @@ void RecommendWidget::setBtns() int index = i * column + j; //下载图片到本地 // QString imgPath = ":/images" + idList[index] + ".jpg"; -// QString imgPath = "D:/kunlin/OneDrive/QT project/images/" + idList[index] + ".jpg"; + QString imgPath = "D:/kunlin/OneDrive/QT project/images/"+labelToDb[cateIdList[index]] + QString::number(idList[index]) + ".png"; // qDebug() << QDir::currentPath(); - QString imgPath = "D:/Study/SE/project/images/" + idList[index] + ".png"; +// QString imgPath = "D:/Study/SE/project/images/food" + QString::number(idList[index]) + ".png"; imgDownloader *download = new imgDownloader(); download->downloadFileFromUrl(imgList[index], imgPath); + qDebug()<loadPage(urlList[index]); history->add(urlList[index]); scroll->setVisible(false); web->setVisible(true); refreshBtn->setVisible(false);}); + connect(btnList[index], &QToolButton::clicked, this, [=](){web->loadPage(urlList[index],cateIdList[index]); scroll->setVisible(false); web->setVisible(true); refreshBtn->setVisible(false);}); } } } -//点击详情的槽函数(未用) -void RecommendWidget::loadToHistory(int index) +void RecommendWidget::algorithm() { - history->add(urlList[index]); - web->loadPage(urlList[index]); - scroll->setVisible(false); - web->setVisible(true); - refreshBtn->setVisible(false); + QSqlQuery query(userDb); + query.prepare("select cateId from recommend where userId=?");//查询,用来判断recommend是否存在当前用户,无他用 + query.addBindValue(Id); + query.exec(); + query.next(); + if(!(query.isValid())) + { + addNewUser(); + } + //得到前四名的总点击量 + query.prepare("select sum(clickCount) from (select clickCount from recommend where userId=? order by clickCount DESC limit ?) totalCount;"); + query.addBindValue(Id); + query.addBindValue(labellimit); + query.exec(); + query.next(); + int totalCount=query.value(0).toInt(); + + query.prepare("select cateId,clickCount from recommend where userId=? order by clickCount DESC limit ?;"); + query.addBindValue(Id); + query.addBindValue(labellimit); + query.exec(); + QString label; + int count; + int cnt=0;//计数,保证全部标签分配的数量和为displaynumber + int i=0; + while(query.next()) + { + i+=1; + label=query.value(0).toString(); + count=query.value(1).toInt(); + if(i==labellimit) + labelCount[label]=displaynumber-cnt; + else + { + labelCount[label]=count*displaynumber/totalCount; + cnt+=labelCount[label]; + } + qDebug()<::iterator iter=labelToDb.begin(); + //int totalsize=recommendlabel.size(); + //int i; + QSqlQuery query(userDb); + while(iter!=labelToDb.end()) + { + query.prepare("insert into recommend(userId,cateId)values(?,?)"); + query.addBindValue(Id); + query.addBindValue(iter.key()); + query.exec(); + iter++; + } } @@ -160,19 +231,17 @@ void RecommendWidget::refresh() { rollTop(); - idList.clear(); urlList.clear(); imgList.clear(); textList.clear(); + cateIdList.clear(); - QSqlQuery query(meituanDb); // query.exec("select * from csmeishi limit 2"); - query.prepare("select * from food limit 36, :limit"); - query.bindValue(":limit", row * column); - queryDatabase(query); + page+=1; + queryDatabase(page); setBtns(); - qDebug()<<"refreshed"; + //qDebug()<<"refreshed"; } void RecommendWidget::rollTop() diff --git a/src/ChangShaTour/recommendwidget.h b/src/ChangShaTour/recommendwidget.h index 9ec1990..f736a6f 100644 --- a/src/ChangShaTour/recommendwidget.h +++ b/src/ChangShaTour/recommendwidget.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -16,7 +17,7 @@ #include "webwidget.h" #include "cglobal.h" #include "imgdownloader.h" -#include "addhistory.h" + #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") @@ -36,22 +37,28 @@ public: ~RecommendWidget(); QToolButton *setBtn(QToolButton *btn, const QString iconPath, const QString text); - void queryDatabase(QSqlQuery query); + void queryDatabase(int page); void setBtns(); void refresh(); void webReturn(); void rollTop(); + void algorithm(); + void addNewUser(); private: Ui::RecommendWidget *ui; int row; int column; + int labellimit; + int page;//页数 + int displaynumber; QStringList urlList; QStringList imgList; QStringList textList; - QStringList idList; + QStringList cateIdList; + int *idList; WebWidget *web; QString currentUrl; @@ -65,9 +72,9 @@ private: QPushButton *refreshBtn; QToolButton **btnList; - AddHistory * history; + + QMap labelCount; private slots: - void loadToHistory(int index); signals: }; diff --git a/src/ChangShaTour/registermanager.cpp b/src/ChangShaTour/registermanager.cpp index 52fe6cd..906cb3b 100644 --- a/src/ChangShaTour/registermanager.cpp +++ b/src/ChangShaTour/registermanager.cpp @@ -2,60 +2,155 @@ RegisterManager::RegisterManager() { + this->sendEmailSuccess = false; +} +void RegisterManager::generateRandomNumber() +{ + this->randomNumber = ""; + qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime())); + for(int i = 0; i < 6; i++) + { + int singleNumber = qrand() % 10; + this->randomNumber += QString::number(singleNumber); + } } -bool RegisterManager::registerVerify(QString emailAddress, QString password, QString confirmPassword) +void RegisterManager::sendVerificationCode() { - if(emailAddress == "") + if(checkEmailAddress()) { - QMessageBox::warning(NULL, "警告", "请输入邮箱地址!", QMessageBox::Yes); - return false; + Smtp * smtp = new Smtp("mkl1364800211@163.com", "NRTZOQMCLDKOEBME"); + generateRandomNumber(); + smtp->send((this->emailAddress).toUtf8(), "验证码", this->randomNumber); + this->sendEmailSuccess = true; } - if(password == "") +} + +bool RegisterManager::getSendEmailSuccess() +{ + return sendEmailSuccess; +} + +bool RegisterManager::checkEmailAddress() +{ + if(this->emailAddress == "") { - QMessageBox::warning(NULL, "警告", "请输入密码!", QMessageBox::Yes); + QMessageBox::warning(NULL, "警告", "请输入邮箱地址!", QMessageBox::Yes); return false; } - if(confirmPassword == "") + + QRegExp pattern("([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)"); + if(!pattern.exactMatch(this->emailAddress)) { - QMessageBox::warning(NULL, "警告", "请确认密码!", QMessageBox::Yes); + QMessageBox::warning(NULL, "警告", "输入的邮箱地址不合法,请重新输入!", QMessageBox::Yes); return false; } QSqlQuery query(userDb); query.prepare("select password from account where email=?"); - query.addBindValue(emailAddress); + query.addBindValue(this->emailAddress); query.exec(); - if(query.next()) { QMessageBox::warning(NULL, "警告", "该邮箱已被注册,请更换邮箱后重试!", QMessageBox::Yes); return false; } - if(password.length() < 6) + return true; +} + +bool RegisterManager::checkPassword() +{ + if(this->password == "") + { + QMessageBox::warning(NULL, "警告", "请输入密码!", QMessageBox::Yes); + return false; + } + + if(this->password.length() < 6) { QMessageBox::warning(NULL, "警告", "密码过短,请输入长度为6~12位的密码!", QMessageBox::Yes); return false; } - if(password.length() > 12) + + if(this->password.length() > 12) { QMessageBox::warning(NULL, "警告", "密码过长,请输入长度为6~12位的密码!", QMessageBox::Yes); return false; } - if(QString::compare(password, confirmPassword, Qt::CaseSensitive)) + + return true; +} + +bool RegisterManager::checkConfirmPassword() +{ + if(this->confirmPassword == "") + { + QMessageBox::warning(NULL, "警告", "请确认密码!", QMessageBox::Yes); + return false; + } + + if(QString::compare(password, this->confirmPassword, Qt::CaseSensitive)) { QMessageBox::warning(NULL, "警告", "确认密码错误,请检查无误后重试!", QMessageBox::Yes); return false; } + return true; +} - query.prepare("INSERT INTO account(email, password) " - "VALUES (:email, :password)"); - query.bindValue(":email", emailAddress); - query.bindValue(":password", password); - query.exec(); +bool RegisterManager::checkVerificationCode() +{ + if(this->verificationCode == "") + { + QMessageBox::warning(NULL, "警告", "请输入验证码!", QMessageBox::Yes); + return false; + } + + if(QString::compare(this->randomNumber, this->verificationCode)) + { + QMessageBox::warning(NULL, "警告", "验证码错误,请检查无误后重试!", QMessageBox::Yes); + return false; + } return true; } + + +bool RegisterManager::registerVerify() +{ + if(checkEmailAddress() && checkPassword() && checkConfirmPassword() && checkVerificationCode()) + { + QSqlQuery query(userDb); + query.prepare("INSERT INTO account(email, password) " + "VALUES (:email, :password)"); + query.bindValue(":email", emailAddress); + query.bindValue(":password", password); + query.exec(); + + return true; + } + + return false; +} + +void RegisterManager::setEmailAddress(QString emailAddress) +{ + this->emailAddress = emailAddress; +} + +void RegisterManager::setPassword(QString password) +{ + this->password = password; +} + +void RegisterManager::setConfirmPassword(QString confirmPassword) +{ + this->confirmPassword = confirmPassword; +} + +void RegisterManager::setVerificationCode(QString verificationCode) +{ + this->verificationCode = verificationCode; +} diff --git a/src/ChangShaTour/registermanager.h b/src/ChangShaTour/registermanager.h index ae8a9d6..396de81 100644 --- a/src/ChangShaTour/registermanager.h +++ b/src/ChangShaTour/registermanager.h @@ -1,10 +1,14 @@ #ifndef REGISTERMANAGER_H #define REGISTERMANAGER_H -#include "cglobal.h" #include #include #include +#include +#include +#include +#include "cglobal.h" +#include "smtp.h" #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") @@ -14,10 +18,30 @@ class RegisterManager { public: RegisterManager(); - bool registerVerify(QString emailAddress, QString password, QString confirmPassword); -private: + void generateRandomNumber(); + void sendVerificationCode(); + + bool checkEmailAddress(); + bool checkPassword(); + bool checkConfirmPassword(); + bool checkVerificationCode(); + bool registerVerify(); + void setEmailAddress(QString emailAddress); + void setPassword(QString password); + void setConfirmPassword(QString confirmPassword); + void setVerificationCode(QString verificationCode); + + bool getSendEmailSuccess(); + +private: + QString emailAddress; + QString password; + QString confirmPassword; + QString verificationCode; + QString randomNumber; + bool sendEmailSuccess; }; #endif // REGISTERMANAGER_H diff --git a/src/ChangShaTour/registerwidget.cpp b/src/ChangShaTour/registerwidget.cpp index 3af2fb5..306f0ef 100644 --- a/src/ChangShaTour/registerwidget.cpp +++ b/src/ChangShaTour/registerwidget.cpp @@ -11,15 +11,18 @@ RegisterWidget::RegisterWidget(QWidget *parent) : emailAddressHorizontalLayout = new QHBoxLayout(); passwordHorizontalLayout = new QHBoxLayout(); confirmPasswordHorizontalLayout = new QHBoxLayout(); - confirmHorizontalLayout = new QHBoxLayout(); + verificationCodeHorizontalLayout = new QHBoxLayout(); + optionHorizontalLayout = new QHBoxLayout(); emailAddressLabel = new QLabel("邮箱地址"); emailAddressLineEdit = new QLineEdit(); + emailAddressLineEdit->setPlaceholderText("请输入qq邮箱地址或163邮箱地址"); emailAddressHorizontalLayout->addWidget(emailAddressLabel); emailAddressHorizontalLayout->addWidget(emailAddressLineEdit); passwordLabel = new QLabel("密码"); passwordLineEdit = new QLineEdit(); + passwordLineEdit->setPlaceholderText("请输入长度为6~12位的密码"); passwordLineEdit->setEchoMode(QLineEdit::Password); passwordHorizontalLayout->addWidget(passwordLabel); passwordHorizontalLayout->addWidget(passwordLineEdit); @@ -30,15 +33,31 @@ RegisterWidget::RegisterWidget(QWidget *parent) : confirmPasswordHorizontalLayout->addWidget(confirmPasswordLabel); confirmPasswordHorizontalLayout->addWidget(confirmPasswordLineEdit); + verificationCodeLabel = new QLabel("验证码"); + verificationCodeLineEdit = new QLineEdit(); + getVerificationCodeButon = new QPushButton("点击获取验证码"); + verificationCodeHorizontalLayout->addWidget(verificationCodeLabel); + verificationCodeHorizontalLayout->addWidget(verificationCodeLineEdit); + verificationCodeHorizontalLayout->addWidget(getVerificationCodeButon); + confirmButton = new QPushButton("确认"); - confirmHorizontalLayout->addWidget(confirmButton); + cancelButton = new QPushButton("取消"); + optionHorizontalLayout->addWidget(confirmButton); + optionHorizontalLayout->addWidget(cancelButton); vertiacalLayout->addLayout(emailAddressHorizontalLayout); vertiacalLayout->addLayout(passwordHorizontalLayout); vertiacalLayout->addLayout(confirmPasswordHorizontalLayout); - vertiacalLayout->addLayout(confirmHorizontalLayout); + vertiacalLayout->addLayout(verificationCodeHorizontalLayout); + vertiacalLayout->addLayout(optionHorizontalLayout); this->setLayout(vertiacalLayout); + +} + +QPushButton * RegisterWidget::getGetVerificationCodeButton() +{ + return getVerificationCodeButon; } QPushButton * RegisterWidget::getConfirmButton() @@ -46,6 +65,11 @@ QPushButton * RegisterWidget::getConfirmButton() return confirmButton; } +QPushButton * RegisterWidget::getCancelButton() +{ + return cancelButton; +} + QString RegisterWidget::getEmailAddress() { return emailAddressLineEdit->text(); @@ -61,6 +85,16 @@ QString RegisterWidget::getConfirmPassword() return confirmPasswordLineEdit->text(); } +QString RegisterWidget::getVerificationCode() +{ + return verificationCodeLineEdit->text(); +} + +void RegisterWidget::setEmailAddressNotEditable() +{ + emailAddressLineEdit->setEnabled(false); +} + RegisterWidget::~RegisterWidget() { delete ui; diff --git a/src/ChangShaTour/registerwidget.h b/src/ChangShaTour/registerwidget.h index 419a71b..3f83c06 100644 --- a/src/ChangShaTour/registerwidget.h +++ b/src/ChangShaTour/registerwidget.h @@ -7,7 +7,7 @@ #include #include #include -#include "loginwidget.h" +#include "registermanager.h" #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") @@ -25,10 +25,17 @@ public: explicit RegisterWidget(QWidget *parent = nullptr); ~RegisterWidget(); + QPushButton * getGetVerificationCodeButton(); QPushButton * getConfirmButton(); + QPushButton * getCancelButton(); + QString getEmailAddress(); QString getPassword(); QString getConfirmPassword(); + QString getVerificationCode(); + + void setEmailAddressNotEditable(); + private: Ui::RegisterWidget *ui; @@ -37,17 +44,23 @@ private: QHBoxLayout * emailAddressHorizontalLayout; QHBoxLayout * passwordHorizontalLayout; QHBoxLayout * confirmPasswordHorizontalLayout; - QHBoxLayout * confirmHorizontalLayout; + QHBoxLayout * optionHorizontalLayout; + QHBoxLayout * verificationCodeHorizontalLayout; QLabel * emailAddressLabel; QLabel * passwordLabel; QLabel * confirmPasswordLabel; + QLabel * verificationCodeLabel; QLineEdit * emailAddressLineEdit; QLineEdit * passwordLineEdit; QLineEdit * confirmPasswordLineEdit; + QLineEdit * verificationCodeLineEdit; + QPushButton * getVerificationCodeButon; QPushButton * confirmButton; + QPushButton * cancelButton; + }; #endif // REGISTERWIDGET_H diff --git a/src/ChangShaTour/searchresultwidget.cpp b/src/ChangShaTour/searchresultwidget.cpp index 38e417c..d3ec54c 100644 --- a/src/ChangShaTour/searchresultwidget.cpp +++ b/src/ChangShaTour/searchresultwidget.cpp @@ -3,7 +3,13 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) : QWidget(parent) { showLimit = 15; - history = new AddHistory(); + cateList.append("food"); + cateList.append("entertainment"); + cateList.append("hotel"); + cateList.append("attractions"); + cateList.append("sport"); + lengthList = (int *)malloc(sizeof(int) * cateList.length()); + idList = (int *)malloc(sizeof(int) * showLimit); mainLayout = new QVBoxLayout(); @@ -31,7 +37,6 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) : QWidget(parent) up = new QPushButton("上一页"); down = new QPushButton("下一页"); - //设置布局 this->setLayout(mainLayout); @@ -80,25 +85,28 @@ void SearchResultWidget::getTotalNum() //查询条目数 QSqlQuery query(meituanDb); - query.prepare("select count(*) as num from food where title like :segment"); - query.bindValue(":segment", "%" + segment + "%"); - query.exec(); - query.next(); - qDebug() << "totalNum:" << query.value("num") ; - totalNum = query.value("num").value(); + int length = cateList.length(); + for (int i = 0; i < length; i++) + { + query.prepare("select count(*) as num from " + cateList[i] + " where title like :segment"); + query.bindValue(":segment", "%" + segment + "%"); + query.exec(); + query.next(); + qDebug() << cateList[i] + " totalNum:" << query.value("num"); + lengthList[i] = query.value("num").value(); + totalNum += query.value("num").value(); + } pageNum = (totalNum + showLimit - 1)/showLimit; - qDebug() << "pageNum" << pageNum; } void SearchResultWidget::queryDatabase(QSqlQuery query) { query.exec(); - int i=0; + int i = currentHead; while(query.next()==true && i < showLimit) { - i++; QVariant id = query.value("id"); QVariant detail = query.value("detail"); @@ -109,21 +117,23 @@ void SearchResultWidget::queryDatabase(QSqlQuery query) QVariant avgscore = query.value("avgscore"); QVariant comments = query.value("comments"); QVariant address = query.value("address"); - QVariant avgprice = query.value("avgprice"); + QVariant cateId = query.value("cateId"); +// QVariant avgprice = query.value("avgprice"); QString name = title.value(); QString score = QString::number(avgscore.value()); QString commentNum = QString::number(comments.value()); QString addr = address.value(); - QString price = QString::number(avgprice.value()); - QString text = name + "\n" + score + "分 " + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "元"; - idList.append(id.value()); +// QString price = QString::number(avgprice.value()); + QString text = name + "\n" + score + "分 " + commentNum + "条评论\n" + addr + "\n";// + "人均" + price + "元"; + idList[i] = id.value(); urlList.append(detail.value()); imgList.append(frontimg.value()); + cateIdList.append(cateId.value()); textList.append(text); + i++; } - currentNum = idList.length(); - qDebug() << "currentNum:" << currentNum; + currentQueryLength = i - currentHead; } QToolButton *SearchResultWidget::setBtn(QToolButton *btn, const QString iconPath, const QString text) @@ -140,18 +150,21 @@ QToolButton *SearchResultWidget::setBtn(QToolButton *btn, const QString iconPath void SearchResultWidget::setBtns() { - int i = 0; - for (i; i < currentNum; i++) + int i = currentHead; +// qDebug() << "currentHead:" << currentHead; +// qDebug() << "currentQueryLength:" << currentQueryLength; + for (i; i < currentHead + currentQueryLength; i++) { int index = i; //下载图片到本地 - QString imgPath = "D:/Study/SE/project/images/" + idList[index] + ".png"; + QString imgPath = "D:/Study/SE/project/images/" + cateList[currentCate] + QString::number(idList[index]) + ".png"; imgDownloader *download = new imgDownloader(); download->downloadFileFromUrl(imgList[index], imgPath); btnList[index] = setBtn(btnList[index], imgPath, textList[index]); + qDebug() << "info:" << cateList[currentCate] << idList[index] << urlList[index] << imgList[index]; // btnList[index]->setVisible(true); disconnect(btnList[index], 0, 0, 0); - connect(btnList[index], &QToolButton::clicked, this, [=](){web->loadPage(urlList[index]); history->add(urlList[index]); subWidget->setVisible(false); web->setVisible(true); nullWidget->setVisible(false);}); + connect(btnList[index], &QToolButton::clicked, this, [=](){web->loadPage(urlList[index],cateIdList[index]); subWidget->setVisible(false); web->setVisible(true); nullWidget->setVisible(false);}); } for (i; i < showLimit; i++) { @@ -160,6 +173,8 @@ void SearchResultWidget::setBtns() // btnList[index]->setVisible(false); disconnect(btnList[index], 0, 0, 0); } + offset += currentQueryLength; + currentHead += currentQueryLength; } void SearchResultWidget::querySet() @@ -167,33 +182,52 @@ void SearchResultWidget::querySet() rollTop(); //重置存储查询信息的列表 - idList.clear(); urlList.clear(); imgList.clear(); textList.clear(); + currentHead = 0; + currentQueryLength = 0; - //查询数据 - QSqlQuery query(meituanDb); + qDebug() << "currentPage:" << currentPage; - query.prepare("select * from food where title like :segment limit :offset , :showLimit"); - query.bindValue(":segment", "%" + segment + "%"); - query.bindValue(":offset", (currentPage - 1) * showLimit); - qDebug() << "offset:" << (currentPage - 1) * showLimit; - query.bindValue(":showLimit", showLimit); - qDebug() << "showLimit:" << showLimit; - queryDatabase(query); - qDebug() << "query success"; + QSqlQuery query(meituanDb); + while (currentHead < showLimit) + { + //判断是否换表 + if (offset >= lengthList[currentCate]) + { + currentCate += 1; + offset = 0; + if (currentCate >= 3) + break; + } + //查询数据 + query.prepare("select * from " + cateList[currentCate] + " where title like :segment limit :offset , :showLimit"); + query.bindValue(":segment", "%" + segment + "%"); + query.bindValue(":offset", offset); + qDebug() << "currentCate:" << currentCate; +// qDebug() << "offset:" << offset; + query.bindValue(":showLimit", showLimit); + queryDatabase(query); +// qDebug() << "query success"; + //设置按钮 + setBtns(); +// qDebug() << "set buttons success"; + } - //设置按钮 - setBtns(); - qDebug() << "set buttons success"; } void SearchResultWidget::showResult() { + totalNum = 0; + pageNum = 0; getTotalNum(); + qDebug() << "totalNum:" << totalNum; + qDebug() << "pageNum:" << pageNum; currentPage = 1; + currentCate = 0; + offset = 0; if (totalNum) { querySet(); @@ -222,6 +256,7 @@ void SearchResultWidget::pageUp() if (currentPage < 1) { currentPage = 1; + qDebug("这是第一页"); } else { @@ -236,6 +271,7 @@ void SearchResultWidget::pageDown() if (currentPage > pageNum) { currentPage = pageNum; + qDebug("已经是最后一页了!"); } else { diff --git a/src/ChangShaTour/searchresultwidget.h b/src/ChangShaTour/searchresultwidget.h index 0ad529e..9988d9c 100644 --- a/src/ChangShaTour/searchresultwidget.h +++ b/src/ChangShaTour/searchresultwidget.h @@ -12,8 +12,7 @@ #include #include #include -#include "addhistory.h" -#include "cglobal.h" +#include "databaseconnector.h" #include "webwidget.h" #include "imgdownloader.h" @@ -47,14 +46,19 @@ private: QStringList urlList; QStringList imgList; QStringList textList; - QStringList idList; - AddHistory *history; + QStringList cateIdList; + int *idList; + QStringList cateList; int totalNum; + int offset; + int *lengthList; int pageNum; int showLimit; int currentPage; - int currentNum; + int currentHead; + int currentQueryLength; + int currentCate; QVBoxLayout *mainLayout; diff --git a/src/ChangShaTour/smtp.cpp b/src/ChangShaTour/smtp.cpp new file mode 100644 index 0000000..8d789b1 --- /dev/null +++ b/src/ChangShaTour/smtp.cpp @@ -0,0 +1,75 @@ +#include "smtp.h" +#include +Smtp::Smtp(QByteArray senderAddress,QByteArray senderPassword) +{ + this->senderAddress = senderAddress; + this->senderPassword = senderPassword; +} + +void Smtp::send(QByteArray reciverAddress,QString subject,QString content) +{ + QByteArray reciveData; + QByteArray senderAddress = this->senderAddress; + QByteArray senderPassword = this->senderPassword; + + QTcpSocket * clientSocket = new QTcpSocket(); + clientSocket->connectToHost("smtp.163.com", 25, QTcpSocket::ReadWrite); + clientSocket->waitForConnected(1000); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + clientSocket->write("HELO smtp.163.com\r\n"); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + clientSocket->write("AUTH LOGIN\r\n"); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + qDebug() << "senderAddress:"<< senderAddress; + clientSocket->write(senderAddress.toBase64().append("\r\n")); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + qDebug() << "password:" << senderPassword; + clientSocket->write(senderPassword.toBase64().append("\r\n")); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + clientSocket->write("mail from:<" + senderAddress + ">\r\n"); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + clientSocket->write("rcpt to:<" + reciverAddress + ">\r\n"); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + clientSocket->write("data\r\n"); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + clientSocket->write("from:" + senderAddress + "\r\n"); + clientSocket->write("to:" + reciverAddress + "\r\n"); + clientSocket->write("subject:" + subject.toLocal8Bit() + "\r\n"); + clientSocket->write("\r\n"); + clientSocket->write(content.toLocal8Bit() + "\r\n"); + clientSocket->write(".\r\n"); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + clientSocket->write("quit\r\n"); + clientSocket->waitForReadyRead(1000); + reciveData = clientSocket->readAll(); + qDebug() << reciveData; + + delete clientSocket; +} diff --git a/src/ChangShaTour/smtp.h b/src/ChangShaTour/smtp.h new file mode 100644 index 0000000..592b679 --- /dev/null +++ b/src/ChangShaTour/smtp.h @@ -0,0 +1,24 @@ +#ifndef SMTH_H +#define SMTH_H + +#include +#include +#include + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + +class Smtp +{ +public: + Smtp(QByteArray senderAddress, QByteArray senderPassword); + + void send(QByteArray reciverAddress, QString subject, QString content); + +private: + QTcpSocket * clientSocket; + QByteArray senderAddress; + QByteArray senderPassword; +}; +#endif // SMTH_H diff --git a/src/ChangShaTour/sortwidget.cpp b/src/ChangShaTour/sortwidget.cpp index 8c8917e..4688c02 100644 --- a/src/ChangShaTour/sortwidget.cpp +++ b/src/ChangShaTour/sortwidget.cpp @@ -13,13 +13,9 @@ SortWidget::SortWidget(QWidget *parent) : setLayout(verLayout); foodChoices = new QWidget(); hotelChoices = new QWidget(); - houseChoices = new QWidget(); entertainmentChoices = new QWidget(); - serviceChoices = new QWidget(); - beautyChoices = new QWidget(); - weddingChoices = new QWidget(); - parentChildChoices = new QWidget(); sportsChoices = new QWidget(); + attractions = new QWidget(); funcWidget = new QWidget(); scroll = new QScrollArea(); subWidget = new QWidget(); @@ -88,6 +84,7 @@ void SortWidget::queryDatabase(QSqlQuery query, QString statement) urlList.clear(); imgList.clear(); textList.clear(); + cateIdList.clear(); size = 0; while(query.next() == true && size < row) { @@ -103,6 +100,7 @@ void SortWidget::queryDatabase(QSqlQuery query, QString statement) QVariant comments = query.value("comments"); QVariant address = query.value("address"); QVariant avgprice = query.value("avgprice"); + QVariant cateId = query.value("cateId"); QString name = title.value(); QString score = QString::number(avgscore.value()); @@ -113,6 +111,7 @@ void SortWidget::queryDatabase(QSqlQuery query, QString statement) idList.append(id.value()); urlList.append(detail.value()); imgList.append(frontimg.value()); + cateIdList.append(cateId.value()); textList.append(text); } } @@ -123,7 +122,7 @@ void SortWidget::setBtns() { int index = i; btnList[index] = setBtn(btnList[index], textList[index]); - connect(btnList[index], &QToolButton::clicked, this, [=](){web->loadPage((const QString)urlList[index]); scroll->setVisible(false); funcWidget->setVisible(false); pageWidget->setVisible(false); InvisibleAllSubScreenBtns(); web->setVisible(true);}); + connect(btnList[index], &QToolButton::clicked, this, [=](){web->loadPage((const QString)urlList[index],cateIdList[index]); scroll->setVisible(false); funcWidget->setVisible(false); pageWidget->setVisible(false); InvisibleAllSubScreenBtns(); web->setVisible(true);}); } } @@ -138,7 +137,7 @@ void SortWidget::webReturn() void SortWidget::setScreenBtns() { - QString str = "美食 酒店 民宿 休闲娱乐/KTV 生活服务 丽人/美发/医学美容 结婚/婚纱摄影/婚宴 亲子/儿童乐园/幼教 运动健身/健身中心"; + QString str = "美食 酒店 休闲娱乐/KTV 运动健身/健身中心 景点"; QStringList strList = str.split(" "); QHBoxLayout * funcLine = new QHBoxLayout(); int nColCnt = 0; @@ -186,19 +185,15 @@ void SortWidget::initSubScreenBtns(QWidget * choices, QString str) void SortWidget::initAllSubScreenBtns() { - const int size = 9; - QWidget * choices[size] = {foodChoices, hotelChoices, houseChoices, entertainmentChoices, serviceChoices, beautyChoices, weddingChoices, parentChildChoices, sportsChoices}; - QString str[size] = {"代金券 蛋糕甜点 火锅 自助餐 小吃快餐 日韩料理 西餐 聚餐宴请 烧烤烤肉 东北菜 川湘菜 江浙菜 香锅烤鱼 粤港菜 中式烧烤/烤串 西北菜 咖啡酒吧茶馆 云贵菜 东南亚菜 海鲜 素食 台湾/客家菜 创意菜汤/粥/炖菜 蒙餐 新疆菜 其他美食 京菜鲁菜", \ - "经济型 舒适/三星 高档/四星 豪华/五星",\ - "复式Loft 别墅",\ - "足疗按摩 洗浴/汗蒸 酒吧 密室逃脱 轰趴馆 茶馆 私人影院 DIY手工坊 采摘/农家乐 网吧网咖 游乐游艺 VR 桌面游戏 真人CS 棋牌室 其他玩乐 KTV",\ - "衣物/皮具洗护 家政 搬家运输 送水 充值缴费 服饰/鞋包养护 开锁换锁 居家维修 管道疏通 家电维修清洗 电脑维修 手机维修 证件照/肖像摄影 照片冲印/图文文印 商务服务/法律服务 文化传媒机构 成人用品/情趣用品",\ - "美发 美甲美睫 美容美体 医学美容 瑜伽舞蹈 瘦身纤体 韩式定妆 祛痘 纹身 化妆品 养发",\ - "婚纱摄影 旅拍 个性写真 婚宴 婚庆公司 婚纱礼服 西服定制 婚戒首饰 婚车租赁 司仪主持 彩妆造型 婚礼跟拍 婚礼小礼品 更多婚礼服务",\ - "婴儿游泳 其它亲子游乐 早教中心 少儿英语 智力开发 托班/幼儿园 幼儿教育 其他幼儿教育 儿童摄影 孕妇写真 上门拍 其他亲子摄影 月子会所 产后恢复 妇幼医院 孕产用品 开奶催乳 月嫂 亲子购物 宝宝派对 亲子服务",\ - "健身中心 武术场馆 游泳馆 羽毛球馆 溜冰场 射箭馆 篮球场 网球馆 台球馆 乒乓球 足球场 高尔夫场 保龄球馆 体育场馆 马术场 壁球馆 更多运动",\ + const int size = 5; + QWidget * choices[size] = {foodChoices, hotelChoices, entertainmentChoices, sportsChoices, attractions}; + QString str[size] = {"代金券 蛋糕甜点 自助餐 小吃快餐 火锅 西餐 烧烤烤肉 川湘菜 东北菜 江浙菜 香锅烤鱼 粤菜 西北菜 咖啡酒吧 京菜鲁菜 东南亚菜 海鲜 素食 台湾/客家菜 创意菜 蒙餐 新疆菜 其他美食 聚餐宴请", \ + "经济型酒店 主题酒店 商务酒店 公寓 豪华酒店 客栈 青年旅社 度假酒店 别墅 民宿",\ + "新奇体验 团建扩展 足疗/按摩 洗浴/汗蒸 KTV 酒吧 电玩/游戏厅 运动健身 私人影院 DIY手工坊 密室逃脱 网吧网咖 茶馆 棋牌室 轰趴馆 桌游 真人CS 采摘/农家乐 VR",\ + "休闲运动 游泳 健身中心 羽毛球 台球 武术 保龄球 高尔夫 篮球 滑冰 射击射箭 网球 骑马 乒乓球 体育场馆",\ + ""\ }; - for ( int i = 0; i < size; i++ ) + for ( int i = 0; i < size - 1; i++ ) { initSubScreenBtns(choices[i], str[i]); verLayout->addWidget(choices[i]); @@ -208,8 +203,8 @@ void SortWidget::initAllSubScreenBtns() void SortWidget::InvisibleAllSubScreenBtns() { - const int size = 9; - QWidget * choices[size] = {foodChoices, hotelChoices, houseChoices, entertainmentChoices, serviceChoices, beautyChoices, weddingChoices, parentChildChoices, sportsChoices}; + const int size = 5; + QWidget * choices[size] = {foodChoices, hotelChoices, entertainmentChoices, sportsChoices, attractions}; for ( int i = 0; i < size; i++ ) choices[i]->setVisible(false); } @@ -218,21 +213,11 @@ void SortWidget::ShowSubScreenBtn() { if ( screenCode == "food" ) foodChoices->setVisible(true); - else if ( screenCode == "csjiudian" ) + else if ( screenCode == "hotel" ) hotelChoices->setVisible(true); - else if ( screenCode == "csjiudian" ) - houseChoices->setVisible(true); - else if ( screenCode == "csjiudian" ) + else if ( screenCode == "entertainment" ) entertainmentChoices->setVisible(true); - else if ( screenCode == "csjiudian" ) - serviceChoices->setVisible(true); - else if ( screenCode == "csjiudian" ) - beautyChoices->setVisible(true); - else if ( screenCode == "csjiudian" ) - weddingChoices->setVisible(true); - else if ( screenCode == "csjiudian" ) - parentChildChoices->setVisible(true); - else if ( screenCode == "csjiudian" ) + else if ( screenCode == "sport" ) sportsChoices->setVisible(true); } @@ -247,42 +232,22 @@ void SortWidget::setSubScreenBtns(QString str) else if ( str == "酒店" ) { hotelChoices->setVisible(true); - screenCode = "csjiudian"; - } - else if ( str == "民宿" ) - { - houseChoices->setVisible(true); - screenCode = "csjiudian"; + screenCode = "hotel"; } else if ( str == "休闲娱乐/KTV" ) { entertainmentChoices->setVisible(true); - screenCode = "csjiudian"; - } - else if ( str == "生活服务" ) - { - serviceChoices->setVisible(true); - screenCode = "csjiudian"; - } - else if ( str == "丽人/美发/医学美容" ) - { - beautyChoices->setVisible(true); - screenCode = "csjiudian"; - } - else if ( str == "结婚/婚纱摄影/婚宴" ) - { - weddingChoices->setVisible(true); - screenCode = "csjiudian"; - } - else if ( str == "亲子/儿童乐园/幼教" ) - { - parentChildChoices->setVisible(true); - screenCode = "csjiudian"; + screenCode = "entertainment"; } else if ( str == "运动健身/健身中心" ) { sportsChoices->setVisible(true); - screenCode = "csjiudian"; + screenCode = "sport"; + } + else if ( str == "景点" ) + { + //attractions->setVisible(true); + screenCode = "attractions"; } screenStr = str; Screen(screenStr); @@ -293,7 +258,7 @@ void SortWidget::Screen(QString str) QSqlQuery query(meituanDb); //读取数据库,获取按钮信息,初始化各List screenStr = str; - if ( str == "美食" || str == "酒店" || str == "民宿" || str == "休闲娱乐/KTV" || str == "生活服务" || str == "丽人/美发/医学美容" || str == "结婚/婚纱摄影/婚宴" || str == "亲子/儿童乐园/幼教" || str == "运动健身/健身中心" ) + if ( str == "美食" || str == "酒店" || str == "休闲娱乐/KTV" || str == "运动健身/健身中心" || str == "景点" ) queryDatabase(query, "select * from " + screenCode + " limit " + QString::number(row)); else queryDatabase(query, "select * from " + screenCode + " where cateId=\"" + str + "\" limit " + QString::number(row)); @@ -339,7 +304,7 @@ void SortWidget::setPageMaxNumber(QString str) { QSqlQuery query(meituanDb); //读取数据库,获取按钮信息,初始化各List - if ( str == "美食" || str == "酒店" || str == "民宿" || str == "休闲娱乐/KTV" || str == "生活服务" || str == "丽人/美发/医学美容" || str == "结婚/婚纱摄影/婚宴" || str == "亲子/儿童乐园/幼教" || str == "运动健身/健身中心" ) + if ( str == "美食" || str == "酒店" || str == "休闲娱乐/KTV" || str == "运动健身/健身中心" || str == "景点" ) query.exec("select count(1) from " + screenCode); else query.exec("select count(1) from " + screenCode + " where cateId = \"" + str + "\""); @@ -352,7 +317,7 @@ void SortWidget::nextPage() { QSqlQuery query(meituanDb); //读取数据库,获取按钮信息,初始化各List - if ( screenStr == "美食" || screenStr == "酒店" || screenStr == "民宿" || screenStr == "休闲娱乐/KTV" || screenStr == "生活服务" || screenStr == "丽人/美发/医学美容" || screenStr == "结婚/婚纱摄影/婚宴" || screenStr == "亲子/儿童乐园/幼教" || screenStr == "运动健身/健身中心" ) + if ( screenStr == "美食" || screenStr == "酒店" || screenStr == "休闲娱乐/KTV" || screenStr == "运动健身/健身中心" || screenStr == "景点" ) queryDatabase(query, "select * from " + screenCode + " limit " + QString::number(row * (pageNumber + 1)) + "," + QString::number(row)); else queryDatabase(query, "select * from " + screenCode + " where cateId=\"" + screenStr + "\" limit " + QString::number(row * (pageNumber + 1)) + "," + QString::number(row)); @@ -386,7 +351,7 @@ void SortWidget::backPage() { QSqlQuery query(meituanDb); //读取数据库,获取按钮信息,初始化各List - if ( screenStr == "美食" || screenStr == "酒店" || screenStr == "民宿" || screenStr == "休闲娱乐/KTV" || screenStr == "生活服务" || screenStr == "丽人/美发/医学美容" || screenStr == "结婚/婚纱摄影/婚宴" || screenStr == "亲子/儿童乐园/幼教" || screenStr == "运动健身/健身中心" ) + if ( screenStr == "美食" || screenStr == "酒店" || screenStr == "休闲娱乐/KTV" || screenStr == "运动健身/健身中心" || screenStr == "景点" ) queryDatabase(query, "select * from " + screenCode + " limit " + QString::number(row * (pageNumber - 1)) + "," + QString::number(row)); else queryDatabase(query, "select * from " + screenCode + " where cateId=\"" + screenStr + "\" limit " + QString::number(row * (pageNumber - 1)) + "," + QString::number(row)); diff --git a/src/ChangShaTour/sortwidget.h b/src/ChangShaTour/sortwidget.h index 81c3f17..8638f41 100644 --- a/src/ChangShaTour/sortwidget.h +++ b/src/ChangShaTour/sortwidget.h @@ -54,6 +54,7 @@ private: QStringList imgList; QStringList textList; QStringList idList; + QStringList cateIdList; QVBoxLayout * verLayout; @@ -70,13 +71,9 @@ private: QString screenCode = "food"; QWidget * foodChoices; QWidget * hotelChoices; - QWidget * houseChoices; QWidget * entertainmentChoices; - QWidget * serviceChoices; - QWidget * beautyChoices; - QWidget * weddingChoices; - QWidget * parentChildChoices; QWidget * sportsChoices; + QWidget * attractions; QToolButton ** btnList; diff --git a/src/ChangShaTour/userinfowidget.cpp b/src/ChangShaTour/userinfowidget.cpp index be13351..4212ced 100644 --- a/src/ChangShaTour/userinfowidget.cpp +++ b/src/ChangShaTour/userinfowidget.cpp @@ -17,7 +17,7 @@ UserInfoWidget::UserInfoWidget(QWidget *parent) : QVBoxLayout *layout = new QVBoxLayout(); QHBoxLayout *accountHLayout=new QHBoxLayout(); QHBoxLayout *passwordHLayout=new QHBoxLayout(); - qDebug()<setupUi(this); + hisLimit=10; verLayout = new QVBoxLayout(); @@ -25,6 +26,8 @@ WebWidget::WebWidget(QWidget *parent) : add->setVisible(false); } + + WebWidget::~WebWidget() { delete ui; @@ -34,13 +37,104 @@ QPushButton *WebWidget::getAddBtn() { return add; } +void WebWidget::addToHis(QString url,QString cateId) +{ + QSqlQuery query(userDb); + query.prepare("select historyId from history where url=?"); + query.addBindValue(url); + query.exec(); + query.next(); + if(query.isValid()) + { + query.prepare("update history set createdtime = now() where url=?"); + query.addBindValue(url); + query.exec(); + return ; + } + query.prepare("select count(*) from history where id = ?"); + query.addBindValue(Id); + query.exec(); + query.next(); + int count=query.value(0).toInt(); + if(count>=hisLimit) + { + query.prepare("select historyId from history where id = ? order by createdtime"); + query.addBindValue(Id); + query.exec(); + query.next(); + int historyId=query.value("historyId").toInt(); + query.prepare("update history set url = ?, createdtime = now() where historyId=?"); + query.addBindValue(url); + query.addBindValue(historyId); + query.exec(); + } + else + { + + query.prepare("insert into history (id,url,cateId)values(?,?,?)"); + query.addBindValue(Id); + query.addBindValue(url); + query.addBindValue(cateId); + query.exec(); + } + +} +void WebWidget::addToHot(QString url, QString cateId) +{ + QSqlQuery query(listDb); + query.prepare("select clickCount from hotlist where url=?"); + query.addBindValue(url); + query.exec(); + query.next(); + int clickCount=0; + if(query.isValid()) + { + clickCount=query.value(0).toInt(); + clickCount+=1; + query.prepare("update hotlist set clickCount = ? where url=?"); + query.addBindValue(clickCount); + query.addBindValue(url); + query.exec(); + return ; + } + clickCount=1; + query.prepare("insert into hotlist (url,cateId,clickCount)values(?,?,?)"); + query.addBindValue(url); + query.addBindValue(cateId); + query.addBindValue(clickCount); + query.exec(); + + +} +void WebWidget::addToRecommend(QString cateId) +{ + QSqlQuery query(userDb); + query.prepare("select clickCount from recommend where userId=? and cateId=?"); + + query.addBindValue(Id); + query.addBindValue(cateId); + query.exec(); + query.next(); + int clickCount; + clickCount=query.value(0).toInt(); + clickCount+=1; + query.prepare("update recommend set clickCount = ? where userId=? and cateId=?"); + query.addBindValue(clickCount); + query.addBindValue(Id); + query.addBindValue(cateId); + query.exec(); +} QPushButton *WebWidget::getReturnBtn() { return rtn; } -void WebWidget::loadPage(QString url) +void WebWidget::loadPage(QString url,QString cateId) { + addToHis(url,cateId); + addToHot(url,cateId); + addToRecommend(cateId); + view->load(QUrl(url)); } diff --git a/src/ChangShaTour/webwidget.h b/src/ChangShaTour/webwidget.h index 9977cf8..f3e0d19 100644 --- a/src/ChangShaTour/webwidget.h +++ b/src/ChangShaTour/webwidget.h @@ -7,6 +7,8 @@ #include #include #include +#include +#include #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") @@ -25,13 +27,16 @@ public: ~WebWidget(); QPushButton *getReturnBtn(); QPushButton *getAddBtn(); - void loadPage(QString url); - + void loadPage(QString url,QString cateId); + void addToHis(QString url,QString cateId); + void addToHot(QString url,QString cateId); + void addToRecommend(QString cateId); private: Ui::WebWidget *ui; QVBoxLayout *verLayout; + int hisLimit; QHBoxLayout *horLayout; QPushButton *add;