请注意:因为文档多图,所以我把图片放在了我的资源界面,需要的同学自行下载
https://download.csdn.net/download/aliceiwill/10847158
当前是个会信息复杂,数据量巨大,急需一个管理系统来实现对数据的管理。基于此,我设计了学生管理系统。其主要功能:
增加,删除,查询(模糊查询),修改的功能
实现分页功能
未经登陆不能进入系统进行操作
四、实现评论区讨论功能
整个系统围绕着着这四大功能进行设计。
使用mvc框架。Servlet+jsp+javabean模式开发
此图为具体流程
此图为MVC框架:
servlet是一种独立于平台和协议的处于服务器端的Java应用程序,利用他可以实现业务层和表现层的分离,同时又可以生成动态页面。简单的来说就是处理request请求
get与post都是传递
而request是请求,response是相应
HttpServlet 类包含 init() 、 destroy() 、 service() 等方法。其中 init() 和 destroy() 方法是继承的。
MVC框架里头的C,Controller的角色,当客户从页面传入参数请求的时候,发送到Servlet,Servlet根据请求的不同,分配给不同的业务代码完成业务操作,操作完成后,Servlet返回一个结果到页面上面去。
web与服务器之间的关系
1、WEB :表示用户可以浏览的网页(HTML,CSS,JS)
2、服务器
1、硬件 与 软件
硬件范畴:一台主机
软件范畴:一个能够接收请求并给出响应的程序
2、作用
1、存储WEB上的信息(网页,图片,音频,视频)
2、能够处理用户的请求(request),并给出响应(response)
3、执行服务器端的程序:如查询数据库
web之间的转发与链接关系:
请求转发
2.学生管理系统ER图
3.学生管理系统结构图:
4.学生管理系统流程图:
二、系统详细设计
数据库设计表:
总结:一共用了三个表,分别为存放评论的message表
存放用户(管理员)的t_user表
存放学生信息的t_grade表
MVC框架具体设计:
设计方案:采用了网上寻找的ui设计,自行设置了背景颜色,设置了登陆功能。重置功能,密码验证功能。
要用到的程序(节选):
public class LoginServlet extends HttpServlet{
DbUtil dbUtil=new DbUtil();
UserDao userDao=new UserDao();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
String userName=req.getParameter("userName");
String password=req.getParameter("password");
req.setAttribute("userName", userName);
req.setAttribute("password", password);
if(StringUtil.isEmpty(userName)||StringUtil.isEmpty(password)){
req.setAttribute("error", "用户名或密码为空!");
req.getRequestDispatcher("index.jsp").forward(req, resp);
return;
}
User user=new User(userName,password);
Connection con=null;
try {
con=dbUtil.getCon();
User currentUser=userDao.login(con, user);
if(currentUser==null){
req.setAttribute("error", "用户名或密码错误!");
// 服务器跳转
req.getRequestDispatcher("index.jsp").forward(req, resp);
}else{
// 获取Session
HttpSession session=req.getSession();
session.setAttribute("currentUser", currentUser);
// 客户端跳转
resp.sendRedirect("main.jsp");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
public User login(Connection con,User user) throws Exception{
User resultUser=null;
String sql="select * from t_user where userName=? and password=?";
PreparedStatement pstmt=(PreparedStatement) con.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassword());
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
resultUser=new User();
resultUser.setUserName(rs.getString("userName"));
resultUser.setPassword(rs.getString("password"));
}
另外:此方法需要新建一个Util工具类:
public class DbUtil {
private String dbUrl="jdbc:mysql://localhost:3306/db_studentinfo?useSSL=false";
private String dbUserName="root";
private String dbPassword="root";
private String jdbcName="com.mysql.jdbc.Driver";
/**
* 获取数据库连接
* @return
* @throws Exception
*/
public Connection getCon() throws Exception{
Class.forName(jdbcName);
Connection con=(Connection) DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
return con;
}
/**
* 关闭数据库连接
* @param con
* @throws Exception
*/
public void closeCon(java.sql.Connection con) throws Exception{
if(con!=null){
con.close();
}
}
public static void main(String[] args) {
DbUtil dbUtil=new DbUtil();
try {
dbUtil.getCon();
System.out.println("数据库连接成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这个是文本输入功能,用户通过键入具体信息来留言,作为一条List数据存储在messages数据库中。另外还提供了评论区展示:
评论区使用了JSP+pagebean+servlet层+dao层
其核心代码(节选):
public MessageBean()
{ String JDriver="com.mysql.jdbc.Driver"; //定义驱动程序对象
String userName="root"; //定义数据库用户名
String userPasswd="root"; //定义数据库存取密码
String dbName="message"; //定义数据库名
String conURL="jdbc:mysql://localhost:3306/db_studentinfo?useSSL=false";
try{Class.forName(JDriver).newInstance(); //加载JDBC驱动程序
con=DriverManager.getConnection(conURL,userName,userPasswd);
//连接数据库
}
catch(Exception e){System.err.println(e.getMessage());}
}
public void setMessage(MessageData msg) {this.msg=msg;}
// 添加一条留言消息
public void addMessage()throws Exception
{ try{ byte b1[]=msg.getTitle().getBytes("ISO-8859-1");
String ti=new String(b1);
byte b2[]=msg.getName().getBytes("ISO-8859-1");
String na=new String(b2);
byte b3[]=msg.getEmail().getBytes("ISO-8859-1");
String em=new String(b3);
byte b4[]=msg.getContent().getBytes("ISO-8859-1");
String c=new String(b4);
PreparedStatement stm=con.prepareStatement(
"insert into messagetable values(?,?,?,?)");
stm.setString(1,ti); stm.setString(2,na);
if((msg.getEmail()).length()==0)stm.setString(3,"");
else stm.setString(3,em);
stm.setString(4,c);
try {stm.execute(); stm.close(); }
catch(Exception e) { }
con.close(); //关闭数据库连接
}
catch(Exception e){ e.printStackTrace(); throw e;}
}
// 获得所有留言消息,并返回结果到JSP页面
public Collection
{ Collection
try{ Statement stm=con.createStatement();
ResultSet result=stm.executeQuery(
"select count(*) from messagetable");
int message_count=0;
if(result.next()){ message_count=result.getInt(1);
result.close(); }
if(message_count>0)
{ result=stm.executeQuery("select * from messagetable ");
while(result.next())
{ String title=result.getString("title");
String name=result.getString("name");
String email=result.getString("email");
String content=result.getString("content");
MessageData message=new MessageData();
message.setTitle(title); message.setName(name);
message.setEmail(email); message.setContent(content);
ret.add(message);
}
result.close(); stm.close();
}
con.close();
}
另外评论区设置了返回功能
功能一:学生信息管理面板设计
主要有三个界面,每个界面都有可视化窗口,可自行关闭最小化
实现了在界面右上角显示当前页面的功能
注意
:使用了jQuerry和开源代码 EASY-UI提供的样式
我引用了一些jar包:
一部分用于easyui,一部分用于支持servlet 5.2版本的,以及mysql包
功能二:学生增加信息
注意:只能逐条添加信息,信息存储在t_grade数据表里面,通过addsevlet调用dao层来实现数据的调用与传输
每增加一个学生,序号顺序加1(设置了表的自增序列)
功能三:学生信息删除功能
特色:批量删除,删除前提醒窗口
功能四:权限验证
即如果未经登陆系统会自动回滚至登录界面,只有登陆成功后才可进入
通过权限验证实现,利用session捕捉会话
功能五:修改学生信息
详细操作是先清空数据库表中的数据,再把写入的数据录入到数据表中并且保存
功能六:查询学生信息
此功能设置为模糊查询,通过查询关键字来根据姓名一栏显示查询信息
并且搜索栏如果为空,那么默认自动显示所有查询列表
分页
该分页功能使用了jQuerry:
最后说点jquerry:
就是一个提供各种函数的方法集合,单纯js中给的样式太少
$.post() 方法使用 HTTP POST 请求从服务器加载数据。
$ 是 JQuery 常用的一个回传函数,定义为 "选取" 英文是 selector 的缩写
例子︰
$.function();
就是 选取 JQuery 定义的 function() 执行
$('input')
就是 选取 HTML 当中全部的 input 标签
$('#abc')
就是 选取 HTML 当中 ID 名称为 abc 的物件
$.fn.testing = function() {}
就是 选取 JQuery 内核函数 fn (函数) 回传给 testing 这个名称、定义为一个功能 function()
jQuery 是一个 JavaScript 库。
jQuery 极大地简化了 JavaScript 编程。
jQuery 很容易学习。
该系统写出的有些费力,但在老师和同学的帮助下,我渐渐地对怎么写项目有了一点点清晰的认识。对于bug不能慌张,要一个一个解决,使用debug模式是消灭bug的利器。另外我了解了什么是jquerry和它的基本应用。El表达式的出现也大大方便了我的工作,通过el表达式可以很方便的接受信息。另外数据库应该一开始就搭建好,而搭建好数据库的前提是设计好实体集,也就是说提前设计好。因此我的感觉是先进行总体设计,设计出具体的表的集合,然后严格按照软件的生命周期来开发软件,循序渐进,这样开发的软件既不乱,还特别好维护。
这门课javaweb给了我一些其他的思考,就是后端很重要,以前做过的项目用来显示的前台是程序窗口,而这次是jsp界面。严格的来说,其实是表现形式的不同,但是开发的核心还是后端的设计,我会在课下继续尝试着做一些类似的项目来充实自己。当然,这也离不开老师的帮助,再次感谢。
我将我的开发文档上传到了我的csdn博客: