搭建Java开发环境、IDEA、MySQL等工具;搭建本地服务器和web前台网站,Ajax用于服务端与客户端之间异步通信;前端基于HTML、CSS、 JS、JSP、jQuery实现用户界面;搭建、设计MySQL数据库;后端使用Java语言实现学生注册、学生登陆、查看个人信息、打印准考证、查询成绩、网上缴费等学生端基本功能和新闻管理、缴费管理、录取管理等教师端基本功能;使用Springboot和Mybatis为后端框架;使用Maven为项目构建工具;使用BootStrap进行UI设计;使用JSTL标识库用于减少JSP文件的Java代码;使用Navicat软件进行可视化操作。
使用JS、JSP、Java语言,在IDEA环境下,设计实现一下高效简洁的招生管理网站(系统)。在当今社会,教育发展越来越迅速,招生管理系统可以利于考生报名考试和教师对考生报考信息的管理。
本系统要求实现以下基本需求:
学生端需求:
(1) 注册报名:学生进入网站想要报考,必须先注册账号才能进行报名、查询等等操作,否则只能以游客身份浏览首页。报名时每个学生可以报考三个专业、每个专业不能相同。
(2) 查看个人信息:学生完成注册后都可以查看自己的个人信息,也可以修改自己的信息。
(3) 打印准考证:报考学生完成在线报名后,可以查看自己的准考证并且可以打印使用。
(4) 网上缴费:学生报名后,必须缴纳报名费,否则无法生成考生身份;后台只会有账号信息而不会有考生信息。
(5) 成绩、录取查询:学生参加完考试后,可以在七天之内登录网站查看自己的成绩以及自己是否被录取。
管理员端需求:
(1) 管理缴费:管理员可以在后台查看报考学生的缴费信息,如有学生报名但未缴费,也可以通过后端进行补缴。还可以将缴费信息导出为文件。
(2) 新闻管理:管理员可以在后台对网站上添加新闻、修改新闻、删除新闻、编辑新闻。
(3) 考生信息管理:后台上可以查看修改考生的个人信息;还可以将缴费信息导出为文件。
(4) 考场管理:在后台上可以设置考生考场的位置和最大参考人数;安排考生的考场和座位;可以新添考场或者删除考场,也可以导出考场表。
(5) 录取管理:在后台上可以输入考生的成绩、更新考生的录取状态。
(6) 统计管理:可以通过表格方式查看各个专业的报考、录取情况;通过图表查看报名考生、录取考生在全国的分布。
根据需求分析的结果,本系统至少要分为以下三个模块:注册模块、登录模块、学生应用系统模块、管理员应用系统模块,分别用于注册报名、登录网站、完成学生的各种操作、完成管理员的各种操作。
招生管理系统具体实现和功能为:
一、前端:1.HTML页面,显示报名网站的首页;2.学生应用系统页面:注册报名进入应用系统,同时也可以点击功能进入其他页面(如个人信息页面、查看打印准考证页面等等)。
二、后端:1.逻辑层:控制层、业务逻辑层、数据持久层、系统服务层实现后端基本功能;业务逻辑层中包含Ajax技术,用于向前端发送请求;测试类通过引入junit.jar包进行单元测试。2.数据库:本地MySQL数据库实现各种信息(如考场信息、考生信息)的存储。3.SpringBoot:利用框架自身集成的tomcat提供系统服务。4.Mybatis:通过对象类和数据库类名的映射,免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
本系统的整体功能模块图如1-1所示。
图1-1 招生管理系统功能结构图
1.3 招生管理系统详细设计(具体实现)
(1)招生管理系统总体功能展示如图1-2所示:
图1-2 总体功能展示图
(2)数据库设计
此处展示我设计的报名信息表、考场表、缴费信息表等七张表,如图1-3、图1-4、图1-5所示:
(3)代码实现
我主要负责设计开发管理员后端的逻辑功能、部署项目、使用Mybatis实现对象类和数据库映射进行数据库信息增删改查,以下展示部分代码,如下:
(1) controller层
package com.example.demo1.controller;
import com.example.demo1.modal.DzBmdjT;
import com.example.demo1.modal.DzKsxxT;
import com.example.demo1.modal.DzPayT;
import com.example.demo1.service.DzKsxxService;
import com.example.demo1.service.DzPayService;
import com.example.demo1.service.DzbmdjService;
import com.example.demo1.util.DateUtil;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.w3c.dom.stylesheets.LinkStyle;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
* 支付控制层
*/
@Controller
public class DzPayController {
//注入服务层
@Resource
private DzPayService payService;
@Resource
private DzbmdjService bmdjService;
@Resource
private DzKsxxService ksxxService;
/**
* 缴费页面跳转
* @return
*/
@RequestMapping(value = "pay", method = RequestMethod.GET)
public String payView() {
return "student/weChatPayment";
}
/**
* 一键缴费逻辑
* @param session
* @return
*/
@RequestMapping(value = "/pay", method = RequestMethod.POST)
@ResponseBody
public Boolean paySuccessView(HttpSession session) {
// 获取身份证号码
String sfzh = session.getAttribute("sfzh").toString();
//创建报名登记对象
DzBmdjT dzBmdjT = new DzBmdjT();
dzBmdjT.setSfzh(sfzh);
//根据身份证号码查询报名登记列表
List<DzBmdjT> dzBmdjTList = bmdjService.getBmdjList(dzBmdjT);
//拿到报名登记id
int bmdjId = dzBmdjTList.get(0).getId();
//根据身份证号查询 Id
List<DzBmdjT> BmdjTList = bmdjService.getBmdjList(dzBmdjT);
//获取姓名
String xm = BmdjTList.get(0).getXm();
//根据b报名登记id查询支付表中是否存在支付数据,若不存在则执行插入方法
List<DzPayT> dzPayTList = payService.getPayLists(bmdjId);
//如果支付列表不为空
if (dzPayTList.isEmpty()) {
//向支付对象中存入信息
DzPayT dzPayT = new DzPayT();
dzPayT.setBmdjId(bmdjId);
dzPayT.setJffs(1);
dzPayT.setPrice(120);
dzPayT.setPayStatus(1);
dzPayT.setOrderNo("123");
dzPayT.setInputDate(new DateUtil().getStringDate("yyyy-MM-dd HH:mm:ss"));
dzPayT.setInputName(xm);
//执行支付方法
int a = payService.getPayList(dzPayT);
if (a == 1) {
//支付成功后,再次插入考生信息数据
intsertksxx(dzBmdjTList.get(0));
return true;
}
}
return false;
}
/**
* 缴费成功页面跳转
* @param model
* @param session
* @return
*/
@RequestMapping(value = "paySuccess", method = RequestMethod.GET)
public String paySuccess(Model model, HttpSession session) {
//取出支付信息
String sfzh = session.getAttribute("sfzh").toString();
//根据身份证号查询 Id
DzBmdjT dzBmdjT = new DzBmdjT();
dzBmdjT.setSfzh(sfzh);
List<DzBmdjT> dzBmdjTList = bmdjService.getBmdjList(dzBmdjT);
int bmdjId = dzBmdjTList.get(0).getId();
List<DzPayT> payList = payService.getPayLists(bmdjId);
model.addAttribute("pay", payList.get(0));
return "student/paymentSuccessful";
}
/**
* 信息页面跳转
* @param model
* @param msg
* @return
*/
@RequestMapping(value = "/msg", method = RequestMethod.GET)
public String payMsgView(Model model, String msg) {
model.addAttribute("msg", msg);
return "student/msg";
}
//考试信息存储
public void intsertksxx(DzBmdjT bmdj) {
DzKsxxT dzksxxT = new DzKsxxT();
dzksxxT.setBmdjId(bmdj.getId());
dzksxxT.setKsh(bmdj.getKsh());
dzksxxT.setSfzh(bmdj.getSfzh());
dzksxxT.setZkzh("2018035101000");
dzksxxT.setXm(bmdj.getXm());
dzksxxT.setInputName(bmdj.getSfzh());
dzksxxT.setInputDate(new DateUtil().getStringDate("yyyy-MM-dd HH:mm:ss"));
//执行一个插入
ksxxService.insert(dzksxxT);
}
}
package com.example.demo1.controller;
import com.example.demo1.modal.DzBmdjT;
import com.example.demo1.modal.DzKaoChangT;
import com.example.demo1.service.DzbmdjService;
import com.example.demo1.service.DzkaochangService;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* 导出excel控制层
*/
@Controller
public class ExportController {
//注入服务层
@Resource
private DzbmdjService dzBmdjService;
@Resource
private DzkaochangService dzKaoChangService;
/**
* 考生信息导出逻辑
*
* @return
* @throws IOException
*/
@RequestMapping(value = "ksxxExport", method = RequestMethod.GET)
public ResponseEntity<byte[]> ksxxExport() throws IOException {
//创建工作薄
XSSFWorkbook wb = new XSSFWorkbook();
//分页名称
XSSFSheet sheet = wb.createSheet("结果");
//生成一种样式
XSSFCellStyle style = wb.createCellStyle();
//设值样式
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
//生成一种字体
XSSFFont font = wb.createFont();
//设值字体
font.setFontName("微软雅黑");
//设值字体大小
font.setFontHeightInPoints((short) 12);
//字体加粗
font.setBold(true);
//在样式中引用这种字体
style.setFont(font);
//
//生成并设值另一个样式
XSSFCellStyle style2 = wb.createCellStyle();
style2.setAlignment(HorizontalAlignment.CENTER);
style2.setVerticalAlignment(VerticalAlignment.CENTER);
//生成另一种字体
XSSFFont font2 = wb.createFont();
//设值字体
font2.setFontName("微软雅黑");
//设值字体大小
font2.setFontHeightInPoints((short) 12);
//在样式2中引用这种字体
style2.setFont(font2);
//设值列宽
sheet.setColumnWidth(0, 25 * 256);//身份证号列宽
sheet.setColumnWidth(1, 22 * 256);//考生号列宽
sheet.setColumnWidth(2, 11 * 256);//姓名列宽
sheet.setColumnWidth(3, 9 * 256);//性别列宽
sheet.setColumnWidth(4, 18 * 256);//政治面貌列宽
sheet.setColumnWidth(5, 28 * 256);//毕业高中列宽
sheet.setColumnWidth(6, 18 * 256);//联系电话列宽
String[] excelHeaderArr = {"身份证号码", "考生号", "姓名", "性别", "政治面貌", "毕业高中", "联系电话"};
//生成表格第一行 表头
XSSFRow row = sheet.createRow(0);
XSSFCell cell = null;
for (int i = 0; i < excelHeaderArr.length; i++) {
cell = row.createCell(i);
//设值数据
cell.setCellValue(excelHeaderArr[i]);
cell.setCellStyle(style);
}
//报名登记信息列表
DzBmdjT dzBmdjT = new DzBmdjT();
List<DzBmdjT> bmdjList = dzBmdjService.getBmdjList(dzBmdjT);
//循环报名登记列表并创建行与列
for (int i = 0; i < bmdjList.size(); i++) {
XSSFRow row1 = sheet.createRow(i + 1);
cell = row1.createCell(0);
cell.setCellValue(bmdjList.get(i).getSfzh());
cell.setCellStyle(style2);
cell = row1.createCell(1);
cell.setCellValue(String.valueOf(bmdjList.get(i).getKsh()));
cell.setCellStyle(style2);
cell = row1.createCell(2);
cell.setCellValue(bmdjList.get(i).getXm());
cell.setCellStyle(style2);
cell = row1.createCell(3);
cell.setCellValue(bmdjList.get(i).getXb());
cell.setCellStyle(style2);
cell = row1.createCell(4);
cell.setCellValue(bmdjList.get(i).getZzmm());
cell.setCellStyle(style2);
cell = row1.createCell(5);
cell.setCellValue(bmdjList.get(i).getBygz());
cell.setCellStyle(style2);
cell = row1.createCell(6);
cell.setCellValue(bmdjList.get(i).getLxdh());
cell.setCellStyle(style2);
}
```
```java
//创建输出流对象
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
wb.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
outputStream.close();
}
//下载文件
HttpHeaders httpHeaders = new HttpHeaders();
String fileName = new String("考生信息表.xlsx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
httpHeaders.setContentDispositionFormData("attachment", fileName);
httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
ResponseEntity<byte[]> filebyte = new ResponseEntity<byte[]>(outputStream.toByteArray(), httpHeaders, HttpStatus.CREATED);
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
outputStream.close();
}
return filebyte;
}
/**
* 考场信息导出
* @return
* @throws IOException
*/
@RequestMapping(value = "kcExport", method = RequestMethod.GET)
public ResponseEntity<byte[]> kcExport() throws IOException {
//创建工作薄
XSSFWorkbook wb = new XSSFWorkbook();
//分页名称
XSSFSheet sheet = wb.createSheet("结果");
//生成一种样式
XSSFCellStyle style = wb.createCellStyle();
//设值样式
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
//生成一种字体
XSSFFont font = wb.createFont();
//设值字体
font.setFontName("微软雅黑");
//设值字体大小
font.setFontHeightInPoints((short) 12);
//字体加粗
font.setBold(true);
//在样式中引用这种字体
style.setFont(font);
//生成并设值另一个样式
XSSFCellStyle style2 = wb.createCellStyle();
style2.setAlignment(HorizontalAlignment.CENTER);
style2.setVerticalAlignment(VerticalAlignment.CENTER);
//生成另一种字体
XSSFFont font2 = wb.createFont();
//设值字体
font2.setFontName("微软雅黑");
//设值字体大小
font2.setFontHeightInPoints((short) 12);
//在样式2中引用这种字体
style2.setFont(font2);
//设值列宽
sheet.setColumnWidth(0, 25 * 256);//考场编号列宽
sheet.setColumnWidth(1, 22 * 256);//考场地点列宽
sheet.setColumnWidth(2, 11 * 256);//容纳人数列宽
String[] excelHeaderArr = {"考场编号", "考场地点", "容纳人数"};
//生成表格第一行 表头
XSSFRow row = sheet.createRow(0);
XSSFCell cell = null;
for (int i = 0; i < excelHeaderArr.length; i++) {
cell = row.createCell(i);
//设值数据
打开系统,初始窗口化的界面如图1-6所示
图1-6 系统首页界面
图1-8 进行注册报名界面
图1-9注册报名成功界面
学生注册后在登录页面登录即可进入应用系统,进行各种下一步操作,如图1-10所示
图1-10进入应用系统界面
学生进入可以查看个人信息、打印准考证、网上缴费、查询成绩、查询录取情况,如图1-11、图1-12所示(展示部分)
图1-11查看个人信息界面
管理员(教师)登录后台系统,就可以进行包括对考生信息增删改查、考场信息的增删改查等各种管理操作,如图1-16、图1-17、图1-18、图1-19、图1-20、图1-21所示
图1-17录取管理界面
图1-18考场管理界面
https://download.csdn.net/download/champion564/86502489