java Web 驾校管理系统设计与实现
博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了2000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
文末下方有源码获取地址

第4章 总体设计
4.1 系统总体模块图
驾校管理系统主要分为3个权限:教练权限、学员权限、管理员权限。不同的身份登录系统会有不同的权限,进行不同的操作,满足驾校的正常使用功能,具体功能模块图如4.1所示:

图4.1 系统总体模块图
4.2 数据库层的设计
4.2.1 概念模型设计
根据驾校管理的详细设计系统的要求,规划出了以下一些实体。


4.2.2 关系模式设计
在驾校管理系统中,实体有管理员实体,教练实体,学员实体,公告实体,留言实体,车辆实体,培训班实体,预约实体,报名实体,驾校介绍实体等等,他们之间的关系如图4.11所示:

图4.9 实体之间关系图
4.3 本章小结
本章主要介绍的内容是总体设计或者概要设计,介绍了驾校管理系统的设计,主要是在架构设计、总体模块设计和数据库设计的方面介绍的,为进一步的详细设计做准备。
第5章 详细设计
详细设计阶段的任务就是把在总体设计阶段提出的比较抽象概括的解决问题的方法具体化,也就是“应该怎样具体地实现这个系统”。在本阶段将包括数据库的设计和每个模块的详细设计,确定实现模块功能所需要的算法和数据结构。
5.1 后台设计
当用户需要登录的时候,需要有响应的页面来实现这一功能。登录界面是用来支持用户进行登录功能操作的界面,当在界面中输入普通用户的用户名、密码,就可以通过身份验证进入该系统。 用户登录和身份验证功能模块的设计流程如图5.1所示:

