武汉理工大学数据库系统综合实验报告.docx
- 文档编号:8795323
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:49
- 大小:3.48MB
武汉理工大学数据库系统综合实验报告.docx
《武汉理工大学数据库系统综合实验报告.docx》由会员分享,可在线阅读,更多相关《武汉理工大学数据库系统综合实验报告.docx(49页珍藏版)》请在冰豆网上搜索。
武汉理工大学数据库系统综合实验报告
1、需求分析
1.1问题提出
随着互联网技术、移动互联网技术的飞速发展,使得人们已经进入互联网时代。
互联网作为新生代的科技产物,代表着新媒介技术的产生、发展和普及,正在逐步改变着人们的生活方式和水平。
高校作为教育改革的先锋阵地,自是首当其冲。
随着高校教学改革的不断深入,越来越多的高校都陆续采用了学分制。
高校大学生们可以根据自己兴趣和爱好来自由选择自己所喜爱的课程。
基于高校校园网的网上选课系统不仅克服了以往报送选课方式所暴露出的缺点与不足。
同时极大地提高了高校教务人员的工作效率,极大地方便了高校师生。
网上学生选课系统采用了简便易用的.net作为运行平台。
除了传统的C/S体系结构,本系统还提供了更为方便的B/S结构。
系统运行环境要求较低,配置较为简单,方便普通用户使用。
1.2功能需求
根据图书检索数据库系统的需求,将本系统分为三个角色模块:
学生模块,教师模块和管理员模块。
学生模块的功能包括退课、选课、课表查看以及密码管理功能。
教师模块主要提供课程查看、成绩录入、名单导出和修改密码功能。
管理员模块提供增删课程、课程及开课情况查看以及修改密码功能。
所有的交互操作都经过反复验证,所有的操作结果将会即时的展现在屏幕上。
功能结构图如图1.1所示。
图1.1功能结构图
下面将详细描述三个角色模块。
(1)学生模块
学生模块提供退选课,课程表查看,已选课程查看,跨专业选课以及修改密码功能,退选课需学生选中课程名后右键选择退课或选课,课程表查看将提供直观的方式来展现每周课程,已选课程查看将供学生查看更为详细的课程信息,跨专业选课需要学生选择相应的专业名才能跨选相应班级的课表,修改密码时需输入旧密码和新密码,新密码需做格式匹配,旧密码需要做验证,生效后方可成功修改密码。
(2)教师模块
教师模块提供教师个人课表查看,成绩录入,名单导出以及修改密码功能。
教师个人课表查看仅提供课程详情查看,成绩录入界面会直观的展示所有成绩项,教师可以在此界面手动录入成绩,同时在成绩录入界面教师可以将学生的名单导出用以上课点名。
密码修改功能作为所有角色模块的功能不再赘述。
(3)管理员模块
管理员模块提供开课退课以及查看课表的功能,课表被分为课程表和开课表。
课程表中将显示同种课程的详细信息,在开课表中提供每种课程对应的开课信息,管理员可以选中相应开课进行退课。
密码修改功能不再赘述。
1.3非功能性需求
(1)实用性:
为信息交流提供方便,有效进行信息管理。
(2)操作简单:
本系统应该适用于不同水平的使用者,包括专业人士和非专业人士,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。
(3)技术先进:
产品的系统设计和开发应紧跟着整个计算机发展潮流,采用当时最先进的设计思想,利用最新的开发技术和开发工具。
使系统能够无论在功能设计上,还是在技术实现上,都处于同行业的领先地位。
(4)安全性:
应该能广泛应用于不同类型的企事业单位。
系统采用模块化设计,用户可以根据自己的实际情况自行调整配置文件,使系统在不同的硬件环境下都能得以应用。
(5)代码可读性好:
文中的代码将尽可能简洁,易懂。
1.4开发与运行环境
1.4.1VisualStudio2017编译器
MicrosoftVisualStudio2017作为一个集成解决方案,适用于无论是个人或者各种规模的开发团队。
MicrosoftVisualStudio2017实现了同事间的无缝协作,提高了生产效率与专注度,最终好的点子变成了优秀的现实应用。
VisualStudio2017是一个综合性产品系列,适用于每一位希望升级或创建精彩应用程序的组织、团体和个人开发人员。
,并且,它更加适合用于开发C#窗体应用程序。
1.4.2SQLSever2017数据库管理系统
SQLServer是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。
MicrosoftSQLServer近年来不断更新版本,目前最新版本就是2017年份推出的SQLSERVER2017。
1.4.3eclipseforJavaEE
Eclipse是著名的跨平台的自由集成开发环境(IDE)。
最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。
许多软件开发商以Eclipse为框架开发自己的IDE。
1.4.4tomcat9.0服务器
Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。
由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现。
因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。
2、数据库设计与实现
2.1概念设计
根据系统功能需求分析,数据库涉及的实体如下:
(1)学生
对应属性有:
学号,密码,姓名,入学日期,性别
(2)教师
对应属性有:
班级编号,班级名称,学院,专业
(3)教师
对应属性有:
教师编号,密码,入职时间,学院,教师名,性别
(4)管理员
对应属性有:
管理员编号,密码,姓名,性别
(5)课程
对应属性有:
课程编号,课程名称,开课学院,当前开课数目,学分数,学时数,
(6)开课
对应属性有:
开课编号,开始周数,结束周数,上课时间,最大人数,已选人数,成绩比例。
系统班级为单位推荐课程,每个班级可以推荐多门课程,每门课程可以是多个班级的推荐课程,因而课程与班级之间是多对多的关系;
每个课程可以多次开课,但是每个开课只能对应一门课程,因而课程与开课之间是一对多的联系。
每个开课只能由一个老师讲授,而一个老师可以讲授多门课程,因而教师与开课之间是一对多的关系。
一个学生可以选择多门课程,一门课程可以被多个学生选择,因而学生与课程之间是多对多的关系,同时,每个学生选课最终应该存在对应的平时成绩,实验成绩,考试成绩,以及由此按照成绩比例算出的总成绩。
由此,设计数据库的cdm图如图2.1:
(由于篇幅限制,见下页)
图2.1数据库设计CDM图
2.2逻辑设计与物理设计
从E-R图中导出关系模型的原则如下:
(a)对于E-R图中的每一个实体,都应转换为一个关系。
该关系应包括对应实体的全部
属性,并应根据关系所表达的语义确定哪个属性(或哪几个属性组合)作为“PK”(PrimaryKey,主键)。
(b)对于E-R图中两个实体的1:
n联系,可以将“1”方实体的“PK”纳入“n”方实
体对应的关系中作为“FK”(ForeignKey,外键)。
(c)对于E-R图中两个实体的1:
n联系,可以将关系转换为一个实体,可以将“m”方
实体的“PK”和“n”方实体的“PK”作为关系实体的“FK”并组合成联合主键,其属性还包括该关系自身的属性。
由上述原则,导出数据库的pdm图如图2.2:
图2.2数据库设计PDM图
从上述物理模型可以看出,数据库将分成八个关系模式,即八张表,其中主要的学生表,班级表,课程表,开课表,选课表,教师表的设计如下:
表2.1学生表
列名
数据类型
是否为空
主键、外键
学生号
Char(9)
否
Pk
班级编号
Char(6)
否
Fk
密码
Char(32)
否
姓名
Char(20)
否
性别
Char
(2)
否
表2.2班级表
列名
数据类型
是否为空
主键、外键
班级编号
Char(6)
否
Pk
学院
Char(20)
否
班级名称
Char(20)
否
专业
插入(20)
否
表2.3教师表
列名
类型
是否为空
主键、外键
教师编号
Char(9)
否
Pk
教师名
Char(20)
否
密码
Char(32)
否
学院
Char(20)
否
入职时间
Date
否
性别
Char
(2)
否
表2.4课程表
列名
类型
是否为空
主键、外键
课程号
Char(6)
否
Pk
开课学院
Char(20)
否
课程名称
Char(20)
否
当前开课数
Int
否
学分数
Real
否
学时数
SmallInt
否
表2.5开课表
列名
类型
是否为空
主键、外键
开课编号
Char(9)
否
Pk
课程编号
Char(6)
否
Fk
教师编号
Char(9)
否
Fk
开始周数
SmallInt
否
结束周数
SmallInt
否
上课时间
Char(9)
否
已选人数
SmallInt
否
最大人数
SmallInt
否
成绩比例
Char(3)
否
表2.6选课表
列名
类型
是否为空
主键、外键
学生编号
Char(9)
否
Pk,Fk
开课编号
Char(9)
否
Pk,Fk
平时成绩
Float
是
实验成绩
Float
是
考试成绩
Float
是
总成绩
Float
是
2.3范式分析
根据数据库的范式理论,由于班级关系模式存在非主属性对码的传递函数依赖,故班级关系模式是二范式。
可以通过将班级表分解来提高规范程度,但这样将造成数据库查询过于复杂,因而对班级关系模式不进行分解。
在上述其他七个关系模式,即学生关系模式,教师关系模式,管理员关系模式,课程关系模式,选课关系模式,开课关系模式中:
(1)每个非主属性均完全函数依赖于任何一个候选码;
(2)所有主属性和对每一个不包含他的码也是完全函数依赖;
(3)没有任何一组属性完全函数依赖于非码的任何一组属性。
即,上述七个关系模式均属于BCNF。
2.4数据库实现
使用powerdesigner软件生成pdm图后,利用该软件直接生成sql脚本,在sqlservermanagementstudio软件中新建一个数据库,再执行该脚本,即可完成数据库的建立。
再使用powerdesigner软件生成测试数据脚本,再sqlservermanagementstudio软件中执行该脚本,完成测试数据的导入。
在导入测试数据过程中,发现powerdesigner生成的部分测试数据违反了有关约束,或者出现学生已选课程时间出现冲突,课程已选人数超过最大容量,数据命名无规律等情况,因而先用Excel等工具产生数据库测试数据,然后利用sqlservermanagementstudio软件导入这些数据。
3、应用程序设计
3.1软件结构设计
图3.1C/S软件结构图
3.2软件结构设计
3.2.1C#本地架构
(1)student_choose:
UI层,系统中各种界面的显示
(2)BLL:
业务逻辑层,处理各种逻辑上的问题
(3)DAL:
数据访问层,将从BLL传来的信息进行数据库操作,并将从数据库中取出的数据传给BLL进行相应操作
(4)Model:
里面封装了各种的模型便于数据相应的数据临时存储
3.2.2C/S模式架构
根据需求分析,C/S模式本地客户端软件架构设计如下:
(1)Control:
控制层,实行软件涉及到的有关逻辑;
(2)So:
连接层,进行与服务器端的通信;
(3)Tools:
工具层,提供软件中经常使用的方法,如XML数据格式转换,时间获取等;
(4)UI:
界面显示,负责软件界面的显示;
其中客户端应该提供如下主要功能:
选课,由addClass函数实现;
开设课程,由AddCourse函数实现
新增学生或教师,由AddPerson函数实现
关闭客户端,由close函数实现
提交成绩,由comSco函数实现
修改密码,由CorPsd函数实现
开设全新课程,由CreateCourse实现
退课,由delClass实现
删除课程,由delCourse实现
获取所有班级,由getallclass实现
获取所有开课课程,由GetAllClass实现
获取所有学院,由GetAllCollege实现
获取所有课程,由getallcourse实现
获取学生选课情况,由getSelected函数实现
将C/S模式服务器端软件架构设计成如下结构:
(1)JDBCPool:
数据库连接层,管理数据库连接;
(2)databaseServer:
数据库逻辑层,进行数据库查询,更新,删除和事务等操作
(3)MainServe:
通信层,实现与客户端信息的交互。
(4)userDao:
用户逻辑层,实现用户有关功能,如学生选课,获取推
3.3界面设计
3.3.1C#本地模拟系统界面设计
图3.2登陆界面
图3.3个人信息界面
图3.4推荐选课界面
图3.5跨专业选课界面
图3.5课表查看界面
图3.6成绩录入及名单导出界面
图3.7
成绩界面
图3.8退选界面
3.3.2C/S模式界面设计
图3.9分角色登陆界面
图3.10
学生界面
图3.11
课程表界面
图3.12课表查看界面
图3.13跨选专业界面
图3.14修改密码界面
图3.15成绩录入界面
图3.16课程查看界面
图3.17开课界面
图3.18
课程管理界面
图3.19人员管理界面
3.3.3B/S模式界面设计
图3.20登陆界面
图3.21选课界面
图3.22跨选界面
3.4数据库存取技术
3.4.1ADO.NET
ADO.NET的名称起源于ADO(ActiveXDataObjects),是一个COM组件库,用于在以往的Microsoft技术中访问数据。
之所以使用ADO.NET名称,是因为Microsoft希望表明,这是在NET编程环境中优先使用的数据访问接口。
它提供了平台互用性和可伸缩的数据访问,ADO.NET增强了对非连接编程模式的支持,并支持RICHXML。
由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。
事实上,接受数据的组件不一定要是ADO.NET组件,它可以是基于一个MicrosoftVisualStudio的解决方案,也可以是任何运行在其它平台上的任何应用程序。
是一组用于和数据源进行交互的面向对象类库。
通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。
允许和不同类型的数据源以及数据库进行交互。
然而并没有与此相关的一系列类来完成这样的工作。
因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。
一些老式的数据源使用ODBC协议,许多新的数据源使用OleDb协议,并且现在还不断出现更多的数据源,这些数据源都可以通过NET的ADO.NET类库来进行连接。
3.4.2JDBC技术
JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBCAPI既支持数据库访问的两层模型(C/S),同时也支持三层模型(B/S)。
在两层模型中,Javaapplet或应用程序将直接与数据库进行对话。
这将需要一个JDBC驱动程序来与所访问的特定数据库管理系统进行通讯。
用户的SQL语句被送往数据库中,而其结果将被送回给用户。
数据库可以位于另一台计算机上,用户通过网络连接到上面。
这就叫做客户机/服务器配置,其中用户的计算机为客户机,提供数据库的计算机为服务器。
网络可以是Intranet(它可将公司职员连接起来),也可以是Internet。
在三层模型中,命令先是被发送到服务的"中间层",然后由它将SQL语句发送给数据库。
数据库对SQL语句进行处理并将结果送回到中间层,中间层再将结果送回给用户。
MIS主管们都发现三层模型很吸引人,因为可用中间层来控制对公司数据的访问和可作的的更新的种类。
中间层的另一个好处是,用户可以利用易于使用的高级API,而中间层将把它转换为相应的低级调用。
最后,许多情况下三层结构可提供一些性能上的好处。
3.5程序详细设计与实现
3.5.1主要算法框图:
图3.23学生选课流程图
图3.24获取推荐课程流程图图3.25修改密码流程图
图
3.26本地数据库软件结构图(仅教师端)
3.5.2典型程序代码:
服务端代码:
学生选课代码:
publicintchooseCourse(StringCourseId,StringSno){
//执行事务
Connectioncon=null;
try{
con=JdbcPool.getCon();//获取连接
con.setAutoCommit(false);//关闭连接自动提交
//查询当前课程信息语句
Stringstr="selectMaxnumber,ChooseNumber,CourseName,Timefromcourseswherecourses.CourseId='"+CourseId+"'";
//查询已选课程上课时间语句
Stringstra="selectTimefromcourseswherecourses.CourseIdin(selectCourseIdfromchoosewherechoose.Sno='"+Sno+"')";
//插入选课语句
Stringaddstr="insertintochoose(CourseId,Sno,Grade,NGrade,PGrade,TGrade)VALUES('"+CourseId+"','"+Sno+"',null,null,null,null);";
//修改选课人数语句
Stringinc="updateoncoursessetChooseNumber=ChooseNumber+1whereCourseId='"+CourseId+"'";
pStatement=con.prepareStatement(str);
if(pStatement==null){
System.out.println("查询语句失败");
return-1;
}
ResultSetrs=pStatement.executeQuery();
if(!
rs.next()){
return-1;
}
//获取课程已选人数和最大容量,上课时间信息码
intmax=rs.getInt("MaxNumber");
intpres=rs.getInt("ChooseNumber");
Stringctime=rs.getString("Time");
if(pres>=max)return0;//选课人数已满返回0
ResultSetpresTime=con.prepareStatement(stra).executeQuery();
while(presTime.next()){
//依次将当前上课时间与已选课程上课时间进行比较,
Stringtime=presTime.getString("Time");
for(inti=0;i<9;i+=3)
for(intj=0;j<9;j+=3){
if(time.charAt(i)=='0'||ctime.charAt(j)=='0')break;
if(time.charAt(i)==ctime.charAt(j))
if(time.charAt(i+1)==ctime.charAt(j+1))if((time.charAt(i+2)==ctime.charAt(j+2))||(time.charAt(i+2)=='3')||(ctime.charAt(j)=='3'))
return2;
}
}
//执行插入,修改语句
con.prepareStatement(addstr).executeUpdate();
con.prepareStatement(inc).executeUpdate();
//提交事务
mit();
}catch(SQLExceptione){
//发生异常则全部回滚,并返回-1
e.getMessage();
e.printStackTrace();
con.rollback();
con.close();
return-1;
}
finally{
con.close();
}
return1;
}
获取推荐课程函数:
publicvoidgetRecommendCourse(DataOutputStreamds,intbegin,intend)throwsSQLException{
//获取推荐课程,已选课程不会出现在结果中
//ds=目标输出数据流,begin=记录开始位置,end=记录结束位置
//最终将生成xml数据格式,数据将直接被写入输出流ds中
//思路:
找出已选课程,找出所有已开课的推荐课程,然后从已开课的推荐课程中排除这些课程,
System.out.println("推荐选课查询");
//查询语句:
Stringsql1="SELECTCourseName,teacher.Tname,Time,ChooseNumber,MaxNumber,Credit,BeginWeek,EndWeek,CourseIdFROMcoursesjointeacheron(courses.Tno=teacher.Tno)WHEREcourses.CourseNoIN(SELECTCourseIdFROMrecomme
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工大学 数据库 系统 综合 实验 报告