基于Java(jsp+servlet)+Mysql实现的(Web)宿舍管理系统

宿舍管理系统

一、系统功能分析

1.1 功能模块

宿舍管理系统实现的功能主要分三大类:系统用户的注册登录验证、对宿舍信息的增删改查、对学生信息的增删改查。

1.1.1 系统用户的登录注册验证

登录时,通过用户名和密码判断是否有此用户;注册时,不允许注册相同用户名的用户。为防止多次注册,设置邮箱验证码功能。基础抽象类如下:

public boolean login(String username, String password) throws Exception;//登录验证
public boolean register(UserBean userBean) throws SQLException ;//注册用户
public boolean addUser(UserBean userBean);//增加用户
1.1.2 宿舍信息增删改查

宿舍功能模块的增删改查有许多限制条件,如增加宿舍时,宿舍楼号只能在 01-10 之间,当宿舍入住学生时不可删除,宿舍楼号作为唯一标识不可新修改,查询宿舍时可以多条件联合模糊查询。基础抽象类如下:

public boolean addDorm(Dormbean dormbean) throws SQLException ;//增加宿舍信息
public boolean delDorm(Dormbean dormbean) throws SQLException;//删除宿舍信息
public boolean updateDorm(Dormbean dormbean) throws SQLException ;//更新宿舍信息
public ArrayList<Dormbean> selectDorm(Dormbean dormbean) throws SQLException ;//查询宿舍信息
public ArrayList<Dormbean> showAllDorm() throws SQLException;//展示所有宿舍信息
public int dormTotalCount(Dormbean dormbean);//获取宿舍个数
public Dormbean selectDormById(int id) throws SQLException;//根据id查询宿舍
public boolean updateDormQuantity(Dormbean dormbean); //更新宿舍当前人数
1.1.3 学生信息增删改查

学生信息的增删改查需要做到多表联动,增加学生信息并选择宿舍的时候需要和宿舍表进行联合操作,根据学生的性别及宿舍已入住人数判断学生信息是否可以添加成功;删除学生信息时,为防止误删,提供了事务回滚操作;因学生信息较多,提供了批量删除和分页功能操作;查询时可以多条件模糊查询;学生学号作为唯一标识,不可修改。抽象基础类如下:

public ArrayList<StudentBean> showStudentByPage(int status,int nowPage,int step) throws SQLException;//分页展示所有学生信息
public int StudentTotalCount(int status,StudentBean studentBean);//根据学生状态获得学生个数
public ArrayList<StudentBean> selectStudents(int status,int nowPage,int step,StudentBean studentBean) throws SQLException ;//根据条件查询学生信息并分页
public boolean addStudent(StudentBean studentBean) throws SQLException ;//增加学生信息
public boolean updateStudent(StudentBean studentBean);//更新学生信息
public boolean updateStatusStudent(int id,int status);//更新学生状态
public boolean delStudent(int id); //根据id删除学生
public boolean delAllStudent(String[] id); //根据id数组批量删除学生
public boolean updateAllStudent(String[] id);//根据id数组批量改变学生信息状态

1.1 系统运行环境

项目开发工具为 Spring Tool Suite ,版本为 3.9.7.RELEASE;数据库为 MySQL 数据库,版本为 5.5.53;服务器为 Tomcat 服务器,版本为 8.5.37。

二、后台数据库设计

2.1 数据库 dormitory

数据库中共有三张表管理员信息表 user,宿舍信息表 dorm,学生信息表 student。

2.2 用户信息表 user

用户信息表包含 5 个字段信息,对应着系统用户的登录注册验证模块,表结构如下所示。

用户信息表

字段名

字段类型

字段长度

意义

备注

id

int

11

数据编号

主键

username

varchar

10

用户名

password

varchar

15

密码

email

varchar

20

邮箱

realname

varchar

10

真实姓名

2.3 宿舍信息表

宿舍信息表包含七个字段,对应着宿舍信息增删改查的功能模块,表结构如下:

宿舍信息表

