信息管理系统.0.1
2016-05-25 00:15
239 查看
教师信息管理系统
查询
上次写完了前端+管理员登录功能,今天完成了查看教师信息&对姓名模糊搜索的功能这是数据库里的三个表:
涉及到查询的几个基本文件是:
query.jsp:前端
ServletQuery:与服务器的接口
Teacher.java:业务逻辑层
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):通过关键字模糊搜索数据库中符合条件的条目,并返回一个
Teacher类
List
List<Teacher> getAll():找到数据库中所有的条目并返回一个
Teacher类
List
调用这两个方法之后将结果
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; } }
把增删改也大概写了一下,但是还有很多疏漏的地方,以及!每次都忘记断开连接…这个习惯很不好!
总结一下这次写查询吧。
一开始写的时候,没有写
DBDept类,所以和院系有关的查询也直接放在
DBTeacher里了,现在写到一半发现必须要写
DBDept类,改起来就有点痛苦,所以说,在敲代码之前,一定一定要先设计,把架构定下来,并且反复斟酌,才不会造成现在这种局面。
本来会写业务逻辑层就是为了把所有逻辑都放在业务逻辑层,数据库只写最基本的增删差改,而不用管逻辑的问题,但是写着写着就把这件事给忘了!想
getInfo里又调用了同类里的其他方法,这部分应该在业务逻辑层处理,而不应该写在数据库层,唉,下一个作业一定要严格一点。
暂时就只想到这么多,明天应该在写算法了,可能周四再接着写吧。
相关文章推荐
- 偏好设置存储
- 训练3 习题12
- 《图解HTTP》学习笔记(六)-HTTP首部
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- 基于事件的开源网络库—libevent:应用介绍
- 计算机作品二等奖——信息学院请假系统
- (CV,Math)仿射几何
- Java基础回顾 : RuntimeException和Exception的区别
- Python源码剖析
- 145_RadioGroup结合ViewPager
- bzoj2434【NOI2011】阿狸的打字机
- 数组去重
- 144_ViewPager实现页面展示
- 遍历json中的list或者array数组对象
- c++作业6
- 一、初识java
- WinForm 遍历用户控件里CheckBox
- leetcode-101
- ORACLE 里面的LIKE 语句的详细作用格式什么呀
- Git 操作标签的一些命令