欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    web课程设计报告说明书.pdf

    • 资源ID:43649026       资源大小:1.42MB        全文页数:37页
    • 资源格式: PDF        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    web课程设计报告说明书.pdf

    .WebWeb 程序设计说明书程序设计说明书XXLL专业计算机科学与技术考号 0901051319.-.-.wordzl.-.1 1 需求分析需求分析1.11.1 功能需求功能需求本系统实现如下功能:1.用户管理a)用户分为管理员和普通用户b)普通用户拥有创立并管理书架、上传并管理图书,评论、收藏、举报图书等功能。c)管理员除了拥有普通用户的所有功能外,还可以管理系统图书分类、举报信息和用户信息。d)管理员登录后,可以在管理中心中封锁、解锁用户。2.分类管理a)添加分类:管理员可以添加小说分类,分类不可以重名。b)修改分类:管理员可以修改分类的名字,分类不可以重名。c)删除分类:管理员可以删除分类,当分类下有小说存在时,无法成功删除分类。3.书架管理a)添加书架:用户登录后可以添加书架,书架的名字可以重名。b)修改书架:用户登录后可以修改自己创立的书架,书架名字可以重名。c)删除书架:用户登录后可以删除自己创立的书架,当书架下有小说存在时,无法成功删除书架。d)订阅书架:用户登录后可以订阅上的任意一个书架。-.wordzl.-.4.小说管理a)上传小说:用户登录后可以上传 TXT 格式的小说,小说不得大于5M,并且需要有固定格式的章节信息,比方“第 X 卷 第 X 章XXXX。小说上传成功后会自动生成小说章节索引,方便用户按章节阅读小说。如果上传小说时用户没有指定小说摘要,那么会自动以小说前六章的章节标题组成摘要。b)修改小说:用户登录后可以修改自己上传的小说信息,更改小说的所属分类和书架等信息。c)删除小说:用户登录后可以删除自己上传的小说,小说删除时,会连带删除小说的评论等信息。d)收藏小说:用户登录后可以收藏上的任意一部小说。e)举报小说:用户可以举报自己认为有不良信息或者不合法信息的小说,管理员会及时处理举报信息。f)评论小说:用户登录后可以对上的任意一部小说发表评论。5.统计信息a)统计小说阅读量:会对小说的阅读次数进展统计,以作为热门小说的排名依据。b)统计小说评论量:会对小说的评论次数进展统计,以作为热门小说的排名依据。c)统计小说收藏量:会对小说的收藏次数进展统计,以作为热门小说的排名依据。d)统计书架小说数:会对各个书架中小说的数量进展统计。-.wordzl.-.e)统计分类小说数:会对各个分类中小说的数量进展统计。1.21.2 数据库需求分析数据库需求分析不管对数据库设计还是对系统设计来说,需求分析都是第一步。需求的目的就是搞清楚用户要做什么,如果需求做的仔细,可以在后面的设计和实现中少做很多无用功,其重要性是不言自明的。做需求分析需要有点心理学的知识,要能充分的跟客户进展交流,能抓住问题的关键所在,最终能够快速的搞清楚系统所要实现的业务。需求分析的方法在软件工程中都有说明,不管哪种方法,最重要的都是与用户的沟通和交流,引导用户正确确实认问题。用户需求具体表达在各种信息的提供、保存、更新和查询,这就要求数据库构造能充分满足各种信息的输出和输入。根据用户的需求设计数据库如下:用户:编号,昵称,密码,头像,角色,注册日期,状态,书架数,小说数。分类:编号,名称,小说数。小说:编号,书名,作者,大小,细节,状态,分类编号,书架编号,文件路径,上传日期,上传用户,阅读量,评论量,收藏量。书架:编号,名称,创立者,创立日期,小说数。3 3 数据库设计数据库设计3.13.1 数据库概念构造设计数据库概念构造设计在需求分析的根底上,设计出能够满足用户需求的各种实体以及它们之间的关系,现将各实体及实体之间的 E-R 图描述如下:-.wordzl.-.1分类实体:分 类 编 号分 类 名 称分 类图图 3.23.2 分类实体图分类实体图2用户实体:注 册 日 期用 户 昵 称用 户 邮 箱用 户 头 像用 户 角 色用 户 密 码用 户 编 号用 户 状 态用 户图图 3.33.3 用户实体图用户实体图3书架实体:书 架 编 号书 架 名 称书 架图图 3.43.4 书架实体图书架实体图4小说实体:-.wordzl.-.小 说 大 小小 说 作 者小 说 名 称小 说 细 节小 说 状 态文 件 路 径小 说 编 号上 传 日 期小 说、图图 3.53.5 小说实体图小说实体图5总体 ER 图:从 属从 属分 类1n小 说n1书 架nIP地 址nnnn理 由内 容评 论收 藏日 期mmmm1举 报阅 读进 度创 建日 期日 期用 户图图 3-63-6ERER 图总图图总图3.23.2 数据库逻辑构造设计数据库逻辑构造设计现在把数据库概念设计的 E-R 图转化为关系数据。在关系数据库中,数据-.wordzl.-.关系由数据表组成的,而表的构造表达在表的字段上。具体为:确定数据库中数据表的组成;确定数据表中字段的构成,主键字段和有关字段的约束条件;依据表中主键字段建立数据表之间的关系。数据的合理性问题:数据表内记录不重复;数据字段不可分割,具有最小数据单位的特点;数据表内字段或字段之间互不依赖。具体构造如下列图所示:1.用户表表表 3-13-1用户表用户表字段名user_iduser_emailuser_nameuser_passuser_deviluser_roleuser_reg_dateuser_status标识用户编号用户用户昵称用户密码用户头像用户角色字段类型IntegerVarcharVarcharVarcharVarcharEnum长度301992064100101010约束条件PK唯一可否为空NNNNYNNNNN用户注册日期Timestamp用户状态IntegerIntegerIntegeruser_shelf_count用户书架数量user_book_count用户小说数量2.分类表表表 3-23-2小说分类表小说分类表字段名cate_idcate_name标识类别编号类别名称字段类型IntegerVarchar长度3020约束条件PK唯一可否为空NN-.wordzl.-.cate_book_count3.小说表小说数量Integer30N表表 3-33-3小说表小说表字段名book_idbook_namebook_authorbook_sizebook_detailBook_descbook_statusbook_catebook_shelfbook_upload_filebook_upload_datebook_upload_userbook_read_countbook_ment_countbook_starred_count4.书架表表表 3-43-4 书架表书架表字段名标识字段类型长度约束条件可否为空标识小说编号小说名称小说作者小说大小小说细节小说描述小说状态小说分类所属书架小说文件字段类型IntegerVarcharVarcharIntegerTEXTVarcharIntegerIntegerIntegerVarchar长度30100203020010303010030303030约束条件PKFKFKFK可否为空NNNNYYNNNNNNNNN上传日期Timestamp上传者阅读量评论量收藏量IntegerIntegerIntegerInteger-.wordzl.-.shelf_idshelf_nameshelf_creation_usershelf_creation_dateshelf_book_count5.书架订阅表书架编号书架名称创立者IntegerVarcharInteger30503010PkFKNNNNN创立日期Timestamp小说数Integer表表 3-53-5 书架订阅表书架订阅表字段名idshelf_iduser_id6.小说评论表表表 3-63-6 小说评论表小说评论表字段名ment_idment_ipment_bookment_parentment_authorment_contentment_date标识评论编号用户 IP小说编号回复评论用户编号评论内容字段类型IntegerVarcharIntegerIntegerIntegerVarchar长度30153030301000约束条件PKFKFK可否为空NNNYNNN标识订阅编号书架编号用户编号字段类型IntegerIntegerInteger长度303030约束条件PKFKFK可否为空NNN评论时间Timestamp-.wordzl.-.7.小说收藏表表表 3-73-7 小说收藏表小说收藏表字段名Idbook_id_ipuser_id8.小说举报表表表 3-83-8 小说举报表小说举报表字段名report_idreport_bookuser_idreport_evidencereport_date9 小说阅读表表表 3-93-9 阅读表阅读表字段名read_idread_bookread_userread_detail标识阅读编号小说编号用户编号阅读进度字段类型IntegerIntegerIntegerVarchar长度3030301000约束条件PKFKFK可否为空NNNN标识举报编号小说编号用户编号举报原因字段类型IntegerIntegerIntegerVarchar长度3030301000约束条件PKFKFK可否为空NNNNN标识收藏编号小说编号用户编号字段类型IntegerIntegerInteger长度303030约束条件PkFKFK可否为空NNN举报日期Timestamp-.wordzl.-.4 4 界面描述和代码实现界面描述和代码实现4.14.1 用户管理用户管理用户管理模块主要包括用户注册、登录及信息修改。(1)用户注册:用户填写注册信息并通过校验后可以成功注册成为会员,其中作为登录名,不能重复。图图 4-14-1 用户注册页面用户注册页面以 Ajax 的方式进展注册校验,成功前方才跳转页面,如果出错,那么在不刷新的情况下在当前页面提示错误信息。-.wordzl.public String signup()throws Exception result=new HashMap();Map errors=new HashMap();/Validate email addressif(!ValidatorUtil.validEmail(user.getEmail()errors.put(user.email,格式不正确);.-./If the email has been taken else if(userDao.findByEmail(user.getEmail()!=null)errors.put(user.email,已经被占用);/Validate usernameif(!ValidatorUtil.validUsername(user.getName()errors.put(user.name,用户名格式不正确);/Validate passwordif(!ValidatorUtil.validPassword(user.getPass()errors.put(user.pass,密码格式不正确);logger.info(String.format(signing up username=%s,email=%s,user.getName(),user.getEmail();/Add the userif(!errors.isEmpty()result.put(approved,false);result.put(message,注册失败,请检查注册信息是否填写正确);result.put(errors,errors);-.wordzl.-.else if(!userDao.insert(user)result.put(approved,false);result.put(message,注册失败,效劳器正忙,请稍后再试);else result.put(approved,true);result.put(message,注册成功,正在中转页面);return SUCCESS;(2)用户登录:用户填写登录信息后点击登录,进展 Ajax 校验,成功后跳转到个人页面。图图 4-24-2 用户登录页面用户登录页面用户登录的前台相关代码:/*Script to implement user related works,such as signin,signup,validation and.*author GreatGhoul*version 1.0 2010-04-25 22:35-.wordzl.-.*require*:jquery.1.3.2.min.js*:status-1.0.3.js*/$(function()function signup()$.ajax(url:dosignup.do,data:signupForm.serialize(),type:POST,dataType:json,error:function(),success:function(data)signupForm.lock(false,data.result.message);if(data.result.approved)setTimeout(function()signupForm.lock(false,注册失败,请检查您的网络连接);var signupForm=$(#signup-form);var signinForm=$(#signin-form);-.wordzl.-.);window.location=signin.do;,3000);else signupForm.errs(data.result.errors);signupForm.lock(true,正在提交注册信息.);return false;function signin()$.ajax(url:dosignin.do,data:signinForm.serialize(),type:POST,dataType:json,error:function(),signinForm.lock(false,登录失败,请检查您的网络连接);-.wordzl.-.););success:function(data)signinForm.lock(false,data.result.message);if(data.result.approved)setTimeout(function()window.location=home.do;,1000);signinForm.lock(true,正在提交注册信息.);return false;signupForm.submit(signup);signinForm.submit(signin);(3)用户信息修改:提供原始密码后,用户可以修改昵称或者使用新的密码。-.wordzl.-.图图 4.34.3 用户信息修改页面用户信息修改页面4.24.2 分类管理分类管理管理员有权利对系统的小说分类管理,小说的分类名不能重复。管理员可以添加分类、修改分类、删除分类,要删除含有小说的分类,需要先转移分类中的小说,否那么不能成功删除分类。图图 4-44-4 分类管理页面分类管理页面以下这段代码用于更新分类,用于返回更新信息的 JSON 格式的构造是固定的,在书架,小说管理中都遵循这一格式,统一了操作接口。result=new HashMap();-.wordzl.public String update()logger.info(String.format(updating cateid=%d=catename=%s,cate.getId(),cate.getName();.-.);List errors=new ArrayList();result.put(approved,false);result.put(message,更新分类失败);if(cate=null|cate.getId()=null)errors.add(分类不存在);else if(!ValidatorUtil.validCateName(cate.getName()errors.add(分类名的长度应该在 1 到 20 个字体之间,不能含有空格 else Cate cate1=cateDao.findById(cate.getId();if(cate1=null)errors.add(要修改的分类不存在);else if(cate1.getName().equals(cate.getName()errors.add(分类名已经存在);else if(!cateDao.update(cate)errors.add(效劳器正忙,请稍候再试);else result.put(approved,true);result.put(message,更新分类成功);-.wordzl.-.result.put(errors,errors);return SUCCESS;4.34.3 书架管理书架管理用户登录后可以创立书架,并可以编辑或删除自己创立的书架。在“我的书架页面会罗列当前用户的所有书架,如图:图图 4-54-5 书架列表页面书架列表页面(1)添加书架:点击书架列表中的“添加书架,可以翻开添加书架窗口,填写书架名称后点击确认按钮即可添加一个书架。图图 4-64-6 添加书架添加书架(2)修改书架:点击要修改的书架名后面的“修改即可翻开书架修改窗口,填写新的名称后点击确认按钮,即可修改书架的名称。-.wordzl.-.图图 4-74-7 修改书架修改书架(3)删除书架:点击要删除的书架后面的“删除会提示是否确认删除,如果点击“是,且书架中书架数为 0,那么可以成功删除书架,否那么不会删除书架。删除书架的代码如下:public String delete()User user=(User)getSessionMap().get(curUser);if(user=null)return signin;if(bookDao.findByShelf(shelf).size()0)addActionMessage(要删除书架,请先清空书架中的小说);return ERROR;else if(!shelfDao.delete(shelf)addActionMessage(删除书架失败,效劳器正忙,请稍候再试。);return ERROR;else return SUCCESS;-.wordzl.-.4.44.4 小说管理小说管理用户可以上传小说,并对自己上传的小说进展管理。在首页、个人页面、书架展示等页面会罗列出用户上传的小说,点击即可查看详情。的首页会罗列出所有小说分类,热门的书架、小说等,点击即可查看相关条目。图图 4-84-8 首页首页个人页面会罗列出用户最近上传的小说和创立的所有书架。图图 4-94-9 用户首页用户首页(1)上传小说:点击顶端导航中的“上传小说,在翻开的页面中填写相关-.wordzl.-.信息,并选定要上传的文件文件要求 txt 格式,小于 5M,而且章节目录比拟标准 。其中小说简介可以选填,如果用户不填写,那么自动以前 6 章的章节标题拼接成简介。图图 4-104-10 小说上传页面小说上传页面上传小说的相关代码:if(book.getDesc()!=null&book.getAuthor().length()200)book.setDesc(book.getDesc().substring(0,199);if(book.getAuthor()=null|book.getAuthor().trim().isEmpty()book.setAuthor(未知);public String execute()throws IOException User user=(User)getSessionMap().get(curUser);if(user=null)return signin;-.wordzl.-.5M。);if(upload=null|!upload.exists()addActionMessage(只能上传 txt 类型的文件,且文件不能超过return ERROR;else if(book.getName()=null|book.getName().trim().isEmpty()if(book.getShelf()=null)if(getActionMessages().isEmpty()String toPath=/uploads/+System.currentTimeMillis()+-addActionMessage(请为小说指定一个书架);addActionMessage(请填写小说名称);+uploadFileName;File toFile=new File(ServletActionContext.getServletContext().getRealPath(toPath);FileUtils.copyFile(upload,toFile);book.setUploadFile(toPath);book.setSize(toFile.length();-.wordzl.-.try BookParser.parseDetail(toFile,book);catch(IOException e)book.setUploadUser(user);if(bookDao.insert(book)cateDao.countBooks(book.getCate();shelfDao.countBooks(book.getShelf();return SUCCESS;addActionMessage(未能生成索引);book.setDetail();else addActionMessage(效劳器错误,上传文件失败);return ERROR;else return ERROR;Struts2 配置:-.wordzl.-.5242880text/plainsignin.do/WEB-INF/views/book-upload-success.jsp/WEB-INF/views/error.jsp生成索引的相关代码:public static void parseDetail(File file,Book book)throws IOException JSONArray detail=new JSONArray();StringBuilder desc=new StringBuilder();InputStreamReaderistream=newInputStreamReader(newFileInputStream(file),GBK);BufferedReader stream=new BufferedReader(istream);RandomAccessFile stream=new RandomAccessFile(file,r);/int headLineNumber=1,tailLineNumber=1;/初始行号为 1int lineNumber=0;String chapterTitle=前言;String line=null;-.wordzl.-.int chapterCount=0;while(line=stream.readLine()!=null)lineNumber+;if(line.matches(CHAPTER_RE)if(chapterCount=detail.getHead()detail.getTail()sb.append(+line+);stream.close();istream.close();return sb.toString();前台载入阅读页面的相关代码:function escapeXML(xml)var text=xml;text=text.replace(/g,>);-.&lineNumberwordzl.=.-.text=text.replace(/&/g,&);text=text.replace(/t/g,    );text=text.replace(/s/g, );return text;function readChapter(chapter)Status.show(正在加载章节 +chapter.title);$.ajax(url:bookChapter.do,data:,type:POST,dataType:json,error:function(),success:function(data)Status.show(读取章节失败,请检查您的网络连接);book.id:$book.id,detail.title:chapter.title,detail.head:chapter.head,detail.tail:chapter.tail-.wordzl.-.Status.show(data.result.message);if(data.result.approved)$(#main-head).html(chapter.title);$(#main-body).html(data.chapterContent););function showChpater(node,head,tail)readChapter(title:node.innerHTML,head:head,tail:tail);$(function()/在目录中添加一个章节function appendChapter(chapter)var chapterNode=document.createElement(LI);-.wordzl.-.chapterNode.innerHTML=+escapeXML(trim(chapter)+;/building chapters.Status.show(正在生成章节列表.);for(var i=0;i chapters.length;i+)var chapter=chaptersi;chapterList.append($(+escapeXML($.trim(chapter.title)+);if(!curChapter|!curChapter.title)curChapter=chapters0;Status.hide();-.wordzl.-.readChapter(curChapter);$(.font-ctrl).click(function()var mainBody=$(#main-body);var fontSize=parseInt(mainBody.css(font-size);var action=$(this).html();switch(action)case A+:fontSize+;break;case A-:fontSize-;break;case A:fontSize=16;break;default:-.wordzl.-.);if(fontSize 20)fontSize=20;);mainBody.css(font-size,+fontSize+px);(4)删除小说:点击小说列表中小说后面的“删除会弹出小说删除确认框,如果点击是那么会删除该小说,删除小说会连带删除小说的评论、阅读记录等信息。删除小说的相关代码:if(!bookDao.delete(book)Book book1=bookDao.findById(book.getId();if(book1=null)addActionMessage(该小说可能已经删除了。);User user=(User)getSessionMap().get(curUser);if(user=null)return signin;else Cate cate=book1.getCate();Shelf shelf=book1.getShelf();-.wordzl.-.试);addActionMessage(删除小说错误,效劳器正忙,请稍后再 else cateDao.countBooks(cate);shelfDao.countBooks(shelf);return SUCCESS;return ERROR;4.54.5 统一的错误页面统一的错误页面站使用统一的错误页面展示出错信息,给用户更好的使用体验。图 4-13 说阅读页面5 体会通过本次毕业设计,我对 MVC 构造有了更深入的理解,对软件工程方法有更客观的认识,对Struts2、Spring、Hibernate 有了更进一步的掌握。总结起来有以下几点:需求分析很重要。设计之初做了全面的需求分析,对应用的功能进展-.wordzl.-.了完整的分析,但是因为没有考虑时间问题,导致许多需要都没有实现,需求是个无底洞,以后做设计时,我一定综合开发本钱确认需求方案。功能考虑不够全面。在做软件功能设计时,因为缺乏开发经历,许多细节都没有关注到,比方用户注册确实认问题,看着虽然是个不怎么上进心眼的功能,但一旦出错,直接关系一个用户的去留,我没有在这方面下功夫,是不正确的。单元测试:因为时间紧迫,我并没有对各位模块进展完整的单元测试,虽然真初有进展过一些尝试,但最后还是放弃了,这必然对系统埋下了隐患。使得我面对一些恑异的错误时,变得手足无措,浪费了一些不必要的时间。回忆起来,还是因为开发方案混乱所至,如果起初就制定严格的开发方案,并贯彻实施,就不会在这方面栽跟头。-.wordzl.

    注意事项

    本文(web课程设计报告说明书.pdf)为本站会员(赵**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开