字段名

字段类型

字段长度

意义

备注

id

int

5

数据编号

主键

house

varchar

3

哪一栋

build

varchar

5

哪一座

number

varchar

10

门牌号

attribute

varchar

5

男女宿舍

quantity

int

2

当前人数

status

int

2

是否可用

可用为 1;不可用为 0

2.4 学生信息表

学生信息表包含 12 个字段,对应着学生信息增删改查的功能模块,表结构如下:

学生信息表

字段名

字段类型

字段长度

意义

备注

id

int

11

数据编号

主键

sid

int

11

学号

dormID

int

5

对应宿舍 ID

sname

varchar

10

学生姓名

ssex

varchar

5

学生性别

sbirthday

date

出生日期

smajor

varchar

30

专业

scollege

varchar

20

学院

sentranceT

int

5

入学时间

stelephone

varchar

15

电话

img

varchar

20

status

int

2

学生状态

默认为 1,代表住宿中;2 代表已离开

三、系统模块划分

3.1 用户模块

用户模块主要涉及用户登录和用户注册功能,为实现这两个功能,涉及了五个方法,从而对数据库进行操作,所有方法如下:

public boolean isUserExist(String username, String password) throws SQLException;//登录时根据用户名和密码判断用户是否存在
public boolean addUser(UserBean userBean);//增加用户
public boolean updateUser(UserBean userBean);//更新用户信息
public boolean selectByUserName(String username) throws SQLException;//注册用户时,先根据用户名查找此用户名是否已被注册
public UserBean selectUser(String username, String password);//根据用户名和密码,返回用户的详细信息
3.1.1 用户登录模块

用户登录模块需要根据用户输入的密码和用户名,对数据库中存储的数据进行查询,如果查询到对应数据,则允许登录,反之,则不允许登录。

3.1.2 用户注册模块

用户注册时因为用户名为唯一标识,所以不允许注册有相同用户名的账号,为了防止重复注册,用户在注册时,需要填写自己的邮箱地址,系统会向用户邮箱发送验证码,验证码正确时才允许注册。

3.2 宿舍模块

宿舍模块包括对用户的增删改查操作,为实现这些操作,涉及了以下的方法:

public boolean addDorm(Dormbean dormbean) ;//增加宿舍
public boolean delDorm(Dormbean dormbean)  throws SQLException;//删除宿舍
public boolean updateDorm(Dormbean dormbean) ;//更新宿舍
public ArrayList<Dormbean> selectDorm(Dormbean dormbean) throws SQLException ;//查询复合条件的宿舍
public ArrayList<Dormbean> showAllDorm() throws SQLException;//展示所有宿舍
public boolean isExitDorm(Dormbean dormbean) throws SQLException;//判断宿舍是否存在
public Dormbean selectDormById(int id) throws SQLException ;//根据宿舍编号查询宿舍并返回宿舍信息
public int dormTotalCount(Dormbean dormbean) ;//返回宿舍总数
public boolean updateDormQuantity(int id,int quantity) ;//根据宿舍id更新宿舍学生数,插入学生时使用
public Dormbean selectDormByDormbean(Dormbean dormbean) throws SQLException; //根据条件返回宿舍
3.2.1 宿舍信息的增加

增加宿舍信息时,首先在前台已经对宿舍信息进行了验证,防止不合法的输入。在确保验证和法的情况下,查询将要创建的宿舍是否已经存在,如已经存在,则提示用户此宿舍已存在,创建失败;如宿舍不存在,则创建成功。

3.2.2 宿舍信息的删除

删除宿舍信息时,会先判断当前宿舍的人数,若当前宿舍人数为 0,则可以删除宿舍,若当前宿舍仍有学生入住,则不可删除。

3.2.3 宿舍信息的更改

宿舍信息的楼号,栋号,门牌号作为宿舍的唯一标识不可修改,可修改宿舍的使用状态和可入住学生的性别。因此,在修改宿舍信息之前会判断宿舍当前人数,若宿舍人数为 0,则可以修改;若不为 0,则不允许修改。