图5.1 管理员登录流程图
教练登录信息验证界面是非常重要的一部分,它接收登录表单提交的信息,并在用户信息表里检验是否存在对应的用户,和判断用户的类型以便获得相应的权限。
5.2 数据库设计
5.2.1 逻辑结构设计
1 管理员( 管理员编号,用户名,密码,姓名 )
2 教练( 教练编号,用户名,密码,姓名,联系电话,联系地址,驾龄,照片 )
3 学员( 学员编号,用户名,密码,姓名,联系电话,联系地址,职业,年龄 )
4 公告( 公告编号,标题,内容,发布时间 )
5 留言( 留言编号,留言,用户,时间,状态,回复 )
6 车辆( 车辆编号,车辆名称,介绍,车型,颜色,购入时间 )
7 培训班( 培训班编号,班级名称,训练时间,班级人数,说明,教练,车辆 )
8 预约( 预约编号,流水,培训班,学员,说明,联系电话,状态,提交时间 )
9 报名( 报名编号,标题,内容,学员,分配教练,联系电话,状态,报名时间 )
10 驾校介绍( 驾校介绍编号,标题,介绍,发布时间 )
5.2.2 物理结构设计
由各个关系模式和根据需求分析阶段数据字典的数据项描述,给出各数据表结构。
(1) 管理员信息表如表5.1所示:
表5.1 管理员信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
glyid |
INTEGER |
11 |
是 |
管理员编号 |
|
2 |
yhm |
VARCHAR |
40 |
否 |
用户名 |
|
3 |
mm |
VARCHAR |
40 |
否 |
密码 |
|
4 |
xm |
VARCHAR |
40 |
否 |
姓名 |
(2)教练信息表如表5.2所示:
表5.2 教练信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
jlid |
INTEGER |
11 |
是 |
教练编号 |
|
2 |
yhm |
VARCHAR |
40 |
否 |
用户名 |
|
3 |
mm |
VARCHAR |
40 |
否 |
密码 |
|
4 |
xm |
VARCHAR |
40 |
否 |
姓名 |
|
5 |
lxdh |
VARCHAR |
40 |
否 |
联系电话 |
|
6 |
lxdz |
VARCHAR |
40 |
否 |
联系地址 |
|
7 |
jl |
VARCHAR |
40 |
否 |
驾龄 |
|
8 |
zp |
VARCHAR |
40 |
否 |
照片 |
(3)管理员信息表如表5.3所示:
表5.3 管理员信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
xyid |
INTEGER |
11 |
是 |
学员编号 |
|
2 |
yhm |
VARCHAR |
40 |
否 |
用户名 |
|
3 |
mm |
VARCHAR |
40 |
否 |
密码 |
|
4 |
xm |
VARCHAR |
40 |
否 |
姓名 |
|
5 |
lxdh |
VARCHAR |
40 |
否 |
联系电话 |
|
6 |
lxdz |
VARCHAR |
40 |
否 |
联系地址 |
|
7 |
zy |
VARCHAR |
40 |
否 |
职业 |
|
8 |
nl |
VARCHAR |
40 |
否 |
年龄 |
(4)公告信息表如表5.4所示:
表5.4 公告信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
ggid |
INTEGER |
11 |
是 |
公告编号 |
|
2 |
bt |
VARCHAR |
40 |
否 |
标题 |
|
3 |
nr |
VARCHAR |
40 |
否 |
内容 |
|
4 |
fbsj |
VARCHAR |
40 |
否 |
发布时间 |
(5)留言信息表如表5.5所示:
表5.5 留言信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
lyid |
INTEGER |
11 |
是 |
留言编号 |
|
2 |
ly |
VARCHAR |
40 |
否 |
留言 |
|
3 |
yh |
VARCHAR |
40 |
否 |
用户 |
|
4 |
sj |
VARCHAR |
40 |
否 |
时间 |
|
5 |
zt |
VARCHAR |
40 |
否 |
状态 |
|
6 |
hf |
VARCHAR |
40 |
否 |
回复 |
(6)车辆信息表如表5.6所示:
表5.6 车辆信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
clid |
INTEGER |
11 |
是 |
车辆编号 |
|
2 |
clmc |
VARCHAR |
40 |
否 |
车辆名称 |
|
3 |
js |
VARCHAR |
40 |
否 |
介绍 |
|
4 |
cx |
VARCHAR |
40 |
否 |
车型 |
|
5 |
ys |
VARCHAR |
40 |
否 |
颜色 |
|
6 |
grsj |
VARCHAR |
40 |
否 |
购入时间 |
(7)培训班信息表如表5.5所示:
表5.5 培训班信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
pxbid |
INTEGER |
11 |
是 |
培训班编号 |
|
2 |
bjmc |
VARCHAR |
40 |
否 |
班级名称 |
|
3 |
xlsj |
VARCHAR |
40 |
否 |
训练时间 |
|
4 |
bjrs |
VARCHAR |
40 |
否 |
班级人数 |
|
5 |
sm |
VARCHAR |
40 |
否 |
说明 |
|
6 |
jl |
VARCHAR |
40 |
否 |
教练 |
|
7 |
cl |
VARCHAR |
40 |
否 |
车辆 |
(8)预约信息表如表5.8所示:
表5.8 预约信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
yyid |
INTEGER |
11 |
是 |
预约编号 |
|
2 |
ls |
VARCHAR |
40 |
否 |
流水 |
|
3 |
pxb |
VARCHAR |
40 |
否 |
培训班 |
|
4 |
xy |
VARCHAR |
40 |
否 |
学员 |
|
5 |
sm |
VARCHAR |
40 |
否 |
说明 |
|
6 |
lxdh |
VARCHAR |
40 |
否 |
联系电话 |
|
7 |
zt |
VARCHAR |
40 |
否 |
状态 |
|
8 |
tjsj |
VARCHAR |
40 |
否 |
提交时间 |
(9)报名信息表如表5.9所示:
表5.9 报名信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
bmid |
INTEGER |
11 |
是 |
报名编号 |
|
2 |
bt |
VARCHAR |
40 |
否 |
标题 |
|
3 |
nr |
VARCHAR |
40 |
否 |
内容 |
|
4 |
xy |
VARCHAR |
40 |
否 |
学员 |
|
5 |
fpjl |
VARCHAR |
40 |
否 |
分配教练 |
|
6 |
lxdh |
VARCHAR |
40 |
否 |
联系电话 |
|
7 |
zt |
VARCHAR |
40 |
否 |
状态 |
|
8 |
bmsj |
VARCHAR |
40 |
否 |
报名时间 |
(10)驾校介绍信息表如表5.10所示:
表5.10 驾校介绍信息表
|
序号 |
字段名称 |
数据类型 |
长度 |
主键 |
描述 |
|
1 |
jxjsid |
INTEGER |
11 |
是 |
驾校介绍编号 |
|
2 |
bt |
VARCHAR |
40 |
否 |
标题 |
|
3 |
js |
VARCHAR |
40 |
否 |
介绍 |
|
4 |
fbsj |
VARCHAR |
40 |
否 |
发布时间 |
5.3 本章小结
本章主要是在上一章的总体设计的基础之上对系统进行详细设计,主要分为两个方面来设计,分别为后台设计和数据库设计,在后台设计方面,主要是设计的系统的权限分配,角色登录的验证;在数据库方面是设计系统的物理结构的设计和逻辑结构的设计。
第6章 系统的实施
6.1 登录模块界面
登录系统首页,出现用户名、密码的输入框,填写用户名和密码点击【提交】按钮,即可登录。具体的登录页面如图6.1所示:

