【J2EE】学生信息管理系统

1. 项目涉及的知识要点

关于struts和 hibernate的框架设计,servlet技术和jsp技术,数据库访问等技术。

2. 项目的主要目的

通过struts 和hibernate 框架技术来实现一个小型学生信息管理系统的JavaEE项目,掌握小型系统程序设计的基本方法,掌握程序设计基本框架的搭建和模块化程序设计的基本思想,能够使用工具进行程序系统的调试,培养利用java语言进行程序设计的能力。

3. 系统介绍

3.1 开发工具

界面前端:Visual Studio Code

代码编写:MyEclipse

服务器:Tomcat

数据库设计与部署:SQLServer2008R2

服务器框架搭建:Hinernate,Struts

3.2 总体功能模块图

3.3 总体功能流程图

4. 数据库设计

4.1. 数据库中各数据表及数据项的设计

本系统主要包括用户登录,学生信息管理,课程信息管理,选课等功能。每个功能都要通过表单和报表来操作数据表中的数据。每个数据表存储了系统所需要的数据信息。在进行数据库设计前,要分析出系统所需要的数据表。

用户登录信息表(Users)

字段名称

数据类型

说明

uid

自动编号

主键

username

文本

用户名

password

文本

密码

 

学生信息表(Student)

字段名称

数据类型

说明

sid

自动编号

主键,学号

sname

文本

学生姓名

gender

文本

性别

dept_name

文本

系名

tot_cred

小数

总绩点

birthday

日期/时间

生日

 

课程信息表(Course)

字段名称

数据类型

说明

cid

整数

主键,课程号

title

文本

课程名

credits

小数

学分

start_time

日期/时间

开始时间

end_time

日期/时间

结束时间

4.2 数据库中所有表间关系

5. 系统实现

5.1 登录与激活

模块功能:登录表单提供登录接口,管理员只要输入正确用户名和密码即可登录,学生首次登录需要先在用户名框输入学号点击激活按钮实现账户激活,如何输入默认密码即可登录。

界面设计:

业务逻辑处理:

通过输入的用户名和密码判断是否符合Users表中的记录,假如输入条件符合则跳转到Users_login_success.jsp界面,不符合则不跳转,输入用户名和密码为空时会有报错提醒,学生首次登录时需先在用户名输入学号,点击激活,通过输入的学号判断是否符合Student表中的记录,假如输入条件符合则在User表中添加该用户并在登录界面出现提示信息,提示你用户已激活,默认密码为xxx。输入密码后即可登录。

关键代码(action):

private Users user = new Users();
	
	//用户登录动作
	public String login(){
		UsersDAO uDao = new UsersDAOImpl();
		if(uDao.usersLogin(user)){
			//在session中保存登录成功的用户名
			session.setAttribute("loginUserName", user.getUsername());
			
			return "login_success";
		}else{
			return "login_failure";
		}
	}
@Override
    public void validate() {
		
        if ("".equals(user.getUsername().trim())) {
            this.addFieldError("userNameError", "用户名不为空");
        }
        
        if (user.getPassword().length()<=0) {
            this.addFieldError("passwordError", "密码不为空");
        }
        
    }
//激活
	@SkipValidation
	public String activate(){
		Users u = new Users();
		u.setUsername(request.getParameter("username"));
		u.setPassword(request.getParameter("username"));
		
		UsersDAO uDao = new UsersDAOImpl();
		if(uDao.activateUsers(u)){
			session.setAttribute("activate_username", u.getUsername()+"已激活,默认密码为"+u.getUsername());
			return "activate_success";
		}else{
			session.setAttribute("activate_username", "未激活");
			return "activate_failure";
		}
		
	}

5.2 登录成功功能界面设计

模块功能:显示是哪个用户登录界面,可通过左边列表进行不同功能界面的跳转,点击右上角的安全退出可退出系统。

界面设计:

业务逻辑处理

登录后获取登录时保存在session中的”username”,显示在界面右上角,点击安全退出按钮后,删除保存在session中的”username”,跳转到登录界面。左边列表提供各种链接通过页面跳转转到需要的界面。