3.2.4 宿舍信息的查询

宿舍信息查询支持对宿舍座号、栋号、门牌号、入住学生性别、当前入住人数的多条件联合查询。

3.3 学生模块

学生模块包括对学生信息的增删改查,批量操作,信息分页的功能,涉及了以下的方法:

public ArrayList<StudentBean> showStudentByPage(int status,int nowPage,int step) throws SQLException ;//学生信息分页
public int studentTotalCount(int status,StudentBean studentBean) ;//返回学生总数
public ArrayList<StudentBean> selectStudents(int status,int nowPage, int step,StudentBean studentBean) throws SQLException;//根据查询条件实现学生信息分页
public boolean addStudent(StudentBean studentBean);//增加学生信息
public boolean isExistStudent(int sid) throws SQLException ;//根据学生学号判断学生是否存在
public StudentBean selectStudentById(int id) throws SQLException;//根据学生主键查询相对应学生信息
public boolean updateStudent(StudentBean studentBean);//更新学生信息
public boolean updateStatusStudent(int id,int status);//根据学生主键更新学生状态
public boolean delStudent(int id); //根据主键删除单个学生
public boolean delAllStudent(String[] id); //根据主键数组批量删除学生
public boolean updateAllStudent(String[] id); //根据主键恢复被删除的学生
3.3.1 学生信息的增加

增加学生信息时首先在前端进行表单验证,防止不合法的输入。在增加学生信息时,需要为其入住相应的宿舍,入住宿舍时需要进行判断,当宿舍存在时,判断学生性别以及当前宿舍人数,来判断学生是否能够入住;当宿舍不存在时,则为学生创建相对应的宿舍进行入住,入住成功后,对应的宿舍信息表中的宿舍人数数据进行加一。

3.3.2 学生信息的删除

为防止用户误删学生信息,系统提供了事务回滚机制,切因学生信息较多,提供了批量删除机制。当学生信息真正从数据库中删除的时候,对应的学生宿舍的宿舍人数会减一。

3.3.3 学生信息的修改

学生学号作为学生信息的唯一标识不可修改,可以对学生的姓名、学院、专业、出生日期、入学年份、联系电话进行修改。

3.3.4 学生信息的查询

因为学生信息较多,所以对学生数据进行了分页,支持对学生学号、姓名、性别、专业、学院入学年份的多条件模糊查询。

四、系统实现

4.1 用户注册页面

