南京工程学院毕业设计说明书(论文)
图4-3管理员登录后系统主界面
4.2.2.论文下载
1设计思路
学生上传论文后,学生、老师、管理员可以根据需要下载。实现该功能主要使用了fileupload组件。(只有当学生选题通过指导老师审核后才能上传论文)
2技术详解
学生登录系统,选题成功且通过指导老师审核,可以上传论文,在上传论文时,设置了download属性(0 不允许下载 1 允许下载),用于判断是否允许下载,同时设置了下载权限字段lev(3 所有人 2 学生 1 老师 0 管理员,)用来控制文件的下载权限,保证了文件的安全性。上传论文成功后,用户可以在公共模块的论文下载部分下载论文附件。在满足论文附件下载的需求时,使用到了工具包fileupload,要实现下载功能,首先要通过response对象的setContentType方法修改response编码方式,将默认的编码方式text/html设定为application/x-msdownload,其次要通过setContentLength设定要下载附件的容量,附件的大小由文件length属性决定,在下载附件过程中,一个棘手的问题在于要解决中文乱码问题,为此,要设置文件编码方式为utf-8,同时需要对文件添加文件名,接下来需要文件输入输出流,通过循环函数将response对象中的输出流下载到用户保存的本地目录中。主要关键代码如下:
// 将response的编码方式修改为application/x-msdownload
response.setContentType(\// 设置下载文件的长度
response.setContentLength((int) file.length()); // 在下载文件的头部添加文件名
response.setHeader(\e);
// 设置编码方式为utf-8,作用是为了防止出现中文乱码 response.setHeader(\\
(filename.getBytes(\
3测试结果
在“论文下载”部分,用户可以下载论文,点击记录操作栏的“下载”,即可实现论文附件下载功能,测试结果如“图4-4”:
- 27 -
南京工程学院毕业设计说明书(论文)
图4-4 论文下载
4.2.3.选题列表
1设计思路
老师在设计选题模块成功设计选题后,学生可以在公共模块的选题列表部分选择其对应指导老师设计的选题。一个学生只能选择一道题目,并且一道选题只能被一个学生选择。
2技术详解
为了实现该功能,在设计表设计了选题表(topic)-记录课题的相关信息,和选择表(choose)-记录课题选择信息。选择表(choose)中主键id的值与选题表(topic)主键id值相同,主键唯一,这就保证了一道题目只能被一个学生选择。
用户执行选题操作时,首先根据用户编号在选择表中查找相应选择记录,若能查找到相关记录,表明该用户已经选了题,此时无法再选题。
c = chDao.findChoose(uid, \根据用户编号查找该用户的选题记录 u1 = uDao.findUser(uid); //根据用户编号查找该用户
if (c!= null) { //判断用户选题记录是否为空,不为空,说明用户已经选择过题目,根据系统要求,用户此时无法选题.
request.setAttribute(\你已经选择了选题,请删除后重新选择!\ }
然后判断用户的角色,只有角色为学生的用户才能选题。其次还要判断学生的分组的设计该选题的指导老师的分组编号是否相同,学生只能选择与其分组相同的老师设计的选题。
if (u1.getLev() == 2) { //判断用户的身份,只有学生用户才能选题
tp = tpDao.findTopic(tid); //根据选题编号查找选题相关信息
- 28 -
南京工程学院毕业设计说明书(论文)
u = uDao.findUser(tp.getUid()); //获得设计选题者的相关信息 int t = u.getGid(); //设计选题者的分组编号 int p = u1.getGid(); //选题学生的分组编号 if (t != p) { //只有在同一组。才能选择该题
request.setAttribute(\对不起,你不能选择该选题!\
执行选题操作时,会往选择表中插入一条记录,记录编号与选题编号相同,同时,系统会自动将选题者用户编号插入到选题表(topic)的选择选题者用户编号字段。同时修改选题的状态为“已选择(1)”,选题操作完成。
ch1.setId(id); ch1.setTid(tid); ch1.setUid(uid);
flag = chDao.addChoose(ch1); //往选择表中插入相应记录 if (flag > 0) {
chList = chDao.findChooseList(tid); if(chList!=null){ String str = \
for(int i=0;i TopicDao tDao= new TopicDaoImpl(); int f=0; f = tDao.modTopic(tid,str); //将选题者用户编号插入选题表选择选题者用户编号(upload)字段 int j=0; j=tDao.modStatus(tid,1);//修改选题状态值 } 学生选题成功后,登录系统,在我的选题模块可以看到自己选的课题的相关信息,此时其对应指导老师可以审核学生的选题。 3测试结果 指导老师成功设计选题后,学生在“选题列表”部分,点击记录操作栏中“选择”可以选择对应指导老师设计的选题,效果如“图4-5”所示: 图4-5选题列表 - 29 - 南京工程学院毕业设计说明书(论文) 4.2.4.个人留言 1设计思路 个人留言模块的加入,主要是为了方便用户之间的互相交流,促进信息的沟通,编码时,主要用到了留言表(message),添加留言主要是往留言表中增加一条记录,我的留言主要是从留言表中根据留言者用户编号查找出符合条件的留言记录。各项操作均围绕对留言表中的记录进行。主要难点在于对留言的回复管理,一条留言只能被回复一次。已回复过的留言不能再次回复。 2技术详解 为了实现对留言的回复管理,在设计数据库阶段,留言表中添加了isback属性(是否收到回复),0 未收到 1 收到 ,通过这个字段来判断一条留言记录是否收到了回复,进而决定是否能对这条留言进行回复操作。当用户对某个其他用户进行留言时,系统自动将该留言记录的isback属性设为0,其他用户回复该留言后,自动将该留言记录的isback属性设置为1。回复留言的相关代码如下: <% if(msg.getIsback()==1){out.print(msg.getRemsg());}else{%>回复<%} %> //先判断留言的isback属性值,若已经收到回复,则显示回复的内容,若未收到回复,则添加“回复”超链接。
3测试结果
用户进入系统,依次点击个人留言->我收到的留言,若某条留言记录未收到留言回复,回复内容中展现的是“回复”超链接,若某条留言记录,已经收到回复,回复内容展现的就是“回复内容”。
图4-6我收到的留言
4.3管理员角色模块
管理员在系统中起着中流砥柱的作用,对系统的各项操作具有最高权限,几乎能对系统的所有功能模块进行操作,因此对系统管理员的设计显得尤为慎重。在系统设计过程中,管理员账号是预先存放在数据库中的。管理员具有分组管理、用户管理、留言管理、选题管理、论文管理等操作权限。由于选题管
- 30 -
南京工程学院毕业设计说明书(论文)
理、论文管理与下文老师-学生模块紧密相关,故该部分功能放在老师-学生模块详细描述。在管理员模块,由于用户管理存在一定的逻辑复杂度。因此,只详细描述用户管理的功能实现。 4.3.1用户管理
1.设计思路
管理员登录系统后,在用户管理部分可以添加、查找、修改、删除、审核所有用户信息。由于新注册的用户默认账号状态为未审核,无法正常登录系统,账号只有通过管理员的审核才能正常登陆系统。这样在一定程度上保证了系统的安全性,在用户管理部分,需要实现对用户列表查看的分页管理操作,改进了用户体验。
2.技术详解 1)分页管理
要实现分页管理,一般需要如下几个步骤
首先需要统计数据库用户表中记录的总数,通过countUser()方法,接下来需要定义一个变量-pagesize,用于规定每页中要呈现的用户记录数,同时要算出需要分几页,算法很简单,用总记录数除以页面尺寸,注意的是要将得到的值转化为整数,接下来需要通过request.getParameter(“page”)获得当前页码数,接下来要在数据库中根据得到的页号和规定的页面尺寸获得当前页号所要呈现的记录数 ,最后需要编写点击页面中上一页、下一页的操作逻辑。 关键代码如下:
public List findAllUser(int page, int pagesize) { //依据当前页面号、页面尺寸获取当前页面所要展现的记录数
int rowBegin = 0; if (page > 1) {
rowBegin = pagesize * (page - 1); }
String sql = \
+ \ + \ }
在系统设计过程中,许多页面都使用到了分页管理,例如:选题列表、分组管理页面。由于实现原理都是类似的。故在此详述后,后文不再阐述 2)审核管理
为了实现对用户的审核管理,在users表设计过程中,加入了active字
- 31 -