武汉理工大学数据库系统综合实验报告Word下载.docx

上传人:b****6 文档编号:21931499 上传时间:2023-02-01 格式:DOCX 页数:49 大小:3.48MB
下载 相关 举报
武汉理工大学数据库系统综合实验报告Word下载.docx_第1页
第1页 / 共49页
武汉理工大学数据库系统综合实验报告Word下载.docx_第2页
第2页 / 共49页
武汉理工大学数据库系统综合实验报告Word下载.docx_第3页
第3页 / 共49页
武汉理工大学数据库系统综合实验报告Word下载.docx_第4页
第4页 / 共49页
武汉理工大学数据库系统综合实验报告Word下载.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

武汉理工大学数据库系统综合实验报告Word下载.docx

《武汉理工大学数据库系统综合实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《武汉理工大学数据库系统综合实验报告Word下载.docx(49页珍藏版)》请在冰豆网上搜索。

武汉理工大学数据库系统综合实验报告Word下载.docx

本系统应该适用于不同水平的使用者,包括专业人士和非专业人士,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。

(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班级表

学院

班级名称

专业

插入(20)

表2.3教师表

类型

教师编号

教师名

密码

入职时间

Date

表2.4课程表

课程号

开课学院

课程名称

当前开课数

Int

学分数

Real

学时数

SmallInt

表2.5开课表

开课编号

课程编号

开始周数

结束周数

上课时间

已选人数

最大人数

成绩比例

Char(3)

表2.6选课表

学生编号

Pk,Fk

平时成绩

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('

'

+Sno+"

null,null,null,null);

//修改选课人数语句

Stringinc="

updateoncoursessetChooseNumber=ChooseNumber+1whereCourseId='

pStatement=con.prepareStatement(str);

if(pStatement==null){

System.out.println("

查询语句失败"

);

return-1;

}

ResultSetrs=pStatement.executeQuery();

if(!

rs.next()){

//获取课程已选人数和最大容量,上课时间信息码

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("

for(inti=0;

i<

9;

i+=3)

for(intj=0;

j<

j+=3){

if(time.charAt(i)=='

0'

||ctime.charAt(j)=='

)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)=='

))

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1