信息管理系统.0.1

教师信息管理系统

查询

上次写完了前端+管理员登录功能,今天完成了查看教师信息&对姓名模糊搜索的功能

这是数据库里的三个表:
这里写图片描述

涉及到查询的几个基本文件是:

  1. query.jsp :前端
  2. ServletQuery :与服务器的接口
  3. Teacher.java :业务逻辑层
  4. DBTeacher.java :与数据库的接口

前端代码和上次写的差不多,就是在底下新加了一个textarea 用来显示查询的结果。
界面长这样:
查询界面
嘛虽然很丑但我们又不是搞前端的,重要的还是把功能给实现了对不对。
贴一下前端代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*, java.util.*, java.sql.*, business.*"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询</title>
<link href="common.css" rel="stylesheet" type=text/css>
<style type="text/css">
.main2 {
    height: 105px;
}

.result {
    margin: 106px 0 0 100px;
    height: 225px;
}
</style>
</head>

<body class="body">

    <div class="center2">
        <h2>查询</h2>
        <div class="menu2">
            <p>
                <a href="login.jsp">登录</a>
            <p />
            <p>
                <a>查询</a>
            <p />
            <p>
                <a href="home.html">返回</a>
            <p />
        </div>
        <div class="main2">
            <form action="query" method="post">
                <p>
                    姓名: <input type="text" name="TName" /><br />
                </p>
                <input type="submit" value="查看" name="view"> <input
                    type="submit" value="搜索" name="search" />
            </form>
        </div>
        <div class="result">
            <textarea rows="20" cols="45">
            <%
                if (request.getAttribute("result") != null) {
                    List<Teacher> teacher = (List<Teacher>) request.getAttribute("result");
                    //if (teacher != null) {
                    for (Teacher x : teacher) {
                        out.println(" ");
                        //out.println("id: " + teacher.getId());
                        out.println("姓名: " + x.getName());
                        out.println("院: " + x.getDepfather());
                        out.println("系: " + x.getDepname());
                        //out.println("dep: " + teacher.getDep());
                        out.println("职称: " + x.getTitle());
                        out.println("电话: " + x.getPhone());
                        out.println("办公地址: " + x.getAddress());
                        out.println("邮箱: " + x.getEmail());
                    }
                    //} else {
                    /* out.println(" ");
                    out.println("对不起,没有这名教师的信息"); */
                    //}
                } else if (request.getAttribute("resultAll") != null) {
                    List<Teacher> teachers = (List<Teacher>) request.getAttribute("resultAll");
                    for (Teacher x : teachers) {
                        out.println(" ");
                        //out.println("id: " + teacher.getId());
                        out.println("姓名: " + x.getName());
                        out.println("院: " + x.getDepfather());
                        out.println("系: " + x.getDepname());
                        //out.println("dep: " + teacher.getDep());
                        out.println("职称: " + x.getTitle());
                        out.println("电话: " + x.getPhone());
                        out.println("办公地址: " + x.getAddress());
                        out.println("邮箱: " + x.getEmail());
                    }
                } else {
                    out.println(" ");
                    out.println("对不起,没有这名教师的信息");
                }
            %>
            </textarea>
        </div>
    </div>
</body>
</html>

其中的css 样式写在common.css 里面了,主要就是设置了一下div 的位置和背景色,没什么,就不贴了。
前端最主要的部分是一个表单,点击查看搜索后, 表单把数据发送给服务器,然后由ServletQuery.java 从服务器上把数据拿下来,处理好后再传给后端。

贴一下ServeltQuery.java 的代码:

package servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import business.Teacher;

/**
 * Servlet implementation class ServletQuery
 */
@WebServlet("/query")
public class ServletQuery extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Teacher teacher = new Teacher();
        request.setCharacterEncoding("UTF-8");
        if (request.getParameter("search") != null) {//用户点击了搜索
            String name = request.getParameter("TName");
            List<Teacher> teachers = teacher.search(name);
            /*for(Teacher x: teachers){
                System.out.println(x.getName());
                System.out.println(x.getDepfather());
                System.out.println(x.getDepname());
            }*/
            request.setAttribute("result", teachers);
        }
        if (request.getParameter("view") != null) {//用户点击了查看
            List<Teacher> allName = teacher.getAll();
            request.setAttribute("resultAll", allName);
        }
        request.getRequestDispatcher("/query.jsp").forward(request, response);
    }

}