关键代码:

${sessionScope.loginUserName}为Expression Language

<div id="user_info">  
      <div id="welcome">欢迎 ${sessionScope.loginUserName} 使用本系统</div>  
      <div id="logout"><a href="<%=path%>/users/Users_logout.action">安全退出</a></div>  
</div>  

 

@SkipValidation
	//用户注销动作
	public String logout(){
		if(session.getAttribute("loginUserName")!=null){
			session.removeAttribute("loginUserName");
		}
		if(session.getAttribute("activate_username")!=null){
			session.removeAttribute("activate_username");
		}
		return "logout_success";
	}

5.3查询和删除功能设计

模块功能:通过访问数据层获取数据存入session中,在jsp页面中显示出来。显示的列表数据还提供修改和删除的跳转链接,点击对应列表的操作可跳转页面对数据进行更新和删除。在查询旁边的输入框输入要查询的学生id或课程编号,点击查询可显示你要查询的数据。

界面设计

业务逻辑处理:判断用户是否为管理员,是则正常显示查询列表,不是则显示你无权限,点击相应学生名或课程名,获取相应id,跳转到修改界面,点击删除操作,获取相应id,在数据库找到对应数据记录,对该数据记录进行删除。精确查询,在按下查询按钮后,获取输入框内的值,根据对于的sid/cid在其对应的数据库找到相应记录,并且显示在列表上。

关键代码:

//学生Action类
public class StudentAction extends SuperAction{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	//查询所有学生的动作
	public String query(){
		StudentDAO sDao = new StudentDAOImpl();
		List<Student> list = sDao.queryAllStudents();
		//放进session中
		if (list!=null&&list.size()>0) {
			session.setAttribute("students_list", list);
			//return "Students_query_success";
		}
		if(session.getAttribute("loginUserName")!=null){
			if(!session.getAttribute("loginUserName").equals("Manager")){
				return "no_permission";
			}else{
				return "query_success";
			}
		}else{
			return "no_permission";
		}
	}
	
	//按学号查询学生
	public String queryById(){
		StudentDAO sDao = new StudentDAOImpl();
		String sid = request.getParameter("sid");
		Student student = sDao.queryStudentsBySid(sid);
		//放进session中
		if(student!=null){
			session.setAttribute("student_ById", student);
		}
		return "queryById_success";
	}
	
	//删除学生动作
	public String delete(){
		StudentDAO sDao = new StudentDAOImpl();
		String sid = request.getParameter("sid");
		sDao.deleteStudents(sid);//调用删除
		return "delete_success";
	}

5.4添加功能设计

模块功能:点击添加学生/课程,跳转至添加界面,在表单内输入信息,点击添加按钮,添加成功会自动跳转至添加成功界面。

界面设计

业务逻辑处理:获取需要添加的学生/课程信息(学生id选取目前存在的最大数值+1),点击添加,相应信息将保存在新建的对象里,然后提过数据访问层添加至数据库。

关键代码:

//添加学生
    public String add() throws Exception {
    	if(session.getAttribute("loginUserName")!=null){
            if(!session.getAttribute("loginUserName").equals("Manager")){
    			return "no_permission";
    		}else{
    			Student s = new Student();
    			s.setSname(request.getParameter("sname"));
    			s.setGender(request.getParameter("gender"));
    			s.setDept_name(request.getParameter("dept_name"));
    			s.setTot_cred(3.8);
    			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    			s.setBirthday(sdf.parse(request.getParameter("birthday")));

        
    			StudentDAO sdao = new StudentDAOImpl();
    			sdao.addStudents(s);
    			return "add_success";
    		}
        }else{
        	return "no_permission";
        }
    }

 

5.5更新功能设计

模块功能:跳转到相应更新界面后,表单中已显示你要修改的数据的当前信息,在表单内进行修改后保存即可跳转到修改成功界面,对用户密码的修改需要同时输入旧密码和新密码。

界面设计

    

业务逻辑处理:获取需要修改的学生/课程/用户的sid/cid/username,对其数据库获取对应信息显示在表单内,在表单内对数据进行修改,点击保存,重新从表单内获取修改好的数据后保存。通过数据访问层更新好数据记录。对于用户密码的更改,在更新前要判断旧密码是否与之前的密码一致,不一样就继续跳转到修改界面,不显示修改成功界面。

关键代码:

//修改密码
	@SkipValidation
    public String modify(){
		//获得用户名
    	String username =(String)session.getAttribute("loginUserName");
    	UsersDAO udao = new UsersDAOImpl();
    	Users users = udao.queryUsersByUsername(username);
    	//保存在会话中
    	session.setAttribute("modify_users", users);
    	return "modify_success";
    }
    