图6.2 登录界面图
6.2培训班管理界面
培训班信息管理用于实现对系统内培训班信息的管理。系统用户可以新增培训班信息、移除培训班信息和更正培训班信息,以及培训班信息列表展现,在添加培训班信息培训班信息时,系统会自动查询系统中培训班表中的培训班编号字段,系统自动将培训班表中最大值加1作为该培训班表培训班记录的培训班编号,同时将培训班的培训班编号,培训班的班级名称,培训班的训练时间,培训班的班级人数,培训班的说明,培训班的教练,培训班的车辆 信息添加到培训班信息表中;在删除一条培训班记录时,先选中一条培训班记录,将该条培训班记录中的培训班编号作为查询条件在数据库中培训班信息表中进行查询,弹出“确定要删除培训班信息吗?”的对话框,若是,则执行删除培训班信息操作,否则退出删除操作;在更改培训班记录时,先选中一条培训班记录,将培训班信息显示在相应的修改培训班页面中,然后更改培训班信息表后保存到培训班信息表中;查看培训班信息记录时,选中要查看的培训班记录,系统根据用户选择培训班信息,在详细页面显示培训班信息

6.3 车辆管理界面
车辆信息管理用于实现对系统内车辆信息的管理。系统用户可以新增车辆信息、移除车辆信息和更正车辆信息,以及车辆信息列表展现,在添加车辆信息车辆信息时,系统会自动查询系统中车辆表中的车辆编号字段,系统自动将车辆表中最大值加1作为该车辆表车辆记录的车辆编号,同时将车辆的车辆编号,车辆的车辆名称,车辆的介绍,车辆的车型,车辆的颜色,车辆的购入时间 信息添加到车辆信息表中;在删除一条车辆记录时,先选中一条车辆记录,将该条车辆记录中的车辆编号作为查询条件在数据库中车辆信息表中进行查询,弹出“确定要删除车辆信息吗?”的对话框,若是,则执行删除车辆信息操作,否则退出删除操作;在更改车辆记录时,先选中一条车辆记录,将车辆信息显示在相应的修改车辆页面中,然后更改车辆信息表后保存到车辆信息表中;查看车辆信息记录时,选中要查看的车辆记录,系统根据用户选择车辆信息,在详细页面显示车辆信息

