Java圖書管理系統,老程式員花了一天一夜
系統界面圖一張
引言:
前幾天群里的小伙伴說想搞個web圖書管理系統(用Java最基礎的語法:jsp+servlet ),于是就有人說誰還搞那個東西,都過時了的東西,我就想說一句:甭管過不過時,很多基礎的東西,對于很多同學和Java基礎不是很好的小伙伴來說,用來學習一波是最合適的,是真的香,于是我連夜寫了這個小管理系統,我就玩!
難度系數(易入)
因為才有比較基礎的語法,對Java初學者、基礎不是太好的小伙伴來說,也是比較容易上手的
后端:
1.使用Java Servlet 本身就是Java語法,無縫鏈接,也無效更種配置,web.xml輕松配置一次既可,
2.采用C3P0連接資料庫,組態檔、代碼、jar包,均已就位,無需二次操作,
3.代碼采用Service、Dao分層邏輯,清晰實用,代碼簡單易懂,
前端:
1.Jsp也是Java語法,無需學習新東西,直接寫Java代碼,
2.HTML僅僅只需最簡單的常用標簽的語法,小白也能輕松明白,
3.css只是一點點頁面的樣式,很容易,
4.JavaScript需要了解基本的語法,學web必備,
5.Jquery是JavaScript的插件庫,這里僅僅是用來與后臺互動,僅僅會使用 $.post 與后臺互動即可,
最重要的,就是通過比較簡單、基礎的語法,讓你了解用Java怎么開發一個web系統,完整的了解整個開發流程,進而提升學習的信心和增加成就感,
開發環境
僅僅是我個人的喜歡用,也可以自己選自己喜歡的
開發工具:eclipse/myEclipse
資料庫:mysql
web容器:tomcat
jdk版本:1.6
系統功能

角色介紹
1.超級管理員
權限:超級管理員是權限最大的角色,有系統所有的權限,

2.系統管理員
權限:教師/學生管理、分類管理、圖書管理、借閱資訊管理、密碼管理、登陸模塊,

3.教師 / 學生
權限:權限最小的角色,僅有修改密碼、注冊登陸登出系統、查詢圖書資訊、查詢自己的借閱資訊,

