绘本之家管理系统

一、题目需求
开发一个“绘本之家”信息管理系统,分为三大管理模块,综合查询模块和统计分析模块。
(1)绘本资料的管理
绘本信息包括:绘本编号、绘本名、作者、出版社、出版时间、价格、语言、适合年龄、借出状态等基本信息。
提供绘本信息的录入,修改,删除,浏览等基本功能。
(2)会员信息的管理
会员信息包括:会员号、会员名、会员年龄、会员性别、联系电话等基本信息。
提供会员信息的录入,修改,删除,浏览等基本功能。
(3)借阅管理
绘本借阅的相关信息包括:绘本编号、会员号、借出时间、还书时间
提供借阅信息的录入,修改,删除,浏览等基本功能。
(4)综合查询模块
①绘本信息查询:按绘本编号,绘本名,作者
②会员信息查询:按会员号,会员名,联系电话查询
③借阅信息查询:按绘本编号,会员号
(5)统计分析模块
①会员借阅排名
②绘本借阅排名
③按照绘本适合年龄排名
扩展功能:
(1)在系统退出时,保存内存中各类数据到文件中,下次打开系统时,支持数据从文件中读取。
(2)给会员添加等级,普通会员和高级会员,普通会员最多只能同时借10本,期限1个月,超期后,每本书每天罚款1元。高级会员无借书本数和时间的限制。

文章目录

    • 绘本之家管理系统
  • 设计思路
  • 交互界面介绍
    • ****主要交互界面介绍****
    • 信息检索界面
    • 绘本(会员)信息管理界面(代码基本差不多)
    • 借阅管理
  • 总结

设计思路

绘本之家”信息管理系统,采用QT应用程序框架进行构建,通过其中的UI界面带来更好的交互,整个程序连接SQL server数据库,程序从数据库中读取数据,操作之后的数据也直接存储到数据库中。
程序分为四个模块:信息检索模块(包括排序),绘本信息操作模块,会员信息操作模块,借阅系统模块。
此信息管理系统通过使用QT应用程序框架,主要使用MainWindow框架类,通过添加信号和槽,完成图形化界面按钮的点击事件,。
使用的是QT,与SQL server2017.


提示:以下是本篇文章正文内容,下面案例可供参考

交互界面介绍

(程序总览)

数据库是三个表,绘本信息表,会员信息表。

主函数中连接数据库的操作:

bool opendatabase()
{QSqlDatabase mydb = QSqlDatabase::addDatabase("QODBC");//数据库驱动类型为SQL ServerQString dsn = QString::fromLocal8Bit("server");      //数据源名称mydb.setHostName("localhost");                        //选择本地主机,127.0.1.1mydb.setDatabaseName(dsn);                            //设置数据源名称mydb.setUserName("sa");                               //登录用户mydb.setPassword("123456");                              //密码if(mydb.open()){qDebug()<<"open success";return true;}else{qDebug()<<"open failed";return false;}
}

同时在连接数据库之前要对设置ODBC源进行配置,并不复杂。

主要交互界面介绍

主函数中打开第一个交互界面登陆界面。admin.ui展示的界面

登陆后跳转到下个交互界面

该界面设置了四个按钮pushbuton,点击之后会相应跳转到不同的交互页面

信息检索界面

该模块中可以看到有两个combobox,前面查询模块是第一选项,选定要查询的大致模块,后面的选项是二级选项。同时二级选型的内容会根据一级选项改变。
这里是通过一个自定义的函数实现,相当于是一级选项的内容发生改变后会发送一个”信号”,二级选项做出相应改变。

connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(AttachChose()));

后面搜索框中也有自定义一个函数,实现实时搜索的能力,搜索框的内容发生变化时,会实时搜索。原理与上方相同。

connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(find()));//将字符变化的事件,与find函数连接,实现模糊搜索的功能

同时把排序功能也添加到了这个界面之中,方便展示。

绘本(会员)信息管理界面(代码基本差不多)