可以看到用request.getParameter 方法可以将数据从服务器上拿下来,在这里判断一下究竟用户是点击了查看还是搜索,然后二者分别调用不同的方法,Teacher 对象的两个方法
List<Teacher> search( String name) :通过关键字模糊搜索数据库中符合条件的条目,并返回一个TeacherList
List<Teacher> getAll() :找到数据库中所有的条目并返回一个TeacherList
调用这两个方法之后将结果setAttribute 然后传回给前端(话说这个setAttribute 虽然我能用但也没太搞清楚它是干嘛的

贴一下Teacher.java

package business;

import java.util.List;

import database.DBTeacher;

public class Teacher {
    int id;
    String name;
    int dep;
    String title;
    String phone;
    String address;
    String email;
    String depname;
    String depfather;

    public Teacher() {

    }

    public Teacher(String name, int dep, String title, String phone, String address, String email, String depname,
            String depfather) {
        super();
        this.name = name;
        this.dep = dep;
        this.title = title;
        this.phone = phone;
        this.address = address;
        this.email = email;
        this.depname = depname;
        this.depfather = depfather;
    }

    public String getDepname() {
        return depname;
    }

    public void setDepname(String depname) {
        this.depname = depname;
    }

    public String getDepfather() {
        return depfather;
    }

    public void setDepfather(String depfather) {
        this.depfather = depfather;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getDep() {
        return dep;
    }

    public void setDep(int dep) {
        this.dep = dep;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List<Teacher> search(String name) {
        DBTeacher dbteacher = new DBTeacher();
        List<Teacher> teacher = dbteacher.getIfo(name);
        return teacher;
    }

    public boolean add(String name, String deptname, String title, String phone, String address, String email){
        boolean result = false;
        DBTeacher teacher = new DBTeacher();
        int deptId = teacher.getDeptId(deptname);
        result = teacher.insert(name, deptId, title, phone, address, email);
        return result;
    }

    public boolean delete(String name, String deptname, String title, String phone, String address, String email) {
        boolean result = false;
        DBTeacher teacher = new DBTeacher();
        int deptId = teacher.getDeptId(deptname);
        //System.out.println("deptId:" + deptId);
        result = teacher.delete(name, deptId, title, phone, address, email);
        return result;
    }

    public boolean update(String name, String deptname, String title, String phone, String address, String email,
            String newname, String newdeptname, String newtitle, String newphone, String newaddress, String newemail) {
        boolean flag = false;
        DBTeacher teacher = new DBTeacher();
        int deptId = teacher.getDeptId(deptname);
        int newDeptId = deptId;
        if(newdeptname.length() == 0)
            newDeptId = deptId;
        else
            newDeptId = teacher.getDeptId(newdeptname);
        flag = teacher.update(name, deptId, title, phone, address, email, newname, newDeptId, newtitle, newphone, newaddress, newemail);
        return flag;
    }

    public List<Teacher> getAll() {
        DBTeacher teacher = new DBTeacher();
        List<Teacher> teachers = teacher.getAll();
        return teachers;
    }
}

里面很多方法今天没讲到,是针对后面管理员的增删改功能写的,其实这个类在这个项目里毫无必要…不过我习惯这么写了,嫌麻烦的话也可以直接在servlet里调用和数据库交互的类。
数据库就不多说啦,反正就是写sql然后执行嘛,直接贴代码:

package database;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import business.Teacher;

public class DBTeacher {
    public List<Teacher> getIfo(String name) {
        //System.out.println("dbteacher:in getinfo");
        // Query query = new Query();//TODO
        List<Teacher> teachers = new ArrayList();
        DBConnect db = new DBConnect();
        Connection conn = db.connect();
        PreparedStatement pstmt;
        // String sql = "select * from Teachers where TName = ?";
        String sql = "select * from Teachers where TName like ?";
        ResultSet result;
        try {
            //System.out.println("in try");
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setString(1, "%" + name + "%");
            result = pstmt.executeQuery();
            while (result.next()) {
                //System.out.println("in while");
                Teacher teacher = new Teacher();
                teacher.setId(result.getInt(1));
                teacher.setName(result.getString(2));
                teacher.setDep(result.getInt(3));
                teacher.setTitle(result.getString(4));
                teacher.setPhone(result.getString(5));
                teacher.setAddress(result.getString(6));
                teacher.setEmail(result.getString(7));
                teacher.setDepname(this.getDept(teacher.getDep()));
                teacher.setDepfather(this.getDept(this.getFatherId(teacher.getDep())));
                teachers.add(teacher);
                //System.out.println(teacher.getName());
            }
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("in dbteacher: getinfo fail");
            e.printStackTrace();
        }
        return teachers;
    }

    public int getFatherId(int id) {
        // System.out.println("in getfatherid : id :" + id);
        // TODO Auto-generated method stub
        int fatherId = 0;
        DBConnect db = new DBConnect();
        Connection conn = db.connect();
        PreparedStatement pstmt = null;
        ResultSet result = null;
        String sql = "select FatherId from Dept where DeptId = ?";
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setInt(1, id);
            result = pstmt.executeQuery();
            if (result.next()) {
                fatherId = result.getInt("FatherId");
                // System.out.println("in getfatherid:" + fatherId);
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("in dbteacher: get father id fail");
        }
        return fatherId;
    }

    public String getDept(int id) {
        String name = null;
        DBConnect db = new DBConnect();
        Connection conn = db.connect();
        PreparedStatement pstmt = null;
        String sql = "select DeptName from Dept where DeptId = ?";
        ResultSet result = null;
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setInt(1, id);
            result = pstmt.executeQuery();
            if (result.next()) {
                name = result.getString(1);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("in dbteacher:get deptname fail");
            e.printStackTrace();
        }
        return name;
    }

    public int getDeptId(String deptname) {
        int deptId = 0;
        DBConnect db = new DBConnect();
        Connection conn = db.connect();
        PreparedStatement pstmt = null;
        ResultSet result = null;
        String sql = "select DeptId from Dept where DeptName = ?";
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setString(1, deptname);
            result = pstmt.executeQuery();
            if (result.next())
                deptId = result.getInt(1);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("in dbteacehr: get deptid fail");
            e.printStackTrace();
        }
        return deptId;
    }

    public boolean insert(String name, int deptId, String title, String phone, String address, String email) {
        boolean flag = false;
        DBConnect db = new DBConnect();
        Connection conn = db.connect();
        PreparedStatement pstmt = null;
        int result = 0;
        String sql = "insert into Teachers values(?, ?, ?, ?, ?, ?)";
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setString(1, name);
            pstmt.setInt(2, deptId);
            pstmt.setString(3, title);
            pstmt.setString(4, phone);
            pstmt.setString(5, address);
            pstmt.setString(6, email);
            result = pstmt.executeUpdate();
            flag = true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("in dbteacher: insert fail");
            e.printStackTrace();
        }

        return flag;
    }

    public boolean delete(String name, int deptId, String title, String phone, String address, String email) {
        // System.out.println("in dbdelete");
        boolean flag = false;
        DBConnect db = new DBConnect();
        Connection conn = db.connect();
        PreparedStatement pstmt = null;
        int result = 0;
        String sql = "delete from Teachers where TName = ? and" + " TDeptId = ? and" + " TTitle = ? and"
                + " TPhone = ? and" + " TAddress = ? and" + " TEmail = ?";
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setString(1, name);
            pstmt.setInt(2, deptId);
            pstmt.setString(3, title);
            pstmt.setString(4, phone);
            pstmt.setString(5, address);
            pstmt.setString(6, email);
            result = pstmt.executeUpdate();
            flag = true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("in dbteacher: delete fail");
            e.printStackTrace();
        }

        return flag;
    }

    public boolean update(String name, int deptId, String title, String phone, String address, String email,
            String newname, int newDeptId, String newtitle, String newphone, String newaddress, String newemail) {
        // TODO:要考虑左半边表也会出现null的情况
        if (newname.length() == 0) {
            newname = name;
        }
        if (newtitle.length() == 0) {
            newtitle = title;
        }
        if (newphone.length() == 0) {
            newphone = phone;
        }
        if (newaddress.length() == 0) {
            newaddress = address;
        }
        if (newemail.length() == 0) {
            newemail = email;
        }
        /*
         * System.out.println("newname:" + newname);
         * System.out.println("newtitle:" + newtitle);
         * System.out.println("newphone:" + newphone);
         * System.out.println("newemail:" + newemail);
         */
        System.out.println("indb--------------------");
        System.out.println(name);
        System.out.println(deptId);
        System.out.println(title);
        System.out.println(phone);
        System.out.println(address);
        System.out.println(email);
        System.out.println(newname);
        System.out.println(newDeptId);
        System.out.println(newtitle);
        System.out.println(newphone);
        System.out.println(newaddress);
        System.out.println(newemail);
        boolean flag = false;
        DBConnect db = new DBConnect();
        Connection conn = db.connect();
        PreparedStatement pstmt = null;
        int result = 0;
        String sql = "update Teachers " + "set TName = ?, " + "TDeptId = ?, " + "TTitle = ?, " + "TPhone = ?, "
                + "TAddress = ?, " + "TEmail = ? " + "where TName = ? and " + "TDeptId = ? and " + "TTitle = ? and "
                + "TPhone = ? and " + "TAddress = ? and " + "TEmail = ?";
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setString(7, name);
            pstmt.setInt(8, deptId);
            pstmt.setString(9, title);
            pstmt.setString(10, phone);
            pstmt.setString(11, address);
            pstmt.setString(12, email);

            pstmt.setString(1, newname);
            pstmt.setInt(2, newDeptId);
            pstmt.setString(3, newtitle);
            pstmt.setString(4, newphone);
            pstmt.setString(5, newaddress);
            pstmt.setString(6, newemail);

            result = pstmt.executeUpdate();
            flag = true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("in dbteacher: updatefail");
            e.printStackTrace();
        }

        return flag;
    }

    public List<Teacher> getAll() {
        List<Teacher> teachers = new ArrayList();
        DBConnect db = new DBConnect();
        Connection conn = db.connect();
        PreparedStatement pstmt = null;
        ResultSet result = null;
        String sql = "select * from Teachers";
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            result = pstmt.executeQuery();
            while (result.next()) {
                Teacher teacher = new Teacher();
                teacher.setId(result.getInt(1));
                teacher.setName(result.getString(2));
                teacher.setDep(result.getInt(3));
                teacher.setTitle(result.getString(4));
                teacher.setPhone(result.getString(5));
                teacher.setAddress(result.getString(6));
                teacher.setEmail(result.getString(7));
                teacher.setDepname(this.getDept(teacher.getDep()));
                teacher.setDepfather(this.getDept(this.getFatherId(teacher.getDep())));
                teachers.add(teacher);
            }
        } catch (SQLException e) {
            System.out.println("in dbteacher: getall fail");
            e.printStackTrace();
        }
        return teachers;
    }
}

把增删改也大概写了一下,但是还有很多疏漏的地方,以及!每次都忘记断开连接…这个习惯很不好!

总结一下这次写查询吧。

  1. 一开始写的时候,没有写DBDept 类,所以和院系有关的查询也直接放在DBTeacher 里了,现在写到一半发现必须要写DBDept 类,改起来就有点痛苦,所以说,在敲代码之前,一定一定要先设计,把架构定下来,并且反复斟酌,才不会造成现在这种局面。
  2. 本来会写业务逻辑层就是为了把所有逻辑都放在业务逻辑层,数据库只写最基本的增删差改,而不用管逻辑的问题,但是写着写着就把这件事给忘了!想getInfo 里又调用了同类里的其他方法,这部分应该在业务逻辑层处理,而不应该写在数据库层,唉,下一个作业一定要严格一点。

    暂时就只想到这么多,明天应该在写算法了,可能周四再接着写吧。

采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值