商场管理系统实战项目

1. 知识(点)应用以及经验总结

你好! 这是你第一次使用 QT+MySql 所编写的一个不完善的项目,由于时间紧促只完成了大概。
知识点:

  1. F1快捷键查看QT帮助文档,F4切换.h与.cpp文件;
  2. 配置MySql驱动,操作数据库中的表单实现增删改查;
  3. 信号与槽,connect(信号发出者,&发送者类型名::信号名,信号接收者,&槽函数(信号处理函数));
  4. 信号函数的定义与发射,窗口布局,调整;
  5. 数据库的创建以及连接;
  6. Tcp协议的实际应用实现cs架构;
  7. Multimedia模块下的Qcamera实现视频流传输以达到视频传输功能;
  8. 引入二维码生成与解析库,实现二维码收银功能;
    重点:
  9. 数据库的连接操作;
  10. 信号函数的定义与发射,槽函数的建立;
  11. 数据库的创建以及操作时加以验证;
  12. 视频流传输、图片采集二维码解码;
    难点:
  13. Multimedia模块下的Qcamera实现视频流传输以达到视频传输功能;
  14. 二维码生成和解码

2. 系统分析

2.1 架构概述

从整体层面来看,本论文所设计的系统需要满足的需求是:创建一个对企业商场库存、客户、工作人员管理以及收银等集成平台,基于QT平台,使用MySQL数据库作为数据支撑;采用C/S三层架构,构建客户端软件应用产品,用于解决成都市商场、超市等信息管理问题。
详细来说,本文所设计的商场管理系统,能够为成都市各大商场超市信息管理提供很大方便。
1、由于系统采用客户端服务器模式,因此用户只需要安装对应客户端就可以进行相关操作,客户端界面简洁,操作简单;
2、该系统会根据不同公司的需求,设置的表单操作灵活多变,提供灵活的表单调、节设置,争取提供所有数据报表;
3、该系统对商场所有客户以及工作人员进行结构化分类和全面详细记录,所有客户信息(咨询、个人信息、消费记录、对商场反馈)都会在系统中进行己录,在监控日常营业过程的同时,实施客户关怀,提高服务满意度,增加二次销售概率;
4、该系统具有收银功能同时对商场出入库进行统计并生成相应报表,商场高层可通过系统查看每日盈亏状况以便及时调整商场的销售策略;
5、该系统通过线索权限设置,使全公司人员,对公司日常运营信息、新闻和线索等进行记录和归纳到系统内。

2.2 系统开发环境

本系统采用C++语言基于MySQL数据库为支撑利用QT开发环境进行开发,QT图形化界面进行编程实现客户端和服务器端分离,以达到数据保护。QT是一款跨平台开发平台,内置编辑器通过控件拖动槽函数建立连接,使用其自带网络模块和界面模块实现简洁明了的客户端和后台服务器控制。

3.系统设计

3.1系统的功能结构设计

本系统根据用户数据进行分析,该系统共有七大板块:登录模块,收银管理模块,商品入库模块,商品查询模块,用户管理模块,供应商管理模块,用户信息和会员管理模块。如图所示:
主要功能模块组织结构设计图

3.1.1 登录管理

登录管理:该模块实现了用户的登录功能可以进行收银管理和会员信息管理;系统帐户与登录控制功能的各子功能模块设计如下图所示。
户登录控制功能组成

3.1.2 收银管理

收银模块:该模块实现了超市的收银功能,可以分为结账功能和刷新商品信息等功能。 收银管理功能的各子功能模块设计如下图所示。
收银管理功能组成

3.1.3 用户管理

用户管理:该功能实现了用户信息的管理,我们选择不同的权限来限制用户,实现了用户信息的增删改查,具体地用户管理功能组成如下图所示。
用户管理功能组成

3.1.4 商品管理

该模块实现的是商品信息的查看、商品的添加、商品的进货、商品信息的修改以及退货等功能,具体地用户管理功能组成如下图所示。
商品管理功能组成

3.1.5 商品查询管理

该模块实现了按照单号,名成,字段来对商品的库存量、库存信息、利润计算及退货信息进行查询,同时还实现了对查询到的信息自动导出E-R表的功能,具体功能如下图所示。
商品查询管理功能组成

3.1.6 商铺管理

该模块实现了对供应商信息的增删改查,同时展现商品对应的供应商,如果以后商品进货的话可以通过该模块的联系方式直接联系供应商,具体功能如下图所示。
商铺管理功能组成

3.1.7 用户信息管理

该模块实现了对用户信息的管理,其中包括基础信息的增删改查,还有权限的更迭,权限更迭仅管理员可调用。具体功能如下图所示。
用户信息管理功能组成

3.2 系统控制流程

