资源描述
面向对象建模技术课程设计报告
家政服务管理系统的设计和实现
学院名称: 宿迁学院
专业班级:
学生学号:
学生姓名:
指导教师姓名:
2015年 6 月
目 录
家政服务管理系统的设计与实现 1
一、设计目的 1
二、系统需求分析 2
三、创建系统用例模型 3
四、创建系统静态模型 9
五、创建系统动态模型 11
六、创建系统部署模型 16
七、系统数据库的设计与实现 18
八、家政服务管理系统的实现 21
九、实验总结 28
家政服务管理系统的设计与实现
一、设计目的
不断增长的复杂性、多样性和相互关联性是当今信息系统的共同特征。传统的面向功能开发方法,已逐渐不适应越来越复杂和多变的需求,其成果不能得到很好的重用。
而面向对象建模技术能够有效地控制复杂性、适应多变性,具有灵活性、低风险性、可重用性,从而能提高系统开发的效率。
UML是一种对面向对象系统进行可视化、详细描述、构造和文档化的标准建模语言。所以,从面向功能的开发方法转向使用UML的面向对象开发方法是信息系统开发的趋势。
本文主要论述了面向对象建模技术、UML,以及基于UML的面向对象建模过程,并运用以上技术建立起了家政服务管理系统的模型。相信本文能对信息系统的面向对象建模起到一定的借鉴作用。
本次课程设计,对于家政服务管理系统的某一些部分,使用UML中包括用例图,类图,对象图,包图,状态图,活动图,顺序图,协作图,构件图和部署图之中的绝大多数图,从而帮助我们充分理解面向对象建模的思想和重要性并,且基本掌握对信息系统完成的设计过程。
二、系统需求分析
根据家政服务管理系统,我们可以确定以下功能:
用户:
1. 可以登录
2. 可以请求新服务(提交后无法修改)
3. 可以浏览自己已提交但未被处理的服务信息
4. 可以浏览自己已提交但被拒绝的服务信息(视为已完成)
5. 可以浏览自己已提交并被接受的服务信息
6. 可以确认并评价服务(视为已完成)
7. 可以浏览已完成的服务信息
管理人员:
1. 可以登录
2. 可以有选择的查看所有服务信息
3. 可以接受或拒绝用户请求的新服务
三、创建系统用例模型
根据家政服务管理系统,我们可以确定以下用例模型。
图3-1 顾客用例图
用例名称 登录
用例目标 当用户刚开始使用系统时用例开始。它处理用户登录问题。当用户登录成功后用例结束
级别 子功能
活动者 用户
状态 只定义了初始路径
前置条件 无
后置条件 用户成功登录
主路径 用户登录
可选路径 用户放弃登录,关闭网站
例外路径 用户输入的密码有误。返回主路径的起始点,重新输入正确的密码。
用例名称 请求新服务
用例目标 当用户请求新家政服务时用例开始。它处理请求新服务问题。当用户提交新服务后用例结束
级别 子功能
活动者 用户
状态 只定义了初始路径
前置条件 用户登录
后置条件 新服务被提交
主路径 用户请求新服务
可选路径 用户放弃请求新服务,返回主页
例外路径 无
用例名称 浏览自己已提交但未被处理的服务信息
用例目标 当用户浏览自己已提交但未被处理的服务信息时用例开始。它处理用户浏览自己已提交但未被处理的服务信息问题。当用户跳转到其余页面后用例结束
级别 子功能
活动者 用户
状态 只定义了初始路径
前置条件 用户登录
后置条件 跳转到其余页面
主路径 用户浏览自己已提交但未被处理的服务信息
可选路径 无
例外路径 无
用例名称 可以浏览自己已提交并被接受的服务信息
用例目标 当用户可以浏览自己已提交并被接受的服务信息时用例开始。它处理用户浏览自己已提交并被接受的服务信息问题。当用户跳转到其余页面后用例结束
级别 子功能
活动者 用户
状态 只定义了初始路径
前置条件 用户登录
后置条件 跳转到其余页面
主路径 用户浏览自己已提交并被接受的服务信息
可选路径 无
例外路径 无
用例名称 确认并评价服务
用例目标 当用户确认并评价服务时用例开始。它处理用户确认并评价服务问题。当用户评价结束后用例结束
级别 子功能
活动者 用户
状态 只定义了初始路径
前置条件 用户登录
后置条件 评价完成
主路径 用户确认并评价服务
可选路径 放弃评价
例外路径 无
用例名称 浏览已完成服务信息
用例目标 当用户浏览已完成服务信息时用例开始。它处理用户浏览已完成服务信息问题。当用户跳转到其它页面后用例结束
级别 子功能
活动者 用户
状态 只定义了初始路径
前置条件 用户登录
后置条件 跳转到其余页面
主路径 用户浏览已完成服务信息
可选路径 无
例外路径 无
图3-2 管理人员用例图
用例名称 登录
用例目标 当管理人员刚开始使用系统时用例开始。它处理管理人员登录问题。当管理人员登录成功后用例结束
级别 子功能
活动者 管理人员
状态 只定义了初始路径
前置条件 无
后置条件 管理人员成功登录
主路径 管理人员登录
可选路径 管理人员放弃登录,关闭网站
例外路径 管理人员输入的密码有误。返回主路径起始点,重新输入密码。
用例名称 接受或拒绝用户新请求
用例目标 当管理人员接受或拒绝用户新请求时用例开始。它处理管理人员接受或拒绝用户新请求问题。当管理人员接受或拒绝用户新请求成功后用例结束
级别 子功能
活动者 管理人员
状态 只定义了初始路径
前置条件 管理人员登录
后置条件 管理人员接受或拒绝用户新请求成功
主路径 管理人员接受或拒绝用户新请求
可选路径 无
例外路径 无
用例名称 浏览家政服务信息
用例目标 当管理人员浏览服务信息时用例开始。它处理管理人员浏览服务信息问题。当用户跳转到其它页面后用例结束
级别 子功能
活动者 管理人员
状态 只定义了初始路径
前置条件 管理人员登录
后置条件 跳转到其余页面
主路径 管理人员浏览服务信息
可选路径 无
例外路径 无
四、创建系统静态模型
本系统创建四个类,即顾客类(customer)、管理人员类(management)、服务信息类(information)和数据库处理类(database)。
顾客类:主要属性有userId(顾客编号)、name(顾客账号)和password(顾客密码);主要操作有getName(获取顾客账号)、getPwd(获取顾客密码)和checkCust(验证顾客)。
管理人员类:主要属性有userId(管理人员编号)、name(管理人员账号)和password(管理人员密码);主要操作有getName(获取管理人员账号)、getPwd(获取管理人员密码)和checkCust(验证管理人员)。
服务信息类:主要属性有id(编号)、category(类别)、time(时间)、passengers(人次)、state(状态)、comfirm(确认)和evaluation (评价);主要操作有getInfor(获取服务信息)、addNew(添加服务信息)、changeState (修改服务信息状态)、doComfirm (进行服务信息确认)和doEvaluation (进行服务信息评价)。
数据库处理类:主要属性有connstr(数据库连接字符串)、conn (数据库连接对象)和result(数据集对象);主要操作有executeQuery(执行数据操作)、executeUpdate(更新数据库)和getSet (获得查询结果集)。
在家政服务系统中:
顾客类和服务信息类是一对多关系,因为一个顾客可以发布多条服务信息,而一条服务信息只能属于一个顾客。
管理人员类和服务信息类是一对多关系,因为一个管理人员可以管理多条服务信息。
服务信息类和数据库处理类是一对一关系,服务信息处理离不开数据库处理。
图4-1 系统类图
家政服务系统采用多层构架设计模式,把系统分成表示层、控制层、业务层和数据访问层四个层。对系统进行组织分为对应四个包,即表示层包、控制层包、业务层包和数据访问层包。另外,再加上处理系统各种错误的错误信息处理包。这五种包之间存在相互依赖的关系。
图4-2 系统包图
五、创建系统动态模型
序列图和协作图
通过前面用例,获得重要交互行为:
1) 用户请求新服务和确认评价服务和查看。
2) 管理人员处理新服务和查看。
1) 用户请求新服务和确认评价服务和查看用例具体工作流程。
(1) 顾客进入登录界面,输入账号密码进行提交。
(2) 登录成功后,进入系统主页。主页显示操作。
(3) 在请求新服务信息页面可以添加新服务信息。
(4) 数据库处理新服务信息。
(5) 在确认评价页面可以确认评价服务。
(6) 数据库处理服务信息。
(7) 在浏览页面可以查看服务信息。
(8) 使用结束后退出网站。
图5-1 顾客顺序图
图5-2 顾客协作图
2) 管理人员处理新服务和查看用例具体工作流程。
(1) 管理人员进入登录界面,输入账号密码进行提交。
(2) 登录成功后,进入系统主页。主页显示操作。
(3) 在处理新服务信息页面可以处理新服务信息。
(4) 数据库处理服务信息。
(5) 在浏览页面可以查看服务信息。
(6)使用结束后退出网站。
图5-3 管理人员顺序图
图5-4 管理人员协作图
根据家政服务管理系统,可以创建主要活动图:
1)顾客活动图。
2)管理人员活动图。
1)顾客活动图。
(1)进入登录界面。
(2)输入帐号密码,成功后进入顾客主页。失败重新输入账号密码,重新登录。
(3)顾客在主页可以选择请求新服务。
(4)顾客在主页可以选择浏览未处理服务。
(5)顾客在主页可以选择浏览已被接受服务。
(6)顾客在主页可以选择对已被接受服务进行确认和评价。
(7)顾客在主页可以选择浏览已完成服务。
(8)注销登录,退出。
图5-5 顾客活动图
2)管理人员活动图。
(1)进入登录界面。
(2)输入帐号密码,成功后进入管理人员主页。失败重新输入账号密码,重新登录。
(3)管理人员在主页可以选择处理新服务信息。
(4)管理人员在主页可以选择浏览所有服务信息。
(8)注销登录,退出。
图5-6 管理人员活动图
六、创建系统部署模型
构件图:
在家政服务管理系统中,可以对系统的主要参与者和主要业务实体类分别创建对应的构件进行映射。根据类图创建系统的构件图,包括顾客构件、管理人员构件、服务信息构件、数据库服务构件。除此之外,众多的Web页面组成一个总的界面构件,而所有的构件又形成了Web主程序。
图6-1 系统构件图
部署图:
系统部署图描绘的是系统节点上运行资源的安排。在家政服务管理系统中,系统包括3种节点:
(1)数据库服务器节点:负责数据存储和处理。
(2)Web系统服务器节点:发布Web应用程序。
(3)Web浏览器节点:即客户端节点,用户在浏览器上进行的各种操作。
图6-2 系统部署图
七、 系统数据库的设计与实现
根据系统要求,可以得出以下E-R图和数据库表:
图7-1 顾客E-R图
图7-2 管理人员E-R图
图7-3 信息E-R图
图7-4 总体E-R图
表7-1 顾客表
字段名
数据类型
说明
userId
int
编号
name
int
账号
password
int
密码
表7-2 管理人员表
字段名
数据类型
说明
userId
int
编号
name
int
账号
password
int
密码
表7-3 服务信息表
字段名
数据类型
说明
id
int
编号
category
int
选择
time
int
时间
passengers
int
人次
state
int
状态
confirm
int
确认
evaluation
int
评价
八、家政服务管理系统的实现
进入登陆界面。如图8-1
图8-1 登陆界面图
<form action="checklogin.jsp" method="post" name="fo" >//用from表单提交账号密码
int name=Integer.parseInt(request.getParameter("name"));//接收提交的值
nt password=Integer.parseInt(request.getParameter("password"));
String s=request.getParameter("typ");
Class.forName("com.mysql.jdbc.Driver").newInstance();//连接数据库查询
Connectioncon=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/housekeeping","root","");
Statement st=con.createStatement();
ResultSet rst=st.executeQuery("select * from customer");
if(m==1){response.sendRedirect("Cmain.jsp");}else{response.sendRedirect("login.jsp"); }//比较,如果相等,就跳到主页,否则返回登录界面
以顾客身份登陆后进入顾客主界面。如图8-2
图8-2 顾客主页图
<table border="1" align="center"> //主页表格中有各种操作的超链接
<tr> <td><a href="Caddnew.jsp">请求新服务</a></td></tr>
<tr> <td><a href="Cshowwait.jsp">显示待处理服务信息</a></td></tr>
<tr> <td><a href="Cshowstate.jsp">显示被接受服务信息</a></td></tr>
<tr> <td><a href="Ccheck.jsp">确认以及评价</a></td></tr>
<tr> <td><a href="Cshowfinish.jsp">显示已完成服务信息</a></td></tr>
<tr><td><a href="login.jsp">退出</a></td></tr>
</table>
在主页请求新服务。点添加提交服务,点放弃添加可返回主页。如图8-3
图8-3 顾客请求新服务界面图
<form action="Caddnew2.jsp" method="post"> //表单提交新增服务的信息
<td><a href="Cmain.jsp">放弃添加</a></td>//放弃添加
Class.forName("com.mysql.jdbc.Driver").newInstance();//连接数据库进行插入
Connectioncon=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/housekeeping","root","");
PreparedStatement pstmt=con.prepareStatement("insert into information(
category,time,passengers,state,confirm,evaluation)values(?,?,?,?,?,?)");
response.sendRedirect("Cmain.jsp");//插入后返回主页
在主页点击浏览待处理业务,进入此界面。如图8-4
图8-4 顾客浏览待处理服务图
Class.forName("com.mysql.jdbc.Driver").newInstance();//连接数据库查询
Connectioncon=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/housekeeping","root","");
Statement st=con.createStatement();ResultSet rst=st.executeQuery("select * from information");
if(state2==0){//显示未处理业务
%>
<tr><td><%=id2 %></td><td><%= category3 %></td><td><%=time3 %></td>
<td><%=passengers3 %></td><td><%=state3 %></td></tr>
<%}
在主页点击浏览已被受理业务,进入此界面浏览。如图8-5
图8-5 顾客浏览已受理服务图
Class.forName("com.mysql.jdbc.Driver").newInstance();//连接数据库查询
Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/housekeeping","root","");
Statement st=con.createStatement();ResultSet rst=st.executeQuery("select * from information");
if(state2==1&&confirm2==0){//显示已被受理但未确认业务
%>
<tr><td><%=id2 %></td><td><%= category3 %></td><td><%=time3 %></td>
<td><%=passengers3 %></td><td><%=state3 %></td> </tr>
<%}
在主页点击浏览确认评价业务,进入此界面可以确认评价服务。如图8-6
图8-6 顾客确认评价服务图
if(state2==1&&confirm2==0){//显示已被受理但未确认业务
%>
<tr><td><%=id2 %></td><td><%= category3 %></td><td><%=time3 %></td>
<td><%=passengers3 %></td><td><%=state3 %></td>
<td><a href="Ccheck2.jsp?id=<%=id2%>">确认以及评价</a></td>//提供对某条业务确认
</tr>
<%}
点确认以及评价后对服务进行确认评价,也可放弃回到主页。如图8-7
图8-7 顾客确认评价服务图
<form action="Ccheck3.jsp" method="post">//from表单提交数据
<td align=center><input id="b" type="submit" value="添加" ></td>//进行评价
<td><a href="Cmain.jsp">放弃确认及评价</a></td>//放弃评价
Class.forName("com.mysql.jdbc.Driver").newInstance();//数据库修改确认评价信息
Connectioncon=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/housekeeping","root","");
String sql="update information set confirm=?,evaluation=? where id=?";
PreparedStatement pst=con.prepareStatement(sql);
response.sendRedirect("Cmain.jsp");//返回主页
在主页点击浏览已完成业务,进入此界面浏览。如图8-8
图8-8 顾客浏览已完成服务图
Class.forName("com.mysql.jdbc.Driver").newInstance();//连接数据库查询
Connectioncon=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/housekeeping","root","");
Statement st=con.createStatement();
ResultSet rst=st.executeQuery("select * from information");
if(state2==2){%>//输出被拒绝服务信息
<tr><td><%=id2 %></td><td><%= category3 %></td><td><%=time3 %></td>
<td><%=passengers3 %></td><td><%=state3 %></td> </tr>
<%}
if(confirm2==1){//输出已确认服务信息
%><tr>
<td><%=id2 %></td><td><%= category3 %></td><td><%=time3 %></td>
<td><%=passengers3 %></td><td><%=evaluation3 %></td>
</tr><%}
以管理人员身份登陆后进入管理人员主界面。如图8-9
图8-9 管理人员主页图
<table border="1" align="center"> //主页表格中有各种操作的超链接
<tr> <td><a href="Mchangestate.jsp">处理新服务</a></td><td></td></tr>
<tr> <td><a href="Mshowall.jsp">显示所有服务信息</a></td><td></td></tr>
<tr> <td><a href="login.jsp">退出</td><td></td></tr>
</table>
在主页点击处理新服务,可以接受或拒绝顾客提交的新服务。也可以不处理返回首页。如图8-10
图8-10 管理人员处理新服务图
if(state2==0){//连接数据库后,只显示未处理信息
%><tr><td><%=id2 %></td><td><%= category3 %></td><td><%=time3 %></td>
<td><%=passengers3 %></td><td>
<a href="Mchangestate2.jsp?id=<%=id2%>">接受||</a>//给出接受某条信息的超链接
<a href="Mchangestate3.jsp?id=<%=id2%>">拒绝</a>//给出拒绝某条信息的超链接
</td></tr>
<%}
int zt=1;//接受某条信息后更新数据库状态为接受
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connectioncon=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/housekeeping","root","");
String sql="update information set state=? where id=?";
PreparedStatement pst=con.prepareStatement(sql);
response.sendRedirect("Mmain.jsp"); //返回主页
int zt=2;//拒绝某条信息后更新数据库状态为拒绝
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connectioncon=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/housekeeping","root","");
String sql="update information set state=? where id=?";
PreparedStatement pst=con.prepareStatement(sql);
response.sendRedirect("Mmain.jsp"); //返回主页
在主页点击查看所有信息,可以进行浏览。如图8-11
图8-11 管理人员浏览服务信息图
Class.forName("com.mysql.jdbc.Driver").newInstance();//连接数据库查询
Connectioncon=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/housekeeping","root","");
Statement st=con.createStatement();
ResultSet rst=st.executeQuery("select * from information");
<tr>//输出所有信息
<td><%=id2 %></td><td><%= category3 %></td><td><%=time3 %></td> <td><%=passengers3 %></td><td><%=state3 %></td><td><%=confirm3 %></td><td><%=evaluation3 %></td> </tr>
九、实验总结
本次实验已经基本结束了,让人不禁松了一口气,因为这次使用不仅任务量充足,还经常会遇到一些问题。幸亏在需求分析阶段将需求描述地简洁,不然真是无从下手。设计用例图基本没有遇到什么问题,只是有点遗忘画图工具的使用方法,不够找到ppt教程并且对照着书还是磕磕绊绊地开始了。在画类图时,类的数目可以确定,但类中的方法就有点迷糊,进过和同学讨论以及对照着教材最后的完整BBS论坛的例子仿照着解决了。包图完全不知道,就用了BBS论坛中的基本通用的包图。还有基本是顺序图的问题,由于考虑不周全,所以在画完后回头一看发现需要修改,两个顺序图加起来一共改了8遍。接下去的活动图,构件图和部署图都是仿照着BBS论坛的例子所写的,没有什么太多问题。另外比较耗神的是在画每一种图的时候,都要对它进行解释,虽然老师说从文字得到图,到绝大多数的同学都是画好图再在图上方进行解释说明的。在对系统完成设计后,就要对系统进行实现,这一点比较困难,就算我所要完成的课题功能比较简单,但是实现起来还是有些难,最后虽然实现了,但是还是有些别扭。
经过本次课程设计,对于家政服务管理系统的某一些部分,使用UML中包括用例图,类图,对象图,包图,状态图,活动图,顺序图,协作图,构件图和部署图之中的绝大多数图,我充分理解面向对象建模的思想和重要性并,且基本掌握了对信息系统完成的设计过程。
最后,只要肯花时间钻研,基本不存在困难,很多貌似困难的东西都可以克服。
- 27 -
展开阅读全文