package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.bean.pxb;
import com.dao.pxbDao;
import com.util.DBO;
import java.util.List;
import java.sql.ResultSet;
public class pxbServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("gb2312");
System.out.println("method"+request.getParameter("method"));
String method=(String)request.getParameter("method");
if(method.equals("insert")){//培训班添加
insertM(request, response);
}else if(method.equals("list")){//培训班列表
ListM(request, response);
}else if(method.equals("delete")){//培训班删除
deleteM(request, response);
}else if(method.equals("modifyindex")){//培训班修改页面
modifyIndex(request, response);
}
else if(method.equals("modify")){//培训班修改
modifyM(request, response);
}else if(method.equals("detail")){//培训班详细信息
detailM(request, response);
}else if(method.equals("plist")){//培训班列表信息
PListM(request, response);
}
}
private void insertM(HttpServletRequest request, HttpServletResponse response){//培训班添加
pxbDao dao=new pxbDao();//声明DAO方法
pxb pxb=new pxb();//声明pxb bean对象方法
pxb.setPxbid((String)request.getParameter("keyid"));//培训班编号
String bjmc=(String)request.getParameter("bjmc");//变量:班级名称
pxb.setBjmc((String)request.getParameter("bjmc"));//赋值:班级名称
String xlsj=(String)request.getParameter("xlsj");//变量:训练时间
pxb.setXlsj((String)request.getParameter("xlsj"));//赋值:训练时间
String bjrs=(String)request.getParameter("bjrs");//变量:班级人数
pxb.setBjrs((String)request.getParameter("bjrs"));//赋值:班级人数
String sm=(String)request.getParameter("sm");//变量:说明
pxb.setSm((String)request.getParameter("sm"));//赋值:说明
String jl=(String)request.getParameter("jl");//变量:教练
pxb.setJl((String)request.getParameter("jl"));//赋值:教练
String cl=(String)request.getParameter("cl");//变量:车辆
pxb.setCl((String)request.getParameter("cl"));//赋值:车辆
response.setCharacterEncoding("gb2312");//设定页面字符集 防止乱码
DBO db=new DBO();
String sql="select count(1) as num from pxb where bjmc='"+bjmc+"'";
ResultSet rs=null;
int num=0;
try {
rs=db.query(sql);
if(rs.next()){
num=rs.getInt("num");
}
if(num>0){
request.setAttribute("flag", "操作失败、名称重复");
}else{
dao.insert(pxb);
request.setAttribute("flag", "操作成功");
}
request.getRequestDispatcher("pxb/pxbadd.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
private void ListM(HttpServletRequest request, HttpServletResponse response){//培训班信息列表
ResultSet rs=null;
pxbDao dao = new pxbDao();//声明DAO方法
String str=(String)request.getParameter("Page");//获取分页数
String sql="";
response.setCharacterEncoding("gb2312");//设定页面字符集 防止乱码
try{
if(str==null){
str="0";//如果没有 则默认当前页
}
rs=dao.qlist(sql);
PrintWriter out = response.getWriter();
request.setAttribute("rs", rs); //通过request 传值
request.getRequestDispatcher("pxb/pxblist.jsp?Page="+str).forward(request, response);
}catch(Exception e){
e.toString();
e.printStackTrace();
}
}
private void PListM(HttpServletRequest request, HttpServletResponse response){//测试信息列表
ResultSet rs=null;
pxbDao dao = new pxbDao();//声明DAO方法
System.out.println("alist");
String sql="";
response.setCharacterEncoding("gb2312");//设定页面字符集 防止乱码
try{
rs=dao.qlist(sql);
PrintWriter out = response.getWriter();
request.setAttribute("rs", rs);
request.getRequestDispatcher("pxb/pxbplist.jsp").forward(request, response);
}catch(Exception e){
e.toString();
e.printStackTrace();
}
}
private void modifyIndex(HttpServletRequest request, HttpServletResponse response){//培训班修改首页
ResultSet rs=null;
response.setCharacterEncoding("gb2312");//设定页面字符集 防止乱码
pxbDao dao = new pxbDao();//声明DAO方法
String keyid=(String)request.getParameter("keyid");
String sql="";
if(keyid!=null&&!keyid.equals("")){
sql+=" and pxbid='"+keyid+"'";
}
try{
rs=dao.qlist(sql);
PrintWriter out = response.getWriter();
request.setAttribute("rs", rs);
request.getRequestDispatcher("pxb/pxbmodify.jsp").forward(request, response);
//response.sendRedirect("pxb/pxbmodify.jsp");
}catch(Exception e){
e.toString();
e.printStackTrace();
}
}
private void detailM(HttpServletRequest request, HttpServletResponse response){//培训班详细信息页面
ResultSet rs=null;
response.setCharacterEncoding("gb2312");//设定页面字符集 防止乱码
pxbDao dao = new pxbDao();//声明DAO方法
String keyid=(String)request.getParameter("keyid");
String sql="";
if(keyid!=null&&!keyid.equals("")){
sql+=" and pxbid='"+keyid+"'";
}
try{
rs=dao.qlist(sql);
request.setAttribute("rs", rs);
request.getRequestDispatcher("pxb/pxbdetail.jsp").forward(request, response);
}catch(Exception e){
e.toString();
e.printStackTrace();
}
}
private void deleteM(HttpServletRequest request, HttpServletResponse response){//培训班删除
ResultSet lst=null;
pxbDao dao = new pxbDao();//声明DAO方法
response.setCharacterEncoding("gb2312");//设定页面字符集 防止乱码
String keyid=(String)request.getParameter("keyid");
try{
dao.delete(keyid);//调用 dao 方法中的删除方法 删除数据
request.setAttribute("flag", "删除成功");
request.getRequestDispatcher("pxbServlet?method=list").forward(request, response);
//response.sendRedirect("pxbServlet?method=list");
}catch(Exception e){
e.toString();
e.printStackTrace();
}
}
private void modifyM(HttpServletRequest request, HttpServletResponse response){//培训班修改功能
pxbDao dao=new pxbDao();//声明DAO方法
pxb pxb=new pxb();//声明pxb bean对象方法
pxb.setPxbid((String)request.getParameter("keyid"));//培训班编号
String bjmc=(String)request.getParameter("bjmc");//变量:班级名称
pxb.setBjmc((String)request.getParameter("bjmc"));//赋值:班级名称
String xlsj=(String)request.getParameter("xlsj");//变量:训练时间
pxb.setXlsj((String)request.getParameter("xlsj"));//赋值:训练时间
String bjrs=(String)request.getParameter("bjrs");//变量:班级人数
pxb.setBjrs((String)request.getParameter("bjrs"));//赋值:班级人数
String sm=(String)request.getParameter("sm");//变量:说明
pxb.setSm((String)request.getParameter("sm"));//赋值:说明
String jl=(String)request.getParameter("jl");//变量:教练
pxb.setJl((String)request.getParameter("jl"));//赋值:教练
String cl=(String)request.getParameter("cl");//变量:车辆
pxb.setCl((String)request.getParameter("cl"));//赋值:车辆
response.setCharacterEncoding("gb2312");//设定页面字符集 防止乱码
try {
dao.modify(pxb);//调用 dao 方法中的修改方法 更新
PrintWriter out = response.getWriter();
request.setAttribute("flag", "操作成功");
request.getRequestDispatcher("pxbServlet?method=list").forward(request, response);
//response.sendRedirect("pxbServlet?method=list");
} catch (Exception e) {
e.printStackTrace();
}
}
}
6.4 报名管理界面
查看已经报名的培训班信息

大家点赞、收藏、关注、评论啦 其他的定制服务 商务合作 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者
更多推荐
所有评论(0)