Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之校園一卡通系統(tǒng)的實(shí)現(xiàn)
一、項(xiàng)目簡(jiǎn)述(+需求文檔+PPT)
功能:卡管理,卡消費(fèi),卡充值,圖書借閱,消費(fèi),記錄,注銷等等功能。
二、項(xiàng)目運(yùn)行
環(huán)境配置:
Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)
項(xiàng)目技術(shù):
JSP + Servlet + html+ css + JavaScript + JQuery + Ajax 等等





用戶管理操作控制層:
/**
* 用戶管理操作
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 用戶添加頁面
* @return
*/
@GetMapping("/add")
public String create() {
return "user/add";
}
/**
* 用戶添加操作
* @param user
* @return
*/
@PostMapping("/add")
@ResponseBody
public Map<String, Object> add(@RequestBody User user) {
if(StringUtils.isEmpty(user.getUserName())){
return MapControl.getInstance().error("請(qǐng)?zhí)顚懹脩裘?).getMap();
}
if(StringUtils.isEmpty(user.getName())){
return MapControl.getInstance().error("請(qǐng)?zhí)顚懨Q").getMap();
}
if(StringUtils.isEmpty(user.getUserPwd())){
return MapControl.getInstance().error("請(qǐng)?zhí)顚懨艽a").getMap();
}
int result = userService.create(user);
if (result <= 0) {
return MapControl.getInstance().error().getMap();
}
return MapControl.getInstance().success().getMap();
}
/**
* 根據(jù)id刪除
* @param id
* @return
*/
@PostMapping("/delete/{id}")
@ResponseBody
public Map<String, Object> delete(@PathVariable("id") Integer id) {
int result = userService.delete(id);
if (result <= 0) {
return MapControl.getInstance().error().getMap();
}
return MapControl.getInstance().success().getMap();
}
//批量刪除
@PostMapping("/delete")
@ResponseBody
public Map<String, Object> delete(String ids) {
int result = userService.delete(ids);
if (result <= 0) {
return MapControl.getInstance().error().getMap();
}
return MapControl.getInstance().success().getMap();
}
/**
* 編輯用戶信息操作
* @param user
* @return
*/
@PostMapping("/edit")
@ResponseBody
public Map<String, Object> edit(@RequestBody User user) {
if(StringUtils.isEmpty(user.getUserName())){
return MapControl.getInstance().error("請(qǐng)?zhí)顚懹脩裘?).getMap();
}
if(StringUtils.isEmpty(user.getName())){
return MapControl.getInstance().error("請(qǐng)?zhí)顚懨Q").getMap();
}
if(StringUtils.isEmpty(user.getUserPwd())){
return MapControl.getInstance().error("請(qǐng)?zhí)顚懨艽a").getMap();
}
int result = userService.update(user);
if (result <= 0) {
return MapControl.getInstance().error().getMap();
}
return MapControl.getInstance().success().getMap();
}
/**
* 根據(jù)id查詢,跳轉(zhuǎn)修改頁面
* @param id
* @param modelMap
* @return
*/
@GetMapping("/edit/{id}")
public String edit(@PathVariable("id") Integer id, ModelMap modelMap) {
User user = userService.detail(id);
modelMap.addAttribute("user", user);
return "user/edit";
}
//查詢所有
@PostMapping("/query")
@ResponseBody
public Map<String, Object> query(@RequestBody User user) {
List<User> list = userService.query(user);
Integer count = userService.count(user);
return MapControl.getInstance().success().page(list, count).getMap();
}
//跳轉(zhuǎn)列表頁面
@GetMapping("/list")
public String list() {
return "user/list";
}
}
登錄控制層:
@Controller
public class LoginController {
@Autowired
private UserService userService;
@Autowired
private TeacherService teacherService;
@Autowired
private StudentService studentService;
//跳轉(zhuǎn)登錄頁面
@GetMapping("/login")
public String login() {
return "login";
}
//登錄操作
@PostMapping("/login")
@ResponseBody
public Map<String, Object> login(String userName, String password, String captcha, String type, HttpSession session) {
//判斷用戶名、密碼、用戶類型、驗(yàn)證碼是否為空
if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(password) || StringUtils.isEmpty(captcha) || StringUtils.isEmpty(type)) {
return MapControl.getInstance().error("用戶名或密碼不能為空").getMap();
}
//獲取系統(tǒng)生成的驗(yàn)證碼
String _captcha = (String) session.getAttribute("captcha");
//先判斷驗(yàn)證碼是否正確
if (!(captcha.toLowerCase()).equals(_captcha.toLowerCase())) {
//驗(yàn)證碼錯(cuò)誤
return MapControl.getInstance().error("驗(yàn)證碼錯(cuò)誤").getMap();
}
//判斷用戶類型
if ("1".equals(type)) { //管理員驗(yàn)證登錄
User user = userService.login(userName, MD5Utils.getMD5(password)); //對(duì)密碼進(jìn)行加密處理,因?yàn)閿?shù)據(jù)庫中存儲(chǔ)的是加密后的密碼
if (user != null) {
session.setAttribute("user", user);
session.setAttribute("type", 1);
return MapControl.getInstance().success().add("data", user).getMap();
} else {
return MapControl.getInstance().error("用戶名或密碼錯(cuò)誤").getMap();
}
}
if ("2".equals(type)) { //老師驗(yàn)證登錄
Teacher teacher = teacherService.login(userName, MD5Utils.getMD5(password));
if (teacher != null) {
session.setAttribute("user", teacher);
session.setAttribute("type", "2");
return MapControl.getInstance().success().add("data", teacher).getMap();
} else {
return MapControl.getInstance().error("用戶名或密碼錯(cuò)誤").getMap();
}
}
if ("3".equals(type)) { //學(xué)生驗(yàn)證登錄
Student student = studentService.login(userName, MD5Utils.getMD5(password));
if (student != null) {
session.setAttribute("user", student);
session.setAttribute("type", "3");
return MapControl.getInstance().success().add("data", student).getMap();
} else {
return MapControl.getInstance().error("用戶名或密碼錯(cuò)誤").getMap();
}
}
return MapControl.getInstance().getMap();
}
}
生成驗(yàn)證碼:
@Controller
@RequestMapping("/captcha")
public class CaptchaController {
private char[] codeSequence = {'A', '1', 'B', 'C', '2', 'D', '3', 'E', '4', 'F', '5', 'G', '6', 'H', '7', 'I', '8', 'J',
'K', '9', 'L', '1', 'M', '2', 'N', 'P', '3', 'Q', '4', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z'};
@RequestMapping("/code")
public void getCode(HttpServletResponse response, HttpSession session) throws IOException {
int width = 80;
int height = 37;
Random random = new Random();
//設(shè)置response頭信息
//禁止緩存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//生成緩沖區(qū)image類
BufferedImage image = new BufferedImage(width, height, 1);
//產(chǎn)生image類的Graphics用于繪制操作
Graphics g = image.getGraphics();
//Graphics類的樣式
g.setColor(this.getColor(200, 250));
g.setFont(new Font("Times New Roman", 0, 28));
g.fillRect(0, 0, width, height);
//繪制干擾線
for (int i = 0; i < 40; i++) {
g.setColor(this.getColor(130, 200));
int x = random.nextInt(width);
int y = random.nextInt(height);
int x1 = random.nextInt(12);
int y1 = random.nextInt(12);
g.drawLine(x, y, x + x1, y + y1);
}
//繪制字符
String strCode = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
strCode = strCode + rand;
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
g.drawString(rand, 13 * i + 6, 28);
}
//將字符保存到session中用于前端的驗(yàn)證
session.setAttribute("captcha", strCode.toLowerCase());
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
response.getOutputStream().flush();
}
public Color getColor(int fc, int bc) {
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}
到此這篇關(guān)于Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之校園一卡通系統(tǒng)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java 校園一卡通系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java實(shí)戰(zhàn)項(xiàng)目之校園跑腿管理系統(tǒng)的實(shí)現(xiàn)
- Java?實(shí)戰(zhàn)范例之校園二手市場(chǎng)系統(tǒng)的實(shí)現(xiàn)
- Java 實(shí)戰(zhàn)練手項(xiàng)目之校園超市管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)項(xiàng)目錘煉之校園宿舍管理系統(tǒng)的實(shí)現(xiàn)流程
- Java實(shí)現(xiàn)的具有GUI的校園導(dǎo)航系統(tǒng)的完整代碼
- JavaWeb開發(fā)基于ssm的校園服務(wù)系統(tǒng)(實(shí)例詳解)
- Java模擬HTTP Get Post請(qǐng)求 輕松實(shí)現(xiàn)校園BBS自動(dòng)回帖
- Java基于Dijkstra算法實(shí)現(xiàn)校園導(dǎo)游程序
相關(guān)文章
Java String轉(zhuǎn)換時(shí)為null的解決方法
這篇文章主要介紹了Java String轉(zhuǎn)換時(shí)為null的解決方法,需要的朋友可以參考下2017-07-07
springboot集成PageHelper分頁失效的原因及解決
項(xiàng)目啟動(dòng)初期,在集成mybatis的分頁插件,自定義封裝了一個(gè)分頁的工具類,方便后期項(xiàng)目的擴(kuò)展,結(jié)果無法分頁了,怎么設(shè)置搞都沒辦法正常分頁,所以本文將給大家介紹一下springboot集成PageHelper分頁失效的原因及解決,需要的朋友可以參考下2023-10-10
java中String、StringBuffer與StringBuilder的區(qū)別
這篇文章主要介紹了java 中String和StringBuffer與StringBuilder的區(qū)別,在開發(fā)過程中經(jīng)常會(huì)用到String這個(gè)類進(jìn)行操作。需要的朋友可以收藏下,方便下次瀏覽觀看2021-12-12
SpringBoot接口返回結(jié)果封裝方法實(shí)例詳解
在實(shí)際項(xiàng)目中,一般會(huì)把結(jié)果放在一個(gè)封裝類中,封裝類中包含http狀態(tài)值,狀態(tài)消息,以及實(shí)際的數(shù)據(jù)。這里主要記錄兩種方式,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-09-09
PostMan如何傳參給@RequestBody(接受前端參數(shù))
這篇文章主要介紹了PostMan如何傳參給@RequestBody(接受前端參數(shù)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
在CentOS系統(tǒng)上安裝Java?JDK?8簡(jiǎn)單步驟
最近購買一臺(tái)新的云服務(wù)器,用于開發(fā)學(xué)習(xí)使用,因此需要安裝很多的組件,下面這篇文章主要給大家介紹了關(guān)于在CentOS系統(tǒng)上安裝Java?JDK8的簡(jiǎn)單步驟,需要的朋友可以參考下2023-12-12
Java獲取HttpServletRequest的三種方法詳解
這篇文章主要介紹了Java獲取HttpServletRequest的三種方法詳解,是一個(gè)接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest2023-11-11
HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下

