实现猜你喜欢功能并能够多次刷新,实现榜单自动更新,增加注册账号邮箱验证功能

master
liukunlin123 4 years ago
parent c7b30e7d20
commit 71dac528c2

@ -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 \

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2021-07-01T00:34:06. -->
<!-- Written by QtCreator 4.11.1, 2021-07-04T17:04:03. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{4109ff11-a646-43d1-9619-aeb32783df6e}</value>
<value type="QByteArray">{d82e82d4-1ed7-46a6-9098-5e0a8f0d7fa3}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
@ -64,14 +64,14 @@
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_msvc2017_64_kit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win32_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -119,7 +119,7 @@
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -167,7 +167,7 @@
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_32_bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -287,19 +287,19 @@
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/13648/Desktop/TourInChangSha/src/ChangShaTour/ChangShaTour.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/Users/13648/Desktop/TourInChangSha/src/ChangShaTour/ChangShaTour.pro</value>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
@ -314,7 +314,7 @@
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -362,7 +362,7 @@
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -410,7 +410,7 @@
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/ChangShaTour/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/大三下/软件体系结构/Trip-in-Chang-sha/build-ChangShaTour-Desktop_Qt_5_14_2_MinGW_64_bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>

@ -4,8 +4,97 @@ qint64 Id;
QSqlDatabase meituanDb;
QSqlDatabase userDb;
QSqlDatabase listDb;
QMap<QString,QString> 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<<"休闲运动 游泳 健身中心 羽毛球 台球 武术 保龄球 高尔夫 篮球 滑冰 射击射箭 网球 骑马 乒乓球 体育场馆";
}

@ -1,6 +1,8 @@
#ifndef CGLOBAL_H
#define CGLOBAL_H
#include <QVariant>
#include <QMap>
#include <QObject>
#include <QSqlDatabase>
//全局变量定义文件include该文件即可获得用户Id
extern qint64 Id;
@ -8,11 +10,14 @@ extern qint64 Id;
extern QSqlDatabase meituanDb;
extern QSqlDatabase userDb;
extern QSqlDatabase listDb;
extern QMap<QString,QString> labelToDb;
extern QStringList recommendlabel;
class cglobal
{
public:
cglobal();
void labelmap();
};
#endif // CGLOBAL_H

@ -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<QString>();
historyList.append(historyQuery.value("url").value<QString>());
cateIdList.append(historyQuery.value("cateId").value<QString>());
}
}
@ -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<QString>();
nameList.append(shopQuery.value("title").value<QString>());
}
@ -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();

@ -8,7 +8,7 @@
#include <QScrollArea>
#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

@ -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())

@ -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()<<Id;
qDebug()<< "userId:" <<Id;
if(passwordget==password)
{
return true;

@ -60,7 +60,8 @@ int main(int argc, char *argv[])
listDb.setUserName("mkl"); //用户名
listDb.setPassword("010512"); //密码
listDb.open();
cglobal *glb=new cglobal();
glb->labelmap();
MainWindow w;
w.show();

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

@ -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

@ -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<QString,int>::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>();
QString score = QString::number(avgscore.value<double>());
QString commentNum = QString::number(comments.value<qlonglong>());
QString addr = address.value<QString>();
QString price = QString::number(avgprice.value<qlonglong>());
QString text = name + "\n" + score + "" + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "";
idList.append(id.value<QString>());
urlList.append(detail.value<QString>());
imgList.append(frontimg.value<QString>());
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()<<labelToDb[iter.key()]<<iter.value()*page<<" "<<iter.value();
query.exec();
while(query.next()&&i<row*column)
{
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");
QVariant cateId = query.value("cateId");
QString name = title.value<QString>();
//qDebug() << name;
QString score = QString::number(avgscore.value<double>());
QString commentNum = QString::number(comments.value<qlonglong>());
QString addr = address.value<QString>();
QString price = QString::number(avgprice.value<qlonglong>());
QString text = name + "\n" + score + "" + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "";
idList[i] = id.value<qlonglong>();
urlList.append(detail.value<QString>());
imgList.append(frontimg.value<QString>());
cateIdList.append(cateId.value<QString>());
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()<<imgList[index];
btnList[index] = setBtn(btnList[index], imgPath, textList[index]);
disconnect(btnList[index], 0, 0, 0);
connect(btnList[index], &QToolButton::clicked, this, [=](){web->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()<<label<<" "<<labelCount[label];
}
}
void RecommendWidget::addNewUser()
{
//用户为新用户时,在这里初始化所有标签的点击量
QMap<QString,QString>::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()

@ -7,6 +7,7 @@
#include <QPushButton>
#include <QToolButton>
#include <QSize>
#include <QMap>
#include <QScrollArea>
#include <QUrl>
#include <QSqlQuery>
@ -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<QString,int> labelCount;
private slots:
void loadToHistory(int index);
signals:
};

@ -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;
}

@ -1,10 +1,14 @@
#ifndef REGISTERMANAGER_H
#define REGISTERMANAGER_H
#include "cglobal.h"
#include <QSqlQuery>
#include <QVariant>
#include <QMessageBox>
#include <QRegExp>
#include <QtGlobal>
#include <QTime>
#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

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

@ -7,7 +7,7 @@
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#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

@ -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<qlonglong>();
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<qlonglong>();
totalNum += query.value("num").value<qlonglong>();
}
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>();
QString score = QString::number(avgscore.value<double>());
QString commentNum = QString::number(comments.value<qlonglong>());
QString addr = address.value<QString>();
QString price = QString::number(avgprice.value<qlonglong>());
QString text = name + "\n" + score + "" + commentNum + "条评论\n" + addr + "\n" + "人均" + price + "";
idList.append(id.value<QString>());
// QString price = QString::number(avgprice.value<qlonglong>());
QString text = name + "\n" + score + "" + commentNum + "条评论\n" + addr + "\n";// + "人均" + price + "元";
idList[i] = id.value<qlonglong>();
urlList.append(detail.value<QString>());
imgList.append(frontimg.value<QString>());
cateIdList.append(cateId.value<QString>());
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
{

@ -12,8 +12,7 @@
#include <QScrollArea>
#include <QScrollBar>
#include <QLabel>
#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;

@ -0,0 +1,75 @@
#include "smtp.h"
#include<QDebug>
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;
}

@ -0,0 +1,24 @@
#ifndef SMTH_H
#define SMTH_H
#include<QByteArray>
#include<QString>
#include<QTcpSocket>
#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

@ -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>();
QString score = QString::number(avgscore.value<double>());
@ -113,6 +111,7 @@ void SortWidget::queryDatabase(QSqlQuery query, QString statement)
idList.append(id.value<QString>());
urlList.append(detail.value<QString>());
imgList.append(frontimg.value<QString>());
cateIdList.append(cateId.value<QString>());
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));

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

@ -17,7 +17,7 @@ UserInfoWidget::UserInfoWidget(QWidget *parent) :
QVBoxLayout *layout = new QVBoxLayout();
QHBoxLayout *accountHLayout=new QHBoxLayout();
QHBoxLayout *passwordHLayout=new QHBoxLayout();
qDebug()<<Id;
qDebug()<< "userId:"<<Id;
QSqlQuery query(userDb);
query.prepare("select email,password from account where id=?");
query.addBindValue(Id);

@ -6,6 +6,7 @@ WebWidget::WebWidget(QWidget *parent) :
ui(new Ui::WebWidget)
{
ui->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));
}

@ -7,6 +7,8 @@
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QUrl>
#include <QSqlQuery>
#include <cglobal.h>
#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;

Loading…
Cancel
Save