MIS内容.docx
- 文档编号:5918710
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:24
- 大小:196.15KB
MIS内容.docx
《MIS内容.docx》由会员分享,可在线阅读,更多相关《MIS内容.docx(24页珍藏版)》请在冰豆网上搜索。
MIS内容
●项目概述
●项目需求及分析
●项目设计
●项目开发
●项目测试及运行
●项目总结
一、项目概述
●项目目标
1.熟悉选修课管理系统的开发流程
2.积累软件开发经验
3.熟练掌握MVC架构模式
●系统架构
1.Web服务器采用Tomcat
2.数据库服务器采用PostgreSQL
3.架构模式采用MVC
4.实现MVC采用Jsp+Servlet+JavaBean
二、项目需求及分析
●主要流程
学生登录——>输入学号、密码——>进入选课页面——>查询成绩、进行选课、查询学生信息
学生登录——>学生留言——>提交
管理员登录——>管理数据库——>增、删、改、查
管理员登录——>管理留言——>留言、删除
●业务流程图
●系统结构图
●ER图
●系统功能
1.学生可以选课、查询成绩
2.学生可以留言
3.管理员可以管理数据库
4.管理员可以管理留言
三、项目设计
1.技术架构
业务逻辑层:
JavaBean
控制层:
Servlet
表现层:
Jsp
(参考架构:
Struts+Spring+Hibernate)
(参考数据库:
Oracle、Sqlserver、Mysql)
(参考Web服务器:
Apache、Lighttpd、Nginx)
最终选择架构:
MVC+PostgreSQL+Tomcat+ArgoUML
MVC实现:
Jsp+Servlet+JavaBean
架构图:
●系统设计
数据库层
1.学生表:
学生(学号,姓名,院系,身份证号)
PSQL:
CREATETABLEstudent
(
snumcharacter(20)NOTNULL,
snamecharacter(10),
sdepartcharacter(20),
sidcharacter(20),
CONSTRAINTstudent_pkeyPRIMARYKEY(snum)
)
WITH(
OIDS=FALSE
);
ALTERTABLEstudentOWNERTOadmin;
2.课程表
课程(选课号,课程)
PSQL
CREATETABLEcourse
(
course_idintegerNOTNULL,
coursecharacter(20),
CONSTRAINTcourse_pkeyPRIMARYKEY(course_id)
)
WITH(
OIDS=FALSE
);
ALTERTABLEcourseOWNERTOadmin;
3.成绩表
成绩(学号,选课号,成绩)
PSQL
CREATETABLEscore
(
snumcharacter(20)NOTNULL,
course_idintegerNOTNULL,
scoreinteger,
CONSTRAINTscore_pkeyPRIMARYKEY(snum,course_id),
CONSTRAINTscore_course_id_fkeyFOREIGNKEY(course_id)
REFERENCEScourse(course_id)MATCHSIMPLE
ONUPDATENOACTIONONDELETENOACTION,
CONSTRAINTscore_snum_fkeyFOREIGNKEY(snum)
REFERENCESstudent(snum)MATCHSIMPLE
ONUPDATENOACTIONONDELETENOACTION
)
WITH(
OIDS=FALSE
);
ALTERTABLEscoreOWNERTOadmin;
4.学生留言表
学生留言(id,姓名,主题,内容,时间,客户机IP)
PSQL
createtableguestliuyan(gst_idserialnotnullprimarykey,
gst_uservarchar(10),
gst_titlevarchar(100),
gst_contentvarchar(5000),
gst_timevarchar(20),
gst_ipvarchar(15));
5.用户名密码表
略
持久化层
StudentBean.java
StudentDBBean.java
CourseBean.java
CourseDBBean.java
ScoreBean.java
ScoreDBBean.java
Course_ScoreBean.java
DBBean.java
模型层
略
控制层
IndexServlet.java
StudentServlet.java
CourseServlet.java
ScoreServlet.java
表示层
index.jsp
liuyan.jsp
access_db.jsp
error.jsp
admin_index.jsp
admin_login.jsp
admin_check.jsp
admin_mana.jsp
admin_error.jsp
admin_access.jsp
admin_del.jsp
adminlogin.jsp
util.jsp
xs_liuyan.jsp
process.jsp
Filter
ByteArrayServletOutputStream.java
MyRequestWrapper.java
MyResponseWrapper.java
XsLiuyanFilter.java
四、项目开发
部署图:
表现层核心代码:
Index.jsp
Access_db.jsp与JavaBean的交互
useBeanid="scoredb"scope="application"class="com.course_score.ScoreDBBean"/> <% Collection Iterator %> <% while(it.hasNext()){ ScoreBeanscore=(ScoreBean)it.next(); Stringsnum=score.getSnum(); Stringsname=score.getSname(); Stringsdepart=score.getSdepart(); Stringsid=score.getSid(); %><%=snum%> <%=sname%> <%=sdepart%> <%=sid%>
<%
}
%>
Liuyan.html
Admin_login.html
Admin_check.jsp
<%
request.setCharacterEncoding("GB2312");
Stringname=request.getParameter("name");
Stringpwd=request.getParameter("password");
if(null==name||null==pwd){
response.sendRedirect("admin_login.html");
return;
}
name=toHtml(name.trim());
pwd=toHtml(pwd.trim());
if(name.equals("")||pwd.equals("")){
out.println("用户名和密码不能为空,请重新
return;
}
if(name.equals("晏进波")&&pwd.equals("123456")){
session.setAttribute("admin","true");
response.sendRedirect("adminlogin.jsp");
}else{
out.println("用户名或密码错误,请重新
}
%>
Admin_access.jsp与JavaBean的交互
useBeanid="scoredb"scope="application"class="com.course_score.ScoreDBBean"/> Admin_del.jsp <% Stringadmin=(String)session.getAttribute("admin"); if(admin==null||! admin.equals("true")){ out.println("你无权访问此页面! ! ! "); return; } %> <% StringstrID=request.getParameter("gst_id"); intid=Integer.parseInt(strID); //Contextctx=newInitialContext(); //DataSourceds=(DataSource)ctx.lookup("java: comp/env/jdbc/bookstore"); //Connectionconn=ds.getConnection(); Class.forName("org.postgresql.Driver").newInstance(); Stringurl="jdbc: postgresql: //localhost/postgres"; Stringname="admin"; Stringpassword="123456"; Connectionconn=DriverManager.getConnection(url,name,password); PreparedStatementpstmt=conn.prepareStatement("deletefromguestliuyanwheregst_id=? "); pstmt.setInt(1,id); pstmt.executeUpdate(); response.sendRedirect("admin_index.jsp"); pstmt.close(); conn.close(); %> Util.jsp的核心代码 <%@pageerrorPage="../error.jsp"%> <%! publicstaticStringtoHtml(Stringstr){ if(str==null){ returnnull; } StringBuffersb=newStringBuffer(); intlen=str.length(); for(inti=0;i charc=str.charAt(i); switch(c){ case'': sb.append(" "); break; case'\n': sb.append(" break; case'\r': sb.append("'"); break; case'<': sb.append("<"); break; case'>': sb.append(">"); break; case'&': sb.append("&"); break; case'"': sb.append("""); break; case'\\': sb.append("\"); break; default: sb.append(c); } } returnsb.toString(); } %> Process.jsp的核心代码 <% request.setCharacterEncoding("gb2312"); Stringname=request.getParameter("name"); Stringtitle=request.getParameter("title"); Stringcontent=request.getParameter("content"); if(null==name||null==title||null==content){ response.sendRedirect("xs_liuyan.jsp"); return; } if(name.equals("")||title.equals("")){ response.sendRedirect("../liuyan.html"); return; } StringfromIP=request.getRemoteAddr(); java.util.Datedate=newjava.util.Date();//获取时间 java.text.SimpleDateFormatsdf=newjava.text.SimpleDateFormat("yyyy-MM-ddHH: mm: ss"); StringdataStr=sdf.format(date); //Contextctx=newInitialContext(); //DataSourceds=(DataSource)ctx.lookup("java: comp/env/jdbc/bookstore"); Class.forName("org.postgresql.Driver").newInstance(); Stringurl="jdbc: postgresql: //localhost/postgres"; Stringuser="byc"; Stringpassword="123456"; Connectionconn=DriverManager.getConnection(url,user,password); //Connectionconn=ds.getConnection(); PreparedStatementpstmt=conn.prepareStatement( "insertintoguestliuyan(gst_user,gst_title,gst_content,gst_time,gst_ip)values(? ? ? ? ? )"); pstmt.setString(1,name); pstmt.setString(2,title); pstmt.setString(3,content); pstmt.setString(4,dataStr);//插入时间 pstmt.setString(5,fromIP); pstmt.executeUpdate(); pstmt.close(); conn.close(); response.sendRedirect("xs_liuyan.jsp"); %> 控制层核心代码: IndexServlet.java response.setContentType("text/html"); StringstuNumber=request.getParameter("stuNumber"); Stringpassword=request.getParameter("password"); if(stuNumber! =null&&password! =null&&stuNumber.equals("14101070103")&&password.equals("123456")){ response.sendRedirect("access_db.jsp"); }elseif(! stuNumber.equals("14101070103")||! password.equals("123456")){ response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,"您的学号或密码有误,请重新登录! "); }else{ response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,"服务器忙,请稍后再登录! "); } (Student、Course、Score的Servlet略) 业务逻辑层核心代码: StudentBean.java privateStringsnum; privateStringsname; privateStringsdepart; privateStringsid; publicScoreBean(){} publicScoreBean(Stringsnum,Stringsname,Stringsdepart,Stringsid){ this.snum=snum; this.sname=sname; this.sdepart=sdepart; this.sid=sid; } publicStringgetSnum(){ returnsnum; } publicvoidsetSnum(Stringsnum){ this.snum=snum; } publicStringgetSname(){ returnsname; } publicvoidsetSname(Stringsname){ this.sname=sname; } publicStringgetSdepart(){ returnsdepart; } publicvoidsetSdepart(Stringsdepart){ this.sdepart=sdepart; } publicStringgetSid(){ returnsid; } publicvoidsetSid(Stringsid){ this.sid=sid; } StudentDBBean.java publicConnectiongetConnection(){ Connectioncon=null; Stringurl="jdbc: postgresql: //localhost/postgres"; Stringuser="byc"; Stringpassword="123456"; try{ Class.forName("org.postgresql.Driver"); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } try{ con=DriverManager.getConnection(url,user,password); }catch(SQLExceptione){ e.printStackTrace(); } returncon; } publicCollection Connectioncon=null; Statementsta=null; ResultSetres=null; ArrayList Stringquery="select*fromstudent"; try{ con=getConnection(); sta=con.createStatement(); res=sta.executeQuery(query); while(res.next()){ ScoreBeanscore=newScoreBean(res.getString (1), res.getString (2),res.getString(3),res.getString(4)); scoreList.add(score); } }catch(SQLExceptione){ e.printStackTrace(); }finally{ try{ res.close(); sta.close(); con.close(); }catch(SQLExceptione){ e.printStackTrace(); } } returnscoreList; } (Course、Score、Course_Score、DB的Bean略) Filter的核心代码: XsLiuyanFilter.java privatestaticfinalStringWORD_FILE="word_file"; HashMap
");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MIS 内容