202303-天天向上队 实验七 综合软件项目案例

发布时间 2023-06-10 21:44:58作者: 天天向上队
项目 内容
课程班级博客链接 2023年春软件工程
这个作业要求链接 实验七 综合软件项目案例
团队名称 天天向上队
团队的课程学习目标 (1)练习用例图、类图、顺序图、状态图等UML建模技术在软件开发过程中的用途。
(2)掌握软件项目的数据库逻辑结构设计方法。
(3)掌握软件项目的软件结构设计方法。
(4)理解面向对象软件开发过程。
这个作业在哪些方面帮助团队实现学习目标 (1)学习了用例图,类图,顺序图,状态图的绘制,各个类之间的关系;
(2)通过绘制er图加深了对数据库逻辑结构设计的理解;
(3)掌握了MVC软件设计模式
团队博客链接 天天向上队团队链接
团队项目Github仓库地址链接 GitHub仓库地址链接

任务一

1. 将高校学生管理软件部署在Tomcat服务器

  • 用户登录页面截图:

  • 三类用户主界面截图

  1. 管理员

管理员功能:
学生:添加学生,查询学生
班级:添加,查询班级,查询班级课程表
教师:添加,查询教师
成绩,课程,专业查询等

  1. 教师

教师功能:
个人资料
查找学生及学生成绩
班级:查看班级学生,课程表,导出成绩单
课程:查看自己所教课程

  1. 学生

学生功能:
个人资料
查询自己所选课程,成绩
查看班级课程表

任务二

绘制高校学生管理软件的用例图

用例图:

用例图是表示一个系统中用例与行为者关系的图,它描述了系统的相关用户以及系统对不同用户所提供的功能和服务。用例图的基本组成元素为:行为者、用例以及它们之间的关系。一个用例可以隶属于一个或多个行为者,一个行为者也可以参与一个或多个用例,用例与行为者之间存在关联关系。
在该高校学生信息管理系统中,行为者包括管理员、教师、学生,经过分析发现可以从两个或两个以上的用例中提取公共行为,故可以使用包含的关系来表示它们,原始用例成为基础用例,这些提取出来的公共用例以及对应剩余的功能事件抽象成为包含用例。在所绘用例图中,包含关系是虚线箭头由基础用例指向包含用例,例如“查询班级课程表”就是其中一个包含用例,而该系统的基本用例就有:学生管理、班级管理、教师管理、成绩管理、课程管理、专业管理等。

任务三

1. 采用面向对象分析方法绘制高校学生管理软件的类图

2. 陈述采用简易应用规格说明技术讨论案例软件用户需求的过程:

1.定义目标用户和目标环境,此系统中目标用户是全体教师和学生
2.收集用户需求,可以使用各种方法,如面对面访谈、在线调查或用户反馈表格等。此系统可使用面对面访谈方法,让用户直接告诉我们他们需要的功能和特点。如用户为学生时,可能会需要查询课表,查询成绩,选课等,教师会查看上课地点,统计平均分等。
3.编写应用规格说明,说明描述了应用程序的功能、特点和界面设计等方面的要求。具体
     (1)概括性的介绍,解释应用程序的目的和目标用户。
     (2)详细的功能列表,列出了应用程序的所有功能和特点,包括用户需求中提到的功能。
     (3)一个用户界面设计,包括屏幕截图、菜单结构和交互流程等,以帮助开发人员了解应用程序的外观和感觉。
     (4)一个数据模型,描述应用程序的数据结构和数据之间的关系,以便开发人员了解如何组织和存储数据。
4.验证和确认规格说明,一旦应用规格说明编写完成,我们需要与用户进行确认和验证,以确保规格说明准确地反映了他们的需求。我们可以要求用户阅读规格说明,并提供反馈或建议。如果用户对规格说明有任何疑问或不满意的地方,我们需要进行修改和更新,直到规格说明得到用户的确认和满意为止。
5.实施和测试,最后,我们可以开始实施和测试应用程序。在开发过程中,我们需要遵循应用规格说明中的要求,并确保应用程序能够满足用户的需求。一旦应用程序开发完成,我们需要对其进行测试,以确保其质量和可靠性,同时也需要再次与用户进行确认和验证,以检查应用程序是否符合他们的期望和需求。

