Java简单用户管理系统
2012-02-15 14:53
417 查看
Dbutil.java
-----------------------------------------------------------------------------------
package com.ceshi.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 封装数据常用操作
* @author Administrator
*
*/
public class DbUtil {
/**
* 取得Connection
* @return
*/
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String username = "drp1";
String password = "drp1";
conn = DriverManager.getConnection(url,username,password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 关闭conn
* @param conn
*/
public static void close(Connection conn){
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭PreparedStatement
* @param pstmt
*/
public static void close(PreparedStatement pstmt){
if(pstmt != null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭ResultSet
* @param pstmt
*/
public static void close(ResultSet rs ) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 测试数据库是否连接成功
* @param args
*/
public static void main(String args[]){
System.out.println("数据库连接成功!"+DbUtil.getConnection());
}
}
-----------------------------------------------------------------------------------
PageModel.java
-----------------------------------------------------------------------------------
package com.ceshi.util;
import java.util.List;
/**
* 封装分页信息
* @author Administrator
*
*/
public class PageModel<E> {
//结果集
private List<E> list;
//查询记录数
private int totalRecords;
//每页多少条数据
private int pageSize;
//第几页
private int pageNo;
/**
* 总页数
* @return
*/
public int getTotalPages() {
return (totalRecords + pageSize - 1) / pageSize;
}
/**
* 取得首页
* @return
*/
public int getTopPageNo() {
return 1;
}
/**
* 上一页
* @return
*/
public int getPreviousPageNo() {
if (pageNo <= 1) {
return 1;
}
return pageNo - 1;
}
/**
* 下一页
* @return
*/
public int getNextPageNo() {
if (pageNo >= getBottomPageNo()) {
return getBottomPageNo();
}
return pageNo + 1;
}
/**
* 取得尾页
* @return
*/
public int getBottomPageNo() {
return getTotalPages();
}
public List<E> getList() {
return list;
}
public void setList(List<E> list) {
this.list = list;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
}
-----------------------------------------------------------------------------------
UserManager.java
-----------------------------------------------------------------------------------
package com.ceshi.manager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.ceshi.entity.User;
import com.ceshi.util.DbUtil;
import com.ceshi.util.PageModel;
/**
* 采用单例管理用户
* @author Administrator
*
*/
public class UserManager {
private static UserManager instance = new UserManager();
private UserManager(){}
/**
* 提供一个入口方法
* @return
*/
public static UserManager getInstance(){
return instance;
}
/**
* 添加用户的方法
* @param user
*/
public void addUser(User user){
String sql = "insert into t_user (user_id, user_name, password, contact_tel, email, create_date) values (?,?,?,?,?,?)";
Connection conn = null;
PreparedStatement pstmt = null;
try{
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getUserId());
pstmt.setString(2, user.getUserName());
pstmt.setString(3, user.getPassword());
pstmt.setString(4, user.getContactTel());
pstmt.setString(5, user.getEmail());
pstmt.setTimestamp(6, new Timestamp(new Date().getTime()));//能保存年月日 时分秒
pstmt.executeQuery();
} catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
}
}
/**
* 修改用户
* @param user
*/
public void modifyUser(User user) {
StringBuilder sbSql = new StringBuilder();
sbSql.append("update t_user ")
.append("set user_name = ?, ")
.append("password = ?, ")
.append("contact_tel = ?, ")
.append("email = ? ")
.append("where user_id = ? ");
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sbSql.toString());
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassword());
pstmt.setString(3, user.getContactTel());
pstmt.setString(4, user.getEmail());
pstmt.setString(5, user.getUserId());
pstmt.executeUpdate();
}catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
}
}
/**
* 根据用户代码删除
* @param userId
*/
public void delUser(String userId) {
String sql = "delete from t_user where user_id=?";
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
pstmt.executeUpdate();
}catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
}
}
/**
* 根据用户代码查询
* @param userId
* @return 如果存在返回User对象,否则返回null
*/
public User findUserById(String userId) {
String sql = "select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id=?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
User user = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
rs = pstmt.executeQuery();
if (rs.next()) {
user = new User();
user.setUserId(rs.getString("user_id"));
user.setUserName(rs.getString("user_name"));
user.setPassword(rs.getString("password"));
user.setContactTel(rs.getString("contact_tel"));
user.setEmail(rs.getString("email"));
user.setCreateDate(rs.getTimestamp("create_date"));
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(rs);
DbUtil.close(pstmt);
DbUtil.close(conn);
}
return user;
}
/**
* 分页查询
* @param pageNo 第几页
* @param pageSize 每页多少条数据
* @return pageModel
*/
public PageModel<User> findUserList(int pageNo, int pageSize) {
StringBuffer sbSql = new StringBuffer();
sbSql.append("select user_id, user_name, password, contact_tel, email, create_date ")
.append("from ")
.append("( ")
.append("select rownum rn, user_id, user_name, password, contact_tel, email, create_date ")
.append("from ")
.append("( ")
.append("select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id <> 'root' order by user_id ")
.append(") where rownum <= ? ")
.append(") where rn > ? ");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
PageModel<User> pageModel = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sbSql.toString());
pstmt.setInt(1, pageNo * pageSize);
pstmt.setInt(2, (pageNo - 1) * pageSize);
rs = pstmt.executeQuery();
List<User> userList = new ArrayList<User>();
while (rs.next()) {
User user = new User();
user.setUserId(rs.getString("user_id"));
user.setUserName(rs.getString("user_name"));
user.setPassword(rs.getString("password"));
user.setContactTel(rs.getString("contact_tel"));
user.setEmail(rs.getString("email"));
user.setCreateDate(rs.getTimestamp("create_date"));
userList.add(user);
}
pageModel = new PageModel<User>();
pageModel.setList(userList);
pageModel.setTotalRecords(getTotalRecords(conn));
pageModel.setPageSize(pageSize);
pageModel.setPageNo(pageNo);
}catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(rs);
DbUtil.close(pstmt);
DbUtil.close(conn);
}
return pageModel;
}
/**
* 取得总记录数
* @param conn
* @return
*/
private int getTotalRecords(Connection conn)
throws SQLException {
String sql = "select count(*) from t_user where user_id <> 'root'";
PreparedStatement pstmt = null;
ResultSet rs = null;
int count = 0;
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
rs.next();
count = rs.getInt(1);
}finally {
DbUtil.close(rs);
DbUtil.close(pstmt);
}
return count;
}
}
-----------------------------------------------------------------------------------
User.java
-----------------------------------------------------------------------------------
package com.ceshi.entity;
import java.util.Date;
public class User {
private String userId; //用户ID
private String userName; //用户名称
private String password; //用户密码
private String contactTel; //用户电话
private String email; //电子邮件
private Date createDate; //创建日期
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getContactTel() {
return contactTel == null ? "": contactTel;
}
public void setContactTel(String contactTel) {
this.contactTel = contactTel;
}
public String getEmail() {
return email == null ? "": email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
}
-----------------------------------------------------------------------------------
add_query.jsp
-----------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%@ page import="com.ceshi.manager.*"%>
<%@ page import="com.ceshi.util.*"%>
<%@ page import="com.ceshi.entity.*"%>
<%
request.setCharacterEncoding("GB18030");
String command = request.getParameter("command");
if ("del".equals(command)) {
String[] userIds = request.getParameterValues("selectFlag");
for (int i=0; i<userIds.length; i++) {
UserManager.getInstance().delUser(userIds[i]);
}
}
int pageNo = 1;
int pageSize = 4; //每页设置的大小
String pageNoString = request.getParameter("pageNo");
if (pageNoString != null) {
pageNo = Integer.parseInt(pageNoString);
}
PageModel<User> pageModel = UserManager.getInstance().findUserList(pageNo, pageSize);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>用户维护</title>
<script type="text/javascript">
function addUser() {
//点添加按钮时 跳向user_add.jsp页面
window.self.location = "user_add.jsp";
}
function modifyUser() {
var selectFlags = document.getElementsByName("selectFlag");
var count = 0;
var j = 0;
for (var i=0; i<selectFlags.length; i++) {
if (selectFlags[i].checked) {
j = i;
count++;
}
}
if (count == 0) {
alert("请选择需要修改的用户!");
return;
}
if (count > 1) {
alert("一次只能修改一个用户!");
return;
}
window.self.location = "user_modify.jsp?userId=" + selectFlags[j].value;
}
function deleteUser() {
var selectFlags = document.getElementsByName("selectFlag");
var flag = false;
for (var i=0; i<selectFlags.length; i++) {
if (selectFlags[i].checked) {
flag = true;
break;
}
}
if (!flag) {
alert("请选择需要删除的用户!");
return;
}
if (window.confirm("确认删除吗?")) {
with (document.getElementById("userform")) {
action="user_main.jsp?command=del";
method="post";
submit();
}
}
}
function checkAll(field) {
var selectFlags = document.getElementsByName("selectFlag");
for (var i=0; i<selectFlags.length; i++) {
selectFlags[i].checked = field.checked;
}
}
function topPage() {
window.self.location = "user_main.jsp?pageNo=<%=pageModel.getTopPageNo()%>";
}
function previousPage() {
window.self.location = "user_main.jsp?pageNo=<%=pageModel.getPreviousPageNo()%>";
}
function nextPage() {
window.self.location = "user_main.jsp?pageNo=<%=pageModel.getNextPageNo()%>";
}
function bottomPage() {
window.self.location = "user_main.jsp?pageNo=<%=pageModel.getBottomPageNo()%>";
}
</script>
</head>
<body class="body1" bgcolor="#CCCCCC">
<br>
<form name="userform" id="userform">
<div align="center">用户维护界面</div><br>
<table width="800px" border="1" cellspacing="0" cellpadding="0" align="center" class="table1">
<tr>
<td width="55" class="rd6">
<input type="checkbox" name="ifAll" onClick="checkAll(this)">
</td>
<td width="119" class="rd6">
用户代码
</td>
<td width="152" class="rd6">
用户名称
</td>
<td width="166" class="rd6">
联系电话
</td>
<td width="150" class="rd6">
email
</td>
<td width="200" class="rd6">
创建日期
</td>
</tr>
<%
List<User> userList = pageModel.getList();
for (Iterator<User> iter=userList.iterator(); iter.hasNext();) {
User user = iter.next();
%>
<tr>
<td class="rd8">
<input type="checkbox" name="selectFlag" class="checkbox1"
value="<%=user.getUserId() %>">
</td>
<td class="rd8">
<%=user.getUserId() %>
</td>
<td class="rd8">
<%=user.getUserName() %>
</td>
<td class="rd8">
<%=user.getContactTel()%>
</td>
<td class="rd8">
<%=user.getEmail() %>
</td>
<td class="rd8">
<%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateDate()) %>
</td>
</tr>
<%
}
%>
</table>
<table width="800px" height="30" border="0" align="center"
cellpadding="0" cellspacing="0" class="rd1">
<tr>
<td nowrap class="rd19" height="2">
<div align="left">
共 <font color="red"><%=pageModel.getTotalPages() %></font> 页
当前第<font color="red"><%=pageModel.getPageNo() %></font>页
</div>
</td>
<td nowrap class="rd19">
<div align="right">
<input name="btnTopPage" class="button1" type="button" id="btnTopPage" value=" << " title="首页" onClick="topPage()">
<input name="btnPreviousPage" class="button1" type="button" id="btnPreviousPage" value=" < " title="上页" onClick="previousPage()">
<input name="btnNextPage" class="button1" type="button" id="btnNextPage" value=" > " title="下页" onClick="nextPage()">
<input name="btnBottomPage" class="button1" type="button" id="btnBottomPage" value=" >> " title="尾页" onClick="bottomPage()">
<input name="btnAdd" type="button" class="button1" id="btnAdd" value="添加" onClick="addUser()">
<input name="btnDelete" class="button1" type="button" id="btnDelete" value="删除" onClick="deleteUser()">
<input name="btnModify" class="button1" type="button" id="btnModify" value="修改" onClick="modifyUser()">
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
-----------------------------------------------------------------------------------
add_modify.jsp
-----------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import="com.ceshi.entity.*" %>
<%@ page import="com.ceshi.manager.*" %>
<%
request.setCharacterEncoding("GB18030");
String command = request.getParameter("command");
String userId = request.getParameter("userId");
User user = UserManager.getInstance().findUserById(userId);
if ("modify".equals(command)) {
user.setUserId(request.getParameter("userId"));
user.setUserName(request.getParameter("userName"));
user.setPassword(request.getParameter("password"));
user.setContactTel(request.getParameter("tel"));
user.setEmail(request.getParameter("email"));
UserManager.getInstance().modifyUser(user);
out.println("修改用户成功!");
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>修改用户</title>
<script type="text/javascript">
function modifyUser(){
with (document.getElementById("userForm")) {
method="post";
action="user_modify.jsp?command=modify";
submit();
}
}
function userMain() {
window.self.location = "user_main.jsp";
}
</script>
</head>
<body bgcolor="#CCCCCC" >
<form name="userForm" target="_self" id="userForm">
<input type="hidden" name="command" value="modify">
<br><div align="center">修改用户<br><br>
</div><table align="center" width="300" border="1">
<tr>
<td width="83" align="right">用户代码</td>
<td width="201">
<input type="text" name="userId" id="userId" value="<%=user.getUserId() %>"/>
</td>
</tr>
<tr>
<td align="right">用户名称</td>
<td>
<input type="text" name="userName" id="userName" value="<%=user.getUserName() %>"/>
</td>
</tr>
<tr>
<td align="right">密码</td>
<td>
<input type="password" name="password" id="password" value="<%=user.getPassword() %>"/>
</td>
</tr>
<tr>
<td align="right">联系电话</td>
<td>
<input type="tel" name="tel" id="tel" value="<%=user.getContactTel() %>"/>
</td>
</tr>
<tr>
<td align="right">E-mail</td>
<td>
<input type="email" name="email" id="email" value="<%=user.getEmail() %>"/>
</td>
</tr>
<tr>
<td>
<br>
</td>
<td align="center">
<input type="submit" name="button" id="button" value="修改" onclick="modifyUser()"/>
<input type="button" name="btnAdd" class="button1" id="btnAdd" value="返回" onclick="userMain()">
</td>
</tr>
</table>
</form>
</body>
</html>
-----------------------------------------------------------------------------------
add_add.jsp
-----------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import="com.ceshi.entity.*" %>
<%@ page import="com.ceshi.manager.*" %>
<%
request.setCharacterEncoding("GB18030");
String command = request.getParameter("command");
String userId = "";
String userName = "";
String contactTel = "";
String email = "";
if("add".equals(command)){//会很好的防止空指针异常
if(UserManager.getInstance().findUserById(request.getParameter("userId")) == null)
{
User user = new User();
user.setUserId(request.getParameter("userId"));
user.setUserName(request.getParameter("userName"));
user.setPassword(request.getParameter("password"));
user.setContactTel(request.getParameter("tel"));
user.setEmail(request.getParameter("email"));
UserManager.getInstance().addUser(user);
out.println("添加用户成功!");
}else {
userId = request.getParameter("userId");
userName = request.getParameter("userName");
contactTel = request.getParameter("contactTel");
email = request.getParameter("email");
out.println("用户代码已经存在,代码=【" + request.getParameter("userId") + "】");
}
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>添加用户</title>
<script type="text/javascript">
function addUser(){
with (document.getElementById("userForm")) {
action="user_add.jsp";
method="post";
submit();
}
}
function userMain() {
window.self.location = "user_main.jsp";
}
</script>
</head>
<body bgcolor="#CCCCCC" >
<form name="userForm" target="_self" id="userForm">
<input type="hidden" name="command" value="add">
<br><div align="center">添加用户<br><br>
</div><table align="center" width="300" border="1">
<tr>
<td width="83" align="right">用户代码</td>
<td width="201">
<input type="text" name="userId" id="userId" />
<span id="spanUserId"></span>
</td>
</tr>
<tr>
<td align="right">用户名称</td>
<td>
<input type="text" name="userName" id="userName" />
</td>
</tr>
<tr>
<td align="right">密码</td>
<td>
<input type="password" name="password" id="password" />
</td>
</tr>
<tr>
<td align="right">联系电话</td>
<td>
<input type="tel" name="tel" id="tel" />
</td>
</tr>
<tr>
<td align="right">E-mail</td>
<td>
<input type="email" name="email" id="email" />
</td>
</tr>
<tr>
<td>
<br>
</td>
<td align="center">
<input type="submit" name="button" id="button" value="保存信息" onclick="addUser()"/>
<input type="button" name="btnAdd" class="button1" id="btnAdd" value="返回" onclick="userMain()">
</td>
</tr>
</table>
</form>
</body>
</html>
-----------------------------------------------------------------------------------
no fy
-----------------------------------------------------------------------------------
/**
* 取得用户列表
* @return
*/
public List<User> getUsers(){//如果不是static 我们取用户的时候可能要new 一个新的用户
String sql = "select * from t_user";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
User user = null;
List<User> users = new ArrayList<User>();
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setTel(rs.getString("tel"));
user.setEmail(rs.getString("email"));
user.setCreateDate(rs.getTimestamp("create_date"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(rs);
DbUtil.close(pstmt);
DbUtil.close(conn);
}
return users;
}
-----------------------------------------------------------------------------------
<%
List<User> users = UserManager.getInstance().getUsers();
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
%>
<tr>
<td class="rd8">
<input type="checkbox" name="selectFlag" class="checkbox1" value="<%=user.getId()%>">
</td>
<td class="rd8">
<%=user.getName() %>
</td>
<td class="rd8">
<%=user.getPassword() %>
</td>
<td class="rd8">
<%=user.getTel()%>
</td>
<td class="rd8">
<%=user.getEmail() %>
</td>
<td class="rd8">
<%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateDate()) %>
</td>
</tr>
<%
}
%>
-----------------------------------------------------------------------------------
Junit.java
-----------------------------------------------------------------------------------
package com.ceshi.manager;
import java.util.List;
import java.util.Scanner;
import junit.framework.TestCase;
import com.ceshi.entity.User;
public class TestUserManager extends TestCase{
//测试删除操作
public void testDelUser(){
Scanner str = new Scanner(System.in);
System.out.print("请输入要删除的用户Id:");
String userId = str.next();
UserManager.getInstance().delUser(userId);
}
//测试查询操作
public void testGetUsers(){
List<User> users = UserManager.getInstance().getUsers();
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
System.out.print(user.getName());//获取名字
}
}
//测试用户添加
public void testAddUser(){
User user = new User();
Scanner str = new Scanner(System.in);
System.out.print("请输入用户Id:");
String id = str.next();
System.out.print("请输入用户name:");
String name = str.next();
System.out.print("请输入用户password:");
String password = str.next();
System.out.print("请输入用户tel:");
String tel = str.next();
System.out.print("请输入用户email:");
String email = str.next();
user.setId(id);
user.setName(name);
user.setPassword(password);
user.setTel(tel);
user.setEmail(email);
UserManager.getInstance().addUser(user);
}
//根据用户Id查询
public void testFindUserById(){
Scanner str = new Scanner(System.in);
System.out.print("请输入用户Id:");
String userId = str.next();
UserManager.getInstance().findUserById(userId);
User user = new User();
System.out.print("用户的名字:"+user.getName());
}
}
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
package com.ceshi.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 封装数据常用操作
* @author Administrator
*
*/
public class DbUtil {
/**
* 取得Connection
* @return
*/
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String username = "drp1";
String password = "drp1";
conn = DriverManager.getConnection(url,username,password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 关闭conn
* @param conn
*/
public static void close(Connection conn){
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭PreparedStatement
* @param pstmt
*/
public static void close(PreparedStatement pstmt){
if(pstmt != null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭ResultSet
* @param pstmt
*/
public static void close(ResultSet rs ) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 测试数据库是否连接成功
* @param args
*/
public static void main(String args[]){
System.out.println("数据库连接成功!"+DbUtil.getConnection());
}
}
-----------------------------------------------------------------------------------
PageModel.java
-----------------------------------------------------------------------------------
package com.ceshi.util;
import java.util.List;
/**
* 封装分页信息
* @author Administrator
*
*/
public class PageModel<E> {
//结果集
private List<E> list;
//查询记录数
private int totalRecords;
//每页多少条数据
private int pageSize;
//第几页
private int pageNo;
/**
* 总页数
* @return
*/
public int getTotalPages() {
return (totalRecords + pageSize - 1) / pageSize;
}
/**
* 取得首页
* @return
*/
public int getTopPageNo() {
return 1;
}
/**
* 上一页
* @return
*/
public int getPreviousPageNo() {
if (pageNo <= 1) {
return 1;
}
return pageNo - 1;
}
/**
* 下一页
* @return
*/
public int getNextPageNo() {
if (pageNo >= getBottomPageNo()) {
return getBottomPageNo();
}
return pageNo + 1;
}
/**
* 取得尾页
* @return
*/
public int getBottomPageNo() {
return getTotalPages();
}
public List<E> getList() {
return list;
}
public void setList(List<E> list) {
this.list = list;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
}
-----------------------------------------------------------------------------------
UserManager.java
-----------------------------------------------------------------------------------
package com.ceshi.manager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.ceshi.entity.User;
import com.ceshi.util.DbUtil;
import com.ceshi.util.PageModel;
/**
* 采用单例管理用户
* @author Administrator
*
*/
public class UserManager {
private static UserManager instance = new UserManager();
private UserManager(){}
/**
* 提供一个入口方法
* @return
*/
public static UserManager getInstance(){
return instance;
}
/**
* 添加用户的方法
* @param user
*/
public void addUser(User user){
String sql = "insert into t_user (user_id, user_name, password, contact_tel, email, create_date) values (?,?,?,?,?,?)";
Connection conn = null;
PreparedStatement pstmt = null;
try{
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getUserId());
pstmt.setString(2, user.getUserName());
pstmt.setString(3, user.getPassword());
pstmt.setString(4, user.getContactTel());
pstmt.setString(5, user.getEmail());
pstmt.setTimestamp(6, new Timestamp(new Date().getTime()));//能保存年月日 时分秒
pstmt.executeQuery();
} catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
}
}
/**
* 修改用户
* @param user
*/
public void modifyUser(User user) {
StringBuilder sbSql = new StringBuilder();
sbSql.append("update t_user ")
.append("set user_name = ?, ")
.append("password = ?, ")
.append("contact_tel = ?, ")
.append("email = ? ")
.append("where user_id = ? ");
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sbSql.toString());
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassword());
pstmt.setString(3, user.getContactTel());
pstmt.setString(4, user.getEmail());
pstmt.setString(5, user.getUserId());
pstmt.executeUpdate();
}catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
}
}
/**
* 根据用户代码删除
* @param userId
*/
public void delUser(String userId) {
String sql = "delete from t_user where user_id=?";
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
pstmt.executeUpdate();
}catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
}
}
/**
* 根据用户代码查询
* @param userId
* @return 如果存在返回User对象,否则返回null
*/
public User findUserById(String userId) {
String sql = "select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id=?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
User user = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
rs = pstmt.executeQuery();
if (rs.next()) {
user = new User();
user.setUserId(rs.getString("user_id"));
user.setUserName(rs.getString("user_name"));
user.setPassword(rs.getString("password"));
user.setContactTel(rs.getString("contact_tel"));
user.setEmail(rs.getString("email"));
user.setCreateDate(rs.getTimestamp("create_date"));
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(rs);
DbUtil.close(pstmt);
DbUtil.close(conn);
}
return user;
}
/**
* 分页查询
* @param pageNo 第几页
* @param pageSize 每页多少条数据
* @return pageModel
*/
public PageModel<User> findUserList(int pageNo, int pageSize) {
StringBuffer sbSql = new StringBuffer();
sbSql.append("select user_id, user_name, password, contact_tel, email, create_date ")
.append("from ")
.append("( ")
.append("select rownum rn, user_id, user_name, password, contact_tel, email, create_date ")
.append("from ")
.append("( ")
.append("select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id <> 'root' order by user_id ")
.append(") where rownum <= ? ")
.append(") where rn > ? ");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
PageModel<User> pageModel = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sbSql.toString());
pstmt.setInt(1, pageNo * pageSize);
pstmt.setInt(2, (pageNo - 1) * pageSize);
rs = pstmt.executeQuery();
List<User> userList = new ArrayList<User>();
while (rs.next()) {
User user = new User();
user.setUserId(rs.getString("user_id"));
user.setUserName(rs.getString("user_name"));
user.setPassword(rs.getString("password"));
user.setContactTel(rs.getString("contact_tel"));
user.setEmail(rs.getString("email"));
user.setCreateDate(rs.getTimestamp("create_date"));
userList.add(user);
}
pageModel = new PageModel<User>();
pageModel.setList(userList);
pageModel.setTotalRecords(getTotalRecords(conn));
pageModel.setPageSize(pageSize);
pageModel.setPageNo(pageNo);
}catch(SQLException e) {
e.printStackTrace();
}finally {
DbUtil.close(rs);
DbUtil.close(pstmt);
DbUtil.close(conn);
}
return pageModel;
}
/**
* 取得总记录数
* @param conn
* @return
*/
private int getTotalRecords(Connection conn)
throws SQLException {
String sql = "select count(*) from t_user where user_id <> 'root'";
PreparedStatement pstmt = null;
ResultSet rs = null;
int count = 0;
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
rs.next();
count = rs.getInt(1);
}finally {
DbUtil.close(rs);
DbUtil.close(pstmt);
}
return count;
}
}
-----------------------------------------------------------------------------------
User.java
-----------------------------------------------------------------------------------
package com.ceshi.entity;
import java.util.Date;
public class User {
private String userId; //用户ID
private String userName; //用户名称
private String password; //用户密码
private String contactTel; //用户电话
private String email; //电子邮件
private Date createDate; //创建日期
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getContactTel() {
return contactTel == null ? "": contactTel;
}
public void setContactTel(String contactTel) {
this.contactTel = contactTel;
}
public String getEmail() {
return email == null ? "": email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
}
-----------------------------------------------------------------------------------
add_query.jsp
-----------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%@ page import="com.ceshi.manager.*"%>
<%@ page import="com.ceshi.util.*"%>
<%@ page import="com.ceshi.entity.*"%>
<%
request.setCharacterEncoding("GB18030");
String command = request.getParameter("command");
if ("del".equals(command)) {
String[] userIds = request.getParameterValues("selectFlag");
for (int i=0; i<userIds.length; i++) {
UserManager.getInstance().delUser(userIds[i]);
}
}
int pageNo = 1;
int pageSize = 4; //每页设置的大小
String pageNoString = request.getParameter("pageNo");
if (pageNoString != null) {
pageNo = Integer.parseInt(pageNoString);
}
PageModel<User> pageModel = UserManager.getInstance().findUserList(pageNo, pageSize);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>用户维护</title>
<script type="text/javascript">
function addUser() {
//点添加按钮时 跳向user_add.jsp页面
window.self.location = "user_add.jsp";
}
function modifyUser() {
var selectFlags = document.getElementsByName("selectFlag");
var count = 0;
var j = 0;
for (var i=0; i<selectFlags.length; i++) {
if (selectFlags[i].checked) {
j = i;
count++;
}
}
if (count == 0) {
alert("请选择需要修改的用户!");
return;
}
if (count > 1) {
alert("一次只能修改一个用户!");
return;
}
window.self.location = "user_modify.jsp?userId=" + selectFlags[j].value;
}
function deleteUser() {
var selectFlags = document.getElementsByName("selectFlag");
var flag = false;
for (var i=0; i<selectFlags.length; i++) {
if (selectFlags[i].checked) {
flag = true;
break;
}
}
if (!flag) {
alert("请选择需要删除的用户!");
return;
}
if (window.confirm("确认删除吗?")) {
with (document.getElementById("userform")) {
action="user_main.jsp?command=del";
method="post";
submit();
}
}
}
function checkAll(field) {
var selectFlags = document.getElementsByName("selectFlag");
for (var i=0; i<selectFlags.length; i++) {
selectFlags[i].checked = field.checked;
}
}
function topPage() {
window.self.location = "user_main.jsp?pageNo=<%=pageModel.getTopPageNo()%>";
}
function previousPage() {
window.self.location = "user_main.jsp?pageNo=<%=pageModel.getPreviousPageNo()%>";
}
function nextPage() {
window.self.location = "user_main.jsp?pageNo=<%=pageModel.getNextPageNo()%>";
}
function bottomPage() {
window.self.location = "user_main.jsp?pageNo=<%=pageModel.getBottomPageNo()%>";
}
</script>
</head>
<body class="body1" bgcolor="#CCCCCC">
<br>
<form name="userform" id="userform">
<div align="center">用户维护界面</div><br>
<table width="800px" border="1" cellspacing="0" cellpadding="0" align="center" class="table1">
<tr>
<td width="55" class="rd6">
<input type="checkbox" name="ifAll" onClick="checkAll(this)">
</td>
<td width="119" class="rd6">
用户代码
</td>
<td width="152" class="rd6">
用户名称
</td>
<td width="166" class="rd6">
联系电话
</td>
<td width="150" class="rd6">
</td>
<td width="200" class="rd6">
创建日期
</td>
</tr>
<%
List<User> userList = pageModel.getList();
for (Iterator<User> iter=userList.iterator(); iter.hasNext();) {
User user = iter.next();
%>
<tr>
<td class="rd8">
<input type="checkbox" name="selectFlag" class="checkbox1"
value="<%=user.getUserId() %>">
</td>
<td class="rd8">
<%=user.getUserId() %>
</td>
<td class="rd8">
<%=user.getUserName() %>
</td>
<td class="rd8">
<%=user.getContactTel()%>
</td>
<td class="rd8">
<%=user.getEmail() %>
</td>
<td class="rd8">
<%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateDate()) %>
</td>
</tr>
<%
}
%>
</table>
<table width="800px" height="30" border="0" align="center"
cellpadding="0" cellspacing="0" class="rd1">
<tr>
<td nowrap class="rd19" height="2">
<div align="left">
共 <font color="red"><%=pageModel.getTotalPages() %></font> 页
当前第<font color="red"><%=pageModel.getPageNo() %></font>页
</div>
</td>
<td nowrap class="rd19">
<div align="right">
<input name="btnTopPage" class="button1" type="button" id="btnTopPage" value=" << " title="首页" onClick="topPage()">
<input name="btnPreviousPage" class="button1" type="button" id="btnPreviousPage" value=" < " title="上页" onClick="previousPage()">
<input name="btnNextPage" class="button1" type="button" id="btnNextPage" value=" > " title="下页" onClick="nextPage()">
<input name="btnBottomPage" class="button1" type="button" id="btnBottomPage" value=" >> " title="尾页" onClick="bottomPage()">
<input name="btnAdd" type="button" class="button1" id="btnAdd" value="添加" onClick="addUser()">
<input name="btnDelete" class="button1" type="button" id="btnDelete" value="删除" onClick="deleteUser()">
<input name="btnModify" class="button1" type="button" id="btnModify" value="修改" onClick="modifyUser()">
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
-----------------------------------------------------------------------------------
add_modify.jsp
-----------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import="com.ceshi.entity.*" %>
<%@ page import="com.ceshi.manager.*" %>
<%
request.setCharacterEncoding("GB18030");
String command = request.getParameter("command");
String userId = request.getParameter("userId");
User user = UserManager.getInstance().findUserById(userId);
if ("modify".equals(command)) {
user.setUserId(request.getParameter("userId"));
user.setUserName(request.getParameter("userName"));
user.setPassword(request.getParameter("password"));
user.setContactTel(request.getParameter("tel"));
user.setEmail(request.getParameter("email"));
UserManager.getInstance().modifyUser(user);
out.println("修改用户成功!");
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>修改用户</title>
<script type="text/javascript">
function modifyUser(){
with (document.getElementById("userForm")) {
method="post";
action="user_modify.jsp?command=modify";
submit();
}
}
function userMain() {
window.self.location = "user_main.jsp";
}
</script>
</head>
<body bgcolor="#CCCCCC" >
<form name="userForm" target="_self" id="userForm">
<input type="hidden" name="command" value="modify">
<br><div align="center">修改用户<br><br>
</div><table align="center" width="300" border="1">
<tr>
<td width="83" align="right">用户代码</td>
<td width="201">
<input type="text" name="userId" id="userId" value="<%=user.getUserId() %>"/>
</td>
</tr>
<tr>
<td align="right">用户名称</td>
<td>
<input type="text" name="userName" id="userName" value="<%=user.getUserName() %>"/>
</td>
</tr>
<tr>
<td align="right">密码</td>
<td>
<input type="password" name="password" id="password" value="<%=user.getPassword() %>"/>
</td>
</tr>
<tr>
<td align="right">联系电话</td>
<td>
<input type="tel" name="tel" id="tel" value="<%=user.getContactTel() %>"/>
</td>
</tr>
<tr>
<td align="right">E-mail</td>
<td>
<input type="email" name="email" id="email" value="<%=user.getEmail() %>"/>
</td>
</tr>
<tr>
<td>
<br>
</td>
<td align="center">
<input type="submit" name="button" id="button" value="修改" onclick="modifyUser()"/>
<input type="button" name="btnAdd" class="button1" id="btnAdd" value="返回" onclick="userMain()">
</td>
</tr>
</table>
</form>
</body>
</html>
-----------------------------------------------------------------------------------
add_add.jsp
-----------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import="com.ceshi.entity.*" %>
<%@ page import="com.ceshi.manager.*" %>
<%
request.setCharacterEncoding("GB18030");
String command = request.getParameter("command");
String userId = "";
String userName = "";
String contactTel = "";
String email = "";
if("add".equals(command)){//会很好的防止空指针异常
if(UserManager.getInstance().findUserById(request.getParameter("userId")) == null)
{
User user = new User();
user.setUserId(request.getParameter("userId"));
user.setUserName(request.getParameter("userName"));
user.setPassword(request.getParameter("password"));
user.setContactTel(request.getParameter("tel"));
user.setEmail(request.getParameter("email"));
UserManager.getInstance().addUser(user);
out.println("添加用户成功!");
}else {
userId = request.getParameter("userId");
userName = request.getParameter("userName");
contactTel = request.getParameter("contactTel");
email = request.getParameter("email");
out.println("用户代码已经存在,代码=【" + request.getParameter("userId") + "】");
}
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>添加用户</title>
<script type="text/javascript">
function addUser(){
with (document.getElementById("userForm")) {
action="user_add.jsp";
method="post";
submit();
}
}
function userMain() {
window.self.location = "user_main.jsp";
}
</script>
</head>
<body bgcolor="#CCCCCC" >
<form name="userForm" target="_self" id="userForm">
<input type="hidden" name="command" value="add">
<br><div align="center">添加用户<br><br>
</div><table align="center" width="300" border="1">
<tr>
<td width="83" align="right">用户代码</td>
<td width="201">
<input type="text" name="userId" id="userId" />
<span id="spanUserId"></span>
</td>
</tr>
<tr>
<td align="right">用户名称</td>
<td>
<input type="text" name="userName" id="userName" />
</td>
</tr>
<tr>
<td align="right">密码</td>
<td>
<input type="password" name="password" id="password" />
</td>
</tr>
<tr>
<td align="right">联系电话</td>
<td>
<input type="tel" name="tel" id="tel" />
</td>
</tr>
<tr>
<td align="right">E-mail</td>
<td>
<input type="email" name="email" id="email" />
</td>
</tr>
<tr>
<td>
<br>
</td>
<td align="center">
<input type="submit" name="button" id="button" value="保存信息" onclick="addUser()"/>
<input type="button" name="btnAdd" class="button1" id="btnAdd" value="返回" onclick="userMain()">
</td>
</tr>
</table>
</form>
</body>
</html>
-----------------------------------------------------------------------------------
no fy
-----------------------------------------------------------------------------------
/**
* 取得用户列表
* @return
*/
public List<User> getUsers(){//如果不是static 我们取用户的时候可能要new 一个新的用户
String sql = "select * from t_user";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
User user = null;
List<User> users = new ArrayList<User>();
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setTel(rs.getString("tel"));
user.setEmail(rs.getString("email"));
user.setCreateDate(rs.getTimestamp("create_date"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.close(rs);
DbUtil.close(pstmt);
DbUtil.close(conn);
}
return users;
}
-----------------------------------------------------------------------------------
<%
List<User> users = UserManager.getInstance().getUsers();
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
%>
<tr>
<td class="rd8">
<input type="checkbox" name="selectFlag" class="checkbox1" value="<%=user.getId()%>">
</td>
<td class="rd8">
<%=user.getName() %>
</td>
<td class="rd8">
<%=user.getPassword() %>
</td>
<td class="rd8">
<%=user.getTel()%>
</td>
<td class="rd8">
<%=user.getEmail() %>
</td>
<td class="rd8">
<%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateDate()) %>
</td>
</tr>
<%
}
%>
-----------------------------------------------------------------------------------
Junit.java
-----------------------------------------------------------------------------------
package com.ceshi.manager;
import java.util.List;
import java.util.Scanner;
import junit.framework.TestCase;
import com.ceshi.entity.User;
public class TestUserManager extends TestCase{
//测试删除操作
public void testDelUser(){
Scanner str = new Scanner(System.in);
System.out.print("请输入要删除的用户Id:");
String userId = str.next();
UserManager.getInstance().delUser(userId);
}
//测试查询操作
public void testGetUsers(){
List<User> users = UserManager.getInstance().getUsers();
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
System.out.print(user.getName());//获取名字
}
}
//测试用户添加
public void testAddUser(){
User user = new User();
Scanner str = new Scanner(System.in);
System.out.print("请输入用户Id:");
String id = str.next();
System.out.print("请输入用户name:");
String name = str.next();
System.out.print("请输入用户password:");
String password = str.next();
System.out.print("请输入用户tel:");
String tel = str.next();
System.out.print("请输入用户email:");
String email = str.next();
user.setId(id);
user.setName(name);
user.setPassword(password);
user.setTel(tel);
user.setEmail(email);
UserManager.getInstance().addUser(user);
}
//根据用户Id查询
public void testFindUserById(){
Scanner str = new Scanner(System.in);
System.out.print("请输入用户Id:");
String userId = str.next();
UserManager.getInstance().findUserById(userId);
User user = new User();
System.out.print("用户的名字:"+user.getName());
}
}
-----------------------------------------------------------------------------------
相关文章推荐
- 用java实现一个简单的学生管理系统
- java实现简单的学生信息管理系统
- JAVA简单学生信息管理系统第一次修改版
- java学生管理系统界面简单实现<一>
- redis 用户好友管理登陆简单系统
- java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
- 简单的java学生管理系统
- Java实现简单的图书管理系统
- 简单的纯java银行管理系统
- 完全基于Servlet的简单用户管理系统
- 用户角色权限管理系统-----java web 脚手架搭建(一)
- 利用Java GUI 实现一个简易的用户管理系统
- 浅谈:使用Java基于MVC模式开发一个简单商品管理系统
- javaweb 项目的系统权限管理,怎么设计?shiro简单了解
- java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
- java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
- [置顶] 用Java GUI做一个简单的管理系统
- drp用户管理完成后,asp.net与java的一个简单比较
- 用JAVA实现一个简单的学生管理系统
- JAVA简单的图书管理系统