商场管理系统的控制流程如下图所示。

商场管理系统控制流程图

3.3系统数据库设计

系统E-R图如下图所示。

系统E-R图

数据库设计是本项目设计工作中必不可少的一部分,合理的数据库数据表结构设计可以提高信息管理系统的运行效率。
对本系统数据库所包括的数据表来说,所涉及的用户数据表非常多,同时还需要有数据库管理自身的系统数据表。在此只给出几个重要的用户数据表。

商品类别表见下表。
字段名数据类型主键允许空描述
IdInt序号
ShopIdInt商品类别ID
ShopNamenvarchar商品类别名称
PriceInt商品价格
SftVarchar商品规格
系统用户信息表见下表。
字段名数据类型主键允许空描述
TKIDInt序号
TKNMVarchar用户名
TKPDVarchar密码
TKTNVarchar真实姓名
TKWCVarchar所在部门
TKSXBit性别
TKPTVarchar职务
TKMFVarchar手机
TKWFVarchar座机
TKMLVarchar邮箱
TKNTVarchar备注
TKCEVarchar管理人
TKCTDatatime生成时间
TKLVSmallint用户类别
TIIPVarchar分配IP
用户类别表见下表。
字段名数据类型主键允许空描述
DDIDBigint序号
DDNDVarchar类别编号
DDCDVarchar类别描述
DDTDInt权限值
DDATDatatim有效期限
商场基础信息表见下表。
字段名数据类型主键允许空描述
DTIDInt序号
NTNMVarchar商场名
DTUDVarchar商场编号
DTATDatatime添加时间
DTFDVarchar核心设备编号
DTWDVarchar备注
DTSMVarchar添加人
DTCGVarchar管理单位
DTCMVarchar负责人
DTLMVarchar联系人手机
DTLPVarchar联系座机
DTDDVarchar工作状态

4.系统实现

4.1 QT连接数据库

连接代码如下:

//连接数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");  //创建mysql数据连接
    db.setHostName("localhost");    //主机服务器
    db.setPort(3306);   //设置端口号
    db.setUserName("root");  //用户名
    db.setPassword("root");     //密码
    db.setDatabaseName("cashier");  //数据库名
    if(db.open() ){
        qDebug()<<"数据库打开成功";
    }
    else{
        qDebug()<<"数据库打开失败";
        qDebug()<<db.lastError().text();    //错误信息
    }

4.2 用户登录模块

功能:本模块的主要功能是对用户身份进行验证,只有系统的合法用户才能进入系统。它的流程图如下:

Created with Raphaël 2.3.0 开始 输入信息 检测信息 结束 yes no

登录界面如下图所示:
在这里插入图片描述
登录代码如下:

//用户登录,查询数据
    if(true == ui->radioButton_user->isChecked()){  //用户登录
        //接受用户输入:
        QString account = ui->lineEdit_account->text(); //用户账号
        QString passwd = ui->lineEdit_passwd->text();   //用户密码
        //查询数据
        QSqlQuery query;    //操作数据库
        QString qs = QString("select * from user_info where account = '%1' and passwd = '%2'").arg(account).arg(passwd);
        if(!query.exec(qs)){//如果查询数据失败
            qDebug()<<query.lastError().text();     //输出错误信息
            return;
        }
        //获取查询的数据
        if(query.next()){//获取到数据
            emit user_login_signal();
        }
        else{
            QMessageBox::information(this,"登录","登录失败!");
        }
    }
    if(true == ui->radioButton_admin->isChecked()){ //管理员登录
        //接受用户输入:
        QString account = ui->lineEdit_account->text(); //用户账号
        QString passwd = ui->lineEdit_passwd->text();   //用户密码
        //查询数据
        QSqlQuery query;    //操作数据库
        QString qs = QString("select * from admin_info where account = '%1' and passwd = '%2'").arg(account).arg(passwd);
        if(!query.exec(qs)){//如果查询数据失败
            qDebug()<<query.lastError().text();     //输出错误信息
            return;
        }
        //获取查询的数据
        if(query.next()){//获取到数据
            emit admin_login_signal(); //发射管理员登录信号
        }
        else{
            QMessageBox::information(this,"登录","登录失败!");
        }
    }

在进行系统登录过程中,登录模块将调用数据库里的用户数据表,并对用户名和密码进行验证,只有输入了正确的用户名和密码后,系统登录才会成功。并在输入了错误的或者是不存在的用户名和密码时,系统会给出出错信息提示,指明登录过程中的错误输入或错误操作,以便用户进行正确的登录。其提示错误输入或错误操作如下图所示:

非法登录提示界面

4.3 主界面设计