任务四

1. 绘制顺序图

  • 学生用户对象查询课程的顺序图

  • 学生用户对象查询成绩的顺序图

  • 教务员课程安排的顺序图

任务五

E-R图:

任务六

1.结合MVC软件设计模式特点,采用面向对象设计方法绘制高校学生管理软件的类图

分析
类图中关系:
所有实体与其对应的servlet操作是依赖关系;如AddStudentServlet依赖于实体Cla2Sub、Operator、Score、Student、Subject;
由于类图过于杂乱,以下关系未在图中体现:
1.所有entity包中的实体类与接口Serializable都是实现关系;
2.所有操作的servlet类都继承于HttpServlet;
3.Impl包中的java文件是对接口函数(dao包中的java文件)进行实现,其与DB是依赖关系。

2.结合软件开发过程,总结任务3与任务6的类图与源代码中定义类的关系

  1. 针对高校学生系统管理项目任务三中采用面向对象分析OOA方法绘制类图,任务六中结合了MVC软件设计模式的特点采用面向对象设计OOD方法绘制类图,而在源码中定义类是OOP过程中根据OOD设计的类图、类之间的交互图输出代码中一小部分。OOA过程中将现实的需求转为以及输出领域模型问题,根据需求案例设计交互并按照业务逻辑绘制的类图是源代码实现过程的基石,利用分析能力绘制软件需求的类图进一步抽象出更全面准确的系统设计。OOD过程中需要实现将业务逻辑转为逻辑架构、类图、类与类之间的关系,如何分层分包等问题,而在此过程中输出类图等。源代码的实现在面向对象编程过程,在此过程中依据面向对象设计的类图进行编程定义类从而实现整个软件项目。总而言之OOA的结果作为开始OOD的模型,最终利用OOP方法实现一个系统,其中类图和定义类的关系也是如此。

3.分析dao包中各java文件的用途

  • DAO层(Data Access Object)数据访问对象(接口),它通常包含了与数据访问相关的接口和实现类。dao层对应的是数据库实体,主要是封装一些数据库的增删改查操作,具体实现不再dao层里,dao里的方法交给service层去调用,此系统中Impl是DAO的实现类。
    DAO层的主要目的是封装数据库访问,使得数据访问和业务逻辑分离,以达到解耦的目的。
  • 各java文件:
    ICla2Sub.java:定义了教师,学生,课程之间对应关系的接口,包含了增删改查等操作
    IClasses.java:定义了班级信息接口,包含了增删改查等操作
    ILogin.java:与operator表中的信息对比,检验账号是否匹配;
    IMajor.java:定义了专业信息接口,包含了增删改查等操作
    IOperator.java:此系统用户登录信息账号,密码等,包含了对这些信息的增删改查等操作
    IPicture.java:与student表中的信息对比,检验学生是否更新、上传或删除了照片;
    IPrivilege.java:定义三种角色的特权功能接口,包含了增删改查等操作
    IRole.java:定义角色信息接口,包含了增删改查等操作
    IScore.java:定义成绩信息接口,包含了增删改查等操作
    IStudent.java:定义学生信息接口,包含了增删改查等操作
    ISubject.java:定义课程信息接口,包含了增删改查等操作
    ITeacher.java:定义教师信息接口,包含了增删改查等操作

任务七

1.增量开发:结合实际教务管理系统的使用体验,分别为高校学生管理软件的教务员和学生设计开发满足用户实际需求的功能,新增功能:

  管理员:

  1. 统计各科平均成绩

主要方法:
1.entity层已有Score实体类,则在Dao数据接口层定义getAvgScore()方法,再到Impl实现类,impl具体代码如下:

