1、Java-EE架构设计与开发教程课件第10章了解Java EE面向接口开发概念掌握Java EE的应用分层框架学习内容熟悉项目后台数据库的设计了解SSM框架的综合应用项目需求分析1功能流程设计2数据库设计 3系统实现4目 录CONTENTS系统运行界面展示5项目需求分析1 系统功能需求 系统流程分析项目需求分析项目需求分析该系统旨在解决学生选择毕业设计课程设计题目的问题。这个问题的要求包括学生对现有课题的了解过程,选择课题,重选课题,查看自身已选课题的过程,老师对课程题目的相关信息有增删改的功能,对已选课题学生有一个有总体情况的查看功能。其次老师为了实现所有课题都有一定或者适宜数量的人去选择,
2、老师有权限去修改规定对应课题的对应库存(课题的最多可选人数)。以及基本的用户登陆验证问题。系统功能需求项目需求分析项目需求分析系统解决问题的过程中出现了以下的对象:学生用户对象,老师用户对象,课题对象等。学生用户对象对课题对象有选择功能,一次选择生成一条记录,根据该记录在数据库课题选择情况表中生成相应的数据并更改课题表中相应课题的库存,重新选择课题功能需要将课题选择情况表中的该学号用户的选择记录删除,再添加入新的选题数据,并在课题表中修改相应课题的库存量。并且需要在用户选择课程库存量不足的情况下,向学生用户反馈信息,提示重选。学生用户有查看自己选课情况的功能需求。系统功能需求项目需求分析项目需
3、求分析老师用户是学生用户中的一类特殊用户,老师用户相对于学生用户拥有对课题操作的特殊权限,因此系统需要分配给老师用户对课题操作的不同的功能权限需求,包括增加新课题数据,修改原有课题数据,限制规定课题库存量,查看所有已选学生的选课情况。系统功能需求项目需求分析项目需求分析用户对象登录功能实现需求,系统通过用户名来区分用户所具有的权限,并在登录后自动的跳转到相应的操作页面。用户登陆时,为了避免机器穷举攻击登录他人用户,要求系统在登陆界面中添加验证码功能来区分用户和机器,防止用户账户遭到恶意入侵和更改。系统功能需求项目需求分析项目需求分析本章项目具体的需求分析,如图所示。用户登陆都需要验证信息,验证
4、成功后才能登陆系统。用户按照执行任务和权限分为两种:学生和管理员,两者拥有不同的管理页面。学生用户主要做的即选择课题和查看已选择的课题;管理员做的是查看选课情况和对课题的增、删、改、查操作。系统流程分析功能流程设计 系统模块描述 系统编程环境2 前端页面设计 核心类设计功能流程设计功能流程设计整个系统体系结构框架如图所示。系统分为三大块:前台界面、后台以及数据库操作。相应的项目文件名称以及细分的模块如图所示。系统模块描述功能流程设计功能流程设计根据体系结构图可知,后端连接中有很多模块,下面简单介绍下相应的模块具体有什么作用。pDao模块中实现了三个接口:EnrollmentDao,Projec
5、tDao,UserDao。三个接口分别用于与数据库表格的增删改查操作。三个接口的实现依赖于entitiy模块中的Enrollment,Project,User三个对象类以及util模块中的List类。pDto模块中实现了三个类:Checker,EnrollResult,SelectResult。Checker类提供了用于登陆验证的字符串比较。EnrollResult类用于生成选课记录表的结果记录。SelectResult类用于生成选课的记录。pEntitiy模块中实现了三个类:Enrollment,Project,User。三个类分别用于实例选课记录,课题项目,用户信息这三个对象。为其他模块提
6、供依赖。系统模块描述功能流程设计功能流程设计pException模块中实现了6个类:EmptyFieldException,LoginException,ProjectUpdateException,RepeatSelectException,SelectException和StockException。分别用于实例空文本框异常,登陆异常,课题项目编辑更新异常,重复选择课题异常,选课异常和库存异常。pService模块中实现了三个类:EnrollmentServiceImpl,ProjectServiceImpl,UserServiceImpl;和三个接口EnrollmentService,P
7、rojectService,UserService。三个类分别引用了这三个接口。pUtil模块中实现了Util类,Util类中导入了EmptyFieldException类。pWeb模块中实现了主要的SelectController类,控制类依赖于以上几乎所有的类,通过url来实现页面的跳转和功能的实现。系统模块描述功能流程设计功能流程设计本章项目的编程环境为:Windows操作系统,MyEclipse2014编译器,MySQL数据库。Windows操作系统7或10均可。MySQL数据库在第一章和第九章均有讲到过,读者如果感到陌生,可自行复习,在此便不再对MySQL做过多描述了。正版MyEcl
8、ipse2014是需要收费的,读者可自行购买或下载破解版插件进行破解。安装破解等操作,请读者自行百度学习,在此不对其做详细介绍。系统编程环境功能流程设计功能流程设计关于前端页面设计,我们可以我们首先根据架构图,新建如图所示的目录。具体代码见对应教材的课程设计源码。前端页面设计功能流程设计功能流程设计根据之前提到的架构图,我们需要在后台连接模块中写入实现类。图所示的是各个模块的目录。核心类设计功能流程设计功能流程设计下面我们介绍下操作后台连接的一些接口的具体功能。p EnrollmentDao接口方法:int insertEnrollment(Enrollment enrollment);插入选
9、课记录方法Long selectProjectIdByUserId(Long userId);根据用户id查询课题id方法int deleteByUserId(Long enrollmentId);根据用户id删除记录方法List selectWithProjectAndUser();根据用户/课题查询方法核心类设计功能流程设计功能流程设计p ProjectDao接口方法:List listAllProjects();列出所以课题方法int reduceStock(Long projectId);减少库存方法int getStock(Long projectId);查询库存方法Project
10、selectProjectById(Long projectId);根据id查询课题方法int insertWithoutId(Project project);插入课题方法Project getProjectById(Long id);获取课题id方法int deleteProjectById(Long id);删除课题方法int updateProjectById(Project project);更新课题方法int increaseStock(Long projectId);增加库存方法核心类设计功能流程设计功能流程设计p UserDao接口方法:User queryByUsername
11、(String username);查询用户方法List listAllUsers();列出所有用户方法核心类设计功能流程设计功能流程设计三个接口的方法具体实现方法见后面的详细代码。我们继续介绍下操作后台连接的一些类的具体功能。p Enrollment类 字段:enrollmentId,userId,projectId,project,user 方法:对各字段的get/set方法,无参构造方法,带参构造方法,toString()p Project类 字段:projectId,projectName,projectDescription,stock(库存)方法:对各字段的get/set方法,无参
12、构造方法,带参构造方法,toString()p User类字段:userId,username,realname,password方法:对各字段的get/set方法,无参构造方法,带参构造方法,toString()核心类设计功能流程设计功能流程设计p Checker类字段:checked(布尔型),userId,username方法:对各字段的get/set方法,无参构造方法,带参构造方法,toString()p EnrollResult类字段:enrolled(布尔型),enrollmentId,userId,projectId方法:对各字段的get/set方法,无参构造方法,带参构造方法,
13、toString()p SelectResult类字段:success(布尔型),data,error(报错,字符型)方法:对各字段的get/set方法,无参构造方法,带参构造方法,toString()核心类设计功能流程设计功能流程设计6个异常类如下:p EmptyFieldException类:方法:EmptyFieldException(String message)super(message);EmptyFieldException(String message,Throwable cause)super(message,cause);p LoginException类方法:LoginE
14、xception(String message)super(message);LoginException(String message,Throwable cause)super(message,cause);p ProjectUpdateException类方法:ProjectUpdateException(String message)super(message);ProjectUpdateException(String message,Throwable cause)super(message,cause);核心类设计功能流程设计功能流程设计p RepeatSelectExcepti
15、on类方法:RepeatSelectException(String message)super(message);RepeatSelectException(String message,Throwable cause)super(message,cause);p SelectException类方法:SelectException(String message)super(message);SelectException(String message,Throwable cause)super(message,cause);p StockException类方法:StockExceptio
16、n(String message)super(message);StockException(String message,Throwable cause)super(message,cause);核心类设计功能流程设计功能流程设计以下是在service模块下的几个接口。p EnrollmentService接口方法:public EnrollResult enroll(Enrollment enrollment)throws RepeatSelectException,StockException,SelectException;生成选课记录方法public int deleteEnroll
17、mentByUserId(Long userId);删除记录方法public Project getProjectByUserId(Long userId);根据用户id查询课题方法public List getAllEnrollments();查询所有记录方法核心类设计功能流程设计功能流程设计p ProjectService接口方法:public List getProjectList();获取课题列表方法public void saveProject(Project project);保存课题方法public Project getProject(Long id);获得课题方法public
18、 int deleteProject(Long id);删除课题方法public int updateProject(Project project)throws ProjectUpdateException;编辑课题方法核心类设计功能流程设计功能流程设计p UserService接口方法:public User login(String username,String password)throws LoginException,SelectException;用户登陆方法核心类设计功能流程设计功能流程设计按照目录结构,接着介绍以下类。p EnrollmentServiceIml类 impl
19、ements EnrollmentService字段:logger,enrollmentDao,projectDao方法:引用了接口中的所有方法,具体实现见后的详细代码p ProjectServiceImpl类字段:logger,projectDao方法:引用了接口中的所有方法,具体实现见后的详细代码p UserServiceImpl类 implements UserService字段:logger,userDao方法:引用了接口中的所有方法,具体实现见后的详细代码核心类设计功能流程设计功能流程设计p Util类方法:public static String throwIfBlank(Stri
20、ng message,String target)if(target=null|(target=target.trim().length()=0)throw new EmptyFieldException(message);return target;/登陆时文本框为空报错方法public static String$(String message,String target)return throwIfBlank(message,target);/向页面传递报错方法核心类设计功能流程设计功能流程设计pSelectController类(系统关键控制类)字段:projectService,en
21、rollmentService,userServiceService方法:String console()List projects()String login(Param(value=username)String username,Param(value=password)SelectResult enroll(PathVariable(id)Long projectId,HttpSession session)String adminProjectList()SelectResult updateProject(Project project)SelectResult saveProje
22、ct(Project project)SelectResult getProject(PathVariable(id)Long id)SelectResult deleteProject(PathVariable(id)Long id)SelectResult getEnrollmentInfo(HttpSession session)String index()String login()String adminIndex()String logout(HttpSession session)String enrollmentList()SelectResult enrollments()方
23、法实现详见后详细代码核心类设计数据库设计 创建数据表3 功能代码设计数据库设计数据库设计创建数据表在整个项目中,数据库无疑是核心,它包含了项目中所有要保存的记录以及信息交互、验证的数据,下面就来详细讲解下数据库设计。数据库设计数据库设计创建数据表p Enrollment表利用数据库可视化工具,我们建立了如图的Enrollment数据表。数据库设计数据库设计创建数据表p Project表如图所示,Project表的结构。数据库设计数据库设计创建数据表p User表如图所示,User表的结构。数据库设计数据库设计功能代码设计p Dao模块功能实现EnrollmentDao.xml实现:Projec
24、tDao.xml和UserDao.xml实现方式与上相同。数据库设计数据库设计功能代码设计EnrollmentServiceImpl类:ProjectServiceImpl类与UserServiceImpl类实现方式与上相同。数据库设计数据库设计功能代码设计p Web模块功能实现SelectController类:数据库设计数据库设计功能代码设计系统实现 创建项目工程 导入系统所需包4 系统测试系统实现系统实现创建项目工程在Myeclipse2014中新建一个项目,将其命名为select,并建立如下图的系统结构。系统实现系统实现导入系统所需包系统所需包的目录如图所示。系统实现系统实现系统测试对
25、系统进行的测试分为dao和service两个方面面的测试。Dao数据库方面的测试如下,下图表示了dao中的类目录。系统实现系统实现系统测试选课记录表格中的测试类EnrollmentDaoTest中,有一个插入记录insertEnrollment()方法。系统实现系统实现系统测试将以下作为测试条件,EnrollmentenrollmentId=169,userId=1001,projectId=10001,project=null,user=null通过数据库可视化工具可知,插入成功。系统实现系统实现系统测试此时查看选课记录表测试selectWithProjectAndUser()方法,代码如下
26、:系统实现系统实现系统测试课题记录表测试类ProjectDaoTest中,有个列出所有课题测试的方法listAllProjects(),如下所示。系统实现系统实现系统测试下面进行选课减少库存测试,运行reduceStock()方法即可,代码如下。系统实现系统实现系统测试新增课题测试insertWithoutId()。系统实现系统实现系统测试接着测试退选后增加库存方法increaseStock()。系统实现系统实现系统测试在用户表UserDa oTe st 类 中,根 据 i d查 找 密 码 的 方 法queryPasswordById()代码如下所示:系统实现系统实现系统测试测试方法,列出所
27、有用户测试listAllUsers()。系统实现系统实现系统测试进行完Dao测试后就该进行Service服务层测试了。同样的我们先给出它对应的目录结构。系统实现系统实现系统测试找到EnrollmentServiceTest这个类,测试其中名叫enrollTest()的方法。系统实现系统实现系统测试下面继续测试方法deleteenrollment()。系统实现系统实现系统测试由于前面不合理的测试导致Enrollment表中有多条关于1001的记录,而该实现方法的实现只能选中其中一条且仅有的一条导致出错,将数据库Enrollment表中删至只有一条1001的数据时可以实现测试。接下来,我们测试下g
28、etProjectByUserId()方法。系统实现系统实现系统测试找到getAllEnrollments()方法进行测试。系统实现系统实现系统测试下面在ProjectServiceTest类中,测试getProjectList()方法。系统实现系统实现系统测试测试方法saveProject()。系统实现系统实现系统测试测试结果如图所示:系统实现系统实现系统测试测试getProject()方法。系统实现系统实现系统测试测试updateProject()方法。系统实现系统实现系统测试找到UserServiceTest类,测试其中的checkUser()的方法。系统运行界面展示 功能展示5系统运行
29、界面展示系统运行界面展示功能展示p 登录界面,不完成验证码,登录按钮将处于disabled状态,按顺序选择汉字,点击验证并验证成功后登录按钮enable。系统运行界面展示系统运行界面展示p 下边的界面是管理员用户才做的界面,目前有项目管理和查看选课情况两个功能。功能展示系统运行界面展示系统运行界面展示p 管理员项目管理界面,可新增删除编辑项目。功能展示系统运行界面展示系统运行界面展示p 项目添加、编辑模态框。功能展示系统运行界面展示系统运行界面展示p 查看选课情况界面。功能展示系统运行界面展示系统运行界面展示p 学生用户登录后界面,只有选择项目功能,项目管理disabled。功能展示系统运行界面展示系统运行界面展示p 进入选择项目页面后可选择有库存的课题,推选重选可直接点击另一项课题,后台自动完成课题库存的增减。功能展示系统运行界面展示系统运行界面展示p 点击查看已选课程,弹出自己已选项目的模态框。功能展示小结通过本章课程设计的实践,我们学习使用了Spring MVC模块来实现web应用程序,学习了目前最受欢迎的前端框架bootstrap来设计了系统的页面。通过使用SSM框架进行MVC架构的项目开发,几乎可以不必关心数据库的操作,只要按模式搭好脚手架即可,极大地提高了开发人员的效率,框架自身的模块化特征也使项目变得易于拓展。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。