具体实现_
https://blog.csdn.net/birdy_/article/details/75201980
1.设计要求
设计并实现一个精简的图书管理系统,要求具有图书入库、查询、借书、还书、借书证管理等功能。
通过该图书馆系统的设计与实现,提高学生的系统编程能力,加深对数据库系统原理及应用的理解。
2.数据对象
2.1书籍
book |
|
数据类型 |
约束 |
编号 |
Book_ID |
int |
primary key |
类别 |
Type |
nvarchar(10) |
FOREIGN KEY(Type) REFERENCES type(Book_type) |
书名 |
Title |
nvarchar |
|
出版社 |
Publisher |
nvarchar |
|
年份 |
Publish_year |
int |
check(publish_year>1800) |
作者 |
Author |
NVARCHAR |
|
价格 |
Price |
decimal(6,2) |
|
总藏书量 |
Number |
int |
check(Number>=0) |
库存 |
Stocks |
int |
check(Stocks>=0) |
2.2书籍类型
type |
|
数据类型 |
约束 |
类型 |
Book_type |
nvarchar(10) |
primary key |
编号 |
Type_number |
int |
NOT NULL UNIQUE,check (Type_number >0) |
2.3借书证
library_card |
|
数据类型 |
约束 |
借书证号 |
card_ID |
int |
primary key |
姓名 |
Username |
varchar(10) |
|
单位 |
Company |
nvarchar |
|
类别 (教师 学生等) |
Type |
varchar(10) |
check (Type in ( 'student', 'teacher' ) ) |
2.4管理员
manager |
|
数据类型 |
约束 |
管理员ID |
manager_ID |
int |
primary key |
密码 |
Password |
varchar(10) |
not null |
姓名 |
Name |
varchar(10) |
|
联系方式 |
Connection |
int |
|
2.5记录
record |
|
数据类型 |
约束 |
书号 |
Book_ID |
int |
REFERENCES book(Book_ID) |
借书证号 |
card_ID |
int |
REFERENCES Library_card(card_ID) |
借期 |
borrow_data |
data |
|
还期 |
return_data |
data |
|
经手人 |
manager_ID |
int |
REFERENCES manager(manager_ID) |
3 触发器设计
3.1 约束(未在逻辑结构设计中涉及的部分)
-出版年份不大于当前年份
-检查输入时,库存与总藏书量是否相等
-借出时检查是否有余量
-借出时检查借书证,如果类型为老师则最多借出5本书,学生最多借出3本书(目前仅考虑这两种类型)。
3.2 性质
-插入record(借出)更新库存
-删除record(还书)更新库存
-插入book检查是否已有信息完全相同的column,有则合并
4 基于IDE的图书管理系统设计
这一部分是对基本功能模块的思考
4.1.管理员登陆
-获取用户输入账号及密码
-在manager表中查找相应信息,判断是否正确
-记录登录状态
4.2.图书入库
————单本入库————
-输入书名、出版社等信息,输入数量
-输入的数量是小数、或者负数小数,则输出错误提示框。
-如果类型不存在,输出错误提示框
-如果出版年份大于现在年份,则数据库底层给出错误。
-如果信息完全相同借助于DB底层的触发器,自动合并
————单本删除————
在这里提供删除操作,对于书籍遗失等现象进行处理
-根据ID和数量,进行数据的更新
-如果删除数量大于库存,提供错误信息
-等于库存,根据总量选择update或者delete
-小于库存,进行update
————批量入库————
-从文档中读取数据,txt中信息类似于单本插入
-创建临时表,可在临时表上修改数据
4.3.图书查询
-提供信息匹配
-在book中选择符合条件的信息
4.4.借书
-输入book_ID和card_ID
-根据card_ID显示该借书证已借书籍
-判断库存,如果库存为0,返回record中该本书最早的还书时间
-考虑到生活中人工计算书号的可能性不大,在这里根据类别生成编号
由于图书馆的书需要用到的删除操作较少,我们考虑的编号方式是第一位是类别的ID,后三位是这本书的在该类书中的编号,比如小说对应1,则书籍编号为1000~1999。新插入的书的编号默认为现有该类型书最大的编号加一。如果某一类的书编号超出1000,入库无法继续进行,数据库会发出重新编码的要求。考虑到有可能的删除(比如书籍遗失),并且对于图书馆,删除的操作不会太多,这种编码方式在实现较快查找的同时,可以保证较高的利用率。
-读取管理员信息,现有时间,以40天为借阅期限,自动生成日期
-用DB底层的触发器,更改库存
4.5.还书
-选择记录
-删除选中记录
-用DB底层的触发器,更改库存
4.6.借书证管理
————查找借书证————
-根据输入ID查找记录
————删除借书证————
-删除选中记录
-如果没有已借书籍,直接删除
-如果有已借书籍,继续删除则默认书籍全都返回,或者停止以进行进一步操作。
5.交互设计
这一部分主要是建立在Qt的基础上,对已有的IDE部分的设计进行补充。
5.1.管理员登陆
-欢迎以及显示当前登录状态
-密码显示*
-显示除查询界面以外的界面
5.2.图书入库
————单本入库————
-在输入书名的时候,会对显示的书籍进行查找
-如果在图书馆系统中已经存在,可以直接点击该信息,会自动将书名、出版社等信息自动填入输入框
-点击左侧类别,会自动填入类别
————单本删除————
-单击记录,会自动填入数量(总量)和ID
————批量入库————
-设置清空、删除此条的命令,方便用户进行处理
-双击信息可以对其进行编辑
-插入后错误信息会留下以方便用户对可能的错误信息进行处理
5.3.图书查询
-借助编辑文本以及按钮状态转变的信号,考虑不使用查询按钮,在用户操作时实时进行查询
-多种排序方式方便浏览(这一块由于中文特殊的编码方式,对于与此相关的排序效果不好)
-可以选择是否显示无余量的书目
5.4.借书
-根据card_ID显示用户信息,帮助管理员查看用户信息
-根据book_ID显示书籍信息,帮助确认书籍
5.5.还书
-单击借书记录可以读取Book_ID和card_ID
5.6.借书证管理
-新建借书证的时候,新建ID的方式与图书相似
-借书证类别选取
-返回对话框显示ID
5.7.显示
-borrow_info和manager在前面的要求里没有直接的完整的显示,考虑到这一点新增<借书记录>和<管理员信息>两栏,以对数据库信息进行更好的观察。考虑到我对这个书籍管理系统的定位是方便用户和管理员的操作,认为管理员的信息应该由上层负责人直接导入,管理员不应该对自己的信息进行随意的修改,所以这一块只提供浏览不提供修改。
5.8.撤销操作
-考虑到管理员错误操作的可能性,希望能提供撤销操作的事件。