表結構介紹
用戶表
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment COMMENT '主鍵',
`no` varchar(20) default NULL COMMENT '賬號-學生一般用學號',
`name` varchar(100) not NULL COMMENT '名字',
`password` varchar(20) not NULL COMMENT '密碼',
`sex` varchar(20) default NULL COMMENT '性別',
`phone` varchar(20) default NULL COMMENT '電話',
`role_id` int(11) default NULL COMMENT '角色 0超級管理員,1管理員,2老師,3學生',
`isValid` varchar(4) default 'Y' COMMENT '是否有效,Y有效,其他無效',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
默認插入超級管理員資料
INSERT INTO `user` VALUES ('1', 'sa', '超級管理', '321', '1', '111', '0', 'Y');
選單表
CREATE TABLE `menu` (
`id` int(11) NOT NULL,
`menuCode` varchar(8) default NULL COMMENT '選單編碼',
`menuName` varchar(16) default NULL COMMENT '選單名字',
`menuLevel` varchar(2) default NULL COMMENT '選單級別',
`menuParentCode` varchar(8) default NULL COMMENT '選單的父code',
`menuClick` varchar(16) default NULL COMMENT '點擊觸發的函式',
`menuRight` varchar(8) default NULL COMMENT '權限3表示學生,2表示老師,1表示管理員,0超級管理員,可以用逗號組合使用',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
默認插入的資料(建議一行行的插入,反正我的mysql一條條的弄,不然后面的中文會亂碼)
NSERT INTO `menu` VALUES ('1', '001', '管理員管理', '1', null, 'adminManage', '0');
INSERT INTO `menu` VALUES ('2', '002', '教師/學生管理', '1', null, 'userManage', '0,1');
INSERT INTO `menu` VALUES ('3', '003', '分類管理', '1', null, 'categoryManage', '0,1');
INSERT INTO `menu` VALUES ('4', '004', '圖書管理', '1', null, 'booksManage', '0,1,2,3');
INSERT INTO `menu` VALUES ('5', '005', '借閱資訊管理', '1', null, 'recordManage', '0,1,2,3');
INSERT INTO `menu` VALUES ('6', '006', '修改密碼', '1', null, 'modPwd', '0,1,2,3');
INSERT INTO `menu` VALUES ('7', '007', '退出系統', '1', null, 'logout', '0,1,2,3');
分類資訊表
CREATE TABLE `category` (
`id` int(11) NOT NULL auto_increment COMMENT '主鍵',
`name` varchar(100) not NULL COMMENT '分類名',
`remark` varchar(1000) default NULL COMMENT '備注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
圖書表
CREATE TABLE `books` (
`id` int(11) NOT NULL auto_increment COMMENT '主鍵',
`name` varchar(100) not NULL COMMENT '書名',
`category` int(11) not NULL COMMENT '分類',
`count` int(11) default NULL COMMENT '數量',
`curCount` int(11) default NULL COMMENT '現存數量',
`remark` varchar(1000) default NULL COMMENT '備注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
借閱資訊表
CREATE TABLE `record` (
`id` int(11) NOT NULL auto_increment COMMENT '主鍵',
`book` int(11) not NULL COMMENT '書id',
`userId` int(11) not NULL COMMENT '借閱人',
`start_date` date default NULL COMMENT '開始日期',
`end_date` date default NULL COMMENT '結束日期',
`return_date` date default NULL COMMENT '歸還日期',
`state` int(1) not NULL COMMENT '狀態:1 借閱 2 歸還 3 續借',
`admin_id` int(11) default NULL COMMENT '操作人id',
`remark` varchar(1000) default NULL COMMENT '備注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
系統模塊介紹
系統管理員管理
超級管理員才有的權限,可以增加、修改、洗掉系統管理員,


教師/學生管理
管理員和超管都可以操作,新增、修改、洗掉等操作,
1.管理員和超管新增的默認是激活狀態,
2.教師和學生注冊申請過來的,需要管理員激活(也就是賬號審核功能),


分類管理
管理員和超管都可以操作,新增、修改、洗掉等操作,

圖書管理
管理員和超管都可以操作,新增、修改、洗掉、借閱等操作,
學生/教師 僅僅有查看圖書功能

借閱操作是在此界面進行操作的,選擇書本后進行借閱操作
1.借閱人需要選擇
2.數量現在默認是1
3.需選擇歸還日期

選擇借閱人界面

借閱資訊管理
管理員和超管都可以操作,歸還、續借等操作,
學生/教師 僅僅只能查看自己的借閱資訊

續借和歸還也只能由管理員來操作
注冊功能

修改密碼

代碼目錄
java檔案

頁面

后端分層

代碼精選
借閱資訊查詢
public Map queryByPage(RecordVO vo, int start, int pageSize)
{
String status="-1";
String content="";
Map retMap = new HashMap();
try
{
String sqlStrCount = "select count(1) from Record a,books b,user c where 1=1 and a.book=b.id and c.id=a.userId ";
String sqlStr = "select a.*,b.name bookName,c.name userName," +
" (select name from user c where c.id=a.admin_id) admin_name from Record a,books b,user c where 1=1 and a.book=b.id and c.id=a.userId ";
String bookName = vo.getBookName();
if(!"".equals(bookName)){
sqlStrCount +=" and b.name like'%"+bookName+"%'";
sqlStr +=" and b.name like'%"+bookName+"%'";
}
String userName = vo.getUserName();
if(!"".equals(userName)){
sqlStrCount +=" and c.name like'%"+userName+"%'";
sqlStr +=" and c.name like'%"+userName+"%'";
}
Timestamp date =vo.getStart_date();
if(date!=null){
sqlStrCount +=" and a.start_date='"+date+"'";
sqlStr +=" and a.start_date='"+date+"'";
}
String userId = StringHelper.convertStringNull(vo.getUserId());
if(!"".equals(userId)){
sqlStrCount +=" and a.userid='"+userId+"'";
sqlStr +=" and a.userid='"+userId+"'";
}
sqlStr +="order by a.id limit "+start+", "+pageSize ;
ps = this.getWrappedConnection().prepareStatement(sqlStrCount);
rs = ps.executeQuery();
int totalCount=0;
if (rs.next())
{
totalCount = rs.getInt(1);
}
retMap.put("totalCount", String.valueOf(totalCount));
rs=null;
ps = this.getWrappedConnection().prepareStatement(sqlStr);
rs = ps.executeQuery();
List list = new ArrayList();
RecordVO recordVO = null;
while (rs.next())
{
recordVO = new RecordVO();
recordVO.setId(rs.getString("id"));
recordVO.setBook(rs.getString("book"));
recordVO.setBookName(rs.getString("bookName"));
recordVO.setUserId(rs.getString("userId"));
recordVO.setUserName(rs.getString("userName"));
recordVO.setStart_date(rs.getTimestamp("start_date"));
recordVO.setEnd_date(rs.getTimestamp("end_date"));
recordVO.setReturn_date(rs.getTimestamp("return_date"));
recordVO.setState(rs.getString("state"));
recordVO.setAdmin_id(rs.getString("admin_id"));
recordVO.setAdmin_name(rs.getString("admin_name"));
recordVO.setRemark(rs.getString("remark"));
list.add(recordVO);
}
retMap.put("list", list);
status="1";
}
catch (Exception e)
{
e.printStackTrace();
}finally{
try
{
this.cleanUp();
}
catch (Exception e)
{
e.printStackTrace();
}
}
retMap.put("status", status);
retMap.put("content", content);
return retMap;
}
借閱記錄添加
public Map add(RecordVO recordVO)
{
String status="-1";
String content="";
String id="";
Map retMap = new HashMap();
try
{
String sqlStr = "insert into Record(book,userId,start_date,end_date,state,admin_id,remark) values (?,?,?,?,?,?,?)";
ps = this.getWrappedConnection().prepareStatement(sqlStr,Statement.RETURN_GENERATED_KEYS);
ps.setString(1, recordVO.getBook());
ps.setString(2, recordVO.getUserId());
ps.setTimestamp(3, recordVO.getStart_date());
ps.setTimestamp(4, recordVO.getEnd_date());
ps.setString(5, recordVO.getState());
ps.setString(6, recordVO.getAdmin_id());
ps.setString(7, recordVO.getRemark());
int state = ps.executeUpdate();
ResultSet generatedKeys = ps.getGeneratedKeys();
if (generatedKeys.next()) {
id=String.valueOf(generatedKeys.getInt(1));//主鍵
}
if(state>0){
status="1";
}
}
catch (Exception e)
{
e.printStackTrace();
}finally{
try
{
this.cleanUp();
}
catch (Exception e)
{
e.printStackTrace();
}
}
retMap.put("status", status);
retMap.put("content", content);
retMap.put("id", id);
return retMap;
}
總結
因為有之前類似系統的積累,所以編碼效率比較高吧,這也是老程式員的能力,有代碼參考 CV 的很快,哈哈!也希望能夠給朋友們帶來些許幫助!
注意點
1.樣式比較簡單,可能不太好看,因為沒有去花精力做樣式,
2.表設計可能不是特別完善、功能也比較簡單,離校太久有點想不起來了,
3.難免會有些bug吧,不過也不是上線用的,參考學習的話我覺得是足夠了,
4.代碼里面會放個部署檔案,小伙伴們可以試試怎么部署,
**看到這里的大佬,動動發財的小手 點贊 + 回復 + 收藏,能【 關注 】一波就更好了,
想要代碼的 加微信 或 私聊 我!
為了幫助更多小白從零進階 Java 工程師,從CSDN官方那邊搞來了一套 《Java 工程師學習成長知識圖譜》,尺寸 870mm x 560mm,展開后有一張辦公桌大小,也可以折疊成一本書的尺寸,原件129元現價 29 元,先到先得,有興趣的小伙伴可以了解一下!

★ 更多精彩
? Java 連連看 ?
? Java飛機大戰 ?
? Java植物大戰僵尸 ?
? Java坦克大戰,回憶童年!?
? Java掃雷小游戲,以前上學經常玩 ?
? Java學生宿舍管理系統 ?
? Java實驗室預約管理系統 ?
? Java學生成績管理系統 ?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/286285.html
標籤:java