主界面的设计有一共有五个操作:收银台,商品库存,会员中心,营业统计,视频监控。但是对于不同操作人员是不同的。管理员,可以对数据库全部信息进行增删改查,但是作为用户,他只可以看到自己的所有信息,而且不可以进行更改。虽然在主界面上没有什么区别,但窗体内容不一样的。

客户端主界面
部分代码如下:

/*********************更新当前时间*******************************/
    mytimer = new QTimer(this);
    connect(mytimer,SIGNAL(timeout()),this,SLOT(settime()));
/*********************设置当前日期和更新时间*******************************/
ui->label_data->setText(QDateTime::currentDateTime().toString("yyyy年M月d号 "));
ui->label_time->setText(QTime::currentTime().toString());
mytimer->start(1000);
 /*********************会员中心界面*******************************/
//会员界面刷新,获得最新数据:从数据库获取数据    connect(ui->pushButton_refresh,&QPushButton::clicked,this,&User::on_pushButton_refresh_clicked); //会员注册:向数据库添加数据
connect(ui->pushButton_addinfo,&QPushButton::clicked,this,&User::on_pushButton_addinfo_clicked); //会员删除:从数据库删除数据
connect(ui->pushButton_deletinfo,&QPushButton::clicked,this,&User::on_pushButton_deletinfo_clicked);//会员修改:从数据库修改数据    connect(ui->pushButton_modifyinfo,&QPushButton::clicked,this,&User::on_pushButton_modifyinfo_clicked); //会员查询:从数据库查询数据 connect(ui->pushButton_query,&QPushButton::clicked,this,&User::on_pushButton_query_clicked);
/*********************商品管理界面界面*******************************/
//商品界面刷新,获得最新数据:从数据库获取数据   connect(ui->pushButton_shopping_refresh,&QPushButton::clicked,this,&User::on_pushButton_shopping_refresh_clicked);//添加商品:向数据库添加数据    connect(ui->pushButton_shopping_add,&QPushButton::clicked,this,&User::on_pushButton_shopping_add_clicked);//删除商品:从数据库删除数据  connect(ui->pushButton_shopping_delete,&QPushButton::clicked,this,&User::on_pushButton_shopping_delete_clicked);//商品查询:从数据库查询数据
connect(ui->pushButton_shopping_query,&QPushButton::clicked,this,&User::on_pushButton_shopping_query_clicked);
 

5.学习心得

本次MIS实战的学习历时一个月,虽然最终考核项目未完成全部模块,但对于QT学习的方法进行了掌握,学会了信号槽建立连接,c/s通信,数据库的连接等只是并应用于实际操作中。在此过程中也发现了自己的不足,具体如下:
首先,在大学里学的不扎实,导致好多基本的知识点在具体的项目开发过程中比较生疏,在帮助文档和百度以及外部条件下才能完成一些本应该完成的任务。对QT的了解也不多,只能现学现卖,在实际操作中就显得比较吃力,数据库的简单语句还了解一些,但是一些混合的操作还是不像想象中那么简单,了解SQL语句和设计操作数据库中间的距离还是挺大的,特别是在结合界面中获取输入文字和输出到界面表格中或者文本框中内容以及获取输入信息和数据库原有信息的核对都是第一次操作,虽然感觉在理解方面不是很难,但是实际操作来实现这些功能还是需要扎实的基础和能力的。
其次,在学习能力上,始终觉得自己的学习能力跟不上工作的需求,每次遇到问题都有点慌,害怕解决不了或短时间找不到很好的解决办法 ,而且发现问题的时候,看到的只是问题的表面,对于问题的本质在哪却总是不得其法,导致在问题的解决和网络搜寻解决方法上都没有什么明显的效果。感觉到了自己的无能为力,也确实是懂得太少或者说什么都不懂,而且在项目过程中,有些逻辑上的问题自己还有些想法和了解,但是实现起来却不是很清楚,也有的是逻辑上理解不到位,例如:tcp的实际操作。还有感觉最重要是不清楚哪些函数是干嘛的,想要实现某些功能应该用到哪些函数,是不是有这一类的函数实现等。多数感觉云里雾里抓不住重点,也感觉到心累,并不一定是努力就会有收获,也许是用错了方法。
最后,经过一个月的项目实战也有一定的收获,体会到了知识和实际动手能力相结合学起东西来是挺快的,也许之前自学数据库一个月的时间也没法和这短短一周相比。了解了正规代码的书写要求,根据项目的需求分析来敲代码,写一些有意义让人看见意思就知道这段代码写的是什么,实现的是哪些功能。遇到问题解决不了的,先自己找一下资源查看,从网上读取需要的信息,根据自己项目的需要来增加或者修改一些功能。学习和动手能力相结合,让自己快速成长起来。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wj934543

创作不易,你的支持是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值