項目背景
學生資訊檔案的管理對于學校的管理者來說至關重要,學生資訊是高等學校非常重要的一項資料資源,是一個教育機關不可缺少一部分。特别是近幾年來,國家政策的調整,我國高等院校大規模的擴招,給高等院校的教學管理、學生管理、後勤管理等方面都帶來不少的沖擊。其包含的資料量大,涉及的人員面廣,而且需要及時更新,故較為複雜,難以單純地依靠人工管理,而且傳統的人工管理方式既不易于規範化,管理效率也不高,我國各類高等院校中還有相當一部分學生檔案管理還停留在紙媒體的基礎上,尤其是中、國小對學生檔案的管理更是落後,這樣的管理機制已經不能适應時代發展的要求,其管理方法将浪費許多人力和物力。随着科學技術的不斷提高,計算機科學與技術日漸成熟,計算機應用的普及已進入人類社會生活的各個領域,并發揮着越來越重要的作用。這種傳統的手工管理模式必然被以計算機為物質基礎的資訊管理方法所取代。
功能設計
主要功能:使用者不同角色登入(老師、學生、管理者)
系統首頁介紹
學生管理:添加學生、檢視學生清單資訊、檢視學生資料
老師管理:添加老師、檢視老師清單資訊、檢視老師資料
成績管理:檢視成績資訊、修改成績
個人中心:修改個人資料、頭像等、登出退出
角色設計
擁有管理者、老師、學生三種角色、每個角色對應不同菜單權限
主要技術
用的技術都是比較基礎好學通俗易懂的Java jsp+mysql+servlet+jdbc+jquery+html+css等
具體功能實作
登入:
根據不同賬号角色進行登入
首頁:
首頁主要是利用css等進行簡單的布局、左側是菜單欄、中間是系統介紹、右上角是個人中心和賬戶資訊以及登出。
學生管理:
添加學生
學生清單:
管理者擁有編輯删除權限、老師擁有編輯權限。學生隻能檢視資訊。
老師管理:
添加老師資訊
檢視老師清單資訊:
成績管理:
學生成績資訊檢視
個人中心:
個人中心随意做了一個alert彈窗
部分代碼實作:
登入前端:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>學生資訊管理系統</title>
<script src="js/jquery-1.8.3.min.js" type="text/javascript"></script>
<script src="js/login.js" type="text/javascript"></script>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<center>
<div class="login">
<div class="login_head">
<h3>登入</h3>
</div>
<div class="login_window">
<div>
<label>賬号:</label> <br> <input type="text" name="ope_name"
id="ope_name">
</div>
<div>
<label>密碼:</label> <br> <input type="password" name="ope_pwd"
id="ope_pwd">
</div>
<input
style="width:60px; float:right; margin-top:10px;margin-right:20px;"
type="button" value="登入" onclick="login()">
</div>
</div>
</center>
</body>
</html>
登入背景servlet:
package impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import util.DB;
import dao.ILogin;
import entity.Operator;
import entity.Privilege;
public class LoginImpl implements ILogin {
private PrivilegeImpl1 privilegeImpl = new PrivilegeImpl1();
private RoleImpl roleImpl = new RoleImpl();
private List<Privilege> list_privilege;
private PreparedStatement pst;
private Operator log_operator;
private HttpSession session;
private String checkResult;
private Connection conn;
private ResultSet rs;
// 登入驗證
public String login(HttpServletRequest request, Operator operator) {
session = request.getSession();
checkResult = "success";
log_operator = new Operator();
try {
conn = DB.getConn();
pst = conn
.prepareStatement("SELECT * FROM operator WHERE ope_name = ?");
pst.setString(1, operator.getName());
rs = pst.executeQuery();
if (!rs.next()) {
checkResult = "賬戶不存在,請重新輸入!";
session.setAttribute("isLogin", "false");
} else {
if (!operator.getPwd().equals(rs.getString(3))) {
checkResult = "您輸入的密碼不正确,請重新輸入!";
session.setAttribute("isLogin", "false");
} else {
// 登入成功
session.setAttribute("isLogin", "true");
// 獲得該使用者的完整資訊
log_operator.setId(rs.getInt(1));
log_operator.setName(rs.getString(2));
log_operator.setPwd(rs.getString(3));
log_operator.setRole(roleImpl.query("rol_id",
rs.getString(4)).get(0));
session.setAttribute("log_operator", log_operator);
// 根據使用者,擷取對應的角色對應的權限
list_privilege = privilegeImpl.query("rol_id", log_operator
.getRole().getId()
+ "");
List<Privilege> list = new ArrayList<Privilege>();
list.add(list_privilege.get(0));
for (int i = 1; i < list_privilege.size(); i++) {
int y=0;
for(int x=0;x<list.size();x++){
if(!list.get(x).getMenu_name().equals(
list_privilege.get(i).getMenu_name())){
y++;
}
}
if (y==list.size()) {
list.add(list_privilege.get(i));
}
}
session.setAttribute("list", list);
session.setAttribute("list_privilege", list_privilege);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DB.close(conn, pst, rs);
}
return checkResult;
}
}
連結資料庫:
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DB {
// 擷取資料庫連接配接
public static Connection getConn() {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/jsp_studentmanager?characterEncoding=utf8";
String name = "root";
String pwd = "123456";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, name, pwd);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
// 關閉對象 釋放資源
public static void close(Connection conn, PreparedStatement pst,
ResultSet rs) {
try {
if (rs != null)
rs.close();
if (pst != null)
pst.close();
if (conn != null)
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
部分表結構:
學生表:
CREATE TABLE `NewTable` (
`stu_id` int(11) NOT NULL AUTO_INCREMENT ,
`ope_id` int(11) NULL DEFAULT NULL ,
`stu_no` varchar(22) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`stu_name` varchar(22) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`stu_sex` enum('男','女') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '男' ,
`stu_birth` date NULL DEFAULT NULL ,
`stu_pic` varchar(22) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`cla_id` int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`stu_id`),
FOREIGN KEY (`cla_id`) REFERENCES `classes` (`cla_id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`ope_id`) REFERENCES `operator` (`ope_id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE INDEX `uni_no` (`stu_no`) USING BTREE ,
UNIQUE INDEX `uni_ope` (`ope_id`) USING BTREE ,
INDEX `fk_stu_cla` (`cla_id`) USING BTREE ,
INDEX `fk_stu_ope` (`ope_id`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=13
ROW_FORMAT=COMPACT
;
CREATE DEFINER=`root`@`localhost` TRIGGER `TG_3` AFTER DELETE ON `NewTable`
FOR EACH ROW BEGIN
DELETE FROM operator WHERE ope_id = old.ope_id;
END;
成績表:
CREATE TABLE `NewTable` (
`sco_id` int(11) NOT NULL AUTO_INCREMENT ,
`sco_daily` float NULL DEFAULT 0 ,
`sco_exam` float NULL DEFAULT 0 ,
`sco_count` float NULL DEFAULT 0 ,
`stu_id` int(11) NULL DEFAULT NULL ,
`sub_id` int(11) NULL DEFAULT NULL ,
`cla2sub_id` int(11) NOT NULL ,
`cla_id` int(11) NOT NULL ,
PRIMARY KEY (`sco_id`),
FOREIGN KEY (`stu_id`) REFERENCES `student` (`stu_id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`sub_id`) REFERENCES `subject` (`sub_id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`cla2sub_id`) REFERENCES `cla2sub` (`cla2sub_id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`cla_id`) REFERENCES `classes` (`cla_id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE INDEX `uni_stu_sub` (`stu_id`, `sub_id`, `cla2sub_id`) USING BTREE ,
INDEX `fk_sco_sub` (`sub_id`) USING BTREE ,
INDEX `fk_sco_stu` (`stu_id`) USING BTREE ,
INDEX `fk_sco_cla` (`cla2sub_id`) USING BTREE ,
INDEX `cla_id` (`cla_id`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=33
ROW_FORMAT=COMPACT
;
班級表:
CREATE TABLE `NewTable` (
`cla_id` int(11) NOT NULL AUTO_INCREMENT ,
`cla_name` varchar(22) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`maj_id` int(11) NULL DEFAULT NULL ,
`cla_tec` varchar(22) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`cla_id`),
FOREIGN KEY (`maj_id`) REFERENCES `major` (`maj_id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE INDEX `uni_name` (`cla_name`) USING BTREE ,
INDEX `fk_cla_maj` (`maj_id`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=8
ROW_FORMAT=COMPACT
;
CREATE DEFINER=`root`@`localhost` TRIGGER `TG_7` BEFORE DELETE ON `NewTable`
FOR EACH ROW BEGIN
DELETE FROM operator WHERE ope_id IN (SELECT ope_id FROM student WHERE cla_id = old.cla_id);
END;