选课系统的UML建模.docx
《选课系统的UML建模.docx》由会员分享,可在线阅读,更多相关《选课系统的UML建模.docx(35页珍藏版)》请在冰豆网上搜索。
选课系统的UML建模
学生选课管理信息系统的设计与实现
说明:
本文档详细展示了“学生选课管理信息系统”的UML建模过程,供大家对自己的系统进行建模时参考。
目录
第一章需求分析2
一、需求调查2
二、建立用例图2
三、描述用例3
第二章系统分析5
一、寻找系统中的类5
二、建立交互图并寻找类的操作6
三、建立类图13
第三章系统设计15
一、类图的调整与完善15
二、人机界面设计16
三、数据库设计19
第四章系统实现21
一、开发环境21
二、建立数据库21
三、程序设计22
四、系统测试29
五、使用说明33
第一章需求分析
一、需求调查
为提高学生选课的准确性,提高数据处理的工作效率,特开发学生选课管理信息系统。
经过调查,发现该系统的需求如下:
教务科管理和维护学生和课程信息。
查看所有的学生信息和课程信息,对以上信息进行添加、修改、删除。
学生在线选课。
选择好课程后进行提交,系统要记录学生所选择的课程和提交的时间;学生也可以撤销提交。
选课中心处理选课数据。
查看选课信息,统计每门课程的选课人数,停开选课人数少于规定人数的课程。
二、建立用例图
从以上需求陈述中,我们发现系统中的参与者有:
教务科、学生、选课中心。
识别出参与者后,从参与者的角度就可以发现系统的用例,并绘制出系统的用例图,如下图所示。
用例图
三、描述用例
用例图中仅仅给出了用例的名称,每一个用例的内部细节尚不清楚,需要对此进行描述。
描述用例有两种方式,一种是用文字或表格,另一种是活动图。
下面分别用表格和活动图描述一个用例。
1、“添加学生信息”用例的描述
采用表格的形式描述用例,如下表所示:
“添加学生信息”用例的描述
用例名称
添加学生信息
用例标识
UC1001
基本操作选程
1、通过查询确认学生信息不存在
2、将学生信息保存到数据库中
3、将学生信息在页面上显示出来
可选操作流程
如果要添加的学生信息已经存在,则显示相应的提示信息
2、“删除选课人数不足的课程”用例的描述
采用活动图描述该用例,如下图所示:
“删除选课人数不足的课程”用例的活动图
第二章系统分析
一、寻找系统中的类
1、实体类
通过对系统需求的分析,我们发现系统中的实体类有:
学生信息类、课程信息类、选课信息类。
由于实体类的操作难以确定,在后面通过交互图来寻找类的操作,下面仅列出实体类的属性。
(1)StudentInfo
该类为学生信息类,用于描述学生的基本信息,主要包括学号、姓名、年龄、性别、籍贯等。
为简单起见,本系统只使用学号和姓名两个基本属性,如下表所示:
StudentInfo的属性
属性
说明
StudentID
学生的学号
StudentName
学生的姓名
(2)CourseInfo
该类为课程信息类,用于描述课程的基本信息,主要包括课程编号、课程名称、学分、学时、开课学期、课程简介等。
为简单起见,本系统只使用课程编号和课程名称两个基本属性,如下表所示:
CourseInfo的属性
属性
说明
CourseID
课程的编号
CourseName
课程的名称
(3)SelectInfo
该类为选课信息类,用于描述学生选课的信息,主要记录哪个学生选了哪些课程,以及选课的具体时间,如下表所示:
SelectInfo的属性
属性
说明
StudentID
学生的学号
CourseID
课程的编号
SelectTime
学生提交选课信息的时间
2、数据库访问类
为便于将相关数据从数据库中读出来,或写入数据库中,需设置一个数据库访问类Data。
该类的属性和操作如下表所示:
Data的属性和操作
属性或操作
说明
strCon
用于连接数据库的字符串
MySqlExecuteReader
根据SQL语句进行查询
MySqlExecuteNonQuery
根据SQL语句进行修改、添加、删除
3、用户界面类
通常,需要在参与者和每一个用例之间设置一个用户界面类。
本系统由于规模较小,设置如下几个用户界面类:
jwkManageStudentWindow:
教务科维护学生信息的窗口
jwkManageCourseWindow:
教务科维护课程信息的窗口
xkzxWindow:
选课中心维护选课信息的窗口
studentWindow:
学生选课的窗口
二、建立交互图并寻找类的操作
交互图包括时序图和协作图,二者是类图的辅助模型。
在建立时序图和协作图时,将会发现类的操作,并将它们添加到类中。
1、“查询学生信息”的时序图
1:
GetStudentInfoAllToGridView:
将所有学生的信息显示在界面上
2:
GetStudentInfoAll:
获取所有学生的信息
3:
MySqlExecuteReader:
从数据库中读取学生的信息
2、“添加学生信息”的时序图
1:
AppendStudentInfo:
添加学生记录
2:
AddStudentInfo:
添加学生信息
3:
MySqlExecuteNonQuery:
将学生信息写入数据库中
3、“修改学生信息”的时序图
1:
ModifyStudentInfo:
修改学生记录
2:
ModifyStudentInfo:
修改学生信息
3:
MySqlExecuteNonQuery:
将学生信息写入数据库中
4、“删除学生信息”的时序图
1:
DeleteStudentInfo:
删除学生记录
2:
DeleteStudentInfoByStudentID:
删除指定学号的信息学生
3:
MySqlExecuteNonQuery:
将学生信息从数据库删除中
5、“查询课程信息”的时序图
1:
GetCourseInfoAllToGridView:
将课程信息显示在窗口上
2:
GetCourseInfoAll:
查询所有课程的信息
3:
MySqlExecuteReader:
从数据库中读取课程信息
6、“添加课程信息”的时序图
1:
AddCourseInfo:
添加课程记录
2:
AddCourseInfo:
添加课程信息
3:
MySqlExecuteNonQuery:
将课程信息写入数据库中
7、“修改课程信息”的时序图
1:
ModifyCourseInfo:
修改课程记录
2:
ModifyCourseInfo:
修改课程信息
3:
MySqlExecuteNonQuery:
将课程信息写入数据库中
8、“删除课程信息”的时序图
1:
DeleteCourseInfo:
删除课程记录
2:
DeleteCourseInfoByCourseID:
删除指定编写的课程信息
3:
MySqlExecuteNonQuery:
将课程信息从数据库中删除
9、“查询所有学生的选课信息”的时序图
1:
GetSelectInfoAlltoGirdView:
将所有的选课信息显示在窗口上
2:
GetSelectInfoAll:
获取所有的选课信息
3:
MySqlExecuteReader:
从数据库中读取选课信息
10、“统计每门课程的选课人数”的时序图
1:
GetSelectInfoGroupByCourseIDToGridView:
将选课信息根据课程编号分组统计后显示在窗口上
2:
GetSelectInfoGroupByCourseID:
根据课程编号分组查询选课信息
3:
MySqlExecuteReader:
将选课信息从数据库中读取出来
11、“删除选课人数不足的课程”的时序图
1:
DeleteSelectInfo:
删除选课信息
2:
DeleteSelectInfoLowerX:
删除人数不足x人的选课信息
3:
MySqlExecuteNonQuery:
将选课信息从数据库中删除
12、“查询个人的选课信息的协作图”的协作图
1:
GetSelectInfoByStudentIDToGridView:
将学生个人的选课信息显示在窗口上
2:
GetSelectInfoByStudentID:
根据学号查询学生的选课信息
3:
MySqlExecuteReader:
将选课信息从数据库中读出来
13、“提交选课信息的协作图”的协作图
1:
AddSelectInfo:
添加选课记录
2:
AddSelectInfo:
添加选课信息
3:
MySqlExecuteNonQuery:
将选课信息写入数据库中
14、“删除选课信息的协作图”的协作图
1:
DeleteSelectInfo:
删除选课信息
2:
DeleteSelectInfoByStudentID:
删除指定学号的学生的选课信息
3:
MySqlExecuteNonQuery:
将选课信息从数据库中删除
三、建立类图
以上过程确定了系统中有哪些类,类的属性和操作各有哪些,下面据此绘制系统的类图。
系统分析阶段的类图
注:
由于“查询选课信息”用例教务科和学生均参与,且在教务科部分已经绘制了该用例的交互图,故在学生部分不再重复绘制,仅在“studentWindow”中添加一个添加“GetCourseInfoAllToGridView”。
第三章系统设计
在系统设计阶段,要考虑系统的实现环境,对分析阶段的类图模型进行调整与完善,并对人机界面和数据库进行设计,最终形成一个可实现的系统设计模型。
本系统将采用C#进行编程。
C#是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。
一、类图的调整与完善
在系统分析阶段,因为不考虑系统的实现问题,且实现系统的编程语言未定,因此类图中属性的数据类型、操作的返回值类型均没有画出,属以和操作的可见性也没有标出,在系统设计阶段应对这些地方进行完善。
为保证系统的安全性,在学生选课前应凭密码进行登陆,因此还需要在类StudentInfo中设置一个密码属性“Password”。
由于本系统访问数据库通过ADO.NET实现,因此三个实体类StudentInfo、CourseInfo、SelectInfo的操作中,有返回值的操作其返回值类型为SqlDataReader,无返回值的操作其返回值类型为void。
在数据库访问类Data中,MySqlExecuteReader用于操作SQL语句返回查询结果,因此其返回值类型为SqlDataReader;为了掌握MySqlExecuteNonQuery操作所影响的行数,将该操作的返回值类型设为int型。
另外,用户界面类中的所有操作均不需要返回值,因此,其操作的返回值类型均为void。
经过以上分析,绘制类图如下:
系统设计阶段的类图
二、人机界面设计
1、首页的设计
首页是系统的第一个页面,主要功能是供各类人员登录,其界面设计如下图所示。
首页
2、学生选课页面的设计
该页面是学生提交选课结果或进行选课撤销的页面,其界面设计如下图所示。
学生选课页面
3、选课中心处理选课数据页面的设计
该页面是选课中心完成查看选课信息、统计选课统计、删除选课人数不足等操作的页面,其界面设计如下图所示。
选课中心处理选课数据页面
4、教务科维护课程信息页面的设计
该页面是教务科查看、添加、删除、修改课程信息的页面,其界面设计如下图所示。
教务科维护课程信息页面
5、教务科维护学生信息页面的设计
该页面是教务科查看、添加、删除、修改学生信息的页面,其界面设计如下图所示。
教务科维护学生信息页面
三、数据库设计
由于目前面向对象数据库系统还不成熟,本系统将采用关系数据库系统存储永久对象(需要长期存储的对象)。
主要工作是将类图转换为关系模型。
在类图中,CourseInfo、StudentInfo、SelectInfo这三个类的对象需要长期存储,因此只需将这三个类转化为关系模型。
转换的方法是:
类名转换为关系名、类的属性名转换为关系的字段名。
据此,奖实体类转换成如下几个关系模型:
CourseInfo(CourseID,CourseName)
StudentInfo(StudentID,StudentName,Password)
SelectInfo(StudentID,CourseID,SelectTime)
另外,为便于对选课中心和教务科进行身份验证,还需要设置一个关系模型,用于保存以上两类人员的用户名、密码、身份类别。
该关系模型如下:
AdminInfo(AdminID,Password,Type)
通过分析,以上各个关系模型均符合三范式的要求,不需要作进一步的调整。
第四章系统实现
一、开发环境
本系统采用B/S(Browser/Server)架构进行开发。
前台的页面制作工具为MicrosoftVisualStudio2005,网页采用XHTML+CSS技术进行布局。
后台的开发语言为C#,通过ASP.NET2.0(基于C#语言)技术访问和操作数据库。
采用MicrosoftSQLServer2000建立数据库。
二、建立数据库
本系统采用MicrosoftSQLServer2000建立数据库,数据库名称为“school.mdf”,其中包含4张表,如下图所示。
建立的数据库
1、表AdminInfo
该表用于存储选课中心和教务科的认证信息,表的结构如下图所示。
AdminInfo的结构
2、表CourseInfo
该表用于存储课程的信息,表的结构如下图所示。
CourseInfo的结构
3、表SelectInfo
该表用于存储选课的信息,表的结构如下图所示。
SelectInfo的结构
4、表StudentInfo
该表用于存储学生的信息,表的结构如下图所示。
StudentInfo的结构
三、程序设计
(一)系统的主要文件
系统中的主要包括三种类型的文件:
SQLServer数据库文件、自定义类、页面文件,如下图所示:
系统的主要文件
(二)部分模块的程序代码
本系统的每个模块都是基于三层架构进行开发。
三层架构将整个系统划分为:
表示层(UI)、业务逻辑层(BLL)、数据访问层(DAL)三个层次,以实现“高内聚,低耦合”的思想。
1、数据访问层
publicclassdata
{
privatestaticstringstrCon="server=(local);database=school;uid=sa;pwd=sa";
publicstaticSqlDataReaderMySqlExecuteReader(stringstrSQL)
{
SqlConnectionmyCon=newSqlConnection(strCon);
SqlCommandmyCom=newSqlCommand(strSQL,myCon);
try
{
myCon.Open();
SqlDataReadermyReader=myCom.ExecuteReader(CommandBehavior.CloseConnection);
returnmyReader;
}
catch(System.Data.SqlClient.SqlExceptione)
{
thrownewException(e.Message);
}
finally
{
myCom.Dispose();
}
}
publicstaticintMySqlExecuteNonQuery(stringstrSQL)
{
SqlConnectionmyCon=newSqlConnection(strCon);
SqlCommandmyCom=newSqlCommand(strSQL,myCon);
try
{
myCon.Open();
intn=myCom.ExecuteNonQuery();
returnn;
}
catch(System.Data.SqlClient.SqlExceptione)
{
thrownewException(e.Message);
}
finally
{
myCom.Dispose();
myCon.Close();
}
}
}
2、学生选课模块的代码
该模型的界面如下图所示:
学生选课模块的界面
(1)表示层的前台代码
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="studentWindow.aspx.cs"Inherits="studentWindow"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
//www.w3.org/1999/xhtml">
无标题页
LabelID="Label1"runat="server"Text="Label">
Label>
返回首页
GridViewID="GridView1"runat="server"AutoGenerateColumns="False"
DataKeyNames="CourseID"HorizontalAlign="Center">
BoundFieldDataField="CourseID"HeaderText="课程编号"/>
BoundFieldDataField="CourseName"HeaderText="课程名称"/>
TemplateFieldHeaderText="选课操作">
CheckBoxID="CheckBox1"runat="server"Text="选择"/>
TemplateField>
GridView>
ButtonID="Button1"runat="server"Text="提交"onclick="AddSelectInfo"/>
ButtonID="Button2"runat="server"Text="撤消提交"
onclick="DeleteSelectInfo"/>
GridViewID="GridView2"runat="server"AutoGenerateColumns="False"
Caption="选课信息"HorizontalAlign="Center">
BoundFieldDataField="StudentID"HeaderText="学号"/>
BoundFieldDataField="CourseID"HeaderText="课程编号"/>
BoundFieldDataField="SelectTime"HeaderText="选课时间"/>
GridView>