基于C+++Mysql实现(WinForm)图书管理系统【100010034】

news/2025/1/8 23:37:59/

图书管理系统

实验内容、步骤以及结果

做出数据流图和数据字典。

在数据流图和字典的基础上做出 E-R 图(概念结构设计)。

学生:

图书:

管理员:

汇总:

在 E-R 图基础上进行关系模式设计(至少满足 3NF)(逻辑结构设计)。

(图书一共有 4 种状态:

  • 状态 0:在馆内无预订,
  • 状态 1:在馆内有预订,
  • 状态 2:已借出无预订,
  • 状态 3:已借出有预订。)
Book(BookID, Title, Author, Publisher, Pyear, Category, State)

图书(书号,书名,作者,出版社,出版年,分类,状态)

Student(StuID, StuName, Gender, Dept, Class)

学生(学号,姓名,性别,学院,班级)

Librarian(LibID, LibName)

管理员(工号,姓名)

RBorrow(BookID, StuID, BrDate)

预借阅(书号,学号,借阅日期)

RRenew(BookID, StuID, RnDate)

预续借(书号,学号,续借日期)

RReturn(BookID, StuID, RtDate)

预归还(书号,学号,归还日期)

Borrow(BookID, StuID, BrDate)

借阅(书号,学号,借阅日期)

Renew(BookID, StuID, RnDate)

续借(书号,学号,续借日期)

Return(BookID, StuID, RtDate)

归还(书号,学号,归还日期)

根据需求分析中的各种数据请求得出各种视图以及各种约束、规则、触发器脚本描述。

视图:

学生的除密码外的所有信息,供管理员修改。

约束:

  • 所有预订与确认的表中的所有列、书名与作者、学生与管理员姓名为非空;
  • State 只能为 0、1、2、3,默认值为 0.
  • 性别为“男”或“女”。
  • 初始密码为“123456”.

规则:

同一个人不能在一秒之内对同一本书借了还还了借。

触发器:

  • 学生预借阅:判断书此时未被预订,写入预订时间,更新图书状态为已预订;
  • 学生预续借:判断此书已借给相同学生且未被预订,写入续借时间;
  • 学生预归还:判断此书已借给相同学生,写入归还时间;
  • 管理员确认借阅:若在馆内更新相关图书状态为已借出,若已借出则更新为已预订;
  • 管理员确认续借:不更新图书状态;
  • 管理员确认归还:更新图书状态为在馆内。

实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)

开始不会写界面程序,学习了一些 Qt 的操作与语法后逐渐写成,参考:

qmake 编译失败问题:文件路径必须为英文,不能含有中文字符。

Qt 连接 MySQL 驱动出错问题 QMYSQL driver not loaded;

**解决:**更改了 Qt 自带驱动中 libqsqlmysql.dylib 保存路径,install_name_tool -change /usr/local/mysql/lib/libmysqlclient.20.dylib /usr/local/Cellar/mysql/8.0.22_1/lib/libmysqlclient.21.dylib libqsqlmysql.dylib,Windows 中直接将 SQL 的驱动 libmysql.lib 复制粘贴到 C:\Qt\5.12.0\src\plugins\sqldrivers\mysql 即可。

尚未解决的问题:可能是全局静态变量 db 未赋初值的问题,从登录界面退出程序系统会报 L1brary quit unexpectedly。

程序从 Mac 移植到 Windows 上后界面大小不一致,加入判断屏幕分辨率改善。

开发环境(包括语言、平台、所使用数据库的名称以及版本号)

语言:C++

平台:MacOS 11.0, Qt 5.12.0, clang_64bit

Windows 10, Qt 5.12.0, MinGW_64_bit

数据库:华为云 GaussDB

ip: 139.9.119.34;

帐号:s2018303116;

密码:GaussDB@123;

数据库名:library_2018303116。

MySQL 版本号:8.0.18

♻️ 资源

在这里插入图片描述

大小: 37.4MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87248373


http://www.ppmy.cn/news/3111.html

相关文章

软件测试基础理论体系学习7-【一文看懂】什么是等价类划分法?边界值分析法?因果图法?错误推测法?功能图分析法?

7-【一文看懂】什么是等价类划分法?边界值分析法?因果图法?错误推测法?功能图分析法?1 等价类划分法1.1 理论知识1.1.1 划分等价类1.1.2 划分等价类的方法1.1.3 设计测试用例1.1.4 设计测试用例原则:1.2 等…

R语言关于回归系数的解释

除非我们打算提出因果主张&#xff0c;否则我们应该像描述虚拟变量那样解释连续变量的回归系数。 一条有用建议是&#xff0c;以预测的方式解释回归系数 。要了解它们的含义&#xff0c;让我们考虑一个示例。 预测学生表现 hsb <- read.csv("datasets/hsb_comb_full.c…

【DOTS学习笔记】DOTS中的ECS架构与概念术语

目录前言Entity-Component-System游戏引擎架构演变DOTS1.0中的ECSDOTS下关于ECS的专有名词Entities and Components术语前言 本文是Metaverse大衍神君的《DOTS之路》系列课程的学习笔记 Entity-Component-System 实体组件系统&#xff08;ECS&#xff09;架构 遵循组合优于继承…

JAVA毕业设计H5新冠防疫宣传网站设计与实现计算机源码+lw文档+系统+调试部署+数据库

JAVA毕业设计H5新冠防疫宣传网站设计与实现计算机源码lw文档系统调试部署数据库 JAVA毕业设计H5新冠防疫宣传网站设计与实现计算机源码lw文档系统调试部署数据库本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;id…

Java二维数组项目练习

T1.显示所有书店客户的信息 示例代码 public static void main(String[] args) {String[][] users{{"1100","18","100"},{"1101","24","834"},{"1102","13","20000"},{"1103…

零基础入门JavaWeb—— XML

一、配置文件 1.1 配置文件的作用 配置文件是用于给应用程序提供配置参数以及初始化设置的一些有特殊格式的文件。 1.2 常见的配置文件类型 properties文件。例如Druid连接池就是使用properties文件作为配置文件。XML文件。例如Tomcat就是使用XML文件作为配置文件。YAML文件…

java-net-php-python-java生产管理系统计算机毕业设计程序

java-net-php-python-java生产管理系统计算机毕业设计程序 java-net-php-python-java生产管理系统计算机毕业设计程序本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术&#xff1a;Layui、H…

opencv中waitkey(0)的使用

楼主在运行一个链接了OpenCV库的程序时&#xff0c;发现了一个奇怪的现象&#xff0c;就是我的在程序中调用的等待函数waitKey()不起作用&#xff0c;不管是是使用waitKey(100)&#xff0c;waitKey(0)&#xff0c;waitKey(-1)&#xff0c;或者是使用if(waitKey(0) ‘q’)&…