实验报告管理系统报告完整版
实验报告管理系统报告 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】
软件项目设计报告
实验报告管理系统
所在班级12计卓
小组成员
江灵瞳201 印海平201 钱晨晨
学院名称信电工程学院
专业名称计算机科学与技术
指导教师胡局新
起止日期
2015年1月15日
目录
1 绪论
开发背景
实验教学是学生技能培养的重要环节之一,学生实验报告的质量在一定程度上反映了实验教学的质量,实验报告管理水平也反映了实验教学管理水平。目前,大部分学校所提交的实验报告大多还停留在以纸为介质的方式上,这将严重制约着实验教学的开展。首先,很多课程的实验结果在纸质实验报告中不能表现或不能完全表现,其次纸质实验报告的批改和分析也是实验授课老师的一个很重负担,如何提高学生实验报告的表象能力,提高教师批改实验报告的效率并及时发现和纠正实验报告中存在的问题是许多课程实验授课教师所面对的一个难题。
本次设计完成的工作
老师登录该系统可以上传、下载实验报告、查看学生做的实验报告并给学生打分、老师可以查看实验验课程、实验课程列表、查看实验提交情况等。
学生登录该系统可以上传、下载实验报告、查看实验课程和实验课程列表。
任务分工
组织结构:为了完成学生信息管理系统的项目开发,班级组成了一个项目团队,人员分工:为了明确项目团队中每个人的任务分工,现制定人员分工,如下表所示:
任务
我们三个人各自分工完成自己的模块内容,首先,江灵瞳构造整个系统的框架,然后印海平设计数据库,在我们一起先设计前台界面,之后我们就各自实现各自模块的功能。
2 系统分析
需求分析
1)实验课程设置,设置课程编号、课程名、时间、次数、老师编号、老师名、实验班级;
2)实验列表设置,设置实验编号、实验名、班级、学生学号、学生名、老师名、实验路径、提交状态、分数;
3)树型类别设置,设置编号、名字、路径、学生名、老师名、树的状态。
可行性分析
编写目的:
背景:
徐州工程学院是一所培养应用型人才的普通高等学院。为了完善管理学校实验报告太多没有地方保存了,经决定开发实验报告管理系统。
要求:
实验报告系统必须提供学生信息和教师信息的基础设置;提供强大的条件搜索功能个实验课程查询、实验列表出现等管理功能;可以分不同权限、不同用户对该系统进行操作。另外,该系统还必须保证数据的安全性、完整性和准确性。
目标:
实验报告管理系统的目标是实现学生的纸质的实验报告太多没有地方长期保存,这样用一个系统可以将一个课程所有学生的实验报告进行管理方便存放。
条件、假定和限制:
时间的限制,我们必须在两周的时间里完成项目,在这期间系统分析员需要整理好分析结果,分配各组员的任务,每天需要人员跟踪记录整理文档。程序开发人员须在5天的时间里进行系统设计、程序编码、系统测试、程序调试。期间,还包括一个双休日假期。
根据上面的分析,在技术上不会存在什么问题,因此项目延期的可能性很小。只要在分配的时间里都能顺利地完成任务,再加上团队的凝聚力齐心协力,相信在这两周内会获得一个满意的结果。
用例图
图用例图
3 系统设计与实现
系统目标
根据需求分析的描述以及与组建成员的沟通,现制定系统实现目标如下:
a.界面设计简洁、友好、美观大方。
b.操作简单、快捷方便。
c.数据存储安全、可靠。
d.信息分类清晰、准确。
e.强大的查询功能,保证数据查询的灵活性。
f.为管理员提供真实的数据信息。
g.对用户输入的数据,系统进行严格的数据检查,尽可能排除认为的错误。
系统功能结构
图系统功能结构
功能流程及工作流程
学生模块:
a.查看实验课程
系统操作人员打开学生模块主界面,输入相关的信息(学号、密码)进入模块,点击学年按钮就可以看到所需要的信息。
b.查看实验列表
系统操作人员打开学生模块主界面,输入相关信息进入模块,点击课程就可以看到所要的信息。
c.下载实验报告模板
当该学生进入自己的界面时,找到要做实验报告的课程,点击下载按钮。
d.上传实验报告
当学生做完实验报告后,进入系统,点击上传按钮。
教师模块:
a.查看实验课程
系统操作人员打开学生模块主界面,输入相关的信息(工号、密码)进入模块,点击学年按钮就可以看到所需要的信息。
b.查看实验列表
系统操作人员打开老师模块主界面,输入相关信息进入模块,点击课程就可以看到所要的信息
c.查看提交情况
教师进入教师界面,点击自己教的课程,点击查看按钮。
d.上传实验报告模板
当该老师进入自己的界面时,找到要做实验报告的课程的实验名称,点击上传按
钮。
e.下载学生实验
当该老师进入自己的界面时,找到实验列表详情,点击下载按钮。
f.打分
当该老师进入自己的界面时,下载学生的实验报告看完后,在实验列表详情中点击
打分按钮。
系统流程图
图系统流程图
构建开发环境
a.操作系统:windows 7或XP
b.java开发包:
c.数据库:MY SQL
d.分辨率:最佳效果为1024*768像素
文件夹组织结构
图文件夹组织结构
学生模块的实现
package
public class Experclass {
private int Eid;
private String courseID;
private String courseName;
private String courseTime;
private String coursePeriod;etConn();
private PreparedStatement strat=null;
public DataGrid
throws Exception {
DataGrid
new DataGrid
etParameter("page");
int page = (_page==null?"1":_page);
String _rows = ().getParameter("rows");
int rows = (_rows==null?"20":_rows);
String sql="select * from experclasstable where
CourseTime='"+coursetime+"' and TeacherID='"+
().getSession().getAttribute("TeaId")+"'";
etSession().getAttribute("userclassname")+"'";
List
(datamap);
String countSQL = "select count(*) from experclasstable where CourseTime='"+coursetime+"' and TeacherID='"+
().getSession().getAttribute("TeaId")+"'";
(countSQL));
return dg;
}
public DataGrid
etParameter("page");
int page = (_page==null?"1":_page);
String _rows = ().getParameter("rows");
int rows = (_rows==null?"20":_rows);
etSession().getAttribute("userclassname")+"'";
List
(datamap);
String countSQL = "select count(*) from experclasstable where CourseTime='"+courseTime+"' and ClassName='"+
().getSession().getAttribute("userclassname")+"'";
(countSQL));
return dg;
}
public DataGrid
etParameter("page");
int page = (_page==null?"1":_page);
String _rows = ().getParameter("rows");
int rows = (_rows==null?"20":_rows);
etSession().getAttribute("userId");
List
(datamap);
String countSQL = "select count(*) from expercontenttable as t1 join expertablesubmit as t2 on = where ='"+courseId+"' and
StudentID="+().getSession().getAttribute("userId");
(countSQL));
return dg;
}
public ExperContent queryExperContent(String experimentID) throws Exception { from expercontenttable as t1 join expertablesubmit as t2 on = where
='"+experimentID+"' and StudentID='"+().getSession().getAttribute("userId")+"'";
strat=(sql);
ResultSet rs=();
ExperContent content=null;
if()){
content=new ExperContent();
("ExperimentID"));
("ExperimentName"));
("ExperimentContent"));
("ExperimentPeriod"));
("TeacherName"));
eplace("\\", "/"));
}
return content;
}
public DataGrid
etParameter("page");
int page = (_page==null?"1":_page);
String _rows = ().getParameter("rows");
int rows = (_rows==null?"20":_rows);
etConn();
private PreparedStatement strat=null;
public ExperDaoListImpl() throws Exception {
super();
etParameter("page");
int page = (_page==null?"1":_page);
String _rows = ().getParameter("rows");
int rows = (_rows==null?"20":_rows);
String sql="select * from expertablesubmit where
ExperimentID='"+experid+"' and CourseID='"+
courid+"'";
etSession().getAttribute("userclassname")+"'";
List
(datamap);
String countSQL = "select count(*) from expertablesubmit where ExperimentID='"+experid+"' and CourseID='"+
courid+"'";
(countSQL));
return dg;
}
public boolean addfron(String experid, String courid, String stuid,
float Testscores) throws Exception {
etConn();
private PreparedStatement strat=null;
public UpfileDao() throws Exception {
super();
}
public Upfile QueryFileClass(String courid) throws Exception {
etSession().getAttribute("userId")+"'";
strat=(sql);
int n = ();
if(n>0){
return "success";
}
return "false";
}
public String teaSaveFileRoad(String experid, String path, String courid)
throws Exception {
etConn();
private PreparedStatement strat=null;
public UpfileDao() throws Exception {
super();
}
public Upfile QueryFileClass(String courid) throws Exception {
etSession().getAttribute("userId")+"'";
strat=(sql);
int n = ();
if(n>0){
return "success";
}
return "false";
}
public String teaSaveFileRoad(String experid, String path, String
courid)
throws Exception {
etConn();
private PreparedStatement strat=null;
public DataGrid
throws Exception {
DataGrid
new DataGrid
etParameter("page");
int page = (_page==null?"1":_page);
String _rows = ().getParameter("rows");
int rows = (_rows==null?"20":_rows);
String sql="select * from experclasstable where
CourseTime='"+coursetime+"' and TeacherID='"+
().getSession().getAttribute("TeaId")+"'";
etSession().getAttribute("userclassname")+"'";
List
(datamap);
String countSQL = "select count(*) from experclasstable where CourseTime='"+coursetime+"' and TeacherID='"+
().getSession().getAttribute("TeaId")+"'";
(countSQL));
return dg;
}
public DataGrid
throws Exception {
etParameter("page");
int page = (_page==null?"1":_page);
String _rows = ().getParameter("rows");
int rows = (_rows==null?"20":_rows);
etSession().getAttribute("userclassname")+"'";
List
(datamap);
String countSQL = "select count(*) from experclasstable where CourseTime='"+courseTime+"' and ClassName='"+
().getSession().getAttribute("userclassname")+"'";
(countSQL));
return dg;
}
public DataGrid
courseId) throws Exception {
etParameter("page");
int page = (_page==null?"1":_page);
String _rows = ().getParameter("rows");
int rows = (_rows==null?"20":_rows);
etSession().getAttribute("userId");
List
(datamap);
String countSQL = "select count(*) from expercontenttable as t1 join expertablesubmit as t2 on = where ='"+courseId+"' and StudentID="+().getSession().getAttribute("userId");
(countSQL));
return dg;
}
public ExperContent queryExperContent(String experimentID) throws
Exception {
from expercontenttable as t1 join expertablesubmit as t2 on = where ='"+experimentID+"' and
StudentID='"+().getSession().getAttribute("userId")+"'";
strat=(sql);
ResultSet rs=();
ExperContent content=null;
if()){
content=new ExperContent();
("ExperimentID"));
("ExperimentName"));
("ExperimentContent"));
("ExperimentPeriod"));
("TeacherName"));
eplace("\\", "/"));
}
return content;
}
public DataGrid
throws Exception {
etParameter("page");
int page = (_page==null?"1":_page);
String _rows = ().getParameter("rows");
int rows = (_rows==null?"20":_rows);
Css的学习:虽然说在标签中也可以定义样式,但是这么做看起来不是那么明智,我在学CSS时还是比较努力的,所有的样式效果都测试过,并且写了相应的案例,只是过了不到3个月就忘了一大半,很多时候都是查文档才能写出来的,虽然CSS对于我们来说不必要非常精通,但是我觉得掌握的东西越多,以后的工作就越轻松,所以在考试结束后也会去看看前面的笔记和案例。?
Javascript:js?我认为是最重要的,甚至于超过servlet,jsp,在上课期间,讲的内容还是比较少的,就javascript中创建对象来说吧,应该只讲过3中方法,虽然在一般的情况下是用不上的,但是我觉得还是有必要学习的,这样有助于看懂别人写的框架,在javascript这部分学习中讲的最多的还是dom操作,不过我觉得用dom操作太繁琐了,写的代码太多,而且效率看起来也不高,后面就是讲的事件,事件也算是简单的,只是对触发的事件进行相应的响应。除了这些就是javascript流程控制,对象一些基本语法,这些和java类似,所以在上课时没有讲得太多。?
Servlet:我觉得是比较简单的,可能是因为它是java代码,容易理解。首先讲的是开发环境的配置,安装tomcat,了解tomcat下的目录,以及web工程下的目录。后来是讲了servlet的访问方式,post和get的区别,处理中文乱码是servlet中一个重要的知识点,几乎每个项目都会遇到这个问题。主要乱码有get,post乱码,是通过设置request或者response的编码方式来实现的。Servlet间的跳转方式有重定向和转发,对于重定向和转发的区别,现在理解的很透彻了,重定向是不能获取request中参数,
是客户端的两次请求,而转发是服务器内部跳转,不过,两种在设置过滤器的情况下,都要通过过滤器才能跳转。Servlet的生命周期是笔试的必考题,其实这是很简单的,只需要理解,没必要死记硬背的,session算是重要的知识点,很多数据都是存储在内存中,如购物车,用户信息等,还可以对session设置生存时间。说到session就必须说说四种会话跟踪技术,cookie,URL重写,表单域隐藏和session。?
JSP:JSP实际上和servlet是一样的,只不过两者侧重点不同,JSP的内置对象和作用域大致是一样的,JSP中还有动作,常用的有操作JavaBean的动作,页面跳转的动作,以及包含的动作。这里重点提到两种包含的区别。在JSP还讲过jstl和EL表达式,都是基础的应用,不过写自定义的标签还是要有一定的java基础的,我开始不太理解标签的解析过程,后来看了几个例子,发现自定义的已不是那么难。?
jQuery:jQuery可以说是中级部分学的最好的,主要是它方便了,特别是选择器,而且避免了一些浏览器的差异,所以在学习jQuery后,就再也不想用javascript来获取元素了。不仅如此,jQuery中封装的Ajax操作也是非常简单,不需要自己封装一个类,$.get和$.post?能够省去很多麻烦,jQuery的监听事件也是很简单,不需要在标签中添加对应事件,可以动态的绑定事件。还有就是dom操作更是方便。我在学习完Ajax,json后就发现,即使是没有JSP,也能做出一个动态页面出来,只是会存在效率问题。? 总结:虽然说这上面的知识大部分都掌握了,但是能否灵活运用才是重点,所以在今后的学习中多思考问题是否有多种解决方法。?
参考文献
[1]周恒,王殊宇.JSP项目开发全程实录[M].北京:清华大学出版社, 2008.
[2]张桂珠,刘丽,陈爱国.Java面向对象程序设计[M].北京:北京邮电大学出版社, 2007.
[3]孙卫琴. Tomcat与Java Web开发技术详解(第2版)[M]. 北京:电子工业出版社, 2009.
[4]李兴华. 名师讲坛:Java Web开发实战经典基础篇 [M]. 清华大学出版社, 2010.
[5]Jim Waldo. Java: The Good Parts [M]. O'Reilly Media, 2010.
[6] Gary Cornell. Core Java. Cay [M].北京:北京邮电出版社,2008.
[7] Sharon Zakhour ... [et al.].The Java tutorial [M].北京:人民邮电出版社,2008.
[8]刘中兵Java研究室.Java高手真经:Java Web核心框架[M].北京:电子工业出版社, 2009.
[9] 车皓阳, 杨眉.UML面向对象建模与设计[M].北京:人民邮电出版社,2009.
[10]殷兆麟等.Web系统与技术:Java Web应用技术[M].北京:国防工业出版社,2008.