public List<Map<String,Object>> getAvgScore() {
	try {
		List<Map<String,Object>> list = new ArrayList<>();
		conn = DB.getConn();
		pst = conn.prepareStatement("select sub.sub_name,AVG(sco_count) as score from score sco LEFT JOIN subject sub on sub.sub_id = sco.sub_id  GROUP BY sub.sub_name");
		rs = pst.executeQuery();
		while (rs.next()) {
			Map<String,Object> result = new HashMap<>();
			result.put("subName",rs.getString(1));
			result.put("score",rs.getDouble(2));
			list.add(result);
		}
		return list;
	} catch (Exception e) {
		e.printStackTrace();
		return null;
	} finally {
		DB.close(conn, pst, rs);
	}
}

2.score.servlet层,AvgScoreServlet.java

public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	// TODO Auto-generated method stub
	// 准备更新学生成绩信息
	ScoreImpl scoreImpl = new ScoreImpl();
	List<Map<String,Object>> score = scoreImpl.getAvgScore();
	response.getWriter()
			.write(JSONSerializer.toJSON(score).toString());
}

3.写view层,search_avg_score.jsp

<div class="window">
			<div class="searchbox tit">
				查询各科平均成绩:
				<select id="search_type">
					<option value="stu_all">
						查找全部
					</option>
				</select>
				<input id="search_score" type="button" value="查询" />
			</div>
		</div>
  1. 统计各分数段人数

主要方法:
与统计平均分类似,定义getScoreCount()方法

public List<Map<String,Object>> getScoreCount();

  学生:

  1. 进行教评(选择教师)

主要方法:
1.Entity层新建TecherEvaluate实体,分别定义备课情况,专业素质,技术提升等评价方面。

private Integer score1;// 备课情况
private Integer score2;// 专业素质
private Integer score3;// 技术提升
public void setScore1(Integer score1) {
	this.score1 = score1;
}

public Integer getScore2() {
	return score2;
}

2.Dao层,定义增删改查,并在Impl中进行实现

public void delete(TeacherEvaluate evaluate) {
	try {
		conn = DB.getConn();
		pst = conn.prepareStatement("DELETE FROM teacher_evaluate WHERE id = ?");
		pst.setInt(1, evaluate.getId());
		pst.executeUpdate();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		DB.close(conn, pst, rs);
	}
}

3.eacherEvaluate.servlet层

4.View层,add_teacher_evaluate.jsp

  1. 查询所选课程的成绩排名(以1号学生为例)

  2. 请假申请

主要方法:

<input  name="isApprov" type="hidden" value="1"  />
				<div align="left">
					请假开始时间:
					<input type="text" name="start"  />
				</div>
				<div align="left">
					请假结束时间:
					<input type="text" name="end"  />
				</div>
				<div class="main">
					<br />
					<div align="right">
						<input type="submit" value="确定"
							style="width: 65px; height: 35px; line-height: 35px; overflow: hidden; text-align: center; float: left; margin-left: 270px;" />
					</div>
				</div>

  教师:

  1. 查看教评结果

  2. 审核学生请假

项目实现逻辑:
1.组织项目结构:对项目职责进行分工,主要分为以下几个部分:DAO(Data Access Object,数据访问对象),Service(服务),Controller(控制器),Util(工具),Entity(实体)
2.采用MVC模式(JAvaweb项目中常用MVC模式):

各层之间的关系:Entity作为返回值被Dao层使用,DAO层被Service层调用,Service层被Controller层调用。View层负责数据的显示,Cotroller层负责控制数据和用户的交互,Model层负责对数据逻辑的处理。

  • 在github仓库上传新增功能的软件源代码,实验七

任务八

1. 进度计划表(以周为单位)

5.22~5.28 5.29~6.4 6.5~6.10
1.熟悉项目代码将其部署到tomcat上
2. 画用例图,编写新增功能
1.梳理项目中各类的关系绘制类图
2.编写新增功能
1. 画顺序图
2.编写新增功能
3.撰写博客,整理完善相关任务要求
4.对此次项目进行总结

