JAVA课程设计模块设计与编程示例.docx
- 文档编号:15935207
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:24
- 大小:37.77KB
JAVA课程设计模块设计与编程示例.docx
《JAVA课程设计模块设计与编程示例.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计模块设计与编程示例.docx(24页珍藏版)》请在冰点文库上搜索。
JAVA课程设计模块设计与编程示例
“班级设置”模块设计及编程示例
按照MVC设计模式【模型(model)-视图(view)-控制器(controller)】,每个模块逻辑上按三层结构(数据访问层,业务层,Web层)依次从左到右进行设计。
下面是以“班级设置”模块为例介绍设计思路。
数据访问层:
用于及数据库的连接以及各种数据操作,包括增加、删除、查询、修改等。
该部分主要包括数据库连接、数据实体接口、数据访问对象。
其中“数据访问对象”是对“数据实体接口”的具体实现。
例如,数据库连接对象(Dbconnection)主要定义了数据库的访问连接等方法;抽闲数据接口(ClassinfoDao)抽象地定义了操作“班级信息”的各种接口方法(增删查修);而数据访问对象(ClassinfoImp)实现了ClassinfoDao接口中的所有方法,达到数据操作及访问的目的。
业务层:
用于业务数据的处理,主要通过“数据访问对象”(ClassinfoImp)中提供的各种数据操作,完成相应的“业务层”功能。
例如,ClassinfoServiceImp(班级模块的业务处理对象)调用ClassinfoImp中的各种数据处理方法,以实现业务数据的处理。
表示层:
采用可视化的界面形式显示各种业务处理上的数据,它主要调用业务层中的ClassinfoServiceImp来完成数据的显示。
该层模块通常使用Servlet技术来实现,以动态显示。
例如:
ClassinfoServlet(班级模块的视图显示对象)调用ClassinfoServiceImp中的各种操作服务或方法,实现“表示层”功能。
注意:
该“学生成绩管理系统”中的每个模块都需要定义上述4种对象或文件(除Dbconnection外)。
下面将以“班级设置”模块为例,详细介绍具体设计过程。
第一步.因为每个模块都要连接数据库。
所以编写一个Dbconnection.java公共类(只需写一次)。
第二步.每一模块的功能都需要操作数据,可以将数据存取操作都存放在javabean之中。
例如,本例是Classinfo.java
第三步.首先编写抽象数据接口ClassinfoDao.java(代码如下所示),然后编写该接口的实现对象-数据访问对象(Classinfoimp.java)。
使用该接口的目的是为了让业务层及数据访问层分离。
publicinterfaceClassinfoDao{
voidadd(Classinfoclassinfo);
voiddelete(StringclassID);
voiduptate(StringclassID,StringgradeID,StringclassName);
Classinfofind(StringclassID);
List
List
intfindCount();
}
第四步.编写业务层.业务层用于业务数据的处理并完成相应的“业务层”功能。
本例中的业务层是ClassinfoServiceImp.java。
业务层编写完后以提供web层调用。
第五步.编写表示层(web层).表示层是采用可视化的界面形式显示各种业务处理上的数据,它主要调用业务层中的ClassinfoServiceImp来完成数据操作功能,如增加、删除、查询、修改等。
本例Web层程序是ClassinfoServlet.java。
下面是核心代码解释:
因为在修改时要解决中文乱码问题,所以先设置request的编码格式。
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
request.setCharacterEncoding("UTF-8");
Stringmethod=request.getParameter("method");
if(method.equals("add")){
add(request,response);
}elseif(method.equals("delete")){
delete(request,response);
}elseif(method.equals("listall")){
listall(request,response);
}elseif(method.equals("update")){
update(request,response);
}elseif(method.equals("fenye")){
fenyelistall(request,response);
}
}
在增删改查中稍有困难的是删除和修改在一块实现。
主要代码如下。
functionCheckAll(elementsA,elementsB){
for(i=0;i elementsA[i].checked=true; } if(elementsB.checked==false){ for(j=0;j elementsA[j].checked=false; } } } //判断用户是否选择了要删除的记录,如果是,则提示“是否删除”;否则提示“请选择要删除的记录” functioncheckdel(delid,formname){ varflag=false; for(i=0;i if(delid[i].checked){ flag=true; break; } } if(! flag){ alert("请选择要删除的记录! "); returnfalse; }else{ if(confirm("确定要删除吗? ")){ formname.submit(); } } } method=delete"method="post"name="frm"> forEachvar="c"items="${Classinfos}"> classID=${c.classID}&kind=banji"target="right">修改 forEach> onClick="CheckAll(frm.delid,frm.checkbox)">[全选/反选][ style="color: red;cursor: pointer;"onClick="checkdel(frm.delid,frm)">删除 none">班级编号 年级编号 班级名称 删除 修改 ${c.classID} ${c.gradeID} ${c.className}
10px;"> ${bar}
--层ch用于放置隐藏的checkbox控件,因为当表单中只是一个checkbox控件时,应用javascript获得其length属性值为undefine-->
注:
一个jsp里可以有多个表单。
本例中还有一个值得学习的地方是把数据分页。
用mysql和sqlserver数据库实现的方式是不同的。
本例还有两个filter类。
CheckLoginFilter.java是用来阻止没有登录的用户进入后台管理。
后来发现一个问题,就是在登录后,然后退出,再在浏览器里访问main.jsp还是可以进入后台,然后创建一个Nocachefilter.java来阻止浏览器缓存。
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
附录:
1.数据库连接对象(Dbconnection.java)
packagestu.utils;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importorg.junit.Test;
publicclassDbconnection{
protectedstaticStringdbClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
protectedstaticStringdbUrl="jdbc:
sqlserver:
//127.0.0.1:
1433;"
+"DatabaseName=DB_Student";
protectedstaticStringdbUser="sa";
protectedstaticStringdbPwd="1234";
publicConnectionconnect=null;
publicStatementstmt=null;
publicResultSetrs=null;
@Test
publicConnectiongetConnection(){
Connectionconn=null;
try{
if(conn==null){
Class.forName(dbClassName).newInstance();
}
}catch(Exceptionee){
//System.exit(0);
}
try{
conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd);
if(conn==null)
System.out.println("数据库名称错误");
Statementst=conn.createStatement();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
System.out.println("数据库连接错误");
}
returnconn;
}
publicResultSetexecuteQuery(Stringsql){
try{
connect=getConnection();
stmt=connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
System.err.println(e.getMessage());
e.printStackTrace();
}
returnrs;
}
//执行添加
publicintexecuteUpdate(Stringsql){
intresult=0;
try{
connect=getConnection();
stmt=connect.createStatement();
result=stmt.executeUpdate(sql);
//System.out.print("添加成功");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
//e.printStackTrace();
result=0;
}
try{
stmt.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnresult;
}
publicvoidclose(){
try{
if(rs!
=null)
rs.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
try{
if(stmt!
=null)
stmt.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
try{
if(connect!
=null)
connect.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
2.数据实体JavaBean(Classinfo.java)
packagestu.domain;
publicclassClassinfo{
publicstaticfinalintPAGE_SIZE=2;
privateStringclassID;
privateStringgradeID;
privateStringclassName;
publicStringgetClassID(){
returnclassID;
}
publicvoidsetClassID(StringclassID){
this.classID=classID;
}
publicStringgetGradeID(){
returngradeID;
}
publicvoidsetGradeID(StringgradeID){
this.gradeID=gradeID;
}
publicStringgetClassName(){
returnclassName;
}
publicvoidsetClassName(StringclassName){
this.className=className;
}
}
3.抽象数据接口(ClassinfoDao.java)
packagestu.dao;
importjava.util.List;
importstu.domain.Classinfo;
publicinterfaceClassinfoDao{
voidadd(Classinfoclassinfo);
voiddelete(StringclassID);
voiduptate(StringclassID,StringgradeID,StringclassName);
Classinfofind(StringclassID);
List
List
intfindCount();
}
4.数据访问层(Classinfoimp.java):
实现了ClassinfoDao接口
packagestu.dao.imp;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importjava.util.ArrayList;
importjava.util.List;
importstu.dao.ClassinfoDao;
importstu.domain.Classinfo;
importstu.domain.User;
importstu.utils.Dbconnection;
publicclassClassinfoimpimplementsClassinfoDao{
publicvoidadd(Classinfoclassinfo){
Dbconnectionconn=newDbconnection();
Stringsql="Insertinto[tb_classinfo]values('"+classinfo.getClassID()+"','"+classinfo.getGradeID()+"','"+classinfo.getClassName()+"')";
conn.executeUpdate(sql);
conn.close();
}
publicvoiddelete(StringclassID){
Dbconnectionconn=newDbconnection();
Stringsql="deletetb_classinfowhereclassID='"+classID+"'";
conn.executeUpdate(sql);
conn.close();
}
publicvoiduptate(StringclassID,StringgradeID,StringclassName){
Dbconnectionconn=newDbconnection();
Stringsql="updatetb_classinfosetgradeID='"+gradeID+"',className='"+className+"'whereclassID='"+classID+"'";
conn.executeUpdate(sql);
conn.close();
}
publicClassinfofind(StringclassID){
Classinfocl=newClassinfo();
Dbconnectionconn=newDbconnection();
Stringsql="select*fromtb_classinfowhereclassID='"+classID+"'";
ResultSetrs=conn.executeQuery(sql);
try{
while(rs.next()){
cl.setClassID(rs.getString
(1));
cl.setGradeID(rs.getString
(2));
cl.setClassName(rs.getString(3));
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
cl.setClassID(classID);
returncl;
}
publicList
Dbconnectionconn=newDbconnection();
Stringsql="select*fromtb_classinfo";
ResultSetrs=conn.executeQuery(sql);
List
try{
while(rs.next()){
Classinfocl=newClassinfo();
cl.setClassID(rs.getString
(1));
cl.setGradeID(rs.getString
(2));
cl.setClassName(rs.getString(3));
list.add(cl);
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnlist;
}
//SELECTTOP30*FROMARTICLEWHEREIDNOTIN(SELECTTOP45000IDFROMARTICLEORDERBYYEARDESC,IDDESC)ORDERBYYEARDESC,IDDESC
publicList
List
Dbconnectionconn=newDbconnection();
Stringsql="selecttop"+Classinfo.PAGE_SIZE+"*fromtb_classinfowhereclassIDnotin(selecttop"+(page-1)*Classinfo.PAGE_SIZE+"classIDfromtb_classinfoorderbyclassIDdesc)orderbyclassIDdesc";
try{
ResultSetrs=conn.executeQuery(sql);
while(rs.next()){
Classinfocl=newClassinfo();
cl.setClassID(rs.getString
(1));
cl.setGradeID(rs.get
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 课程设计 模块 设计 编程 示例