4.1.1 注册功能实现代码

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String code = request.getParameter("code");
HttpSession session = request.getSession();
if (session.getAttribute("code")!=null) {
    if ((code.equals(session.getAttribute("code")))) {
        session.removeAttribute("code");
        UserBean userBean = new UserBean();
        userBean.setUsername(request.getParameter("username"));
        userBean.setPassword(request.getParameter("password"));
        userBean.setEmail(request.getParameter("email"));
        UserServiceImpl userServiceImpl = new UserServiceImpl();

        try {
            if (userServiceImpl.register(userBean)) {
                response.getWriter().print("注册成功");
            }
            else {
                response.getWriter().print("此用户名已存在,请更换用户名");
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    else {
        session.removeAttribute("code");
        response.getWriter().print("验证码错误");
    }

}
else {
    response.getWriter().print("还未获取验证码");
}
4.1.2 发送邮件功能实现代码
package com.gzf.util;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class EmailUtil {
    public static void createMimeMessage(String email,String content) throws UnsupportedEncodingException, MessagingException {
        Properties properties = new Properties();
        //		使用的协议
        properties.setProperty("mail.transport.protocol", "smtp");
        //QQ邮箱协议地址
        properties.setProperty("mail.smtp.host", "smtp.qq.com");
        //端口号
        properties.setProperty("mail.smtp.port", "465");
        //是否需要授权
        properties.setProperty("mail.smtp.auth", "true");
        //qq:ssl安全认证
        //引用需要的类
        properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        //是否处理未经SSL认证的信息
        properties.setProperty("mail.smtp.socketFactory.fallback", "true");
        //SSL认证的端口号
        properties.setProperty("mail.smtp.socketFactory.port", "465");
        Session session = Session.getInstance(properties);
        //		MimeMessage定义了大多数消息公共属性的抽象获取和设置方法
        MimeMessage mimeMessage = new MimeMessage(session);
        //	设置发件人地址信息
        Address address = new InternetAddress("1226164732@qq.com","gzf","utf-8"); 
        mimeMessage.setFrom(address);
        mimeMessage.setSubject("来自谷占方的邮件","utf-8");
        content = "您正在注册宿舍管理系统管理员,验证码为"+content;
        mimeMessage.setContent(content, "text/html;charset=utf-8");
        //设置传送日期
        mimeMessage.setSentDate(new Date());
        //设置接收人,  .to为正常发送  .cc为抄送  .bcc为密送
        mimeMessage.setRecipient(RecipientType.TO,new InternetAddress(email, "小可爱", "utf-8"));
        //保存邮件
        mimeMessage.saveChanges();
        //实例化一个对象,单例模式
        session.setDebug(true);
        //创建邮箱
        //建立连接对象
        Transport transport = session.getTransport();
        //此处QQ必须填密钥而不是密码
        transport.connect("1226164732@qq.com", "xaetrwzpaknkgeeb");
        //进行发送
        transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
        //关闭连接
        transport.close();
    }
}

4.2 宿舍操作界面

4.2.1 更改宿舍信息

4.2.2 实现代码如下
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    int id = Integer.parseInt(request.getParameter("id"));
    int status = Integer.parseInt(request.getParameter("status"));
    String house=null;
    String attribute = null;
    if (request.getParameter("house")!=null) {//说明是通过表单提交更改性别
        house = request.getParameter("house");
        attribute = request.getParameter("attribute");
    }
    Dormbean dormbean = new Dormbean();
    dormbean.setId(id);
    dormbean.setStatus(status);
    dormbean.setHouse(house);
    dormbean.setAttribute(attribute);
    IDormService iDormService = new DormServiceImpl();
    try {
        response.getWriter().println(iDormService.updateDorm(dormbean));
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

4.3 学生列表界面

4.3.1 学生分页显示列表

学生列表实现了分页操作,方便用户浏览信息,并能够在页面中提示当前学生总数,以及页数,在进行搜索之后仍能对学生信息进行分页。

4.3.2 搜索页面信息分页实现代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    HttpSession session = request.getSession();
    StudentBean studentBean = new StudentBean();
    int nowPage;
    int step = 5;
    if (request.getParameter("nowPage")==null) {//为null说明是通过按钮提交
        nowPage = 1;
        int sid = 0;

        if (request.getParameter("sid")!="") {
            sid = Integer.parseInt(request.getParameter("sid"));
        }

        String sname = request.getParameter("sname");
        String ssex = request.getParameter("ssex");
        String smajor = request.getParameter("smajor");
        String scollege = request.getParameter("scollege");
        int sentranceT = 0;
        if (request.getParameter("sentranceT")!="") {
            sentranceT = Integer.parseInt(request.getParameter("sentranceT"));
        }

        studentBean.setSid(sid);
        studentBean.setSname(sname);
        studentBean.setSsex(ssex);
        studentBean.setSmajor(smajor);
        studentBean.setScollege(scollege);
        studentBean.setSentranceT(sentranceT);
        session.setAttribute("studentBean", studentBean);
    }
    else {										//不为空说明为通过页码提交搜索
        nowPage = Integer.parseInt(request.getParameter("nowPage"));

        studentBean = (StudentBean) session.getAttribute("studentBean");
    }

    int status = 1 ;
    System.out.println("servlet中的studentbean为"+studentBean);
    IStudentService iStudentService = new StudentServiceImpl();
    int totalCount = iStudentService.StudentTotalCount(status,studentBean);
    ArrayList<StudentBean> studentBeans = new ArrayList<>();
    try {
        studentBeans = iStudentService.selectStudents(status,nowPage, step, studentBean);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Iterator<StudentBean> iterator = studentBeans.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }
    PageUtil<StudentBean> pageUtil = new PageUtil<>();
    pageUtil.setList(studentBeans);
    pageUtil.setTotalCount(totalCount);
    pageUtil.setStep(step);
    pageUtil.setNowPage(nowPage);
    request.setAttribute("pageUtil", pageUtil);
    request.getRequestDispatcher("student-select.jsp").forward(request, response);
}
4.3.3 分页帮助类
package com.gzf.util;

import java.util.ArrayList;

public class PageUtil<T> {
    private int totalCount;
    private int step;
    private int totalPage;
    private int nowPage;
    private ArrayList<T> list;
    public PageUtil(int totalCount, int step, int totalPage, int nowPage, ArrayList<T> list) {
        super();
        this.totalCount = totalCount;
        this.step = step;
        this.totalPage = totalPage;
        this.nowPage = nowPage;
        this.list = list;
    }
    public PageUtil() {
        super();
        // TODO Auto-generated constructor stub
    }
    public int getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
    public int getStep() {
        return step;
    }
    //	在这里定义了总页数,因此需要先定义数据总数,再定义每页显示数量
    public void setStep(int step) {
        this.step = step;
        if(this.totalCount % this.step ==0) {
            this.totalPage = this.totalCount / this.step;
        }
        else {
            this.totalPage = this.totalCount / this.step + 1;
        }
    }
    public int getTotalPage() {
        return totalPage;
    }
    public int getNowPage() {
        return nowPage;
    }
    public void setNowPage(int nowPage) {
        this.nowPage = nowPage;
    }
    public ArrayList<T> getList() {
        return list;
    }
    public void setList(ArrayList<T> list) {
        this.list = list;
    }

}

4.4 学生信息查询

支持对学生信息到的多条件模糊查询。

4.4.1 页面展示

4.4.2 实现代码
public ArrayList<StudentBean> selectStudents(int status,int nowPage, int step,StudentBean studentBean) throws SQLException {
    // TODO Auto-generated method stub
    String sql = "SELECT * FROM student where status = ?";
    if (studentBean.getSid()==0) {
        sql = sql + " and sid != ?";
    }
    else {
        sql = sql + " and sid like ?";
    }
    if (studentBean.getSname()=="") {
        sql = sql + " and sname != ?";
    }
    else {
        sql = sql + " and sname like ?";
    }
    if (studentBean.getSsex()=="") {
        sql = sql + " and ssex != ?";
    }
    else {
        sql = sql + " and ssex = ?";
    }
    if (studentBean.getSmajor()=="") {
        sql = sql + " and smajor != ?";
    }
    else {
        sql = sql + " and smajor like ?";
    }
    if (studentBean.getScollege()=="") {
        sql = sql + " and scollege != ?";
    }
    else {
        sql = sql + " and scollege like ?";
    }
    if (studentBean.getSentranceT()==0) {
        sql = sql + " and sentranceT != ?";
    }
    else {
        sql = sql + " and sentranceT like ?";
    }
    sql = sql + " LIMIT ?,?";
    System.out.println("*******"+sql+"------"+status);
    Object [] params = {status,"%"+studentBean.getSid()+"%","%"+studentBean.getSname()+"%",studentBean.getSsex(),
                        "%"+studentBean.getSmajor()+"%","%"+studentBean.getScollege()+"%","%"+studentBean.getSentranceT()+"%",
                        nowPage*step-step,step};
    ResultSet resultSet = DButil.select(sql, params);
    ArrayList<StudentBean> studentBeans = new ArrayList<>();
    while(resultSet.next()) {
        StudentBean studentBean2 = new StudentBean();
        studentBean2.setId(resultSet.getInt("id"));
        studentBean2.setSid(resultSet.getInt("sid"));
        studentBean2.setDormID(resultSet.getInt("dormID"));
        studentBean2.setSname(resultSet.getString("sname"));
        studentBean2.setSsex(resultSet.getString("ssex"));
        studentBean2.setSbirthday(resultSet.getString("sbirthday"));
        studentBean2.setSmajor(resultSet.getString("smajor"));
        studentBean2.setScollege(resultSet.getString("scollege"));
        studentBean2.setSentranceT(resultSet.getInt("sentranceT"));
        studentBean2.setStelephone(resultSet.getString("stelephone"));
        studentBean2.setImg(resultSet.getString("img"));
        studentBean2.setStatus(resultSet.getInt("status"));
        studentBeans.add(studentBean2);
    }
    return studentBeans;
}

4.5 增加学生信息

在增加学生信息时,需要为其入住相应的宿舍,入住宿舍时需要进行判断,当宿舍存在时,判断学生性别以及当前宿舍人数,来判断学生是否能够入住;当宿舍不存在时,则为学生创建相对应的宿舍进行入住,入住成功后,对应的宿舍信息表中的宿舍人数数据进行加一。

4.5.1 页面展示

4.5.2 实现代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    //获取学生信息,attribute为性别,学号表和宿舍表共用
    int sid = Integer.parseInt(request.getParameter("sid"));
    int sentranceT = Integer.parseInt(request.getParameter("sentranceT"));
    String sname = request.getParameter("sname");
    String sbirthday = request.getParameter("sbirthday");
    String smajor = request.getParameter("smajor");
    String scollege = request.getParameter("scollege");
    String stelephone = request.getParameter("stelephone");

    String house = request.getParameter("house");
    String build = request.getParameter("build");
    String number = request.getParameter("number");
    String attribute = request.getParameter("attribute");
    int status = Integer.parseInt(request.getParameter("status"));
    //         查询验证输入的宿舍是否可以入住,验证包括宿舍是否存在,性别,以及入住状态
    Dormbean dormbean = new Dormbean();
    dormbean.setHouse(house);
    dormbean.setBuild(build);
    dormbean.setNumber(number);
    dormbean.setAttribute(attribute);
    dormbean.setStatus(status);
    IDormDao iDormDao = new DormDAoImpl();
    //检测学生是否存在
    IStudentDao iStudentDao = new StudentDaoImpl();
    try {
        if (iStudentDao.isExistStudent(sid)) {
            response.getWriter().print("此学生学号已存在,无法添加");
        }
        else {
            try {
                if (iDormDao.isExitDorm(dormbean)) {//当宿舍存在时
                    System.out.println("此宿舍存在");

                    Dormbean dormbean2 = iDormDao.selectDormByDormbean(dormbean);
                    System.out.println(dormbean2);
                    if (dormbean2.getQuantity()==6) {
                        System.out.println("当前宿舍人数已满,请为此学生更换宿舍");
                        response.getWriter().print("当前宿舍人数已满,请为此学生更换宿舍");
                    }
                    else {
                        if (!(dormbean2.getAttribute().equals(attribute))) {
                            System.out.println("****----"+dormbean2.getAttribute());
                            System.out.println(attribute);
                            System.out.println("当前宿舍不能入住此性别学生");

                            response.getWriter().print("当前宿舍不能入住此性别学生");
                        }

                        else {
                            if (dormbean2.getStatus()==0) {
                                System.out.println("当前宿舍未启用,请更换或先启用此宿舍");
                                response.getWriter().print("当前宿舍未启用,请更换或先启用此宿舍");
                            }
                            else {
                                StudentBean studentBean = new StudentBean();
                                studentBean.setSid(sid);
                                studentBean.setDormID(dormbean2.getId());
                                studentBean.setSname(sname);
                                studentBean.setSsex(attribute);
                                studentBean.setSbirthday(sbirthday);
                                studentBean.setSmajor(smajor);
                                studentBean.setScollege(scollege);
                                studentBean.setSentranceT(sentranceT);
                                studentBean.setStelephone(stelephone);
                                IStudentService iStudentService = new StudentServiceImpl();
                                iStudentService.addStudent(studentBean);
                                System.out.print("已为您创建此学生信息,并入住宿舍");
							response.getWriter().print("已为您创建此学生信息,并入住宿舍");
						}
					}
				}
			}
			else {//当宿舍不存在的时候,先创建宿舍,再入住学生
				iDormDao.addDorm(dormbean);
				System.out.println(dormbean);
				Dormbean dormbean2 = iDormDao.selectDormByDormbean(dormbean);
				System.out.println(dormbean2);
				StudentBean studentBean = new StudentBean();
				studentBean.setSid(sid);
				studentBean.setDormID(dormbean2.getId());
				studentBean.setSname(sname);
				studentBean.setSsex(attribute);
				studentBean.setSbirthday(sbirthday);
				studentBean.setSmajor(smajor);
				studentBean.setScollege(scollege);
				studentBean.setSentranceT(sentranceT);
				studentBean.setStelephone(stelephone);
				IStudentService iStudentService = new StudentServiceImpl();
				iStudentService.addStudent(studentBean);
				System.out.println("已为您创建此宿舍,并入住此学生");
				response.getWriter().print("已为您创建此宿舍,并入住此学生");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			}
 		} catch (SQLException e1) {
 			// TODO Auto-generated catch block
 			e1.printStackTrace();
 		}
	}

4.6 批量删除学生信息

因为学生信息比较多,当大四同学离校时逐条删除信息比较麻烦,所以提供了批量信息删除功能。

4.6.1 页面效果展示

4.6.2 实现代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    System.out.println(request.getParameter("data"));
    String data = request.getParameter("data");
    String[] id  = data.split(",");
    IStudentService iStudentService = new StudentServiceImpl();
    response.getWriter().println(iStudentService.delAllStudent(id));
}

总结

问题一:刚开始项目时浪费了大量时间在前台页面的构建上,项目编写效率低。

解决方案:找到了一个基于 layui 框架的后台管理系统模板,利用这个模板可以把主要精力放在项目后台逻辑的实现上。

问题二:写代码时不够熟练,也不够细心经常出现意外的 bug。

解决方案:在项目中编写一些提示信息,让程序在控制台输出一些有用的数据信息,可以帮助开发者了解程序运行到了哪个地方,便于找出错误。

这次是我第一次真正意义上的编写一个完整的项目,所以在编写过程中遇到了许多麻烦,最初遇到的问题时,对于项目的架构不太合理,没能真正掌握 MVC 开发模式的思想,所以有的时候项目布局不太合理。由于以前学习过程中基本都是用 JSP 表达式获取数据,而这次是用 EL 表达式和 JSTL 表达式获取数据,所以起初不太熟练,不过在编写了多个页面之后就熟悉了这两种表达式的使用。

但是现在自己对于 dao 层和 service 层的理解还不够深刻,所以一些方法的位置不太合理。以前大多是用 form 表单传输数据,现在在编写代码过程中多处运用了 AJAX 传输数据,体会到了 AJAX 传输数据的优势,但是对 JSON 的理解还不够深刻,仅仅达到了能用的程度,所以仍然需要继续认真学习。

在项目刚开始编写的时候,因为项目要频繁对数据库中的数据进行增删改查的操作,所以我创建了一些数据访问的基础类,这样确实减少了一些代码。但是显然我的基础类代码写的还不够精妙,因为在后面的一些复杂的数据库操作中,编写的基础类不能够满足我的需求,如多条件模糊查询、批量删除操作,这些对数据访问的操作需要我多次编写几乎相同的代码,所以显然这些操作可以精简在一个方法里面。

通过实际的项目开发让我认识到了我的许多不足,设计到的知识有 AJAX、MVC 架构,业务逻辑层 service,以及编写项目初期的整体合理的规划从而能够写出一个精简的项目,这些知识都是我所不了解的,实践出真知,我也需要继续去编写更多的项目去增长自己的知识和专业水平。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值