一:前言

作为自己的练习项目,项目内容可能并不符合业务逻辑,但是涉及到的QT知识运用比较全面。作为新手阶段性练手的项目。

二:项目介绍

本项目的主要功能实验在线购物,咨询客服,实时监控,销售记录,广告视频播放等功能。



三:开发工具

  • 操作系统:window10
  • IDE :Qt Creator 3.1.2 Based on Qt 5.3.1 (MSVC 2010, 32 bit)
  • 数据库:Mysql

四:源程序

程序文件名:

userwidget.ui

consult.ui

Client.pro文件

QT       += core gui sql
QT       += multimedia
QT       += multimediawidgets
QT       += network
CONFIG += c++11
greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = Client
TEMPLATE = appSOURCES += main.cpp \userwidget.cpp \consult.cppHEADERS  += \userwidget.h \consult.hFORMS    += \userwidget.ui \consult.uiOTHER_FILES +=RESOURCES +=

userwidget.h

#ifndef WIDGET_H
#define WIDGET_H
using namespace std;
#include <iostream>
#include <QCamera>
#include <QCameraInfo>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QTimer>
#include <QTime>
#include <QDate>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QMediaPlaylist>
#include <QMessageBox>
//数据库头文件
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QFile>
//consult类
#include "consult.h"
#include <QTcpSocket>namespace Ui {class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();void connectDB(); //连接数据库void initData();void setgoodslist();
private slots:bool on_pushButton_register_clicked();bool on_pushButton_login_clicked();bool on_pushButton_quit_clicked();void on_pushButton_search_clicked();void on_comboBox_currentIndexChanged(const QString &arg1);void on_comboBox_2_currentIndexChanged(const QString &arg1);bool on_pushButton_addgoods_clicked();void on_tabWidget_tabBarClicked();bool on_pushButton_pay_clicked();void on_pushButton_3_clicked();void on_tableWidget_shoopCart_cellClicked(int row, int column);void on_pushButton_consult_clicked();private:Ui::Widget *ui;QCamera *camera;QVideoWidget *showlabel;//QTimer *mytimer;QMediaPlayer *player;QVideoWidget *videoWidget;QMediaPlaylist *medialist;QSqlTableModel *model;consult *consult_subwidget;int menu_high;//QTableWidget增加行int cur_row;//购物车选中行int cur_column;//购物车选中列//tcpQTcpSocket *clientSocket;};#endif // WIDGET_H

userwidget.cpp