主要通过按钮对应的槽函数,对数据库进行增删改操作
示范一个修改绘本记录的代码,还是不难的,了解函数的用法和sql语句就可以。
另外下面有个看起来很重复的判断,是为了防止当只输入一项想改的内容时,把该记录其他项记录都修改为空。


```cpp
void Book::on_pushButton_clicked()//修改
{QString sql,s1,s2,s3,s4,s5,s6,s7,s8,s9;//设置string类型变量分别存储sql语句,以及九个lineEdit框中的内容s1=ui->lineEdit_s1->text();s2=ui->lineEdit_s2->text();s3=ui->lineEdit_s3->text();s4=ui->lineEdit_s4->text();s5=ui->lineEdit_s5->text();s6=ui->lineEdit_s6->text();s7=ui->lineEdit_s7->text();s8=ui->lineEdit_s8->text();s9=ui->lineEdit_s9->text();//读取文本框的信息sql="select count (*) from Book where 绘本编号='"+s1+"'";QSqlQueryModel *model1=new QSqlQueryModel;model1->setQuery(sql);QModelIndex index1=model1->index(0,0);if(index1.data()==0){QMessageBox::about(NULL,"警告","要修改的记录不存在");}else//还需判断   每个lineedit里面是否为空,做有效修改{if(!s2.isEmpty()){sql="update Book set 绘本名='"+s2+"' where 绘本编号='"+s1+"'";model1->setQuery(sql);}if(!s3.isEmpty()){sql="update Book set 作者='"+s3+"' where 绘本编号='"+s1+"'";model1->setQuery(sql);}if(!s4.isEmpty()){sql="update Book set 出版社='"+s4+"' where 绘本编号='"+s1+"'";model1->setQuery(sql);}if(!s5.isEmpty()){sql="update Book set 出版时间='"+s5+"' where 绘本编号='"+s1+"'";model1->setQuery(sql);}if(!s6.isEmpty()){sql="update Book set 价格='"+s6+"' where 绘本编号='"+s1+"'";model1->setQuery(sql);}if(!s7.isEmpty()){sql="update Book set 语言='"+s7+"' where 绘本编号='"+s1+"'";model1->setQuery(sql);}if(!s8.isEmpty()){sql="update Book set 适合年龄='"+s8+"' where 绘本编号='"+s1+"'";model1->setQuery(sql);}if(!s9.isEmpty()){sql="update Book set 库存='"+s9+"' where 绘本编号='"+s1+"'";model1->setQuery(sql);}QMessageBox::about(NULL,"提示","绘本记录修改成功");}
}

借阅管理

在此模板中进行借书和还书操作,同时程序中为每个会员添加了等级,分为高级和普通会员。普通会员在借书时候会考虑是否借阅本数超过十本。普通用户在还书时也会通过函数计算借书是否超时(十天),如果超时,将自动计算出超市费用并通过弹窗提醒缴费。
高级会员借书还书没限制。
同时在该模板中应用了自定义类DataCheck 中的DaysBetween2Date(QString date1, QString date2)函数,来计算两个日期之间的差值。


其中这个模块中不管是借书还是还书都要对三个表进行查询和修改,同时涉及到普通会员和高级会员的区别,考虑每次借书普通会员是否借了超过十本书了。还书时考虑普通是否超时,超时时的收费问题。

借书与还书的函数

void manangement::on_pushButton_clicked()//借书
{QString sql,sql1,sql2,s1,s2,s3,s4;QSqlQuery query;s1=ui->lineEdit_s1->text();s2=ui->lineEdit_s2->text();s3=QDate::currentDate().toString("yyyy-MM-dd");sql="select count (*) from mannagement where 绘本编号='"+s1+"' and 会员编号='"+s2+"'";sql1="select count (*) from Book where 绘本编号='"+s1+"'";sql2="select count (*) from vip where 会员编号='"+s2+"'";QSqlQueryModel *model1=new QSqlQueryModel;QSqlQueryModel *model2=new QSqlQueryModel;QSqlQueryModel *model3=new QSqlQueryModel;model1->setQuery(sql);model2->setQuery(sql1);model3->setQuery(sql2);QModelIndex index1,index2,index3;index1=model1->index(0,0);index2=model2->index(0,0);index3=model3->index(0,0);query.exec("select * from vip where  会员编号='"+s2+"'");int number;while (query.next()){s4= query.value(5).toString();//会员等级number=query.value(6).toInt();}qDebug()<<s4;qDebug()<<number;if(index1.data()!=0){QMessageBox::about(NULL,"警告","借书失败,该会员已借有该书");}else if(index2.data()==0||index3.data()==0){QMessageBox::about(NULL,"警告","借书失败,不存在该绘本或会员");}else if(number>=10&&s4=="普通        ")//普通会员只能借十本书{QMessageBox::about(NULL,"警告","借书失败,普通会员借书限制十本");}else{sql="insert into mannagement (绘本编号,会员编号,借书时间) values('"+s1+"','"+s2+"','"+s3+"')";model1->setQuery(sql);sql="update vip set 借阅本数=借阅本数+1 where 会员编号='"+s2+"'";model1->setQuery(sql);sql="update Book set 库存=库存-1 where 绘本编号='"+s1+"'";model1->setQuery(sql);QMessageBox::about(NULL,"提示","借书成功");}}void manangement::on_pushButton_2_clicked()//还书
{QString sql,s1,s2,s3,s4,s5;QSqlQuery query;s1=ui->lineEdit_s1->text();s2=ui->lineEdit_s2->text();s3=QDate::currentDate().toString("yyyy-MM-dd");sql="select count (*) from mannagement where 绘本编号='"+s1+"' and 会员编号='"+s2+"'";QSqlQueryModel *model1=new QSqlQueryModel;model1->setQuery(sql);QModelIndex index1=model1->index(0,0);query.exec("select * from vip where  会员编号='"+s2+"'");while(query.next())s4= query.value(5).toString();//会员等级query.exec("select * from  mannagement where  绘本编号='"+s1+"' and 会员编号='"+s2+"'");while(query.next())s5=query.value(2).toString();if(index1.data()==0){QMessageBox::about(NULL,"警告","还书失败,没有发现借书记录");}else{sql="delete from mannagement where 绘本编号='"+s1+"' and 会员编号='"+s2+"'" ;model1->setQuery(sql);//删除借书记录sql="update vip set 借阅本数=借阅本数-1 where 会员编号='"+s2+"'";model1->setQuery(sql);sql="update Book set 库存=库存+1 where 绘本编号='"+s1+"'";model1->setQuery(sql);DataCheck *d=new DataCheck;int day=d->DaysBetween2Date(s5,s3);if(day>10&&s4=="普通        "){int price=day-10;QString s=QString("还书成功,逾期需支付%1元").arg(price);QMessageBox::about(NULL,"警告",s);return;}QMessageBox::about(NULL,"警告","还书成功");}
}

总结

课程设计是最近两三天赶着完成的,从ODBC的配置到Qt的使用都是第一次接触花了很长时间,基本算是基本实现了基本功能,还算基本满意。

不足之处:
1.用户登陆页面因为时间比较敢只设置了一个用户名和登录账号,也没有与数据库连接到相应的表中。
2.数据库表结构的设计,因为数据量比较少 我就没打算分表。但要是规范的程序,数据库的设计应该要满足第三范式左右。
3.图形化界面做的比较丑,算是一个短板。
4代码不算规范,也算是看得过去随便写写。

同时也感谢b站上的一些up主的分享和csdn上很多博主的经验贴,给了我很大帮助

写这篇博客也是记录自己课程设计的一些感受。做的不算好,多多指正。

如果有需要代码的同学可以加qq2942512609

c++课程设计——绘本之家信息管理系统(qt图形化工具,SQL server数据库)相关推荐

  1. 【数据库技术课程设计】 电信学院考研信息管理系统 +【Visual FoxPro】

    目录 一 .系统设计背景 二.系统可行性分析 2.1 经济可行性 2.2 技术可行性 2.3 操作可行性 2.4 可行性分析总结 三.软件选择与编程环境 3.1 软件选择 3.2 编程环境 四.系统总 ...

  2. Java课程设计-基于Swing的学生信息管理系统

    Java课程设计-基于Swing的学生信息管理系统 1.介绍 2.相关技术 3.项目地址 4.所需环境 5.安装教程 6.运行截图 7.相关博客 本代码是整理其他人项目,如有问题请及时联系笔者. 1. ...

  3. 计算机信息管理是学什么课程设计,毕业论文计算机专业学生信息管理系统(数据库课程设计)...

    毕业论文计算机专业学生信息管理系统(数据库课程设计) (70页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 兰州石化职业技术学院毕业设计( ...

  4. C++课程设计之高校学生简单信息管理系统

    给大家分享一个用C++语言编写的高校学生信息管理系统,程序比较简单,也比较好理解,适合刚入门C++的程序小白,大学生做C++相关的课程设计也可以给你提供一些思路,或者在此基础上修改一下,添加一些自己的 ...

  5. 数据结构课程设计_《旅游景区信息管理系统》

    sxy.h #include <iostream> #include <cstring> #include <malloc.h> #include <cstd ...

  6. Linux下访问处理器硬件信息原理:图形化工具RWLinux的诞生

    大家好,这里是第五位面壁者.今天继续我们的学习之旅,同样视频会放在B站,PPT和视频录音的文字版本会在下面这些平台同步更新,欢迎各位大佬参观指导. 今天的这期内容,我给大家介绍一款我自己编写的可以在L ...

  7. .net学习笔记——学生信息管理系统(一、在SQL server中新建学生信息库)

    (学习目标:使用.net 窗体制作一个学生信息管理系统,满足学生信息.班级信息.年级信息的增删改查.) 第一天:建库 任务:在SQL Server中建一个小型的学生信息管理系统数据库,可以存放学生信息 ...

  8. 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》...

    一.课程笔记 1.1  软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...

  9. 计算机课程设计-基于ssm+vue的物资管理系统(前后端分离)-物资出库入库管理系统java代码

    计算机课程设计-基于ssm+vue的物资管理系统(前后端分离)-物资出库入库管理系统java代码 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言:Ja ...

最新文章

  1. APK 签名中应该注意的一些点 (未完待续)
  2. 动态代理之Rxjava/Retrofit应用实战
  3. 多层mvc,thikphp进阶
  4. 红黑树二叉查找树二叉排序树的理解
  5. .net odbc连接mysql数据库,下载安装MySQL数据库ODBC驱动和配置MySQL ODBC数据源
  6. python程序入门设计_程序设计入门—Python
  7. VC,一条会被鼠标移动的直线
  8. 开源代码的使用 二次开发
  9. 计算机等级考试绝对应用,96年4月至210年全国计算机等级考试绝对全收集.docx
  10. HTTPS传输协议原理
  11. 9、kubernetes之statefulset控制器
  12. Linux教学的误区
  13. html让ie11不用兼容视图,如何设置ie11浏览器兼容性视图?
  14. 计算机里没有四款小游戏,90后最爱玩的4款“4399”小游戏,一个都没玩过的太可怜!...
  15. 【Day02_0419】C语言选择题
  16. html后续及css
  17. 【推荐】Windows 服务器必备十大软件
  18. Java实现 洛谷 P1103 书本整理
  19. 华为工程师总结的LeetCode刷题笔记提供下载,太优秀了
  20. 有谁弄过MCU通过SSPI方式配置 LATTICE XO3 XO2 CPLD的?

热门文章

  1. deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main 一直访问不到
  2. 计算机科学的好处和坏处,电脑的坏处作文(五篇)
  3. linux命令行界面出现菱形,Linux显示菱形解决.md
  4. linux 卸载蓝牙驱动,英特尔释出新无线蓝牙更新 - 驱动程序版本20.90.1
  5. 让你的群晖NAS支持DTS!
  6. 主题 12:实践案例集锦之接口设计
  7. zfaka系统商品购买帮助与订单查询
  8. 花椒接口Mock方案
  9. 微赞微擎提示:警告!您使用的插件不是官方安装的,请移步论坛,解决办法
  10. 村村通工程 最小生成树+并查集