  //保存修改的密码
	@SkipValidation
    public String save() throws Exception{
    	Users u = new Users();
    	String oldPassword = request.getParameter("oldPassword");
    	String newPassword = request.getParameter("newPassword");
        String username = (String) session.getAttribute("loginUserName");
    	u.setPassword(newPassword);
    	UsersDAO udao = new UsersDAOImpl();
    	Users user = udao.queryUsersByUsername(username);
    	if(user.getPassword().equals(oldPassword)){
    		udao.updatePassword(newPassword,username);
    		return "save_success";
    	}else{
    		return "save_failure";
    	}
    }

5.6 选课功能设计(仿购物车功能)

 

模块功能:显示课程列表,可在对应课程行右边点击选课,选课成功后会跳转到成功界面显示编号xxxx课程选课成功,点击课程表查询会显示你的选课记录,可在右边选择取消选课,清除该条记录。课程列表下可显示选课的总学分。

界面设计

业务逻辑处理:在选课列表中显示所有课程,在列表提供选课按钮,点击选课按钮servlet会获取相应id,在数据库中对比出对应记录,添加到session中,在课表查询中显示出来,同时获取每个课程的学分统计出总学分。在课表查询中提供取消选课来删除对应记录。

关键代码:

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		if(request.getParameter("action")!=null){
			this.action = request.getParameter("action");
			if(action.equals("add")){//如果是添加课程进选课表
				if(addToSelect(request,response)){
					request.getRequestDispatcher("/courses/success.jsp").forward(request, response);
				}else{
					request.getRequestDispatcher("/courses/failure.jsp").forward(request, response);
				};
			}
			if(action.equals("show")){//如果是展示选课表
				request.getRequestDispatcher("/courses/Courses_table.jsp").forward(request, response);
			}
			if(action.equals("delete")){//如果是取消选课
				if(deleteFromSelect(request,response)){
					request.getRequestDispatcher("/courses/Courses_table.jsp").forward(request, response);
				}else{
					request.getRequestDispatcher("/courses/Courses_table.jsp").forward(request, response);
				}
			}
		}
	}
	
	//添加课程进选课表的方法
	private boolean addToSelect(HttpServletRequest request, HttpServletResponse response){
		if(request.getParameter("cid")!=null){
			int cid =Integer.parseInt(request.getParameter("cid"));
			Course course = cDao.queryCoursesByCid(cid);
		
			//第一次添加,给session添加新对象
			if(request.getSession().getAttribute("select")==null){
				Select select = new Select();
				request.getSession().setAttribute("select", select);
			}
			Select select =(Select) request.getSession().getAttribute("select");
			if(select.addCoursesInSelect(course)){
				return true;
			}
			else{
				return false;
			}
		}else{
			return false;
		}
	}
	
	//从选课表中删除课程
	private boolean deleteFromSelect(HttpServletRequest request, HttpServletResponse response){
		if(request.getParameter("cid")!=null){
			int cid =Integer.parseInt(request.getParameter("cid"));
			Course course = cDao.queryCoursesByCid(cid);
			Select select =(Select) request.getSession().getAttribute("select");
			if(select.removeCoursesFromSelect(course)){
				return true;
			}else{
				return false;
			}
		}else{
			return false;
		}
	}

源码包括数据库

https://download.csdn.net/download/qq_35941776/12061426

学习课程

https://www.imooc.com/learn/466

 

 

 

 

 

 

 

 

  • 10
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值