综合性设计性实验报告-投票系统软件设计.doc_第1页
综合性设计性实验报告-投票系统软件设计.doc_第2页
综合性设计性实验报告-投票系统软件设计.doc_第3页
综合性设计性实验报告-投票系统软件设计.doc_第4页
综合性设计性实验报告-投票系统软件设计.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息软件学院综合性设计性实验投票系统指导教师 提交日期:2010年6月20日 成 绩:_成 绩 单1 起评分:_110_2 按评分标准分项给分不及格 =90测试缺陷占20%系统无法运行5处及5处以上严重bug1-4处严重bug不含严重bug代码可读性占20%代码无法编译,代码之间无逻辑关系代码可编译,但冗余,思路不清晰代码有分层,格式较规范,但结构上存在多处不合理代码层次清晰、合理,格式规范,注释完整文档规范占20%完全不按要求存在明显错误,缺少文字说明或uml图分析存在一些小错误,基本是上按要求完成文档文档基本上合乎规范,错误少。开发模型占20%不会使用jsp仅使用jsp,不熟悉用jsp指令、动作、隐含对象等使用jsp,懂得使用隐含对象,对mvc模型不了解jsp+servlet+javabean界面美观占20%用户体验非糟糕基本上没有美工具有一定的美工用户体验好,出错提示友好3 评语1. 需求分析(1) 系统功能描述1) 可以提供多个投票话题给用户进行投票,每个投票话题都是只可以选择一个选项(即每个用户对每个话题只能投票一次);2) 可以查看任意投票话题的投票结果,系统会显示具体的票数与该投票项对应的投票数的比例情况的饼图;3) 可以管理员可以通过后台进行投票话题的发布和为投票话题添加选项,在增加投票项时既可以是文字,也可以是图片;4) 可以删除某个投票话题的投票项,也可以把某个投票话题删除;5) 可以修改管理员通过用户和密码进行登录;6) 自动对点击数超过50次的投票话题生成静态页面。(2) 用户及对应功能(1) 普通用户:可以选择某个投票话题投票,并可以查看投票情况。(2) 管理员:可以进行话题的发布与对发布的话题进行增删选项;可以删除某个话题。(3) 系统用例图及其说明图1 系统用例图如图1所示,整个系统主要有三个参与者,分别为普通用户,管理员和数据库。数据库为系统的所有用例提供数据,保证系统的正常运作。系统的用例主要有六个,分别为:投票、查看投票结果、登录、管理投票话题、管理投票项。“投票”用例主要的功能是普通用户对某个投票话题进行投票,在用户进行投票时检测用户是否已经投票了该话题,保证每个用户都一个话题只能投一次票。“查看投票结果”用例负责为用户提供某个话题的投票情况,包括每个选项的票数以及统计饼图。 “登录”负责核对管理员的用户名与密码,保证管理员身份的正确性。“管理投票话题”用例负责为管理员提供添加和删除话题的功能。“管理投票项”用例负责为管理员提供添加和删除选项的功能。(4) 运行平台操作系统:windows 2003、 windows 2008、windows xp、windows 7等web服务器:tomcat 6.0数据库管理系统:mysql 5.02分析与设计(1) 对系统的业务流程的分析图2 普通用户投票与查看投票结果的业务流程图3 管理员管理投票话题与投票项的业务流程(2) 系统类(页面)设计javabean设计:图4 系统实体类类图servlet设计如表1所示:类 名功能描述logxservlet接收并处理管理员登录请求votetopicservlet接收并处理管理投票话题和投票项请求表1jsp页面设计如表2所示:文件名描 述index.jsp系统首页。showvotetopic.jsp显示所有可供用户投票的话题。messages.jsp显示用户投票后的返回信息。showvote.jsp显示某个话题的投票情况和饼图。vote.jsp显示某个话题的选项供用户投票。dovote.jsp进行投票话题的处理admin/logon.jsp管理员登录页面。admin/ adminindex.jsp管理员主页面。admin/error.jsp登录出错界面。votetopic/votetopiclist.jsp管理投票话题界面。votetopic/votelist.jsp管理投票项的界面。votetopic/votetopicadd.jsp增加投票话题界面。votetopic/testvoteadd.jsp增加文本投票项界面votetopic/picturevoteadd.jsp增加图片投票项界面votetopic/showpicture.jsp显示图片投票项界面表2(3) 系统时序图分析图5 普通用户查看投票情况的时序图图6普通用户投票的时序图图7 管理员登录的时序图图8 管理员添加投票话题的时序图图9 管理员删除话题的时序图图10 管理员增加投票项的时序图图11 管理员删除投票项的时序图(4) 数据库设计(1) e-r模型图12 数据库的e-r图(2) 数据表设计表 管理员(tb_admin)字段名数据类型主 键外 键备 注loginidint是否管理员编号,自增字段namevarchar(20)否否管理员用户名passwordvarchar(32)否否管理员密码表3表 话题(tb_votetopic)字段名数据类型主 键外 键备 注voteidint(4)是否投票话题id,自增字段votenamevarchar(255)否否话题题目countclickint(10)否否话题投票量表4表 选项(tb_vote)字段名数据类型主 键外 键备 注idint(4)是否投票项id,自增字段vote_titlevarchar(50)否否选项题目vote_numint(4)否否选项的票数voteidint(4)否是与tb_votetopic的voteid关联vote_typevarchar(256)否否投票项的属性表5(5) jsp页面之间,jsp页面与servlet之间的信息传递图13 普通用户界面的信息传递图14 管理员登录的信息传递图15管理员管理界面的信息传递3实现(1) 类db中获取话题的代码:/* * 功能 查询数据表,获取投票话题 */public list selectvotetopic(string sql) list votelist = null;if (sql != null & !sql.equals() getrs(sql);if (rs != null) votelist = new arraylist();try while (rs.next() votetopicsingle votetopicsingle = new votetopicsingle(); votetopicsingle.setid(myttostr(rs.getint(1); votetopicsingle.setname(rs.getstring(2); votetopicsingle.setcountclick(myttostr(rs.getint(3); votelist.add(votetopicsingle); catch (exception e) system.out.println(封装tb_votetopic表中数据失败!);e.printstacktrace(); finally closed();return votelist;该方法需要传入用户执行查询的sql语句,方法会调用该sql语句查询数据库,获取相应的记录。获取的每个话题记录都会被封装成对象,然后存入列表中。最后方法会返回一个列表对象。如果数据库有返回记录,则列表中保存着subjectsingle类型的对象集;否则,返回空。(2) 类db中获取投票项的代码:/* * 功能 查询数据表,获取投票选项 */public list selectvote(string sql) list votelist = null;if (sql != null & !sql.equals() getrs(sql);if (rs != null) votelist = new arraylist();try while (rs.next() votesingle votesingle = new votesingle();votesingle.setid(myttostr(rs.getint(1);votesingle.settitle(rs.getstring(2);votesingle.setnum(myttostr(rs.getint(3);votesingle.settype(rs.getstring(4);votesingle.setvoteid(myttostr(rs.getint(5);votelist.add(votesingle); catch (exception e) system.out.println(封装tb_vote表中数据失败!);e.printstacktrace(); finally closed();return votelist;该方法需要传入用户执行查询的sql语句,方法会调用该sql语句查询数据库,获取相应的记录。获取的每个选项记录都会被封装成对象,然后存入列表中。最后方法会返回一个列表对象。如果数据库有返回记录,则列表中保存着votesingle类型的对象集;否则,返回空。(3) 类db中获取管理员和验证管理员的代码/* * 功能 查询数据库,获取管理员 */public master getmaster()master master=null;string sql=select * from tb_admin;tryif(rs!=null&rs.next()master=new master();master.setname(rs.getstring(1);master.setpassword(rs.getstring(2);catch(exception e)e.printstacktrace();return master;/* * 功能 查询数据库,验证管理员 */public boolean logon(master logoner)boolean mark=false;if(logoner!=null)string sql=select * from tb_admin where name=+logoner.getname()+ and password=+logoner.getpassword()+;try getrs(sql);if(rs!=null&rs.next()mark=true;elsemark=false; catch (exception e) mark=false;e.printstacktrace();try closed(); catch (exception e) e.printstacktrace();return mark;两个方法需要传入用户执行查询的sql语句,方法会调用该sql语句查询数据库,获取相应的记录。获取的每个管理员记录都会被封装成对象,然后存入列表中。最后方法会返回一个列表对象。如果数据库有返回记录,则列表中保存着admin类型的对象集;否则,返回空。(4) 类db中分页获取投票话题的代码public list pagequery(int pageno)list topiclist = new arraylist(); try getrs(select count(*) as counts from tb_votetopic); if (rs.next() totalrecord=rs.getint(1); /获得总记录数 currentpage=pageno; closed(); string sql=select * from tb_votetopic order by voteid+ limit + (pageno-1)*pagesize +,+pagesize; getrs(sql); if(totalrecord%pagesize = 0) totalpage=totalrecord/pagesize; else totalpage=totalrecord/pagesize+1; if(currentpagetotalpage) return null; while(rs.next() votetopicsingle single = new votetopicsingle(); single.setid(myttostr(rs.getint(1); single.setname(rs.getstring(2); single.setcountclick(myttostr(rs.getint(3); topiclist.add(single); catch(exception e) system.out.println(数据库查询出错:+e); e.printstacktrace(); finally closed(); return topiclist;/public int gettotalpage() return totalpage;public int getprepage() int prepage=0; if(currentpage1) prepage=currentpage-1; else prepage=1; return prepage;public int getnextpage() int next; if(currentpage=totalpage) next=totalpage; else next=currentpage+1; return next;以上代码是通过输入参数是第几页来获取当前页的投票话题,传入分页获取的sql语句。该程序读取数据库获得该页的投票话题,获取的记录都会被封装成对象,然后存入列表中。最后方法会返回一个列表对象。如果数据库有返回记录,则列表中保存着votetopicsingle类型的对象集;否则,返回空。(5) 生成静态页面的代码sql = select * from tb_votetopic where voteid=+voteid; list hottopiclist = mydb.selectvotetopic(sql); if(hottopiclist=null|hottopiclist.size()=0) else int i=0; votetopicsingle tsingle=(votetopicsingle)hottopiclist.get(0); if(tsingle.getcountclick().equals(49) string votes=; while(ivotelist.size() votesingle single=(votesingle)votelist.get(i); string type = single.gettype(); votes+=+single.gettitle()+; votes+=; if(!single.gettype().equals(text) votes+=查看; votes += ; i+; string filepath= this.getservletcontext().getrealpath(/)+votes.htm;string templatecontent;fileinputstream fileinputstream = new fileinputstream(filepath);int lenght = fileinputstream.available(); byte bytes = new bytelenght;fileinputstream.read(bytes); ) fileinputstream.close();templatecontent = new string(bytes);templatecontent=templatecontent.replaceall(显示投票项,votes);templatecontent=templatecontent.replaceall(thevoteid,voteid);string filename = votes/+voteid+.htm;filename = this.getservletcontext().getrealpath(/)+filename;fileoutputstream fileoutputstream = new fileoutputstream(filename);byte tag_bytes = templatecontent.getbytes();fileoutputstream.write(tag_bytes);fileoutputstream.close(); 该方法为某个话题生成静态页面。方法传入的参数有话题的id,页面模板的路径已经保存生成的页面的路径。方法还会把生成的页面的文件名作为返回值。程序首先访问数据库获取话题的选项,然后把选项的内容嵌入到html代码中。随后程序会读取模板页面的内容,把模板中的“thevoteid”替换为话题id,“显示投票项”替换为已经嵌入了html代码的选项。最后把新生成的html代码输出到指定的路径。(6) 类logxservlet中管理员登录的代码public void logon(httpservletrequest request, httpservletresponse response) throws servletexception, ioexceptionboolean flag=validatelogon(request,response);requestdispatcher rd=null;if(flag)db mydb=new db();master logoner=new master();logoner.setname(request.getparameter(username);logoner.setpassword(request.getparameter(userpass);boolean mark=mydb.logon(logoner);if(!mark)request.setattribute(messages,输入的用户名或密码错误!);rd=request.getrequestdispatcher(./admin/logon.jsp);rd.forward(request,response);elsehttpsession session=request.getsession();session.setattribute(logoner,logoner);response.sendredirect(./admin/adminindex.jsp);elserd=request.getrequestdispatcher(./admin/logon.jsp);rd.forward(request,response);该方法通过logxservlet接收了登录页面传来的用户名和密码后,通过db来连接数据库获取用户名和密码来验证该用户和密码是否正确,然后通过验证判断把页面重定向到哪一个页面显示信息。当用户名和密码验证正确则重定向到管理员的主页面,否则返回到登录页面并提示登录失败信息。(7) 通过类votetopicservlet来管理投票话题的代码/* * 功能 后台-增加投票话题 */public void addvotetopic(httpservletrequest request,httpservletresponse response) throws servletexception, ioexception string messages = ;string href=;string forward=;boolean flag=validatetopic(request,response);if(flag)string sql = insert into tb_votetopic (votename) values(+request.getparameter(topicname)+);int r = mydb.update(sql);if(r = 1) messages+=添加投票话题成功!;href=继续添加投票话题;forward=./admin/success.jsp;else messages+=添加投票话题失败!;href=返回;forward=./admin/error.jsp;request.setattribute(messages,messages);request.setattribute(href,href);elsehref=返回;forward=./admin/error.jsp;request.setattribute(href,href);requestdispatcher rd=request.getrequestdispatcher(forward);rd.forward(request,response);/* * 功能 后台-删除投票话题 */public void deletevotetopic(httpservletrequest request,httpservletresponse response) throws servletexception, ioexception string messages=;string href=;string forward=;string sql1 = delete from tb_votetopic where voteid=+request.getparameter(voteid);int rtn1 = mydb.update(sql1);string sql2 = delete from tb_vote where voteid=+request.getparameter(voteid);int rtn2 = mydb.update(sql2);if (rtn1 = 1 ) messages+=删除投票话题成功!;href=继续删除其它投票话题;forward=./admin/success.jsp; else messages+=删除投票话题失败!;href=返回;forward=./admin/error.jsp;request.setattribute(messages,messages);request.setattribute(href,href);requestdispatcher rd = request.getrequestdispatcher(forward);rd.forward(request, response);方法addvotetopic是增加投票话题的方法,通过从页面获得投票话题的内容,通过db连接数据库把该投票话题增加到数据库中;方法deletevotetopic方法是进行对投票话题的删除操作的方法,通过从页面获得的对应的投票话题的话题编号voteid来删除数据库对应的该投票话题的内容,并级联删除该投票话题的投票项。(8) 通过类votetopicservlet来管理投票项的代码public boolean validatevote(httpservletrequest request,httpservletresponse response) throws servletexception, ioexception boolean mark=true;string messages=;string votetitle=request.getparameter(votetitle);system.out.println(votetitle);if(votetitle=null|votetitle.equals()mark=false;messages+=请输入 投票项的内容!;request.setattribute(messages,messages);return mark;/* * 功能 后台-增加投票项 */public void addvote(httpservletrequest request,httpservletresponse response) throws servletexception, ioexception string messages = ;string href=;string forward=;boolean flag=validatevote(request,response);if(flag)string sql = insert into tb_vote (vote_title,voteid) values(+request.getparameter(votetitle)+,+request.getparameter(voteid)+);int r = mydb.update(sql);if(r = 1) forward=./votetopic/testvoteadd.jsp;else messages+=添加投票项失败!;href=返回;forward=./admin/error.jsp;request.setattribute(messages,messages);request.setattribute(href,href);elsehref=返回;forward=./admin/error.jsp;request.setattribute(href,href);requestdispatcher rd=request.getrequestdispatcher(forward);rd.forward(request,response);/* * 功能 后台-删除投票项 */public void deletevote(httpservletrequest request,httpservletresponse response) throws servletexception, ioexception string messages=;string href=;string forward=;string sql = select * from tb_vote where id=+request.getparameter(id);list votelist = mydb.selectvote(sql);votesingle single = (votesingle)votelist.get(0);boolean result= true;if(!single.gettype().equals(text)string filepath = request.getsession().getservletcontext().getrealpath(/)+single.gettype();java.io.file file = new java.io.file(filepath);result = file.delete();sql = delete from tb_vote where id=+request.getparameter(id);int rtn = mydb.update(sql);if (rtn = 1 & result) messages+=删除投票项成功!;href=继续删除其它投票项;forward=./admin/success.jsp; else messages+=删除投票项失败!;href=返回;forward=./admin/error.jsp;request.setattribute(messages,messages);request.setattribute(href,href);requestdispatcher rd = request.getrequestdispatcher(forward);rd.forward(request, response);/* * 功能 查看某个图片详细内容 */public void showpicture(httpservletrequest request,httpservletresponse response) throws servletexception, ioexception string href=返回;string strid=request.getparameter(id);string sql = select * from tb_vote where id=+strid;list votelist=mydb.selectvote(sql);votesingle votesingle=(votesingle)votelist.get(0);request.setattribute(votesingle,votesingle);requestdispatcher rd=request.getrequestdispatcher(./votetopic/showpicture.jsp);request.setattribute(href,href);rd.forward(request, response);/* * 功能 增加图片投票项 */public void addpicturevote(httpservletrequest request,httpservletresponse response) throws servletexception, ioexception string filepath = /front/picture/;string messages=;string forward=;string href=;string voteid=request.getparameter(voteid);request.setcharacterencoding(utf-8);smartupload su = new smartupload();long maxsize = 2 * 1024 * 1024; / 设置每个上传文件的大小,为2mbtry su.initialize(this.getservletconfig(), request, response);su.setmaxfilesize(maxsize); / 限制上传文件的大小su.setallowedfileslist(jpg,gif,bmp);/ 设置允许上传的文件类型su.upload();string votetitle=su.getrequest().getparameter(votetitle); / 上传文件if(votetitle=null|votetitle.equals()/验证照片描述信息,若没有输入,则提示输入照片描述信息messages=请输入图片描述信息!;forward=/admin/error.jsp;href=返回;elsefile file = su.getfiles().getfile(0);/ 获取上传的文件,因为只上传了一个文件,所以可直接获取if (!file.ismissing() / 如果选择了文件string pictureaddr=filepath+votetitle+.+file.getfileext();/filepath值(/front/picture/pic)+图片信息在数据表中的id字段值+“.”+文件后缀名;最后生成例如“frontphotopic12.bmp”路径string sql = insert into tb_vote (vote_title,vote_type,voteid) values(+votetitle+,+pictureaddr+,+voteid+);int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论