赞
踩
你好! 这是你第一次使用 QT+MySql 所编写的一个不完善的项目,由于时间紧促只完成了大概。
知识点:
从整体层面来看,本论文所设计的系统需要满足的需求是:创建一个对企业商场库存、客户、工作人员管理以及收银等集成平台,基于QT平台,使用MySQL数据库作为数据支撑;采用C/S三层架构,构建客户端软件应用产品,用于解决成都市商场、超市等信息管理问题。
详细来说,本文所设计的商场管理系统,能够为成都市各大商场超市信息管理提供很大方便。
1、由于系统采用客户端服务器模式,因此用户只需要安装对应客户端就可以进行相关操作,客户端界面简洁,操作简单;
2、该系统会根据不同公司的需求,设置的表单操作灵活多变,提供灵活的表单调、节设置,争取提供所有数据报表;
3、该系统对商场所有客户以及工作人员进行结构化分类和全面详细记录,所有客户信息(咨询、个人信息、消费记录、对商场反馈)都会在系统中进行己录,在监控日常营业过程的同时,实施客户关怀,提高服务满意度,增加二次销售概率;
4、该系统具有收银功能同时对商场出入库进行统计并生成相应报表,商场高层可通过系统查看每日盈亏状况以便及时调整商场的销售策略;
5、该系统通过线索权限设置,使全公司人员,对公司日常运营信息、新闻和线索等进行记录和归纳到系统内。
本系统采用C++语言基于MySQL数据库为支撑利用QT开发环境进行开发,QT图形化界面进行编程实现客户端和服务器端分离,以达到数据保护。QT是一款跨平台开发平台,内置编辑器通过控件拖动槽函数建立连接,使用其自带网络模块和界面模块实现简洁明了的客户端和后台服务器控制。
本系统根据用户数据进行分析,该系统共有七大板块:登录模块,收银管理模块,商品入库模块,商品查询模块,用户管理模块,供应商管理模块,用户信息和会员管理模块。如图所示:
登录管理:该模块实现了用户的登录功能可以进行收银管理和会员信息管理;系统帐户与登录控制功能的各子功能模块设计如下图所示。
收银模块:该模块实现了超市的收银功能,可以分为结账功能和刷新商品信息等功能。 收银管理功能的各子功能模块设计如下图所示。
用户管理:该功能实现了用户信息的管理,我们选择不同的权限来限制用户,实现了用户信息的增删改查,具体地用户管理功能组成如下图所示。
该模块实现的是商品信息的查看、商品的添加、商品的进货、商品信息的修改以及退货等功能,具体地用户管理功能组成如下图所示。
该模块实现了按照单号,名成,字段来对商品的库存量、库存信息、利润计算及退货信息进行查询,同时还实现了对查询到的信息自动导出E-R表的功能,具体功能如下图所示。
该模块实现了对供应商信息的增删改查,同时展现商品对应的供应商,如果以后商品进货的话可以通过该模块的联系方式直接联系供应商,具体功能如下图所示。
该模块实现了对用户信息的管理,其中包括基础信息的增删改查,还有权限的更迭,权限更迭仅管理员可调用。具体功能如下图所示。
商场管理系统的控制流程如下图所示。
系统E-R图如下图所示。
数据库设计是本项目设计工作中必不可少的一部分,合理的数据库与数据表结构设计可以提高信息管理系统的运行效率。
对本系统数据库所包括的数据表来说,所涉及的用户数据表非常多,同时还需要有数据库管理自身的系统数据表。在此只给出几个重要的用户数据表。
商品类别表见下表。
字段名 | 数据类型 | 主键 | 允许空 | 描述 |
---|---|---|---|---|
Id | Int | 是 | 否 | 序号 |
ShopId | Int | 否 | 否 | 商品类别ID |
ShopName | nvarchar | 否 | 否 | 商品类别名称 |
Price | Int | 否 | 是 | 商品价格 |
Sft | Varchar | 否 | 否 | 商品规格 |
系统用户信息表见下表。
字段名 | 数据类型 | 主键 | 允许空 | 描述 |
---|---|---|---|---|
TKID | Int | 是 | 否 | 序号 |
TKNM | Varchar | 否 | 是 | 用户名 |
TKPD | Varchar | 否 | 是 | 密码 |
TKTN | Varchar | 否 | 是 | 真实姓名 |
TKWC | Varchar | 否 | 是 | 所在部门 |
TKSX | Bit | 否 | 是 | 性别 |
TKPT | Varchar | 否 | 是 | 职务 |
TKMF | Varchar | 否 | 是 | 手机 |
TKWF | Varchar | 否 | 是 | 座机 |
TKML | Varchar | 否 | 是 | 邮箱 |
TKNT | Varchar | 否 | 是 | 备注 |
TKCE | Varchar | 否 | 是 | 管理人 |
TKCT | Datatime | 否 | 是 | 生成时间 |
TKLV | Smallint | 否 | 是 | 用户类别 |
TIIP | Varchar | 否 | 是 | 分配IP |
用户类别表见下表。
字段名 | 数据类型 | 主键 | 允许空 | 描述 |
---|---|---|---|---|
DDID | Bigint | 是 | 否 | 序号 |
DDND | Varchar | 否 | 否 | 类别编号 |
DDCD | Varchar | 否 | 否 | 类别描述 |
DDTD | Int | 否 | 否 | 权限值 |
DDAT | Datatim | 否 | 否 | 有效期限 |
商场基础信息表见下表。
字段名 | 数据类型 | 主键 | 允许空 | 描述 |
---|---|---|---|---|
DTID | Int | 是 | 否 | 序号 |
NTNM | Varchar | 否 | 是 | 商场名 |
DTUD | Varchar | 否 | 是 | 商场编号 |
DTAT | Datatime | 否 | 是 | 添加时间 |
DTFD | Varchar | 否 | 是 | 核心设备编号 |
DTWD | Varchar | 否 | 是 | 备注 |
DTSM | Varchar | 否 | 是 | 添加人 |
DTCG | Varchar | 否 | 是 | 管理单位 |
DTCM | Varchar | 否 | 是 | 负责人 |
DTLM | Varchar | 否 | 是 | 联系人手机 |
DTLP | Varchar | 否 | 是 | 联系座机 |
DTDD | Varchar | 否 | 是 | 工作状态 |
连接代码如下:
//连接数据库
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(); //错误信息
}
功能:本模块的主要功能是对用户身份进行验证,只有系统的合法用户才能进入系统。它的流程图如下:
登录界面如下图所示:
登录代码如下:
//用户登录,查询数据
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,"登录","登录失败!");
}
}
在进行系统登录过程中,登录模块将调用数据库里的用户数据表,并对用户名和密码进行验证,只有输入了正确的用户名和密码后,系统登录才会成功。并在输入了错误的或者是不存在的用户名和密码时,系统会给出出错信息提示,指明登录过程中的错误输入或错误操作,以便用户进行正确的登录。其提示错误输入或错误操作如下图所示:
主界面的设计有一共有五个操作:收银台,商品库存,会员中心,营业统计,视频监控。但是对于不同操作人员是不同的。管理员,可以对数据库全部信息进行增删改查,但是作为用户,他只可以看到自己的所有信息,而且不可以进行更改。虽然在主界面上没有什么区别,但窗体内容不一样的。
部分代码如下:
/*********************更新当前时间*******************************/
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);
本次MIS实战的学习历时一个月,虽然最终考核项目未完成全部模块,但对于QT学习的方法进行了掌握,学会了信号槽建立连接,c/s通信,数据库的连接等只是并应用于实际操作中。在此过程中也发现了自己的不足,具体如下:
首先,在大学里学的不扎实,导致好多基本的知识点在具体的项目开发过程中比较生疏,在帮助文档和百度以及外部条件下才能完成一些本应该完成的任务。对QT的了解也不多,只能现学现卖,在实际操作中就显得比较吃力,数据库的简单语句还了解一些,但是一些混合的操作还是不像想象中那么简单,了解SQL语句和设计操作数据库中间的距离还是挺大的,特别是在结合界面中获取输入文字和输出到界面表格中或者文本框中内容以及获取输入信息和数据库原有信息的核对都是第一次操作,虽然感觉在理解方面不是很难,但是实际操作来实现这些功能还是需要扎实的基础和能力的。
其次,在学习能力上,始终觉得自己的学习能力跟不上工作的需求,每次遇到问题都有点慌,害怕解决不了或短时间找不到很好的解决办法 ,而且发现问题的时候,看到的只是问题的表面,对于问题的本质在哪却总是不得其法,导致在问题的解决和网络搜寻解决方法上都没有什么明显的效果。感觉到了自己的无能为力,也确实是懂得太少或者说什么都不懂,而且在项目过程中,有些逻辑上的问题自己还有些想法和了解,但是实现起来却不是很清楚,也有的是逻辑上理解不到位,例如:tcp的实际操作。还有感觉最重要是不清楚哪些函数是干嘛的,想要实现某些功能应该用到哪些函数,是不是有这一类的函数实现等。多数感觉云里雾里抓不住重点,也感觉到心累,并不一定是努力就会有收获,也许是用错了方法。
最后,经过一个月的项目实战也有一定的收获,体会到了知识和实际动手能力相结合学起东西来是挺快的,也许之前自学数据库一个月的时间也没法和这短短一周相比。了解了正规代码的书写要求,根据项目的需求分析来敲代码,写一些有意义让人看见意思就知道这段代码写的是什么,实现的是哪些功能。遇到问题解决不了的,先自己找一下资源查看,从网上读取需要的信息,根据自己项目的需要来增加或者修改一些功能。学习和动手能力相结合,让自己快速成长起来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。