UML课程设计报告.docx
《UML课程设计报告.docx》由会员分享,可在线阅读,更多相关《UML课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
UML课程设计报告
三系11软件本科专业
面向对象建模技术课程设计报告
学生成绩管理系统
学院名称:
宿迁学院
专业班级:
11软件2班
学生学号:
201103112
学生姓名:
指导教师姓名:
张乾燕
2014年5月
目录
一、设计目的1
二、系统需求分析1
(一)系统需求1
(二)系统的功能需求1
三、创建系统用例模型2
四、创建系统静态模型4
五、创建系统动态模型6
(一)创建序列图和协作图6
(二)创建状态图8
(三)创建活动图10
六、源程序13
七、运行示例及结果分析19
(一)管理员实现部分19
(二)班主任实现部分21
(三)学生实现部分22
八、实验总结24
九、参考资料25
班级成绩管理系统
一、设计目的
学生成绩管理系统是一个学校班级不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该为用户提供充足的信息和快捷的查询手段。
随着计算机应用的普及与深入,利用计算机能够对所有考试成绩进行统一管理,并进行分析,大大减少教学秘书的工作量,提高工作效率,为教学办公带来了极大的方便。
通过操作手册,使用者可以了解本系统的基本工作原理及使用说明。
操作人员只需输入一些简单的汉字、数字,就可以存储、查找、修改、打印学生成绩信息等。
本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化、达到提高学生成绩管理效率的目的。
该设计方法易于推广至其它信息化管理系统的设计,充分利用计算机作为辅助工具,实现学生考试成绩从传统的手工管理到计算机管理,对提高管理效率和节约大量的人力、物力有一定的推动作用。
因此为了充分利用学校现有的计算机硬件资源,做好学生成绩管理工作,提高办事效率,实现全面的、相对集中的办公自动化,开发本系统就成了当务之急,其目的主要为了彻底改变这种繁杂的管理模式,实现全面的、相对集中的、智能化的信息综合管理,为学校的教学管理工作带来方便。
2、系统需求分析
(一)系统需求
成绩管理成为学校教学管理中十分重要又相当复杂的管理工作之一,单纯的采用传统的手工处理已经不符合教育和管理的要求,而计算机具有运算速度快,处理能力强等特点,很自然地进入到这一应用领域中。
因此为了保证学校的信息流畅,工作高效,有必要设计一个学生成绩管理系统。
这不但能使教务人员从复杂的成绩管理中解脱出来,而且对于推动教学的发展也起到非常重要的作用。
(二)系统的功能需求
管理员用户:
(1)对管理员信息的查找、修改;
(2)对班主任信息的查找、修改;(3)对学生信息的增加、删除、修改、查询;(4)对学生各课程成绩的增加、删除、修改、查询。
班主任用户:
(1)对自己个人信息的查询、修改;
(2)对班级学生信息的查询;(3)对班级学生(各课程)成绩的查询。
学生用户:
(1)查看班主任的信息;
(2)对自己个人信息的修改、查询;(3)对自己各课程成绩的查询。
3、创建系统用例模型
根据系统的需求分析,可得出系统中的参与者为管理员、班主任、学生,然后根据不同的参与者分别画出各自的用例图。
(1)管理员用户可以通过本系统进行如下活动。
对管理员个人信息查询、维护;对班主任信息查询、维护;对学生信息的管理。
管理员用例图如图3-1所示。
图3-1管理员用例图
(2)班主任用户可以通过本系统进行如下活动。
对班主任个人信息的查询、维护;对学生信息查询、维护;对学生成绩信息管理(包括课程管理)。
班主任用例图如图3-2所示。
图3-2班主任用例图
(3)学生用户可以通过本系统进行如下活动。
对班主任信息的查询;对学生个人信息的查询、维护;对学生个人成绩的查询(包括课程成绩的查询)。
学生用例图如图3-3所示。
图3-3学生用例图
四、创建系统静态模型
根据系统需求可以识别系统中存在的对象。
系统对象识别时通过寻找系统域描述和需求描述中的名词来进行。
从前面的需求分析中可以找到的名词有管理员、班主任、学生。
结合类的创建原则,应该为本系统创建5个类,即管理员类(Admin)、班主任类(Teacher)、学生类(Student)、课程类(Grade)、数据库处理类(DatabaseManager)。
(1)管理员类:
这个类的主要属性有mid(管理员编号)、mmid(管理员工号)、mname(管理员姓名)、mpassword(管理员密码)、maddress(管理员住址)、mphone(管理员电话)、mage(管理员年龄)等;类中的主要操作有modifyAdmin()(修改管理员信息)、searchAdmin(Stringmmid)(查询管理员信息)等。
(2)班主任类:
此类的主要属性有tid(班主任编号)、ttid(教工号)、tname(班主任姓名)、tpassword(班主任密码)、taddress(班主任住址)、tphone(班主任电话)、tage(班主任年龄)、tclass(班级)等;类中的主要操作有modifyTea()(修改班主任信息)、searchTea(Stringttid)(查询班主任信息)等。
(3)学生类:
这个类的主要属性有sid(学生编号)、ssid(学号)、sname(学生姓名)、sage(学生年龄)、spassword(学生密码)、sphone(学生电话)、saddress(学生住址)、sclass(班级)等;类中的主要操作有addStu()(增加学生信息)、searchStu(Stringssid)(查询学生信息)等。
(4)课程类:
此类的主要属性有math(数学成绩)、english(英语成绩)、profession(专业成绩)等;类中的主要操作有addGrades(Stringssid,Stringsname)(添加学生成绩)、searchGrades(Stringssid)(查询学生成绩)、modifyGrades(Stringssid)(修改学生成绩)等。
(5)数据库处理类:
与管理系统数据库操作相关的类。
该类中的主要属性包括conn(数据库连接对象)、rs(数据集对象)等;类中的主要操作包括executeQuery()(执行数据操作)、executeUpdate()(更新数据库)等。
创建完成后的班级成绩管理系统的类图、对象图如图4-1、4-2所示。
图4-1班级成绩管理系统类图
图4-2班级成绩管理系统对象图
五、创建系统动态模型
(一)创建序列图和协作图
序列图描绘了系统中的一组对象在时间上交互的整体行为。
协作图描绘了系统中的一组对象在集合排列上的交互行为。
在本系统中,通过前面的使用用例,可以获得以下重要的交互行为。
创建完成的管理员信息管理模块的序列图如图5-1所示。
图5-1管理员信息管理序列图
与序列图等价的管理员信息管理协作图如图5-2所示。
图5-2管理员信息管理协作图
创建完成的班主任成绩管理序列图如图5-3所示。
图5-3班主任成绩管理序列图
与序列图等价的班主任成绩管理的协作图如图5-4所示。
图5-4班主任成绩管理协作图
创建完成的学生信息查询序列图如图5-5所示。
图5-5学生信息查询序列图
与序列图等价的学生信息查询的协作图如图5-6所示。
图5-6学生信息查询协作图
(二)创建状态图
(1)管理员在本系统中可能出现的各种状态有登录系统、管理员信息维护、班主任信息维护、学生信息管理,它们之间的转化规则如下。
管理员首先必须登录系统才能进行各种操作;管理员可以在后台系统中进入到维护管理员、管理班主任、管理学生的操作状态。
根据管理员的各种状态及转换规则,管理员的状态图如图5-7所示。
(2)班主任在系统中可能出现的各种状态有登录系统、班主任信息维护、学生成绩管理,它们之间的转换规则如下。
班主任首先必须登录系统才能进行各种操作;班主任可以对个人信息维护、对学生成绩进行管理等操作状态。
根据班主任的各种状态及转换规则,班主任状态图如图5-7所示。
图5-7管理员及班主任的状态图
(3)学生在本系统中可能出现的各种状态有登录系统、个人信息维护、个人信息查询,它们之间的转换规则如下。
学生首先必须登录系统才能进行各项操作;学生可以维护个人信息、查询各课程的成绩等操作状态。
根据学生的各种状态及转换规则,学生的状态图如图5-8所示。
图5-8学生状态图
(三)创建活动图
在班级成绩管理系统中可以创建主要的活动图,包括管理员活动图、班主任活动图、学生活动图。
创建完成的管理员活动图如图5-9所示。
图5-9管理员活动图
创建完成的班主任活动图如图5-10所示。
图5-10班主任活动图
创建完成的学生活动图如图5-11所示。
图5-11学生活动图
六、源程序
//修改管理员信息
publicintmodifyAdmin()throwsException{
pstmt=conn.prepareStatement("updatemanagersetmpassword=?
mphone=?
mname=?
mage=?
maddress=?
wheremmid=?
");
pstmt.setString(6,ad.getMmid());
pstmt.setString(1,ad.getMpassword());
pstmt.setString(2,ad.getMphone());
pstmt.setString(3,ad.getMname());
pstmt.setInt(4,ad.getMage());
pstmt.setString(5,ad.getMaddress());
pstmt.executeUpdate();//执行对数据库的更新操作
pstmt.close();
return1;
}
//查询管理员
publicvoidsearchAdmin(Stringmmid)throwsException{
pstmt=conn.prepareStatement("select*frommanagerwheremmid=?
");
pstmt.setString(1,mmid);
rs=pstmt.executeQuery();//按管理员的工号查询管理员
while(rs.next()){
ad.setMmid(rs.getString("mmid"));
ad.setMname(rs.getString("mname"));
ad.setMage(rs.getInt("mage"));
ad.setMpassword(rs.getString("mpassword"));
ad.setMaddress(rs.getString("maddress"));
ad.setMphone(rs.getString("mphone"));
}
}
//查询班主任
publicvoidsearchTea(Stringttid)throwsException{
pstmt=conn.prepareStatement("select*fromteacherwherettid=?
");
pstmt.setString(1,ttid);
rs=pstmt.executeQuery();//执行查询操作
if(rs.next()){
tea.setTtid(rs.getString("ttid"));
tea.setTname(rs.getString("tname"));
tea.setTage(rs.getInt("tage"));
tea.setTpassword(rs.getString("tpassword"));
tea.setTaddress(rs.getString("taddress"));
tea.setTphone(rs.getString("tphone"));
tea.setTclass(rs.getString("sclass"));
}
}
//修改班主任
publicintmodifyTea()throwsException{
intt=1;
pstmt=conn.prepareStatement("updateteachersettpassword=?
tphone=?
tname=?
tage=?
taddress=?
sclass=?
wherettid=?
");
pstmt.setString(1,tea.getTpassword());
pstmt.setString(2,tea.getTphone());
pstmt.setString(3,tea.getTname());
pstmt.setInt(4,tea.getTage());
pstmt.setString(5,tea.getTaddress());
pstmt.setString(6,tea.getTclass());
pstmt.setString(7,tea.getTtid());
t=pstmt.executeUpdate();//执行更新数据库操作
pstmt.close();
returnt;
}
//修改学生
publicintmodifyStu()throwsException{
intt=0;
Stringsql="updatestudentsetspassword=?
sphone=?
sname=?
sage=?
saddress=?
sclass=?
wheressid=?
";
pstmt=conn.prepareStatement(sql);
pstmt.setString(7,stu.getSsid());
pstmt.setString(1,stu.getSpassword());
pstmt.setString(2,stu.getSphone());
pstmt.setString(3,stu.getSname());
pstmt.setInt(4,stu.getSage());
pstmt.setString(5,stu.getSaddress());
pstmt.setString(6,stu.getSclass());
t=pstmt.executeUpdate();//更新数据库
pstmt.close();
returnt;
}
//增加学生记录
publicintaddStu()throwsException{
intt=0;
pstmt=conn.prepareStatement("insertintostudent(ssid,sname,spassword,sclass,saddress,sage,sphone)values(?
?
?
?
?
?
?
)");
pstmt.setString(1,stu.getSsid());
pstmt.setString(2,stu.getSname());
pstmt.setString(3,stu.getSpassword());
pstmt.setString(4,stu.getSclass());
pstmt.setString(5,stu.getSaddress());
pstmt.setInt(6,stu.getSage());
pstmt.setString(7,stu.getSphone());
t=pstmt.executeUpdate();//更新数据库
returnt;
}
//查询学生
publicvoidsearchStu(Stringssid)throwsException{
pstmt=conn.prepareStatement("select*fromstudentwheressid=?
");
pstmt.setString(1,ssid);
rs=pstmt.executeQuery();//在学生表中查找
if(rs.next()){
stu.setSsid(rs.getString("ssid"));
stu.setSname(rs.getString("sname"));
stu.setSage(rs.getInt("sage"));
stu.setSpassword(rs.getString("spassword"));
stu.setSaddress(rs.getString("saddress"));
stu.setSphone(rs.getString("sphone"));
stu.setSclass(rs.getString("sclass"));
}
pstmt.close();
}
//删除学生
publicintdeleStu(Stringssid)throwsException{
intt=0;
pstmt=conn.prepareStatement("deletefromstudentwheressid=?
");
pstmt.setString(1,ssid);
t=pstmt.executeUpdate();//更新数据库
returnt;
}
//添加学生成绩
publicintaddGrades(Stringssid,Stringsname)throwsException{
intt=0;
pstmt=conn.prepareStatement("insertintograde(math,english,profession,sname,ssid)values(?
?
?
?
?
)");
pstmt.setString(1,String.valueOf(gra.getMath()));
pstmt.setString(2,String.valueOf(gra.getEnglish()));
pstmt.setString(3,String.valueOf(gra.getProfession()));
pstmt.setString(4,sname);
pstmt.setString(5,ssid);
t=pstmt.executeUpdate();//执行更新数据库
pstmt.close();
returnt;
}
//查询学生成绩
publicResultSetsearchGrades(Stringssid)throwsException{
pstmt=conn.prepareStatement("select*fromgradewheressid=?
");
pstmt.setString(1,ssid);
rs=pstmt.executeQuery();
returnrs;
}
//修改学生成绩
publicintmodifyGrades(Stringssid)throwsException{
intt=0;
pstmt=conn.prepareStatement("updategradesetmath=?
english=?
profession=?
wheressid=?
");
pstmt.setString(1,String.valueOf(gra.getMath()));
pstmt.setString(2,String.valueOf(gra.getEnglish()));
pstmt.setString(3,String.valueOf(gra.getProfession()));
pstmt.setString(4,ssid);
t=pstmt.executeUpdate();//执行更新数据库
pstmt.close();
returnt;
}
//删除学生成绩
publicintdeleGrades(Stringssid)throwsException{
intt=0;
pstmt=conn.prepareStatement("select*fromgradewheressid=?
");
pstmt.setString(1,ssid);
rs=pstmt.executeQuery();
if(rs.next()){
Stringmath=rs.getString("math");
Stringenglish=rs.getString("english");
Stringprofession=rs.getString("profession");
if(math!
=null&&english!
=null&&profession!
=null){
pstmt=conn.prepareStatement("deletefromgradewheressid=?
");
pstmt.setString(1,ssid);
t=pstmt.executeUpdate();//执行更新数据库
pstmt.close();
}
}else{
t=2;
}
returnt;
}
7、运行示例及结果分析
(一)管理员实现部分
管理员用户输入正确的用户名和密码,登录系统后显示管理员主页如图7-1所示。
图7-1管理员主页功能图
管理员进入系统后可以对管理员、班主任及学生的信息进行管理,包括对管理员、班主任信息的查询、修改和对学生信息的增加、修改、删除、查询等。
如下图所示。
图7-2管理员信息查询图
图7-3管理员信息维护图
图7-4班主任信息查询图
图7-5班主任信息维护图
图7-6学生信息维护图
(二)班主任实现部分
班主任用户输入正确的用户名和密码,进入系统后显示班主任主页如图7-7所示。
图7-7班主任主页功能图
班主任进入系统后,可以对班主任、学生信息进行管理,包括对班主任信息的查询、修改及对学生信息成绩的增加、修改、删除、查询等操作。
如图所示。
图7-8查询班主任信息图
图7-9修改班主任信息图
图7-10学生成绩管理图
(三)学生实现部分
学生输入正确的用户名和密码后,登录系统进入主页,如图7-11所示。
图7-11学生主页图
学生进入系统后,可以对班主任信息进行查询、学生个人信息进行维护及成绩查询等操作。
如图所示。
图7-12班主任信息查看图
图7-13学生个人信息查看图
图7-14学生个人信息维护图
图7-15学生成绩查询图
8、实验总结
在这个课程设计以前我对UML没有什么具体的概念,只知道这是一种建模工具。
但是通过本次课程设计我不仅对UML的概念有了一个具体的了解,而且对于其建模过程也有了深刻的认识。
回顾起此次课程设计,至今感慨颇多。
从理论到实践,可以学到很多很多的东西,比如刚开始的时候,对于如何寻找到类图中的类,我十分的迷茫,而且书上的也有些模糊,直到跟同学一起探讨我才豁然开朗。
通过这次课程设计,我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考