2020.7.11修改了表的结构,表之间增加了外键联系,更加完整且符合第三范式。
数据库设计实验报告
本系统是一个针对学校的网上图书馆借还系统,通过网络,学生可以很轻松的查询某些书籍是否可以借到,并且还可以通过网络续借书籍。管理员可以通过该系统很容易的将书籍信息存储到数据库和查询学生的借还情况,并且通知那些逾期的学生尽快归还或者续借。超级管理员则对学生和管理员的信息进行修改,或者增加用户。用户必修用户名和密码相互匹配正确后才能登陆成功,然后在进行相应的操作。对于非法操作,该系统有识别作用。
登陆功能:登陆系统为身份验证登陆。分为学生登陆,管理员登陆,超级管理员登陆。不具备注册功能。
学生登陆后:显示该用户的基本信息。可以修改密码,修改密保问题,查看书籍并且预约书籍,查看已经借到的书籍的情况,还书的情况。
管理员登陆后:显示该用户的基本信息。可以修改密码,修改密保问题,查看书籍信息并且修改数据信息,添加书籍。查看学生的借还情况。
超级管理员登陆后:显示该用户的基本信息。可以修改密码,修改密保问题,查看,修改管理员的信息,添加新的管理员。添加用户学生,查看学生的情况。
修改密码:通过匹配密保问题的答案进行修改密码。
修改密保问题:通过匹配原密码进行修改密保问题。
查看还书情况:查看书籍的具体信息后,可以对该书籍进行预约,预约和预约书籍功能一样。
修改书籍信息:查看书籍的具体信息后,可以对该书籍的信息进行修改。
增加书籍:增加书籍。
查看学生借还情况:查看学生的借还详细信息。
权限移交:只有超级管理员才有的功能。删除该管理员,新增加一个超级管理员。
增加管理员:增加一个新的管理员。
查看管理员信息:查看信息后,可以进行信息修改
查看学生信息:只能查看学生的信息,而不能进行修改
未命名文件(2)
系统主要结构功能如下:
名字:书籍信息表
名字:学生信息表
描述:数据库中学生信息表各字段的集合,包括学号,姓名,学院编号,性别,出生日期,身份证号码,手机号码
名字:学生账号信息
描述:数据库中学生账号信息表各字段的集合,包括学号,密码,密保问题,密保答案,剩余可以借次数
名字:学生预约
名字:学生借书
名字:学生还书
名字:管理员信息
描述:数据库中管理员信息表各字段的集合,包括工号,名称,性别,手机号码,email,身份证号码
名字:管理员账号信息
描述:数据库中管理员账号信息表各字段的集合,包括工号,密码,密保问题,密保答案
名字:超级管理员信息
描述:数据库中超级管理员信息表各字段的集合,包括工号,姓名,性别,手机号码,身份证号码,email
名字:超级管理员账号信息
描述:数据库中超级管理员账号信息信息表各字段的集合,包括工号,密码,密保问题,密保答案
名字:用户信息
描述:数据库中账户信息以及账户类型,包括工号/学号,用户类型。
数据库关系图
经过上述系统功能分析和需求总结,设计如下面所示的数据项和数据结构。
学生信息:存放学生信息。包括学号,姓名,班级编号,性别,出生日期,身份证号码,手机号码
学生账号信息:存放学生账号信息。包括学号,密码,密保问题,密保答案,剩余可以借的次数。
管理员信息:存放管理员信息。包括工号,姓名,性别,手机号码,身份证号码,email。
管理员账号信息:工号,密码,密保问题,密保答案
超级管理员信息:工号,姓名,性别,手机号码,身份证号码,email
超级管理员账号信息:工号,密码,密保问题,密保答案
职工信息:工号/学号,职位
书籍实体:
学生信息实体:
学生账号实体:
学生预约实体:
学生借书实体:
学生还书实体:
管理员信息实体:
管理员账号实体:
超级管理员信息实体:
超级管理员账号实体:
职工信息:
所有实体的联系:
将E-R图转换成的关系模式如下:
学生信息(学号,姓名,校区编号,性别,出生日期,身份证号码,手机号码)
学生账号信息(学号,密码,密保问题,密保答案,剩余可以借次数)
管理员信息(工号,名称,性别,手机号码,email,身份证号码)
管理员账号信息(工号,密码,密保问题,密保答案)
超级管理员信息(工号,姓名,性别,手机号码,身份证号码,email)
超级管理员账号(工号,密码,密保问题,密保答案)
职工信息(工号/学号,职位)
(Login)
(ForgetPassword)
(Student,StudenOrder)
预约情况
(StudentAppointment)
(StudentBorrow)
HandleBorrow//查询借书情况**if**(i==1){Stringsql="selectbook.bno,bname,bauthor,btranslator,bpublish,bsort,sborrow,soverdue"\+"fromstudentborrow,bookwherestudentborrow.bno=book.bnoandsno='"\+num+"'orderbysborrowdesc";Statementstat=con.conn.createStatement();ResultSetres=stat.executeQuery(sql);ArrayList\
(StudentReturn)
(BookInformation)
HandleCancel(对应bookimformation)//查询预约信息sql="select\*fromstudentorderwheresno='"+sno+"'andbno='"+bno+"'";//取消预约sql="begintranss"\+"deletefromstudentorderwheresno=andbno="\+"if\@\@error!=0rollbacktransselsebegin"\+"updatebooksetbstock=bstock+1wherebno=end"\+"if\@\@error!=0rollbacktransselsebegin"\+"updatestudentacountsetsstats=sstats+1wheresno=endcommittran"\+"if\@\@error!=0rollbacktranss";1234567891011121314151617181920212223246.2.3管理员界面管理员端界面
(Admit)
(ChangBookInformation)
(StudentInformation)
(Mstudent)
HandleStudent(对应StudentInformation)Stringsno=fromClient.readUTF();Stringbno=fromClient.readUTF();Stringsql="select\*fromStudentInformation"\+"wheresno="+sno+"";Statementstat=con.conn.createStatement();sql="select\*frombookwherebno='"+bno+"'";1234567891011121314156.2.4超级管理员界面超级管理员界面
(superAdmit)
添加、修改管理员信息
(information)
(yijiaoquanxian)
(changepassword)
HandlePassword(对应changpassword)修改密码:分别对应学生,管理员,超级管理员"updatestudentacountsetspassword="+"wheresno=""updateadmitacountsetapassword="+"whereano=""updatesuperadmitacountsetspassword="+"wheresno="12345678910111213修改密保
(changequestion)
HandleQuestion(对应changQuestion)此处只列举了修改学生"begintransavupdatestudentacountsetsquestion=wheresno="\+"if\@\@error!=0rollbacktransavelsebegin"\+"updatestudentacountsetsanswer=wheresno=endcommittran"+"if\@\@error!=0rollbacktransav"1234567891011127.项目总结7.1数据库设计首先需要对数据库进行需求分析。在这一步的时候,要详细考虑到各个功能的实现,以及不同成员之间的联系。一定要考虑周到,不然在之后的过程会有很大的困难。在这一步中,参考了某些图书馆的网上图书管理系统,分析他们的需求与功能。再结合当下疫情实际情况分析,最后给出总需求,画出各部分流程图以及系统流程图。
设计概念结构,对用户的需求进行综合,归纳与抽象,形成一个独立于具体DBMS的概念模型。画出ER图。
根据ER图转换成关系模式。在SQLSERVER中建立对应的数据库以及数据表。详情请见建表代码。
服务端的主要问题就是在于如何与客户端建立起socket连接,并且实现各种不同需求的监听处理。在每一个处理中,要和数据库进行连接,并且采用sql语句对数据库进行修改。主要使用Statement或者PreparedStatement接口执行sql语句。这一部分加深了我对jdbc的理解,以及学会了它的使用方法。
服务器界面:
下面的服务器端的部分代码:
与客户端建立连接并处理请求:
链接数据库:
查询信息:
因为代码质量比较一般,因此大大小小的bug其实有挺多的。最常见的bug就是sql语句的错误,导致的服务端崩溃。因为sql语句有很多引号,以及查询条件什么的不清楚,导致数据库无法查询就会引起崩溃。
更多的bug就是在GUI界面设计的时候的一些文字格式,文本框大小,各个按钮等的整体布局。如果没有调试好会导致部分不显示之类的bug。
徐云彪编著.数据库原理与技术[M].浙江:浙江大学出版社,2002:23-59.
陆晶编著.Java程序设计[M].北京:清华大学出版社,2002:10-136.
孙元编著.Java语言SQL接口[M].北京:清华大学出版社,1997:3-59.
苗春义著.Java项目开发全程实录[M].北京:清华大学出版社,2008:45-159.
希尔伯沙茨著.数据库系统概念[m].北京:机械工业出版社,2012:28-157
这个项目是初学Java开发和数据库做的一个项目,整体代码质量不是很高。但是程序是能够完美运行的,而且不存在什么bug。要注意的修改与数据库连接的端口号,以及数据库的账号和密码。还有创建表的时候要注意表的信息完整性,不然会出现线程错误。