目錄:
一妆棒、 前提與摘要
二川抡、 課程設(shè)計(jì)的目的和要求
三、 系統(tǒng)分析與設(shè)計(jì)
四边臼、 實(shí)現(xiàn)與測(cè)試
五哄尔、 主要源代碼
六、 遇到的問題和解決方法
七柠并、 存在的不足和改進(jìn)的思路
『18.12.28更新』
文末更新下載方式岭接,供參考學(xué)習(xí)交流
『18.12.19更新』
優(yōu)化界面;
優(yōu)化平均成績(jī)和總成績(jī)獲取方式臼予;
優(yōu)化主頁跳轉(zhuǎn)方式鸣戴;
新增回到頂部小火箭;
——————————————————————————————————————————————
一粘拾、前提與摘要
學(xué)生成績(jī)管理系統(tǒng)是一個(gè)教育單位不可缺少的部分,它的內(nèi)容對(duì)于學(xué)校的教師窄锅、學(xué)生和管理者來說都至關(guān)重要。本論文敘述到的學(xué)生成績(jī)管理系統(tǒng)是用JSP網(wǎng)頁編程+SQL查詢語言實(shí)現(xiàn)的缰雇。重點(diǎn)介紹了學(xué)生成績(jī)管理系統(tǒng)的實(shí)現(xiàn)過程:包括系統(tǒng)分析與設(shè)計(jì)入偷、數(shù)據(jù)庫設(shè)計(jì)、系統(tǒng)功能設(shè)計(jì)械哟、系統(tǒng)實(shí)現(xiàn)疏之、系統(tǒng)測(cè)試等。本系統(tǒng)主要功能有教師信息管理暇咆、學(xué)生信息管理锋爪、成績(jī)管理,包括功能需求設(shè)計(jì)糯崎、數(shù)據(jù)庫設(shè)計(jì)等內(nèi)容几缭。
現(xiàn)在的社會(huì)日新月異,發(fā)展的非澄帜兀快年栓。學(xué)校的發(fā)展也在加快,老師和學(xué)生做為學(xué)校的最主要的管理對(duì)象薄霜,老師和學(xué)生的信息管理系統(tǒng)就成了學(xué)校信息化管理系統(tǒng)中不可缺少的部分某抓,它的內(nèi)容對(duì)于學(xué)校的組織管理至關(guān)重要纸兔。但一直以來人們使用傳統(tǒng)人工的方式進(jìn)行學(xué)生的檔案管理,這種管理方式存在著許多缺點(diǎn),如:效率低,容易出錯(cuò)否副,格式不規(guī)范汉矿。另外時(shí)間一長(zhǎng),不容易進(jìn)行統(tǒng)計(jì)和分析备禀。
隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟洲拇,它已進(jìn)入人類社會(huì)的各個(gè)領(lǐng)域并發(fā)揮著越來越重要的作用。作為計(jì)算機(jī)應(yīng)用的一部分曲尸,使用計(jì)算機(jī)對(duì)學(xué)生檔案進(jìn)行管理赋续,具有手工管理所無法比擬的優(yōu)點(diǎn)。例如:檢索迅速另患、查找方便纽乱、可靠性高、存儲(chǔ)量大昆箕、壽命長(zhǎng)鸦列、成本低等。這些優(yōu)點(diǎn)能夠極大地提高學(xué)校學(xué)生檔案管理的效率鹏倘。因此薯嗤,開發(fā)這樣一套管理軟件成為很有必要的事情。而且只要軟件的設(shè)計(jì)合理第股,可以為學(xué)校提供合理的管理模式应民。
摘要:學(xué)生成績(jī)管理系統(tǒng)、JSP網(wǎng)頁編程夕吻、SQL
二诲锹、課程設(shè)計(jì)的目的和要求
2.1 目的:
該系統(tǒng)的具體任務(wù)就是設(shè)計(jì)一個(gè)學(xué)生成績(jī)的數(shù)據(jù)庫管理系統(tǒng),由計(jì)算機(jī)來代替人工執(zhí)
行一系列諸如對(duì)教師涉馅、學(xué)生信息以及學(xué)生成績(jī)的增加归园、刪除、查詢和修改的處理操作稚矿,以
方便對(duì)以上信息的管理組織工作庸诱。
建立學(xué)生成績(jī)管理系統(tǒng),采用計(jì)算機(jī)對(duì)學(xué)生成績(jī)進(jìn)行管理晤揣,進(jìn)一步提高辦學(xué)效益和現(xiàn)
代化水平桥爽。幫助廣大教師提高工作效率,實(shí)現(xiàn)學(xué)生成績(jī)信息管理工作流程的系統(tǒng)化昧识、規(guī)范
化和自動(dòng)化
2.2 要求:
網(wǎng)上學(xué)生成績(jī)管理系統(tǒng)
實(shí)現(xiàn)學(xué)生信息的輸入
實(shí)現(xiàn)課程的輸入
實(shí)現(xiàn)成績(jī)的輸入
實(shí)現(xiàn)成績(jī)的查詢(按照姓名钠四、學(xué)號(hào)等信息查詢)
實(shí)現(xiàn)成績(jī)的統(tǒng)計(jì)(平均分的統(tǒng)計(jì)、總成績(jī)的統(tǒng)計(jì))
三跪楞、 系統(tǒng)分析與設(shè)計(jì)
3.1 數(shù)據(jù)庫設(shè)計(jì)
學(xué)生表的設(shè)計(jì):(學(xué)號(hào)缀去,姓名侣灶,密碼,性別缕碎,家庭住址褥影,成績(jī),備注)
管理員表的設(shè)計(jì):(id咏雌,名字凡怎,密碼)
3.2 業(yè)務(wù)流程設(shè)計(jì)
3.3 用例圖設(shè)計(jì)
3.4 類與頁面邏輯對(duì)應(yīng)關(guān)系圖設(shè)計(jì)
3.5 項(xiàng)目截圖
四、 實(shí)現(xiàn)與測(cè)試
4.1 實(shí)現(xiàn)步驟:
4.1.1 配置數(shù)據(jù)庫
1??首先在mysql內(nèi)建立連接并記住端口號(hào)和數(shù)據(jù)庫用戶名和賬號(hào)
2??創(chuàng)建數(shù)據(jù)庫test(注:本項(xiàng)目只用到了stu和mgr兩個(gè)表赊抖,user是測(cè)試用)
3??輸入以下代碼創(chuàng)建學(xué)生表stu:(同理創(chuàng)建管理員表mgr栅贴,其中insert values的值自己定義)
use test;
CREATE TABLE `stu` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`pwd` varchar(255) NOT NULL,
`sex` varchar(255) NOT NULL,
`home` varchar(255) NOT NULL,
`grades` varchar(255),
`info` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `stu` VALUES ('1', 'stu1', '123', 'men', 'here', '0','i am the data-manerger');
INSERT INTO `stu` VALUES ('2', 'stu2','123','women','there','100','she is a good girl');
4.1.2 在webroot下的WEB-INF下的lib中導(dǎo)入mysql的驅(qū)動(dòng)jar包
4.1.2 類的編寫
創(chuàng)建一下五個(gè)類包:
五個(gè)類包作用:
①dao:數(shù)據(jù)庫操作的對(duì)象,用于使相關(guān)數(shù)據(jù)庫操作更簡(jiǎn)單(有關(guān)Dao模式的文章https://blog.csdn.net/dragon_dai_2017/article/details/76937553)
②entity:相當(dāng)于Javabean熏迹,用于抽象數(shù)據(jù)結(jié)構(gòu)
③filter:過濾器,用于過濾字符(當(dāng)然也可以自己編寫過濾IP等操作凝赛,詳見:http://www.reibang.com/p/1cf4ab2f7e21)
④servlet:業(yè)務(wù)邏輯實(shí)體類注暗,用于執(zhí)行對(duì)應(yīng)JSP頁面的業(yè)務(wù)邏輯,完成MVC中C的相關(guān)操作
⑤util:用于連接數(shù)據(jù)庫(相關(guān)連接數(shù)據(jù)庫的操作詳見https://blog.csdn.net/yanglong_blog_/article/details/73733176)
在五個(gè)類包中編寫相關(guān)代碼:
1??dao包中:
創(chuàng)建一個(gè)接口類 StuDao.java墓猎,用于規(guī)范化數(shù)據(jù)庫相關(guān)操作
//StuDao.java
package com.dao;
import java.util.List;
import com.entity.Stu;
public interface StuDao {
//1.注冊(cè)
public boolean register(Stu stu);
//2.登錄
public boolean stulogin(String name,String pwd);
public boolean mgrlogin(String name,String pwd);
//3.返回學(xué)生信息集合
public List<Stu> getStuAll();
//4.根據(jù)用戶名返回某個(gè)用戶信息集合
public List<Stu> getStuByName(String namestr);
//5.根據(jù)學(xué)號(hào)返回某個(gè)用戶信息集合
public List<Stu> getStuById(String IdStr);
//6.根據(jù)id刪除用戶
public boolean delete(int id) ;
//7.更新用戶信息
public boolean update(int id,String name, String pwd,String sex, String home, String grades,String info);
//8.求成績(jī)總和
public int sum();
//9.求成績(jī)平均
public int avg();
}
再創(chuàng)建StuDao的實(shí)現(xiàn)類StuDaoImpl.java(自動(dòng)忽略我的相關(guān)測(cè)試用的輸出語句哈哈)
package com.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.entity.Stu;
import com.util.DBconn;
public class StuDaoImpl implements StuDao{
//1.注冊(cè)
public boolean register(Stu stu) {
boolean flag = false;
DBconn.init();
int i =DBconn.addUpdDel("insert into stu(name,pwd,sex,home,grades,info) " +
"values('"+stu.getName()+"','"+stu.getPwd()+"','"+stu.getSex()+"','"+stu.getHome()+"','"+stu.getGrades()+"','"+stu.getInfo()+"')");
if(i>0){
flag = true;
}
DBconn.closeConn();
return flag;
}
//2.登錄(學(xué)生與管理員的區(qū)別是查找的表不一樣)
//(學(xué)生)
public boolean stulogin(String name, String pwd) {
boolean flag = false;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu where name='"+name+"' and pwd='"+pwd+"'");
while(rs.next()){
if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
flag = true;
}
}
DBconn.closeConn();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
//(管理員)
public boolean mgrlogin(String name, String pwd) {
boolean flag = false;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from mgr where name='"+name+"' and pwd='"+pwd+"'");
while(rs.next()){
if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
flag = true;
}
}
DBconn.closeConn();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
//3.返回用戶信息集合
public List<Stu> getStuAll() {
List<Stu> list = new ArrayList<Stu>();
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu");
while(rs.next()){
Stu stu = new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setPwd(rs.getString("pwd"));
stu.setSex(rs.getString("sex"));
stu.setHome(rs.getString("home"));
stu.setGrades(rs.getString("grades"));
stu.setInfo(rs.getString("info"));
list.add(stu);
}
DBconn.closeConn();
return list;
} catch (SQLException e) {
e.printStackTrace();
System.out.print("錯(cuò)誤");
}
return null;
}
//4.根據(jù)用戶名返回某個(gè)用戶信息集合
public List<Stu> getStuByName(String namestr)
{
List<Stu> list = new ArrayList<Stu>();
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu where name='"+namestr+"'");
while(rs.next()){
Stu stu = new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setPwd(rs.getString("pwd"));
stu.setSex(rs.getString("sex"));
stu.setHome(rs.getString("home"));
stu.setGrades(rs.getString("grades"));
stu.setInfo(rs.getString("info"));
list.add(stu);
}
//DBconn.closeConn();
return list;
} catch (SQLException e) {
System.out.println("查詢的用戶可能不存在捆昏!");
e.printStackTrace();
}finally{
DBconn.closeConn();
}
return null;
}
//5.根據(jù)學(xué)號(hào)返回某個(gè)用戶信息集合
public List<Stu> getStuById(String IdStr)
{
List<Stu> list = new ArrayList<Stu>();
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu where id='"+IdStr+"'");
while(rs.next()){
Stu stu = new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setPwd(rs.getString("pwd"));
stu.setSex(rs.getString("sex"));
stu.setHome(rs.getString("home"));
stu.setGrades(rs.getString("grades"));
stu.setInfo(rs.getString("info"));
list.add(stu);
}
DBconn.closeConn();
return list;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//6.更新用戶信息
public boolean update(int id,String name, String pwd,String sex, String home, String grades,String info) {
boolean flag = false;
DBconn.init();
String sql ="update stu set name ='"+name
+"' , pwd ='"+pwd
+"' , sex ='"+sex
+"' , home ='"+home
+"' , grades ='"+grades
+"' , info ='"+info+"' where id = "+id;
int i =DBconn.addUpdDel(sql);
if(i>0){
flag = true;
}
DBconn.closeConn();
return flag;
}
//7.根據(jù)id刪除用戶
public boolean delete(int id) {
boolean flag = false;
DBconn.init();
String sql = "delete from stu where id="+id;
int i =DBconn.addUpdDel(sql);
if(i>0){
flag = true;
}
DBconn.closeConn();
return flag;
}
//8.求成績(jī)總和
public int sum(){
int sum = 0;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("SELECT SUM(grades) FROM stu");
while(rs.next()){
System.out.print("進(jìn)來了1");
if(rs.getInt("SUM(grades)")!=0){
System.out.print("進(jìn)來了2");
sum = rs.getInt("SUM(grades)");
}
}
DBconn.closeConn();
return sum;
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
//9.求成績(jī)平均
public int avg(){
int avg = 0;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("SELECT AVG(grades) FROM stu");
while(rs.next()){
System.out.print("進(jìn)來了1");
if(rs.getInt("AVG(grades)")!=0){
System.out.print("進(jìn)來了2");
avg = rs.getInt("AVG(grades)");
}
}
DBconn.closeConn();
return avg;
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
}
②entity中:
創(chuàng)建Stu.java(功能就是javabean)
package com.entity;
public class Stu {
private int id;
private String name;
private String pwd;
private String sex;
private String home;
private String info;
private String grades;
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 String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getHome() {
return home;
}
public void setHome(String home) {
this.home = home;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getGrades() {
return grades;
}
public void setGrades(String grades) {
this.grades = grades;
}
}
③filter中:
創(chuàng)建過濾器EncodingFilter
//字符編碼的過濾器
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter{
public EncodingFilter(){
System.out.println("過濾器構(gòu)造");
}
public void destroy() {
System.out.println("過濾器銷毀");
}
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8"); //將編碼改為utf-8
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
System.out.println("過濾器初始化");
}
}
④servlet中創(chuàng)建一下類:
AddupServlet(用于錄入學(xué)生信息)
package com.servlet;
import java.io.IOException;
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 com.dao.StuDao;
import com.dao.StuDaoImpl;
import com.entity.Stu;
/**
* Servlet implementation class AddupServlet
*/
@WebServlet("/AddupServlet")
public class AddupServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name"); //獲取jsp頁面?zhèn)鬟^來的參數(shù)
String pwd = request.getParameter("pwd");
String sex = request.getParameter("sex");
String home = request.getParameter("home");
String grades = request.getParameter("grades");
String info = request.getParameter("info");
Stu stu = new Stu(); //實(shí)例化一個(gè)對(duì)象,組裝屬性
stu.setName(name);
stu.setPwd(pwd);
stu.setSex(sex);
stu.setHome(home);
stu.setGrades(grades);
stu.setInfo(info);
StuDao ud = new StuDaoImpl();
if(ud.register(stu)){
request.setAttribute("username", name); //向request域中放置參數(shù)
request.setAttribute("message", "錄入成功");
request.getRequestDispatcher("/mgrsuccess.jsp").forward(request, response); //轉(zhuǎn)發(fā)到登錄頁面
}else{
response.sendRedirect("error.jsp");//重定向到首頁
}
}
}
DeleteServlet(在管理所有學(xué)生的界面執(zhí)行刪除某個(gè)學(xué)生記錄的操作)
package com.servlet;
import java.io.IOException;
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 com.dao.StuDao;
import com.dao.StuDaoImpl;
/**
* Servlet implementation class UpdateServlet
*/
@WebServlet("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = request.getParameter("id");
int userId = Integer.parseInt(id);
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
String sex = request.getParameter("sex");
String home = request.getParameter("home");
String grades = request.getParameter("grades");
String info = request.getParameter("info");
System.out.println("------------------------------------"+userId);
StuDao ud = new StuDaoImpl();//數(shù)據(jù)庫的操作對(duì)象
if(ud.update(userId, name, pwd, sex, home, grades,info)){
request.setAttribute("message", "更新成功");
request.getRequestDispatcher("/SearchallServlet").forward(request, response);
}else{
response.sendRedirect("error.jsp");
}
}
}
UpdateServlet(在管理所有學(xué)生的界面執(zhí)行更新某個(gè)學(xué)生記錄的操作)
package com.servlet;
import java.io.IOException;
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 com.dao.StuDao;
import com.dao.StuDaoImpl;
/**
* Servlet implementation class UpdateServlet
*/
@WebServlet("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = request.getParameter("id");
int userId = Integer.parseInt(id);
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
String sex = request.getParameter("sex");
String home = request.getParameter("home");
String grades = request.getParameter("grades");
String info = request.getParameter("info");
System.out.println("------------------------------------"+userId);
StuDao ud = new StuDaoImpl();//數(shù)據(jù)庫的操作對(duì)象
if(ud.update(userId, name, pwd, sex, home, grades,info)){
request.setAttribute("message", "更新成功");
request.getRequestDispatcher("/SearchallServlet").forward(request, response);
}else{
response.sendRedirect("error.jsp");
}
}
}
FindByIdServlet(通過學(xué)生Id來查找學(xué)生相關(guān)信息)
package com.servlet;
import java.io.IOException;
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 com.dao.StuDao;
import com.dao.StuDaoImpl;
/**
* Servlet implementation class FindByIdServlet
*/
@WebServlet("/FindByIdServlet")
public class FindByIdServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public FindByIdServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String id = request.getParameter("id");
StuDao ud = new StuDaoImpl();
if(id!= "") {
if(ud.getStuById(id).isEmpty())
{
System.out.println("查詢到的為空值");
response.sendRedirect("error.jsp");
}else
{
request.setAttribute("findlist", ud.getStuById(id)); //向request域中放置參數(shù)
request.setAttribute("message", " 查找成功");
request.getRequestDispatcher("/findlist.jsp").forward(request, response); //轉(zhuǎn)發(fā)到登錄頁面
}
}else {
response.sendRedirect("error.jsp");
}
}
}
FindServlet(通過學(xué)生姓名查找相關(guān)信息)
package com.servlet;
import java.io.IOException;
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 com.dao.StuDao;
import com.dao.StuDaoImpl;
/**
* Servlet implementation class FindServlet
*/
@WebServlet("/FindServlet")
public class FindServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public FindServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String name = request.getParameter("name");
StuDao ud = new StuDaoImpl();
if(name != "") {
if(ud.getStuByName(name).isEmpty())
{
System.out.println("查詢到的為空值");
response.sendRedirect("error.jsp");
}else
{
request.setAttribute("findlist", ud.getStuByName(name)); //向request域中放置參數(shù)
request.setAttribute("message", " 查找成功");
request.getRequestDispatcher("/findlist.jsp").forward(request, response); //轉(zhuǎn)發(fā)到登錄頁面
}
}else {
response.sendRedirect("error.jsp");
}
}
}
MgrLoginServlet(管理員登錄的業(yè)務(wù)邏輯)
package com.servlet;
import java.io.IOException;
//import java.io.PrintWriter;
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 com.dao.StuDao;
import com.dao.StuDaoImpl;
@WebServlet("/MgrLoginServlet")
//用來實(shí)現(xiàn)對(duì)用戶登錄的操作
public class MgrLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//需要繼承HttpServlet 并重寫doGet doPost方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); //將信息使用doPost方法執(zhí)行 對(duì)應(yīng)jsp頁面中的form表單中的method
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name"); //得到j(luò)sp頁面?zhèn)鬟^來的參數(shù)
String pwd = request.getParameter("pwd");
StuDao ud = new StuDaoImpl();
if(ud.mgrlogin(name, pwd)){
request.setAttribute("message", "歡迎管理員"+name); //向request域中放置信息
request.getRequestDispatcher("/mgrsuccess.jsp").forward(request, response);//轉(zhuǎn)發(fā)到成功頁面
}else{
response.sendRedirect("error.jsp"); //重定向到error頁面
}
}
}
SearchallServlet(管理員管理所有學(xué)生的類)
package com.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 com.dao.StuDao;
import com.dao.StuDaoImpl;
import com.entity.Stu;
/**
* Servlet implementation class SearchallServlet
*/
@WebServlet("/SearchallServlet")
public class SearchallServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
StuDao ud = new StuDaoImpl();//定義數(shù)據(jù)庫操作類的對(duì)象
List<Stu> stuAll = ud.getStuAll();//獲取到所有的對(duì)象并且存儲(chǔ)到list里
request.setAttribute("stuAll", stuAll);
//求和
int sum = ud.sum();
request.setAttribute("sum", sum);
//求平均
int avg = ud.avg();
request.setAttribute("avg", avg);
request.getRequestDispatcher("/mgrall.jsp").forward(request, response);
}
}
StuLoginServlet(學(xué)生登錄的頁面)
package com.servlet;
import java.io.IOException;
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 com.dao.StuDao;
import com.dao.StuDaoImpl;
/**
* Servlet implementation class StuLoginServlet
*/
@WebServlet("/StuLoginServlet")
public class StuLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//需要繼承HttpServlet 并重寫doGet doPost方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); //將信息使用doPost方法執(zhí)行 對(duì)應(yīng)jsp頁面中的form表單中的method
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name"); //得到j(luò)sp頁面?zhèn)鬟^來的參數(shù)
String pwd = request.getParameter("pwd");
StuDao ud = new StuDaoImpl();
if(ud.stulogin(name, pwd)){
request.setAttribute("message", "歡迎學(xué)生用戶"+name); //向request域中放置信息
request.setAttribute("name", name);
request.getRequestDispatcher("/stusuccess.jsp").forward(request, response);//轉(zhuǎn)發(fā)到成功頁面
}else{
response.sendRedirect("error.jsp"); //重定向到error頁面
}
}
}
⑤util包中創(chuàng)建:
DBconn.java(鏈接數(shù)據(jù)庫的方法毙沾,注意其中的用戶名密碼要和你之前配置數(shù)據(jù)庫的要一致)
//數(shù)據(jù)庫連接的類
package com.util;
import java.sql.*;
public class DBconn {
static String url = "jdbc:mysql://localhost:3306/test?useunicuee=true& characterEncoding=utf8";
static String username = "root";
static String password = "363316495";
static Connection conn = null;
static ResultSet rs = null;
static PreparedStatement ps =null;
public static void init(){
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,username,password);
} catch (Exception e) {
System.out.println("init [SQL驅(qū)動(dòng)程序初始化失斊贰!]");
e.printStackTrace();
}
}
public static int addUpdDel(String sql){
int i = 0;
try {
PreparedStatement ps = conn.prepareStatement(sql);
i = ps.executeUpdate();
} catch (SQLException e) {
System.out.println("sql數(shù)據(jù)庫增刪改異常");
e.printStackTrace();
}
return I;
}
public static ResultSet selectSql(String sql){
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery(sql);
} catch (SQLException e) {
System.out.println("sql數(shù)據(jù)庫查詢異常");
e.printStackTrace();
}
return rs;
}
public static void closeConn(){
try {
conn.close();
} catch (SQLException e) {
System.out.println("sql數(shù)據(jù)庫關(guān)閉異常");
e.printStackTrace();
}
}
}
4.1.3 頁面的編寫
addup.jsp (學(xué)生信息錄入)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>學(xué)生信息錄入</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<form action="AddupServlet"method="post" style="padding-top:-700px;">
輸入用戶名:<input name="name" type="text"><br><br>
輸入密碼:<input name="pwd" type="password"><br><br>
選擇性別:<input type="radio"name="sex"value="men"checked>男
<input type="radio"name="sex"value="women">女<br><br>
選擇家鄉(xiāng):
<select name="home">
<option value="ShangHai">ShangHai</option>
<option value="Beijing" selected>Beijing</option>
<option value="ChangSha">ChangSha</option>
</select><br>
輸入成績(jī):<input name="grades" type="text"><br><br>
填寫個(gè)人信息:<br>
<textarea name="info" row="5" cols="30"></textarea><br>
<input type="reset"value="重置"><input type="submit"value="錄入">
</form>
</body>
</html>
error.jsp(錯(cuò)誤頁面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>錯(cuò)誤頁面</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h1>~(~ ̄▽ ̄)~出錯(cuò)啦左胞!請(qǐng)嘗試檢查一下輸入或者頁面邏輯呦</h1>
<a href="Index.jsp">回到首頁</a>
</body>
</html>
findlist.jsp(查找學(xué)生列表)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>查找列表</title>
</head>
<body>
<%-- <h1>${message}</h1> --%>
<table width="200" border="1" cellpadding="0" >
<tr>
<th>ID</th>
<th>姓名</th>
<th>性別</th>
<th>密碼</th>
<th>家鄉(xiāng)</th>
<th>成績(jī)</th>
<th>備注</th>
</tr>
<c:forEach var="U" items="${findlist}" >
<form action="UpdateServlet" method="post">
<tr>
<td><input type="text" value="${U.id}" name="id" ></td>
<td><input type="text" value="${U.name}" name="name"></td>
<td><input type="text" value="${U.sex}" name="sex"></td>
<td><input type="text" value="${U.pwd}" name="pwd"></td>
<td><input type="text" value="${U.home}" name="home"></td>
<td><input type="text" value="${U.grades}" name="grades"></td>
<td><input type="text" value="${U.info}" name="info"></td>
</tr>
</form>
</c:forEach>
</table>
</body>
</html>
index.jsp (主頁入口)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>歡迎登陸zyz的學(xué)生管理系統(tǒng)</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h1>歡迎登陸zyz的學(xué)生管理系統(tǒng)</h1>
<a href="mgrlogin.jsp">管理員登錄</a>
<a href="stulogin.jsp">學(xué)生登錄</a>
</body>
</html>
mgrall.jsp(管理所有學(xué)生表)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>查找列表</title>
</head>
<body>
<%-- <h1>${message}</h1> --%>
<table width="200" border="1" cellpadding="0" >
<tr>
<th>ID</th>
<th>姓名</th>
<th>性別</th>
<th>密碼</th>
<th>家鄉(xiāng)</th>
<th>成績(jī)</th>
<th>備注</th>
</tr>
<c:forEach var="U" items="${findlist}" >
<form action="UpdateServlet" method="post">
<tr>
<td><input type="text" value="${U.id}" name="id" ></td>
<td><input type="text" value="${U.name}" name="name"></td>
<td><input type="text" value="${U.sex}" name="sex"></td>
<td><input type="text" value="${U.pwd}" name="pwd"></td>
<td><input type="text" value="${U.home}" name="home"></td>
<td><input type="text" value="${U.grades}" name="grades"></td>
<td><input type="text" value="${U.info}" name="info"></td>
</tr>
</form>
</c:forEach>
</table>
</body>
</html>
mgrlogin.jsp (管理員登錄界面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>管理員登錄頁面</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h1>管理員登錄頁面</h1>
<form action="MgrLoginServlet" method="post" style="padding-top:-700px;">
用戶名:<input type="text" name="name"value=""><br><br>
密碼: <input type="password" name="pwd"value=""><br><br>
<input type="submit"value="登錄"name="Mgrlogin"><input type="reset"value="重置"><br>
</form>
</body>
</html>
mgrsuccess.jsp(管理員登錄成功后的操作頁面)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>管理員登錄成功</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
${message} <br>
<a href="SearchallServlet">查看所有學(xué)生信息表</a>
<br/>
<a href="addup.jsp">錄入學(xué)生信息</a>
<form action="FindServlet"method="post" style="padding-top:-700px;">
輸入用戶名(按照用戶名查找):<input name="name" type="text"><br><br>
<input type="reset"value="重置"><input type="submit"value="查找">
</form>
<form action="FindByIdServlet"method="post" style="padding-top:-700px;">
輸入Id號(hào)(按照學(xué)號(hào)查找):<input name="id" type="text"><br><br>
<input type="reset"value="重置"><input type="submit"value="查找">
</form>
</body>
</html>
stulogin.jsp(學(xué)生登錄頁面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>學(xué)生登錄頁面</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h1>學(xué)生登錄頁面</h1>
<form action="StuLoginServlet" method="post" style="padding-top:-700px;">
用戶名:<input type="text" name="name"value=""><br><br>
密碼: <input type="password" name="pwd"value=""><br><br>
<input type="submit"value="登錄"name="Stulogin"><input type="reset"value="重置"><br>
</form>
</body>
</html>
stusuccess.jsp(學(xué)生登錄成功后的查找我的成績(jī)頁面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>學(xué)生登錄成功頁面</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h1>學(xué)生登錄成功頁面</h1>
${message} <br>
<%-- ${name} --%>
<%
String name = request.getParameter("name");
request.setAttribute("name", name);
%>
<form action="FindServlet" method="post" style="padding-top:-700px;">
<!-- 定義了一個(gè)隱藏的輸入框 -->
<input type="hidden" name="name" value="${name}"><br>
<input type="submit"value="查找我的成績(jī)"name="Stulogin"><br>
</form>
</body>
</html>
4.2 測(cè)試:
五寇仓、 主要源代碼
詳見四:
其中最重要的是相關(guān)數(shù)據(jù)的操作:(有可能屏幕前的你用的不是Mysql,那么你的sql語句可能能不太一樣烤宙,現(xiàn)在你自己的數(shù)據(jù)庫中試好了再來編寫java代碼)
//1.注冊(cè)
public boolean register(Stu stu) {
boolean flag = false;
DBconn.init();
int i =DBconn.addUpdDel("insert into stu(name,pwd,sex,home,grades,info) " +
"values('"+stu.getName()+"','"+stu.getPwd()+"','"+stu.getSex()+"','"+stu.getHome()+"','"+stu.getGrades()+"','"+stu.getInfo()+"')");
if(i>0){
flag = true;
}
DBconn.closeConn();
return flag;
}
//2.登錄(學(xué)生與管理員的區(qū)別是查找的表不一樣)
//(學(xué)生)
public boolean stulogin(String name, String pwd) {
boolean flag = false;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu where name='"+name+"' and pwd='"+pwd+"'");
while(rs.next()){
if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
flag = true;
}
}
DBconn.closeConn();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
//(管理員)
public boolean mgrlogin(String name, String pwd) {
boolean flag = false;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from mgr where name='"+name+"' and pwd='"+pwd+"'");
while(rs.next()){
if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
flag = true;
}
}
DBconn.closeConn();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
//3.返回用戶信息集合
public List<Stu> getStuAll() {
List<Stu> list = new ArrayList<Stu>();
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu");
while(rs.next()){
Stu stu = new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setPwd(rs.getString("pwd"));
stu.setSex(rs.getString("sex"));
stu.setHome(rs.getString("home"));
stu.setGrades(rs.getString("grades"));
stu.setInfo(rs.getString("info"));
list.add(stu);
}
DBconn.closeConn();
return list;
} catch (SQLException e) {
e.printStackTrace();
System.out.print("錯(cuò)誤");
}
return null;
}
//4.根據(jù)用戶名返回某個(gè)用戶信息集合
public List<Stu> getStuByName(String namestr)
{
List<Stu> list = new ArrayList<Stu>();
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu where name='"+namestr+"'");
while(rs.next()){
Stu stu = new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setPwd(rs.getString("pwd"));
stu.setSex(rs.getString("sex"));
stu.setHome(rs.getString("home"));
stu.setGrades(rs.getString("grades"));
stu.setInfo(rs.getString("info"));
list.add(stu);
}
//DBconn.closeConn();
return list;
} catch (SQLException e) {
System.out.println("查詢的用戶可能不存在遍烦!");
e.printStackTrace();
}finally{
DBconn.closeConn();
}
return null;
}
//5.根據(jù)學(xué)號(hào)返回某個(gè)用戶信息集合
public List<Stu> getStuById(String IdStr)
{
List<Stu> list = new ArrayList<Stu>();
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu where id='"+IdStr+"'");
while(rs.next()){
Stu stu = new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setPwd(rs.getString("pwd"));
stu.setSex(rs.getString("sex"));
stu.setHome(rs.getString("home"));
stu.setGrades(rs.getString("grades"));
stu.setInfo(rs.getString("info"));
list.add(stu);
}
DBconn.closeConn();
return list;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//6.更新用戶信息
public boolean update(int id,String name, String pwd,String sex, String home, String grades,String info) {
boolean flag = false;
DBconn.init();
String sql ="update stu set name ='"+name
+"' , pwd ='"+pwd
+"' , sex ='"+sex
+"' , home ='"+home
+"' , grades ='"+grades
+"' , info ='"+info+"' where id = "+id;
int i =DBconn.addUpdDel(sql);
if(i>0){
flag = true;
}
DBconn.closeConn();
return flag;
}
//7.根據(jù)id刪除用戶
public boolean delete(int id) {
boolean flag = false;
DBconn.init();
String sql = "delete from stu where id="+id;
int i =DBconn.addUpdDel(sql);
if(i>0){
flag = true;
}
DBconn.closeConn();
return flag;
}
//8.求成績(jī)總和
public int sum(){
int sum = 0;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("SELECT SUM(grades) FROM stu");
while(rs.next()){
System.out.print("進(jìn)來了1");
if(rs.getInt("SUM(grades)")!=0){
System.out.print("進(jìn)來了2");
sum = rs.getInt("SUM(grades)");
}
}
DBconn.closeConn();
return sum;
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
//9.求成績(jī)平均
public int avg(){
int avg = 0;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("SELECT AVG(grades) FROM stu");
while(rs.next()){
System.out.print("進(jìn)來了1");
if(rs.getInt("AVG(grades)")!=0){
System.out.print("進(jìn)來了2");
avg = rs.getInt("AVG(grades)");
}
}
DBconn.closeConn();
return avg;
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
六、 遇到的問題和解決方法
過程中中主要遇到的小問題不少躺枕,原因主要是jsp域相關(guān)的問題服猪。遇到的比較棘手的問題主要是:
數(shù)據(jù)庫語句編寫錯(cuò)誤到時(shí)數(shù)據(jù)庫的增刪改查錯(cuò)誤
解決
:
"select * from mgr where name='"+name+"' and pwd='"+pwd+"'"
一定要注意其中""與''以及+等符號(hào)之間的關(guān)系,因?yàn)檫@里的aql語句是一個(gè)String拐云,其中又用到了傳入的參數(shù)罢猪,字符串拼接的時(shí)候一定要注意!
七叉瘩、 存在的不足和改進(jìn)的思路
1膳帕、界面的問題:解決思路是導(dǎo)入的一個(gè)css的包,然后在jsp頁面引用了一下
2房揭、查詢時(shí)未輸入也可以錄入的問題:思路是添加一個(gè)錄入判斷
3备闲、數(shù)據(jù)的中文問題:思路是更改字符編碼
項(xiàng)目下載:(更新下載方式)
鏈接:https://download.csdn.net/download/weixin_40486026/10884068