#include "userwidget.h"
#include "ui_userwidget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);setWindowTitle("客户端界面");menu_high=0;consult_subwidget=new consult;///*******接收子窗口的信号********/connect(consult_subwidget,&consult::mySignal,[=](){this->show();consult_subwidget->hide();});/*********************摄像头调用*********************/camera=new QCamera;showlabel=new QVideoWidget(ui->label);showlabel->resize(ui->label->size());camera->setViewfinder(showlabel); //设置取景部件// QCameraImageCapture *imageCapture;//imageCapture =new QCameraImageCapture(camera);//camera->setCaptureMode(QCamera::CaptureStillImage);//设置采集模式(采集为图片)camera->start();                           //开启摄像头
////*********************更新当前日期时间*******************************/QTimer *mytimer=new QTimer;mytimer->start(1000);connect(mytimer,&QTimer::timeout,[=](){ui->label_time->setText(QTime::currentTime().toString());ui->label_date->setText(QDate::currentDate().toString("yyyy年MM月dd号 "));});/*******************广告轮播视频************************/player=new QMediaPlayer ;videoWidget=new QVideoWidget(ui->label_ad);medialist=new QMediaPlaylist;
//    QVBoxLayout *layout = new QVBoxLayout;  //用于指定视频播放的位置videoWidget->resize(ui->label_ad->size());//    layout->addWidget(videoWidget);
//    ui->label_ad->setLayout(layout);player->setVideoOutput(videoWidget);//设置播放输出medialist->addMedia(QUrl::fromLocalFile("E:\\360MoveData\\Users\\jill\\Desktop\\Client\\iphone11.mp4")); // \为转义字符,将视频放入容器medialist->addMedia(QUrl::fromLocalFile("E:/360MoveData/Users/jill/Desktop/Client/mv.mp4"));player->setPlaylist(medialist);//设置播放容器medialist->setPlaybackMode(QMediaPlaylist::Loop);//设置播放模式videoWidget->show();//窗体显示player->play();      //播放/****************更新商品类别*********************/connectDB();//连接数据库initData();//更新商品类别ui->pushButton_addgoods->setEnabled(false);//登陆前加入购物车不可用ui->pushButton_quit->setEnabled(false);//登陆前退出登录不可用ui->pushButton_pay->setEnabled(false);//登陆前结算按钮不可用}Widget::~Widget()
{delete camera;delete showlabel;//delete mytimer;delete player;delete videoWidget;delete medialist;delete consult_subwidget;//delete querymodel;}
/****************数据库连接***************/
void Widget::connectDB()
{//添加数据库QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");db.setHostName("127.0.0.1");db.setUserName("root");db.setPassword("4218");db.setDatabaseName("mall");//打开数据库if(!db.open()){QMessageBox::warning(this, "数据库打开失败", db.lastError().text());return;}
}
/****************将数据库内容初始化到选择框***********/
void Widget::initData()
{QSqlQueryModel *querymodel=new QSqlQueryModel(this);//新建模型querymodel->setQuery("select item from category");ui->comboBox->setModel(querymodel);//选择框设置sql模型
}/*********会员注册登录退出**************/
bool Widget::on_pushButton_register_clicked()//注册
{if(ui->lineEdit_name->text().isEmpty()||ui->lineEdit_password->text().isEmpty()||ui->lineEdit_name->text().isEmpty()){QMessageBox::information(this,"注册提示","请填写注册信息");return false;}else{QString name= ui->lineEdit_name->text();QString sex;if (ui->radioButton_man->isChecked())sex="男";else if(ui->radioButton_girl->isChecked())sex="女";elsesex="null";QString member_name=ui->lineEdit_account->text();QString password=ui->lineEdit_password->text();qDebug()<<name<<sex<<member_name<<password;//插入数据库QSqlQuery query;QSqlDatabase::database().transaction(); // 记录插入前的状态QString sql = QString("insert into register (name,sex,member_name,password) values ('%1','%2','%3','%4')").arg(name).arg(sex).arg(member_name).arg(password);bool b1 = query.exec(sql);if(b1){QSqlDatabase::database().commit();QMessageBox::information(this,"注册提示","注册成功!");}else{QSqlDatabase::database().rollback();QMessageBox::information(this,"注册提示","注册未成功!");}//service->socket.write(temp.toUtf8());}ui->radioButton_girl->setChecked(false);ui->radioButton_man->setChecked(false);ui->lineEdit_name->clear();ui->lineEdit_password->clear();ui->lineEdit_name->clear();return true;}bool Widget::on_pushButton_login_clicked()//登录
{if(ui->lineEdit_password->text().isEmpty()||ui->lineEdit_account->text().isEmpty()){QMessageBox::warning(this,"登录提示","登录失败,需填完整的账号及密码");return false;}else{QString account=ui->lineEdit_account->text();QString pass_word = ui->lineEdit_password->text();QString sex;if(ui->radioButton_girl->isChecked())sex="女";else if(ui->radioButton_man->isChecked())sex="男";elsesex="null";//对比数据库QSqlQuery query;QString sql = QString("select sex,member_name,password from register where sex='%1' and member_name='%2' and password='%3'").arg(sex).arg(account).arg(pass_word);query.exec(sql);if( query.next())//判断有无查询记录{//有记录QMessageBox::information(this,"登录提示","登录成功!");//登录成功后不准注册ui->radioButton_girl->setChecked(false);ui->radioButton_man->setChecked(false);ui->lineEdit_account->clear();ui->lineEdit_password->clear();ui->lineEdit_name->clear();ui->pushButton_addgoods->setEnabled(true);//打开加入购物车使能ui->pushButton_quit->setEnabled(true);}else{//无记录QMessageBox::information(this,"登录提示","不存在此用户,请重新登录!");return false;}return true;}
}bool Widget::on_pushButton_quit_clicked()//退出
{QMessageBox::information(this,"退出提示","退出成功");ui->pushButton_addgoods->setEnabled(false);ui->pushButton_quit->setEnabled(false);return true;
}
/***************查找商品*****************/
void Widget::on_pushButton_search_clicked()
{ui->textBrowser_searchGoods->clear();QString tmp;tmp=ui->lineEdit_searchgoods->text();qDebug()<<tmp;if(tmp.isEmpty()){QMessageBox::information(this,"查找商品","输入文本不能为空");}else{int flag=0;//商品查询标志QSqlQuery query;QString sql=QString("select goods,price,last from goods where goods like '%%1%'").arg(tmp);if(query.exec(sql)){while(query.next()){QString goods=query.value(0).toString();QString price=query.value(1).toString();QString last =query.value(2).toString();ui->textBrowser_searchGoods->append("商品名:"+goods+"\t价格:"+price+"\t剩余"+last+"\n");flag=1;ui->lineEdit_searchgoods->clear();}}elseQMessageBox::warning(this, "查询失败", query.lastError().text());if(flag==0){QMessageBox::information(this,"查找商品","未找到相关商品");}ui->lineEdit_searchgoods->clear();}}
/**********商品类别改变槽信号***********/
void Widget::on_comboBox_currentIndexChanged(const QString &arg1)
{ui->comboBox_2->clear();ui->spinBox->setValue(1);if(arg1=="请选择商品"){ui->pushButton_addgoods->setEnabled(false);ui->lineEdit_price->clear();ui->lineEdit_last->clear();}else{ui->comboBox_2->clear();QSqlQuery query;QString sql=QString("select goods,price,last from goods where item='%1'").arg(arg1);//执行sql语句query.exec(sql);while(query.next()){QString goods= query.value(0).toString();ui->comboBox_2->addItem(goods);
//            QString price=query.value(1).toString();
//            ui->lineEdit_price ->setText(price);
//            QString last=query.value(2).toString();
//            ui->lineEdit_last->setText(last);}}}
/*************商品改变槽信号***********/
void Widget::on_comboBox_2_currentIndexChanged(const QString &arg1)
{QSqlQuery query;QString sql=QString("select price,last from goods where item='%1' and goods='%2'").arg(ui->comboBox->currentText()).arg(arg1);//执行sql语句query.exec(sql);while(query.next()){QString price=query.value(0).toString();ui->lineEdit_price ->setText(price);QString last=query.value(1).toString();ui->lineEdit_last->setText(last);}
}
/******************显示商品列表************************/
void Widget::setgoodslist()
{model=new QSqlTableModel(this);//设置模型model->setTable("goods");//指定表ui->tableView_list->setModel(model);//把mode放到viewmodel->select();//显示model里的数据//改表头model->setHeaderData(0,Qt::Horizontal,"商品号");model->setHeaderData(1,Qt::Horizontal,"类目");model->setHeaderData(2,Qt::Horizontal,"商品");model->setHeaderData(3,Qt::Horizontal,"价钱");model->setHeaderData(4,Qt::Horizontal,"余量");//设置view编辑触发条件 不设置可修改viewui->tableView_list->setEditTriggers(QAbstractItemView::NoEditTriggers);//model->setEditStrategy(QSqlTableModel::OnManualSubmit);//设置提交策略(手动提交)}
/*********加入购物车*********/
bool Widget::on_pushButton_addgoods_clicked()
{//判断库存int last=ui->lineEdit_last->text().toInt()-ui->spinBox->text().toInt();//加购物车后剩余if(last<=0){QMessageBox::information(ui->tableWidget_shoopCart,"添加商品提示","对不起库存不足");return false;}//库存充足,购物车显示QString item =ui->comboBox->currentText();QString goods =ui->comboBox_2->currentText();QString count =QString::number(ui->spinBox->value());//int->QstringQString single_goods_total = QString::number((ui->spinBox->value()*ui->lineEdit_price->text().toInt()));//结算总价=第一次总价+后面的单价ui->textBrowser_total->setText(QString::number(ui->textBrowser_total->toPlainText().toInt()+single_goods_total.toInt()));//QTableWidget显示ui->tableWidget_shoopCart->setRowCount(menu_high+1);ui->tableWidget_shoopCart->setItem(menu_high,0,new QTableWidgetItem(goods));ui->tableWidget_shoopCart->setItem(menu_high,1,new QTableWidgetItem(item));ui->tableWidget_shoopCart->setItem(menu_high,2,new QTableWidgetItem(count));ui->tableWidget_shoopCart->setItem(menu_high,3,new QTableWidgetItem(single_goods_total));menu_high++;ui->lineEdit_last->setText(QString::number(last));ui->spinBox->setValue(1);ui->pushButton_pay->setEnabled(true);QMessageBox::information(ui->tableWidget_shoopCart,"添加商品提示","添加成功.可去购物菜单查看");return true;
}
/*************商品列表显示*************/
void Widget::on_tabWidget_tabBarClicked()
{setgoodslist();//显示商品列表
}
/************结算***************/
bool Widget::on_pushButton_pay_clicked()
{//写交易记录文件QFile file("./trading_record.txt");bool fp=file.open(QIODevice::Append);//1.更新数据库//获取tableWidget_shoopCart的信息int i=0;for(i=0;i<ui->tableWidget_shoopCart->rowCount();i++){QString goods_name=ui->tableWidget_shoopCart->item(i,0)->text();QString items=ui->tableWidget_shoopCart->item(i,1)->text();int number=ui->tableWidget_shoopCart->item(i,2)->text().toInt();QString total=ui->tableWidget_shoopCart->item(i,3)->text();//更新数据库QSqlQuery query;QSqlDatabase::database().transaction(); // 记录更新前的状态QString sql = QString("update goods set last=last-'%1' where item='%2' and goods='%3'").arg(number).arg(items).arg(goods_name);bool b1 = query.exec(sql);if(b1){QSqlDatabase::database().commit();}else{QSqlDatabase::database().rollback();}//3.写文件交易记录if(fp){QString str=QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")+"\t商品:"+goods_name+"\t所属类目:"+items+"\t成交数量:"+QString::number(number)+"\t总计:"+total+"\n";file.write(str.toLocal8Bit());}else{qDebug()<<"文件写入失败";}}QMessageBox::information(this,"结算提示","结算成功");file.write("*******************************\n");//2.清空购物车int row=ui->tableWidget_shoopCart->rowCount();for (int var = 0; var < row; var++){ui->tableWidget_shoopCart->removeRow(0);}menu_high=0;//购物车行数清零//4.结算使能关闭ui->pushButton_pay->setEnabled(false);ui->textBrowser_total->clear();return true;
}
/*****************购物车删除******************/
void Widget::on_pushButton_3_clicked()
{//选中行大于购物车的总行数或则if(cur_row > ui->tableWidget_shoopCart->currentRow()||ui->tableWidget_shoopCart->currentRow()<0||cur_row==-1){QMessageBox::information(ui->tableWidget_shoopCart,"删除商品提示","删除失败");}else{//总加减去删除的商品数ui->textBrowser_total->setText(QString::number((ui->textBrowser_total->toPlainText().toDouble()-ui->tableWidget_shoopCart->item(cur_row,3)->text().toDouble())));ui->tableWidget_shoopCart->removeRow(cur_row);menu_high--;}
}
/********购物车选中槽函数cellClicked*********/
void Widget::on_tableWidget_shoopCart_cellClicked(int row, int column)
{cur_row=row;cur_column=column;
}/*********在线咨询按钮**************/
void Widget::on_pushButton_consult_clicked()
{consult_subwidget->TCP_Connect();this->hide();consult_subwidget->show();
}

consult.h

#ifndef CONSULT_H
#define CONSULT_H#include <QWidget>
#include <QTcpSocket>
#include <QTcpServer>
#include <QKeyEvent>
namespace Ui {class consult;
}class consult : public QWidget
{Q_OBJECTpublic:explicit consult(QWidget *parent = 0);~consult();private:Ui::consult *ui;
public:QTcpSocket *clientSocket;void TCP_Connect();
protected:void keyPressEvent(QKeyEvent *event);//键盘按下事件
private slots:void on_pushButton_Return_clicked();void on_pushButton_Send_clicked();void on_pushButton_ClearInput_clicked();void on_pushButton_ClearDisplay_clicked();signals:void mySignal();
};#endif // CONSULT_H

consult.cpp

#include "consult.h"
#include "ui_consult.h"consult::consult(QWidget *parent) :QWidget(parent),ui(new Ui::consult)
{ui->setupUi(this);clientSocket=NULL;this->setWindowTitle("咨询客服界面");TCP_Connect();
}consult::~consult()
{delete ui;delete clientSocket;
}void consult::TCP_Connect()
{clientSocket=new QTcpSocket(this);//获取服务端地址和端口,主动和服务器建立连接clientSocket->connectToHost("127.0.0.1",10000);connect(clientSocket,&QTcpSocket::connected,  //连接[=](){ui->textBrowser->setText("客服:你好,请问你有什么帮助吗!");connect(clientSocket,&QTcpSocket::readyRead,  //等待接收[=](){QByteArray array=clientSocket->readAll(); //字节数组接收ui->textBrowser->append("客服:"+array);  //显示});});
}void consult::on_pushButton_Return_clicked()
{emit mySignal();//发信号//返回主界面关闭socket连接if(clientSocket==NULL){return;}clientSocket->disconnectFromHost();clientSocket->close();}void consult::on_pushButton_Send_clicked()
{if(clientSocket==NULL){return;}//获取编辑区内容QString str=ui->textEdit->toPlainText();if(str.isEmpty())//若编辑区为空返回{return;}//给对方发送数据clientSocket->write(str.toUtf8().data());QString tmp="我:"+str;ui->textBrowser->append(tmp);ui->textEdit->clear();
}
//enter按下事件
void consult::keyPressEvent(QKeyEvent *event)
{if(event->key()==Qt::Key_Enter||event->key()==Qt::Key_Return)//Ctrl+Enter响应,可通过事件过滤器实现在textEdit按下enter发送{on_pushButton_Send_clicked();}
//    switch (event->key()) {//    case Qt::Key_Return:
//        on_pushButton_Send_clicked();//        break;
//    default:
//        break;
//    }
}
//输入框清空
void consult::on_pushButton_ClearInput_clicked()
{ui->textEdit->clear();
}
//显示框清空
void consult::on_pushButton_ClearDisplay_clicked()
{ui->textBrowser->clear();
}

基于QT的商场线上购物管理系统之客户端相关推荐

  1. 基于ssm线上花店管理系统获取(java毕业设计)

    基于ssm线上花店管理系统 线上花店管理系统是基于java编程语言,ssm框架,mysql数据库开发的一款BS架构的设计,本系统分为用户和管理员两个角色,其中用户可以在线注册和登陆,查看鲜花的分类,鲜 ...

  2. 鲜花线上销售管理系统的设计与实现

    作者主页:编程千纸鹤 作者简介:Java.前端.Pythone开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发.毕业设计开发.面试技术整理.最新技术分享 一,项目简介 鲜花线上销售管理 ...

  3. 基于Java毕业设计校园线上点餐系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计校园线上点餐系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计校园线上点餐系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开 ...

  4. 基于Java毕业设计政府采购线上招投标平台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计政府采购线上招投标平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计政府采购线上招投标平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B ...

  5. 微信小程序直播助力深圳线上购物节 数百场品牌小程序开播

    3月8日消息,自2月下旬微信宣布小程序直播能力公测以来,零售商家在复工复产关键时期纷纷"入局"小程序直播.微信发布消息称,3月8日"女神节"当天,数百个品牌将同 ...

  6. 【android精品源码系列】安卓线上购物商城

    安卓线上购物商城[源码推荐] 简介 效果演示 首页 分类 购物车 我的 获取方式 关于我 简介 分享一个非常优秀的Android商城,功能非常完备,主要功能有: 1.首页不同item展示商品,轮播图等 ...

  7. 基于Django的水果线上销售平台

    1,项目功能: 后台: (1)水果管理:该模块主要实现水果的添加,修改,删除以及查看功能. (2)用户管理:主要实现对用户的添加,修改,删除和查看功能. (3)发货管理:主要实现多水果订单的发货,修改 ...

  8. 网站课程设计(简单线上购物商城)

    网站课程设计(简单线上购物商城) 1.开发环境 ​ VS2019,SQL2012,ASP.NET开发 2.项目主题 ​ ​ ​ ​ ​ ​ ​ 刚好完成了网站的课程设计,觉得该好好纪念一下((✪ω✪) ...

  9. 基于SpringBoot的阳光线上交友系统

    基于SpringBoot的阳光线上交友系统>该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 Java--涉及技术: 后端使用技术:Spring boot(SSM)等 数据 ...

最新文章

  1. nodejs实现webservice问题总结
  2. 计算机的iscsi配置,我们将了解如何设置自己的支持iscsi配置的存储节点
  3. JAVA设计模式 - 工厂方法模式
  4. MTK平台性能优化---(1)综述
  5. usb转rs485测试软件,usb转rs485
  6. 《中国各省名由来》 2010年11月03日
  7. 机器人及其相关零件的发展
  8. 论文特色自我评价内容结构
  9. 用什么工具可以查询App日活量
  10. 假期之不务正业—— Qt+FFmpeg+百度api进行视频的语音识别
  11. Pandas详解十之Dropna滤除缺失数据
  12. ros串口通讯(读取串口数据)
  13. 在Java中将excel文件转换成pdf文件
  14. 集成微透镜阵列的CMOS传感器分析
  15. 深耕核心技术·赋能数字化转型 ——大快搜索黑科技亮相2019(第四届)大数据产业生态大会,斩获多项大奖...
  16. AlexNet网络详解
  17. linux监控应用运行情况,技术|在linux中如何通过nload来监控网络使用情况
  18. 【观察】从《鲲鹏计算产业发展白皮书》,看万亿级计算产业大蓝海
  19. NLP-预训练模型-2019-NLU+NLG:T5【Text-to-Text 预训练模型超大规模探索】【 微调T5用于文本摘要】
  20. 洛谷AT2168 [AGC007A] Shik and Stone

热门文章

  1. 51单片机 普中V2 超声波测距 报警 显示 基于MCS51单片机的超声波测距模块的开发
  2. 高光时刻 | 方正璞华联合开发的「人力资源法律服务共享平台」在创新创业大赛中获奖
  3. Vbs脚本将本地文件上传到Azure存储账户
  4. zto中通电子面单cpcl打印指令实例
  5. java 启动参数 别名,Spring boot 参数别名处理
  6. Linux 命令 | 常用命令之 cut
  7. 曹胜欢,java那些事儿
  8. 帕德逼近matlab算法,帕德逼近matlab
  9. 一个umi4的项目适配到FireFox60.7.1esr版本上的从头到尾
  10. android 切回前台,Android退到后台与切到前台