2. 任务分配表

成员 任务
杨*丽 项目部署,绘制顺序图,新增功能实现,撰写博客
王*慧 分析项目各类之间的关系,绘制类图
李* 绘制类图,完成任务3和任务6
米* 绘制用例图,实体E-R图,新增功能实现

3. 各项任务实际花费时间(min)

任务 预期时间 实际时间
将高校学生管理软件部署在Tomcat服务器 20 30
绘制高校学生管理软件的用例图 120 120
理解项目需求简介,采用简易应用规格说明技术,讨论高校学生教务管理系统的软件需求列表,采用面向对象分析方法绘制高校学生管理软件的类图 240 300
绘制某一学生用户对象查询课程和成绩的顺序图;绘制教务员课程安排的顺序图 60 60
理解分析高校学生管理软件中数据库表的物理结构,结合各表外键的定义,正确绘制数据库对应的E-R图 60 80
理解分析高校学生管理软件代码结构,结合MVC软件设计模式特点,采用面向对象设计方法绘制高校学生管理软件的类图 120 150
结合实际教务管理系统的使用体验,分别为高校学生管理软件的教务员和学生设计开发满足用户实际需求的功能 420 540
制定实验七任务的进度计划表和任务人员分工,任务实施期间记录完成各项任务实际花费的时间 30 30
制定实验七任务的进度计划表和任务人员分工,任务实施期间记录完成各项任务实际花费的时间 60 100

4. 实验总结

成员 总结
杨*丽 本次实验实现了Javaweb项目的部署,新增功能设计,用例图,类图,ER图等的绘制,梳理各类之间的关系,掌握并运用MVC设计模式。由于任务较多,所以将任务分别分配给每个小组成员,各司其职完成了此次实验。在设计编写新增功能时,掌握了Javaweb项目三层架构设计,表现层,业务逻辑层,数据访问层,三层通过Entity实体类联系起来,锻炼了自己的能力,对案例软件的结构有了新的理解。
王*慧 本次实验完成了项目的部署搭建、实现新增功能并对项目进行了全面的分析,基本达到了软件工程分析并完成软件项目的标准。通过本次实验本人进一步练习了通过面向对象设计画类图的方法,这是软件项目实现过程中的一大阶段。在项目的基础上新增功能有利于对编程的练习和对项目整体的把握提高了项目合作能力。对项目中的各个包进行分析详细了解MVC设计模式到底是什么。由于这是本次课程的最后一次实验,所以更为用心和认真的分析项目和完成各项任务,基本达到了预期目标。软件工程的学习是一个长期的过程也是各种知识的结合,也学习掌握了starUML的使用、利用博客园进行学习、查找各种资料等技能。
李* 在此次团队作业中,我们通过部署高校学生管理软件,创建了高校学生信息管理系统Student项目,经过分析案例,实现了系统面向管理员,教师和学生三类用户的各项操作,并且在原先的基础上增加了教评和学生请假功能。利用所学知识使用StarUML绘制了系统的用例图,类图,顺序图以及E-R图,通过理论知识与实际操作相结合,更加深刻的学习到了软件工程学科的重要性。而且在团队合作交流中,我们有了更多的默契和经验,在实际操作中也更加熟练。
米* 通过本次实验,我了解并体会了UML建模技术在软件开发过程中的用途,掌握了软件项目的数据库逻辑结构设计方法和软件结构设计方法,并着重理解了面向对象软件开发过程。总的来说,本次实验的项目案例综合性很强,在前几次实验中所掌握的知识和技术的基础上继续深入挖掘,刚开始的时候我们遇到了很多困难,但经过不懈努力地去解决问题,我们也在这个过程中收获颇丰。本次实验不仅让我更深入学习了软件开发和案例分析的相关知识,也锻炼了我的动手能力,同时更深刻地体会到了面对一个复杂项目时团队合作的重要性和必要性,这都将对我以后的学习产生非常重要的影响。