分类

课内:
不限
类型:
不限 毕业设计 课程设计 小学期 大作业
汇编语言 C语言 C++ JAVA C# JSP PYTHON PHP
数据结构与算法 操作系统 编译原理 数据库 计算机网络 软件工程 VC++程序设计
游戏 PC程序 APP 网站 其他
评分:
不限 10 9 8 7 6 5 4 3 2 1
年份:
不限 2018 2019 2020 2021

资源列表

  • 基于JSP和SSH框架实现的物流管理系统

    1 任务概述1.1 目标该项目软件的开发是为了提高物流公司的业务效率,降低人力、物理的损耗,使管理和业务操作更方便、科学。
    本软件系统一旦实施应用,公司的各项信息都可以更安全可靠的保存、查看,在业务实施过程中,可以大大的降低出错率,同时节省大量的时间和金钱,为公司赚的更多的利润。
    1.2 用户的特点
    超级管理员:拥有最大权限,可以为系统分配用户的权限,进行各项了解
    员工管理员:由超级管理员分配权限,管理公司的所有员工
    总公司配送点管理员:由超级管理员分配权限,管理公司的所有配送点
    配送点管理员:由超级管理员分配权限,管理配送点的各项事务。 其下由车辆、订单、线路、报表管理员


    1.3 运行环境软件环境




    名称
    版本
    语种




    操作系统
    Windows
    2003



    操作系统的附加功能





    数据库平台
    Oracle
    9.2i



    应用平台
    任意操作系统




    邮件系统
    pop
    3.0



    客户端软件
    IE
    7.0或6.0




    1.4 需求规定本系统是提供物流公司的日常事务管理,主要有管理用户、员工、车辆、线路、配送点、订单、报表等业务。还为客户提供在线查询等功能。
    1.4.1 系统功能层次模块图
    1.4.2.1 员工管理
    功能描述:由总公司统一管理公司员工,主要的功能有增加员工,员工信息修改,员工信息删除,员工信息查询
    增加员工:当公司有新员工入职,则新建员工信息
    员工信息修改:当员工信息变更的时候进行修改,如职位变动,工资变动等
    员工信息删除:当有员工离职的时候,删除该员工信息
    员工信息查询:供员工管理员方便管理员工


    1.4.2.2 用户管理
    功能描述:由超级管理员对用户分配不同的权限,权限包括:配送点管理员,配送点操作员
    分配权限:当新增配送点时为该配送点分配一个配送点管理员,再由该配送点管理员分配配送点操作员权限
    删除用户:当配送点用户发生变更时,根据需要删除对应的用户信息
    查询:由上级管理员查询由他分配的下级管理员的信息


    1.4.2.3 车辆管理功能描述:管理配送点拥有的所有车辆,包括新购车辆登记,车辆调度,车辆的状态记录及查询

    新购车辆登记:登记新购车辆的基本信息
    车辆调度:根据车辆的具体信息(状态,吨位,容积等)进行调度
    车辆的状态:车辆现在处于空闲,途中,维修中
    车辆查询:配送点操作员查看现有车辆的具体信息


    1.4.2.4 配送点管理功能描述:由总公司新增配送点,查看配送点信息,修改配送点信息,删除配送点

    新增配送点:当公司根据业务需求需要扩展配送规模,新开设配送点并添加配送点信息
    查看配送点信息:为了方便公司管理,随时了解配送点具体信息
    修改配送点信息:如配送点信息有变更,则修改配送点信息
    删除配送点:根据公司业务需求删除配送点
    配送价格管理:配送点根据自己的配送范围制定配送价格


    1.4.2.5 线路管理功能描述:由总公司进行线路的添加,删除和查询

    线路添加:在现有的配送点范围内,添加新线路
    线路删除;如配送点有变动,则删除该线路
    线路查询:配送点操作员调度车辆需查询线路,管理员维护线路信息,客户查看线路


    1.7.2.6 订单管理接受订单模块,订单状态修改模块,订单删除模块,生成交接单模块,以及查询订单。

    接受订单:接受用户所填写的订单输入到系统中
    订单状态维护:配送点管理员对所有的订单都应该进行审查和批复。而且应该维护订单的各种状态,包括:接受、在途(在哪个点)、在配送中、客户已收、等待支付等
    订单删除:当订单生成后,根据具体的信息或者特殊的信息,管理员来删除删除订单
    生成交接单:当货物发货时,生成交接单,当货物运送到某个配送点的时候,检查完货物,司机应该与该配送点的管理员来填写交接单,以保证货物能在各个段内安全的配送
    查询订单:订单管理员查询当日订单,当月订单,按订单号查询


    1.4.2.7 客户端
    货物状态查询:根据订单号查询货物状态
    价格查询:根据货物的重量,体积,目的地查询配送价格
    网点查询:查看配送点的配送范围和配送价格等


    2 设计思想2.1 系统构思
    2.2 运用关键技术本系统运用的是SSH所搭建成的框架,并且在局部的地方用到了Ajax技术和DWR框架,并且前台用的是Div+Css技术所搭建成的。
    2.3 数据结构Car表

    Carstate表

    Cartype表

    City表

    Deliveryspot表

    Employee表

    Line表

    Linetaile表

    Order表

    Orderstate表

    Position表

    Power表

    Province表

    Receipt表

    Receiptdetaile表

    Use表

    3 服务器端的安装及运行3.1 程序的运行环境
    要求操作系统为windows 操作系统
    对计算机硬件配置要求较高,至少要1GB内存
    服务器程序为tomcat
    数据库为oracle 9i
    要求安装有JDK 1.5

    3.2 程序的安装
    安装JDK 1.5 并且配置其环境变量
    安装tomcat服务器
    将获取的程序war包放入tomcat安装目录下的webapps文件夹下
    安装oracle服务器,并且将程序的数据库脚本导入
    启动tomcat服务器

    4 功能演示配送点管理

    员工管理


    用户管理

    线路管理


    车辆管理



    报表管理

    订单管理


    交接单管理

    投递单管理
    3 评论 146 下载 2018-11-05 18:37:42 下载需要14点积分
  • 基于WIN32 API界面编程实现的华容道小游戏

    1 游戏简介华容道是古老的中国智力游戏,由“曹操败走华容道,正与关公狭路逢。只为当初恩义重,放开金锁走蛟龙”这一故事情节引申而来。华容道有一个4*5的二十个方块构成的棋盘,下方边界中间有一个宽为2方格的出口,还包含1个2*2的大滑块代表曹操,5个2*1的滑块代表五虎上将,4个1*1的小滑块代表小兵。游戏的目的是利用棋盘中两个1*1的空格来移动所有滑块,不允许跨越棋子,设法用最少的步数,最终使最上方被包围的曹操从出口成功脱逃。我在保持“横刀立马阵型”的基础上美化了滑块的图案,借用了时下流行的游戏“阴阳师”这一主题,赋予这个古老游戏一个新的面貌。
    2 程序功能在Win32下以图形界面提供给用户游戏平台,游戏开始时,所有滑块的起始位置都是确定的,用户通过鼠标点击选中滑块,被选中的滑块会闪烁,鼠标点击空白处,滑块会移动到相应位置,每次只能移动一步。
    3 设计思路WIN32界面编程要点:

    主函数WinMain函数最重要的是注册窗口和创建窗口以及message的get、translate和dispatchGamePaint函数运用window的GDI函数完成了核心步骤,即所有图像的绘制过程CallBack回调函数则是从客户的所有操纵中接受信息并把它处理后反应为在游戏中的各步操作
    用户操作方面包含数据表示和操作控制两个方面。
    3.1 数据表示将棋盘分为4*5大小的20个块,即建立一个橫为4,纵为5的二维数组,首先用结构体定义游戏中使用的坐标:
    typedef struct _coord{ short x;④ short y; int select;}game_coord, *Pgame_coord;
    x为横坐标,y为纵坐标,select为判断滑块是否选中,初始值为0,当被选中后select变为1,画边框函数根据判断函数勾勒对应边框。
    游戏中,兵将需要使用不同的图片,故需要用不同的数字标志不同的棋子,在主函数WM_CREATE的消息中,创建一个新游戏时,需要同时创建4个兵,5个将和一个核心滑块,因此需要以下函数:
    void CreateGame(HWND hwnd){ SetBoundary(); CreateSoldier(); CreateGeneral(); CreateCMAN(); CreateEmpty();}

    Setboundary用于设置x=4,y=5的边界CreateSoldier用于创建四个小兵,分别赋予他们对应的x和y值CreateGeneral用于创建五个将,分别赋予他们每人对应的两个部分的x和y值CreateCMAN用于创建核心滑块,赋予其四个部分对应的x和y值CreateEmpty用于创建两个空白,分别赋予他们对应的x和y值
    棋盘上的所有部分都用(x, y)数据点来表示,在GamePaint绘制函数中将图案赋予他们,成为区域,得到如下效果。

    3.2 操作控制操作包含选中和移动。
    设置全局变量nCode[2]来保存两次鼠标点击的滑块数据。当主函数第一次接收到WM_LBUTTONDOWN鼠标点击信息时,通过TransferPos(LOWORD(lParam), HIWORD(lParam))函数找到鼠标点击的对应位置,并将它转换成对应滑块的序号,用nCode[0]来记录,此刻再调用Dispatch函数,将选中的滑块序号转化为对应的某种类型的确定的某一滑块,并将其对应的select值设置为1,调用GamePaint函数将被选中的滑块勾出黑色边框。
    当主函数第二次接收到WM_LBUTTONDOWN鼠标点击信息时,通过TransferPos(LOWORD(lParam), HIWORD(lParam))函数找到鼠标点击的对应位置,并将它转换成对应滑块的序号,用nCode[1]来记录,此刻调用DispatchCode(nCode)函数,将两次鼠标点击信息传入,在函数内部设置flag变量,来控制鼠标第一次选中的滑块类型,和判断鼠标第二次是否选中空白,然后进入CanMove(p, i, flag, j)函数,p为第一次选中滑块的坐标,i为选中某类型的第几个滑块,flag为选中滑块的类型,j为选中第几个空白。CanMove函数只需判断被选中单元到目的地是否可行即可,程序定义了上下左右四个方向,要判断所到之处是否全为空格,若成功则互换两个滑块的坐标,若不成功则返回0值。DispatchCode函数返回的值表示是否有移动,若有移动则需要调用GamePaint函数进行重绘,效果如下图所示。



    效果1
    效果2









    3.3 其他游戏中定义了全局变量step来记录玩家移动了多少步,并实时显示在屏幕下方,玩家一共有88次机会,若步数用尽,则会弹出提示框游戏结束,若在步数限制内成功解救大滑块,则会弹出提示框游戏胜利,如下图所示。



    游戏失败
    游戏胜利









    4 总结
    首先是了解每个函数的作用和主要函数的参数形式,然后对老师的代码进行模仿,第一步实现了游戏坐标的设置,对每个滑块的坐标进行了生成、定义以及获得函数,并通过理解该写老师的ui.c文件,实现了将抽象的点类数据以色素块的形式展现在屏幕上。第二步是获取用户的鼠标操作和滑块移动,先开始不会处理将两次鼠标点击信息同时储存的步骤,于是只能实现鼠标点击相应滑块后,滑块自己向周围空白可移动的方向移动,但是这样的信息处理出现了bug,即当所选中的滑块可以同时向左向右(或向上向下)移动时,它只能单调地向某个方向移动,这样就使得当用户想让滑块右移的时候无法满足其需求,于是只能回头,依然是得实现鼠标两次点击实现滑块的移动。第三步即前文所述,创建了全局变量nCode[2]和count,通过count++来判断鼠标点击的次数,同时nCode储存两次鼠标点击的信息,从而成功实现了用户第一次点击滑块,第二次点击空白,使用户能顺着自己的心意使滑块向自己想要的目的地移动。但同时出现的一点不妥,因为count在鼠标点击的同时自加,只有在两次点击都有效时才能实现移动功能,如果用户不小心点错,界面又没有是否选中的提示,很容易在一次次点击中使count的值错乱,从而点击屏幕没有响应,于是给选中的滑块进行标示就变成一件不得不实现的事情了。第四步,在游戏坐标结构体中增加了select变量,用来判断该滑块是否被选中,通过模仿画边框的函数成功实现了用户点击某滑块,该滑块会加上黑色边框的效果。第五步,为了对游戏进行美化,将色素块换成了“阴阳师”游戏中可爱的人物图片,在这一过程中经历了麻烦的事情,像同学求助贴图操作,明明是一样的代码却一直不能实现位图的成功粘贴,最终在老师的帮助下发现了函数调用的问题,成功实现了贴图操作,非常感谢老师和伸出援手帮助我的同学们~第六步,给游戏加上了背景音乐,先开始根据网上教程使用了PlaySound函数,但因为头文件以及字符串无法读取的问题不能成功使用,在终于成功播放出音乐后又遇到了新的问题——该函数必须在音乐全部播放结束后才会接受和处理下一步操作,导致把它加在哪条语句之后都很不方便,于是改用mciSendString函数,成功实现了背景音乐的添加。
    至此,暑期小学期实现华容道小游戏的作业完美收工!对自己的努力和成果较为满意。在这个过程中,学到了很多东西,不光是学习上的知识还有收集信息处理问题以及自己尝试学习解决问题的能力,附上最终效果图,可惜听不到音乐^_^



    效果图1
    效果图2








    2 评论 32 下载 2018-10-06 22:07:42 下载需要8点积分
  • 基于Java的可自定义评教系统设计与实现

    摘 要评教是当今提高教学质量非常重要的方法之一。在互联网时代,评教信息化也是当前发展的趋势,相比传统的评教形式,在线评教系统具有准确,及时,成本低等众多的优点。通过对当前一些评教系统的调研发现普遍存在着指标单一,权重平均,统计简单等不足。并在此基础上设计并实现了可自定义评教系统来提高教学评估的效果。
    本文主要研究如何来设计和实现使用灵活的可自定义的评教系统来完成学校的评教工作。通过将数据导入系统来生成评教元数据,以降低数据维护的成本。实现自定义的评教指标用于衡量教学效果,评教结果的数据统计直观明了,从多方面来反馈教学中出现的问题,使得评教系统能够在促进教学中发挥更重要的作用。
    本系统通过使用Spring框架和MySql数据库来提供开发环境,开发过程遵循MVC体系架构和软件工程的思想,通过需求分析,整体设计,详细设计,编码和测试来保障本系统高质量的完成。在安全方面,系统提供了更方便的权限管理和更细粒度的访问控制。同时对系统的可扩展性和并发访问进行了讨论。
    关键词:评教系统,Spring框架,数据统计
    AbstractEvaluation of teaching is one of the most important way to improve the quality of teaching. In the Internet age, informatization is the mainstreams of the teaching evaluation development, compared with the traditional evaluation form, online teaching evaluation system with accurate, timely, lower cost and many advantages. Through the investigation of the current teaching evaluation system, we can found that those systems has some deficiencies such as single index, weight average, lack of result statistics and so on. So a customized evaluation system is designed and implemented to improve the effect of the teaching evaluation .
    This paper mainly studies how to design and implement the use of flexible and customized evaluation system to complete the work of the school evaluation. To reduce the cost of data maintenance, the data import module is used to generate metadata. Implement custom evaluation indicators to measure the teaching effect. Data statistics of the evaluation result is detailed and clear, from many aspects to show the problems appeared in the teaching. Making the system play a more important role in promoting teaching effect.
    The system use the spring framework and MySQL database to provide development environment , the development process follow the principals of the MVC and the thought of software engineering , through the requirement analysis, overall design, detailed design, coding and testing to ensure the quality of the system. In the security aspect, the system provides convenient privilege management and fine - grained access control. And the system scalability and concurrent access is discussed in the paper.
    Keywords: Evaluation system, Spring Framework , Data statistics
    第1章 绪论1.1 课题背景如今,越来越多学生都受到了高等教育,学校和政府有关部门一直以来对如果提高教学质量问题都非常注重。如今教师有效教学和学生有效学习成为近年来高等教育一个很重要的问题。教学质量的提高不仅是科教兴国战略实施的必然要求,同时也是高校的不断发展和进步的客观要求,加强高校教学质量管理体系的建设是非常重要的一部分[1] 。但是,目前国内高校对教师教学质量评估的工作很多依然是依靠通过发放评测表,回收评测表并人工处理评教数据并分析的方式来进行。在互联网+时代,这种传统的评测无疑显露出了很多的弊端。评教指标不能科学化,系统化的建立,评教过程费时费力而且效率低下,对统计结果的分析也只能是单维度的简单的,不能利用信息技术对评估结果进行科学有效直观的分析和展示以促进教学质量的提高。虽然近来有的高校也构建了在线评教系统,但是通过对这些系统的分析,不难发现,这些评教系统存住着不能根据教师的分类制定不同的评教标准,评教指标形式化严重,学生评教的积极性不高,评教结果失真等问题。为了能够及时有效快速的反馈教学的成果,根据需求和规则科学的制定评教的标准和规则,来构建基于网络的可自定义评教系统[2] 。
    1.2 研究意义随着信息技术的高速发展,绝大多数的年轻人都已经习惯了信息化带来的便利和好处,足不出户就可以轻松完成许许多多的事情。尤其是近年来,网络教学的发展和普及,大学生可以通过网络视频就能完成课程的学习。评教的网络化无疑是发展的必然,以此来实现全体的教师和学生共同参与评教工作,使得评教能够更好的,更及时反馈教学成果。网上评教有很多的优点,大学生参与积极,评教覆盖面更广,学生可以随时随地的完成对教师的评教,保证了评教数据的可靠性和真实性,同时对评教结果的分析也可以采取更加直观的图表的形式来展现,通过对最近几年评教结果的分析,可以反映出教师的教学质量的变化趋势,这种机制无疑能够促进教师更好的教学,及时发现教学存在的问题。再者,通过教师对学生多方面的评价,能让学生从多角度的了解自己在学习上或者其他方面存在的问题和不足,而不是仅仅只是通过成绩来断定一个学生的真实能力[3] 。
    1.3 国内外研究现状分析通过对国内一些基于B/S的网上评教系统的研究,发现了这些系统或多或少存在的一些问题:
    1.3.1 评教指标的过于简单化不难发现,现有的评教系统大多都只采用选择题的形势来进行评估,形式过于单一,学生不能表现出对教师教学更多的看法,只能局限于对一些简单的形式化的反馈。而且评教表没有差异性。举例来说计算机专业的评教和艺术专业的评教内容就不应该是一致的,每个课程都有自己的教学特点,有的偏重于理论,有的偏重于实践。因此不能采用单一的评教标准和内容,因此可自定义的评教表就可以很好地解决这个问题[4] 。
    1.3.2 评教指标的权重过于平均从现有的评教表来看,每个评教指标的权重都是一样,大都分为 优良中差或者固定的分数段等。这种评教标准存在着一些问题,有的过于泛化的指标例如认真负责,生动自然等和一些课程特有的指标,例如计算机课程可以帮助学生深入理解计算机原理和动手实践,上机评测这样的指标权重不一该一视同仁,所以每个指标都应该都不同的权重,这样最终得到的评教结果才能更好地展示出教师的教学成果[5] 。
    1.3.3 评教结果的可信度和缺乏科学的数据分析评教的可信度就是说,现在的大学生因为担心评教结果被教师看到,所以隐瞒实情,打分或者评价都会刻意的选择较好的方向,这样就会严重的影响到评教结果的可信度。评教结果的分析大多都只是按照单次评价的结果,对得分进行简单的排序并展示。这样单一的数据分析显然不能得到很好的效果来促进教师的教学。更好的方法应该是对教师一次课程的前期中期后期多次进行评教,将评教结果按照权重得到教师的最终的成绩,并且通过图形的方式展示教师的得分和最近得分的趋势,并对学生的意见和建议进行了归纳,以帮助学校提高教学质量,协助老师提高教学效果。
    通过对国外高校评教工作的了解,下面这些优点和启发可能对评教系统的开发有更好的帮助。一个就是国外高校评教指标的体系不只是学校单方面的制定,学生对评教体系的看法也占有很重要的地位,学生如果能参与到评教指标的制定,更能表达出学生的看法。再就是国外高校利用学生的评教结果对外公开,并给与低年级学生以选课的参考,这样教师可能会更多的会去反思自己的教学方法,学生也更能了解自己想要学习什么或者提前做好准备[6] 。
    1.4 系统开发的主要目标和内容1.4.1 开发目标根据当前学校教务系统的设计,完成整个评教系统架构平台的搭建和数据库的设计,保证系统与学校教务系统能够良好的衔接和运行。
    设计与完善评教流程的体系,抽象出评教表格式,能够实现根据需求来自定义评教表格的内容。
    完成整个系统的设计,开发,实现和运行,包括测试和相关文档的完善。根据评教结果进行数据分析,并通过视图直观的展现出来,据此探索基于评价的教师奖惩机制,制定建议方案。
    1.4.2 开发内容1.4.2.1 数据的导入和教务系统数据的维护和衔接将教务系统导出的学生表,教师表,课程表,学院表,选课表以EXCEL的格式导入到新设计的数据库中,新系统的数据库表的设计需要与教务系统的字段和类型保持一致,并截取对评教有用的字段进行维护,作为元数据方便接下来评教工作的展开。
    1.4.2.2 评教批次和评教指标的可自定义的设计评教批次是指在每学期可能有不止一次的评测,评教批次需要设定开始和截止时间,评教需要在评教批次限制的时间内进行。
    可自定义的评教表包括表头,文本,打分表,反馈和建议等内容,每项的内容和数量是可以自定义设置和增减的,最后将自定义好的评教表动态的保存到数据库中。
    1.4.2.3 系统管理员的设置和角色系统权限控制的设计系统需要设置管理员来进行系统数据库的维护和数据导入的工作。系统涉及的角色包括 学生,教师,管理员,和领导,每种角色所拥有的权限都不相同,角色的权限可以动态的设定,对访问权限做细粒度的划分和控制,保证系统角色的灵活性。
    1.4.2.4 评教结果的查看和统计展示评教结果的展示对每个角色都不相同。学生的结果展示主要在于教师对自己课程表现的评价。教师的结果展示包括学生和领导对自己所教课程的评分和评价内容,并且可以查看相同课程各个学期的得分成绩和评价的趋势的展示。
    第2章 系统开发技术路线2.1 技术架构项目基于JavaEE技术开发和实现。使用Spring框架作为容器来搭建运行平台,同时可以提供良好的扩展性和对象生命周期的管理。通过MySql数据库来对数据进行持久化。Druid连接池是JDBC连接池的实现之一,可以用来缓存应用程序与数据库之间进行通信和传输的连接,这样可以大大减少创建数据库连接所消耗的时间[7] 。使用MyBatis作为ORM框架来完成JavaBean与数据库的映射,通过灵活的动态SQL技术来对数据库进行操作,大大减少了数据库操作的繁琐。使用BootStrap作为前端框架进行布局和提供控件的支持,使用JQuery来提高Web交互体验,使用ECharts来进行数据的可视化绘制。如图2-1所示,是系统整体的技术架构,包括展示层,服务器和数据库三个部分。

    实验工具和实现环境如表2-1所示:



    工具或环境
    使用




    分布式版本控制托管
    Github


    Java环境
    JDK-7


    javaIDE
    Itellij Idea


    WebServer
    Tomcat7


    服务器环境
    Linux Centos 6.5


    数据库
    Mysql5.6



    2.2 使用框架和技术介绍2.2.1 SpringSpring框架是基于Java语言的一个开源框架,不同于普通的J2EE框架,Spring有着对系统更少的侵入和众多特性的用于企业开发的框架,可以在各种平台上运行,而且基于配置模型来提供更好的扩展性。Spring的关键是提供应用级的底层支持,这样开发就可以只需要关心业务层,而不用关心程序部署的平台[8]。
    Spring具有以下特性和优点:
    依赖注入和控制反转:提供一种通过自动装配的技术,Spring将接管bean的生命周期的管理,并对所依赖的资源进行注入,程序自身不需去调用框架,而是Spring框架通过配置来控制程序依赖的注入,可以通过来指定构造器注入和,setter注入等方法来加载bean的值,大大降低了系统的耦合度。
    对众多Java开源框架的支持,例如MyBatis,Struts,JDBC,JMS等,通过Spring容器来统一的管理这些第三方框架可以使得项目更好的开发和维护。MVC框架:提供一种清晰,无侵略性的MVC实现方式。
    2.2.2 Spring MVCSpring框架使用可插拔的MVC架构提供了一个功能齐全的MVC框架的实现,可以用来轻松构建Web应用程序。通过Model,View,Controller三层结构来实现一个基于请求/响应的Web框架。控制器(Controller)用来实现页面的跳转和业务处理的入口,视图层(View)通过模型(Model)的数据来指定使用何种视图技术来渲染出HTML并最终返回给用户,进而结束整个HTTP请求的过程[9] 。
    如图2-2所示,展示的Spring MVC框架的请求处理流程图。

    当用户发送的HTTP请求到达WebServer后,DispatcherServlet是整个程序的入口点,所有的请求都会被DispatcherServlet说处理,它将会调用指定的处理器来映射请求URL和处理器,并将请求数据进行处理和转换,传递给Controller来进行页面逻辑的导航和业务逻辑的代理。控制器会使用用户请求的参数来调用Service接口,经过实际的业务逻辑处理后,将返回的数据封装到Model中并传送到Controller,每一个Controller都会有一个与之关联ModelAndView对象,封装了数据模型Model和视图View的逻辑名称,Controller会将ModelAndView对象传递给给VierResolver,根据设置生成指定的视图类型,并确认真实视图文件路径,之后通过Model数据来渲染生成视图结果,最终将结果通过Response返回到客户端。这样就完成了一个典型的基于MVC模型的HTTP请求过程[10] 。
    2.2.3 MySqlMySql不仅是在小型企业广泛使用的开源数据库管理系统,而且在当今许多互联网企业中,MySql也是备受青睐,得到越来越多用户的认可。它具有安装体积小,运行速度快,执行性能高,免费而且开放源代码,可以根据企业需求进行定制。MySql具有的特性之一就是具有可插拔的存储引擎架构,数据库的执行处理等上层操作和底层的存储引擎分离,使得众多适用于不同场景的存储引擎例如InnoDB,MyISAM,NDB等能够发挥很大的作用,可以根据业务需要和场景随时的改变数据库的存储引擎以满足要求[11] 。同时MySql具有Replicaion的主从架构,对当今互联网企业而言,一台主数据库服务器(Master)和多台从数据库服务器(Slave)的架构可以满足数据库不断增长的数据库读写请求,通过读取从数据库和写主数据库来缓解数据库的读写压力,增加数据库的吞吐量。同时,MySql具有Partition,分表,触发器,视图,函数和存储过程等大型数据库管理系统都具有的特性使得MySql成为当前最流行的开源数据库。
    2.2.4 MyBatisMyBatis是一个基于Java的持久层ORM框架。它是一个具有Sql语句查询,存储引擎,高级对象映射等特性的优秀的持久层框架。通过底层对JDBC连接的处理和自动结果集的检索和封装,使得程序可以从繁琐的数据库操作中解脱出来,把精力更多的放在业务逻辑的处理上。同时动态SQL的支持使得SQL语句的组装和功能更加灵活,大大降低了程序中拼接SQL语句从而导致的SQL注入的风险。MyBatis配置可以基于文件和注解两种形式,通过在映射文件中或者接口上直接编写SQL语句,这种方式虽然会降低开发速度,而且可能会有SQL语句拼写错误的困扰,并不像Hibernate这种可以使用HQL对象查询语言基于配置动态生成可执行SQL语句框架。但是当系统的数据库压力一定的程度时,修改SQL语句可以使得SQL优化变得异常的方便而不用修改程序代码。而自动生成SQL语句的特性就使得SQL优化变的异常的麻烦。同时,MyBatis可以和Spring良好整合在一起,通过Spring来管理MyBatis的SessionFactory使得数据库的连接操作更加的简单。
    2.3 本章小结本章主要说明了系统在整个开发过程中,会使用到的主要技术和框架及其原理的介绍,充分了解需要使用的技术可以大大降低开发过程中遇到的风险,对接下来的设计和开发工作能够顺利进行有很大的帮助。
    第3章 需求分析3.1 总体需求可自定义评教系统主要是为了满足学校对新的评教方法的实施而进行开发的,为的是教学过程中的连续评价和沟通。同时设计了学生对教师的评价表,教师课程质量评价表,学生状态评价表等,各种评教表的指标和格式各不相同,除了量化打分外,还有关于意见,建议等问题的填写。在一个课程的整个学期中,可能会设置开学,期中,期末多次评教,使用的评价表也可能是不相同的。所以如何设计出通用的可自定义的评教表是系统开发的关键。
    不同的评教结果表以不同权重进行组合,例如学生的三次评教权重分别为10%,30%,60%。教师的成绩受学生评教,教师互评,领导评教三方面的影响。
    同时对课程评价的展示不只是每个对象的评价表详情,还要有评教结果的统计,例如每个课程每个批次的评教进度,学生评分,教师评分等信息的展示。所以一个完整的直观的统计结果是必要的。
    除此之外,还需要将现有教务系统中的学生,教师,课程,选课信息通过使用Excel导入到系统中,保证整个系统的数据一致。
    3.2 系统功能需求分析3.2.1 角色和用例图评教系统有学生,教师,领导和管理员四个角色。各个角色的职责各不相同。系统主要功能围绕着针对角色和课程进行教学评价的工作来展开,相比传统的评教系统只是通过学生对教师所授课程的评价作为教师的教学考核标准显然不够准确和全面,通过增加教师和学校领导对课程的评价的方式可以使得课程的受评结果更能反映教师真正的教学情况,从而达到促进教学质量提高的效果。
    从系统角色的角度出发对系统的功能可分为:

    3.2.1.1 学生,用例图如图3-1所示,主要功能有:
    登陆:学生数据被导入系统后按照默认规则生成密码,学生通过验证学号和密码登陆到系统后可以进行教学评价
    评价已选课程:当学生登录系统之后,将会显示学生所选的课程,并提供评教的入口,进入后可以对课程进行评价。已经评价的课程将不允许再次受评
    查看课程信息:基于公正公开的原则,评教的所有信息的开放透明的,学生可以查看任何一个课程的受评情况,包含课程收到的所有评价结果表和数据统计等信息
    查看教师信息:学生可以检索所有的教师信息,查看教师所授课程的评教结果和得分统计等信息

    3.2.1.2 教师,用例图如图3-2所示,主要功能有:
    评价课程组:当老师登录系统之后,可以选择对同一个课程组其他教师所授课程进行评价。同一个课程组即是相同的课程名,不同教师所授课程
    评价学生:登陆系统后,也可以选择对学生进行评价。根据教师授课课程列出所有选课学生,然后可以对学生逐个评价,每个学生只能评价一次


    3.2.1.3 管理员,用例图如图3-3所示,主要功能有:
    评教指标管理:评教指标的作用是维护一组评教表,用来进行评教工作使用。评价表的类型分为:学生评价教师,教师互评,领导评价教师,教师评价学生。评教指标可以新建,包含表头,打分表和问题三个部分,打分表细分为问题和评价得分,等级,权重等信息,评教表的项目可以根据需要增加和减少,最后动态生成评教表。评教表也可以修改和删除
    评教批次管理:评教批次表示在一个批次的时间段内,系统各个角色可以相互进行评价,超过了评教批次的结束时间不允许进行评价,一个学期可以创建多个批次进行评教工作,保证了评教的效果和师生的持续沟通,更能准确的反映出教师教学的效果
    管理员管理:系统存在一个超级管理员,超级管理员可以对其他管理员进行添加删除和修改的操作。普通管理员可以修改自己的信息,不能修改其他管理员的信息
    权限管理:系统通过请求的URL和Session中用户的角色信息判断用户是否有权限请求当前页面或数据内容。URL和角色的权限映射表存放在数据库中,前台页面可以对各种角色的权限进行修改
    数据导入:数据导入即通过教务系统下载的Excel 2003格式的导出文件,通过导入页面上传到系统后后台自动解析并处理,然后将解析到的学生,教师,课程等信息导入到数据库当中。系统在使用前必须要将必要的数据导入到系统后才能开始正常的评教工作


    3.2.2 功能模块划分从上面的角色功能分析中,可以将系统的划分为4个模块。如图3-4所示,每个模块的功能如下:

    基本数据管理:包含教师,学生,课程,班级,专业,学院,管理员等基本信息的维护
    评教系统:包含学生评教,教师评教,领导评教,评教指标和评教批次等
    评教结果和图表的展示:包含课程受评结果,学生受评结果和教师受评结果的展示和相关数据的统计信息
    数据导入:包含课程信息导入,选课信息导入,学生信息导入和教师信息导入


    3.2.3 数据流向数据流图,简称DFD,主要是用来展示数据是如何生成和传递的,并在在哪里被存储和引用。使用图形的方式来描述系统中都有哪些功能和功能之间的联系以及和数据在其中是如何变化的。是分析系统数据流程的一种有效工具,是逻辑模型的重要组成部分。
    如图3-5的系统数据流图,表示系统内部数据的流向。系统管理员维护基本信息和创建评教指标,生成评教批次,使得系统的参加评教的角色可以进行评教表的填写。当评教表填写完成时,系统会自动将参加的评教人,和评教对象,课程,时间,评教批次和评教结果等内容封装到评教结果表中并保存到数据库,当一定的时机触发评教结果查询的时候将会自动进行数据的统计和分析,并生成统计记录存放到相应的表中。

    3.3 系统非功能性需求分析3.3.1 性能需求系统可以安全稳定的运行,并能够及时的响应用户的操作,是一个合格系统所必要的。使用基于Java技术的Spring框架搭建的Web应用完全可以符合本系统的性能需求。下面从3个方面来说明系统要求:
    3.3.1.1 可靠性要求可靠性要求几乎是所有应用所必须的,一个系统可以7*24小时的对外可用是系统高可用的表现,如何保证系统的可靠性就需要在设计阶段考虑到系统程序的稳定性和服务器的稳定性。当程序发生异常时可以正确的处理并记录错误而不会导致系统崩溃可以大大提高系统的可靠性。服务器如果发生宕机能够快速恢复,并及时排查故障,以免下次意外的发生。定时的进行数据库的备份操作以免发生意外导致严重的系统故障。
    3.3.1.2 高效性要求系统的高效主要体现在合理和UI设计和及时的后台响应两个方面。在前端交互设计尽量的友好和高效,使用Ajax异步加载来避免页面的跳转都可以使得评教工作顺序高效地完成。由于考虑到系统在大量并发的时候引起的网络阻塞和系统高负载时会导致响应时间剧增,所以采用延长评教批次时间,分散客户端请求的方法,使得后台运行的更加稳定和高效。
    3.3.1.3 安全性要求系统安全的重要性不言而喻,系统权限设计,防火墙使用,数据库的访问权限,Web项目部署环境的权限设置都会影响到系统的安全性。同时系统层面,前端的数据必须进行数据效验和防止SQL注入等常见Web攻击都必须要加以防范以保证系统的安全性。
    3.3.2 界面需求系统界面简洁大方,交互友好,页面布局合理,关键位置的提醒和醒目的错误提示都是需要考虑的。查询页面增加多项过滤条件可以更加准确的查找,下拉框的级联展示可以快速的定位要查到的内容,尽量使得页面符合用户的使用习惯。
    3.3.3 可行性分析技术可行性:技术可行性分析指的是使用现有的技术是否能够达到系统完全开发的要求。使用现有的技术架构已经被验证完全具备大型Web项目的开发的条件,成熟的开源框架和可扩展的MVC架构使得项目的开发在技术上不存在技术未知的风险,可以保证系统能够按计划顺利开发完成。
    经济可行性:系统是基于Java语言的Spring框架来进行开发。Java是一个开放源码的编程语言,Spring是基础Java的一个轻量级的企业开发的框架,使用现有的流行的开源免费的框架进行项目的开发不需要支付额外的费用。再者,使用开源免费的MySql数据库不仅能够满足性能需求,也可以节省数据库授权的大量的成本。服务器采用开源的Centos或者Ubuntu 等Linux操作系统,能充分保证系统的稳定性和安全性。这样的开源架构可以做到成本最小,所以经济上是可行的。
    研发一套网上评价系统,技术上不存在问题。学院教师、学生都有强烈的提升教学质量、提升课堂教学效果的愿望,能够积极参与和支持评价工作。教务处在全校范围内推动此事,能够为教师教学质量评价提供良好氛围。综上,本项目可以顺利开展和实施。
    3.4 本章小结本章主要讨论了系统的需求分析,为了全面而准确的描述系统的功能需求,使用用例图和模块图等工具详细的介绍系统每一个模块需要完成的功能。此外,还从非功能分析的角度对系统的性能,界面和可行性分析进行分析,为接下来的系统设计做充分的准备。
    第4章 系统设计4.1 整体设计为了保证系统的可扩展性,采用了经典的软件三层架构的设计。从上到下分别是表现层(UI),业务逻辑层(BLL),数据访问层(DAL)。三层架构可以充分的体现了“高内聚,低耦合”的思想,类似于网络的七层结构,在软件开发上根据功能需要分为三层可以保证每层都只负责相应的业务,各层之间通过接口来调用,使得实现和接口可以分离。这样的架构可以充分满足扩展性的要求,当有新的需求产生时,只需要添加相应的实现而不需要修改之前的代码,这同时也符合面向接口的实现,设计时只需要设计上层接口,底层实现可以根据需求而不同,JDBC就是基于这样的设计模式实现,所以当我们切换数据库时,可以做到不用修改太多的代码,而只需要修改加载的驱动就可以满足切换数据库需求的变化[12] 。
    在Spring MVC中,控制器Controller是用来进行页面逻辑导航和对服务层进行代理的,视图View对应于表现层,根据输出类型的不同而使用不同的视图技术来展示数据格式化形式,而Service层对应于业务逻辑层,系统所有重要的业务逻辑的都会在Service层完成。如果Service层需要与数据库通信,就通过调用数据访问层(DAL)来对数据库进行操作。这样就可以达到层次结构分明,可扩展的特点。

    图4-1所示为项目整体的目录结构,可分为配置(Config),源代码(Src),系统资源目录(WebRoot)三个部分。其中配置目录主要存放Spring的配置文件,数据库的连接信息,数据导入映射关系,系统日志的配置文件,MyBatis配置文件和系统的一些属性配置等文件。通过将系统的配置文件统一的存放管理是为了方便程序可以准确的定位配置文件的位置并能够顺利的加载执行,同时也更加方便的查看和修改配置文件。Src目录是系统源代码的存放目录,其中主要有对应于三层架构中的Controller,service和dao的三个目录,此外还有持久对象,工具,基本类,枚举,拦截器,控制器,转换器等目录结构。WebRoot目录是Web项目的资源根目录,含有用于Web页面展示和渲染的静态资源CSS,JS,Image等,还有非常主要的动态页面JSP文件,控制器需要返回的动态页面主要就存放在这里。
    系统的开发流程:通过详细的需求分析后,设计项目的整体架构,然后再根据功能划分模块,进行各个模块的详细设计和数据库表结构的设计。最后根据详细设计完成 整个项目的编码工作。在完成后还需要进行充分的测试,将错误和需要改进的地方整理下来,然后逐一完善直到项目最后上交验收。
    4.2 系统设计思路4.2.1 充分考虑系统的稳定性和扩展性在项目的最开始,就开始考虑项目的稳定性和扩展性可以给项目后期的维护带来更多的便利。使用成熟的,流行的开源框架的稳定版本就是为了保证系统的稳定性。虽然一些其他的框架可以提高开发周期,但是尤其使用的用户少,稳定性不能保证。同时在程序的代码层面,在系统的稳定性主要表现在以下方面:使用Log4j日志,在代码出错和异常处全部打印Log日志,完成的Log日志可以在项目出现问题时及时的确认问题出现的地方和原因,快速结果。通过使用全局的异常处理,将异常信息全部输出到一个页面,统一处理异常并记录,可以保障系统更加稳定的运行。在项目的可扩展性方面,使用Spring框架可以提供对众多第三方框架提供支持,同时项目的结构符合J2EE的规范,使用标准的Controller,Service,Dao三层架构,各层架构负责自己的逻辑处理,面向接口的编程也使得扩展变得更加的简单。
    4.2.2 合理的数据库设计和充分的性能优化在数据库的表设计时,对每个表的增加主键可以使得数据查询在MySql这种以主键索引的数据库中获取更高的查询速度。设置字段的长度可以节约磁盘空间的占用,尽量使用varchar而避免使用text来提高读写性能的。数据库设置完整的外键来保证数据的一致性,同时使用外键可以使得查询字段自动建立索引,这样在where子句中索引将会大大降低数据库读表的操作,提高性能。在代码层面,使用数据库连接池技术,可以大大降低数据库连接的打开和关闭,通过缓存连接可以更快和数据库进行通信。在数据统计展示的时候,每次访问时才会延迟去数据库查询并计算统计,而不是定时任务一次性的对所有数据进行统计,这样可以充分将计算任务分散开来,保证系统的流畅。
    4.3 登陆模块设计登陆模块是进入系统的入口,所有用户必须登陆后才能访问系统。登陆需要输入用户名和密码,如果多次尝试登陆需要输入验证码。登陆时需要选择用户的角色,是学生,教师还是管理员登陆等。登陆成功后,会通过数据库获取用户的权限,并跳转至用户的主页面。
    用户登陆流程如图4-2所示。在验证用户密码的过程中,由于数据库使用MD5算法来加密存储密码,所以将用户输入的密码先进行MD5加密,然后和数据库的加密字符串进行对比,如果字符串验证一致,说明密码输入正确。在用户登陆成功后,从数据库中加载用户拥有的权限并存储到Session中,在页面展示时,根据用户Session中的权限来显示或者隐藏部分功能。
    为了防止有人对管理员账号进行穷举破解攻击,登陆模块加入验证码来防止用户多次尝试登陆,如果登陆尝试间隔小于5分钟,需要输入验证码,如果用户是第一次登陆,默认不需要输入验证码,这样既不是影响用户体验,也使得登陆更加的安全。
    如果用户每次登陆都需要选择登陆的角色会给登陆带来麻烦,所以在用户第一次登陆成功后,默认会记住用户的登陆的角色,将登陆角色类型存储在浏览器的Cookie中,当用户下次登陆中,默认选择用户上次登陆的角色,这样将会使得登陆更加的便捷。

    4.4 基本信息管理模块设计基本信息是系统运行所必要的数据,系统的基本运行和评教的展开都依赖基本信息的完整。基本信息包含 管理员管理,权限管理,学生教师课程等教学信息等。
    4.4.1 管理员管理管理员是系统非常重要的一个角色,是系统权限是最大的,基本信息维护的执行角色。例如权限管理,数据导入,评教指标维护,评教批次的生成等工作都需管理员角色才可以操作。
    管理员默认拥有一个超级管理员,超级管理员不可以修改和删除,系统只能存在一个超级管理员,超级管理员可以执行任何操作,也是唯一一个账号可以进行管理员管理和权限管理的账号。
    管理员管理包括:管理员的添加,修改和删除操作。添加管理员时,先判断用户添加的管理员是否是admin(超级管理员),如果不是则添加成功。修改时候,如果是超级管理员,可以修改所有管理员的信息,如果是普通管理员,那么只能修改自己的信息。超级管理员可以删除自己以外的所有其他管理员,普通管理员不能执行删除管理员的操作。
    4.4.2 权限管理权限管理是系统很重要的一部分功能。由于系统的角色比较多,而角色之间可以进行的操作差别也比较大,那么如何设计权限管理就变成比较重要了。
    当一个用户发起一个请求的时候,首先需要验证的是用户是否已经登陆,如果没有登陆,那么需要将页面跳转到登陆页面。通过添加LoginFilter过滤器可以实现该功能。当所有请求被Spring MVC的DispatcherServlet拦截之前,会首先被LoginFilter截取到,所有可以保证所有的请求都会在执行前进行权限验证。
    当用户登陆成功后,并不是所有的请求都具有权限去执行。角色权限检查流程如图4-3所示。
    权限的具体判断方法:首先获取用户访问的URL,例如/foo/delete,然后去数据库获取用户拥有的所有权限,假设用户拥有/foo/query 和 /foo/ /add 而没有/foo/delete,那么用户就没有权限执行删除的操作,只能进行查询和添加的操作。
    在数据库中,权限表字段包含权限名,权限URL,各个角色的权限位。如表4-1所示,对应角色列为1表示有权限,没有为0。学生有添加权限,而没有删除权限。超级管理员修改每个角色的权限。
    权限记录表



    URL
    权限名
    学生
    教师
    管理员
    领导




    /foo/delete
    删除
    0
    1
    1
    0


    /foo/add
    添加
    1
    1
    1
    1




    4.4.3 评教相关信息管理在本系统的设计中,学生和教师,课程,学生选课信息四个部分的数据量很大,如果手动录入这些数据肯定是不现实的,而且还会严重影响系统的可用性。所以在这些信息的录入是通过Excel导入的方式来进行。而且只可以通过Excel导入的方式来添加,不能手动添加,不能修改,大部分数据一次导入即后只读数据,只有系统进行数据统计时候才会自动修改相应的字段。同时这些数据也不允许删除,删除数据将会导致数据不完整和不一致,而且如果数据被外键所引用,同样也是不允许被删除的。所以这些信息在系统界面中主要以列表和检索的形式体现,同时是作为评教结果查看的入口,只有查找到对应的课程或者教师,学生,才能查看对应角色的评教结果详情。查询页面会设置多个列来过滤检索这些数据,大大加快的数据查询的速度,大大方便了师生查阅评教结果等信息。
    4.5 评教模块设计评教模块是系统的核心模块,是本系统业务逻辑较复杂,使用频率最高的一部分模块,其他模块的实现也是为评教的展开而服务或者提供支持的。
    评教模块主要分为评教指标和批次的设计,评教流程设计,评教结果的展示三个部分。
    4.5.1 评教指标设计评教指标是主要是用来管理和维护打分表,同时可以随时的创建和修改评教表,使得评教指标的体系更加的科学和合理。一个合理的评教指标可以充分的反应出受评对象的真实情况,有利于后续的反馈和改进。评教指标设计的过程是对评教表进行抽象的过程,一个典型的评教表如图4-4所示。

    一个标准的评教表包含的内容有:评教表名,类型,评教须知,表项,打分表,问题列表,总分,评价级别。其中表项,打分表,问题列表可以有多个。
    评教指标可以创建,修改和删除,只有没有使用的评教表才可以删除,图4-5所示为删除评教表的流程:

    4.5.2 评教批次设计评教批次是一次评教完整的生命周期,从评教批次的创建,开始日期到结束日期这段时间,参与者可以对受评对象进行评价的过程。不在评教批次的时间段内是不允许进行评价的。不同于一般的评教系统,评教批次的加入可以的使得一个学期可以进行多次的评教工作,并且每个评教批次都可以使用不同的评价表,这样可以更加充分和反映受评对象整个学期的整体表现。一个评教批次包含批次名,开始日期和截止日期,学期,评教表Id等内容。
    评教批次在结构上并不复杂,但是有一个要求就是不允许任何时刻同时存在两个评教批次,也就是说评教批次的时间不能冲突。判断的步骤是,首先判断开始日期是否被其他批次日期包含,然后是截止日期是否被其他批次日期包含,最后判断开始日期和截止日期之间是否涵盖了其他批次的时间。
    4.5.3 评教流程设计评教有四种类型。学生评价教师,教师评价学生,教师评价教师和领导评价教师。其中对教师的评价体现在对教师所授课程的评价,最终反映在教师得分的影响上。

    一个基本的评教流程如图4-6所示。首先判断当前时间是否在评教批次时间内,如果不是,那么就只能进行数据查询的操作,不能评价。否则就展示角色可评价的所有对象,进入后展示出评教表进行打分和问题的填写。如果填写没有问题就保存到数据库中,结束评教流程。
    当角色登陆后,各自主页展示的可评价对象各有不同。各个角色展示的可评价对象如下所示:

    学生评教:展示学生本学期所选得所有课程,点击进入后可以对课程评价
    教师评价学生:展示教师本学期所授的所有课程,选择课程进入后展示课程的所有选课学生,点击学生进入后可以对学生评价
    教师评价教师:展示教师本学期所授课程的所有课程组,不能评价自己的课程,只显示评价课程名相同,不同教师所授课程
    领导评教:展示所有的课程,可以选择任意课程评价

    在可评列表中,已经评价的记录显示为已评价,相同的评价对象只能评一次,不允许重复评价。
    4.5.4 评教结果展示设计评教结果的展示主要分为三个方面:课程,教师和学生。通过系统的课程管理,教师管理,学生管理可以查找到想要查看的对象,点击进入对象详情可以查看评教结果相关信息。
    4.5.4.1 课程详情课程展示出受到学生,教师,领导打分的平均分,每个评教批次的平均分,评价等级所占比例。这些数据是通过对所有评价结果表的统计得到的。然后展示课程参与的所有的评教批次,每个批次分别显示来自每个评价结果表的得分,评价等级,评价人等信息,点击详情可以查看评价结果表的所有信息。每一个评教批次对应一个评教结果的统计页面,统计的数据有:当前评价的人数和总人数,评价进度,平均分,评教等级的统计,每个表项的平均得分和等级,收到的所有回答和建议等信息。
    4.5.4.2 教师详情显示教师的平均分。通过各学期查看所授课程的平均分和各评教批次的平均分。点击课程进入可以查看课程详情。教师的各个批次的得分趋势图。
    4.5.4.3 学生详情显示学生的平均分,每个学期的平均分,等级统计,每个表项的平均得分和等级,收到的所有回答和建议,以及来自每个教师的评价结果表详情的查看。学生每个批次的得分趋势图。
    评教结果的查看页面布局如图4-7所示:

    4.6 数据导入设计数据导入模块是为了免去手动录入学生,教师,课程等信息所设计的。通过上传的Excel文件,经过系统解析和处理后,存储到数据库当中,并进行密码的初始化等操作。
    数据导入包含教师,学生,课程和选课信息四部分内容的导入。导入需要考虑的问题有:导入的文件内容字段可能会发生变化,导入的文件格式,版本,大小要求,导入的数据可能会和数据中数据库冲突,导入结果的统计信息。
    系统使用POI来处理Excel文件进行数据的读取。一个文件的导入流程如图4-8所示。
    为了防止Excel字段的变化导致无法正常读取的情况,使用一个额外的配置文件来将Excel中的字段名与对象的属性设计映射关系。先读取Excel对应字段的数据,然后通过字段名映射到对象的属性名,之后根据属性名调用对应的setter方法,通过反射动态生成对象并存储到List中,所有数据都读取完成后,将List中的数据保存到数据库。在保存数据到数据库的过程中,为了方便查看导入结果,加入了导入过程的统计信息,包含解析到的数据记录数,成功导入数据库的记录数,数据库已经存在而舍弃的记录数和导入失败的记录,以及失败的原因。当数据导入完成后将显示导入结果的统计信息。

    4.7 系统数据库设计数据库设计是系统设计中非常重要的一个环节,一个好的数据库的设计可以使得数据库有更好的读写性能,扩展性,保证数据完整性和数据一致性,提高数据库系统的吞吐量等优点。下面分别介绍数据实体关系和数据库表结构的设计。
    4.7.1 数据实体关系数据实体的关系可以用ER图来表示,系统主要表结构如图4-9。

    4.7.2 数据表结构设计系统主要表结构的主要字段如表4-1 至 4-3 所示:
    学生表用于存放学生详细信息。



    字段名
    数据类型
    是否为空
    描述




    Sid
    Varchar(20)
    NO
    学号


    Name
    Varchar(20)
    NO
    学生姓名


    Password
    Varchar(50)
    NO
    密码


    IdNumber
    Varchar(30)
    NO
    身份证号


    AvgScore
    Float(5,2)
    YES
    平均成绩


    Departmentid
    INT
    NO
    学院Id


    Majored
    INT
    NO
    专业Id


    Classid
    INT
    NO
    班级Id



    评教指标表用于评教表的管理。



    字段名
    数据类型
    是否为空
    描述




    Id
    INT
    NO
    评价表Id


    Type
    Varchar(20)
    NO
    类型


    Title
    Varchar(100)
    NO
    表名


    Note
    TEXT
    NO
    评教说明


    CrateDate
    DATE
    NO
    创建日期


    JsonString
    TEXT
    NO
    序列化字符串



    评教批次表用于存放批次的详细信息。



    字段名
    数据类型
    是否为空
    描述




    Id
    INT
    NO
    批次Id


    Name
    Varchar(20)
    NO
    批次名


    Season
    Varchar(100)
    NO
    学期


    BeginDate
    Date
    NO
    开始日期


    EndDate
    Date
    NO
    截止日期


    mtime
    DateTime
    NO
    最后修改日期


    stuAvgScore
    Float(5,2)
    YES
    学生评教师平均分


    teaAvgScore
    Float(5,2)
    YES
    教师评教师平均分


    teaStuAvgScore
    Float(5,2)
    YES
    教师评学生平均分



    4.8 本章小结本章主要介绍了可自定义评教系统主要功能和模块的详细设计,使用流程图来展示每个流程执行的过程,以及实现思路。最后通过对系统数据结构的分析和数据实体之间的关系来确定表结构的设计,使得接下来的系统实现能够顺利的进行。
    第5章 系统实现5.1 系统功能模块实现由于系统模块部分存在相似性,下面将介绍主要模块的实现界面,实现思路和部分关键代码。
    5.1.1 系统登陆系统登陆的界面如图5-1所示:

    系统登陆输入账号密码,如果尝试多次登陆还需要输入验证码。选择用户类型后可以登陆到系统。
    其中验证登陆部分代码如下:
    session.setAttribute("lastLoginTime",new Date().getTime()); //设置最后一次登录时间 Boolean skipVerify = (Boolean) session.getAttribute("skipVerify"); //是否需要输入跳过验证码 if(skipVerify==null){ //如果sessio已经失效说明不需要验证码了 skipVerify = false; } if(!skipVerify) { //如果需要检查验证码 //如果输入的验证码不正确 if(StringUtils.isBlank(verificationCode) || !verificationCode.equals(session.getAttribute("verificationCode") )){ model.addAttribute("error","验证码错误"); session.setAttribute("skipVerify",false); //需要验证码 return "index"; }}String type = user.getType(); //获取用户角色类型 UserType userType = UserType.toUserType(type); boolean loginSuccess = false;Cookie cookie = new Cookie("loginType",type); //记住用户角色信息 cookie.setMaxAge(365 * 24 * 60 * 60);response.addCookie(cookie); String viewName = "index"; user.setPassWordConvertMD5(user.getPassword()); //MD5加密密码 switch (userType){ case ADMIN: Admin a =adminService.login(user); if(a!=null){ session.setAttribute("admin", a); viewName="redirect:/admin/admin"; loginSuccess = true; } break; //省略其他角色登陆信息 default: logger.error("未知的登录角色! " + type); model.addAttribute("error","未知的登录用户的角色!"); return "index"; } if(loginSuccess) { List<Privilege> pList = privilegeService.findAllByUserType(userType); addPrivilege(session, pList); //权限信息放入session removeOtherUser(session, userType); //移除当前session中其他已经登陆的用户 session.setAttribute("userType",userType); //设置当前用户的类型 return viewName; //返回到用户主页 }else { model.addAttribute("error","用户名或密码错误"); return "index"; }
    5.1.2 评教指标管理评教指标列表如图5-2所示,可以对指标进行修改,删除和创建。

    点击新建评教指标可以跳转到添加评教表的页面,如图5-3所示。

    填写一个评教表完整的信息后,可以随意的添加和删除任一项内容,实现评教表的灵活和可自定义。同时在指定的位置添加输入提示,防止输入错误。
    5.1.3 评教流程下面从教师评价学生的角度来介绍系统评教流程的实现。
    当教师登陆后,可以选择评价相同课程组的课程,也可以选择对自己所授课程的学生进行评价。当教师选择评价学生的界面如图5-4所示:

    点击任意课程,下方将会显示选择该课程的所有学生列表,点击“去评价”可以对学生进行评价。评价表如图5-5所示:

    评价表填写完成后提交,系统会将评价表和评教结果保存到数据库中。评教完成后可以查看该学生评教结果,如图5-6所示:

    学生详情页面将会展示出学生基本信息,平均得分,各个学期得分统计,学期得分趋势图,和各批次的评教结果表等信息。
    5.1.4 数据导入数据导入的实现界面如图5-7所示。分别有课程信息,学生选课信息,教师信息和学生信息导入4种选项。以课程信息导入为例,将包含所有的课程信息的Excel文件上传后,课程信息将会被解析被保存到数据库中。如果上传文件过大,文件不是以.xls后缀结尾的文件,不是标准Excel 2003文件,Excel内容检测到不是课程信息,选择的学期和Excel文件中解析到的学期不一致等错误都会终止数据导入流程,并在前台展示出对应的错误信息。

    如果文件解析成功并在导入过程中没有发生错误,页面会跳转到导入结果页,展示导入过程中的各项统计数据,如图所示:

    5.2 安全和稳定性实现5.2.1 数据效验数据校验是指通过一定的规则对前台传递参数的合法性进行检验的过程。不合法的数据将会导致数据不完整,也有可能导致系统出错。保存合不合法的数据到数据库中是没有意义的。一个合格的接口总应该假设输入的参数可能是非法的,而不是默认输入参数就一定是正确的。用户的输入也总是千奇百怪的,没有充分的数据效验将会使运行时产生许多问题。
    数据效验体现在前端的表单效验和后端程序的效验。本系统前端的表单效验使用的JQuery Validation,通过在页面编写JS代码或者在HTML标签内使用效验参数等方法实现表单效验[13] 。如图5-9 是修改密码页面数据效验的示例:

    页面使用Js效验代码的代码如下:
    $(function() { $("#form1").validate( rules:{ oldPwd: {required:true}, pwd: {required:true, minlength:3}, pwd2: {required:true, equalTo:"#pwd"} }, messages:{ oldPwd: {required:"请输入原密码"}, pwd: {required:"请输入新密码", minlength:"至少输入3个字符" }, pwd2: {required:"请输入确认密码", equalTo:"两次密码必须相同" } } }); });
    如果只进行前台数据效验而不进行后台数据效验,那么正常用户操作是不会引发错误的,但是如果用户伪造HTTP请求,传递不合法的参数,这样后台就需要进行数据效验。后台主要效验的内容有:参数是否为空,字符串是否空串,字符串长度是否超过数据库数据字段类型长度,整数是否小于等于0,时间格式是否合法等。完善的数据效验可以增加系统的安全性和稳定性,是必须要重视的。
    5.2.2 XSS漏洞攻击防范XSS(Cross Site Scripting),叫做跨站脚本攻击,是通过在请求参数中插入恶意可执行脚本,实现对用户游览器的劫持控制[14] 。例如表单数据插入类似“<input/>”的代码发送到数据库,如果后台服务器不做任何处理就存入数据库,那么当数据在前端加载的时候就会被当成JavaScript脚本执行,并显示出HTML的输入框。通过这样的方法植入恶意代码,就可以达到攻击的目的。
    通过对前端所有数据的参数就都进行HTML和JavaScirpt代码的转义处理,这样数据库就会以“<input\/&gt”的形式存储。再传送到前端展示的时候,就可以显示成文本<input/>的形式而不是一个输入框。这样就可以达到防止XSS漏洞攻击的目的。
    但是如果我们在控制器的每个方法中都加入这样转义代码,将会导致代码重复。通过Spring提供的Converter服务,可以实现一个从String到转义后String 的一个StringConverter类,如下所示:
    public String convert(String text){ text = StringEscapeUtils.escapeHtml4(text); text = StringEscapeUtils.escapeEcmaScript(text); return text;}
    然后将该转换器注册到Spring的数据转换服务中。
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.tqe.base.converter.StringConverter"/> </set> </property></bean>
    通过这种方法就可以完成了系统全局的转义工作,防止了XSS的攻击。
    5.2.3 并发访问对一个系统而言,并发访问会给系统带来极限压力,并且能出现未知的异常。随着使用人数的增加,同一时刻如果大量的涌入用户将会导致系统响应慢,系统不稳定,产生并发错误,严重时可能会导致服务不可用。下面给出一些并发性能问题的一些解决方法:
    使用CDN加速,将静态资源缓存在离用户最近的服务器节点上,减少服务器处理HTTP静态资源所消耗的CPU和网络资源,可以有效避免网络拥堵,降低系统响应时间。
    使用负载均衡和服务器集群。负载均衡负责将请求通过一定的路由算法将客户端请求分发到指定的服务器上来继续处理请求从而解决低单台服务器的单点问题和负载过大的问题。使用负载均衡理论上可以线性扩展系统服务的吞吐量,但是需要考虑数据库高负载时对数据库的优化策略,例如读写分离,分库分表,使用缓存服务器等手段。
    此外,在代码上进行性能优化可以大大的降低并发访问带来的性能问题,例如分散数据请求的时间,使用消息队列,缓存,充分利用多线程等[15] 。
    5.3 系统测试对任何系统而言,测试都是必不可少的环节,测试可以发现系统存在的很多问题,所有的软件上线之前,都应该进行充足的测试之后才能保证上线后不会Bug频发,或者是功能不满足需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。
    5.3.1 单元测试一个合格的程序员都应该进行单元测试,单元测试是从开发者的角度对程序代码正确性的一种测试[16] 。传统的单元测试都是根据系统模块的划分,分别测试每个独立模块或方法的正确性,通过输入和输出来检测模块是否正常运行。通常,在每一个新的版本发布前,都需要进行一次完整的单元测试,以保证新添加的功能和特性是正确的,并且没有影响到已完成模块的正常运行。
    Junit是JavaWeb项目使用最广泛的单元测试工具。在Spring环境中,通过Spring Test和 Junit4的集成使用可以避免多次初始化Spring容器,对控制层代码无法测试等问题。一个测试基类的代码如下所示:
    @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = "classpath:applicationContext-test.xml")public class BaseTest {}
    通过继承测试基类,就可以使用Spring提供的AutoWired注解来注入Controller,Service,Dao等组件进行单元测试。测试成功时代码如图5-10所示:

    5.3.2 功能测试功能测试是指使用黑盒测试的方法,在不考虑程序内部实现的情况下,根据功能需求来对程序的接口进行测试。通过设计完整的测试用例,例如对表单输入非法字符,过长字符,验证系统功能是否完整,边缘测试等手段对系统功能进行验证,保证系统的可用性。
    同时对于系统环境的测试,使用云虚拟机和本地服务器两套环境进行测试,发现在不需要修改程序代码的基础上,系统能够安全,稳定的运行在两套环境中,保证了系统的可移植性。
    5.3.3 性能测试使用阿里云PTS(Performance Testing Service)性能测试服务对线上系统进行压力测试。线上服务器环境为:1核心CPU,1G内存,1Mbps公网带宽,Centos7.0操作系统。
    下面介绍测试过程中常用的指标:

    TPS(Transaction Per Second):每秒事务数,表示系统每秒能够处理的交易或事务的数据
    响应时间:指的是从客户端发出请求到后端响应所用的时间,由请求发送时间、网络传输时间和服务器处理时间三部分组成
    并发用户数:是指实际在线,并一定会对系统产生压力的用户数,通常比在线用户数要少的多

    压测过程中使用了2台并发机器,每台机器20个用户并发,对系统主页,登陆,学生查询和课程查询等模块进行并发访问,得到的测试结果如图5-11所示:

    测试结果是有40个用户并发时,课程管理相关页面的响应时间甚至达到了7s,通过查看服务器出网流量发现已经达到1381kb/s,可以看出服务器的带宽已经达到峰值,如果系统使用5Mbps的带宽,系统的响应时间和TPS将会大大增加。在整个测试的过程中,CPU的使用率占用仅8%,也提现出带宽瓶颈对系统的影响非常严重。
    通过将带宽升级到5Mbps,在相同用户并发数下继续进行压力测试,得到的结果如图5-12,5-13所示。同样是40个用户并发,系统的TPS已经平均达到了12/s,即便是数据库查询较多的课程管理模块,平均响应时间也已经达到了1.5s,而这时系统的CPU占用率仅为20%,带宽为4984kb/s,已经达到了峰值,可以看出,继续提高带宽继续提高系统并发用户数。
    TPS压测结果图

    系统响应时间测试结果图

    通过压力测试,可以及时的预测系统可能会发生的异常情况,找到影响响应时间过高的瓶颈原因所在,及时的进行系统调优,可以提高系统性能和稳定性,提升用户体验。
    5.4 本章小结本章介绍了系统主要模块的实现方法和部分关键代码,充分展示了系统的完整性,基本符合了系统需求。除此之外,还讨论了系统的安全性和并发访问的实现可以使得系统更加健壮。最后,通过详细的测试,验证了系统的可用性,同时对测试过程中系统出现的问题,能够得到及时的解决,使得系统更加的完善。
    结 论为了能够提高教学质量,及时准确的反馈教师教学过程中存在的问题,设计和开发了可自定义评教系统。系统的具有安全,稳定,低成本,可扩展等特点,从测试和使用情况看,基本满足了需求设计的需要。
    本文主要从需求分析,系统设计和系统实现三个方面来讨论具体的设计和实现的细节,使用用例图,ER图,流程图等工具直观的说明了系统设计的思路和步骤。通过对稳定性,扩展性,数据库设计和系统优化多方面的讨论也使得系统架构设计的更加合理,不仅达到了的上线运行的要求外,还能够对以后可能改变或增加的需求得到及时的扩展和实现。
    当然,系统也存在着一些不足之处,还需要在以后工作中逐渐的改善,从而使系统发挥更重要的作用。能够提升和优化的地方还有:在系统结构上,应该还有更好的解决方法或是设计模式的应用可以充分的提高系统的性能和扩展性。用户体验的提升是一个循循渐进的过程,通过后续反馈的信息对系统的持续改可以使得系统更加简单,易用。同时数据统计的展示还是相对单一的,如何通过更加科学合理的设计数据统计方法,形象直观的展示数据统计结果,提高反馈教学效果等问题还需要进一步的探索和完善。
    评教系统的好坏在很大程度上影响了学校教学质量的改善,通过科学的,准确的,及时的对教学工作进行跟踪和评价,能充分的反映出教学过程中出现的问题,同时优秀的教学方法也能够快速的得到体现,这些信息为寻找和探索更好的教学管理方法提供了支持。所以说,科学的评教管理系统的普及是势在必行的。
    参考文献[1] 教育部. 关于全面提高高等职业教育教学质量的若干意见. 中国职业技术教育, 2007(1):14-15.
    [2] 罗漪. 大学生网上评教体系优化的研究. 江西师范大学, 2013.
    [3] 韩园园. 大学生利用网络评价教师课堂教学的研究. 南京师范大学,2006.
    [4] 解建立, 张倩. 大学生网上评教问题研究——基于S市部分高校调查 . 河北企业, 2015(6):130-131.
    [5] 黄建军, 黄继东, 尹加帮,等. 美国、加拿大和日本高校学生评教的特点与启示. 医学教育探索, 2010, 09(5):621-625.
    [6] 邢永富, 常瑾. 国外知名高校学生评教工作述评与启示——以四所名校为例. 宁波大学学报:教育科学版, 2011(1):59-63.
    [7] 孙朝云, 张羽. 基于B/S结构网上评教系统设计与实现. 计算机应用与软件, 2012, 29(3):183-186.
    [8] 李海海. 基于Spring框架的高校招生管理系统的设计与实现. 湖南大学, 2015.
    [9] 李刚. 轻量级Java EE企业应用实战. 电子工业出版社, 2011.
    [10] 计文柯. Spring技术内幕:深入解析Spring架构与设计原理(第2版). 机械工业出版社, 2012.
    [11] 姜承尧. MySQL技术内幕. 机械工业出版社, 2013.
    [12] 阙丽平. 福建经贸学院教师考评系统设计与实现. 电子科技大学, 2014.
    [13] 单东林 张晓菲 魏然. 锋利的JQUERY. 人民邮电出版社, 2009.
    [14] Martin M, Lam M S. Automatic Generation of XSS and SQLInjection Attacks with Goal-directed Model Checking Usenix SecuritySymposium, July 28-August 1, 2008, San Jose, Ca, Usa. 2008:31-44.
    [15] 闫新. 基于WEB的教学评价系统设计与实现. 电子科技大学, 2014.
    [16] Beck K, Gamma E. Test-infected: programmers love writing tests More Java gems. Cambridge University Press, 2010:357-376.
    [17] Gupta P, Govil M C. Spring Web MVC Framework for rapid open source J2EE application development: a case study. International Journal of Engineering Science & Technology, 2010, 2(6).
    6 评论 63 下载 2019-09-09 09:29:40 下载需要15点积分
  • 基于Android实现的减肥塑身平台APP

    摘要人们日益关注自身健康与美,好的身材更是所有人追求的目标,但塑造完美的身材塑造非易,对于体型肥胖的人来说更是难上加难。虽然目前国内有微信运动,跟我练腹肌等应用,但是这些应用缺乏个性化。论文以减肥健身为目的,根据健身者特点与健身过程成效,开发自适应的塑型系统。论文采用JAVA语言 ,MySQL数据库, Tomcat服务器 ,设计并实现制定自适应计划,摄入支出热量查询,身材变化,一分钟了解自己等功能。希望通过该平台让每一个都能实现减肥瘦身,提升自己的身体素质。
    关键词:减肥塑身,Android ,JAVA,MySQL ,tomcat
    ABSTRACTNowadays, people pay attention to health and beauty day by day. A good figure is the pursuit and goal of all people. However, it is not easy to shape a perfect figure for normal people. To shape a perfect figure is extremely difficult. Although there are APPs like WeChat Sports, Follow Me to Exercise the Abs and so on, most of those APPs lack individuality. This thesis takes weight loss and body building as goals and develops a self-adapting body building system according to body builders’ features and body building effects in the process. The thesis adopts JAVA language, MySQL database and Tomcat server to design and realize the functions of formulating self-adapting plan, query of intake and consumed heat, figure changes, knowing yourself in a minute and so on. It is expected that through this platform,every person can realize weight loss and body building, thus improving physical fitness.
    Key words: loss weight, plan , Android ,Java
    第一章 绪论第一节 背景和意义通过一套 “ 以计划为引导,明确目标;以直观的训练变化趋势,树立信心;以摄入支出平衡体系,科学减肥塑形[1] ”。但我的口诉和文章的宣传范围有限,所以我决定设计一款 基于 Android 的减肥塑身平台,让更多的用户能够通过我的方法科学健康快乐瘦身。
    随着移动移动互联网的发展,根据中国互联网络信息中心(CNNIC)发布的数据显示,仅仅中国网民就已经达到6.68亿,而手机网民规模就达到5.94亿[2]。而Android 做为使用人数最多移动开发平台,且随着android material design 全新的设计体验[3],用户体验度不断的提升,Android 将会更进一步占领市场份额[4]。
    目前在国内外,减肥健身软件发展已久,在这些数不胜数的软件中无非都是围绕着,教你减肥是什么,为什么要减肥,怎么才能减肥。随着信息技术时代飞快的发展,获取这些信息的手段已经不是难事了,人们懂得这些道理,却无法坚持下来。我认为,一个减肥健身应用做得再好,用户无法坚持也是白白浪费时间,如果能让用户坚持锻炼,并配合使用优秀的减肥健身软件,那么减肥健身将事半功倍,这将是一个很大的革命。
    第二节 国内外研究现状减肥健身应用在当前,国际上较为普遍的减肥健身应用主要有moves、Nick + Running等等。国内常见的有:微信运动,马甲线,健身宝典,跟我练腹肌,动动记步器,薄荷,美趣。随着人们生活水平的不断提高,追求美,这类减肥软件也不短不单单停留在片面的减肥健身教程上,其功能也越来越多样,服务也趋向于多元化发展,一般都提供减肥健身教程,记录运动多久,食物/运动热量查询,以健身爱好形成的社区平台等实时性功能。大体上可以分为以下几种:
    1.以减肥健身教程为主导的应用
    以减肥健身教程为主导的应用指它的用户群体或者是用途主要偏向于查询动作该如何完成,资讯相关知识,其中基于 Android 平台以减肥健身教程为主导的应用代表性的包括 健身宝典,跟我练腹肌,马甲线等。客户群主要带着明确的目的想去专门练习某些动作,已达到某种效果。
    2.以运动社区为主导的应用
    以运动社区为主导的应用指它的用户群主要通过宣泄健身心得,运动状态提供一个交流平台,其中基于 Android 平台以运动社区为主导的应用 主要以咪咕运动,keep 等,这些社区型的健身应用为用户营造了一个氛围良好的交流平台。
    3.以饮食为向导的应用
    以饮食为向导的应用指它主要以控制饮食为主要减肥手段,在女性群里中比较受欢迎,其中基于 Android平台以饮食为向导的应用为主导的应用主要以薄荷,美趣等,这些应用都以有丰富的食物库,供广大用户查询。
    4.以建立教练与学员互动为向导的应用
    以建立教练与学员互动为向导的应用主要以健身房为中心,大部分发起者是健身房的教练带动学员下载,作为健身圈的一个专属交流分区。其中基于 Android 平台以建立教练与学员互动为向导的应用主要以健盟等,这些应用内有大量的私教可供大家提问,解答健身疑惑。
    5.以树立目标,记录三围等身体变化的应用
    以树立目标,记录三围等身体变化的应用面向的用户群是那些励志要减肥,却因为种种原因无法坚持下来的人们提供一个树立信心的平台。其中基于Android 平台以树立目标,记录三围等身体变化的应用现在并不多见,这也是我们型男计划的主打方向。
    第三节 相关知识1.健身指标(1)BMI 身体质量指数(BodyMass Index)

    BMI 是目前国际上衡量一个人胖瘦程度以及健康的衡量标准;

    BMI 计算方法: BMI = 体重(kg)÷身高^2(m)
    轻体重BMI:BMI <18.5
    健康体重:18.5 < BMI < 24
    超重BMI : 24 < BMI < 28
    肥胖:28 < BMI

    (2)标准体重与健康体重范围

    标准体重是衡量一个人的健康状况的重要标志 ,无论是太胖还是太瘦都对健康不利,且不能给人美感,也是成为型男的标准之一。

    标准体重与健康体重范围计算方法:
    男性:标准体重 =(身高cm-80)×70﹪
    女性:标准体重 =(身高cm-70)×60﹪
    健康体重范围 = 标准体重的正负10%

    (3)BMR (Basal Metabolic Rate)

    BMR (Basal Metabolic Rate)是维持基本生理机能的最低热量值,BMR相当一个人处于植物人状态时所需的热量[5]。

    BMR的计算方法:BMR =体重(kg)×24
    不过BMR并不能准确的描述一个人的最低消耗热量,因为瘦肉组织与的生理代谢所需的热量多余脂肪组织,所以身材越胖其每小时的BMR会比身材瘦的人小。而且一个人无论在不爱运动,也会有轻微的运动,比如翻身睡觉,讲话等一切都是需要消耗热量的。从而引出了REE概念。

    (4)REE (Resting Energy Expenditure)

    REE 静态能量消耗值,是根据身高,体重,年龄比来进行计算的能量消耗值。所以 REE 才是一般人所需的最小热能需求量。
    REE计算方法:
    女性REE =(6.25 × 身高) +(10 × 体重)- (5 × 年龄) - 161
    男性REE=(6.25 × 身高)+ (10 × 体重) - (5 × 年龄) + 5

    (5)由活动系数计算出每天所需的热量

    根据上诉REE数据来看,在相同的体重、身高、年龄下的人,应该拥有相同的REE值;但事实上,因为每个人每天所需的热量,都会随着活动量而有所不同,因此我们必须把活动系数算进去,才能得到真正的基本热量值。
    每天所需的热量 = REE × 活动系数




    活动内容
    活动系数




    卧床(全天)
    1.2


    轻活动生活模式(多坐或缓步)
    1.3


    一般活动度
    1.5~1.75


    活动量大的生活模式(重工作者)
    2.0



    (6)减肥期间每天必须摄取的热量

    如何最健康,最有效率的减肥,一直是人们关心的重点。如果太急于求成,减肥速度过快不只对健康无益,还可能造成高危险性的酮酸中毒,而且复胖率也比较高。具权威机构调查每周减0.5-1公斤最合适[6]。
    那么如何计算每天必须摄入的热量?首先要制定计划,参考自己的理想体重,求出与当前体重的差值。然后根据每公斤体重需要减少七千七百大卡的热量值,计算出欲达到目的必须减少的总热量。在根据以每周减少0.5-1公斤的效率,决定合理减肥期间,必须减少摄入的总热量除以天数,得到每天必须减少的热量。最后,将前面计算出的由活动系数计算出每天所需的热量值,减去每天必须减少摄取的热量。得到的就是减肥期间每天必须摄入的热量。

    2.开发工具(1)Java SDK
    Java SDK是Java的运行环境,也是Java开发工具包。JavaSDK为Java开发者提供一个开发环境以及一些类库的支持等等,帮助开发者进行相关的开发活动。
    (2)Eclipse
    Eclipse是运行在Java SDK基础之上的一种可扩展的集成开发环境,帮助开发者进行开发活动。Eclipse的本体是一个框架和一组服务,最初主要用来进行Java语言的开发活动。但通过安装其他的插件组件。帮助开发者进行各种各样的开发活动。Eclipse也可以用来作为与软件开发无关的其他应用程序类型的基础。
    (3)Android Studio
    Android Studio 是google 官方推荐的android 开发工具,Android Studio 能够提供高效的android开发环境,具有实时查看内存变化,实时预览界面效果,一行代码快速依赖等功能帮助开发者快速开发。
    (4)Android SDK
    Android SDK是安卓开发工具包。Android SDK为开发者提供类库的支持以及一些常用的工具,比如命令行调试工具、数据库调试工具等,帮助开发者进行开发活动。
    第二章 减肥塑身平台的需求分析第一节 减肥塑身平台的需求分析减肥塑身系统的设计,是要开发一款运行在Android智能手机和平板上[7],通过制定计划,围绕着计划所需要付出的一系列努力和变化,以达到完成计划的目的,最终帮助用户克服难以坚持锻炼无法成功减肥的困扰。帮助人们有效的减肥。如下图减肥塑身应用系统用例图,下表为减肥塑身应用系统用例表。




    用例名称
    用例描述




    登陆
    以帐号为中心,绑定用户数据


    完善个人资料
    个人资料的完善与准确度决定了,制定计划的准确性


    一分钟了解自己
    根据个人资料计算出各个健康指数


    新增计划
    根据自身身体状况量身制定计划


    查看计划
    查看完成/未完成的计划,了解自己与目标的距离


    完成计划
    将未完成的计划更改为完成


    添加身材记录
    根据三维身材分类记录添加记录


    查看身材记录
    以折线图的形式来展现出变化趋势


    查询食物/运动热量
    本地SQLite 建立上千条数据库,方便用户查找


    添加当日饮食/运动记录
    添加当日饮食运动记录,只有当摄入大于支出才能起到减肥效果


    查看饮食记录历史
    饮食记录历史为用户为了健身付出的努力



    通过以上的用例图,可以分析出减肥塑身应用系统的用户为使app方便快速的完成了新增计划,不断去完善计划,最终得以成功减肥。
    1.会员账户系统需求分析会员帐户系统根据现今许多用户压根不了解自己的身体状况,不知道身体质量指数,所以不知道自己是否超重。不知道自己的健康体重范围和健康体重范围,所以没有奋斗目标,没有明确的方向。不知道自己每天所需要摄入的最小热量,心里没有一杆秤,没办法评估今天摄入多了还是少了,不知道自己的摄入是否已经大于支出。不知道中低强度运动心率,那么就无法知道每天的运动是否能起到减肥的效果。我们的会员帐户系统就是根据用户填写的基本数据自动计算出健康数值,方便用户查看。如下图会员帐户系统用例图,下表会员帐户系统用例表。



    用例名称
    用例描述




    体重
    以帐号为中心,绑定用户数据


    身高
    用户根据自身实际情况填写身高


    年龄
    用户根据自身实际情况填写年龄


    性别
    用户根据自身实际情况填写性别


    活动系数
    用户根据应用给出的实例对比选择对应的活动系数


    身体质量指数(BMI)
    用户根据应用给出的实例对比选择对应的BMI


    健康体重范围
    根据用户所填写的信息自动计算得出健康体重范围


    标准体重
    根据用户所填写的信息自动计算得出标准体重


    每天所需的热量
    根据用户所填写的信息自动计算得出每天所需的热量


    中低强度运动心率
    根据用户所填写的信息自动计算得出中低强度运动心率



    2.计划系统计划系统为该项目的核心,用户的一切行为都将围绕如何达成目标与达成目标的过程进行,在制定计划时我们使用减肥健身人士常常关注的几个部位,如体重,胸围,腰围等信息,并设立结束时间,以激励人们在短时间内去努力。还可以写下励志语/自己给自己定的奖惩,在未来的计划达成与未达成之间给自己相应的回报。随着时间的推移,我们的身材会产生一些变化,这时就要新增身材变化,身材变化以部位划分开,并给出了最近一次身材记录,方便大家继续填写。在经过一段时间的努力后,人们就可以清楚的看到自己每个部位/体重的变化趋势图,并与之前的计划进行对比,看是否已经达成计划,以便用户可以提早完成计划。如下图为计划系统用例图,下表为计划系统用例表。



    用例名称
    用例描述




    查看计划
    对自己定下的计划进行查看翻阅


    完成计划
    对未完成的计划进行处理,将其变为已完成状态


    新增计划
    根据自身身体状况量身制定计划


    查看身材变化趋势
    对身材变化进行查看翻阅,了解自己的付出与成果


    新增身材变化
    记录身材变化,身材包括:体重,胸围,腰围,左臂围,右臂围,肩宽



    3.摄入支出系统摄入支出平衡根据能量守恒定律当摄入小于支出时,才能有效减肥,本模块系统主要解决用户无法知道自己具体摄入与消耗热量之间的关系。如下图为摄入支出比系统用例图,下表为摄入支出系统用例表。



    用例名称
    用例描述




    查询食物热量
    查询本地内置上千条食物库热量


    添加摄入记录
    对今日摄入的多条饮食记录进行保存


    查询摄入记录
    对多日的摄入热量明细进行一个查询


    查询运动热量
    查询本地内置上千条运动库热量


    添加消耗记录
    对今日消耗的多条饮食记录进行保存


    查询消耗记录
    对多日的消耗热量明细进行一个查询



    第二节 可行性分析可行性分析的目的是在软件开发之前对新系统从经济、技术、法律、进度、文化、运行等方面进行可行性分析。可行性分析能减少开发风险,提高软件开发的成功率。
    1.经济可行性经济可行性,一方面指的是项目进行过程使用现有资源,比如人力资源、资金资源的可能性;另一方面指的是开发过程中所需要的成本和项目完成后的收益。
    硬件:

    个人电脑一台:5000元,开发人员已经拥有。
    网络设备及相关费用:50元。
    Android智能手机:Nexus5 3000元,开发人员已经拥有。

    软件:

    Java SDK、Eclipse、Android Studio、AndroidSDK:均可从与之相关的官方网站上免费下载,花费为0元。
    其他:

    参考资料、相关教程:均可从网络、图书馆等地方免费获取,花费为0元。
    收益:

    现阶段下载、使用本应用均不收取任何费用,也没有加入广告,收益为0元。
    总的来说,开发过程中主要使用的是开发者本人已经拥有或能免费获取的资源,开发该项目时需要的资金额度比较小,而且该额度在开发人员的承受范围内。现阶段没有盈利部分,盈利部分将出现在将来优化后的版本中。
    2.技术可行性技术可行性,指的是开发过程中决策和决策方案的技术,不能超出当前阶段开发组织所熟练和掌握的技术资源条件。在本次开发过程中,开发人员现有的开发技术及开发经验可以承担该开发任务,主要用到的技术有Android 开发技术、Android SDK使用技术、Java SDK使用技术等等。
    3.法律可行性法律可行性,指的是项目本身、项目开发过程、项目投入使用过程和项目报废过程中都符合我国的相关法律法规,没有违法乱纪、侵犯专利权等现象。本次开发的项目本身、项目开发过程均符合我国相关的法律法规标准,项目投入使用过程和项目报废过程经科学预计,也将符合我国相关的法律法规标准。
    4.时间可行性时间可行性,指的是开发时间不能超出当前阶段开发组织所规定的时间范围。在本次开发过程中,项目启动、应用开发到应用展示,有将近一年的时间,时间是足够的。
    第三章 减肥塑身系统的设计与实现第一节 总体设计本系统的主要载体有四个:1.Android设备、2.MySQL数据库、3. SQLite本地数据库、4. 远程服务器;
    Android端作为应用呈现给用户的主要载体,本章后续将会详细介绍。MySQL 数据库在本减肥健身应用系统中作为数据中心存储的载体[8].SQLite本地数据库存储者食物热量库与运动热量库 android 端可以直接从本地获取。远程服务器是租阿里云服务器ECS,云服务器作为连通android端和MySQL 数据库的桥梁,可以方便的调用数据库中的数据用于展现在android 端上。下图为四者的关系。
    第二节 详细设计1.服务端设计后台设计是整个系统中非常重要的部分,主要分成计划模块与用户业务模块两方面。
    (1)计划模块设计
    本应用主要以计划目标为指导,引导用户去达成目标。所以,计划是本应用的核心,所有的操作都将围绕完成计划而努力。在注册完成后必须新增计划,如果已经注册,就可以查看计划,查看的同时可以新增计划,完成计划,新增消耗/摄入热量,查看消耗/摄入热量记录。新增身材变化,查看身材变化趋势等操作。
    (2)用户业务模块设计
    用户是以设备UUID 唯一值作为区分,也就以一台android 手机对应着一个账号,用户不需要手动去输入账号密码,由服务端判断这个帐户在数据库中是否有存在,有登陆,没有则进行注册。每个用户主要具有修改个人基本资料,查看BMI与基础热量消耗等个人健康数据,新增身材变化三个业务。首先介绍修改个人基本资料,每个人的身体状态并不相同,甚至可以说是千差万别。只有掌握每个用户的基本身体状况信息,才能精确计算出该用户的身体状况。查看BMI与基础热量消耗等个人健康数据,这些数据建立在准确的用户基本资料上,通过用户的准确资料计算出BMI,基础热量消耗,与健康体重范围,让用户了解自己的身体状况。新增身材变化,通过每一条身材记录的变化,用户能够直观的体现用户锻炼减肥成效。具有账户切换,进行测量,查询历史三个业务。
    2.客户端设计客户端参考 全新的Android 5.0后的新特性 材料设计 (material design),通过模仿材料的表面以及边缘提供更加真实效果的视觉体验,以真实的触感让用户可以快速地理解和认知这一动作。材料的多样性可以让我们展现出更多反映真实世界的设计与效果,但同时不会脱离现实世界的物理规律。

    根据用户行为, 添加有意义的动画效果,有效地暗示、指引用户。通过动画效果,让物体变化以更连续流畅、更平滑的方式呈现给用户。在实际应用动画上,更加贴近现实生活环境,在交互时及时反馈,转换场景上交互动画更加优美,连贯且有层次区分,而且不能脱离功能,而要服务于功能
    在样式基础上,要考虑不同的饱和度,达到不同的展现效果,用简洁对称的集合形状,并为矩形添加了圆角设计,使得矩形更加柔和。在图片配合文字时,尽量使用图片的原型性,不能失去图片的意义。
    在布局上,按下的状态时上浮的,这样显得更有层次,在适当的时候要考虑元素的z轴空间,z轴的深度表达出了层次关系,顶部的阴影表达深度,底端的阴影表达边界。
    在使用性上,至少要确保可触摸的元素大小至少有4848像素,因为人的拇指最小的点击范围正好是4848像素。在关键的文本信息处要有足够的对比方便读者阅读。

    3.数据库设计本系统所有数据均存储在 Web 服务端上,两 Android 客户端均不涉及大数据存储,故 数据库设计仅包含 Web 服务端的数据库设计,整体数据库设计关系图如下图所示。(1)用户基本信息表
    用户基本信息表主要记录用户的基本身体状况,如身高体重昵称等信息,首次登陆成功后会将用户手机的唯一标示uuid保存认证,注册成后完善信息,具体信息如表所示。




    类型
    长度
    是否null




    userId
    int
    11
    N (key)


    nickname
    VARCHAR
    255
    Y


    authToken
    VARCHAR
    255
    N


    phone
    VARCHAR
    20
    Y


    sex
    Int
    11
    N


    birthday
    VARCHAR
    255
    N


    high
    VARCHAR
    255
    Y


    BMI
    Float
    32
    Y


    high
    Float
    32
    Y


    intakeCC
    Float
    32
    Y


    consumeCC
    Float
    32
    Y


    consumeREE
    Float
    32
    Y


    standardWeight
    Float
    32
    Y


    maxHeart
    Float
    32
    Y



    (2)消耗记录表
    用户通过查询食物库进将食物添加到消耗记录表中,以便日后观察,是否超出的摄入范围。具体信息如表所示。




    类型
    长度
    是否null




    consumeRecordId
    Int
    11
    N (key)


    userId
    Int
    11
    Y


    consumeRecordTime
    VARCHAR
    255
    Y


    consumeCC
    Float
    32
    Y


    consumeRecordType
    Int
    11
    Y


    consumeRecordContent
    VARCHAR
    255
    Y


    goalType
    Int
    11
    Y


    goalStatus
    Float
    32
    Y


    High
    Float
    32
    Y



    (3)计划信息表
    用户通过查询食物库进将食物添加到消耗记录表中,以便日后观察,是否超出的摄入范围。具体信息如表所示。




    类型
    长度
    是否null




    goalId
    Int
    11
    N (key)


    userId
    Int
    11
    Y


    startGoal
    VARCHAR
    255
    Y


    stopGoal
    VARCHAR
    255
    Y


    startTime
    VARCHAR
    255
    Y


    stopTime
    VARCHAR
    255
    Y


    goalType
    Int
    11
    Y


    goalStatus
    Float
    32
    Y


    goalDescribe
    Float
    32
    Y



    (4)身材记录信息表
    身材记录信息表主要记录每个部位或体重的变化,以便日后直观查看到变化趋势。具体信息如表所示。




    类型
    长度
    是否null




    goalRecordId
    Int
    11
    N (key)


    userId
    Int
    11
    Y


    goalRecordType
    VARCHAR
    255
    Y


    goalRecordData
    VARCHAR
    255
    Y



    (5)食物热量信息表
    食物热量信息表主要记录食物的热量与名字,用户通过模糊查询关键字便可以查到该食物的热量,具体信息如表




    类型
    长度
    是否null




    foodId
    Int
    11
    N (key)


    Name
    Float
    32
    N


    Calory
    Float
    32
    N



    (6)运动热量信息表
    运动热量信息表主要记录运动的热量与名字,用户通过模糊查询便可以查到该运动的热量,具体信息如表所示。




    类型
    长度
    是否null




    activityId
    Int
    11
    N (key)


    Name
    Float
    32
    N


    Calory
    Float
    32
    N



    第三节 功能实现1.生成计划功能通过自适应计划,让每个用户找到适合自己的计划,树立明确的减肥目标。用户通过点击想要的达成的效果或者部位,如图所示。



    生成计划页面
    生成计划详细页









    2.身材管理通过身材管理直观的看到身材变化趋势,梳理减肥信心。用户通过测量身材数据,并在app上记录身材变化如图。



    记录身材
    身材变化趋势









    3.摄入支出平衡管理通过摄入支出平衡体系用户可以方便的查询到食物热量等信息,科学健康饮食瘦身。用户在搜索栏中搜索想要查询的食物/运动并根据找到的食物选择摄入的时间与份量,如图。



    查询热量并选择份量
    当日食物列表









    4.健康管理通过基础数据帮助用户计算出个人健康状况表,用户通过修改个人资料,身高,体重等参数,如图。



    修改个人资料
    个人身体状况









    第四章 减肥塑身系统的测试系统测试为系统开发的最后一道工序,只有经过缜密的系统测试,才能保证系统性能与功能的可靠性。通过测试用例反复测试,能将系统内一些隐藏的错误挖掘出来,从而让系统及时得到修复与改善。
    第一节 系统兼容性测试系统兼容性测试包括三种类型,分别为不同Android 版本的兼容性测试、不同 Android 系统的兼容性测试以及不同屏幕分辨率的兼容性测试。

    Android 版本的兼容性测试:通过测试多个 Android 版本,如 4.1,4.3,5.0 以及 5.2 版本等目前市面上较为流行的安卓系统版本,均无出现系统崩溃异常与系统无法运转现象。
    不同 Android 系统的兼容性测试:通过测试目前市面上较为主流的 Android 系统,如 MIUI,锤子 OS,FLYME,百度云 ROM 和谷歌官方 Android 版本。测试过上述这些Android 改版系统均未出现系统崩溃异常与系统无法运转现象。
    不同屏幕分辨率的兼容性测试:通过测试目前市面上较为主流的手机屏幕,如 4 英寸、 4.7 英寸以及 5 英寸大的手机屏幕。系统均能正常运行,并且界面布局不出现混乱和排版错 误,界面图标不会走样,依旧简洁美观。
    总结:经过上述 3 种兼容性测试,得出结论,本系统兼容目前市面上的大部分手机与手机系统。

    第二节 系统功能性测试本系统采用黑盒测试。测试人员无需了解程序内部如何运作也无需了解系统如何实现。 最为核心的功能进行阐述,如表 4-1所示。并且以下测试均为手机网络通畅的情况下进行的, 网络异常测试均已通过,不在下文进行阐述。



    序号
    功能点
    测试输入
    预期结果
    实际结果




    001
    用户注册
    用户第一次打开系统,输入身高体重等基本信息
    用户注册成功,成功进入新增计划计划界面
    同预期测试结果相符


    002
    用户登录
    用非第一次打开应用
    直接进入首页并有提示
    同预期测试结果相符


    003
    新增计划
    新增计划,并选择想要的类型
    新增计划完成,并在我的任务与首页中查看到该任务
    同预期测试结果相符


    002
    完成计划
    用户对正在进行的任务进行完成操作
    用户完成计划,在我的计划与首页中消失
    同预期测试结果相符


    001
    新增身材变化
    用户根据自身真实数据输入身材变化
    添加成功,并在身材变化趋势折线图中查看
    同预期测试结果相符


    002
    查询食物/运动
    用户查询想要搜索的食物/运动
    根据用户搜索的关键字模糊查找出包含关键字的食物
    同预期测试结果相符


    001
    添加食物/运动
    对搜索的食物进行添加
    添加成功后可以在首页列表中查看到数据
    同预期测试结果相符


    002
    修改资料
    修改用户基本资料
    修改成功,用户基本资料改变,个人健康数据也随之改变
    同预期测试结果相符


    ……






    第三节 系统性能测试本系统目前部署在阿里云服务器上,CPU 1核, 内存: 2048 MB, 1Mbps(峰值),进行简单测试。通过增加 连接数量,查看系统 CPU 与内存消耗,可得出结论基于该本地服务器,可同时满足 200-300 号人同时进行请求。
    第五章 总结本文针对当前市面的减肥塑身应用存在的不足,研发了一款基于Android 平台上的新型减肥健身记录系统[15],本文先结合国内外文献,分析了当今Android和减肥健身应用市场的现状与不足后,提出了一个以计划为主导的方向,从客户端,服务端,数据库三处进行详细设计。最后研发出一个功能较为完善的减肥健身应用系统,与其它类型的减肥健身应用系统起到一个相辅相成的效果,以达成最大的减肥瘦身效果。
    未来将不断完善该应用,让这个应用成为一款具有商业价值的产品,帮助更多人减肥瘦身。
    参考文献[1] Cummings D E, Weigle D S, Frayo R S, et al.Plasma ghrelin levels after diet-induced weight loss or gastric bypass surgery[J]. New England Journal of Medicine,2002, 346(21):1623-1630.
    [2] 张璐. 我国手机网民5.94亿 超过电脑成最大上网终端[J]. 中国广播, 2016, 33(1) :6-8.
    [3] Zhangpeng. Material Design实现安卓应用的新界面[J]. 计算机与网络, 2015, 41(8):24-24.
    [4] Shabtai A, Fledel Y,Kanonov U, et al. Google Android: A Comprehensive Security Assessment[J]. IEEESecurity & Privacy, 2010, 8(2):35-44.
    [5] Hayssen V, Lacy R C. Basal metabolicrates in mammals: Taxonomic differences in the allometry of BMR and bodymass[J]. Comparative Biochemistry & Physiology Part A Physiology, 1985,81(4):741-754.
    [6] Sumithran P, Proietto J. Ketogenic dietsfor weight loss: A review of their principles, safety and efficacy[J]. ObesityResearch & Clinical Practice, 2008, 2(1):1-13.
    [7] 徐婉珍.HttpClient组件及其在Android开发中的应用探讨[J].数字技术与应用, 2013, 38(1):78-78.
    [8] Mysql A B. MySQL: TheWorld’’s Most Popular Open Source Database[J]. World Wide Web-internet &Web Information Systems, 2006, 6(8):34-34.
    [9] 杨文志.GoogleAndroid 程序设计指南[M]. 北京:电子工业出版, 2009: 18-24.
    [10] 马昭征. 基于HTTP的安卓与服务器交互方法的实现[J]. 无线互联科技,2015, 78(3):92-96.
    [11] 边清刚, 潘东华. Tomcat和Apache集成支持JSP技术探讨[J]. 计算机应用研究,2003, 20(6):12-14.
    [12] Ingale J. AndroidBased WS Security and MVC Based UI Representation of Data[J]. InternationalJournal of Computer Science Engineering & Informa, 2013, 3(1):33-38.
    [13] Mysql A B. MySQL: TheWorld’’s Most Popular Open Source Database[J]. World Wide Web-internet &Web Information Systems, 2006, 5(3): 18-13.
    [14] Noguchi M, Fukizawa K.Alternate materials reduce weight in automobiles[J]. Advanced Materials andProcesses; (United States), 1993, 143 (8):6-8.
    [15] 姚昱旻, 刘卫国. Android的架构与应用开发研究[J].计算机系统应用, 2008, 17(11):110-112.
    18 评论 232 下载 2018-09-29 23:20:17 下载需要14点积分
  • 基于JSP的小区物业管理系统设计与实现

    摘 要对于小区物业管理来说,其工作流程的繁杂性、多样化、管理复杂、收缴费用与设备维护繁琐。计算机已完全能够胜任物业管理工作,而且更加准确、方便、快捷、高效、清晰、透明,它完全可以克服以上所述的不足之处。这将给项目查询和管理带来很大的方便,从而给物业管理工作带来更高的效率,这也是物业管理正规化、现代化的重要标志。
    因此,开发一套高效率、无差错的小区物业管理系统软件十分必要。本系统的主要目的是告别帐本,安全、快捷的保存数据信息。由于小区物业管理涉及到费用问题,为了增强系统的保密性,使业主利益不受损害,使业主能够对自家的物业费用和投诉等情况提供透明化、直观的了解。
    本毕业设计的内容是设计并且实现一个基于web技术的小区物业管理系统,故而系统主要以J2EE作为开发基础,主要使用了Struts2+Spring+Hibernate等多种框架的结合使用,用Myeclipse作为开发工具,以SQL Server作为数据库,以Macromedia公司的Dreamweaver作为界面美化工具,使用JAVA语言开发,页面采取JSP动态页面开发技术。该系统界面简单、操作方便,容易维护。
    关键词:小区物业管理系统;SSH;JSP动态页面开发
    AbstractFor residential property management, the complexity of the work flow, diversification, management of complex, tedious collection costs and equipment maintenance. The computer is fully qualified to work in property management, and more accurate, convenient, fast, efficient, clear, transparent, it can overcome the shortcomings mentioned above. This will give the project inquiry and management bring great convenience, to the property management work more efficient, this is also the regularization of property management, an important symbol of modernization.
    Therefore, the development of an efficient, error-free residential property management system software is very necessary. The main purpose of this system is to bid farewell to the books, safe, fast and the preservation of data. Because the plot estate management costs involved, in order to enhance the system security, so that the interests of owners from damage, to the property owner can own property costs and complaints, provide transparent, intuitive understanding of.
    The content of graduation design is to design and implement a web based residential property management system, so the system is mainly to j2EE as a development base, the main use of struts2+spring+hibernate and other frame used in combination, using MyEclipse as a development tool, using SQL Server as the database, with Macromedia’s Dreamweaver as the interface landscaping tools, the use of JAVA language development, page take JSP dynamic page technology. This system interface is simple, convenient operation, easy maintenance.
    Keywords: District property management system SSH JSP dynamic page
    第1章 绪论1.1 课题背景科学技术日新月异,信息化时代的来临,以计算机为基础的信息科学在经济和社会生活各个领域得到了极为广泛的应用,尤其在信息管理方面,计算机已是必不可少的管理工具。
    目前,信息已成为继劳动力、土地、资本之后的又一大资源。谁控制的信息越多,谁利用信息资源的效率越高,谁就会在各方面的竞争中占有一席之地,谁就会有更多的优势。从微观上讲,建立一套管理信息系统能够加快信息的周转速度,提高生产效率,从而加强了管理的信息化手段,提高了本单位的经济效益。从宏观上讲,顺应了社会的信息化、社会化潮流,加快了社会的发展速度。据统计,美国在信息管理管理方面80-100%的信息处理由计算机完成;计划管理是80—90%;在计算机应用发展较快的国家中,计算机应用于经济管理的占80%;用于科技计算的占8%,用于生产过程控制的占12%;由此可以看出,信息管理是计算机应用的主要领域。
    1.2 课题目的和意义由于种种原因,我国的信息资源建设水平远远落后于信息基础设施的建设的水平。长期以来,我国信息资源的开发管理未能与信息资源的增长同步进行。我国的计算机应用要比西方国家落后十几年。因此,现在信息资源的开发和利用已被确立为国民经济信息的核心内容,利用现有的信息基础设施,重点开发和推广应用于各类科技、经济等数据库和网络资源服务系统,已经取得巨大的社会效益和经济效益。
    对于小区物业管理来说,其工作流程的繁杂性、多样化、管理复杂、收缴费用与设备维护繁琐。计算机已完全能够胜任物业管理工作,而且更加准确、方便、快捷、高效、清晰、透明,它完全可以克服以上所述的不足之处。这将给项目查询和管理带来很大的方便,从而给物业管理工作带来更高的效率,这也是物业管理正规化、现代化的重要标志。
    因此,开发一套高效率、无差错的小区物业管理系统软件十分必要。本系统的主要目的是告别帐本,安全、快捷的保存数据信息。由于小区物业管理涉及到费用问题,为了增强系统的保密性,使业主利益不受损害,本系统具有仅管理员式的保密功能,还有查询、录入、修改、删除、以及对物业设备统计等功能,使业主能够对自家的物业费用和投诉等情况提供透明化、直观的了解。
    1.3 系统设计思想本系统采用Jsp技术,基于MVC模式开发,使用SSH框架(Struts2、Spring、Hibernate)来增加系统的开发速度。所谓的MVC模式是”Model-View-Controller”的缩写,中文翻译为”模式-视图-控制器”。程序就是用Struts2和Hibernate这两个框架来实现模型层和控制器这两层,Jsp实现视图这一层。一般来说程序就是在数据库和页面之间起桥梁作用的,Jsp页面请求先到action,再到dao,再回到action,回到Jsp页面,action主要处理来自页面的请求,dao主要是和数据库的交互,Struts2主要用在action,处理来自页面的请求,处理完请求后跳转回页面。Hibernate主要用在dao,包括对数据库的增、删、改、查的操作,Spring控制程序的流程。
    SSH框架是J2EE应用中Struts2+Spring+Hibernate三大免费开源框架的结合使用, 它可以看成工具,也是中间件。他是用来提高我们的开发效率,提高我们软件产品的可维护性、可扩展性乃至敏捷性的。他们里面有很多优秀的设计理念及模式应用。比如,Struts属于MVC框架,关键是要了解MVC的概念及大致原理;而Hibernate属于ORM系统,属于持久层的解决方案,同样需要对ORM的概念及原理有一个总体的了解。而Spring属于应用程序框架,其核心是IOC容器以及AOP,Spring中还集成了很多适用东西,比如对JDBC的封装、自己的MVC、对动态语言的简洁访问等,它由以下3个框架构成:
    1.3.1 Struts2框架Struts2是Apache组织的一个开放源码项目。Struts2是一个比较好的MVC框架,提供了对开发MVC系统的底层支持,它采用的主要技术是Servlet,JSP和Custom tag library。
    1.3.2 Spring框架Spring 的核心是个轻量级(Lightweight)的容器(Container),它是实现IoC(Inversion of Control)容器、非侵入性(No intrusive)的框架,并提供AOP(Aspect-oriented programming)概念的实现方式,提供对持久层(Persistence)、事务(Transaction)的支持,提供MVC Web 框架的实现,并对一些常用的企业服务API(Application Interface)提供一致的模型封装,是一个全方位的应用程序框架(Application framework),除此之外,对于现存的各种框架(Struts、JSF、Hibernate 等),Spring 也提供了与它们相整合的方案。
    1.3.3 Hibernate框架Hibernate 是一个开放源码的 ORM 持久层框架。作为优秀的持久层框架实现,Hibernate 框架提供了强大、高性能的对象到关系型数据库的持久化服务,开发人员可以使用面向对象的设计进行持久层开发。简单的说,Hibernate 只是一个将持久化类与数据库表相映射的工具,每个持久化类实例均对应于数据库表中的一个数据行而已。用户只需直接使用面向对象的方法操作此持久化类实例,即可完成对数据库表数据的插入、删除、修改、读取等操作。
    第2章 可行性分析管理信息系统的强大功能越来越被物流行业内的相关人士所重视,通过系统企业能够更直接、清晰的看到数据。管理系统全面的、周到的信息服务使之逐渐成为物流行业发展前进的风向标。信息管理系统,主要用于对公司的信息进行存储,有高效、快速、不易丢失的好处,也帮助公司解决了大数据量的存储。
    2.1 经济可行性经济可行性包括两个方面的内容:一是某一备选方案占有和使用经济资源的可能性,进而实现政策目标的可能性;二是实施某一政策方案所需花费的成本和取得的收益。政府的财政资源是有限的,任何政策方案占有和使用的经济资源也是有限的。因此,任何一项公共政策都存在一个争取公共经济资源的问题。一般说来,“公共政策的经济资源的占有量与其政策目标的期望值成正比例关系。”当然,这还涉及到一个成本效益问题。如果某一方案的成本大于收益,显然这项政策是不可行的。
    在开发小区物业管理系统之前实地考查开发所需条件以及使用中所需要的耗费维护资金,在系统投入使用后带来的受益是否值得花费所需要花费的资金以及资源去进行开发。
    在我的小区物业管理系统中,开发阶段只需要一台带XP系统的电脑以及My eclipse、SQL Server 2008数据库,系统开发周期为五至八周,个人独立完成。
    在投入使用后需要物业管理人员对其进行操作、维护等日常管理,只需这些投入便可以使小区物业管理实现初步的信息化,
    2.2 技术可行性该系统由管理员和业主两种不同的功能并在两者之间进行交互操作,所以系统采用B/S模式来实现。JSP在服务器端执行,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览,很适合做B/S模式的WEB系统,JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。所以JSP技术对于该系统完全可行。
    2.3 系统流程图在数据库设计过后,接着就应该考虑功能实现,通过功能描述的分析,构思出系统整体结构,采用业务流程图的方式具体介绍系统大概的处理方式,以下为系统的业务流程。
    投诉信息管理系统流程图
    投诉流程由业主发起投诉信息,管理员收到信息后处理反馈,用户再对反馈信息进行察看核实,如图2-1所示。

    登陆系统流程图
    系统分为管理员与业主类型登陆,登陆后根据功能略有不同,具体的操作流程图如2-2图所示:

    缴费信息管理系统流程图
    系统缴费流程由管理员添加缴费信息后,用户查看到自己有未缴费信息进行缴费后管理员确认缴费,具体操作如图2-3所示:

    2.4 本章小结可行性分析是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发分别从经济可行性、技术可行性和社会因素可行性,对本系统进行多方面的分析。根据经济、技术和需求等方面的可行性分析,可以确定本系统的开发是完全有必要的,而且是可行的,可以立项开发。
    第3章 需求分析软件需求分析工作是软件生存周期中重要的一步。只有通过需求分析才能把软件功能和性能的总体概念描述为具体上的软件需求规格说明,从而奠定软件开发的基础。软件需求分析工作也是一个不断认识和逐步细化的过程。该过程将软件调研阶段的需求资料进行分析和设计,使软件范围逐步细化到详细定义的程度,并分析出各种不同的软件元素,然后为这些元素找到可行的解决办法。本章将从不同角度的需求分析问题,讲述软件需求类型,分析过程,并部分给出了数据字典和数据流图。
    3.1 物业管理的发展成因改革开放以来,住宅建设飞速发展。我国城镇现有住宅已近80亿平方米。仅79年至99年城镇新建住宅52.5亿平方米。大量住宅小区投入使用,带来了管理工作的变化。除了对房屋进行维修外,还必须对附属物、设备、场地、环卫绿化、道路、治安进行专业化管理,以保持新建住区的完好,发挥其整体功能和综合效益。国外和香港对住宅区和其它物业实施专业化管理的经验被引入,取得了较好的效果,带动了全国物业管理工作的起步和发展。
    住房制度改革的逐步深化。随着房改的步步深化,城镇居民住房自有率已经超过75%,形成一个住区内,一幢房子里的产权多元化格局。房管所及单位房管处(科)的管房体制已经完全不能适应。对管理的社会化形成了客观的要求。物业管理从体制上克服了房改后形成的多个产权单位多头、多家管理,各自为政、扯皮推诿等旧管理体制的弊端。
    体制改革的推动。随着计划经济体制加快向社会主义市场经济体制的转轨,政府职能的转变,以前那种由政府行政福利型直接管理房屋,政府对住区环境、社区服务直接负责的办法,已经不能适应形势的变化。一个由业主自治与物业公司专业化管理结合,由物业管理企业实施经营型管理和有偿服务,使管理得以以业养业、自我发展、良性循环,既减轻了政府的压力和负担,又使得管理经费有了稳定来源的机制,日益显示其新体制的优越性。
    人民群众生活水平的不断提高。居民对住房问题的关切从有无转为大小,继而更加关注环境和社区服务。同时,广大住户拥有了自己的产业,对保持房产和附属设施的完好,以达到保值、增值的观念也逐步树立,使得物业管理的好坏已经成为居民选购住房考虑的重要因素,物业管理为越来越多的人接受,其行业地位不断攀升,外部环境逐步改善。
    3.2 小区物业管理系统需求分析信息管理系统(Information management system)是为了满足客户的需求,对公司货物的信息进行一个统计,高效、快速、方便的存储在数据库当中,不仅节省了人力,还节省了时间,对公司未来发展有着不可估量的好处。
    随着时代的发展、生活节奏的加快、买卖之间的数据量越来越大,现有的靠人工管理的模式已经越来越跟不上当今商务飞速发展的脚步。计算机辅助管理势在必行。
    3.2.1 数据流图数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。数据流是指处理功能输入或输出,用一个水平箭头或垂直箭头表示。数据存储是数据保存的地方。数据源去向表示数据的来源或数据的流向。

    管理员处理用户提交的投诉、维修信息
    管理员添加缴费信息用户查看缴费后进行处理

    小区物业管理系统由管理员添加以及处理缴费信息,业主对其进行查看确认是否缴费,另外业主进行投诉与维修等上报,管理员获取信息后进行处理反馈结果,用户获取反馈结果,该系统的顶层数据流图如图3-1所示。

    小区物业管理系统一共包括六个表:用户信息表、缴费信息表、投诉信息表、维修信息表、用户信息表、房产信息表。分别有六个数据流,具体如图3-2所示。

    3.2.2 数据字典数据字典(Data dictionary)是一种用户可以访问的记录数据库和应用程序源数据的目录。主动数据字典是指在对数据库或应用程序结构进行修改时,其内容可以由DBMS自动更新的数据字典。被动数据字典是指修改时必须手工更新其内容的数据字典。
    它是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据字典的作用是在软件的分析和设计过程中提供关于数据的描述信息。一般说来,数据字典应该由下列四类元素构成:数据元素,数据流,数据存储和数据处理数据字典的作用是在软件分析和设计的过程中给人提供关于数据的描述信息。它主要是对数据流图中的数据流、处理逻辑、外部实体、数据存储和数据项等方面进行具体的定义。数据流程图配以数据字典,就可以从图形和文字两个方面对系统的逻辑模型进行完整的描述。
    数据项定义
    数据元素也称为数据项,是不可再分的数据单位,是数据的最小组成单位,具体内容如表3-1所示。



    编号
    数据项名称
    名称
    NULL
    备注




    I01-1
    房产编号
    id
    no
    主键


    I01-2
    备注信息
    beizhu
    yes
    备注


    I01-3
    时间
    createtime
    yes
    添加时间


    I01-4
    是否删除
    fangshanlock
    no
    是否删除标志


    I01-5
    结构
    fangwujiegou
    yes
    房屋结构


    I01-6
    门牌号
    menpaihao
    yes
    门牌号


    I01-7
    面积
    mianji
    yes
    房屋面积


    I01-8
    设备
    shebei
    yes
    设备


    I01-9
    住址
    zhuzhi
    yes
    住址


    I01-10
    房产关联业主
    zhuhuid
    yes
    关联的业主ID


    I01-11
    投诉编号
    id
    no
    主键


    I01-12
    投诉反馈
    chulifankui
    yes
    处理反馈


    I01-13
    投诉结果
    chulijieguo
    yes
    处理结果


    I01-14
    投诉内容
    content
    yes
    投诉内容


    I01-15
    投诉时间
    createtime
    yes
    添加时间


    I01-16
    投诉标题
    title
    yes
    投诉标题


    I01-17
    删除标志
    tousulock
    no
    是否删除标志


    I01-18
    投诉关联业主
    zhuhuid
    yes
    关联的业主


    I01-19
    维修编号
    id
    no
    主键


    I01-20
    维修信息
    chulifankui
    yes
    处理反馈


    I01-21
    维修结果
    chulijieguo
    yes
    处理结果


    I01-22
    维修内容
    content
    yes
    维修内容


    I01-23
    维修时间
    createtime
    yes
    添加时间


    I01-24
    维修标题
    title
    yes
    维修标题


    I01-25
    删除标志
    weixiulock
    no
    是否删除标志


    I01-26
    维修关联业主
    zhuhuid
    yes
    关联的业主ID


    I01-27
    业主编号
    Id
    no
    主键


    I01-28
    业主电话
    dianhuahaoma
    yes
    电话号码


    I01-29
    业主身份证
    huzhufz
    yes
    业主身份证


    I01-30
    业主姓名
    huzhuxingming
    yes
    姓名


    I01-31
    业主入住时间
    ruzhushijian
    yes
    入住时间


    I01-32
    是否删除标志
    zhuhulock
    no
    是否删除标志


    I01-33
    业主住址
    zhuzhi
    yes
    住址


    I01-34
    用户编号
    id
    no
    主键


    I01-35
    用户添加时间
    createtime
    yes
    添加时间


    I01-36
    用户密码
    password
    yes
    密码


    I01-37
    用户权限设定
    role
    no
    用户权限


    I01-38
    用户姓名
    truename
    yes
    真实姓名


    I01-39
    是否停用
    userlock
    no
    是否停用标志


    I01-40
    用户姓名
    username
    yes
    用户名


    I01-41
    用户关联业主
    zhuzhiid
    yes
    关联的业主ID


    I01-42
    缴费编号
    id
    yes
    主键


    I01-43
    备注
    beizhu
    yes
    备注


    I01-44
    费用
    feiyong
    no
    费用


    I01-45
    费用周期
    feiyongzhouqi
    yes
    周期


    I01-46
    是否删除标志
    jiaofeilock
    no
    是否删除


    I01-47
    缴费类型
    leixing
    yes
    类型


    I01-48
    缴费时间
    shoufeishijian
    yes
    时间


    I01-49
    缴费状态
    shoufeizhuangtai
    no
    是否已交费


    I01-50
    房产id
    fangchanid
    yes
    关联房产


    I01-51
    用户id
    zhuhuid
    no
    关联用户




    数据流编号:D1—01

    数据流名称:房产信息数据流来源:管理员数据流去向:F6数据流组成:I01-01+I01-02+I01-03+I01-04+I01-05
    数据流编号:D1—02

    数据流名称:用户信息数据流来源:F1数据流去向:F5数据流组成:I01-34+I01-36+I01-38+I01-40
    数据流编号:D1—03

    数据流名称:缴费信息数据流来源:管理员数据流去向:F2数据流组成:I01-42+I01-43+I01-44+I01-45+I01-46+I01-47
    数据流编号:D1—04

    数据流名称:业主信息数据流来源:管理员数据流去向:F1数据流组成:I01-1+I01-2+I01-3+I01-4+I01-5
    数据流编号:D1—05

    数据流名称:投诉信息数据流来源:F1数据流去向:F3数据流组成:I01-11+I01-12+I01-13+I01-14+I01-15+I01-16+I01-17+I01-18
    数据流编号:D1—06

    数据流名称:维修信息数据流来源:F1数据流去向:F4数据流组成:I01-19+I01-20+I01-21+I01-22+I01-23+ I01-24+I01-25

    需求分析是一项重要的工作,也是最困难的工作。该阶段工作有以下特点:

    供需交流困难:在软件生存周期中,其它四个阶段都是面向软件技术问题,只有本阶段是面向用户的。需求分析是对用户的业务活动进行分析,明确在用户的业务环境中软件系统。但是在开始时,开发人员和用户双方都不能准确地提出系统。因为软件开发人员不是用户问题领域的专家,不熟悉用户的业务活动和业务环境,又不可能在短期内搞清楚;而用户不熟悉计算机应用的有关问题。由于双方互相不了解对方的工作,又缺乏共同语言,所以在交流时存在着隔阂。
    需求动态化:对于一个大型而复杂的软件系统,用户很难精确完整地提出它的功能和性能要求。一开始只能提出一个大概,模糊的功能,只有经过长时间的反复认识才逐步明确。有时进入到设计,编程阶段才能明确,更有甚者,到开发后期还在提新的要求。这无疑给软件开发带来困难。
    后续影响复杂:需求分析是软件开发的基础。假定在该阶段发现一个错误,解决它需要用一小时的时间,到设计,编程,测试和维护阶段解决,则要花2.5,5,25,100倍的时间。

    因此,对于大型复杂系统而言,首先要进行可行性研究。开发人员对用户的要求及现实环境进行调查,了解,从技术,经济和社会因素三个方面进行研究并论证该软件项目的可行性,根据可行性研究的结果,决定项目的取舍。
    3.3 本章小结本章对物流管理系统的需求进行分析,通过本章的论述对整个系统的设计有更加详细的了解。熟悉所依据的系统流程,根据系统流程图画出系统的数据流程,根据系统的数据流程写出所用到的数据字典,本章为整个系统的需求分析部分需求分析阶段结束之后进入总体设计阶段。
    第4章 系统设计4.1 系统功能设计需求分析说明小区物业管理系统主要为了物业管理员与业主设计的,架构在web的内部服务器上面。管理员对业主以及缴费信息进行管理,业主可以查看或者提交投诉维修等信息。整个系统就是这样的一个组织结构模式。
    依据上述功能的分析,系统中模块分别为:业主管理、用户管理、缴费管理、投诉管理、维修管理、房产管理。
    各功能模块的具体功能如下:

    业主管理:管理员对业主信息进行添加修改等功能
    用户管理:管理员对业主的用户信息是否停用进行控制,业主可以自己对自己所有用户进行密码修改等业务
    缴费管理:管理员添加以及处理缴费信息,业主查看自己所有已缴费和未缴费的信息详情
    投诉、维修管理:用户提交投诉、维修信息后,管理员查看到及时进行处理反馈结果,用户可以通过查看投诉、维修信息得知结果。具体如图4-1所示


    该系统主要包括系统管理员与业主俩个界面,系统管理员与业主分别具有不同的功能,分为两个不同的界面,之间存在信息交互等操作。
    4.2 数据库设计直到现在,我们可以设计的数据库必然是有结构的数据, 譬如说,我们已经确定了许多张表。但为什么会得到引起结构呢? 答案很简单,在数据库设计时数据库的结构是确定的,然而,进行数据库的设计,可能非常复杂。为了开发一个系统满足该组织的信息需求,要求采取不同办法在文件系统中,那里的工作为个别部门推动了应用的需要。在方法中的这种改变被子称为模式转变。为了使系统可以被用户最终接受,数据库的设计活动是至关重要的。一个没设计好的数据库中会产生错误, 这可能造成严重后果的组织。另一方面,以有效的方式精心设计制作的数据库,可以提供正确的资料。
    总之,在数据库开发中,设计的好坏是决定后续工作顺得与否的关键。
    我们小区物业管理系统使用SQL Server数据库,在数据库中考虑到几大功能模块所需数据创建了房产、维修、投诉、缴费、业主、用户这六个表。
    4.2.1 数据分析根据数据库中表的设计,数据应该是清晰的、具体的、并且要是一个合理的数据。在我们使用数据时,需要考虑到数据是否符合我们的需求,对于数据的使用我们也要遵循一定的规则。
    在我们系统中每一个表的数据类型、主键、NULL以及是否唯一等都按照系统所需分别设置,充分考虑到我们对于该系统的需求以及实现功能,为我们系统的数据正确性提供保证。
    4.3 数据库的详细设计数据库中重点为表的设计与表间的关联,在一个项目的实施过程中前期的数据库设计没有设计好就是大副度的减化系统开发的进度。分析表与表间的关系也可以帮助我们在开发项目时建立良好的流程,具体的功能和业务实现。
    数据库存在表与表间的关系,有三种形式:一对一关联,一对多关联,多对多关联,他们是对自然联接等方式来对表进行关联。表自身间的关系也是一种关联,在数据库设计中,我们不仅要对数据库中的数据类型进行了合理定义,还要对应的建好表与表间的关系才能作好数据库的设计。
    在设计数据库前应对现有类似系统的数据库进行仔细研究,找出它的不足以完善自己所设计的数据库。
    在设计前,应考虑以下事项:

    定义标准的对象命名规范
    工欲善其事,必先利其器。选择理想的数据库设计工具
    了解你的业务。根据业务需要创建数据表
    创建数据字典和E-R图表
    数据库维护

    4.3.1 数据表的设计对于小区物业管理系统,数据基本上都是使用数据库进行管理。数据库设计是对保存管理系统数据的数据库结构进行设计,对整个系统的开发具有非常重要的作用,我们一共包括以下这些表。
    房产表
    数据项包括:房产编号、备注、添加时间、是否删除标志、房屋结构、门牌号、房屋面积、设备、住址、关联业主ID,如表4-1所示。



    名称
    类型

    备注




    id
    bigint(20)
    no
    主键


    beizhu
    varchar(255)
    yes
    备注


    createtime
    datetime
    yes
    添加时间


    fangshanlock
    int(11)
    no
    是否删除标志


    fangwujiegou
    varchar(255)
    yes
    房屋结构


    menpaihao
    varchar(255)
    yes
    门牌号


    mianji
    varchar(255)
    yes
    房屋面积


    shebei
    varchar(255)
    yes
    设备


    zhuzhi
    varchar(255)
    yes
    住址


    zhuhuid
    bigint(20)
    yes
    关联的业主ID



    缴费表
    数据项包括:缴费编号、备注、添加时间、费用、费用标题、是否删除标志、缴费类型、收费时间、缴费状态,如表4-2所示。



    名称
    类型

    备注




    id
    bigint(20)
    no
    主键


    beizhu
    varchar(255)
    yes
    备注


    createtime
    datetime
    yes
    添加时间


    feiyong
    varchar(255)
    yes
    费用


    feiyongzhouqi
    varchar(255)
    yes
    费用标题


    jiaofeilock
    int(11)
    no
    是否删除标志


    leixing
    varchar(255)
    yes
    缴费类型


    shoufeishijian
    datetime
    yes
    收费时间


    shoufeizhuangtai
    varchar(255)
    yes
    缴费状态


    fangchanid
    bigint(20)
    yes
    关联的房产ID


    zhuhuid
    bigint(20)
    yes
    关联的业主ID



    投诉表
    数据项包括:投诉编号、处理反馈、处理结果、投诉内容、添加时间、投诉标题、是否删除标志、关联业主信息,具体如表4-3所示。



    名称
    类型

    备注




    id
    bigint(20)
    no
    主键


    chulifankui
    varchar(255)
    yes
    处理反馈


    chulijieguo
    varchar(255)
    yes
    处理结果


    content
    varchar(255)
    yes
    投诉内容


    createtime
    datetime
    yes
    添加时间


    title
    varchar(255)
    yes
    投诉标题


    tousulock
    int(11)
    no
    是否删除标志


    zhuhuid
    bigint(20)
    yes
    关联的业主信息



    维修表
    数据项包括:维修编号、处理反馈、处理结果、维修内容、添加时间、维修标题、是否删除标志、关联业主ID,具体如表4-4所示。



    名称
    类型

    备注




    id
    bigint(20)
    no
    主键


    chulifankui
    varchar(255)
    yes
    处理反馈


    chulijieguo
    varchar(255)
    yes
    处理结果


    content
    varchar(255)
    yes
    维修内容


    createtime
    datetime
    yes
    添加时间


    title
    varchar(255)
    yes
    维修标题


    weixiulock
    int(11)
    no
    是否删除标志


    zhuhuid
    bigint(20)
    yes
    关联的业主ID



    业主表
    数据项包括:业主编号、电话号码、业主身份证、姓名、入住时间、是否删除标志、住址,具体如表4-5所示。



    名称
    类型

    备注




    id
    bigint(20)
    no
    主键


    dianhuahaoma
    varchar(255)
    yes
    电话号码


    huzhufz
    varchar(255)
    yes
    业主身份证


    huzhuxingming
    varchar(255)
    yes
    姓名


    ruzhushijian
    varchar(255)
    yes
    入住时间


    zhuhulock
    int(11)
    no
    是否删除标志


    zhuzhi
    varchar(255)
    yes
    住址



    用户表
    数据项包括:用户编号、添加时间、密码、用户权限、真实姓名、用户名、关联业主ID,具体如表4-6所示。



    名称
    类型

    备注




    id
    bigint(20)
    no
    主键


    createtime
    datetime
    yes
    添加时间


    password
    varchar(255)
    yes
    密码


    role
    int(11)
    no
    用户权限


    truename
    varchar(255)
    yes
    真实姓名


    userlock
    int(11)
    no
    是否停用标志


    username
    varchar(255)
    yes
    用户名


    zhuzhiid
    bigint(20)
    yes
    关联的业主ID



    4.3.2 数据库的E-R图设计E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。构造E-R图的基本要素是实体型、属性和联系的方法。由属性构成实体型,标明实体型的PK,用菱形来表示联系通过连线写明互相之间的对应关系。实体型是具有相同属性的实体具有相同的性质和特征,用实体名及其属性名集合来抽象和刻画同类实体;属性是实体所具有的某一特征,一个实体有若干个属性来刻画;联系也称为关系,信息世界中反映实体内部或实体之间的联系。
    在E-R图中联系可分为三种类型:

    一对一联系(1:1)
    一对多联系(1:N)
    多对多联系(M:N)

    一个较好的系统在设计时要做好分析工作,并且要按照一定的次序将其完成,首先做好数据的分析,设计好数据库。在分析数据库的建设问题时,首先就要从需求分析中获取系统中要用的数据,将其规化好,抽取实体及其属性,建立模型。以下为系统所有要使用的数据,以E-R图的形式表示如图4-7所示。

    系统E-R类图包括本系统六个表:业主表、用户表、房产表、投诉表、缴费表与维修表。
    在小区里,每个业主能够拥有多套房产,所以业主表与房产表属于一对多的包含关系;每个业主拥有一个用于用户端登录的用户账户密码,所以用户表与业主表是一对一的包含关系;在投诉与维修上报上是一样的,每个业主能够发起多个投诉与维修信息,所以投诉表跟维修表与业主表的关系都是一对多的生成关系;最后还有一个缴费表,每个业主每个月都会有多项缴费信息,每个业主应该对应多项缴费信息并且业主对缴费信息只允许进行查看不允许修改,所以业主表与缴费表是一对多的查看关系
    4.4 本章小结根据本章系统设计的分析,我们可以清楚知道我们的系统通过需求分析后做出了业主与管理端两个不同的界面,其中管理员有八个功能模块,而用户有七个功能模块。我们对系统所需做出了对应的数据库设计,用六个表来存储我们系统的数据。
    第5章 系统实现JavaBeans是用java语言编写的可重用的软件组件。使用javaBeans组件,以使用可视的应用程序开发工具将它们编写到java程序中。javaBeans规范为java开发人员提供了一种“组件化”其java类的方法,是实现代码重用的一个很好的机制。同时它也被广泛地应用到jsp技术中实现代码的重用,还可以实现显示和逻辑的一定程度上的分离,在实际应用中得到广泛的应用。
    5.1 系统和数据库的配置系统按通用的B/S(浏览器、服务器)模式进行设计(如图4-1)

    数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率,以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。
    5.2 数据库逻辑模型
    房产表(主键、备注、添加时间、是否删除标志、房屋结构、门牌号、房屋面积、设备、住址、关联的业主ID)
    缴费表(主键、备注、添加时间、费用、费用标题、是否删除标志、缴费类型、收费时间、缴费状态、关联的房产ID、关联的业主ID)
    投诉表(主键、处理反馈、处理结果、投诉内容、添加时间、投诉标题、是否删除标志、关联的业主信息)
    维修表(主键、处理反馈、处理结果、维修内容、添加时间、维修标题、是否删除标志、关联的业主ID)
    业主表(主键、电话号码、业主身份证、姓名、入住时间、是否删除标志、住址)
    用户表(主键、添加时间、密码、用户权限、真实姓名、是否停用标志、用户名、关联的业主ID)

    5.3 系统设计5.3.1 用户登录的设计与实现对于用户登录的设计需要用户输入正确的登录用户名、密码后台利用Ajax自动判断用户的权限,并进入相应的页面。
    用户登录程序流程描述
    在进入登录界面时,需要用户输入正确的用户名和密码,选择权限,如果用户名或密码为空时,会返回到登录界面重新输入,错误时也是,当输入正确时就会进入管理系统的主界面中。
    实现过程
    index.jsp页面合法用户的核查页面,即起到Login.jsp页面与数据库之间的一个桥梁作用,将index.jsp页面中输入的用户名、密码送入到StudentServlet中通过SQL语句与数据库中的用户名、密码进行对比,找到后即为合法用户,说明可以进入系统,在此页面中需要引入一个BaseDbOper.java文件,它起到连接数据库和对数据库的访问。
    5.3.2 系统功能的设计与实现**业主信息管理设计
    管理员应能够添加新主以及对原有业主进行查看、修改或者删除等功能,所以界面设计如图5-2所示。

    同时,在用户端应可以查询到自己的业主信息但不能查询到他人信息并且不允许进行修改,所以界面设计如图5-3所示。

    房产信息管理设计
    在房产信息管理上,管理员应该可以对业主添加、修改、删除以及查看,所以房产信息管理界面应图5-4所示。

    业主可以查看到自己的房产信息而不能查看其他人的信息,并且不允许进行修改操作,所以房产信息管理在业主节目应如图5-5所示。

    缴费信息管理设计
    缴费信息管理在管理员界面中有两次处理,一次是添加、修改等操作添加新的缴费信息,然后再运营中的收费管理进行查看以及确认缴费,在用户界面中能够查看到缴费信息但无法进行修改等操作。所有已缴费和未缴费信息是显示在一起,管理员界面中显示所有的缴费信息,用户界面中只显示自己的缴费信息,这样的方式可以给用户隐私带来保障,不允许他人查看到自己的信息。
    在添加缴费信息时先进行格式判定,缴费信息为空时不符合格式要求添加失败需要重新输入,判定成功后添加到缴费信息表中。在确认缴费信息时候如果不确认则保持未缴费状态,确认缴费后该缴费数据项的缴费状态更改为已缴费。具体如图5-6所示。

    管理员统一添加每月缴费信息后,查看确定是否有误,需要修改删除等操作,所以缴费信息管理页面如图5-7所示。

    在添加缴费信息后业主可以查看到缴费信息,业主缴费信息界面如图5-8所示。

    在业主查看到自己未缴费的信息后进行缴费,管理员应该对其进行确认缴费,如图5-9所示。

    投诉信息管理的设计
    投诉信息由业主发起投诉信息,所以业主投诉界面应该设计如图5-10所示。

    在业主发起投诉后由管理员对投诉信息进行查看处理以及反馈结果,所以投诉信息管理界面应该设计如图5-11。

    5.4 本章小结到现在为止,我们的系统功能模块基本实现完成。在数据库方面,我们有业主、用户、房产、缴费、维修以及投诉六张表,我们做出了这六张表的实体对应关系,可以让我们很清楚的知道表与表之间联系。其后我们按照需求设计了合理的系统界面,让我们的系统功能更加合理、完善。
    第6章 系统测试信息技术的飞速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的焦点。不论软件的生产者还是软件的使用者,生存在竞争的环境中,软件开发商为了占有市场,必须把产品质量作为企业的重要目标之一,以免在激烈的竞争中被淘汰出局。用户为了保证自己业务的顺利完成,当然希望选用优质的软件。质量不佳的软件产品不仅会使开发商的维护费用和用户的使用成本大幅增加,还可能产生其他的责任风险,造成公司信誉下降,继而冲击股票市场。在一些关键应用 (如民航订票系统、银行结算系统、证券交易系统、自动飞行控制软件、军事防御和核电站安全控制系统等) 中使用质量有问题的软件,还可能造成灾难性的后果。
    6.1 软件测试的目的软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情,另一方面是确认软件以正确的方式来做了这个事件。
    第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息。
    第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此软件测试的第三个目的是保证整个软件开发过程是高质量的。
    软件质量是由几个方面来衡量的:一、在正确的时间用正确的的方法把一个工作做正确。二、符合一些应用标准的要求,比如不同国家的用户不同的操作习惯和要求,项目工程中的可维护性、可测试性等要求。三、质量本身就是软件达到了最开始所设定的要求,而代码的优美或精巧的技巧并不代表软件的高质量。四、质量也代表着它符合客户的需要。作为软件测试这个行业,最重要的一件事就是从客户的需求出发,从客户的角度去看产品,客户会怎么去使用这个产品,使用过程中会遇到什么样的问题。
    6.2 软件测试的任务在软件投入生产性运行之前,尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。软件测试是保证软件软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。软件测试的结果也是分析软件可靠性的重要依据。具体包括登录是否成功、缴费添加是否合理、缴费处理是否有反馈、投诉维修等信息添加后是否能够回馈回去信息等操作。
    6.3 测试环境Apache提供的Web服务器Tomcat 6.0使得用户可以在Windows 2000以上操作系统下发布自己设计的动态网页。因此对论坛的调试工作主要是利用Tomcat 6.0的强大功能在本机下完成的。为了在本机下浏览Web页面,首先在创建该系统的站点上(该系统使用的是Web的默认站点)将IP地址设定为127.0.0.1,它的缺省域名值为localhost。然后向IE浏览器输入本地动态网页的URL,Web服务器在收到浏览器传送的URL之后找到网页文件,并在服务器端执行该文件后将此文件以HTML文件的形式返回该浏览器。
    6.4 本系统测试设计测试方案是测试阶段的关键技术问题。所谓测试方案包括预定要测试的功能。应该输入的测试数据和预期的结果,目标是设计一组可能发现错误的数据。本系统中,我应用了如下测试方案:白盒测试、黑盒测试。
    对于测试过程我只列出缴费与投诉两个部分,给出了单元测试部分的实例。
    6.5 测试用例在系统测试中有很多种测试方法,现在我们针对系统部分功能进行一次测试记录下来。
    首先,进入缴费信息管理添加新的缴费信息。添加后自动返回缴费信息管理界面,这时候到运营的收费管理中确认下是否已经添加进入,并确认收费。
    现在我们对缴费信息进行添加,添加时候对缴费名称、费用以及备注进行测试是否能够为空、特殊字符以及测试是否有字符数的限制,测试添加功能是否符合我们的需求,如果有限制时候是否对限制有警告处理信息。
    添加缴费信息测试时发现缴费名称不允许为空,所有项可以未任何字符。能够符合当前对该系统的需求。添加缴费信息测试通过,没有存在任何问题。下面添加完成,查看缴费信息管理页面的其他功能以及添加后的现实情况。具体软件缴费实例如表6-1所示。



    动作
    期望结果
    实际情况




    添加缴费信息
    缴费信息界面添加上新的缴费信息
    与期望相吻合


    查看缴费信息
    打开所查看的缴费项的信息,表示出它的所有信息
    与期望相吻合


    确认缴费
    缴费信息状态更改为已缴费
    与期望相吻合


    删除缴费信息
    所要删除项的缴费信息全部被删除
    与期望相吻合



    结论:经测试,小区物业管理系统缴费功能不存在BUG,功能已全部实现。
    6.6 本章小结软件测试是软件开发中的重中之重,没有一点可以马虎的,在项目管理过程中,强调的是每个过程的每一个环节都要进行测试,保证系统在每个阶段可以控制。因为软件测试中考虑的问题基本上是项目管理中需要考虑的问题。具体说,软件测试是事务性的,而项目管理是策略性,一些策略性的东西必须在一些事务性的事务上来实现。
    结论至此,小区物业管理系统设计与实现顺利完成。在几天的试运行的过程中,在连接数据库时一度出现过错误,经过调试改正后错误点全部清楚,此系统可以按着设计思想和需求功能正常运行。
    由于当今的物业管理部门还不能有一个很统一的模式化,所以本系统仅考虑到一般小区所需要的物业管理的基本和主要的几项功能,一个完好的小区物业管理系统还需要更多更复杂的功能要求。由于开发周期短和开发人员等局限性,不能将本套系统尽善尽美。希望在以后能够对小区的物业做更深一步的调研,在原由系统的基础上不断添加新功能。最终能够开发出一套完善的小区物业管理系统。
    本系统在开发过程中,在固定的物业管理要求的模式下还添加了一些人性化的,个人的构思和创意。
    本套小区物业管理系统符合基本需求功能,易于操作,应该可以在简单化模式下的小区内应用,存在要改进的地方再以后会进一步完善。希望本系统能够给用户带来方便。
    在这次毕业设计论文撰写过程中,时间很紧迫。由于已经参加实习工作,很多计划使得没有充分的时间去实习,去准备。希望在以后能够进行二次开发,继续完善它,使投入使用后更变得有实用价值。
    参考文献
    李春葆.数据库原理与应用.北京:清华大学出版社,2012
    普西金.深入体验JSP项目开发.北京:机械工业出版社,2011
    邹劲松.物业管理信息系统. 北京:清华大学出版社,2010
    季如进.物业管理(修订第二版). 北京:机械工业出版社,2010
    陈朗钦.图书管理信息系统设计. 北京:人民邮电出版社,2011
    萨师煊.数据库系统概论. 北京:清华大学出版社,2010
    张建.基于WEB的人力资源管理系统的设计与实现.大连:吉林大学出版社,2013
    王国辉.JSP项目开发全程实录(第2版).北京:清华大学出版社,2013
    韩万江.软件项目管理案例教程(第二版).机械工业出版社.2011
    Paul Nielson .Microsoft SQL Server 2008 Bible.[M]. Neurology,2011
    Jan L.Hamington.SQL Clearly Explained.[M].JRD,2011
    Thomas Kyte.Programming Techniques and Solutions[M].BeiJin:Posts& Telecom Press,2013
    Ted Neward.Server-based Java Programming.[M].JIDD,2012
    Bryan Basham.Head First Servlets and JSP .中国电力出版社,2010
    Jeremy Keith.JAVAScript DOM.人民邮电出版社,2011
    9 评论 156 下载 2019-05-16 11:50:38 下载需要15点积分
  • 基于Jsp和Sql Server 2008实现的在线公益平台系统

    摘要随着全社会对环境保护、资源节约、弱势群体以及对生物多样性保护的关注度越来越高,各种公益组织和志愿者组织也越来越多。利用网络,不但可以更快更广地把公益组织传播给更多人知道,也可以通过网络在线捐助的方式奉献自己的爱心。在软件工程指导思想下,基于B/S构架、JAVA、JSP平台和SQL Server 2008数据库平台,为满足用户能在虚拟网络上快捷便利地进行捐助,以及在现实世界进行公益活动的真实体验的两种不同需求,设计了在线公益平台包含登录模块、个人信息管理员管理模块、同城活动管理模块、在线捐助模块,为用户在线报名参与公益活动带来了很大的便利,同时组织者也可以根据在线报名志愿者的资料,更好地组织管理志愿者活动。
    关键词:JSP;数据库;公益平台
    AbstractWith the whole society of environmental protection, resource conservation, vulnerable groups, as well as the protection of biological diversity of concern is getting higher and higher, a variety of public welfare organizations and volunteer organizations are also more and more. Using the network, not only can be faster and more widely spread to more people to know the public welfare organization, but also through the network online donation way to sacrifice their love. In the guidance of the software engineering, JAVA, B/S framework, JSP platform and SQL Server 2008 database based on the platform, to meet the user can be convenient to donate in the virtual network, and the public welfare activities in the real world the real experience of two kinds of demand, the design of the online public platform includes login module, personal information manager the management module and the activities of the city management module, online donation module, registration for online users to participate in public welfare activities to bring great convenience at the same time, the organizers can also according to the online registration volunteer information, better management of volunteer activities.
    Key words: JSP; database; public service platform
    引言中国正处于发展转型的关键时刻,发展公益也正契合当今时代国情的需求。公益的发展是在保护弱势群体,促进社会公平,缓和社会矛盾,有助于国家实现构建和谐社会的重要目标。在网络技术的推动下,互联网已渗透到政治、文化、经济、生活当中,公益活动借助网络媒体多渠道传播、信息强时效性、及时互动反馈登优势。本文基于此,设计在线公益平台,依托互联网,有助于发觉公众的善心,拉近人与人的距离使公益活动走上快速发展的道路。
    1 课题分析1.1 课题背景21世纪以来,网络社会的崛起转化了人类的社会生活图景。以信息技术为中心的技术革命,正在加速社会物质基础的重构。人们开始习惯穿梭于网络与现实的世界之中。互联网信息技术的日益普及,创造了新的信息传播形式和互动沟通方式,也催生了新的组织形态,它既塑造着生活,同时也为生活所塑造。
    网络时代的今天,互联网信息技术已经普遍渗透到了人类社会生活的全部领域,中国的公益领域也不例外。尽管在上世纪短短十年中,以“希望工程”为标甘志的中国公益事业取得了巨大的成功,但带有强烈的“官办”色彩强烈的“组织化公益”并非真正意义上或现代意义上的公益。在互联网技术力量的推动下,网络公益力量开始觉醒,并积极推动中国公益事业实现从传统向现代的转型。
    近年来,中国公益事业进入了高速发展时期,各类公益组织数量呈几何式增长,其中网络公益组织增速最快,据统计,截止2011年底,各类网络公益组织已经超过11万个。网络公益力量的迅速崛起,无形中敦促中国公益事业加快现代公益转型的脚步。追溯网络公益兴起的过程,不得不提到几个关键性的时间节点。2008年汉川地震,公众自发的善举通过互联网传向全国各地。正是互联网及时性的报道和跨时空式的信息传播,让人们感受到了一种前所未有的网络公益力量。2011年“微博公益”的出现更是推动了网络公益的发展,同时也揭露了现实世界中公益的阴暗面。河南宋庆龄基金会巨额劝募资金事件、红十字会郭美美事件等负面新闻在网络上频繁曝光,掀起了一股强有力的公益问责风暴。正所谓“祸兮福之所伏,福兮祸之所倚”。国内慈善公益机构频繁遭遇的公信力危机,洽恰成为了中国公益事业走向公开透明的关键转折点。现实的巨大压力与公众高昂的呼声,无疑都催促着中国社会急需一股透明、公开的力量来践行公益。同一年,“免费午餐”、“微博打拐”“大爱清尘”等网络公益项目突破了以往公益项目的运作模式,秉承公开透明、人人皆可参与的理念取得了巨大成功。在中国这个特定的环境下,网络被公众赋予了新的角色,它似乎成为公众了解、参与、监督公益事业,实现公益诉求,争取公民参与权和话语权的“唯一”途径[1]。
    对于网络公益力量的崛起,学界已有所关注。例如,北京师范大学中国公益研究院,其发布的《走向现代慈善一2011中国公益事业年度发展报告》对2011年中国公益慈善界的热点事件进行了分析,该报告认为互联网等新技术创新了公众慈善参与模式,促进、动员传统慈善走向现代“全民公益”慈善的转型。在长期对网络公益的关注下,笔者意识到在网络公益力量日益壮大的今天,给予网络公益项目更多的关注是十分必要的。虽然,学界己对其有所关注,但对网络公益的研究还比较零散,缺少更为深入、系统的实证研究。特别是针对网络公益项目的实证研究更是十分匾乏。尽管,网络公益己经在技术和制度的结合上做了大量的探索,但如何借助网络技术建立一套有效的动员参与机制、通过网络有效整合公益资源等问题都是网络公益有待深入研究的问题。
    1.1.1 国内研究概况国内研究来看,微信公益传播等在线公益平台尚属新兴的媒介现象,例如微信公益传播是公益在微信平台上的传播,既具有公益传播的特点也有微信传播的特点。在媒体与公益传播的研究中,许多学者着重梳理不同媒介形式对公益传播的影响。传统公益传播主要是借助报纸、电视等传统媒体进行公益传播,四川大学的王炎龙在《我国媒体公益传播研究分析》中,他通过描述报纸、广播、电视、新媒体在公益传播过程中的发展现状,归纳总结了公益在以传统媒体与新媒体为载体进行传播时所展现的特点。报媒凭借自身的号召力影响着公益发展趋势,广播的范围覆盖要求公益传播的内容必须多元化,多形态的传播形式对公益营销和价值塑造具有重要作用,新媒体的技术进步拓展了公益的传播渠道。网络公益传播是通过互联网平台进行公益传播。成都理工大学王颖的硕士论文《我国网络媒介中的公益传播现象研究》,概述了公益传播的四种类型,对网络公益传播的性质和内容进行了总结,分析了网络公益传播质效性、关联性、低成本性等传播特点,将网络公益传播与传统媒体的公益传播进行了对比分析,最后指出了网络媒介在传播上的劣势并提出了策划网络公益活动吸引网民参与等发展建议。
    在《网络公益慈善传播研究》中,王心论述了企业、公益慈善组织、网民、媒体作为传播主体的网络公益慈善传播,并根据这四个主体的传播特点提出了网络信息浅层化、个体传播差异化、公益资源不均等传播问题。在对企业公益行为的研究中,主要从公益营销的角度进行分析。王炎龙等人认为,企业通过投资公益活动、建立基金等方式开展公益营销,有助于企业承担应有的社会责任,树立良好的品牌形象,增强行业竞争力。
    1.1.2 国外研究概况国外对于公益组织的研究主要以不同国家、不同地区、不同领域的个案研究居多。日本早稻田大学的 Hiromitsu Kataoka (2007)研究了亚洲非盈利组织的电子化治理。他认为,非盈利组织的社会资本较为分散,如果想要获得更好的“协作性优势”,非盈利组织之间应该进行合作,通过电子化治理形成社会网络。社会网络不仅便于接收海外的捐赠,集中获得有效的社会资本,还能够建立信任关系,将捐赠交易过程变得更加透明化。以 WEB 2.0 为基础的网络平台结束了单相沟通,通过优化用户体验,提高互动频率,达到增加网站访问量的最终效果。显而易见,研究社交网络平台对于公益组织、企业、个人等公益发起人如何通过平台获得社会资源,赢得社会信任是至关重要的。
    国外对公益传播的研究也深于国内。以公益广告为例,美国的公益广告模式是由政府、企业、媒体、广告公司等多方共同参与运转的,明确了公益广告的四大责任主体:“美国广告理事会负责组织,企业负责捐款,广告公司负责制作,媒体负责发布。”鉴于美国的广告模式,英国、法国、日本等国也纷纷效仿,建立起了适合本国国情的公益广告模式。法国模式以慈善捐款为主,以提供人道援助宗旨,英国模式重视依托于企业的社会营销,日本则以广告评议会为核心,企业、广告公司、媒体也是公益广告的发布者。
    1.2 研究目的及意义互联网时代下我国公益传播迎来了新机遇、新挑战。微信微博等媒介平台的出现也让我们应该思考如何更有效地运用新媒体发展公益事业。公益发展与网络媒体的关系日趋紧密,研究分析在线公益传播的基本构型,进而设计开发便捷的在线公益平台,对传播模式进行归纳,总结应对策略,这对我国在线公益传播发展具有重要意义。
    从理论意义上讲,对在线公益系统性研究的论文目前较少,对公益传播的研究主要集中在传统公益传播的研究、非政府组织的传播研究现状等。对在线公益传播的研究主要是对在线公益的发展潜力、公益组织网络传播的策略研究。选取公益传播的网络视角,探讨在网络这种新媒介特质下,公益传播的基本模式、构型以及问题策略等,借助传播学理论分析在线公益案例不仅有利于丰富公益传播的基本理论,促进政府、公益组织、企业等传播主体利用网络平台进行公益传播,还有助于推进我国公益事业的发展。
    从现实意义上讲,随着互联网的发展,新媒体的技术进步正在改变中国公益发展的传统格局,传统的公益活动模式将被彻底颠覆。人们参与公益的热情与日俱增,对公益的关注愈发频繁,但公益的发展疏于漏洞面临着巨大的信任危机。近期,公益组织被质疑的事件比比皆是,2014 年 1 月 6日,周筱赟在网上举报,质疑李亚鹏发起的嫣然天使基金存黑幕,4 月 22 日,四月网发布微博质疑李连杰贪污壹基金芦山地震赈灾款,8 月 5 日,女演员袁立在微博中以捐款人身份对天使妈妈基金财务问题提出质疑,当“冰桶挑战”风靡微博时,渐冻人组织对瓷娃娃罕见病关爱中心的接受善款资格及善款使用方向提出质疑,这迫使公益组织必须转型。在线公益的研究与设计有助于让公益组织更好地转变社会角色,不再是公益活动的绝对领导者,而是要增加与公益参与者的互动,与公众共同见证公益活动的成果,调动团队的公益资源,接受群众的监督,重获公众对公益组织的信任[2]。
    1.3 本文所做工作本文数据库系统的相关理论用于实践,在系统开发需求分析的过程中,具体所做的工作有:

    在该系统的可行性分析和规划阶段,对于互联网在公益平台上的运用和发展背景做了简单的介绍,和实现系统的技术路线
    在该系统的需求分析和总体设计阶段,给出了系统实现的功能模块和基本构架
    在详细设计和具体实施阶段完成了对于在线公益平台的功能模块设计、功能设计、数据库设计,并完成实现了具体的功能

    2 技术路线及开发工具2.1 技术路线2.1.1 技术思路本系统设计了针对不同用户身份而专设的功能页面,完成其各自特有的功能。利用软件工程原理和结构化程序设计思想,基于Browser/Server软件体系构架,结合关系数据库平台、JAVA与JSP编程技术、Servlet、JAVA EE体系结构中的MVC模式,完成实现了整个系统。
    2.1.2 技术路线图
    2.2 开发技术及工具2.2.1 开发技术JAVA作为一种历史不长的计算机语言,由于其自身的特点,得到了众多开发者的青睐,在许多编程语言热门程度排行中都名列前茅。JAVA语言由于其简单性、网络特性、面向对象性、平台无关性、鲁棒性、安全性、多线程性、解释性等特点,适合于各种对于执行效率要求不是很高、很苛刻的应用[8] 。
    JSP采用JAVA作为脚本语言,在实际运行的时候被编译成为Servlet,这种优势使得JSP能够运行在所有类型的服务器上,面对不同的需求或者不同的软硬件开发环境,JSP都能够应对。JSP是从JAVA语言中产生出来的,其在很大程度上和JAVA 有相似之处[7]。
    JAVA EE就是为了解决“企业应用”方面的问题,将工作划分为不同的层次,包括如下三层:服务器端业务逻辑层、服务器端表示层、客户端表示层。JAVA EE的应用部署在JAVA EE服务器中,JAVA EE服务器支持Web组件以及三层构架,并使用标准的JAVA EE来处理不同事务[6]。

    所谓MVC模型就是将数据、逻辑处理、用户界面分离的一种方法。

    M(Model, 模型):用于数据处理、逻辑处理
    V(View,视图):用于显示用户界面
    C(Controller,控制器):根据客户端的请求控制逻辑走向和画面

    而在Java中,MVC这三个部分则分别对应于 JavaBeans、JSP和Servlet。

    M = JavaBeans(java类):用于传递数据,拥有与数据相关的逻辑处理
    V = JSP:从Model接收数据并生成HTML
    C = Servlet:接收HTTP请求并控制Model和View

    本系统的运行模式为B/S构架,所谓B/S构架(Browser/Server,浏览器/服务器模式)是Web技术兴起后的一种网络结构模式,Web浏览器如IE、Mozila FireFox、Chrome等是客户端最主要的应用软件[ 9]。这种模式统一了客户端,将系统的核心功能实现部分集中到了服务器上,简化了系统的开发、使用以及维护。在B/S模式中,浏览器以超文本形式向Web服务器提出访问数据库服务器,数据库服务器得到请求后,进行验证并处理,然后将处理后的结果返回给Web服务器,Web端再一次将得到的所有结果进行转化,换成HTML形式,转发给浏览器以页面的形式显示。
    所谓数据库,即就是数据存放的地方,需要长期存放在计算机内,有组织、可共享的数据集合。数据库中的数据按照一定的数据模型组织、存储和描述,具有较小的冗余度、较高的数据独立性和易扩展性,可以为不同的用户所共享。
    而数据库的内容通过数据库管理系统(Database Management System, DBMS)来管理。数据库管理系统是指数据库系统中对于数据进行管理的软件,它是数据库系统的核心组成部分,用户对数据库的一切操作,比如定义、查询、更新以及各种控制,都是通过数据库管理系统来操作的。
    关系数据库是由数据表和表之间的关联组成。其中的数据表通常是一个由列和行组成的二维表,每一个数据表分别说明数据库中某一个特定方面或部分的对象及其属性。数据表中的行通常叫做元祖,它代表众多具有相同属性的对象中的一个;数据库表中的列通常叫做属性,它代表相应数据库表中存储对象的共有属性。
    关系数据库由于其建立在严格的数学概念基础之上,概念单一,结构简单、清晰、用户易懂易用,存取路径等物理操作对用户透明等特点,成为当今的最主流数据库技术。
    2.2.2 开发工具本系统在Windows 7 操作系统上开发,Web服务器采用Apache Tomcat 7.0,数据库服务器采用了SQL Server 2008。
    由Microsoft公司发布的SQL Server 2008 产品是一个典型的关系型数据库管理系统,以其强大的功能,操作的简易、可靠的安全性,等到了众多用户的认可,应用也越来越广泛[5]。而最新发布的SQL Server 2008 ,在其前一版本SQL Server 2005的强大功能基础之上,为用户提供了一个完整的数据理论和分析解决方案[10]。
    Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。本系统的开发将使用Eclipse的neon版本。
    如果要运行JSP的话,还需要一个Servlet/JSP容器来支持它,当今流行的Servlet/JSP容器有Tomcat、WebLogic等[4]。Tomcat是一个免费开源的Web应用服务器,非常适合于在中小型和并发访问用户不是很多的场合使用,是开发和调试JSP程序的首要选择。Tomcat收到广大开发者的青睐,由于其运行时占用系统资源小,扩展性好,并且支持负载平衡和邮件服务等开发引用系统常用的功能[3]。
    3 功能分析与设计3.1 需求分析3.1.1 用户调研本系统中的用户角色可以分为普通用户、主办方用户、普通管理员、系统管理员。为了能更加清晰的体现各用户的不同功能权限,在实际开发以前针对各个角色都做了一定的相关资料收集,一定的考察,让系统的功能、环境等经可能的符合实际使用情况。
    3.1.2 初步设计根据用户对本系统在功能、性能、行为、设计约束等方面的要求,系统大体功能如下:

    三个角色分别登录,可以进入属于自己角色的特有的操作界面
    各个角色的用户登录了之后可以对自己的基本信息进行修改、查询
    添加、删除、修改各个角色的功能可以由管理员完成
    普通用户可以除了对自己的基本信息进行查询、修改意外,还可以进行在线捐助、参加同城活动等
    主办方登录之后可以对自己所管理的活动进行基本的查看、增加、修改的操作

    3.2 系统设计3.2.1 系统流程设计根据对需求分析阶段所得到的信息进行分析,将系统流程细化如图3-1:

    3.2.2 系统功能分析为了满足不同角色用户的需求,将本系统的用户角色分为管理员、普通用户、主办方三类角色,其各自具体功能如下:
    管理员管理员可以进行增加、删除普通用户和主办方。

    其中系统管理员除了可以进行增加、删除普通用户和主办方,还可以增加、删除普通管理员。

    普通用户
    查询、修改自己的基本信息
    查询活动信息以及自己参加的活动情况
    查询自己的在线捐助记录
    查询主办方信息
    在线捐款
    参加同城活动
    申请主办方


    主办方用户
    查询、修改自己的基本信息
    查询活动信息以及自己参加的活动情况
    查询自己的在线捐助记录
    查询主办方信息
    在线捐款
    接受在线捐助
    参加同城活动
    发起同城活动
    修改同城活动信息


    3.3 模块划分按照功能分析图将系统划分为如下几个模块:

    用户登录模块,身份验证,读取数据库中的用户信息,验证用户的登陆方式、用户名及密码,全部通过则进入系统,系统分为管理员和普通用户两个登陆页面
    个人信息管理模块,修改保存个人信息(面向前台用户),所有用户登陆后可以修改自己除用户名外的所有信息(包括密码),保存后更新
    管理员管理模块,该模块实现了对于三种角色的用户的管理
    同城活动管理模块,同城活动管理面向主办方,主办方登陆后可以对自己名下的同城活动进行管理。功能包括:创建同城活动,修改活动信息
    在线捐助模块,在线捐助面向前台用户,系统的所有前台用户登陆成功后,都可以通过系统提供的界面进行在线捐助

    3.4 系统总体设计在线捐助和同城活动系统的主要功能是为用户提供一个简单有效的公益社区,以便用户在网络上快速地对自己感兴趣地活动主办方进行资金方面地捐助,或者参与同城活动,进行实际的行为支持。同时主办方也可以根据在线报名志愿者的资料,更好地组织管理志愿者活动。
    系统的功能结构分为前台和后台两个部分:
    前台

    后台

    3.5 概念结构设计3.5.1 数据库设计
    users(UserID,UserMail,Password,UserName,Sex,Tel,City,UserCover)
    organizer (UserID, UserMail, UserName, Class, Tel, City, Number, AdminName, UserCover, Intro, Remark,)
    admin (UserName, Password, Role)
    donation (ID, DonorID, RecipientID, Amount, Time, DonorName, DonorTel, Remark)
    activity (ActID, OrgName, ActName, ActClass, StartTime, EndTime, Address, Intro, Cover)
    actMember (ActMemberID, ActName, UserMail, UserName)

    3.5.2 E-R图管理员实体E-R图

    普通客户实体E-R图

    主办方实体E-R图

    捐助记录实体E-R图

    同城活动实体E-R图

    活动成员实体E-R图

    系统总体E-R图

    3.6 系统核心功能设计3.6.1 核心功能顺序图UML通过视图化的表示机制从多个侧面对系统的分析和设计模型进行刻画,其中被广泛运用的顺序图是属于行为图的一种,强调了对象之间发生消息传递的时间顺序。
    系统整体数据流动的顺序图如图3-26:

    首先用户在JSP页面提交表单,数据被Servlet接收到,并根据用户提交表单的不同情况决定可能迁移到哪些不同的页面。紧接着将对应的提交数据作为参数传递给对应的DatabaseBean类,在DatabaseBean类中访问数据库并且进行相关的操作,然后在对应的页面空间设置下一个JSP页面显示需要的数据并且返回。在Servlet中根据DatabaseBean类的方法运行结果,判断应该如何进行页面迁移和显示结果。最后对应的JSP页面显示在用户的浏览器中。
    3.7 逻辑结构设计及物理设计3.7.1 数据库关系表admin(管理员表)


    序号
    字段
    别名
    数据类型
    数据长度

    是否可空




    1
    UserName
    用户名
    varchar
    50
    PK



    2
    Password
    密码
    varchar
    50




    3
    Role
    角色
    varchar
    50





    其创建代码如下:
    CREATE TABLE [dbo].[admin]( [UserName] [varchar](50) NOT NULL, [Password] [varchar](50) NOT NULL, [Role] [varchar](50) NOT NULL, CONSTRAINT [PK_admin] PRIMARY KEY CLUSTERED ([UserName] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
    users(用户表)


    序号
    字段
    别名
    数据类型
    数据长度

    是否可空




    1
    UserID
    用户序号
    int
    4
    PK



    2
    UserMail
    用户邮箱
    varchar
    50




    3
    Password
    密码
    varchar
    50




    4
    UserName
    用户名
    varchar
    50




    5
    Sex
    性别
    varchar
    50




    6
    Tel
    电话
    varchar
    50




    7
    City
    城市
    varchar
    50




    8
    UserCover
    用户头像
    varchar
    50





    CREATE TABLE [dbo].[users]( [UserID] [int] NOT NULL, [UserMail] [varchar](50) NOT NULL, [Password] [varchar](50) NOT NULL, [UserName] [varchar](50) NOT NULL, [Sex] [varchar](50) NOT NULL, [Tel] [varchar](50) NOT NULL, [City] [varchar](50) NOT NULL, [UserCover] [varchar](50) NULL, CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED ([UserID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
    organizer(主办方表)


    序号
    字段
    别名
    数据类型
    数据长度

    是否可空




    1
    UserID
    用户序号
    int
    4
    PK



    2
    UserMail
    用户邮箱
    varchar
    50




    3
    UserName
    用户名
    varchar
    50




    4
    Class
    类别
    varchar
    50




    5
    Tel
    电话
    varchar
    50




    6
    City
    城市
    varchar
    50




    7
    Number
    人数
    int
    4




    8
    AdminName
    管理用户
    varchar
    50




    9
    UserCover
    用户头像
    varchar
    50




    10
    Intro
    简介
    varchar
    50




    11
    Remark
    备注
    varchar
    50





    其创建代码如下:
    CREATE TABLE [dbo].[organizer]( [UserID] [int] NOT NULL, [UserMail] [varchar](50) NOT NULL, [UserName] [varchar](50) NOT NULL, [Class] [varchar](50) NOT NULL, [Tel] [varchar](50) NOT NULL, [City] [varchar](50) NOT NULL, [Number] [int] NULL, [AdminName] [varchar](50) NOT NULL, [UserCover] [varchar](50) NULL, [Intro] [varchar](2000) NOT NULL, [Remark] [varchar](2000) NULL, CONSTRAINT [PK_organizer_1] PRIMARY KEY CLUSTERED ([UserID] ASC)WITH(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
    donation(捐助记录表)


    序号
    字段
    别名
    数据类型
    数据长度

    是否可空




    1
    ID
    序号
    int
    4
    PK



    2
    DonorID
    捐助者序号
    int
    4
    FK



    3
    RecipientID
    接收者序号
    int
    4
    FK



    4
    Amount
    金额
    int
    4




    5
    Time
    时间
    varchar
    50




    6
    DonorName
    捐助者姓名
    varchar
    50




    7
    DonorTel
    捐助者电话
    varchar
    50




    8
    Remark
    备注
    varchar
    100





    其创建代码如下:
    CREATE TABLE [dbo].[donation]( [ID] [int] NOT NULL, [DonorID] [int] NOT NULL, [RecipientID] [int] NOT NULL, [Amount] [int] NOT NULL, [Time] [varchar](50) NOT NULL, [DonorName] [varchar](50) NULL, [DonorTel] [varchar](50) NULL, [Remark] [varchar](100) NULL, CONSTRAINT [PK_donation] PRIMARY KEY CLUSTERED ( [ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
    activity(活动信息表)


    序号
    字段
    别名
    数据类型
    数据长度

    是否可空




    1
    ActID
    活动序号
    int
    50
    PK



    2
    OrgName
    主办方
    varchar
    50




    3
    ActName
    活动名称
    varchar
    50




    4
    ActClass
    活动类型
    varchar
    50




    5
    StartTime
    开始时间
    varchar
    50




    6
    EndTime
    结束时间
    varchar
    50




    7
    Address
    地址
    varchar
    50




    8
    Intro
    简介
    varchar
    50




    9
    Cover
    头像
    varchar
    50





    其创建代码如下:
    CREATE TABLE [dbo].[activity]( [ActID] [int] NOT NULL, [OrgName] [varchar](50) NOT NULL, [ActName] [varchar](50) NOT NULL, [ActClass] [varchar](50) NOT NULL, [StartTime] [varchar](50) NOT NULL, [EndTime] [varchar](50) NOT NULL, [Address] [varchar](50) NOT NULL, [Intro] [varchar](50) NOT NULL, [Cover] [varchar](50) NULL, CONSTRAINT [PK_activity] PRIMARY KEY CLUSTERED ([ActID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
    actMember(活动成员信息表)


    序号
    字段
    别名
    数据类型
    数据长度

    是否可空




    1
    ActMemberID
    成员序列
    int
    4
    PK



    2
    ActName
    活动名称
    varchar
    50




    3
    UserMail
    用户邮箱
    varchar
    50




    4
    UserName
    用户姓名
    varchar
    50





    其创建代码如下:
    CREATE TABLE [dbo].[actMember]( [ActMemberID] [int] NOT NULL, [ActName] [varchar](50) NOT NULL, [UserMail] [varchar](50) NULL, [UserName] [varchar](50) NULL, CONSTRAINT [PK_actMember] PRIMARY KEY CLUSTERED ([ActMemberID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
    3.7.2 数据库关系图数据库个表之间的关系图如下:

    4 开发与实现4.1 系统核心程序编写4.1.1 Jsp+Servlet框架搭建MVC构架,它提供了一个控制器Servlet来处理页面导航。它的View层就是JSP;它的Contoller层是一个独立的Servlet类,叫做ActionServlet;它的Modole层包括了Form和Action的JAVA类。
    在本系统login.jsp文件中,通过<form action="servlet/login">,表格将这种请求提交给Servlet,由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。<servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。 一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径。例如注册模块的web.xml的配置:
    <?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>login</servlet-name> <servlet-class>client.login</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/servlet/login</url-pattern> </servlet-mapping></web-app>
    配置好web.xml文件后,编写用于执行的login.java类,调用DB,java类的相关连接数据库,登录验证的函数,将login,jsp的页面传送过来的参数,通过login.java来进行判断验证和页面跳转控制[9]。
    4.1.2 访问数据库DB公共类编写DB,java类作为整个系统连接数据库,操纵数据库的所有方法所在的公共类,其包含了包括各个角色登录验证方法,各个角色和产品的操作、各个角色对于各自相关操作的所有方法,其核心代码如下:
    package client;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DB { public DB() { super(); } public ResultSet select(String sql) { String url="jdbc:sqlserver://localhost:1433;DatabaseName=GY"; String userName="sa"; String password="sa"; Connection conn=null; Statement stmt=null; ResultSet rs=null; try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch(ClassNotFoundException e){System.err.print("连接数据库失败");} try {System.out.println("lianjiechengg"); conn=DriverManager.getConnection(url,userName,password); stmt = conn.createStatement(); rs=stmt.executeQuery(sql); //// //rs.next(); ///// return rs; }catch(SQLException e){System.out.println("查询失败");} return rs; } public void insert(String sql) { String url="jdbc:sqlserver://localhost:1433;DatabaseName=GY"; String userName="sa"; String password="sa"; Connection conn=null; Statement stmt=null; try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch(ClassNotFoundException e){System.err.print("连接数据库失败");} try { conn=DriverManager.getConnection(url,userName,password); stmt = conn.createStatement(); stmt.executeUpdate(sql); conn.close(); }catch(SQLException e){System.out.println("插入失败");} } public void update(String sql) { String url="jdbc:sqlserver://localhost:1433;DatabaseName=GY"; String userName="sa"; String password="sa"; Connection conn=null; Statement stmt=null; try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch(ClassNotFoundException e){System.err.print("连接数据库失败");} try { conn=DriverManager.getConnection(url,userName,password); stmt = conn.createStatement(); stmt.executeUpdate(sql); conn.close(); }catch(SQLException e){System.out.println("修改失败");} } public void delete(String sql) { String url="jdbc:sqlserver://localhost:1433;DatabaseName=GY"; String userName="sa"; String password="sa"; Connection conn=null; Statement stmt=null; try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch(ClassNotFoundException e){System.err.print("连接数据库失败");} try { conn=DriverManager.getConnection(url,userName,password); stmt = conn.createStatement(); stmt.executeUpdate(sql); conn.close(); }catch(SQLException e){System.out.println("删除失败");} }}
    4.2 系统实施4.2.1 面向管理员功能面向管理员的主页具备如下的功能:

    查询、修改自己的基本信息
    添加、删除、修改普通用户、主办方
    其中系统管理员还可以添加、删除普通管理员

    实际效果如下:

    4.2.2 面向普通用户功能面向普通客户的主页具备如下的功能:

    查询、修改自己的基本信息
    查询活动信息以及自己参加的活动情况
    查询自己的在线捐助记录
    查询主办方信息
    在线捐款
    参加同城活动
    申请主办方

    实际效果如下:

    4.2.3 面向主办方功能面向销售人员的主页具备如下的功能:

    查询、修改自己的基本信息
    查询活动信息以及自己参加的活动情况
    查询自己的在线捐助记录
    查询主办方信息
    在线捐款
    接受在线捐助
    参加同城活动
    发起同城活动
    修改同城活动信息

    实际效果如下:


    5 系统测试与应用5.1 系统测试运行环境系统运行环境有服务器端、因特网、客户端即浏览器构成。
    5.1.1 服务器端运行环境服务器端应由Web服务器、应用程序服务器、数据库服务器等组成。
    服务器运行环境基本要求:操作系统至少为Windows XP及其以上,数据库服务器为SQL Server 2008,安装有Tomcat 7.X及其以上版本、Eclipse neon版本。
    5.1.2 客户端(浏览器)运行环境系统能够用于访问各类Internet的计算机,只要计算机能够支持TCP/IP协议,操作系统为Windows XP及其以上,浏览器为IE、Chrome等都可。
    5.2 数据库测试与运行5.2.1 管理员管理功能测试管理人员进入自己的界面,对其余各个角色的人员进行相应的操作,如下图所示:

    5.2.2 主办方管理功能测试主办方进入自己的界面,对其余各个角色的人员进行相应的操作,如下图所示:

    5.2.3 用户在线捐助功能测试普通客户进入自己的界面,对其余各个角色的人员进行相应的操作,如下图所示:

    5.2.4 用户参加同城活动功能测试客服人员进入自己的界面,查看自己的收件箱并进行相应的操作,如下图所示:

    6 总结与展望6.1 总结随着全社会对环境保护、资源节约、弱势群体以及对生物多样性保护的关注度越来越高,各种公益组织和志愿者组织也越来越多。利用网络,不但可以更快更广地把公益组织传播给更多人知道,也可以通过网络在线捐助的方式奉献自己的爱心。为满足用户能在虚拟网络上快捷便利地进行捐助,以及在现实世界进行公益活动的真实体验的两种不同需求,设计该系统的核心功能有:

    用户登录:身份验证,读取数据库中的用户信息,验证用户的登陆方式、用户名及密码,全部通过则进入系统,系统分为管理员和普通用户两个登陆页面
    个人信息管理:修改保存个人信息(面向前台用户),所有用户登陆后可以修改自己除用户名外的所有信息(包括密码),保存后更新
    用户管理:普通会员管理面向管理员,管理员可以在后台系统界面中对普通会员进行添加、查看和删除操作
    主办方管理:主办方管理面向管理员,一般管理员可以在后台系统界面中对主办方进行添加、查看、删除操作
    系统管理员管理:管理员管理面向系统管理员,系统管理员可以对一般管理员的信息进行添加、修改密码、删除操作
    同城活动管理功能:同城活动管理面向主办方,主办方登陆后可以对自己名下的同城活动进行管理。功能包括:创建同城活动,修改、活动信息
    在线捐助功能:在线捐助面向前台用户,系统的所有前台用户登陆成功后,都可以通过系统提供的界面进行在线捐助

    目前,本系统的大体核心功能都基本实现,但是整个系统的应用上来说还是有很多的不足。
    通过对本课题的研究以及原型系统的设计与开发,在进一步巩固我计算机专业的同时也大大的提高了软件的开发与实践的能力。在开发实践的过程中,也让我对JAVA、JSP、SQL Server 、Tomcat、等软系统件开发所涉及的环境、平台、工具等有了根深一步的认识。也让我认识到,要做出一个出色的管理系统软件,不仅仅要进行严谨的调研考察,做出准确的需求分析,而且在设计开发的过程中也要遵守标准的开发方法,才可以开发出优秀的系统软件。
    6.2 展望如今,随着全社会对环境保护、资源节约、弱势群体以及对生物多样性保护的关注度越来越高,各种公益组织和志愿者组织也越来越多。利用网络,不但可以更快更广地把公益组织传播给更多人知道,也可以通过网络在线捐助的方式奉献自己的爱心。本小组设计的在线公益平台满足用户能在虚拟网络上快捷便利地进行捐助,以及在现实世界进行公益活动的真实体验的两种不同需求,同时我们还对机构进行个性化的分类,并提供机构所开展项目的详细介绍。用户可以便利地进行在线报名参与公益活动,组织者也可以根据在线报名志愿者的资料,更好地组织管理志愿者活动。在这个快节奏的生活之中,快捷便利的在线参与慈善事业,减少了传统过于复杂的捐款流程以及一些捐助过程中的不透明现象,如此高效的公益活动参与系统,符合自身利益,是未来公益事业筹募的发展方向。
    参考文献[1] 胡少雄,基于微信平台的公益传播研究[D].内蒙古:内蒙古师范大学,2015:4-6
    [2] 王颖,我国网络媒介中的公益传播现象研究[D].成都:成都理工大学,2010:6-8
    [3] 李建刚,秦兴桥,郑雨贝. JSP网络编程技术与实践[M].北京:清华大学出版社,2008:10-112
    [4]沈应逵,曾凌.Java Web数据库系统应用开发与实践[M].北京:人民邮电出版社,2008:390-404
    [5] 崔群法,祝红涛,赵喜来. SQL Server 2008 从入门到精通[M].北京:电子工业出版社,2009:203-244
    [6] 刘乃丽.精通Java EE项目案列—基于Eclipse、Spring、Struts、Hibernate[M]. 北京:人民邮电出版社,2008:155-237
    [7] 王萍萍,崔红义,孙强. JavaScript应用开发技术详解[M].北京:科学出版社,2008:20-53
    [8] Copeland. L.Covisint technology partners sign equity agreements [J]. Computerworld, 2001(35): 30-31
    [9] Hayes. F. Counting Casualtie [J].Computerworld, 2001, 35(25): 62-66
    [10] Disabatino. J. From Fee to Free To Fee Again: Britannica.com Restructures [J].Computeeworld, 2001, 35(12): 16-18
    3 评论 21 下载 2020-09-20 12:31:14 下载需要15点积分
  • 基于PHP的网上商城

    第一章 需求分析1.1 引言伴随着Internet的蓬勃发展,网络购物中心作为电子商务的一种形式正以其高 效、低成本的优势,逐步成为新兴的经营模式和理念,人们已不再满足于信息浏览 和发布,而是渴望着能够充分享受网络所带来的更多的便利。的确,客户足不出户 便可以方便快捷的选购自己喜欢的商品,这正是网络购物中心为客户带来的好处。 网络商城将传统的商务流程电子化、数字化,一方面以电子流代替了实物流,可以大量减少人力、物力,降低了成本;另一方面突破了时间和空间的限制,使得 交易活动可以在任何时间、任何地点进行,从而大大提高了效率网络商城所具有的 开放性和全球性的特点,为企业创造了更多的贸易机会。网络商城使企业可以以相 近的成本进入全球电子化市场, 使得中小企业有可能拥有和大企业一样的信息资源, 提高了中小企业的竞争能力。网络商城重新定义了传统的流通模式,减少了中间环节,使得生产者和消费者的直接交易成为可能,从而在一定程度上改变了整个社会 经济运行的方式。网络商城一方面破除了时空的壁垒,另一方面又提供了丰富的信 息资源,为各种社会经济要素的重新组合提供了更多的可能,这将影响到社会的经 济布局和结构。 现在的购物商场成蓬勃向上发展的。
    1.2 需求分析一个网络购物系统,首先我们要保证客户能够很方便进行商品选择,系统应该具有分类选择商品功能,系统要实现购买功能。在系统的后台,管理员能够管理商品,商品分类,以及客户购买订单。 因此分析,本系统主要由前台和后台两部分组成,前台为客户端,顾客可以在此处购买商品,后台为商品管理端,实现对商品和订单的管理。
    第二章 系统分析2.1 开发环境根据用户的需求和实际的考察与分析,确定商城的开发环境,具体如下:

    服务器:从稳定性、广泛性及安全性方面综合考虑,采用市场主流的Web服务器软件Apache服务器
    数据库:采用最受欢迎的开源SQL数据库管理系统和被誉为PHP黄金搭档的MySQL
    开发框架:选用具有快速、兼容、开源、简单易学等特点的轻量级国产PHP开发框架—ThinkPHP

    2.4 系统运行环境该网上商城可运行在分辨率为1920×1080的chrome浏览器下。
    2.3 功能结构商城分为前台模块和后台模块。下面分别给出前、后台的功能结构图。


    2.4 目录结构目录结构即为think php 目录结构,再次不做介绍。
    第三章 数据库设计3.1 商品分类表(itcast_category)


    字段名
    数据类型
    描述




    cid
    Int unsigned
    主键ID,自动增长


    cname
    varchar(20)
    商品分类名称


    pcname
    varchar(20)
    父类分类名称



    3.2 商品表(itcast_goods)


    字段名
    数据类型
    描述




    gid
    varchar(255)
    主键ID,自动增长


    gname
    varchar(255)
    商品名称


    price
    int
    商品价格


    thumb
    varchar(255)
    商品图片路径


    status
    Enum(‘no’,’yes’)
    是否上下架,上架为yes,否则为no


    description
    text
    商品描述


    stock
    int
    商品库存


    cid
    Int unsigned
    商品分类ID


    sales
    int
    商品销量


    turn
    Int unique
    排序码,自动增长



    3.3 会员信息表(itcast_member)


    字段名
    数据类型
    描述




    mid
    Int unsigned
    主键ID,自动增长


    user
    varchar(20)
    会员昵称


    email
    varchar(30)
    会员电子邮件地址


    pwd
    char(32)
    会员登陆密码


    birthday
    date
    会员生日



    3.4 会员收货地址表(itcast_address)


    字段名
    数据类型
    描述




    aid
    Int unsigned
    主键ID,自动增长


    mid
    Int unsigned
    会员ID


    consignee
    varchar(20)
    收货人姓名


    phone
    varchar(11)
    电话号码


    postcode
    varchar(6)
    邮政编码


    address
    varchar(255)
    收货地址


    freight
    int
    运费



    3.5 购物车表(itcast_shopcart)


    字段名
    数据类型
    描述




    scid
    Int unsigned
    主键ID,自动增长


    mid
    Int unsigned
    会员ID


    addTime
    timestamp
    加入购物车时间


    gid
    varchar(255)
    商品ID


    num
    tinyint(3)
    商品数量



    3.6 购买记录表(itcast_record)


    字段名
    数据类型
    描述




    rid
    Int unsigned
    主键ID,自动增长


    mid
    Int unsigned
    会员ID


    time
    timestamp
    购买时间


    gid
    varchar(255)
    商品ID


    num
    tinyint(3)
    商品数量


    price
    Int unsigned
    商品单价



    3.7 折扣商品表(itcast_discountgoods)


    字段名
    数据类型
    描述




    dgid
    Int unsigned
    主键ID,自动增长


    gid
    varchar(255)
    商品ID


    discount
    int
    折扣



    第四章 具体功能实现4.1 前台具体功能4.1.1 公共部分

    显示登录后的用户昵称、退出登录
    分类搜索商品
    进入各个功能模块
    登录按钮
    登录后查看购买记录、进入购物车



    购物车简要信息:总价(折扣前)、数量
    商品分类,点击即可查看该分类下的商品



    显示当前销量最高的商品


    网站相关信息
    联系方式

    4.1.2 主页
    滚动广告


    推荐商品


    新品推荐

    4.1.3 商品列表页
    商品列表页
    例如,在任一页面的导航栏的搜索框中输入关键词——手机,选择“手机”分类,点击“搜索”按钮。

    之后就可进入商品列表页,该页面显示了所有在指定分类下与关键词相关的商品。

    此时可点击排序下拉菜单,对商品进行排序(默认按照新品排序),例如按照价格升序排列

    类似还可进行:“新品”、“价格降序”、“销量”方式排序。

    折扣商品列表页
    若点击导航栏的“特价优惠”链接,即进入折扣商品列表页

    4.1.4 商品详情页
    查看商品信息
    在任何页面的商品列表点击指定商品,即可查看该商品的详细信息。

    此时,点击“相关商品”按钮,可查看该与该商品相关的其他商品。
    有两种查看方式:



    加入购物车
    会员登录后,在详情页选择购买数量,点击“加入购物车”按钮即可将选择的商品加入购物车。
    4.1.5 会员注册、登录在任一页面的导航栏点击“登录”按钮,即可进入下图所示页面:

    左部为注册框,右部为登录框。

    注册
    在注册框中输入要创建账户的邮箱地址,点击“创建”按钮

    进入下图所示页面填写会员详细信息。

    点击“注册”按钮,即完成了会员注册操作。

    登录
    在登录页面填写正确的邮箱、密码和验证码,点击“登录”按钮即可成功登录。

    若验证码填写错误,页面将显示如下提示信息,并返回登录页面。
    若用户名或密码填写错误,页面将显示如下提示信息,并返回登录页面。
    4.1.6 购物车
    简介
    登录成功后即进入购物车页面(新用户购物车为空),用户可在该页面对加入购物车的商品进行购买。

    假设会员已将自己心仪的商品加入到购物车,购物车页面将自动计算总价。


    更改购物车商品
    此时,会员可通过点击每个商品的“+”、“-”按钮对该商品数量进行增加和减少操作。

    若会员不想购买某件商品,可点击“×”按钮从购物车中删除该商品。


    购买商品
    点击“购买”按钮即将购物车中的商品全部购买。

    4.1.7 购买记录点击上方导航栏的“购买记录”按钮或点击下方页脚的“购买记录”超链接

    即可进入购买记录页查看购买记录。

    4.2 后台具体功能4.2.1 登录页面在登录页面填写正确的用户名、密码和验证码,点击“登录”按钮即可成功登录。

    若验证码填写错误,页面将显示如下提示信息,并返回登录页面。
    若用户名或密码填写错误,页面将显示如下提示信息,并返回登录页面。
    4.2.2 公共部分
    显示标题
    显示管理员名称
    “前台首页”超链接
    “退出登录”按钮



    左部导航栏,点击链接可进入相对应模块
    4.2.3 首页欢迎页面,引导管理员进行操作。

    4.2.4 商品添加在左侧导航栏点击“商品添加”链接进入商品添加页面。
    依次按要求填写商品信息,上传图片。

    点击“确定”按钮,即完成商品添加操作。
    若商品编号重复,则不添加该商品,直接进入商品修改页修改该商品。

    4.2.5 商品查看、修改、删除
    查看
    在左侧导航栏点击“商品列表”链接进入商品列表页面。

    管理员可对指定分类下的商品进行排序(默认对所有商品按照新品排序),例如对“手机—手机”分类按照价格升序排序:


    修改
    点击“修改”可以对指定商品属性进行修改(商品编号不可修改)。


    删除
    点击“删除”

    点击“确定”

    可以看到商品列表中编号为“562390304003”的商品已经被删除。

    4.2.6 查看、添加、删除商品分类
    查看商品分类
    在左侧导航栏点击“商品分类”链接进入商品分类列表页面


    添加商品分类
    点击商品分类列表页的“添加分类”按钮,即可进入商品分类添加页面。例如,选择一级分类为“电脑/办公”,分类名称为“服务器”


    删除商品分类
    点击商品分类列表页每一个商品分类对应的的“删除”
    可以看到商品分类列表页中名为“服务器”的商品分类已经被删除。

    查看会员信息
    在左侧导航栏点击“会员管理”链接进入会员信息列表页面

    点击每个会员的“查看详情”操作,可以查看该会员的详细信息和购买记录

    第五章 总结与心得体会通过这次网上商城开发,让我清楚认识到软件工程的重要程度,软件项目涉及到以下阶段,即计划阶段、需求分析、软件设计、编码、测试阶段、运行维护等。经过一段时间的努力,我们终于完成了网上商城网站系统,基本实现了题目的基本要求。总的来说,在做这个毕业设计的过程中,我们查阅了大量关于网上销售的相关资料,切实地按照软件工程的步骤,从需求分析,概要设计,详细设计,数据库设计,再到编码,调试运行,测试等步骤。从中我学到了很多东西,对我们来说,无论是理论还是实践上都是一个较大幅度的提高,可以说是理论到实践的一个飞跃。我还了解了软件开发的大体过程,在当今竞争激烈的社会中只有学到本领才能有立足之地,通过这次综合实验也使我们知道做软件开发的辛苦,首先要有足够的耐心,要勇于面对密密麻麻的代码,无数遍的调试,和无数遍的修改,但是,当调试成功时,你就会感到这些努力的意义,成功的喜悦。软件开发,还要注意借鉴,查看已有的例子的代码,这样可以节省大量的时间,同时也实现了代码重用。此外,我知道了基础课的重要,要学好一门编程语言,一定要动手,实践是最好的方法!
    18 评论 251 下载 2019-05-23 17:51:27 下载需要13点积分
  • 基于JSP和Sql Server实现的美食网

    摘 要本论文阐述了整个美食网的功能及实现。实现了从菜品管理,名店加盟,到后台管理实现,留言处理,再到系统管理。基本上实现了美食网的功能流程。本系统界面简单直观,易于操作和使用,交互性强,完全基于Internet网络。经过分析,我们使用 JSP+SQL2000进行设计开发。
    关键词:美食网、JSP、SQL2000
    AbstractThis paper expounds the function of the food network and implementation. Realizes from food management, boutique, to join management background realization, message processing, arrive again system management. Basically realized the function of the food network flow. This system interface is simple, intuitive, and easy to operate and use, interactivity is strong, completely based on Internet network. Through analysis, we use the JSP + SQL2000 design development.
    Key word: Gourmet nets, JSP, SQL2000
    第一章 开发背景1.1 目的和意义本系统的设计目的是为了满足消费者只要通过互联网就可以足不出户的订购自己喜欢的菜品,改变传统商业交易,在互联网上进行交易,实现网上购买菜品。
    本论文主要涉及软件,数据库与网络技术等。涵盖知识面广,可有效地提高学生综合运用所学知识分析解决问题的能力,增强学生对事物的理解与掌握能力,培养学生掌握科学的研究方法,正确的设计思想,独立思考,勇于进取,探索创新,为今后进一步学习与工作奠定了良好的基础。
    1.2 开发设计思想本系统用JSP语言来编写美食网,数据库用 SQL2000 来连接系统,通过编写JavaBeans来进行后台业务逻辑控制,即JSP +JavaBeans + SQL2000 三层模式完成整个设计工作。本系统全部基于Internet网络,以JSP语言对网站进行开发,注重用户与网站的交互性。因此在这样的背景下,针对当前Internet网络发展趋势来计美食网就成为了当今应用软件的首选体系结构。
    1.3 开发目标随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对线上销售平台进行管理,具有线下操作所无法比拟的优点。例如:检索迅速、方便快捷、高效率、低成本、存储量大、寿命长、沟通成本低等,这些优点能够极大地提高管理和办事的效率。因此,开发这样一个网上销售平台就成为很有必要的事情。而且只要系统的设计合理,就可以为公司再开一条销售通路,减少库存堆积,利用网络的共享、互动的优点,结合地面销售的优点,借助数据库管理技术,开发一个网上预定销售平台,实现餐饮网上预定销售规范化、个性化、人性化。
    相比传统地面销售,网络销售有着以下优点:

    降低成本:由于管理系统是通过互联网将企业的客户联系在一起,能够动态地反映当前企业的销售状况,使企业对内部信息有一个准确的了解,降低业务交易中的风险和成本,加强各级与总部的信息交流,大大降低了人力成本、管理成本,使企业能够及时对企业在销售中出现的问题进行解决
    增加收益:建立管理系统可加快资金回笼速度,提高资产回报率,可以迅速、准确响应市场变化和客户需求,从而达到增加收益的目的
    提高控制力度:管理系统可以加强销售成本控制,减少人为错误,使每一级客户都可以降低销售风险,使管理更完善
    减少操作误差:销售的自动化管理,可以在业务操作时录入,保证数据的真实性。多种业务单据自动生成和权限控制,减少操作上的人为误差
    提高企业规范化运作水平:实施管理系统,保证统一业务处理模式,规范销售流程,消除不符要求的销售请求,提高业务效率,使销售管理规范化。业务流程化,避免重复抄写和录入,减少失误,提高业务人员工作效率
    提升信息交流:管理者和决策人员及时获取分销售的各项真实数据,保证了各分公司与上级管理者之间信息交流,提高企业运作效率。同时,更可与其它系统结合,建立一个统一互动的电子商务平台,供客户共享企业信息
    提供决策支持:管理系统可充分收集销售信息,加强了对历史数据的利用,为进一步市场分析提供数据基础和决策支持

    总之,伴随着个人电脑的普及和使用电脑人口的增加,网络销售在众多的销售渠道中脱颖而出,其地位及占有量一定会逐渐增加。技术革命引发产业结构变革,市场的竞争规则也会跟着发生变化,网络销售的产生是流通领域中的一场革命。
    本论文含针对毕业设计程序的相关说明,但不是软件系统的使用说明书。本论文不单单介绍系统的各组成部分及操作方法,更强调系统的应用前景,以及能给餐厅带来的益处,从提高经济利益、提升服务质量、合理安排人力、扩大商店影响、增进消费者口碑等方面进行全方位介绍。
    第二章 开发工具和环境简介2.1 JSP技术简介JSP(Java Server Page服务器网页)是从1998年开始出现的新技术。由Sun公司倡导、许多公司参与一起建立的一种动态网页技术标准,是基于JavaServlet以及整个Java体系的web开发技术。在传统的网页HTML文件(*.htm,*.html)中加入脚本片段和JSP标记(Tag),构成JSP网页(*.jsp)。JSP技术为创建显示动态生成内容的web页面提供了简便的方法。JSP作为Java家族的一员,承袭了Java的特点,即跨平台的特性,也即一次编译,到处运行。
    在国外,己经大量使用JSP作为网络应用程序的开发工具,而在国内,尽管JSP还不是主流开发技术,但是由于JSP的强大优势,许多网站都已经准备转向JSP,利用JSP来开发动态网站。
    2.2 JSP工作原理JSP是面向服务器的,因此支持任何浏览器。当Web服务器和JSP引擎遇到访问JSP网页的请求时,JSP引擎将请求对象发送给服务器端的相关组件,比如JavaBean组件、Servlet或EJB等,然后由服务器端组件处理这些请示,可能需要从数据库或数据存储中检索信息,然后服务器端组件再将响应对象返回JSP引擎。JSP引擎将响应对象传递给JSP页面,根据JSP页面的HTML格式完成数据编排,最后Web服务器和JSP引擎将格式化后的JSP页面以HTML格式返回客户浏览器。这就是当前网站构建中广泛采用的浏览器——Web服务器——后台数据库的三层架构模式。因为JSP所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果。
    2.3 JSP体系结构JSP网站开发标准给出了两种使用JSP的技术,可以归纳为模式一、模式二。
    模式一:JSP+JavaBeans技术 在这种模式中,JSP页面独自响应请求并将处理结果返回给客户。Bean处理所有数据访问,JSP实现页面的表现,以实现内容生成与显示相分离。当处理复杂的大型应用时,页面被嵌入大量的脚本或Java代码段,当需要处理的商业逻辑复杂时,这种情况会变得非常糟糕,大量的内嵌代码使得页面程序变得复杂,对于前端界面设计人员,这是不可思议的事情。所以模式一可用于小型应用,不能够满足大型应用的需要。
    模式二:JSP+Servlet+JavaBeans技术 Servlet技术是一种采用Java技术来实现CGI功能的一种技术,Servlet技术非常适于服务器端的处理和编程,并且Servlet会长期驻留在内存。
    从开发的观点看,模式二具有更清晰的页面表现,清楚的开发者角色划分,在大规模项目开发中,模式二更被采用,模式二也更符合当前流行的MVC结构(Model/view/controller),其中Servlet对应controller,处于控制者的位置,处理HTTP请求,负责生成JSP中使用的Beans组件或对象,并判断应将请求传递给哪个JSP等,JSP对应view,负责生成最终的动态网页并返回给浏览器。而JavaBeans对应的是Model,实现各个具体的应用逻辑与功能。
    2.4 JSP的特点
    简化的页面生成技术:JSP页面用标准的HTML或XML命令来处理页面的格式化和布局设计,而用类似HTML、XML的标记和Java语言编写的脚本程序生成页面内容。这使得页面形式与页面内容互相独立,非常有利于大型项目的分工合作
    与Java平台有机集成:JSP技术是Java 2平台的重要组成部分,JSP使用Java语言作为它的脚本语言。在JSP页面中可以使用几乎所有的Java组件和Java API,这就能充分发挥出Java语言的强大功能。使用JSP技术可以创建具有高度可伸缩性和可靠性的Web应用程序
    硬件平台和服务器无关性:JSP作为Java家族的一员,秉承了Java技术的“一次编写,随处可用(Write Once,Rum Anywhere)”的特性,可以运行于大多数流行的操作系统平台及Web服务器,这种与服务器硬件和操作系统平台的无关性是JSP相对于其它动态网页技术最大的一个优点
    功能可扩展性:如同的JSP技术可以通过ActiveX/COM组件来扩展功能一样,JSP可以通过JavaBean和EJB(Enterprise JavaBean)以及自定义的标记来扩展功能

    JSP可以通过JDBC,与诸如Oracle、SQL2000这样的大型关系数据库进行连接。
    JSP提供了一些隐含对象。这些隐含对象在JSP页面中可以直接引用,而不必首先声明。利用JSP提供的这些隐含对象,可以使脚本功能更加强大,并且编程更加容易、方便。例如,利用request对象,可以很容易地接收用户在HTML表单中提交的信息。
    2.5 SQL 数据库SQL Server 是一个具备完全 Web 支持的数据库产品,提供了对可扩展标记语言 (XML) 的核心支持以及在 Internet 上和防火墙外进行查询的能力,提供了以 Web 标准为基础的扩展数据库编程功能。丰富的 XML 和 Internet 标准支持允许使用内置的存储过程以 XML 格式轻松存储和检索数据。
    SQL Server 提供强大的开发工具和各类开发特性,在大大提高开发效率的同时,进一步拓展应用空间,带来新的商业应用机遇。例如,XML数据库与Web Service的支持将使您的应用实现Internet数据互联,.Net集成极大的扩展了开发空间,异构数据集成、Service Broker使您的数据和其它应用无缝集成,各种新数据类型和T-SQL扩展带来了诸多灵活性。C#、VB.Net、XQuery、XMLA、ADO.Net 2.0、SMO、AMO等都将成为SQL Server数据平台上开发数据相关应用的有力工具。
    2.6 系统数据库连接JDBC技术是Java DataBase Connectivity的缩写,它是SUN公司提供的一种支持基本SQL功能的通用的应用程序接口(Application Programming Interface)。它由一组用Java语言编写的类和接口组成。通过这些类和接口,程序开发人员可以在Java语言中方便地建立与数据库的链接,通过执行相应SQL语句,完成对不同数据库的访问。因此,开发人员使用JDBC API可以不必编写一个应用程序来访问Sybase数据库,又另外编写一个应用程序去访问Oracle数据库,再写一个应用程序访问的SQL2000。不但如此,使用Java语言编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上开发不同的应用程序。
    简单地说,JDBC能完成下列三件事:

    同一个数据库建立连接
    向数据库建立连接
    处理数据库返回的结果

    JDBC是一种通用低层的应用程序编程接口,它在不同的数据库功能模块的层次上提供一个统一的用户界面。说JDBC是一处低级的API,是指它直接调用SQL命令,它比其他的一些数据库连接API要容易使用些,但它有同样可以作为更高级的,用户办面更友好的API或开发工具基础。
    第三章 美食网功能分析为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件(或数据库)。模块是数据说明、可执行语句等程序设计对象的集合,它是单独命名的而且可通过名字来访问。模块化就是把程序化分成若干个模块,每个模块完成一个子功能,把这些模块集起来组成一个整体,可以完成指定的满足问题的要求。
    3.1 系统功能分析首先对现有系统进行分析,现有系统是信息的重要来源。分析已有系统的功能和实现,从而确定新系统的设计目标和模型。由于条件有限,调研主要是在网上进行。即通过在网上已有的美食网站注册成会员来了解其具备的功能。
    本网站提供各种与美食相关的信息,实现了对信息数据的浏览、查询、编辑和删除等基本数据库操作,采用了模块化设计方法,实现了前台功能模块和后台功能模块,前台功能模块包括名店介绍、特色美食、名店加盟、美食教程、美食社区等;后台功能模块包括管理员信息管理管理用户信息、管理名店信息、管理美食信息、管理教程信息、管理社区信息等功能。

    网站首页:灵活推荐餐馆、美食和各种文章、图片内容等;名店介绍:可按菜系分类、餐馆环境等;条件检索查询餐馆,每个餐馆具有一个综合展示页,展示餐馆的店堂图片、菜式和网友点评
    特色美食:通过分类检索,可直接查询美食介绍、相关餐馆等信息
    美食教程:查询和浏览美食教程,可通过后台发布文章。用户也可以自定义创建文章栏目和分类
    美食社区: 一个会员互动交流的小型社区系统,包括餐馆点评、美食评论、聚会活动讨论等区域,用户也可自定义创建讨论区
    名店加盟:添加名店加盟信息
    后台设计:管理员信息管理:管理员登陆,信息修改等
    管理用户信息:用户注册,登陆,忘记密码,信息修改,删除等
    管理名店信息:名店的添加,查询,修改,删除
    管理美食信息:美食的添加,查询,修改,删除
    管理美食教程信息:美食教程的添加,查询,修改,删除
    管理论坛信息:信息查询,删除,发表留言等
    管理名店加盟信息:名店加盟的查询、处理、删除

    3.2 可行性研究可行性研究阶段的主要任务是在系统初步调查的基础上,对新系统是否能够实现和值得实现等问题做出判断,避免在花费了大量的人力和物力之后才发现系统不能实现或新系统投入使用后没有任何实际意义而引起的浪费,对新系统可行性的分析,要求用最小的代价在尽量短的时间内确定系统是否可行。

    技术可行性分析:美食网的开发是一项复杂的系统工程。为了保证系统开发成功,必须采用工程化的系统开发方法,并研究出一些符合工程化标准的开发方法。这些方法旨在指导开发者进行工程化的系统开发,从而加快系统开发的速度,保证质量以及降低开发成本。工程化的系统开发方法确实在开发实践中取得了一定的效果。此次开发使用JSP作为开发语言,采用Servlet技术,Tomcat5.0作为Web服务器
    运行可行性分析:随着计算机知识的普及和推广,越来越多的人掌握了计算机的基本使用方法和技能。随着Internet的发展,用户对于网络、WINDOWS等环境下的软件使用比较熟悉,对于新鲜事物,用户表现出极大的兴趣和热情
    经济可行性分析:美食网给人们带来了方便,成为一种全新的商务模式。因此,不用出门就可以在家购物的新时尚已经到来,构建一个美食网在经济上是完全可行的

    就本系统而言,随着电脑的普及,为学生在网络上进行购物提供有利的条件。而一个美食网可以为学生提供软件条件,这样学生便可以足不出户的买菜品了。商家可以从中获得利润,两全其美。通过以上的分析,开发美食网是完全可行的。
    系统采用联网多机多用户操作方式,系统的运行环境包括硬件、操作系统、关系数据库等软件:

    硬件:中央处理器(CPU):奔4 以上的处理器
    硬盘:80 GB以上硬盘
    内存:512 MB
    显示器: 17寸显示器
    操作系统: Windows XP
    关系数据库: SQL2000

    3.3 需求分析需求分析的任务是通过详细调查现实世界要处理的对象,充分了解系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变。
    在这里我们需要了解用户有什么样的具体要求和对系统性能的要求。

    用户的需求分析

    用户注册用户登录菜品浏览菜品订购菜品查询订单修改修改密码修改个人信息管理员
    系统性能分析:对数据的安全性、完整性要求:用户信息保密,只有管理员能任意修改。确保网上支付安全。菜品信息、用户信息必须保证其完整性。防止恶意删改。以下是系统性能需求:

    准确性和可靠性高页面友好,功能齐全,且可以使用系统便于维护和升级数据库访问效率高

    3.4 系统总体结构图
    3.5 系统ER图注册用户信息实体E-R图如下图4-3所示:

    图书信息实体E-R图如下图4-4所示:

    菜品名称实体E-R图如下图4-5所示:

    餐馆展示信息实体E-R图如下图4-6所示:

    名店加盟实体E-R图如下图4-7所示:

    第四章 美食管理系统总体设计4.1 系统功能设计目标理论系统功能设计目标如下:

    实用性强:我们努力使系统符合实际操作流程的习惯,并尽量减少用户的输入,易学易用的友好的用户界面,满足各层次的用户使用的需求
    先进的程序结构:使用当代前卫的软件编程,能延长其生命周期,易于维护与管理
    安全可靠性高:后台维护功能齐全,根据平台在各个阶段不同的使用情况,管理人员可以设置相应的操作权限,增加系统注册,分配各个栏目的管理权限,实现系统的维护,保证系统的安全、可靠
    使用模块化设计的方法:使系统具有良好的可扩充性,以适应其不同阶段的发展需要,便于后来者分析、维护
    操作简单,维护方便:每个子系统都具有相对独立的系统维护功能对可变化的项目可自行维护
    查询功能强大:可以对菜品的基本情况、用户基本情况,菜品评信息,用户留言等按各种方式查询,可形成各种表单,同时还可对其进行汇总,使管理人员能及时准确地掌握用户和菜品等的基本情况

    4.2 美食网功能模块划分根据需求分析与系统功能设计目标,结合实际情况本系统功能模块设计分为如下几个模块:

    网站首页:灵活推荐餐馆、美食和各种文章、图片内容等;名店介绍:可按菜系分类、餐馆环境等;条件检索查询餐馆,每个餐馆具有一个综合展示页,展示餐馆的店堂图片、菜式和网友点评
    特色美食:通过分类检索,可直接查询美食介绍、相关餐馆等信息
    美食教程:查询和浏览美食教程,可通过后台发布文章。用户也可以自定义创建文章栏目和分类
    美食社区: 一个会员互动交流的小型社区系统,包括餐馆点评、美食评论、聚会活动讨论等区域,用户也可自定义创建讨论区
    名店加盟:添加名店加盟信息
    后台设计:管理员信息管理:管理员登陆,信息修改等
    管理用户信息:用户注册,登陆,忘记密码,信息修改,删除等
    管理名店信息:名店的添加,查询,修改,删除
    管理美食信息:美食的添加,查询,修改,删除
    管理美食教程信息:美食教程的添加,查询,修改,删除
    管理论坛信息:信息查询,删除,发表留言等
    管理名店加盟信息:名店加盟的查询、处理、删除

    4.3 美食管理系统的体系结构三层结构

    即:JSP技术 + JavaBeans + SQL2000 数据库
    第五章 数据库设计5.1 数据库系统本系统的前端开发是使用JSP技术,通过JavaBeans进行逻辑控制和数据库连接,而后台数据库采用的是SQL2000 。SQL2000 数据库管理系统是一项全面完整的数据库与分析产品。SQL2000 非常容易学习、使用,介绍、学习资料比较多,SQL2000 全面支持Web功能的数据库解决方案,与此同时,SQL2000 还在可伸缩性与可靠性方面保持着多项基准测试纪录,而这两方面特性又都是企业数据库系统在激烈市场竞争中克敌致胜的关键所在。无论以应用程序开发速度还是以事务处理运行速度来衡量,SQL2000 都堪称最为快捷的数据库系统。
    对比SQL2000 和其他的大型数据库管理系统,SQL2000 具有可靠的安全性,较快的存储速度,高度的兼容性,简单易用,应用SQL2000 作为后台数据库为系统的开发提供了强有力的支持,并对以后软件的运行提供了坚实的基础,因此,我们采用了SQL2000 作为后台数据库。
    5.2 数据库表设计系统数据库中其中几个表格的设计结果如下面表格所示。每个表格表示在数据库中的一个表。本系统的数据库其中包括八个表:
    表:dtproperties



    序号
    字段名
    类型
    长度
    允许空
    主键




    1
    id
    int
    4




    2
    objectid
    int
    4




    3
    property
    varchar
    64




    4
    value
    varchar
    255




    5
    uvalue
    nvarchar
    255




    6
    lvalue
    image
    16




    7
    version
    int
    4




    表:t_admin



    序号
    字段名
    类型
    长度
    允许空
    主键




    1
    userId
    int
    4




    2
    userName
    varchar
    50




    3
    userPw
    varchar
    50




    表:t_canguan



    序号
    字段名
    类型
    长度
    允许空
    主键




    1
    canguan_id
    int
    4




    2
    canguan_name
    varchar
    50




    3
    canguan_add
    varchar
    50




    4
    canguan_tel
    varchar
    50




    5
    canguan_beizhu
    varchar
    5000




    6
    canguan_del
    varchar
    50




    表:t_catelog



    序号
    字段名
    类型
    长度
    允许空
    主键




    1
    catelog_id
    int
    4




    2
    catelog_name
    varchar
    50




    3
    catelog_miaoshu
    varchar
    5000




    4
    catelog_del
    varchar
    50




    表:t_doc



    序号
    字段名
    类型
    长度
    允许空
    主键




    1
    id
    int
    4




    2
    mingcheng
    varchar
    50




    3
    fujian
    varchar
    50




    4
    fujianYuanshiming
    varchar
    50




    5
    del
    varchar
    50




    表:t_gonggao



    序号
    字段名
    类型
    长度
    允许空
    主键




    1
    gonggao_id
    int
    4




    2
    gonggao_title
    varchar
    50




    3
    gonggao_content
    varchar
    8000




    4
    gonggao_data
    varchar
    50




    5
    gonggao_fabuzhe
    varchar
    50




    6
    gonggao_del
    varchar
    50




    7
    gonggao_one1
    varchar
    50




    8
    gonggao_one2
    varchar
    50




    9
    gonggao_one3
    varchar
    50




    10
    gonggao_one4
    varchar
    50




    11
    gonggao_one5
    datetime
    8




    12
    gonggao_one6
    datetime
    8




    13
    gonggao_one7
    int
    4




    14
    gonggao_one8
    int
    4




    表:t_goods



    序号
    字段名
    类型
    长度
    允许空
    主键




    1
    goods_id
    int
    4




    2
    goods_name
    varchar
    50




    3
    goods_miaoshu
    varchar
    5000




    4
    goods_pic
    varchar
    50




    5
    goods_jiage
    int
    4




    6
    goods_catelog_id
    int
    4




    7
    goods_canguan_id
    int
    4




    8
    goods_del
    varchar
    50




    表:t_liuyan



    序号
    字段名
    类型
    长度
    允许空
    主键




    1
    liuyan_id
    int
    4




    2
    liuyan_title
    varchar
    50




    3
    liuyan_content
    varchar
    5000




    4
    liuyan_date
    varchar
    50




    5
    liuyan_user
    varchar
    50




    第六章 程序设计6.1 程序说明根据前边的需求分析和系统总体设计内容进行程序设计。本系统是以Java 语言为基础进行开发的。主要是采用JSP技术+JavaBeans+ SQL2000 模式进行模块开发与实现的。全部都以面向对象的方法进行设计和实现。
    6.2 具体模块划分网站首页:灵活推荐餐馆、美食和各种文章、图片内容等;名店介绍:可按菜系分类、餐馆环境等;条件检索查询餐馆,每个餐馆具有一个综合展示页,展示餐馆的店堂图片、菜式和网友点评。

    6.2.1 用户注册普通用户无需注册就可以浏览网站部份信息,如果用户要留言、或者加盟一定要注册才可以访问这几个页面。用户注册包括:用户名、密码、密码确认、真实姓名、住址、性别、联系方式等资料。

    TUser user=new TUser();user.setUserName(userName);user.setUserPw(userPw);user.setUserAddress(userAddress);user.setUserTel(userTel);user.setUserRealname(userRealname);user.setUserEmail(userEmail);user.setUserSex(userSex);user.setUserQq(userQq);user.setUserDel("no");userDAO.save(user);Map session= ServletActionContext.getContext().getSession();session.put("user", user);return "successAdd";
    6.2.2 用户登录模块
    用户登录包括:登录名称,输入密码。
    当用户登录后由管理员核对该用户的名称和密码是否正确,如果无误的话用户可以通过检查直接进入网站的其它页面进行浏览和订购。
    String sql="from TAdmin where userName=? and userPw=?";Object[] con={userName,userPw};List adminList=adminDAO.getHibernateTemplate().find(sql,con);if(adminList.size()==0){ result="no";}else{ WebContext ctx = WebContextFactory.get(); HttpSession session=ctx.getSession(); TAdmin admin=(TAdmin)adminList.get(0); session.setAttribute("userType", 0); session.setAttribute("admin", admin); result="yes";}String sql="from TGoods where goodsDel='no'";List goodsList=goodsDAO.getHibernateTemplate().find(sql);Map request=(Map)ServletActionContext.getContext().get("request");request.put("goodsList", goodsList);return ActionSupport.SUCCESS;
    6.2.3 餐馆展示特色美食:通过分类检索,可直接查询美食介绍、相关餐馆等信息。

    TMingdian mingdian=new TMingdian();mingdian.setName(name);mingdian.setAddress(address);mingdian.setTel(tel);mingdian.setBeizhu(beizhu);mingdian.setZhuantai("noshenhe");mingdian.setDel("no");mingdianDAO.save(mingdian);return ActionSupport.SUCCESS;
    6.2.4 美食教材美食教程:查询和浏览美食教程,可通过后台发布文章。用户也可以自定义创建文章栏目和分类。

    String sql="from TDoc where del='no'";List docList=docDAO.getHibernateTemplate().find(sql);Map request=(Map)ServletActionContext.getContext().get("request");request.put("docList", docList);return ActionSupport.SUCCESS;
    6.2.5 美食社区美食社区: 一个会员互动交流的小型社区系统,包括餐馆点评、美食评论、聚会活动讨论等区域,用户也可自定义创建讨论区。

    TLiuyan liuyan=new TLiuyan();liuyan.setLiuyanContent(liuyanContent);liuyan.setLiuyanTitle(liuyanTitle);liuyan.setLiuyanDate(new Date().toLocaleString());Map session=ActionContext.getContext().getSession();if(session.get("user")!=null){ TUser user=(TUser)session.get("user"); liuyan.setLiuyanUser(user.getUserName());}liuyanDAO.save(liuyan);this.setMessage("留言成功");this.setPath("liuyanAll.action");return "succeed";
    6.2.6 名店加盟名店加盟:添加名店加盟信息。

    TMingdian mingdian=new TMingdian();mingdian.setName(name);mingdian.setAddress(address);mingdian.setTel(tel);mingdian.setBeizhu(beizhu);mingdian.setZhuantai("noshenhe");mingdian.setDel("no");mingdianDAO.save(mingdian);
    6.3 后台管理管理员输入用户名和密码,系统判断合法时,刚进入后台主界面,否则提示错误信息。登录后台后,我们可以看到后台功能有留言管理、餐馆管理、菜品管理、美食教材等功能信息。管理员可以在左边菜单中选择相应的功能进行操作。

    WebContext ctx = WebContextFactory.get(); HttpSession session=ctx.getSession(); TAdmin admin=(TAdmin)session.getAttribute("admin");admin.setUserPw(userPwNew);adminDAO.getHibernateTemplate().update(admin);session.setAttribute("admin", admin);
    6.3.1 管理用户信息
    为了保证系统安全性,管理员登录后可以修改密码 :

    WebContext ctx = WebContextFactory.get(); HttpSession session=ctx.getSession(); TAdmin admin=(TAdmin)session.getAttribute("admin");admin.setUserPw(userPwNew);adminDAO.getHibernateTemplate().update(admin);session.setAttribute("admin", admin);
    6.3.2 管理名店信息管理员登录后可以对店辅加盟的信息进行添加,修改,删除操作,添加成功后,前台就会显示:

    TMingdian mingdian=mingdianDAO.findById(id);mingdian.setDel("yes");mingdianDAO.attachDirty(mingdian);this.setMessage("操作成功");this.setPath("mingdianMana.action");return "succeed";
    6.3.3 管理美食信息美食的添加,修改,删除。其中美食管理信息包括名称:

    Map request=(Map)ServletActionContext.getContext().get("request");TGoods goods=goodsDAO.findById(goodsId);request.put("goods", goods);return ActionSupport.SUCCESS;
    6.3.4 管理论坛信息论坛信息是一个比较简单却是很直观的信息发布/存放系统,它提供了一个和浏览者交流、沟通的平台。现在许多网站都有论坛,它可以收集浏览者提出的各种意见和建议。
    在论坛信息管理系统中,管理员可以对用户留言进行管理。其整个系统的功能如下。
    整个系统要实现的功能可以将系统分为以下几个模块:发表留言模块、查看留言模块、管理员修改、留言设置、留言管理模块。系统的设计结构图如图所示。

    TLiuyan liuyan=liuyanDAO.findById(liuyanId);liuyanDAO.delete(liuyan);this.setMessage("留言删除成功");this.setPath("liuyanMana.action");return "succeed";
    结束语经过十个月的不懈努力,和指导老师的谆谆教导,以及同组同学的团结协作,充分利用大学四年所学的专业知识,通过大量阅读与设计相关的专业参考文献,我终于完成了本次毕业设计,已经基本上实现了美食网的各项功能。
    在这次毕业设计过程中,我独立设计和实现了用户注册,用户登录,修改密码,留言板,菜品浏览等五个模块的全部功能,以及这几个模块的数据库设计。
    通过这次毕业设计,我掌握了SQL2000 这种大型数据库的编程方法,掌握了JAVA语言和JSP技术。了解到电子商务的理论以及平台开发的模式,掌握了网络开发的方法与模式。对团队的协作,对软件开发方法和手段,有了一定的认识,丰富了我的软件开发的经验,提高了程序编写的水平,并加深理解了许多课程中、菜品本上学到的知识和理论。同时,通过编写毕业设计论文,我还基本掌握了软件文档的菜品写方法和菜品写格式。
    参考文献[1] 孙卫琴,李洪成.《Tomcat 与 Java Web 开发技术详解》.电子工业出版社,2003年6月:1-205
    [2] BruceEckel.《Java编程思想》. 机械工业出版社,2003年10月:1-378
    [3] FLANAGAN.《Java技术手册》. 中国电力出版社,2002年6月:1-465
    [4] 孙一林,彭波.《Java数据库编程实例》. 清华大学出版社,2002年8月:30-210
    [5] LEE ANNE PHILLIPS.《巧学活用HTML4》.电子工业出版社,2004年8月:1-319
    [6] 飞思科技产品研发中心.《JSP应用开发详解》.电子工业出版社,2003年9月:32-300
    [7] 耿祥义,张跃平.《JSP实用教程》. 清华大学出版社,2003年5月1日:1-354
    [8] 孙涌.《现代软件工程》.北京希望电子出版社,2003年8月:1-246
    [9] 萨师煊,王珊.《数据库系统概论》.高等教育出版社,2002年2月:3-460
    [10] Brown等.《JSP编程指南(第二版)》. 电子工业出版社 ,2003年3月:1-268
    [11] 清宏计算机工作室.《JSP编程技巧》. 机械工业出版社, 2004年5月:1-410
    [12] 朱红,司光亚.《JSP Web编程指南》.电子工业出版社, 2001年9月:34-307
    [13] 赛奎春.《JSP工程应用与项目实践》. 机械工业出版社, 2002年8月:23-294
    3 评论 84 下载 2020-08-07 10:34:16 下载需要12点积分
  • 基于JSP和Oracle的记账管理系统设计与实现

    摘 要近年来由于生活节奏的加快,好像每个人都被很多难以启齿的问题困惑,然而关于随意消费是大多数人头疼的问题,没有任何计划和筹备的情况下随意消费,导致现实生活中我们所称为的“月光族”。如果我们定期花一些时间去记录我们生活中那些主要的消费情况,了解自己的收入和支出情况,这样坚持几个月你将会发现一些规律,收入是否稳定,月底的时候是收入少了还是支出多了,投资是否符合预期;这些规律,就是你通过记账了解到的财务状况,财务状况没有单纯的好与坏之分,最理想的情况,当然是无论什么情况都不会入不敷出,但这个情况对于刚毕业的人和工作十年的人情况显然是不同的。
    当你逐渐了解自己的财务状况,就可以学着做简单的收支规划。大部分月光族的根源其实是缺乏规划,想买什么的时候就买了。并不是说规划不能随意买东西,规划的价值在于让你使用资金的效率最高。无论你用金钱换取的必需品,满足感或者快乐,都可以通过规划获得比较高的效率。
    本记账系统是一个基于国内外电子商务网站的发展现状,采用B2C(Business to Consumers)模式开发的电子商务平台,它的价值所在对于那些随意消费性的人群能起到一个很大的警示作用,而且系统扩张性很强,能根据客户的不同需求进行快速改进。该系统采用B/S三层结构,服务器是Tomcat同时运用JSp技术进行动态页面设计,后台数据库是Oracle。
    关键词:记账管理系统;B/S结构;Oracle数据库;JSP
    ABSTRACTIn recent years, with the quickening pace of life, everyone seems to be a lot of difficult questions about casual consumer confusion, however most people headaches, no plans and preparations for the case of random consumption, resulting in the moonlight clan of what we call “real life”. If we regularly take some time to record our life in the main consumption situation, understand the income and expenditure of their own, doing a few months you will find some rules, income stability, when the end of the month is less income or spending more, the investment is in line with expectations; these rules, you are through accounting to understand the financial situation, the financial situation is not only the good and bad points, the ideal situation is of course, no matter what the situation will not make ends meet, but this situation for graduate work and ten years of people the situation is obviously different.
    When you get to know your financial situation, you can learn to make a simple plan. Most of the root causes of the family is the lack of planning, what to buy when the. Planning is not to say that you can not buy things, the value of planning is to make the most efficient use of funds. Whether you use the money in exchange for necessities, satisfaction or happiness, can be achieved through the planning of high efficiency.
    The accounting system is a development based on the domestic and foreign electronic commerce website, using B2C (Business to Consumers) e-commerce platform development model, its value for those casual consumer groups can play a very strong warning function, and system expansion, can be rapidly improved according to the different needs of customers. The system uses B/S three layer structure, the server is Tomcat while using JSp technology for dynamic page design, the background database is Oracle.
    Key word:Accounting management system; B/S structure; Oracle database; JSP
    第一章 绪论1.1 研究背景和意义对于一个刚出校门或是刚刚工作不久的我们来说,由于我们刚步入社会,最基本的事情就是首先保证自己生存下来,合理地安排自己的消费情况, 所以,我们平时对自己的消费和收支进行一个账单记录显得尤为关键。账单记录能让我们更清楚的了解我们收支的去向,让我们能更好的把握好身上的每一分钱,然后把钱用到关键的地方,如投资,理财等。从查询课外资料来看,国外有很多账单管理的软件,而且大部分外国人对生活中的记账有着严格的把控。就国内而言,放眼望去,大部分记账软件都是着重于办公财务软件,而对于个人和家庭的小型记账系统还是比较少的,因此需要开发一款这样的系统软件,从而达到引导我们理性消费,合理分配收支。
    对于记账而言呢,若我们直接像古人那样用纸和笔记录的话,那样随着我们的记录越来越多,我们的记账薄也随之越来越厚,容易造成遗失,当我们要查找某个我们想要找的记录时,我们会消耗大量的时间,这就非常麻烦。这种记账方式就显得非常冗余、笨重,因此我们需要设计一款功能完善的记账软件,用它来代替传统的手工操作。
    1.2 研究目标记账理财是一个很普遍而且很广泛的概念,从理财的角度来看,个人、公司和政府部门都少不了理财活动。所以本论文介绍的就是一个人记账为主。中国也是个比较重视个人和家庭观念较国家,一个人理财就非常普遍了。
    所谓个人理财从概念上讲,就是合理、有效的安排和运用我们自己的资金,让我们的消费到达最大的效应,以到达最大地限度地满足日常生活需要的目的。简单的来说,个人理财就是利用企业理财和金融方法对我们个人经济进行有效的管理和计划,增强自身的经济实力,提高个人经济的抗打击能力,增大个人效应。从另一种角度来讲,个人理财就是利用开源节流的道理,增加收入,节约支出,用合理地办法来达到我们所希望到达的经济目的。这样的目标有很多,小的如增添家电设备,外出旅游,大的有买车、买房,为自己孩子储备教育基金等等。
    1.3 论文结构本论文总共为七章:

    第一章 绪论:介绍课题的研究背景和意义,然后分析系统的可行性,然后是本文的组织结构,最后是对本章的总结
    第二章 相关技术与方法介绍:关于本系统的一些相对重要的技术的一些简介和相关资料的介绍,以便阅读本论文的人更好的了解本系统的技术,以及细节。也可以帮助不了解本系统的人了解到该系统的基本功能和相应的相关知识。然后就是所操作的软硬件环境
    第三章 系统分析:简述下系统的可行性,例如基本的 经济可行性、操作可行性和技术可行性等,还介绍了该系统的需求分析,系统的总体需求和相对应的用例图,用例图能使读者更直观的看出该系统需求的总体关系和走向
    第四章 系统设计:系统类分析,让我们更直观的看出这系统所涉及到的一些实体类之间的关系;系统关键业务设计,能让阅读者很清楚该系统的各个功能之间的关系和总体设计是怎样的;数据库设计,让我们可以更加清晰的设计出符合我们需要的表,数据库逻辑结构设计图,让我们清楚的知道数据库每一个表的字段名,以及它们的类型等,让我们能迅速的设计出符合系统需要的数据库表
    第五章 系统实现:用户登录后,系统会展示出用户权限所拥有的功能;管理员登录之后,系统也会展示出管理员相对应的功能列表
    第六章 系统测试:介绍并使用了常见的测试方法,让我们在完成系统的开发后,通过测试,更加快速的发现系统的不足之处并将其进行完善。再进行测试,直到得到满意的测试结果
    第七章 总结:对全文进行一个总体的评价和这段时间所学到的东西进行一个沉淀。并且对于那些在论文期间给予本人帮助的人致谢

    第二章 相关技术与方法本系统主要采用JAVA编程技术和Oracle数据库,在Windows 7操作系统环境下,采用Eclipse开发工具以及Javabeans编写进行设计与开发完成的基于B/S结构的电子商务网站的设计与实现。
    2.1 MVC简介MVC 是Modell-View-Controll的英文缩写,它是一种设计典范,把业务逻辑,数据和页面显示抽离出来的方式组织代码。

    Model(模型)表示应用程序核心
    View(视图)把后台数据接收过来之后,在页面上进行渲染
    Controller(控制器)控制业务逻辑的处理

    MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
    视图(View)是直接与用户交互的界面,对于Web应用来说,可以概括为HTML或者其他显示界面如XHTML、JSP、XML和Applet等。一个应用可能有很多不同的视图,涉及到多方面的显示技术,从而对于系统的维护也不单单只是对单方面技术的要求。业务流程事务的处理交予模型(Model)层处理。
    模型(Model)就是业务/服务的跳转的处理以及业务规则的设定。业务流程处理对其它层(view层及control层)来说是黑箱操作,业务模型接受对应表单传递来的数据,处理之后吧就把那个结果返回回来。业务模型的设计是MVC里边最为关键的核心。最近比较常用的EJB(Enterprise java bean)模型就是一个非常经典的的应用例子,它通过从应用程序实现技术的角度出发来对软件层次做了进一步的细分,从而充分利用现有的技术资源,但它不能作为应用设计模型的框架标准。在实体对象与数据库的交互中还有一个重要的模型即数据模型。是与数据库进行直接交互的模块。我们可以将这个模块单独列出,与数据库的操作只限制在该模块中进行。
    控制(Controller)的功能是接收来自客户端的请求, 将业务处理模型与视图进行相应的匹配,一起完成用户的请求。控制层对数据不做任何的处理。因此,一个模型可能对应有多个视图,一个视图可能也对应多个模型。
    2.2 Mybatis简介MyBatis它是一个代码开放式的框架,它比较好用,而且可以把Java对象持久化于数据库当中,它把很多JDBC的那些复杂性代码抽离出来,然后经过自身内部的封装和改造把原有的代码复杂性简单化了,还提供了一个让人很好使用而且很简单的API借口给我们调用,这样我们就很容易的与数据库方面交互。
    MyBatis 是来自于iBATIS的,iBATIS于2002年由ClintonBegin创建。MyBatis3是iBATIS的全新设计的一种,支持注解和Mapper的一种框架。
    MyBatis流行的主要原因在于它的简单性和易使用性。在Java应用程序中,数据持久化层涉及到的工作有:将从数据库查询到的数据生成所需要的Java对象;将Java对象中的数据通SQL持久化到数据库中。
    MyBatis通过抽象底层的JDBC代码,自动化SQL结果集产生Java对象、Java对象的数据持久化数据库中的过程使得对SQL的使用变得容易。
    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
    2.3 Java简介Java开始被叫做Oak,开始是用于电器相关方面的一种语言,大部分是来处理电器相关的控制问题。但是那个时候这个只能家电的前景并不是十分的理想,因此Sun就摒弃的原来的那个策划。就当在这个策划快要报废的时机,互联网进步的非常快,发展前景非常的好,Sun公司预计到了它在互联网上的十分巨大的利润,因此很快的改造了Oak,也就是现在的Java语言。
    2.4 JSp简介Java服务器页面技术,它不是一种静态的网页,刚好相反,它是动态的。它跟HTML关系非常紧密,相互嵌套,然后用远程服务器里面的JSp引擎来触发和启动,再将生成的整个页面反馈给页面端。
    因此Sun公司的JSP就是一种非常优秀的技术,它写起来给人的感觉还是非常好的,有点简单,而且可以适应很多很多的基本平台,可以非常适应于B/S结构的动态网络页面。它由多种元素构成,例如,静态内容(HTML标签)、指令、表达式、小脚本、声明、标准动作、注释等元素构成。
    在B/S结构里面,浏览器和服务器端进行交互时,有以下几个过程:

    用户在浏览器上输入用户名和密码等信息,然后服务器端接收数据
    浏览器接收用户输入的信息之后,然后把信息传输到服务器上,等待服务端的响应
    服务器接收数据之后,然后进行数据后台处理,最后把处理的结果返回到JSP页面上来

    2.5 开发工具该系统采用Elicpes作为基本开发工具,后台数据库的实现为Oracle,Web服务器为Tomcat。
    第三章 系统分析3.1 系统初步调查该记账管理系统,主要有4个功能模块组成,分别是:用户登录,财务管理,财务统计和系统管理,不同用户登录该系统权限不同,若是普通用户登录,则可以进行一些基本操作,如自身的信息修改,账单查看,账单记录等功能,若是管理员登录,则可以对普通用户和其他管理员进行管理,如基本的删除等功能。这样能更好的管理整个系统,本来各个模块之间错综复杂的关系,一下子让用户看起来更简单化,人性化。
    3.2 系统体系结构设计整个系统分为 用户注册,用户登录,财务管理,财务统计,系统管理等功能模块,如3-1图所示。

    3.2.1 首页登录之后进入首页,你将看到系统的整体界面和基本功能,在你面前展现出来的是该系统的基本信息,如版本号,版权所有,开发者以及开发者的一些基本信息容内等。
    3.2.2 用户信息管理当你登录成功之后,点击用户信息管理,你将看到登录用户的基本信息,如电话,姓名,性别,密码等信息,然后可以直接在上面进行编辑修改自己的信息,修改完成之后,系统将会提示你信息已修改成功,请重新登录的提示,这样以保证用户信息的安全性。
    3.2.3 用户财务管理当你登录成功之后,你才有权限看到该用户的财务信息,当你点击财务管理时,将会展现出两栏小菜单,一个财务信息一个财务记录,财务信息将展现该登录用户的所有账单信息,用户可以很清楚地看到自己以往的财务记录;财务记录是一个添加记账的功能,它能简单的记录该登录用户的财务记录,然后入库,将数据持久化到数据库。
    3.2.4 用户财务统计财务统计是一个统计功能模块,当用户拥有多条财务记录的时候,他点击财务统计该功能,他将可以清楚的看到月收支统计和年收支统计两个菜单栏。月收支和年收支,显而易见,就是统计该用户财务中每个月所有财务记录的一个统计和每年所有财务记录的一个统计,让用户每个月或者每年对自己财务账单有一个清晰的记录。
    3.2.5 系统管理该模块普通用户是看不到的,只有管理员登录才能看的到,管理员登陆之后,他将用户对所有用户的基本管理的功能,如删除用户,通过登录名查询用户等功能,当然还可以对用户添加其他操作功能,这个可以作为一个扩展;然后是管理员对管理员进行管理,也可以进行基本的删除、查看、修改的操作。
    3.2.6 退出用户点击退出可以安全退出该系统,退出之后必须重新登陆。
    3.3 用例图该系统可分为三大模块管理,一个是用户管理,用户分为普通用户和管理员,他们权限不同,所以所拥有的功能和所看到的页面不同;另一个是财务管理,里面包含用户所拥有的财务信息和财务记录等。还有一个就是系统管理,也就是不同用户所用权限不同。具体见下用例图。

    不同的用户他们的登录界面不同,他们所拥有的权限和基本功能也是不一样的,他们的属性也有所区别。

    财务管理是整个系统的核心模块,它的功能如上图描述,可以很好的为用户的财务收支做,有效的记录并且永久的保存到数据库,用户随时可以查看自己的财务记录。

    不同的用户他们的权限也就不一样,管理员能让这个系统更完善,它可以更好的管理所有用户的行为和权限。
    3.4 用例说明3.4.1 用户登录用例说明用户注册,登录功能的用例说明,列出一系列可能出现的错误,导致无法正常完成用户的注册,登录的功能。这些错误是我们事先就已经意料到的可能发生的错误,能在第一时间给以客户回应,使得系统的可操作性更加的真实,可靠,也让用户感觉到系统的人性化。这些也是我们程序员在编写代码时要考虑的基本事项,作为一个好的程序员应该在第一时间想到系统可能出现的情况,把系统错误发生的可能性降到最低。以下是关于用户登入和注册时可能发生的一些异常,如:注册时用户名已经存在,登入时用户名与密码不相匹配,用户不存在等。

    3.4.2 财务管理用例说明
    3.4.3 系统管理用例说明
    第四章 系统设计本章内容包括系统类分析、核心业务设计、数据库设计三个部分,其中系统类分析需要给出系统类图和类的说明,需要注意在给出类图的时候只需要给出核心业务类,对辅助类如界面类、数据库连接类这种类型的不需要给出,如果所涉及的类(包括类当中的内容)较多时,应首先给出类间关系图(图中的类只有名称没有属性和方法),之后在单个类说明中给出具体类的类图,类图同样需要用WORD进行绘制。
    核心业务设计主要描述的是完成某项具体业务时,类之间的消息配合,用时序图进行表述,时序图可以用其他工具绘制,但不能够有其他的颜色出现。
    数据库设计主要描述在系统中需要持久化的对象,需要给出ER图,如果系统所涉及的实体(或实体的属性)较多时同样采用分层绘制的方法,顶层图给出实体间关系,下层图针对每一个实体进行具体绘制。
    4.1 系统类分析经分析,该系统核心业务类见下图:

    4.1.1 User类USER类用于记录系统的用户信息,并完成登陆和注销的操作。

    4.1.2 Admin类Admin类用于管理员信息记录,并且让管理员进行登录等操作。

    4.1.3 Zhang类Zhang类用于用户进行账单记录的时候要用的,对账单进行记录,然后导入数据库中。

    4.1.4 Tong类Tong类用于对zhang类进行统计,从而给用户看到某个时间段的总计。

    4.2 关键业务设计4.2.1 财务管理用户通过记录账单,然后添加账单到该系统,在点击财务信息时将可以显示该用户的所有账单记录。

    4.2.2 财务统计记录这该用户的年统计和月统计的总体数据,能更直观的展示出用户等收支情况。

    4.3 数据库设计4.3.1 概述本系统总共有四个实体类,分别是Admin,User,Zhang,Tong。他们分别对应着四张数据库表admin,t_user,zhang,tong表。
    4.3.2 概念设计普通用户E-R图
    用户实体图主要包含:用户性别,年龄,姓名,登录名,电话等信息,下图展现的很清晰,让人很容易看出其中关系,所以可以很容易设计数据表出来。

    管理员E-R图
    管理员实体图主要包含:只有管理员密码和登录名两个字段,下图展现的很清晰,让人很容易看出其中关系,所以可以很容易设计数据表出来。

    账单E-R图
    账单实体图主要包含:账单名,类型,种类,金额等属性,下图展现的很清晰,让人很容易看出其中关系,所以可以很容易设计数据表出来。

    统计E-R图
    统计实体图主要包含:年份,月份,收入,支出等属性,下图展现的很清晰,让人很容易看出其中关系,所以可以很容易设计数据表出来。

    系统总体总体E-R图

    4.3.3 数据库表系统中使用到数据库基本如表4-3-3所示。
    系统数据库表



    编号
    表名
    描述




    01
    t_user
    用户表


    02
    t_admin
    管理员表


    03
    zhang
    账单表


    04
    tong
    统计表



    数据库中的用户表用来存储各类用户的相关数据,每个用户都要在用户表中有相相应的记录。管理员表用来记录管理员各个信息。账单表记录每个用户的账单信息。统计表用于管理账单的统计。
    用户表
    系统用户表用于登录系统使用,用户表的具体字段如表4-3-3-1所示。



    字段名
    字段描述
    类型/长度
    约束




    Id
    用户编号
    Int
    PK


    name
    用户名称
    Varchar2(20)
    NOT NULL


    password
    用户密码
    Varchar2(20)
    NOT NULL


    sex
    性别
    Varchar2(20)



    age
    年龄
    Varchar2(20)



    tel
    电话
    Varchar2(20)



    rname
    姓名
    Varchar2(20)



    adddate
    注册时间
    Date



    字段用户编号为本表的主键用来标识一个用户,用户帐号和密码是两个非空字段,用户使用用户名和密码作为登录系统的凭证。
    管理员表
    系统管理员表用于登录管理员系统使用,用户表的具体字段如表4-3-3-2所示。



    字段名
    字段描述
    类型/长度
    约束




    Id
    用户编号
    Int
    PK


    name
    用户名称
    Varchar2(20)
    NOT NULL


    password
    用户密码
    Varchar2(20)
    NOT NULL



    账单表
    登录用户用于账单记录的表,账单表的具体字段如表4-3-3-3所示。



    字段名
    字段描述
    类型/长度
    约束




    Id
    用户编号
    Int
    PK


    name
    账单名称
    Varchar2(20)
    NOT NULL


    username
    用户登录名
    Varchar2(20)
    NOT NULL


    rname
    姓名
    Varchar2(20)



    type
    类型
    Varchar2(20)



    kind
    种类
    Varchar2(20)



    time
    时间
    Varchar2(20)









    count
    金额
    double



    yong
    用处
    Varchar2(20)



    info
    备注
    Varchar2(20)



    统计表
    登录用户用于统计账单记录的表,统计表的具体字段如表4-3-3-4所示。



    字段名
    字段描述
    类型/长度
    约束




    Id
    用户编号
    Int
    PK


    username
    用户登录名
    Varchar2(20)
    NOT NULL


    type
    类型
    Varchar2(20)



    kind
    种类
    Varchar2(20)



    time
    时间
    Varchar2(20)



    year
    金额
    Double



    month
    用处
    Varchar2(20)



    shou
    收入
    Double



    zhi
    支出
    Double



    第五章 系统实现本章内容重点是阐述所完成项目的关键界面和关键代码,不需要把所完成项目的所有界面和所有代码都在这里体现,尤其是界面设计代码,对关键代码的描述可以采用流程图或代码的形式,在复制代码时应注意英文的格式,此外因为代码的缩进和论文有所不同,应该按论文的格式要求来处理。最后原则上这部分所出现的模块应该和关键业务分析一致。
    5.1 用户登录5.1.1 功能描述登录是对用户使用系统功能进行身份验证的过程,登录界面要求简明易懂。每一用户都有自己的单独的账号和密码,用户在系统的每一个操作都有日志进行记载,可以有效保证数据可追溯性,做到责任到人,界面如下图。

    5.1.2 实现流程用户通过用户名和密码进行页面登录时,如果用户名或者密码或是验证码为空的时候,前台页面通过调用login JS方法进行判断,并且给出不能为空的提示;当用户填写了正确的用户名和密码、验证码时后台通过调用loginUser()方法通过数据库查询是否有该用户,如果该用户存在,则登录成功,跳转到首页,如果该用户不存或者密码错误、验证码不正确等情况,则产生一个提示框,提示该用户重新输入。
    部分代码如下:
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); String type = req.getParameter("type"); HttpSession session = req.getSession(); try { if(type.equals("用户")){ if(str.equals(randomCode)){ User user = userService.loginUser(username, password); session.setAttribute("currentUser", user); session.setAttribute("currentType", "用户"); req.getRequestDispatcher("index.jsp").forward(req, resp); } else{ req.setAttribute("messageInfo", "验证码错误!请重新输入"); req.getRequestDispatcher("login.jsp").forward(req, resp); } } } catch (Exception e) { req.setAttribute("messageInfo", e.getMessage()); e.printStackTrace(); req.getRequestDispatcher("login.jsp").forward(req, resp); }}@Overridepublic User loginUser(String username, String password) throws UserException { User user2 = userDao.findUserByName(username); if(user2==null){ throw new UserException("用户名不存在,请重新输入!"); }if(!password.equals(user2.getPassword())){ throw new UserException("登录密码错误,请重新输入!"); } return user2;}

    5.2 用户注册5.2.1 功能描述当你还没有注册时是不能登录该系统的,所有当你在登录页面点击注册时系统将跳转到注册页面。

    5.2.2 实现流程新用户通过注册功能在前台页面填写基本信息,然后在前台Jsp页面中接入,然后后台通过req.getParameter方法分别得到前台所传过来的数据,再通过业务逻辑Service层中的addUesr()方法进行接收该对象user,最后Dao层把数据导入到数据库中保存。
    部分代码如下:
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("user.name"); String password = req.getParameter("user.pass"); String rname = req.getParameter("user.rname"); String sex = req.getParameter("user.sex"); String age = req.getParameter("user.age"); String tel = req.getParameter("user.tel"); user = new User(name,sex,age,password,tel,rname,new Date()); HttpSession session = req.getSession(); session.setAttribute("user", user); try{ userService.registerUser(user); req.getRequestDispatcher("zhuceSuccess.jsp").forward(req, resp); }@Overridepublic void registerUser(User user) throws UserException { User user2 = userDao.findUserByName(user.getName()); if(user2!=null){ throw new UserException("用户已存在,请重新输入!"); }else{ userDao.saveUser(user); }}

    5.3 首页用户登录成功之后,将进入该系统首页面,在这里可以看到系统的基本信息,如下图所示;

    5.4 用户信息修改5.4.1 功能描述当用户登录进入系统的时候,要想修改密码的基本信息可以点击用户信息修改这栏,那样可以修改用户自己的信息,如下图所示:

    5.4.2 实现流程用户进行信息修改之后,新数据通过前台Jsp页面传到后台,业务逻辑Service层调用editUser()方法把数据传到Dao层,然后数据持久化。
    部分代码如下:
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String str = req.getParameter("user.id"); long id = Long.parseLong(str); String name = req.getParameter("user.name"); String password = req.getParameter("user.pass"); String rname = req.getParameter("user.rname"); String sex = req.getParameter("user.sex"); String age = req.getParameter("user.age"); String tel = req.getParameter("user.tel"); HttpSession session = req.getSession(); user = new User(id,name,sex,age,password,tel,rname,new Date()); try{ userService.editUser(user); resp.sendRedirect("editUserSuccess.jsp"); }@Overridepublic void editUser(User user) { userDao.updateUser(user);}

    5.5 用户财务记录5.5.1 功能描述该系统的核心内容就是财务这一块,用户可以点击财务记录,然后进行生活或者工作中的一些基本账单记录,如下图所示:

    5.5.2 实现流程前台接收用户传过来的数据,然后传到后台用servlet接收,在调用业务逻辑Service层addZhang方法进行数据接入,最后通过Dao层进行数据持久化。
    部分代码如下:
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { String name = req.getParameter("zhang.name"); String type = req.getParameter("zhang.type"); String kind = req.getParameter("zhang.kind"); String date = req.getParameter("zhang.date"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date time = simpleDateFormat.parse(date); String string = req.getParameter("zhang.count"); double count =Double.parseDouble(string); String yong = req.getParameter("zhang.yong"); String info = req.getParameter("zhang.info"); HttpSession session = req.getSession(); User user = (User) session.getAttribute("currentUser"); String rname = user.getRname(); String username = user.getName(); Zhang zhang = new Zhang(name,username,rname,type,kind,time,count,yong,info); zhangService.addZhang(zhang); List<Zhang> list = zhangService.findZhangByUserName(username); System.out.println(list); req.getSession().setAttribute("zhang_list", list); resp.sendRedirect("zhang/zhang_list.jsp"); @Overridepublic void addZhang(Zhang zhang) throws ZhangException { try{ zhangdao.addZhang(zhang); }catch(Exception e){ throw new ZhangException("添加失败,请重新添加"); }}

    5.6 用户财务信息5.6.1 功能描述用户财务信息是该用户的一些财务记录信息,它能很清楚的展现出该用户所有账单记录,而且还能通过某些条件查询各种记录。如下图所示:

    5.6.2 实现流程该功能的实现是先从数据库账单表中拿到该用户的所有账单记录,然后通过后台把数据传到前台Jsp页面进行渲染之后,呈现给用户查看。
    部分代码如下:
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); User user = (User) session.getAttribute("currentUser"); String name = user.getName(); List<Zhang> list = zhangservice.findZhangByUserName(name); session.setAttribute("zhang_list", list); resp.sendRedirect("zhang/zhang_list.jsp");}@Overridepublic List<Zhang> findZhangByUserName(String username) { return zhangdao.findZhangByUsername(username);}

    5.7 月收支查询5.7.1 功能描述用户记录的每笔账单存入数据库之后,每个月都可以做个汇总,也就是月收入和月支出的一个总结,这样能让用户对自己的收支心里有个底。如下图所示:

    5.7.2 实现流程这个功能我借用了一个插件FusionCharts,它是一个强大的展现图案的一个插件,能把一些数据更直观的通过图形展现出来,然而我只需要通过后台把它所需要的数据传入到他的模型之中。
    部分代码如下:
    <script type="text/javascript"> var myChart = new FusionCharts("<%=path%>/FusionCharts/Charts/Pie3D.swf", "myChartId","600", "400"); var strXML = "<chart caption='收入一览'>${data}</chart>"; myChart.setDataXML(strXML); myChart.render("chartdiv1"); $(document).ready(function(){ var $messageInfo = $("#messageInfo").val(); if($messageInfo != null && $messageInfo != ""){ $.messager.show({ title:'提示', msg:$messageInfo, timeout:2000, showType:'slide' }); $("#messageInfo").val(""); } });</script>Tong tong1 = tongService.findTongByMonth(month,username); if(tong1==null){ Tong tong = new Tong(username,"入账","公费",new Date(),year,month,num1,num2); tongService.saveTong(tong); String info="<set name='出账' value='"+tong.getZhi()+"' /><set name='入账' value='"+tong.getShou()+"' />"; req.setAttribute("data", info); req.getRequestDispatcher("zhang/zhang_ylist.jsp").forward(req, resp);}else{ long id =tong1.getId(); Tong tong = new Tong(id,username,"入账","公费",new Date(),year,month,num1,num2); tongService.updateTong(tong); String info="<set name='出账' value='"+tong.getZhi()+"' /><set name='入账' value='"+tong.getShou()+"' />"; req.setAttribute("data", info); req.getRequestDispatcher("zhang/zhang_ylist.jsp").forward(req, resp);

    5.8 年收支查询5.8.1 功能描述当用户点击年收支的时候,页面将展现出该用户所选的年度的年收入和年支出的详细情况,如下图所示:

    5.8.2 实现流程通过插件FusionCharts把需要的数据从后台传入到前台脚本中,然后渲染到页面上。
    部分代码如下:
    <script type="text/javascript"> var myChart = new FusionCharts("<%=path%>/FusionCharts/Charts/MSColumn3D.swf", "MSColumn3D", "600", "400"); var chartXMLData = "<chart caption=\"年收支情况\" XAxisName=\"\" palette=\"2\" animation=\"1\" formatNumberScale=\"0\" numberPrefix=\"\" showValues=\"0\" numDivLines=\"4\" legendPosition=\"BOTTOM\">${data}\"<styles><definition><style type=\"font\" name=\"CaptionFont\" color=\"666666\" size=\"15\" /><style type=\"font\" name=\"SubCaptionFont\" bold=\"0\" /></definition><application><apply toObject=\"caption\" styles=\"CaptionFont\" /><apply toObject=\"SubCaption\" styles=\"SubCaptionFont\" /></application></styles></chart>"; myChart.setDataXML(chartXMLData); myChart.render("chartdiv1"); $(document).ready(function() { var $messageInfo = $("#messageInfo").val(); if ($messageInfo != null && $messageInfo != "") { $.messager.show( { title : '提示', msg : $messageInfo, timeout : 2000, showType : 'slide' }); $("#messageInfo").val(""); } });</script>@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { List<Tong> li = new ArrayList<Tong>(); User user = (User) req.getSession().getAttribute("currentUser"); List<Tong> list = tongService.findTong(user.getName()); String year = req.getParameter("qyear"); if(list!=null&&list.size()>0){ String category=""; String setchu=""; String setru=""; for(Tong t:list){ String year1 = t.getYear(); if(year1.equals(year)){ category=category+"<category label='"+t.getMonth()+"月' />"; setchu=setchu+"<set value='"+t.getZhi()+"' />"; setru=setru+"<set value='"+t.getShou()+"' />"; } } String xmls= "<categories>"+category+"</categories>" + "<dataset seriesName='出账'>"+setchu+"</dataset>" + "<dataset seriesName='入账'>"+setru+"</dataset>"; req.setAttribute("data", xmls); req.getRequestDispatcher("zhang/zhang_nlist.jsp").forward(req, resp); } else{ req.setAttribute("messageInfo", year+"年没有数据!"); req.setAttribute("data", ""); req.getRequestDispatcher("zhang/zhang_nlist.jsp").forward(req, resp); }}

    5.9 管理员信息管理登录的管理员能管理其他管理员的信息,如删除、查看、修改等基本功能。如下图所示:

    5.10 用户信息管理5.10.1 功能描述登录的管理员能管理其他用户的信息,如删除、查看等基本功能。如下图所示:

    5.10.2 实现流程管理员通过后台管理该系统的各个用户,可以对用户进行删除,它是通过用户的一个主键id删除该用户的,由于id唯一性,所以它是不可重复的。
    部分代码如下:
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String str = req.getParameter("id"); long id = Long.parseLong(str); User user = userService.findUserById(id); userService.deleteUser(id); String username = user.getName(); zhangService.deleteZhangByUsername(username); List<User> list = userService.findAllUser(); req.getSession().setAttribute("user_list", list); resp.sendRedirect("user/user_list.jsp");}@Overridepublic void deleteUser(long id) { userDao.delUser(id);}

    第六章 系统测试本章重点说明测试目标和测试计划,对测试目标给出测试用例,并分析测试结果是否达到系统预期,如未达到提出改进的措施。测试目标根据测试范围的不同有整体目标和分项目标,整体目标主要是测试系统是否达到预期的功能以及相关的性能指标,如吞吐率等等,分项目标则针对于具体模块,指标包括功能是否实现,边界条件是否实现等等,测试用例应根据测试目标来进行设计,原则上关键业务模块必须包含。
    6.1 系统测试综述测试方案是测试阶段的关键技术问题。为了提高测试效率降低测试成本。
    6.2 系统用例说明主要测试的是用户的各种操作是否能够正常的进行,让我们找出系统的不足之处,以尽快的改进这些不足,让系统变得更加的完善。
    6.2.1 用户登录模块
    6.2.2 账单统计模块
    6.3 测试分析该系统经多次测试,能在Windows7\WindowsXP\2000 server等操作系统,调试环境上正常运行。数据调用正常,基本上实现了预期的功能,目前试运行良好。
    结果分析:虽然系统基本正常,但由于一些自身技术和硬件设备环境所限,该系统仍存在一些不足之处,有待进一步改进和完善,具体说来有:

    未能进行连网测试
    未能实现对数据的自动生成图表进行分析的功能
    程序中错误处理和输入控制不够全面,可能导致输入无效引发错误,也可能使得页面出现乱码等现象

    参考文献[1] 陈广宇.管理信息系统[M].北京:清华大学出版社,2010:95-100
    [2] 张墨华,张永强.Java程序设计[M].北京:清华大学出版社, 2010:123-124
    [3] 张 阳.基于ASP.NET的酒店管理系统的设计与实现[D].吉林:吉林大学,2014:233-2
    [4] 孙卫琴,李洪成.《Tomcat 与 JSP Web 开发技术详解》.电子工业出版社,2003年6月:1~205.
    [5] 计磊,李里,周伟.J2EE整合应用案例[M].北京:人民邮电出版社,2007.
    [6] 王珊,陈红.数据库系统原理教程[M].北京:清华大学出版社,2004-6.
    [7] 武延军,黄飞跃.精通JSP编程技术[J] .北京:人民邮电出版.
    [8] 王琳.Java多线程机制及其应用[J]. 武汉理工大学学报(信息与管理工程).
    [9] 柳永坡,刘雪梅,赵长海.JSP应用开发技术[M].北京:人民邮电出版, 2005.
    [10] 贺松平.基于MVC模式的B/S架构的研究及应用[D].武汉:华中科技大学.
    [11] 张海藩.软件工程导论.北京:清华大学出版社.2008,02.
    [12] 田淑梅.软件工程——理论与实践 清华大学出版社.
    [13] 耿祥义.《Java2实用教程(第三版)》.清华大学出版社,2006(8).
    [14] 王永红.使用JavaScript增强网页的功能[J] .安徽建筑,2001,(2):27-34.
    [15] 舒红平.Web 数据库编程-Java[M].西安电子科技大学出版社,2005:97-143.
    2 评论 12 下载 2020-07-25 22:03:23 下载需要14点积分
  • 基于Android Studio实现的在线学习课堂APP

    1 项目介绍1.1 背景本软件的开发意图是想让更多想学习外语,却没有好的方法,不知道如何学习,怎么学习,本软件可以为那些想学习的外语的用户,提供各种资源文件,因为现在是互联网的时代普通的纸质书籍不仅厚重不方便携带,而且版本更新不方便,而我们通过网络这个便捷的平台,使原本厚重的书籍统统的存放在云端,用户可以随时随地的利用自己的空闲时间来学习,真正的做到利用碎片化的时间,真正地做到随时随地想学就学的目的,用户可以使用本软件背单词,练习听力,写作,阅读理解,模拟考试等等功能,为了增加用户学习的动力我们通过设置打卡来督促用户学习的动力,通过设置小组来一起学习创造学习的动力,保证用户能长期的活跃在我们的平台,达到留住用户的目的,我们的软件的服务人群主要是针对在校大学生这个庞大的群体,以白领等想学习外语的人作为我们的次要服务人群来扩展我们的用户群体。
    1.2 开发环境
    操作系统:Windows
    数据库管理系统:MySQL
    其他支撑软件:Android Studio、tomcat、MySQL、sublime Text、eclipse

    2 软件概述2.1 软件范围定义本软件是希望为那些想学习外语的用户提供一套完善的学习理念,包括学习计划,学习周期,学习小组,模拟考试等等,来做到随时随地,想学就学的目的,服务目标人群主要是在校大学生为主,以白领等为辅,在盈利方面,通过广告的投放,以及在线课程的售卖,来获取利益,本软件同时具备web端和PC端两部分,用户可以采取对自己知识点通过分门别类的方式进行具体内容的记录;可以分享自己积累的知识;可以搜集其他人分享的知识充实自己的知识库,用这种新颖的方式来引起大家对知识的渴望,从而在很快的时间内就会积累很多的用户量,保证平台的运营正常,能够长期的存活下去。
    2.2 系统特性概述


    系统特性名称
    系统特性描述
    优先级




    首页展示
    展示软件的主题功能



    知识点管理
    能满足用户学习的使用基本需求



    数据备份
    保证用户数据不丢失



    资源缓存
    保证用户使用体验,能做到边下载边播放



    登录注册
    用户登陆注册



    学习讨论组
    多个用户同时在线一起讨论学习




    2.3 假定和依赖列举出在对本文档中确定的需求进行描述的时候的假设条件。包括预计使用的商业组件、行业法规、开发或运行环境的问题。
    描述软件系统对外部因素存在的依赖。例如,若打算把其他项目开发的组件集成到系统中,那么就要依赖另一个项目按时提供正确的组件。
    3 外部接口需求简要说明该软件同其他软件之间的公共接口、数据通信协议等,如果外部接口仅与某子功能有关,该接口说明需单独陈述。可以使用关联图描述高层抽象的接口信息,也可根据需要将对接口数据和控制组件的详细描述写入数据字典中。
    3.1 用户界面
    主页:包括轮播图(广告推广),听力训练,阅读理解
    学习:包括打卡,每日目标,专项练习
    我的:头像,用户名,设置,关于我的一些设置
    模拟考试:提供模拟试题进行测试
    教师:补充题库 创建试卷

    3.2 软件接口描述软件系统与其他外部组件(须注明名称和版本)的连接,包括数据库、操作系统、工具软件、库和集成的商业组件。
    明确在软件组件之间交换数据的目的,描述所需要的服务以及内部组件通信的性质。确定将在组件间共享的数据。
    4 需求规格列出待开发软件系统中所有系统特性及每个特性中所包含的功能集。如果系统特性的功能集和细化的子功能比较繁多,可以将每个系统特性分别编写“软件需求规格说明”,在本处列出文档编号和分册名称。
    在本文档中,功能需求的描述是根据系统特性即软件所提供的服务来组织的。根据项目的实际需要,也可以通过使用实例、运行模式、用户类、对象类或需求优先级的描述方法对这部分内容加以辅助说明。
    在描述时尽量使用简短明了的语句定义系统特性和功能的名称。例如:“拼写检查和拼写字典管理”。
    为满足确定的软件需求的可跟踪性和可维护性,需唯一确定每个系统特性及相应的功能,尤其对于需求复杂度较高、项目规模较大的项目,唯一性标识尤为必要。对需求的标识可以采用序列号(UR-2;SRS-31B)、层次编码(4.1.3.2)或自定义其他的方法。在下面的系统特性和相应功能集的描述中贯彻并在项目组内达成一致。
    4.1 系统特性1(编号/名称)这部分要求对每个系统特性以及包含的功能集分别进行描述。
    4.1.1 系统特性说明总体用例图

    4.2 系统特性2(编号/名称)4.2.1登陆注册子系统:用于用户的登陆以及注册基本功能


    功能编号
    功能名称
    功能描述




    Ud001
    登陆
    用户和教师登陆


    Ud002
    注册
    用户和教师注册



    4.2.2 学生考试子系统


    功能编号
    功能名称
    功能描述




    Ud003
    List exam
    学生选择显示试卷列表


    Ud004
    Delete a exam
    删除一个自己的试卷


    Ud005
    get results
    查看试卷成绩



    4.2.3 教师管理子系统


    功能编号
    功能名称
    功能描述




    Ud006
    Create a exam
    创建一套试卷


    Ud007
    Delete a exam
    教师可以删除试卷


    Ud008
    Add a score to a volume
    往指定试卷添加一个普通选择题目


    Ud009
    Add a score to a volume
    往指定试卷添加一个听力题


    Ud010
    Show all choose
    显示所有普通选择题


    Ud011
    Show all question
    显示所有听力题



    5 其他非功能需求5.1 一般性性能需求详细描述不同应用领域对软件性能的需求,解释它们的原理以帮助设计人员做出合理的设计选择。确定相互合作的用户数或者所支持的操作、响应时间以及与实时系统的时间关系。定义容量需求,例如存储器和磁盘空间的需求或者存储在数据库中表的最大行数等。
    本软件需要具有强大的健壮性,因为健壮性是一款软件能正常运行的基本,在软件的最开始的设计阶段要保证边开发边测试的原则进行开发,在整体的设计阶段不允许出现业务错误,在软件发生意外的故障时,需要保证软件能及时的处理,保证用户数据不能丢失,要需要定时备份用户的数据并保存在另一台服务器上做数据备份,以免发生未知的意外错误导致系统奔溃。在最终开发完成后,要保证在移动端APK文件的大小要控制适当,尽量控制在60M左右,方便用户的安装,保证用户使用方便简单名了,在web端要能够运行在windows系统上。
    5.2 一般性安全性需求用户信息的安全性:通过MD5信息加密技术,使用户上传的信息做到不泄露不被盗取。
    5.3 用户文档需求系统开发文档,使用视频等。
    6 附件6.1 墨刀界面原型










    6.2 WEB原型





    9 评论 157 下载 2018-11-06 15:59:45 下载需要12点积分
  • JAVA实现的基于PCAP库的网络监视器

    摘 要Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。本网络监视器就是模拟Wireshark的设计思想,是一个简单的网络监视分析软件。
    利用pcap这个抓包库给抓包系统提供了一个高层次的接口。所有网络上的数据包,甚至是那些发送给其他主机的,通过这种机制,都是可以捕获的。当利用pcap获取到包后,再将这个包依据不同的协议进行拆分,封装的方法详细程度超过了pcap库本身的方法。
    通过该网络监视器的实现,能够清晰地看到数据包里面的内容。实现触发功能,让网络监视器在发生某种或某些情况时开始或停止捕获信息。实现数据捕获筛选功能。包括:通过协议筛选、通过地址筛选、通过数据模式筛选。实现捕获数据显示功能。由用户选定显示内容,以清晰易懂的方式显示数据。分析数据功能。将捕获到的数据帧进行拆分分析。最后设计了美观易用的图形界面。
    关键字:网络监视 捕捉数据包 数据帧拆分 筛选
    1 引言抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。本实验实现了抓包过程中的截获阶段,并将数据包进行分析。在数据包的分析过程中,有助于开发者更加理解网络协议,在真正意义上实现了协议的拆分试验。目的也是让软件使用者能清晰网络捕捉包中的包数据分析以及结构。
    2 总体设计2.1 功能分析
    实现触发功能,让网络监视器在发生某种或某些情况时开始或停止捕获信息
    实现数据捕获筛选功能。通过协议筛选、通过地址筛选、通过数据模式筛选
    实现捕获数据显示功能。由用户选定显示内容,以清晰易懂的方式显示数据
    分析数据功能。将捕获到的数据帧进行拆分分析
    设计美观易用的图形界面。

    2.2 技术分析主要使用JAVA进行后台开发,利用pcap库获取捕捉到的数据包,然后逐一拆分成不同协议的数据。前端利用HTML展示,其中利用了vue.js实现前端数据绑定。
    2.3 使用方法在源码包中找到startCap.jar,点击启动。然后找到monitor中的index.html就可以进行操作。
    3 详细设计3.1 程序设计流程
    3.2 功能模块
    3.3 功能测试初始界面

    点击开始按钮捕捉包

    停止

    获取数据包详细数据分析

    筛选协议为IP,mac地址为48-a1-95-97-65-26的包

    4 总结4.1 工作小结此次网络监视器设计让我对网络协议有了更加清晰明了的了解,在实际上明白了一个数据包如何封装如何解析,让五层网络结构不再是纸上谈兵。“纸上得来终觉浅,绝知此事要躬行”是我这次实验的最大收获,在错误分析,bug修复中使自己的编程能力有了总体提高,在项目结构上有了清晰明了的了解。
    4.2 存在的问题此网络监视器虽然让我受益良多,但任然存在一些问题。最大的问题是,该项目采用web软件的形式,但是前后端分离不够清晰,虽然整体上采用了MVC结构,但是目前比较优秀的网站设计,应该是前后端完全分离。前端模块化,采用MV*架构,后端采用MVC架构,前后端之间的沟通可以采用遵守RESTFUL规范的API接口进行数据传输。
    4.3 改进的方法改进的方法应该是重构整个架构,细节无需改变,将前后端项目分开开发,解决跨域问题。要实现前端模块化,前端可以采用MV*架构,后端采用MVC架构,前后端之间的沟通可以采用遵守RESTFUL规范的API接口进行数据传输。
    2 评论 47 下载 2018-10-31 09:14:43 下载需要14点积分
  • 基于Libpcap实现的局域网嗅探抓包发包解析工具

    第一章 需求分析1.1 设计目的1.1.1 基本要求完成一个基于Libpcap的网络数据包解析软件,具有易用、美观的界面。
    1.1.2 具体要求
    能够解析本地或局域网的数据包,例如TCP包,UDP包,工CMP包等,能分析报头以及数据包内容
    能分析数据包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源’p地址和目的工p地址等内容。并将上述解析结果规范显示
    能解析每个数据包的内容(如果为加密信息不能解析则备注不能解析)
    能在制定时间段内解析数据包,当程序解析停止时,能分类统计在这段时间内解析的各类数据包的数量
    能够图形化显示数据包统计结果

    1.2 功能要求1.2.1 功能概况本次设计参考计算机网络基础知识,设计实现一个能够对本地局域网数据包进行捕获和分析的程序,并利用此程序实现网络监控和其他实用性功能。
    1.2.2 获取数据包功能利用Libcap,扫描设备网卡,选取不同网卡类型(WiFi/以太)进行对局域网数据包的监听和捕获,设计两种模式:混杂模式和非混杂模式,简单来说就是是否要过滤掉不是发送给自己的数据包,如果设置为混杂模式,则会收到整个局域网内的所有数据包并进行分析。
    1.2.3 分析数据包功能程序能够对捕获的数据包进行分类整理,并提取数据包中内容进行分析,包括数据包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源’P地址和目的’P地址等内容,并将上述解析结果规范显示。对于HTTP., ARP等报文,可以对其内容进行解析。
    1.2.4 图形化显示功能利用表格组件,将获取到的数据包信息以表格形式直观地显示出来,并且加以交换牛可以查看深层内容。
    1.2.5 数据包统计分析功能可以对一段时间获取的数据包进行统计整理,并根据数据包类型进行分类,如:数据包版本类型(IPv4/IPv6)、数据包协议类型(TCP/UDP/ARP等),并以饼图直观显示;对于TCP、UDP、ICMP数据包,用直方图统计其最大、最小、平均生存期和数据包大小,可以直观显示。
    1.2.6 数据包清空功能可以清空之前获取的所有数据包。
    1.2.7 Ping功能调用终端相应,实现Ping操作,可以用来测试与目标主机的连通性。
    1.2.8 TraceRoute功能调用终端相应,实现traceroute操作,通过traceroute我们可以知道信息从本计算机到互联网另一端的主机是走的什么路径。
    1.2.9 ARP-Attack功能本程序可实现局域网内ARP攻击,经测试可以对指定’P地址的主机实现断网攻击,基本原理同上,是欺骗目标机器局域网网关地址,使得该机器ARP缓存表中记录的网关IP -MAC对应错误,从而无法把数据包发送给真正的网关,导致网络连接失败,如果将欺骗的MAC地址设置为自己的MAC地址,则会截获目标机器发送的数据包。
    第二章 概要设计2.1 系统分析2.1.1 架构设计本系统采用架构如图2.1所示,主要分为三个模块:用户操作界面、数据处理模块和网卡驱动模块。其中,网卡驱动模块是最底层模块,主要实现从硬件网卡中获取所有的数据包,利用Unix系统下的Libcap工具,采用jni动态链接库调用网络层之下的底层功能,集成jpcap用来实现对数据包的分析处理;数据处理模块主要用于对网卡驱动模块获得的数据包进行分类处理,根据数据包版本和协议不同用不同方式拆解分析数据包,并将所得到的结果整理分析,同时可以实现对数据包的重构和发送操作;用户操作界面为最顶层功能,便于以可视化的图形界面直接显示抓取数据包的内容,以及可视化其他操作所得到的结果,便于使用者更好的操作和使用。

    2.1.2 实体设计2.1.2.1 登陆实体作为程序的进入窗口,用户登陆时,系统会要求用户输入账号和密码,并在数据库中进行匹配分析,若用户名存在且密码正确则通过身份认证,允许使用本软件。
    2.1.2.2 主界面实体登录成功后的功能选择界面,包含数据包抓取、Ping.. TraceRoute.. APR-Attack 四个功能,其中,对于数据包抓取还细分为抓取数据包和分析数据包功能。
    2.1.2.3 数据包抓取实体从主界面中选择进入,负责调用Libpcap抓取被监听网卡的数据包,可选择是否设置为混杂模式(是否过滤),并可以分类解析所有数据包中的内容,并以图形化界面显示。抓取结束后还可以对抓取到的数据包做统计整理,并将结果用图形化界面显示。
    2.1.2.4 Ping功能实体从主界面中选择进入,输入要测试的网站和测试的次数,可以得到访问该网站的往返RTT,在程序运行结束后可以汇总最大、最小、中值RTT,并可以用折线图将所有RTT统计显示。
    2.1.2.5 TraceRoute功能实体从主界面中选择进入,输入要追踪的网站和测试的次数,可以得到访问该网站的路径(’P地址),如果中途站点拒绝相应会显示“*“,在程序运行结束后可以汇总所经过的站点’P地址。
    2.1.2.6 ARP-Attack功能实体从主界面中选择进入,系统首先自动获取网管IP-MAC地址作为最低地址,同时得到广播地址以表示最高地址,并将该局域网内已连接设备的IP-MAC映射表先是在表格中。用户选择网卡类型后,在表格中选择相应的’P地址便可以对该设备实现APR攻击,使该设备无法连接到互联网。

    2.1.3 分层设计2.1.3.1 Jpcap驱动层(数据层)通过Java扩展jar-Jpcap调取Libpcap基本功能,以及jni包,对设备的底层网卡进行监听,将经过网卡的数据包捕获下来,可以应对不同网卡类型,如wifi、以太、网桥等,同时支持设置混杂模式以监控局域网内的所有数据包。
    2.1.3.2 数据处理层(功能层)主要是对接收到的数据包进行分类处理,将数据包分为IP数据包和ARP数据包,再对IP数据包协议进行解析从而分出TCP、UDP、ICMP、IGMP等数据包,同时对不用版本(IPv4、IPv6)的数据包也做区分,将分类结果。
    2.1.3.3 用户界面层(表示层)接受来自数据处理层的处理结果:对于异常,采用消息框提示的方式展示给用户;对于抓取的数据包分析结果,以表格的形式显示在界面上,用户可以点击表格中某一项查看详细信息;对于数据包的统计结果,自动绘制图表显示给用户;其他提示信息同样采用消息框给用户反馈。同时用户可以直接在界面上选择相应功能,底层会自动实现相应操作并反馈给用户界面层。同样,Ping、 TraceRoute、APR-Attack功能也有相应的图形化界面。

    2.1.4 数据库设计本程序中数据库仅做身份认证功能,不需要将统计到的数据包保存在数据库中,一方面是不需要检索和查询等操作,另一方面是数据库的使用并不会带来效率的提升,因此数据库仅仅保存用户名和密码,在登陆时对数据库进行匹配判断是否允许登陆。

    2.2 程序流程2.2.1 程序结构图
    2.2.2 调用关系运行程序后,首先进入用户登陆界面,用户名与密码不匹配则登陆失败,成功则进入用户操作主界面。
    在用户操作主界面中有四个按钮供用户选择,分别是:Packing、Ping、TraceRoute、Hack,分别对应网络数据包抓取分析功能、Ping功能、TraceRoute 功能、ARP攻击功能,点击不同按钮跳转至不同功能实现界面。
    网络数据包抓取分析功能分为数据包抓取、数据包分析和数据包重置功能:数据包抓取模块可以选取计算机指定网卡进行数据包的抓取操作,自动调用数据处理层的方法对数据包进行分类解析,并将解析结果显示在表格上,若用户想查看详细信息,可以点击表格中具体的某一项进行查看;数据包分析功能可以对本段时间抓取的所有数据包进行整理分析,并使用JFreeChart将所有数据可视化显示,直观的表现网络中流量的状态;数据包重置可以将本段时间抓取的数据包清空,便于下一次分析统计。
    Ping操作调用Unix终端的ping指令,用于测试一个站点的往返延迟(RTT), 本程序以图形化界面实现网络命令ping操作,并允许指定ping操作的执行次数,最终可以在程序运行后显示最大最小与均值RTT,点击绘图按钮可以以折线图统计本段时间所有的往返延迟。
    TraceRoute操作调用Unix终端的trace指令,用于追踪访问一个站点所经过的路由器(IP地址),本程序以图形化界面实现网络命令trace操作,并允许指定trace操作的测试包数目,最终可以在程序运行后显示所经过的全部站点。
    ARP攻击操作可以实现ARP模拟攻击,可以搜索本机局域网内的所有设备ip 地址,利用ARP诈骗原理实现对靶机的断网攻击,核心内容是使靶机无法找到网关IP地址所对应的MAC地址,从而使所有数据包无法发出局域网。
    第三章 详细设计3.1 功能类定义与实现3.1.1 常量与参数的定义(Parameter类)JDBC数据库连接所用参数与端口JDBC (Java Data Base Connectivity, java数据库连接)是一种用于执行SQL 语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯Java API编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制。
    本系统采用的是MySQL数据库,编程语言为Java语言,编译器为Eclipse Oxygen, Java连接数据库时需要用到JDBC驱动器、数据库URL以及数据库管理员账号密码等。
    根据数据库的URL、用户名和密码,创建一个JDBC Connection对象。如:
    Connection connection=DriverManager.geiConnection(“连接数据库的URL"," 用户名“,“密码”)
    其中,URL=协议名++I[P地址(域名)+端口+数据库名称;用户名和密码是指登录数据库时所使用的用户名和密码。示例创建MySQL的数据库连接代码如下:
    Connection connectMySQL=DriverManager.geiConnection("jdbc:rnysql://localhost:3306/rnyuser", "root" ,"root");
    对应代码如下:
    public static final String JDBC_DRIVER="com.mysql.jdbc.Driver"; public static final String DB_RL="jdbc:rnysql://localhost:3306/java?useSSL=true&characterEncoding=UTF8";public static final static final String ACC = "root";pub1ic static final static final String PWD = "zxczxc";
    统计部分参数定义由于在统计部分需要用到已经捕获到的数据包的一些数据,例如:不同版本数据包的数量、不同协议数据包的数量、某协议数据包最大最小与均值生存期及数据包长度等,单独建立一个类用来统计所有的信息:
    package Uti1;public class Statistic{//不同协议总数public static int IPv4=0; public static int IPv6=0; public static int OtherVersion=0;//不同类型数据包总数public static int TCP=0; public static int UDP=0; public static int ICMP=0; public static int IGMP=0; public static int ARP=0; public static int Others=0;//数据包长度最大值、最小值、平均值 public static int TCP_maxLen=0; public static int UDP_maxLen=0; public static int ICMP_maxLen=0;(其他变量定义不再举例)
    3.1.2 IP/ARP数据包显示信息的定义IP数据包TCP/IP协议定义了一个在因特网上传输的包,称为ip数据包,而ip数据报(ip Datagram)是个比较抽象的内容,是对数据包的结构进行分析。由首部和数据两部分组成,其格式如图所示。首部的前一部分是固定长度,共20字节,是所有ip数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是ip协议地址。
    ip数据包解析后的内容包括:版本、协议、数据包标识、生存时间、头长度、数据包总长度、优先权、服务类型、区分服务(最大吞吐量和最高的可靠性)、是否分段、分段偏移量、源’p地址与目的’p地址、源MAC地址与目的MAC地址、校验和;
    针对UDP、 TCP数据包,还设定了源端口号和目的端口号;
    针对ICMP数据包(v4/v6)还设定了ICMP报文代码和报文类型;
    除此之外可以详细显示DNS、 HTTP等数据包的包内容。
    ARP数据包在网络通讯时,源主机的应用程序知道目的主机的ip地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。源主机发出ARP请求,询问ip地址是192.168. 0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF: FF: FF: FF: FF: FF表示广播),目的主机接收到广播的ARP请求,发现其中的ip地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。这就是ARP数据包。
    ARP数据包解析后的内容包括:版本、协议、头长度、数据包总长度、硬件类型、协议类型、硬件地址长度、协议地址长度、操作字段、源’p地址与目的’p地址、源 MAC地址与目的MAC地址;
    除此之外可以详细显示ARP数据包的包内容。
    3.1.3 捕获数据包的实现(HandleJpcap包)使用Jpcap捕获数据包并分类处理Java的java. net包中,给出了传输层协议TCP和UDP有关的API,用户只能操作传输层数据,要想直接操作网络层,比如自己写传输层数据报(自己写传输层包头), 或者自己写好ip数据包向网络中发则是无能为力的。而Jpcap扩展包弥补了这一点,使我们可以支持从网卡中接收ip数据包,或者向网卡中发送ip数据包。
    Jpcap实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP 调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。
    下载libcap (Linux上的Wincap),使用jni连接C语言调用底层网卡功能,再建立Java动态链接库,实现jpcap. jar的生成。
    使用jpcap后,编写程序按要求完整数据包的抓取,可以获得不同类型数据包,并根据数据包类型对不同数据包进行解析,可以在表格上显示不同数据包的类型、数据包标识、版本、源IP地址、目的IP地址以及数据包长度。对表格每一项可以选择查看其具体信息,对不同数据包有不同的描述,IP包为一大类,ARP包为另一类。
    Jpcap包中主要是用到的方法如下:

    JpcapHandler:这个接口用来定义分析被捕获数据包的方法
    ARPPacket:这个类描述了ARP/RARP包,继承了Packet类
    DatalinkPacket:这个抽象类描述了数据链路层
    EthernetPacket:这个类描述了以太帧包,继承DatalinkPacket类
    ICMPPacket:这个类描述了ICMP包,继承了IPPacket类
    IPAddress:这个类描述了IPv4和工Pv6地址,其中也包含了将IP地址转换为域名的方法
    IPPacket:这个类描述了IP包,继承了Packet类,支持IPv4和IPv6
    Jpcap:用来捕获数据包
    JpcapSender:它用来发送一个数据包
    Packet:这个类是所有被捕获的数据包的基类
    TCPPacket:这个类描述TCP包,继承了IPPacket类
    UDPPacket:这个类描述了UDP包,继承了IPPacket类

    抓取数据包过程如下:
    首先,获得所有网卡列表
    NetworkInterface[]devices=JpcapCaptor.getDeviceList();
    通过网卡,打开一个捕捉器
    openDevice(NetworkInterface intrface, int snaplen, boolean promics, int to_ms);JpcapCaptor captor=JpcapCaptor.openDevice (device[index], 65535, false, 20)
    通过捕捉器捕获数据:
    本程序采用主动获取的方法。通过捕获器的getPacket ()可以主动的,一个数据包一个数据包的获取。主动获取,可以每次需要处理数据包的时候,自己去主动获取。然后写出处理逻辑。但是因为不知道何时去产生数据包,而一直去调用 getPacket(),因此需要开辟多线程,让用户自行终止数据包的捕获。
    数据包分类:
    利用packet instanceof XXPacket对捕获到的数据包进行分类,并对不同类型的数据包进行分类拆解。
    Jpcap还可以完成以下功能:

    Jpcap是直接抓取经过数据链路层的数据包。因此可以自己写’p数据包直接发送给数据链路层
    Jpcap会对抓取到的数据包进行一定程序的解析,根据数据包内容,将数据包封装为对应的对象
    根据用户设定的信息,过滤数据包(其实就是在解析的时候,对不需要的数据直接丢弃,不解析)
    Jpcap只是直接从数据链路层上读取数据,并向数据链路层中发送数据,因此,Jpcap并不能操作其他程序从数据链路层中读数据或者向网卡中发送数据

    数据包存储数据结构的定义(Packet类与AllPackets类)为方便整理统计各类数据包,我们需要采用一种数据结构用来存放前一段时间捕获到的所有数据包以便统计,为此单独设置一个Packet类用来描述单个数据包(ARP/IP数据包通用),对所有的数据包,创建一个集合ArrayLi st用来保存所有的Packet, 放入AllPackets类中,可以对这个集合增添数据包,在某些时刻可以清除已有的数据包。
    3.1.4 Ping操作实现部分(HandlePing包)3.1.4 Ping功能作用Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”、不能打开网页时会说“你先ping 网关地址192.168.1.1试试”。它通过发送ICMP ECHO_REQUEST数据包到网络主机,并显示响应情况,这样我们就可以根据它输出的信息来确定目标主机是否可访问(但这不是绝对的)。有些服务器为了防止通过 ping探测到,通过防火墙设置了禁止ping 或者在内核参数中禁止ping,这样就不能通过ping确定该主机是否还处于开启状态。
    linux下的ping和windows下的ping稍有区别,linux下ping不会自动终止,需要按 ctrl+c终止或者用参数一C指定要求完成的回应次数。
    命令格式
    ping [参数] [主机名或IP地址]
    命令功能
    ping命令用于:确定网络和各外部主机的状态;跟踪和隔离硬件和软件问题;测试、评估和管理网络。如果主机正在运行并连在网上,它就对回送信号进行响应。每个回送信号请求包含一个网际协议(IP))和ICMP头,后面紧跟一个tim结构,以及来填写这个信息包的足够的字节。缺省情况是连续发送回送信号请求直到接收到中断信号(Ctrl-C)。
    ping命令每秒发送一个数据报并且为每个接收到的响应打印一行输出。ping命令计算信号往返时间和(信息)包丢失情况的统计信息,并且在完成之后显示一个简要总结。ping命令在程序超时或当接收到SIGINT信号时结束。Host参数或者是一个有效的主机名或者是因特网地址。
    命令参数

    -d:使用Socket的SO_DEBUG功能
    -f:极限检测。大量且快速地送网络封包给一台机器,看它的回应
    -n:只输出数值
    -q:不显示任何传送封包的信息,只显示最后的结果
    -r:忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题
    -R:记录路由过程
    -v:详细显示指令的执行过程
    <p>-c:数目,在发送指定数目的包后停止
    -i:秒数,设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次
    -I:网络界面,使用指定的网络界面送出数据包
    -l:前置载入,设置在送出要求信息之前,先行发出的数据包
    -p:范本样式,设置填满数据包的范本样式
    -s:字节数,指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是 64ICMP数据字节
    -t:存活数值,设置存活数值TTL的大小

    Java调用Unix终端实现Ping操作
    本扩展功能使用Java调用终端Ping指令,在表格上显示Ping的相关信息,并绘制Ping操作往返延迟折线图,从而实现图形化操作的Ping指令。
    利用正则表达式截取从终端返回的信息
    为方便统计所有的ping结果,并获得最大、最小、均值RTT,我们需要对终端返回的信息进行筛选,由于java中已存在封装好的剪切字符串的方法,可以不用自己编写正则表达式。
    经过以上方法,每一次ping操作的往返延迟便被记录下来展现,同时,最大最小与均值RTT也被记录了下来,表现如下:


    3.1.5 TraceRoute操作实现部分(HandleTraceRoute包)3.1.5.1 TraceRoute功能作用通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地 (destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在MS Windows中为tracert。
    traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
    在大多数情况下,我们会在linux主机系统下,直接执行命令行:
    traceroute hostname
    命令格式
    traceroute [参数] [主机]
    命令功能
    traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
    具体参数格式
    traceroute [-dFlnrvx] [-f<存活数值习[-g<网关>…][-i< 网络界面>][-m<存活数值>] [-p<通信端口>] [-s<来源地址>]\ [-t<服务类型>] [-w<超时秒数>][主机名称或IP地址][数据包大小]
    命令参数

    -d:使用Socket层级的排错功能-f:设置第一个检测数据包的存活数值TTL的大小-F:设置勿离断位-g:设置来源路由网关,最多可设置8个-i:使用指定的网络界面送出数据包-I:使用ICMP回应取代UDP资料信息-m:设置检测数据包的最大存活数值TTL的大小-n:直接使用ip地址而非主机名称-p:设置UDP传输协议的通信端口-r:忽略普通的Routing Table,直接将数据包送到远端主机上-s:设置本地主机送出数据包的ip地址-t:设置检测数据包的TOS数值-v:详细显示指令的执行过程-w:设置等待远端主机回报的时间-x:开启或关闭数据包的正确性检验
    Java调用Unix终端实现TraceRoute操作
    本扩展功能使用Java调用终端traceroute指令,在表格上显示traceroute的相关信息,并绘制traceroute操作经过的站点,从而实现图形化操作的traceroute指令。
    利用正则表达式截取从终端返回的信息
    为方便统计所有的trace到的站点结果,我们需要对终端返回的信息进行筛选,由于java中已存在封装好的剪切字符串的方法,可以不用自己编写正则表达式。
    经过以上方法,每一次trace的站点便被记录下来,表现如下:

    3.1.6 ARP-Attack操作实现部分(ARPAttack包)3.1.6.1 ARP原理简介每台主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上各主机和路由器的IP地址和硬件地址的映射表,这些都是该主机目前知道的一些地址。
    当主机A要向本局域网上的某个主机B发送ip数据报时,先在其ARP高速缓存中查看是否有主机B的ip地址。如果有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。也有可能查不到主机B的ip地址的项目。这可能是主机B才入网,也可能是主机A刚刚加电,其高速缓存还是空的。在这种情况下,主机A就自动运行ARP,然后按以下步骤找到主机B的硬件地址。
    实现地址解析的第一步是产生ARP请求帧。在ARP帧数据部分的相应字段写入本地主机的物理地址、ip地址、待侦测的目的ip地址,在目的物理地址字段写入0, 并在操作类型字段写入1,用以表示本数据帧是一个ARP请求数据帧。
    该ARP请求帧以本地网络适配器的物理地址作为源地址,以物理广播地址(FF-FF-FF-FF-FF-FF)作为目的地址,通过物理层发送出去。
    由于采用了广播地址,因此网段内所有的主机或设备都能够接收到该数据帧。除了目的主机外,所有接收到该ARP请求帧的主机和设备都会丢弃该ARP请求帧,因为目的主机能够识别ARP消息中的ip地址是否与本机相同。
    与目的ip地址匹配的主机构造ARP应答帧。在ARP应答帧中,以请求分组中源物理地址、源ip地址作为其目的物理地址、目的ip地址,并将自身的物理地址、ip地址填入应答帧的源物理地址、源ip地址字段,并在操作字段中写入2,表示本 ARP数据帧是一个应答数据帧。该分组通过数据链路层直接发给源主机。
    源主机接收到ARP应答帧后,获得目的主机的物理地址,并将它作为一条新记录加入到ARP高速缓存表。
    此外,如果源主机没有发送ARP请求而收到其他主机的ARP响应数据帧,源主机也会在本地ARP缓冲区中缓存该主机物理地址和ip地址的对应关系。
    ARP高速缓存是非常有用的。如果不使用ARP高速缓存,那么任何一个主机只要进行一次通信,就必须在网络上用广播的方式发送ARP请求分组,这会使网络上的通信量大大增加。ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间,超过生存时间的项目就从高速缓存中删除掉。
    ARP是解决同一个局域网上的主机或路由器的ip地址和硬件地址的映射问题。
    3.1.6.2 ARP数据包格式在了解ARP原理的基拙上,还必须了解ARP数据包的格式才能实现ARP欺骗。

    注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x0800为ip地址,后面两个地址长度对于以太网地址和’p地址分别为6 和4(字节),op字段为1表示ARP请求,op字段为2表示ARP应答。

    3.1.6.3 ARP欺骗原理一台电脑通过网络访问另一台电脑的时候,在数据链路层需要知道对方的 MAC地址进行真正的物理通信。
    而电脑上的应用程序通常都是根据另一台电脑的’p地址来和对方建立通信,这时候就需要有一个协议将ip地址解析到MAC地址,这就是ARP协议。
    而ARP具体过程就是当需要通过ip获取一个远端的的MAC地址的时候,系统会首先检查ARP表中是否存在对应的ip地址,如果没有,则发送一个ARP广播,当某一个拥有这个MAC地址的节点收到ARP请求的时候,会创建一个ARP reply包,并发送到ARP请求的源节点,ARP Reply包中就包含了目的地节点的 MAC地址,在源节点接受到这个reply后,会将目的地节点的MAC地址保存在ARP 缓存表中,下一次再次请求同一ip地址的时候,系统将会从ARP表中直接获取目的地MAC地址,而不需要再次发送ARP广播。
    用ping命令举例来说,在机器A,比如说ip是192.168.1. 2中发出下面的 ping命令:
    ping 192.168.1. 3,如果192.168.1.3这个MAC地址在机器A的ARP缓存表中不存在,这时候机器A就会发送一个ARP广播,当192.168.1.3接到广播后,会给机器A回一个ARP Reply包,其中包含了192.168.1.3的MAC地址,这是正常的 ARP过程。
    假设IP—MAC的对应关系为(192.168.1.3—OO-1C-23-2E-A7-OE)
    但是局域网内的其他机器也可向机器A发一个假的IP—MAC对应关系ARP Reply包,机器A接收到这个假的包后同样会更新自己的ARP缓存表.假设发送的为(192.168.1.3—OO-1C-23-2E-A7-OA,OA实际上为192.168.1.4的MAC地址)那么机器A再通过IP往192.168.1.3发送数据的时候,实际上却发到了192.168.1.4这台机器.这样就到达了ARP攻击或者叫做ARP欺骗,RP攻击只能发生在局域网内。
    ARP欺骗分为两种,一种是针对路由器进行欺骗,使路由器的ARP缓存中建立错误的IP与MAC地址映射表,结果就是从路由器发送的数据都发给了一个错误的MAC地址,造成主机无法正常接收信息。另一种是对主机中的ARP缓存进行欺骗,伪造主机路由器IP和MAC地址映射表,使主机发送的数据都发送到伪造后的MAC地址对应的主机上,这种情况不仅会使主机不能正常上网,而且还能用来窃取信息。
    3.1.6.4 本程序ARP欺骗方式我们用程序实现第二种ARP欺骗,并对第二种欺骗方式进行举例。
    假设现在主机A和主机B通过路由器C连接在同一个局域网内,主机A是欺骗方,主机B是被欺骗方。主机A在自己的ARP缓存中查到路由器C的IP地址 IP_C, MAC地址MAC_C,查到主机B的IP地址IP_B。接下来,主机A自己生成一个ARP回复,该回复的源IP并不是主机A的IP地址,而是冒充路由器C的IP地址IP_C,同时编造一个不存在的MAC地址作为回复的源MAC地址(可以设置为自己主机的MAC地址用来窃听),目标IP是IP_B,目标MAC地址是MAC一。这个ARP回复以单播的形式发送给主机B之后,主机B并不会验证回复的真实性,而是会把路由器的IP_ C和一个错误的MAC地址写入自己的ARP缓存,此时,所有主机B通过路由器发送给外界的数据,都会因为找不到路由器而发送失败。(在此,路由器也称作为网关)。
    总结一下:主机A冒充路由器C不断向主机B发送一个包含错误的IP和MAC 映射表的ARP回复,使主机B经由路由器发给外界的数据无法到达目的地,从而致使主机B无法正常上网。
    3.1.6.5 ARP攻击实现流程本实验ARP攻击实现如下图所示:

    在本机接入局域网时,首先调取终端功能查询本机IP地址和MAC地址,并获取局域网网关IP地址和MAC地址,同时获取广播地址查看网段大小;
    接入局域网监听一段时间后,可自动获取局域网内所有设备的IP地址与MAC地址,这些信息缓存在系统arp表中,可以将其查询出来:

    然后选择要攻击设备的IP地址,选定伪装的MAC地址(如果设置为本机MAC地址则会截获所有数据包,起窃听作用),设置网卡模式((WiFi/以太),设置攻击间隔(多长时间攻击一次),便可开始ARP攻击。
    3.1.6.6 ARP欺骗注意事项由于存在ARP代理,对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的ARP请求会使用自己的MAC地址与目标计算机的IP地址对源计算机进行应答。因此不可以随意指定IP地址,因为如果是错误的IP地址,网关会用自己的MAC地址做应答,然而实际无意义,因此需要判断返回的ARP应答对应的MAC地址是否为网关地址。
    需要在进行攻击之前发送心跳包,测试指定的IP地址是否存在,是否是一个真正的设备而不是预留的设备。
    3.2 函数调用关系图
    程序由LoginFrame()进入,登陆成功进入MainFrame( ),Mainframe可以选择进入GrabbingPacketMainFrame、startPingFrame、startTraceRouteFrame和 startARPAttcckFrame,其中GrabbingPacketMainFrame调用startGrabbingFrame和StatisticFrame函数, StatisticFrame调用HandieDate、JFreeChart和JDBC函数完成统计并自动将数据可视化。
    第四章 测试登录界面

    程序主界面
    如果登陆失败,如账号不存在或密码错误,则会给以相应提示,登陆成功则跳转至程序主界面。

    数据包处理界面

    数据包抓取
    点击数据包抓取按钮,显示出一个表格,首先需要选择网卡类型,即现在上网的方式是使用WiFi还是以太网;选择网卡模式后选定是否设置为混杂模式,即是否过滤掉不是发送给自己主机的数据包,如果不过滤的话意味着可以监听整个局域网内的数据包。点击开始自动抓取数据包,点击暂停停止数据包的捕获。






    4 评论 45 下载 2018-11-05 12:08:40 下载需要13点积分
  • 基于C语言的推选优秀班委投票系统

    一、题目简介这是一个投票管理系统,具体就是投票推荐优秀班委的一个简易系统,这个系统可以对班委的学号、姓名、性别、年龄、综合成绩等具有输入、输出、查找、删除等功能,还有根据得票数进行排序的功能。
    二、功能说明
    输入功能:可以依次输入班委信息以及所得票数
    输出功能:显示投票信息
    查找功能:根据学号查找对应班委,并投票显示
    插入功能:可以插入班委的相关信息
    删除功能:可以删除某个班委的相关信息
    排序功能:根据每个人的得票情况进行排序
    推出功能:退出系统

    三、程序框图
    四、函数模块设计优秀班委投票系统共用到10个函数,下面对每个函数做具体讲解:
    菜单函数
    fun_menu(){ int power_num; printf("\n\n1、参与投票\n"); printf("2、查看当前排名\n"); printf("3、搜索被选举成员\n"); printf("4、推荐优秀班委\n"); printf("5、高级管理员权限\n"); printf("6、举报\n"); printf("0、退出\n"); printf("请选择你要执行的功能:"); scanf("%d",&power_num); switch(power_num){ case 1: fun_vote();break; case 2: fun_rank();break; case 3: fun_search();break; case 4: fun_add();break; case 5: fun_manager();break; case 6: fun_report();break; case 0: exit(0); default:printf("功能尚未开通或发生未知错误!请联系管理员!"); exit(0); }
    投票函数
    fun_vote(){ int i; //用于输出班委信息 int j; //用于接受投票的学号 printf("当前参与竞选班委有:\n"); for(i=0; i<10; i++){ //输出班委信息 if(student_num[i].id!=0) printf("%s(2018116030%d) ",student_num[i].name,student_num[i].id); else break; } printf("\n请输入你选举的班委的学号(最后三位):"); scanf("%d",&j); for(i=0; i<10; i++){ if (j!=0 && j==student_num[i].id){ printf("\n投票成功,感谢您投出宝贵的一票!"); flap[i]++; fun_in_record(); break; } } if(i==10) printf("\n投票失败!你输入的学号不存在!"); return fun_menu();}
    查看当前排名函数
    fun_rank(){ int max,i,j,a,k=0; for(j=0; j<10; j++){ if(student_num[j].id==0) continue; //提高效率 max=flap[j];a=j; for(i=1; i<10;i++) //获取最大的数字的序号 if(flap[i]!=0) if(max<flap[i]) a=i; printf("第%d名:%s 得票数:%d\n",++k,student_num[a].name,flap[a]); // 排名输出 flap[a]=0; if(flap[j]!=0) j=0; } fun_out_record(); //排序结束重新获取投票情况 return fun_menu();};
    搜索成员函数
    fun_search(){ int num,i; printf("请输入你要搜索的班委的学号(最后三位):"); scanf("%d",&num); if(num<300 || num>337){ //我们班有34个人,提高搜索效率,减小不必要的循环 printf("\n输入的学号错误!\n"); return 1; } for(i=0; i<10; i++){ if(student_num[i].id==0) continue; //提高搜索效率 else if(num==student_num[i].id){ //搜索成功时的输出 printf("\n姓名:%s 性别:%c 学号:2018116030%d",student_num[i].name,student_num[i].sex,student_num[i].id); printf("\n民族:%s 年龄:%d 成绩:%d",student_num[i].nation,student_num[i].age,student_num[i].score); printf("\n当前得票数:%d",flap[i]); break; } } if(i==10){ printf("学号不存在!"); //搜索失败,结束程序 printf("\n你想推荐 TA 为优秀班委吗?(1、确认):"); scanf("%d",&num); if(num==1) fun_add(); else printf("你已退出搜索!\n"); return fun_menu(); } printf("\n你想投 TA 一票吗?(1 确认):"); scanf("%d",&num); //搜索成功,确认是否投票 if(num==1){ flap[i]++; fun_in_record(); printf("\n投票成功,感谢您投出宝贵的一票!"); }else printf("你已退出投票系统!\n"); return fun_menu();}
    高级管理员权限函数
    fun_manager(){ //高级管理员权限函数 int i; int password,news; printf("请输入管理员密码:"); scanf("%d",&password); if(password==8866){ printf("您获得管理员权限!可修改或删除任何相关信息!\n"); for(i=0; i<10; i++){ //输出所有成员信息 if(student_num[i].id==0) continue; printf("\n姓名:%s 性别:%c 学号:2018116030%d",student_num[i].name,student_num[i].sex,student_num[i].id); printf("\n民族:%s 年龄:%d 成绩:%d",student_num[i].nation,student_num[i].age,student_num[i].score); printf("\n当前得票数:%d\n",flap[i]); } } return fun_menu();}
    写入投票函数
    fun_in_record(){ //写入投票函数 int i; //将投票数据保存到file1.txt磁盘文件中 FILE *fpWrite=fopen("file1.txt","w"); if(fpWrite==NULL) { printf("无法打开文件\n"); exit(0); } for(i=0; i<10; i++){ fprintf(fpWrite,"%d ",flap[i]); } fclose(fpWrite); return 0; };
    读取投票函数
    fun_out_record(){ //读取投票函数 //从file1.txt磁盘文件中读出投票数据 int i; FILE *fpRead=fopen("file1.txt","r"); if(fpRead==NULL) { printf("无法打开文件\n"); exit(0); } for(i=0;i<10;i++) fscanf(fpRead,"%d ",&flap[i]); fclose(fpRead); };
    插入优秀班委数目函数
    fun_add(){ //增加优秀班委数目函数 int i,j; for(i=0; i<10; i++) if(student_num[i].id==0) break; //检查当前是否可以增加推荐人数 if(i==10){ printf("参与选举的人数已达上限!已关闭选举成员功能!");return fun_menu(); } printf("\n请输入你推荐的人员的学号(五位):"); //检查学号的有效性 scanf("%d",&student_num[i].id); if(student_num[i].id<300 || student_num[i].id>337){ printf("投票失败!不存在该学号!\n"); return fun_menu(); } for(j=0; j<i; j++) if(student_num[j].id == student_num[i].id){ printf("存在该学号!请勿选举!\n"); return fun_menu(); } printf("请输入你推荐的人员的姓名:"); scanf("%s",&student_num[i].name); fun_door(&student_num[i].name,student_num[i].id); //将推荐数据写入磁盘文件 printf("推荐成功!感谢你的参与!管理员正在处理~"); return fun_menu(); }
    举报函数
    fun_report(){ //举报函数 int i; char abc[20]="举报"; printf("你确定要举报吗?(1 确定):"); scanf("%d",&i); if(i==1) printf("请输入你要举报的人的学号(五位):"); //检查举报学号的有效性 else { printf("你已退出举报!\n"); return fun_menu(); } scanf("%d",&i); if(i<16100 || i>16244){ printf("举报失败!不存在该学号!\n"); return fun_menu(); } else{ fun_door(abc,i); // 将举报信息输入磁盘文件 printf("举报成功!正在通知老师!感谢你的配合!"); } return fun_menu();}
    写入磁盘数据函数
    fun_door(char *x[20],int y){ //写入磁盘文件数据函数 //将数据保存到file1.txt磁盘文件中 FILE *fpWrite=fopen("file1.txt","a"); if(fpWrite==NULL) { printf("无法打开文件\n"); exit(0); } fprintf(fpWrite,"\n\n%s ",x); fprintf(fpWrite,"%d",y); fclose(fpWrite); }
    五、相关运行截图界面主界面

    参与投票界面

    查看当前排名界面

    搜索被选举成员

    推荐优秀班委

    高级管理员权限

    举报

    退出系统
    0 评论 1 下载 2021-04-20 12:54:27 下载需要8点积分
  • 基于JSP和SQL SERVER医院管理住院系统的研究与实现

    摘 要医院管理住院系统是一项集多类学科为一体的系统,其中包含医学、信息、计算机等学科,广泛的应用在当今欧美等发达国家,给治疗患者们提供了很大的便利。假如全面实现了这一系统,能够极大限度的改进医院的治疗水平,在患者面前重新建立起医院的良好形象。
    在对本课题进行全面深入研究和分析后,决定采用的数据库库管理系统为SQL SERVER 2005,使用的开发工具为MYECLIPSE的JSP,在面向对象的开发工具中,最主要的是JAVA,在网络查询和开发语言方面都运用了JSP技术。
    本篇论文主要通过使用以上工具,来对医院管理住院系统进行更合理的开发和利用。本篇论文在构建新系统的前提下,进行详细的背景分析,并介绍系统开发时将采纳的主要技术和技术难点。利用软件工程思想,在将功能性需求和非功能性需求区分的基础上进行需求分析;利用该需求分析系统的业务流转设计;然后针对上述内容,设计出系统的用例图,描绘系统设计过程。在系统设计完成以后,对系统进行了软件测试,通过多种测试相结合的方式来确保系统的安全性和有效性。本系统主要分为六大模块,分别是医生管理模块、病人管理模块、病床管理模块、收费管理模块、统计分析模块和系统功能模块,医生、病人和医院的管理人员都可以通过此系统寻找出自己所需要的信息。
    关键词:医院管理住院系统,SQL,JSP, 软件工程
    AbstractHospital management hospitalization system is a multi-disciplines system, which includes medicine, information, computer and other disciplines. Today, this system is applicated widely in developed countries such as Europe and the United States and provides a great convenience to treat patients. If this system is fully implemented, it can greatly improve the treatment level of hospital, and re-establish a good image in front of patients.
    In this article to conduct a comprehensive and in-depth study and analysis, the decision to use the database management system for SQL SEVER 2005, the use of tools for the development of MYECLIPSE JSP, in object-oriented development tools, the most important is JAVA, and JSP technology is used in network query and development language.
    This paper mainly uses the above tools to make more rational development and utilization of hospital management hospitalization system. Under the premise that the construction of a new system, this paper takes a detailed analysis of the background and the main technologies and technical difficulties that will be adopted when the system is developed. Then, using the requirments to analysis the business flow design of the system, and then the use case diagram of the system is designed to describe the system design process. After the system design is completed, software testing of the system is carried out to ensure the safety and effectiveness by combining various tests.This system mainly divided into six modules, which includes doctor management module, patient management module, the bed management module, charge management module, statistics analysis module and system function module. And doctors, patients and hospital administrators can find out information what they need through this system.
    Keywords: The hospital manages the hospitalization system;SQL; JSP; Software Engineering
    第一章 绪论1.1 背景医院管理住院系统是当今大部分现代化医院所具备的一个系统,它和医院紧密的联系在一起。由于它的实现,大大的方便了医院的管理,并且为医生和病人提供了很大的便利,缩短了病人求医的时间,为病人和医生之间快速的建立联系提供了一种保障。但是在一些医院,还没有这样的系统,医生、病人和医院之间的关系比较独立,这就大大的影响了医院的效率,给医院的长久发展带来了很不利的因素。[6]
    1.2 系统的开发目的及其意义近年来医疗行业不断发展,医院规模不断增加。在经济全球化的影响下,我国医疗行业不断借鉴外来经验,不断创新医院的运营模式,改善医院的管理体制,取得了良好的社会反映,发展速度不断加快,给人们的生活带来了很大的便利。
    医院服务质量和治疗水平的高低,直接影响现代化医院的发展。对于一所现代化的医院,能否全面系统满足病人的需求,如对服务态度,时间安排,治疗水平等的要求是患者选择医院的主要标准。本课题将对医院中的病人管理、医生管理、收费管理和病床管理等方面进行探讨和研究,将现代化医院信息管理系统作为医院管理的核心平台,其管理信息内容作为研究材料与基础。通过此次研究与探讨,主要目的在于目标系统的运用能够全面快速满足病人和医生的需求,为病人提供多方面的便捷。提高医院运行效率,节约病人的时间,减少病人不必要开支。通过目标系统,联系管理者与被管理者,不断反应问题同时可以积极有效解决问题,提高服务质量。利用目标系统带来的收益是多面的,具体表现如下:

    间接性:利用目标系统,减少人力物力的不必要投入,而非通过计算机信息化系统直接实现经济效益
    持久性:目标系统的建立需要投入巨额资金,但并不能收回资金
    效益性:医院利用目标系统首先可以满足病人的需求,还能打造良好的现代化医院形象

    本课题根据实际需要而产生,为了解决人工计算操作的弊端,开发一套医院管理系统势在必行。本系统的开发主要是根据实际需要而制作,系统整体包括:医生管理模块,病床管理模块,病人管理模块,收费信息管理模块,统计分析模块等功能模块。
    1.3 本文章节安排本文一共包含六个章节,具体的各个章节安排如下:

    第一章:绪论,在该章主要分析本文的研究背景及研究意义,并给出了本文的章节安排
    第二章:开发技术。这一章节主要介绍了系统开发所要用到的开发工具,并且对系统配置给了具体的要求
    第三章:系统的可行性研究与需求分析。从经济、技术、操作和法律四个方面分析了系统的可行性,从系统的非功能性需求与功能性需求两个角度进行了论述
    第四章:系统总体设计。从系统设计原则开始,从数据库的分析与设计、系统软件结构设计以及数据字典进行了逐步分析
    第五章:系统详细设计与实现。对系统中的重要功能模块给出了部分界面予以展示
    第六章:系统测试。本章研究系统测试的相关技术、测试方法及测试工具,对其进行了具体的系统测试
    第七章:总结了自己在完成论文时的体会,以及自己所收获的知识,总结出自己的不足,确立了自己在今后的发展中所要努力的方向

    1.4 本章小结本章主要介绍了研究医院管理住院系统的目的,以及医院管理住院系统的开发目的和意义,并且还介绍了本篇论文的章节安排。
    第二章 相关技术2.1 JSP技术SunMicrosystems公司最早提出了JSP,经过持续地推广,不断地的有计算机和软件公司共同参与其中进行开发。其主要是通过在HTML文件(.htm,.html)中嵌入JSP和Scriptlet标签来实现的。这样,内嵌的Java程序就可以生效,对数据库做出请求、或者启用E-mail等。上世纪末,JSP出现了,SunMicrosystems公司建立起动态性的网站就是利用了它的存在,并利用其兼容性和扩展性,来扩大平台应用。从实际效果来看,JSP技术的出现使Web的建设和设计创新不断。其特点大概有以下几点:
    依托JSP技术,工程技术人员可利用XML或HTML标识来对web等页面进行修改或推翻设计。这些页面上的内容也可以依托JSP来设计或实现。如此一来,利用JSP编程语言设计的服务器,其内容发送的信息和要求都可以通过JSP索引来解释,或者根据其脚本来设计或建立。当然,这些最终的内容也会通过HTML或XML形式反馈到浏览器中。通过这样的方式,能够使源代码的编写者维护自己的专利和权益,也可以保证web页面的兼容性和可拓展性。
    一般来说,单独的JSP页面不发生复杂的数据分析和处理,其一般用于爬虫或索引提炼攫取数据。[14]
    JSP是基于Java编程语言来实现的,他的内部具有scriptlets和tags,可以用于储存动态页面运作需要的一套程序方式。另外,JSP将动态页面运作需要的一套程序方式与静态的网页设计分离,这样的模块分块使JSP具有兼容和扩展性,开发性更高。说到底,JSP可以实现动态的页面控制,并且可以让页面运作程序与静态的页面分离。
    JSP页面由两部分HTML和Java代码组成。一般来说,上游的服务器如果收到来自外部请求或信息,会对Java代码进行分析或运算处理,从而以HTML的方式回馈到网页浏览器中。其基础是Java Servlet,Java Servlet和JSP这两者是规模较大的JSP项目开发的重要组成部分。在技术上,JSP具有了Java特有的容易理解、容易上手、适用性广,不挑平台、安全性高等特点。这些优势保证了其在整个因特网中广为使用。在上世纪末出现后,如今如IBM、Oracle、Bea等公司都使用其服务器,其逐渐成为电子商务软件开发的“宠儿”。[16]
    具体来看,JSP有以下优点:

    可以经过多次使用:一般程序经过编码后,可在各类系统内嵌套使用,而不需要重新编写代码。这是其优于PHP之处
    其兼容性比较好:基本不挑平台,常见的平台都能兼容和开发、应用、扩展。这刚好与PHP的不可拓展性互补
    适用性广:无论是war小文件或多层次的平台以及服务器,其都能兼容和运行。对各类规模不一的平台都能进行数据分析、处理,反馈,其展现出极强的适应能力
    可依托种类丰富、功能优异的工具:经过接近20年的发展,JSP如今已拥有了很多开发工具,这些工具功能强大,几乎覆盖了程序开发和设计方方面面,并且几乎不需耗费金钱即可得到,为开发人员提供了便利性[5]

    2.2 “结构化查询语言”(SQL)SQL意思是Structured Query Language,即为查询语言。SQL相当于各数据库之间的信使,主要是这些数据库之间进交互的工具,也是它们之间信息交流的工具。按照美国ANSI的定义,SQL被纳入了数据库标准化建设中。运用SQL语言,在数据库中可以直接进行操作,比如数据更新、数据攫取等。如今市面上比较具有规模、且与外界连通较大的数据库都是使用SQL语句。另外目前标准化的SQL已经可以执行对数据库大部分的功能操作。[4]SQL Server是这些数据库进行交互和信息交流的工具。一开始是由Microsoft和Sybase 等共同设计建造的,其最早应用在OS/2上。在Windows NT诞生后,微软公司与Sybase公司在SQL Server的设计应用上开始走向不同方向。其中微软公司致力与将SQL Server应用到Windows NT中,而Sybase公司相对地,致力于将SQL Serve融入到其自身开发的UNⅨ中。[2]
    2.3 B/S服务架构随着互联网和浏览器的发展,B/S的开发架构逐渐取代了C/S架构,B/S是浏览器和服务器的开发架构模式,它在服务器端放入了应用程序的大部分功能,浏览器安装在客户机端,对服务器端的安装的数据库通过Web Server进行数据的存储和读取。
    B/S架构在技术方向可认为是C/S架构的升级版,用户只有拥有浏览器和互联网络,就可以通过浏览器的界面与系统进行交互,浏览器端只会处理较少的事务,大多数的处理和操作都设计在服务器端。这样做很大程度上降低了客户端的负荷,给用户节约了硬件和系统维护方面的开支。B/S架构的具体流程为:打开浏览器后,输入网址,通过系统界面向服务器端发出请求指令,服务器端接收到浏览器发来的指令做对应的处理,并负责将结果传递到浏览器端,展现给用户。该模式是在牺牲服务器端符合的条件下减少客户端的负荷量。B/S架构在程序运行时,在浏览器向服务器发指令的同时需要借助Web Server,Web Server在这儿主要承担着动态网页生成、数据请求、返回结果等任务。换句话可以这样理解, 将C/S架构中客户端的数据处理模块中的任务分为两个,一个交给B/S架构中客户端的Web Server完成,另一个对数据库的访问交给B/S架构中服务器端完成,可以看出Web Server可以承担客户端的一部分负荷,这样就可以减轻了客户端的工作量。[17]
    由此可知,B/S架构较传统的C/S架构开发,有其独特的优势和特点:将应用程序划分为多个独立的层次,每个层次任务不同,相互独立,但又相互关联,目的是有一个完整的系统。B/S架构按照一定的应用功能可划分为三个层次,即功能层、表示层和数据层,三个层次各司其职,为用户展现一个完整友好的应用系统。传统的C/S架构系统在客户端装有数据库,常用的是关系数据库DBMS,而B/S架构的功能层只是为用户提供必要的数据,大量的数据处理都依靠数据层来完成,其在服务器端完成,为缓减这种压力,B/S架构通过采取增添服务器的数量。B/S架构下的数据安全性能也比C/S架构高,它不需要去保存任何数据和信息,只需要在服务器端增加备份服务器,以防万一服务器出现崩溃的情况下用于恢复数据库使用。[7]其B/S架构图如图2-1所示:

    2.4 MVC设计模式MVC是英文Model View Controller的缩写,其表示的为:模型-视图-控制器,MVC设计模式将业务逻辑层和数据层单独分离,解决了系统输入、控制和显示的,有助于系统的开发和维护,MVC设计模式是目前系统开发最常用最合适的一种设计模式。下面具体介绍具体每一层的功能。

    模型层:该层是应用程序的核心部分,一个模型往往与许多个视图对应着,这样设计的目的是为了应用程序的可重复利用和可移植,只需修改具体业务信息,不需要重新编写相同的代码,从而提高系统的功能,有利于维护系统。该层连接着系统业务层和数据处理层,应用程序通过模型层向数据库读取和存储数据。如果改变了应用程序的业务信息,模型层会同时向业务层和视图层发出指令
    视图层:该层主要是将应用程序中处理的数据通过界面友好的展现给用户,用户只能通过视图层与系统发生交互交流。视图层不对数据进行任何的处理和操作,只是用于接收用户的信息和将信息展现给用户,将模型对数据的更新实时传递给用户。通常视图层一般由HTML组成的代码设计,外加一些Flash和XML等标识语言以及Web Services等
    控制器:该层主要是用于解决系统业务的相关请求,通常负责根据用户的输入调用模型去执行用户的需求,同时可以控制模型中的数据如何通过视图展现给用户。控制器的执行流程是:用户输入相关的请求并通知视图层,控制器从视图层接收到请求通过一定的算法向模型层发出指令,模型层将数据返回,最后再传给视图层,将数据呈现给用户。

    MVC的特点及优势主要有以下几点:

    MVC设计模式一般用于ERP和办公等交互性强、用户众多的系统中
    MVC设计模式可以将多个数据模型用一个视图展现,也可以支持多个视图访问同一个服务器的代码
    MVC设计模式便于构建模型,易于用户与应用程序的交互和表达
    MVC设计模式分成三个层次,相对每一层的开发者责任分工明确,每一层的开发者只需专注于相应层次的开发,从而提高了开发速度,缩短了应用程序的交付时间[1]

    2.5 本章小结本章对系统开发使用的相关技术做了详细的介绍,最终选择B/S开发本系统;并且介绍了JSP技术、结构化语言、B/S服务框架。
    第三章 系统的需求分析和可行性研究3.1 功能需求经过对本系统的研究分析,本系统主要是为了方便让医院更快捷的管理。所面向的对象主要有病人、医生和医院的管理人员。病人运用该系统后,可以根据该系统查看自己所需要的信息,包括治疗自己病症的医生的信息、病床信息、收费信息等。医生运用该系统后,可以根据该系统查看自己病人的信息。而医院管理人员通过该系统可以查看病床利用率和收费明细的情况。[3]
    根据面向对象的需求的不同,可以分析出本系统需要的主要功能有:登录、医生信息管理、病人信息管理、收费信息管理、病床信息管理、统计分析管理和系统管理。
    3.1.1 系统层次结构图该系统主要是医生和病人通过该系统,对整个医院的病床、医生、病人和消费信息进行查看,根据自己的需要进行选择。系统层次结构图如图3-1所示:

    医院管理系统包括如下功能:

    医生管理:管理医生信息、包括对医生信息的增加、删除、修改
    病人管理:管理病人信息、包括对病人信息的增加、删除、修改
    病床管理:管理病床信息、包括对病床信息的增加、删除、修改
    收费管理:管理收费信息、包括对收费信息的增加、删除、修改
    统计分析:病床利用率查询主要是通过对科别、医师和日期的搜索,收费明细查询主要是通过对病人姓名和日期的搜索,来进行对其相对应信息的查询
    修改密码:用户可以修改自己的系统登录密码

    3.1.2 医生信息管理医生信息管理主要是通过对医生姓名的搜索,来对医生信息进行查询,其中查询的内容包括医生的编号、性别、职称、职务、科别、出生日期和工作日期,还可以对医生信息进行添加、修改、删除。

    3.1.3 病床信息管理病床信息管理主要是对病床的所属科别、病床号、床位费和使用状态进行查看,还可以对病床进行添加、修改和删除。

    3.1.4 病人信息管理病人信息管理主要是通过对病人姓名的搜索,来对病人信息进行查询,其中 查询的内容包括病人的科别、病床号、性别、年龄、病症、主治医生、入院和出院日期,还可以对病人信息进行添加、修改和删除。

    3.1.5 收费信息管理收费信息管理主要是通过对病人姓名的搜素,来进行对其收费信息的查询,其中查询的内容包括病人的科别、病床号、收费项目、单价、数量、金额和日期,还可以对收费信息进行添加、修改和删除。

    3.1.6 统计分析管理统计分析管理其中包括病床利用率查询和收费明细查询,其中病床利用率查询主要是通过对科别、医师和日期的搜索,来进行对其相对应信息的查询,查询的内容包括科别、病床号、病人性别、病人姓名、病人年龄、主治医生、入院日期和出院日期等;收费明细查询主要是通过对病人姓名和日期的搜索,来进行对其相对应信息的查询,查询的内容包括科别、病人姓名、病床号、收费项目、数量、单价和金额。

    3.1.7 系统管理系统管理其中包括修改密码和退出系统,修改密码的方法是首先是输入原密码,然后输入新密码,最后确认新密码。

    3.1.8 系统用例分析在以上需求分析的基础上,本节对它们进行用例分析。
    医生信息管理
    本模块主要针对管理员和病人来实现的,管理员在本模块中能够对医生的信息进行添加、修改和删除,而病人可以在本模块中实现对医生信息的查询,医生信息管理用例分析图如图3-8所示:

    病人信息管理
    本模块主要针对管理员和医生来实现的,管理员在本模块中能够对病人的信息进行添加、修改和删除,而医生可以在本模块中实现对病人信息的查询,病人信息管理用例分析图如图3-9所示:

    病床信息管理
    本模块主要针对管理员和病人来实现的,管理员在本模块中能够对病床的信息进行添加、修改、删除,医生可以在本模块中实现对病床信息的查询,病床信息管理用例分析图如图3-10所示:

    收费信息管理
    本模块主要针对管理员和病人来实现的,管理员在本模块中能够对收费的信息进行添加、修改、删除,病人可以在本模块中实现对收费信息的查询,收费信息管理用例分析图如图3-11所示:

    统计分析管理
    本模块主要针对管理员来实现的,管理员在本模块中可以查看病床利用率和收费明细查询,统计分析管理用例分析图如图3-12所示:

    3.2 非功能性需求3.2.1 系统性能需求响应时间尽量短,结果准确。一般业务操作时间在3到5秒,添加以及修改报表时间不超过30到45秒。对于多用户并发访问的问题,系统通过先进缓存技术而解决了相应的问题。
    3.2.2 系统安全性需求由于医院管理住院系统是基于MVC模式以B/S框架而开发的Web应用,根据用户的确切使用要求以及系统的使用目的分析,医院管理住院系统在安全性方面有着很高的要求。因此医院管理住院系统对系统安全性要求尤为严格。
    为了保证管理员可以登录本系统进行具体的操作,设立了登录信息界面,在账号与密码相匹配的情况下才可以进入系统进行实质的操作。
    3.2.3 系统设计需求为了达到标准、规范等目标,从而提高软件的复用率,在进行系统设计时,需做到如下:

    底层数据统一:对于底层数据采用标准的数据进行设置,对底部对于不符合规范的数据及时进行数据清洗和规范化操作,使得不同的数据资源统一在统一的数据格式之下,达到方便查询存储的效果
    界面风格的统一:采用统一的主题模式,不同页面会有不同的应用需求,其界面主题保持基本一致,促进组织采用树形结构,方便数据的浏览和查询
    数据服务化:系统中各功能模块既独立,又相互关联,在模块化的同时保证各个功能合理配置。同时预留开放接口,能够适应系统的扩展需求

    3.2.4 系统其它需求考虑到网络环境及系统运行使用的需要,一般而言,系统表现出来的其他需求主要有:一是对各类浏览器友好、兼容性强。二是系统的适应性强。
    另外,为了更好的用户体验,还应该满足以下条件:

    可靠性需求:用户在使用该系统时,系统无法访问的概率应在5%以下
    易用性需求:本系统展示给用户的界面应该是友好的且易用的,用户在没有接受培训的情况下也可以使用本系统
    运行环境约束:由于本系统是B/S架构的Web应用程序,因此要求安装有浏览器的用户才能使用[1]

    3.3 系统的可行性分析用户的要求和系统调研是进行系统可行性分析的基础,对将要开发的系统从经济、技术、运行等方面进行全面分析,并得出系统的开发工作能否可行,最后完成可行性分析。
    3.3.1 经济可行性经济预算是系统开发的前提工作中非常重要的部分,以本系统为例,在投入运营之前,本项目始终处于投资阶段,但投资并不大,整个项目的开发都独自完成。与此同时,当今计算机普及率较高,人们的技术水平也较高,如果本系统能够投入实际的使用,则所需的相关准备和培训人员的费用相对较少,但在它投入使用后,将节省大量的人力物力,使原来从事这方面工作的人员可以投入到更为实际的工作中去,提高管理部门的工作效率。所以综上所述,本系统的开发在经济方面是比较可行的。
    3.3.2 技术可行性技术可行性分析其主旨就是确保能够充分利用现有的技术条件,契合开发者的实际需求完成软硬件的开发及配置工作,明确技术人员专业能力等客观因素。网络技术的优势主要体现在:可靠的准确度;较快的传输速度。总之在科学技术飞速发展的今天,有利的推进了系统的发展。就技术层而言,本系统具有较高的可行性。
    3.3.3 操作可行性当今人们对计算机的操作已愈加成熟,对电脑的操作有一定基础,且本系统的操作性不算太复杂,通过简单的键盘输入以及鼠标点击即可完成相应的任务,简单培训以后立马上手,而且本系统可视性非常好,即本系统在操作上不会有太大难度。
    3.3.4 时间可行性从时间上看,在四年时间内学习了大量关于这方面的知识,尽管只是有些遗忘,而且需要在两个月内开发成此系统,但是通过查询相关知识,联系起以前学习的知识,通过这段时间的努力一定可以实现。
    3.3.5 法律可行性
    所有技术资料都为合法
    在开发过程中,完全不存在任何关于知识产权的问题
    不侵犯版权,没有抄袭任何系统
    在开发过程中,完全不涉及任何的法律问题,不会担负任何的法律责任

    根据以上分析,本系统在各个方面都是可以执行实现的。[15]
    3.4 本章小结本章主要介绍了系统的需求分析,其中主要包括两个方面:功能性需求分析和非功能性需求分析,并且还对可行性分析做了深入的研究。
    第四章 系统总体设计4.1 系统设计原则在进行系统软件的设计中,要遵循一些原则和规范,这样才能规范设计流程,便于进行开发。本系统遵循着以下设计原则:

    良好的适用性:开发系统的目的是为用户服务的。也就是说我们所设计的软件需要满足用户的需求。因此本文的设计遵循的是用户需求优先的原则
    结构稳定性:开发设计进行之前,需要设计系统的整体结构。一旦确定了体系的结构,这些设计便能流程化的进行。因此,维持一个稳定的结构才能保证后续一系列的工作的进行
    可扩展性:衡量一个系统的好坏需要评估这个系统的可扩展性。如果软件只能实现现有的功能,对其他功能的添加有封闭性,当用户提出新的需求,只能重新设计,这显然是不合理的。因为良好的可扩展性无论对用户还是开发人员而言都是有益的
    复用性:在一个系统中,有很多的模块内容是比较成熟,因此很多类似的工作就可以通过复用来实现,这样不仅提高了效率,而且可靠性也大大提高
    易维护性:系统的维护往往是最耗费精力和金钱的。因此设计出易维护的系统能够使维护人员能够快速查找出问题,能让系统具备自维护的特点是很有必要的[11]

    4.2 系统框架系统采用MVC设计模式。从数据层、视图层、控制层、逻辑层这几个方面进行的。以下将对各个层面的设计进行描述。
    4.2.1 信息系统视图层的设计系统采用B/S开发,这样就可以节约一部分的成本,因为使用这个模式可以减少C/S这个模式的时候进行的安装和升级。通过信息系统的表示层中大量的选项选择可以帮助降低用户数据的输入量,而且还可以减少相应的培训者在培训过程中和操作过程中与软件之间的磨合时间,是其可以更快的熟悉系统的工作,并将系统的作用得到最大程度的发挥。
    4.2.2 控制层与逻辑层的设计在信息系统的开发中,逻辑层需尊重不同用户的不同的需求,而且还要考虑不同层次间的关系。向下依赖是逻辑层的主要设计方式,这样的设计方式不但减少了上下层间信息访问的影响程度,也充分利用了软件开发时向下依赖的设计方法,也利用了其本身的耦合程度。而且,系统在进行进一步的开发和研究时不会在原来的基础上做改变,所以,这是一种具有代表性的可抽取式软件结构。
    4.2.3 设计信息系统数据层MVC模型对于数据的处理是属于比较灵活,因为此模型不会依赖控制部件与视图部件的辅助,这样的数据处理方式就更加有利于更新和优化信息系统,使信息系统的工作效率提升到一个新的层次。对于数据库来说,访问层在数据库的工作过程中起到一个很好的稳定数据的作用,因为访问层可以根据用户的各种不同的需求进行不同程度的改进和适应,从而保证数据库的稳定。MVC的模型设计可以与三层的模式之间做到无缝兼容,而且MVC模型的应用还保证了层次和模块之间不会产生较强的依赖性。而且MVC模型中的模型部可以对用户信息以及软件系统的各个数据进行封装,加强了数据的高处理效率和增强了系统的可操作性[8]。
    4.3 数据库的分析与设计数据库简单的说其实就是长期存储的相关数据的集合,但它又不仅是局限于对信息的存储,通过建立数据库,我们可以对数据更好的管理、存储以及查询,而且更为重要的是,我们还可以实现共享数据。数据库中的数据结构表明了具体事务之间的关系。而描述实体类型和实体之间关系的则称之为数据库模型,数据库系统主要包含四种数据模型它们分别是:层次模型、关系模型、网状模型和面向对象模型。所有的数据库系统都有它特有的数据模型。在本系统中,经过对系统数据库的功能特点以及对需求的分析,最终选择关系模型作为本系统的数据模型。[12]
    4.3.1 数据库的概念结构设计概念设计是进行系统设计的一个十分重要的阶段,概念设计主要完成的任务是在深入、详细了解系统的功能以后建立整个系统的概念模型和概念结构,然后将概念模型转换成图形的形式,一般来说,描绘概念模型的方法各式各样,比较常用的图形有ER图、类图等等,这里针对医院管理住院系统进行ER图(实体-联系图)来对整个系统进行展示。
    4.3.2 E-R图E-R 图能够很直观地表示出概念模型。E-R 图之间联系的种类主要有三种情况,分别为一对一(1:1)、一对多(1:N)和多对多(N:M)。
    ER图(实体-联系图)由以下几个固定图形所构成:  

    实体形-矩形表示,矩形内为实体名称
    属性-椭圆形或圆角矩形来表示,主属性的下面要相应的添加下划线
    联系-菱形表示,菱形内部为联系的内容

    通过对医院管理住院系统的认真分析后,确定了以下六个实体,并标注了其各自的属性(一个实体可能有多个属性):
    医生: (编号、姓名、性别、职称、职务、科别、出生日期、工作日期)

    病床: (科别、病床号、床位费、使用状态)

    病人: (科别、病床号、姓名、性别、年龄、病症、主治医生、入院日期、出院日期)

    收费信息: (科别、病床号、病人姓名、收费项目、单价、数量、金额、日期)

    整体系统E-R图

    4.3.3 数据库的实现数据库在物理设备上的存储结构与存取方法被称为数据库的物理结构,它依赖与给定的计算机系统。为一个给定的逻辑数据模型选取一个最合适应用要求的物理结构。根据上面的实体关系分析以及ER图,设计医院管理住院系统的数据库表。
    医生信息表



    主键
    字段名称
    数据类型
    长度(字节)




    *
    编号
    varchar
    50



    姓名
    varchar
    50



    性别
    varchar
    50



    职称
    varchar
    50



    职务
    varchar
    50



    科别
    varchar
    50



    出生日期
    varchar
    50



    工作日期
    varchar
    50



    病人信息表



    主键
    字段名称
    数据类型
    长度(字节)




    *
    科别
    varchar
    50



    病床号
    varchar
    50



    姓名
    varchar
    50



    性别
    varchar
    50



    年龄
    varchar
    50



    病症
    varchar
    50



    主治医师
    varchar
    50



    入院日期
    varchar
    50



    出院日期
    varchar
    50



    病床信息表



    主键
    字段名称
    数据类型
    长度(字节)




    *
    科别
    varchar
    50



    病床号
    varchar
    50



    床位费
    varchar
    50



    使用状态
    varchar
    50



    收费信息表



    主键
    字段名称
    数据类型
    长度(字节)




    *
    科别
    varchar
    50



    病床号
    varchar
    50



    姓名
    varchar
    50



    收费项目
    varchar
    50



    单价
    varchar
    50



    数量
    varchar
    50



    金额
    varchar
    50



    日期
    varchar
    50



    管理员信息表



    主键
    字段名称
    数据类型
    长度(字节)




    *
    管理员姓名
    varchar
    50



    密码
    varchar
    50



    4.3.4 数据库的连接原理医院管理住院系统数据库连接也是开发该系统的关键环节,主要采用JDBC方式,这些知识在太原理工大学开设的JSP课程中有所学习,具体的操作步骤如图4-6所示:

    医院管理住院系统连接数据库的程序采用DAO(数据访问对象)模式来对数据库进行处理操作,其思想如图4-7所示:

    4.4 系统软件结构设计4.4.1 数据流程图数据流程图由四部分构成,它们分别是外部实体、数据处理、数据存储和数据流。










    外部实体
    加工
    数据流



    根据上一章对原有医院管理住院系统流程图的描述,我们从系统的多个方面进行了分析,希望使系统的管理更加合理,在使用中更具有可行性,并且利用模块化的分析办法,由顶层开始向下对医院管理住院系统逐步分层,逐步细化。我们将系统分为顶层、零层两层,下面就层与层之间的关系(系统关联)和每层的功能详细介绍。[9]
    4.4.2 系统顶层图顶层数据流图,即描述医院管理住院系统的作用范围,故其顶层图如图4-8所示:

    4.4.3 系统零层图将整个系统分为医生信息管理模块、病人信息管理模块、病床管理模块等几个大的模块作为系统的零层。各个模块可以单独运行完成它们的功能,各个模块之间又可以相互调用数据,进而完成数据的综合存储,最终共同协作,从而完成系统的预期功能。医院管理住院系统如图4-9所示 :

    4.5 数据字典数据字典是对数据流程图中包含的所有元素的定义的集合,存储了系统所有的数据信息。系统逻辑模型是由数据流程图和数据字典共同构成的,数据流图是动态描述,但数据字典是静态描述。数据字典能够更细致的说明和补充数据流程图的逻辑内容,并且能够供人查阅。数据元素、数据流、数据存储以及处理过程等部分组成了数据字典。[13]
    4.5.1 数据流
    数据流名称:用户登录信息

    别名:无简述:用户登录时填写的信息来源:用户去向:用户登录数据流量:50份/天组成:用户名+密码
    数据流名称:医生信息

    别名:无简述:查看、修改和删除医生信息时显示或填写的信息来源:医生或医生信息的修改、查询和删除去向:医生信息的修改、查询和删除数据流量:30份/天组成:用户名+密码
    数据流名称:病人信息

    别名:无简述:查看、修改和删除病人信息时显示或填写的信息来源:病人信息的修改、查询和删除去向:病人信息的修改、查询和删除数据流量:30份/天组成:用户名+密码
    数据流名称:收费信息

    别名:无简述:查看、修改和删除收费信息时显示或填写的信息来源:收费信息的修改、查询和删除去向:收费信息的修改、查询和删除数据流量:30份/天组成:用户名+密码

    4.5.2 数据流分量
    名称:用户名

    别名:无描述:用户信息中惟一标识某一用户的关键域位置:用户信息表用户登录信息
    名称:密码

    别名:无描述:对用户登录进行验证的关键域位置:用户信息表用户登录信息
    名称:病人

    别名:无描述:病人信息中惟一标识某一病人的关键域位置:病人信息表病人一般信息
    名称:医生

    别名:无描述:医生信息中惟一标识某一医生的关键域位置:医生信息表医生一般信息
    名称:病床

    别名:无描述:病床信息中惟一标识某一病床的关键域位置:病床信息表病床信息
    名称:收费

    别名:无描述:收费信息中惟一标识某一收费情况的关键域位置:收费信息表收费一般情况

    4.5.3 数据存储
    数据存储的名称:数据库信息
    简述:存放的病人信息、医生信息、病床信息、收费信息等 数据存储的组成:各类信息关键字:编号相关联的处理
    P1(对信息表进行录入)P2(对信息表进行查询)P3(对信息表进行修改删除)


    4.5.4 处理
    处理逻辑编号:P03-01

    处理逻辑名称:信息录入简述:对基本信息进行录入.输入的数据流:管理员处理过程:进行分类录入输出的数据流:各类数据表
    处理逻辑编号:P03-02

    处理逻辑名称:查询各类信息简述:根据条件查询所需的信息.输入的数据流:信息来源于数据库处理过程:输入查询条件查询,得到符合条件的信息输出的数据流:查询得到的信息
    处理逻辑编号:P03-03

    处理逻辑名称:修改、删除信息简述:对信息做需要的修改后存入数据库中.输入的数据流:数据库信息处理过程:对需要修改的信息做修改输出的数据流:修改或删除后得到的信息

    4.6 本章小结本章主要介绍了系统的总体设计,首先提出了系统设计的原则,然后分别从数据库的总体和设计、系统软件的结构设计以及数据字典三个方面对系统的设计展开了描述。
    第五章 系统详细设计与实现5.1 程序流程图本文采用的是自顶向下的分层模块设计方法,由于医院住院管理系统分为:医生信息管理、病人信息管理、病床信息管理、收费信息管理、统计分析和系统管理等功能,我们在设计过程中按其功能把它分成不同的模块。
    医院管理住院系统的主模块如图所示:

    5.2 系统登录用户可以在登录页面上登陆。界面如下所示:

    5.3 系统主界面用户登录系统后可以看到系统主界面。

    5.4 医生信息管理进入医院信息管理中后,可以查看医生的编号、姓名、性别、职称、职务、科别、出生日期和工作日期,可以通过对医生姓名的搜索进行医生信息的查询,还可以对医生的信息进行添加、修改和删除。
    医生信息管理图

    医生信息修改图

    医生信息添加图

    5.5 病床管理进入病床信息管理后,可以查看病床的科别、病床号、床位费和使用状态,还可以对病床的信息进行添加、修改和删除。
    病床信息管理图

    病床信息修改图

    病床信息添加图

    5.6 病人信息管理进入病人信息管理后,可以查看病人的科别、病床号、病人姓名、病人年龄、病症、主治医生、入院日期和出院日期,还可以通过对病人姓名的搜索来查看病人的信息,也可以对病人的信息进行添加修改和删除。
    病人信息管理图

    病人信息修改图

    病人信息添加图

    5.7 收费管理进入收费信息管理后,可以查看病人的科别、病床号、病人姓名、收费项目、单价、数量、金额和日期,还可以通过对病人姓名的搜索,来对信息进行查询,也可以对收费信息进行添加、修改和删除。
    收费信息管理图

    收费信息添加图

    收费信息添加图

    5.8 统计分析病床利用率查询图

    收费信息查询表

    5.9 修改密码进入系统管理后,可以对密码进行修改,其具体步骤是首先输入原始密码,然后输入新密码,最后确认新密码即可对密码完成修改,如需退出系统,点击退出系统后即可完成。

    5.10 本章小结本章主要介绍了系统的详细设计与实现,然后从各个模块的不同角度来对它们所要实现的不用功能进行了实现。
    第六章 系统测试系统测试,即是一种为了保证程序的正确性而进行的过程,其主要意义是为了发现错误并改正错误。在这样的定义下软件测试有以下的目的:首先,软件测试是实际上是程序的执行一个过程,这样一个过程的目的在于发现系统中目前尚未发现的错误,而不是证明这段程序的正确而进行的过程。其次,在这样的一个目的下,一个好的系统测试用例是帮助程序员发现系统中隐藏的错误和不易发现的错误。总之,我们进行软件测试要以发现错位为目的进行,而不能以证明这段程序写的对而进行,只要我们发现了一个错误,我们这个测试用例就是一个好的测试用例。由上面测试的定义与目的总结出测试有一下几点原则:

    在系统的开发过程中应当尽早地和不断地进行相应部分的软件测试
    在测试中一个测试用例应由测试输入数据和与之对应的测试预期输出结果这两部分构成
    在设计一个测试用例时,这个测试用例应当包括合理的输入条件以及不合理的输入条件
    测试应该严格执行相应的测试计划,排除测试的随意性
    测试结束时,应当认真保存测试计划、测试用例和测试报告,方便程序员本人和其他程序员进行后期维护[8]

    6.1 系统测试目标医院住院管理系统最终应完成的测试目标:本文应着重于系统的功能测试,测试的对象则是病人和医生,在实现了预定的系统功能及满足用户需求的前提条件下,尽可能地发现并完善系统中的漏洞与隐患,确保软件的实用性、安全性、可靠性、可扩展性以及经济性,为今后的医院住院提供更便捷的方式。[10]
    6.2 测试设计6.2.1 测试用例设计测试用例的设计使用错误推测法、边界值法和等价类划分法等方法。
    6.2.2 测试环境与需求
    测试软件环境:PC 机
    操作系统:Windows 7
    数据库管理系统:Microsoft SQL Server 2005
    开发环境IDE:Microsoft Visual Studio

    测试需求:对系统进行测试采用黑盒测试法,力求找出程序员在逻辑上,功能实现上的的问题,并且验证该程序输出结果是否正常,是否能对错误输入做出正常的响应。
    6.3 测试用例及测试模块6.3.1 测试用例注:测试用例的设计只针对病人信息管理功能子模块
    测试用例表1



    测试用例ID
    TC0001






    测设用例名称
    增加相同科别病床号病人的信息




    产品名称
    医院管理住院系统
    产品版本
    version 1.0


    功能模块
    增加病人信息模块
    测试平台
    所有


    用例入库时间
    2017.5.1
    用例更新时间
    2017.5.1


    测试功能点
    输入相同的科别病床号




    测试目的
    禁止添加相同科别病床号的病人信息




    测试级别
    详细功能测试




    测试类型
    单元测试




    预置条件
    数据库中已经有放射科科别为1病人的完整信息




    测试步骤
    1.输入相应的信息,科别为放射科病床号为1病人的完整的信息 2.按“添加”按钮




    预期结果
    系统拒绝添加




    测试结果
    系统无法添加放射科病床号为1的病人信息




    测试用例表2



    测试用例ID
    TC0002






    测设用例名称
    成功修改病人信息




    产品名称
    医院管理住院系统
    产品版本
    version 1.0


    功能模块
    修改病人信息模块
    测试平台
    所有


    用例入库时间
    2017.5.1
    用例更新时间
    2017.5.1


    测试功能点
    先查询要修改的病人信息,然后进行修改




    测试目的
    成功修改病人信息




    测试级别
    详细功能测试




    测试类型
    单元测试




    预置条件
    数据库中有相应的要修改的病人信息




    测试步骤
    1.输入科别+姓名或者病床,查询到要修改的病人信息 2.点击“修改”按钮,对要修改的病人信息进行修改




    预期结果
    病人信息修改成功




    测试结果
    系统可以成功对病人信息进行修改并保存




    测试用例表3



    测试用例ID
    TC0003






    测设用例名称
    成功删除病人信息




    产品名称
    医院管理住院系统
    产品版本
    version 1.0


    功能模块
    删除病人信息模块
    测试平台
    所有


    用例入库时间
    2017.5.1
    用例更新时间
    2017.5.1


    测试功能点
    先查询要修改的病人信息,然后进行删除




    测试目的
    成功删除病人信息




    测试级别
    详细功能测试




    测试类型
    单元测试




    预置条件
    数据库中有相应的要删除的病人信息




    测试步骤
    1.输入科别+姓名或者病床,查询到要删除的病人信息 2.点击“删除”按钮,删除相应的病人信息




    预期结果
    相应病人信息被删除




    测试结果
    系统可以成功删除所要删除的病人的信息




    注:测试用例的设计只针对医生信息管理功能子模块
    测试用例表4



    测试用例ID
    TC0004






    测设用例名称
    增加相同科别编号医生的信息




    产品名称
    医院管理住院系统
    产品版本
    version 1.0


    功能模块
    增加医生信息模块
    测试平台
    所有


    用例入库时间
    2017.5.1
    用例更新时间
    2017.5.1


    测试功能点
    输入相同的科别编号




    测试目的
    禁止添加相同科别编号的医生信息




    测试级别
    详细功能测试




    测试类型
    单元测试




    预置条件
    数据库中已经有放射科编号为1医生的完整信息




    测试步骤
    1.输入相应的信息,科别为放射科编号为1医生的完整的信息 2.按“添加”按钮




    预期结果
    系统拒绝添加




    测试结果
    系统无法添加放射科编号为1的医生的信息




    测试用例表5



    测试用例ID
    TC0005






    测设用例名称
    成功修改医生信息




    产品名称
    医院管理住院系统
    产品版本
    version 1.0


    功能模块
    修改医生信息模块
    测试平台
    所有


    用例入库时间
    2017.5.1
    用例更新时间
    2017.5.1


    测试功能点
    先查询要修改的医生信息,然后进行修改




    测试目的
    成功修改医生信息







    测试级别
    详细功能测试




    测试类型
    单元测试


    预置条件
    数据库中有相应的要修改的病人信息


    测试步骤
    1.输入科别+姓名或者病床,查询到要修改的医生信息 2.点击“修改”按钮,对要修改的医生信息进行修改


    预期结果
    医生信息修改成功


    测试结果
    系统可以成功修改医生的信息,并对其进行保存



    测试用例表6



    测试用例ID
    TC0006






    测设用例名称
    成功删除医生信息




    产品名称
    医院管理住院系统
    产品版本
    version 1.0


    功能模块
    删除医生信息模块
    测试平台
    所有


    用例入库时间
    2017.5.1
    用例更新时间
    2017.5.1


    测试功能点
    先查询要修改的医生信息,然后进行删除




    测试目的
    成功删除医生信息




    测试级别
    详细功能测试




    测试类型
    单元测试




    预置条件
    数据库中有相应的要删除的医生信息




    测试步骤
    1.输入科别+姓名或者编号,查询到要删除的医生信息 2.点击“删除”按钮,删除相应的医生信息




    预期结果
    相应医生信息被删除




    测试结果
    系统可以成功删除医生的信息




    6.3.2 测试模块及案例注:此处有效等价类以当前创建表为标准,即我个人电脑中数据库中的内容。
    数据库中病人信息表中的信息为:

    病人信息测试表



    输入数据
    有效等价类
    无效等价类




    姓名
    (1)汉字(上表中的数据)
    (2)字母 (3)数字 (4)除表中以外的汉字 (5)空






    用例编号
    依次输入
    期望结果
    覆盖
    实际结果




    1
    张三
    通过验证,显示病人信息
    1
    查询成功


    2
    ZHANGSAN
    不通过验证
    2
    查询失败


    3
    数字
    不通过验证
    3
    查询失败


    4
    张强
    不通过验证
    4
    查询失败


    5

    不通过验证
    5
    查询失败




    查询医生信息的测试



    输入数据
    有效等价类
    无效等价类




    姓名
    (1)汉字(上表中的数据)
    (2)字母 (3)数字 (4)除表中以外的汉字 (5)空






    用例编号
    依次输入
    期望结果
    覆盖
    实际结果




    1
    李四
    通过验证,显示医生信息
    1
    查询成功


    2
    LISI
    不通过验证
    2
    查询失败


    3
    数字
    不通过验证
    3
    查询失败


    4
    张强
    不通过验证
    4
    查询失败


    5

    不通过验证
    5
    查询失败



    6.3.3 系统性能测试功能测试是为了某种的最基本需求,性能测试的目的是保证系统正常运转的关键一环。如表6-9所示:



    测试内容
    测试要求
    测试结论




    对用户界面的控件以及数据接口的正确性进行测试
    能不能使客户满意
    通过


    测试设计的界面是不是受到人们的喜爱
    突出信息,设计新颖、风格一致
    通过


    测试系统操作是否简单
    使客户使用起来比较方便
    通过


    对网络的安全性进行测试
    在这个系统中安全软件能不能正常运转,这个系统能不能对不良信息进行过滤,防止不好的软件窃取它的信息。
    通过


    测试数据安全性
    系统的数据要做到加密,外来的用户不能够进入这个系统获取这些数据。
    通过


    性能测试压力测试
    能够协助人们进行办公。
    通过


    并发测试
    当系统增加用户的时候,系统会产生什么样的反应,会不会出现卡顿的情况。
    通过


    稳定性测试测试系统的稳定性
    长时间处在运行的状态下,系统能不能保证一直处在一种比较好的运行状态。
    通过


    测试系统的可靠性
    当进入这个系统的人过多时,这个系统能不能正常运行。
    通过


    兼容性测试测试
    这个系统能不能在不同的环境、操作系统以及浏览器上能不能正常工作。
    通过


    功能性测试
    系统上的功能能不能满足医院需要的所有的功能。
    通过



    6.4 缺陷分析经过测试,该程序中没有严重影响系统运行的错误,没有功能缺陷,也没有不影响运行但必须修改的错误。
    测试模块都具有较好的交互性,出现错误可以提示用户哪里出错,使用户可以及时修改。
    6.5 测试结果从最终整体的实际运行效果来看,医院管理住院系统在实际的运行中达到了我们的最初设计目标,可以实现所有原先所预期得功能,满足了用户的需求。并且系统操作起来非常简单,十分易于管理,管理人员可以很容易掌握,再加上系统具有很高的安全性、可靠性和扩展性,完全能够达到医院所要求的各项指标,有效的提高了医院的工作效率和管理水平。
    6.6 本章小结本章主要介绍了系统测试方面的内容,并且通过测试进行了缺陷分析,并且得出了测试结果。
    第七章 结束语7.1 体会与收获这一段时间的毕业设计使我收获颇多,在指导老师张泽华老师的帮助下,一步步的对整个项目进行了开展。从一开始的无从下手,然后慢慢地对系统的不断的分析和理解,直到最后对思路逐渐的清晰。当遇到一些困难时,会感觉有些迷茫,不知道从何写起;当一步一步把困难解决了以后,就会觉得豁然开朗,自己也收获了很多知识。在论文经过一次次的修改,逐步成型以后,自己也很有成就感。同时,我也在思考,毕业设计的完成预示着即将就要毕业了,踏入社会的大讲堂,开始了又一个人生的新旅程。因此,我应该对毕业设计做一个总结,画上一个完整的句号。其总结主要有以下几点:

    首先要做到的是准备充分,要明确自己的想法,而不是一上来就开始动手。选定题目和根据所选择的题目去做需求分析两者所用的时间应当是总开发时间的三分之一。只有充分了解自己的选题,把任务要求等一系列问题搞清楚,才可以做到事半功倍。在整个设计中,系统编码的完成所需要的时间并不会占用多少,占用大量时间的工作是搜集所需的资料和分析系统的设计
    在设计系统的过程中,具体功能的实现要做到灵活,具备可扩展性。在设计的初期,许多设想都是不够合理的,必须得经过一次次的修改,这就需要初始框架具备可拓展性。在功能实现方面,要结合实际的情况,不要过分拘泥于单一的模式,要做到灵活、方便和快捷
    整个设计对我影响最深刻的一点就是要善于发现问题,善于提出问题。我们在大学四年的时间里,更多地接触的是理论性的知识,在实际的设计中,我们对于一个项目,要不断在其中寻找问题,并去解决它,只有这样,才可以把它设计的更加的完美,更好的适应市场的需要

    通过这次毕业设计,不仅把大学四年的理论知识重新复习巩固了一遍,而且也积累了一定的实际操作经验。在不断改正新问题的过程中,让我学会了要不断地去坚持,只有一次次的改正,才能把系统做得更加完善。同时也明白了,在设计的过程中,不仅仅要把课本上的知识看明白,还要具备一定的思维能力和动手实践能力,要把学到的知识灵活运用,才能够满足在设计过程中不同的需求。
    7.2 不足由于是第一次独自完成一个程序的设计,在很多方面都有一定的不足,思维不够全面,往往一个模块的实现需要进过很多次的修改,才可以把所想实现的功能全部的实现。在实现过程中,对于一些的功能的合理性并不能完全的把握到位,导致有时候会犹豫不决。而且,对一些大学所学到的知识产生了遗忘,需要不断的查阅课本知识,还有一些知识,自己并没有接触过,导致在完成的过程中会感到一些茫然。
    7.3 今后的发展方向在今后的学习中,要注重在平时对于知识的积累,理论是实践的基础,只有积累了一定的理论知识,才可以为后续的实践作出保障。还要注重对于自己思维能力的培养,在遇到问题时,不能选择逃避,要全面的思考出整个问题的解决方法。当然最重要的是要培养自己的动手能力,只有把自己的想法赋予实践,把真正想要的东西做出来,才是最重要的。
    结论本文主要研究的工作有如下几点:

    首先根据研究的课题进行深入的分析,了解清楚本系统的背景以及实现本系统的原因以及目的。根据所了解的内容确定出开发系统所需要采取的开发工具和实现方式
    对系统进行需求分析和可行性研究,通过分析,确定出系统所要完成的具体问题,以及所要达到的具体效果
    通过对整个系统的总体设计,绘制出系统的E-R图和流程图,确定出数据字典中所包含的具体信息
    最后通过对系统的详细设计,完成系统最终的实践
    为了测试出系统中所存在的缺陷,最终还进行了软件测试

    在对整个系统的实现过程中,由于经验的缺失以及能力的局限性,一些功能的实现存在一定的不合理性,距离真正的运用还存在一定的距离,这就需要自己不断地完善知识,掌握更多的方法和技巧,逐步完善本系统,争取让它达到市场的需要。
    参考文献[1] 周苏. 王文. 软件工程学教程[M]. 北京: 科学出版社, 2002
    [2] 萨师煊. 王珊. 数据库系统概论[M]. 北京:高等教育出版社, 2003
    [3] 张海藩. 软件工程导论[M]. 北京: 清华大学出版社, 2003
    [4] 赵松涛. 中文版SQL Server 2005应用及实例集锦[M]. 北京: 人民邮电出版社,2005
    [5] 宣小平. 但正刚,张文毅. JSP数据库系统开发实力导航[M]. 北京:人民邮电出版社, 2003
    [6] 李明生. 试论医院医学知识管理[J].中华医院管理杂志,2002.
    [7] 曾长军. 朱剑锋,刘坤. SQL Server 数据库原理及应用[M] . 人民邮电出版社,2005.2.
    [8] 朱少民. 软件测试[M].人民邮电出版社,2009.8.
    [9] 徐敬. JSP架构下基于Web的信息管理系统框架研究[J]. 硅谷, 2015(1):84-85.
    [10] 王英龙. 张伟,杨美红. 软件测试技术[M]. 清华大学出版社,2009.
    [11] 张海藩. 软件工程[M]. 清华大学出版社,2010.6.
    [12] 许家珆. 曾翎. 软件工程—-理论与实践[M].北京:高等教育出版社,2005.34.211.
    [13] 周典,陈伯钧. 医院知识管理与技术创新[D].中华医院管理杂志,2003.
    [14] 赵增敏. JSP动态网页设计[M]. 北京: 电子工业出版社, 2003.
    [15] Roger S-Pressman.Software Engineering[M].New Delhi:Tata McGraw-Hill PublishingCompany Ltd,2006.
    [16] C Kirkrgaard,A Ller.Static analysis for java servlets and JSP[M].International Conference on Static Analysis,2006.
    [17] A Steelman,J Murach.Murach’s Java Servlets and JSP,2nd Edition[M].Mike Murach&Associates,2008.
    2 评论 45 下载 2020-07-29 11:00:25 下载需要15点积分
  • 基于JAVA EE和豆瓣API实现的电影评论网站

    摘 要本网站通过对网上最新的热点影片的分门别类,采取简洁、直观的方式让观看者体验到前所未有的舒适感,通过对网站界面布局,信息采集,会员管理,观看者的互动等功能的规划来实现崭新的视听环境。
    本网站提供的电影资源和内容完全抓取自豆瓣,对来自豆瓣的数据进行处理,以更好的方式展示在用户面前,让用户尽快能找到自己需要的内容,并且对大多数电影提供下载地址。
    采用Java语言进行编写,使用Mysql数据库,SpringMVC + Hibernate进行后端开发。使用Jsp + Html + JavaScript + Bootstrap进行前端开发。
    关键字:电影, 影评, 豆瓣电影, 抓取、Java、Mysql
    AbstractThis website classification the latest online hot movies, usingsimple and intuitive way to provide unprecedented comfort experienceto the viewers. Through out the website interface layout, information collection, membership management,viewers interactive functions suchas planning to implement new audiovisual environment.
    The resources and content of the movies on the website aretaken from Douban Movie,deal with the data and display them in a better way infront for the users,so that the users can find the content they want as soon aspossible,and download links are provided for most of the movies.
    Using Java language and Mysql Database, SpringMVC + Hibernate for the back-end development, and Jsp + Html + JavaScript + BootStrap for the front-end development.
    Keywords:movie, movie review,Douban movie, Spiders crawling, Java,Mysql
    1 绪 论1.1 研究目的电影是一种表演艺术、视觉艺术及听觉艺术,利用胶卷、录像带或数字媒体将影像和声音捕捉起来,再加上后期的编辑工作而成。电影的奥秘它能够借由其影像表现出现实世界之丰富,而其本身任然停留在影像。电影是现在人们休闲的重要方式之一。电影里面往往都是:爱情、友情、生活、生命、现在、未来,不管是真实的、还是虚幻的,几乎每一部电影都能把一些种子植入你的大脑中,指不定哪天就发芽了。真的把一部部电影看进去了,它解决的绝对不是你的孤独、无聊。它会让你对生活有了新的看法,甚至会改变你人生的轨迹。
    在科技高速发展的今天,人们的日常生活、工作、学习等活动,越来越依赖于网络。在物质生活过剩的今天,追求精神生活,就是很大一部分人对生活的定义。而从最早的黑白无声电影开始,通过一代又一代的影视大师的演绎,电影也成为了人们生活中必不可少的精神食粮。喜欢看电影的人很依赖电影网站,电影网站能提供热映电影、历史电影、电影分类、电影推荐、电影评论等内容。
    1.2 发展概况随着时代的发展,如雨后春笋般的出现了很多的电影网站,可是质量却是参差不齐。很多的电影类型的网站,在商业环境的影响下,通过在各大门户网站挂外链,采取非常规手段刷关键字等各种各样的方式,在网站推出的短时间内达到一个惊人的“浏览量”,而很多并不知情的网友们,恰恰就是通过判断这种“浏览量”来决定自己平时观看电影的时候所使用的网站。这就使得现如今能够适应国内平民家庭的电影评论网站或多或少都存在这样那样的安全问题,所以一个拥有简洁的界面,并且初期投入不多,拥有井井有条的内容,以及新鲜网站主题的电影类网站的出现就会大大的抓取广大电影爱好者的眼球。
    1.3 开发工具的选择1.3.1 IDE选择IntelliJ IDEA是一种商业化销售的Java(Integrated Development Environment,IDE)工具软件,由捷克软件公司JetBrains在2001年1月时推出最初版。IntelliJ IDEA被认为是当前Java开发效率最快的IDE工具。它整合了开发过程中实用的众多功能,几乎可以不用鼠标可以方便的完成你要做的任何事情,最大程度的加快开发的速度。简单而又功能强大。与其他的一些繁冗而复杂的IDE工具有鲜明的对比。本网站开发IDE选择IDEA。
    1.3.2 操作系统选择代码部署在Linux机器上。
    1.3.2.1 免费的操作系统Linux是开源免费的操作系统,任何机构和个人都能自由的查看Linux的底层源码,并自由的修改和再发布。免费意味着零成本,无需购买任何licence,开发和部署都不需要花一分钱。
    1.3.2.2 软件优势Linux内置GCC、VI、Mysql等强大的编程软件和工具以及强大的命令行支持,你仅需几行命令就能完成一系列的工作。同时市面上的编程软件和工具几乎都对Linux支持最好,而在其它平台如windows可能支持不太好,甚至完全没法使用。
    1.3.2.3社区支持开源的解决方案几乎都是最先基于Linux的,Linux有最强大的社区支持,几乎你遇到的任何问题都能在社区上找到答案,你所需要做的事情就是放心折腾,出现麻烦Google一下,或者去社区发帖求助,问题就能迎刃而解。
    虽然Java是跨平台的语言,但Linux对Java提供了最好的支持。以最少的资源消耗,最方便的操作,优雅的完成你所需要的做事情。
    1.3.3 Web容器选择Web容器采用Nginx和Tomcat
    1.3.3.1 Jsp容器采用TomcatApache Tomcat是Apache基金会来发和维护的椅子Servlet容器,支持Servlet和Jsp,是世界上使用最广泛的Web容器。Tomcat的主要目的是实现JavaServlet API和执行Java Servlet构建动态网站。还可以使用Tomcat作为一个常规的HTTP服务器,静态页面,但这不是它的主要目的。Tomcat的Servlet引擎通常与Apache或者其他Web服务器一起工作。除了用于开发过程中的调试以及那些对速度和事务处理只有很小要求的用户,很少会将Tomcat单独作为Web服务器。但随着版本的更新,正有越来越多的用户将其单独作为Web服务器用以那些对速度和可靠性有较高要求的环境中。
    1.3.3.2 静态资源、反向代理服务器采用NignxNginx是HTTP反向代理服务器,邮件代理服务器,和通用的TCP代理服务器,相较于Apache、lighttpd等传统的HTTP Server具有占有内存少,稳定性高等优势。很多繁忙的网站都运行在Nginx上。与传统的服务器相比,Nginx并不依赖线程来处理请求。相反,它使用一个更加可伸缩的事件驱动架构(异步)。此体系结构占用的资源少但是负载巨大。即 使你不希望处理成千上万的同步请求,你仍然可以受益于Nginx的高性能和小内存占用。
    自2004年发布以来,Nginx一直专注于高性能、高并发性和低内存的使用。拥有大量的Web服务器功能,如负载平衡、缓存、访问和带宽控制等,并且能够有效地集成各种应用程序。目前Nginx是互联网上第二流行的开源Web服务器。
    1.3.4 数据库本论文网站数据库采用Mysql 。MySql是世界上最流行的开源数据库,Mysql完美支持高性能和可伸缩的网络和嵌入式数据库应用程序。由于Mysql可靠性好、性能高、成本低,吸引了很多开发者。大部分网站都使用Mysql,比如Google、Facebook等世界顶级的网站。
    1.3.5 编程语言编程语言采用Java Java是一种计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。Java是最流行的语言之一,国内外大型互联网公司大多使用Java。
    1.3.6 编程框架1.3.6.1 Bean管理使用Spring FrameworkSpring Framework是一个开源的Java开发框架,它提供了一个全面的现代Java企业应用程序编程和配置模型——在任何类型的部署平台。使用SpringFramework,你可以专注于应用程序的业务逻辑,没必要关心特定的部署环境,也省去了大量复杂的帮助类和配置文件。基于控制反转(IOC)的配置管理让应用程序的组建开发变得更为简洁方便。Spring核心支持依赖注入、事务管理、Web应用程序、数据访问、消息传递等。Spring Framework能与市面上绝大部分的主流Java框架进行无缝集成和兼容。
    1.3.6.2 MVC框架使用SpringMVCSpring框架是一个流行的开源应用程序框架,它可以使Java EE开发变得更容易。它由一个容器,一个框架来管理组件,包含一组Web用户界面管理,事务和持久性。Spring Web MVC是Spring框架是的一部分,是一个用来创建Web应用程序的可扩展的MVC框架。
    Spring Web MVC框架提供了模型-视图-控制器体系结构和组件,可以用来开发灵活、松散耦合的Web应用程序。MVC模式可以分离应用程序的不同方面(输入逻辑、业务逻辑和UI逻辑),同时提供这些元素之间的松散耦合。
    1.3.6.3 Dao层使用HibernateHibernate是一个开源的Java持久性框架项目。执行强大的对象关系映射,使用HQL和SQL进行数据库查询。Hibernate是一个伟大的Java ORM映射工具。它可以减少大量的SQL操作带来的复杂性,并且对于SQL知识有限的开发者来说,带来了巨大的方便。
    Hibernate是一个纯Java对象关系映射和持久性框架,允许你使用XML配置文件或者注解将普通旧式Java对象映射到关系数据库表。使用Hibernate项目可以节省大量的开发时间,因为整个JDBC层都是由框架在管理。这意味着您的应用程序的数据访问层将依赖于Hibernate,完全是从底层数据模型中抽象出来。
    Hibernate有许多超过其他类似的对象-关系映射方法优点,Hibernate开放源码,免费使用,正在很多成熟的商业项目中广泛使用,并且有一个非常活跃的社区论坛。
    2 系统分析2.1 主要功能
    一共有两个角色:评论人和管理员
    评论人可以在网站中进行账号注册
    评论人可以对电影进行简短评论、打分
    管理员上传电影的画报、各类简介信息
    网站根据某种规则自动统计、计算每部电影的分数情况
    网站自动生成电影的排行榜
    网站可以根据电影的年份或分数情况对电影进行自动排序

    2.2 方案论证2.2.1 设计原理
    网站界面:在界面上不追求奢华或者繁杂的功能,只追求两个字:“简洁”,通过干净的首页、功能、观看页面,让观看者体会到舒适的观看环境。
    功能实现:通过判断登陆权限,以不同的身份登陆到网站,分为网站管理员以及会员。管理员拥有对节目单表的增删改查等操作,并且对网站内电影有简单的处理功能,意在对网站进行管理与维护;会员则区别于游客,登陆会员之后,可以对电影进行影评或与管理员交流等操作。
    内容多样:通过管理员对信息的掌握程度以及采集速度的保证,每天进行更新内容的操作,并且通过挑选分类,精心的编排到各个模块。最好是用爬虫自动采集信息。

    2.2.2 方案选择
    资源来源:电影的信息一定要有稳定的来源,需要考察豆瓣电影API。
    爬取策略:由于电影资源需要定期更新,需要设定爬虫的爬取策略。
    自动化处理:对爬虫爬来的数据要进行自动化分类、处理,方便展示在页面上。
    评分规则制定:因为电影需要根据评分排序,需要制定一个评分规则。
    角色界定:系统需要根据用户不同的角色(访客、普通用户、管理员)来展示不同的界面。
    电影分类:需要根据电影年份、类别等分类。

    2.3 基本思路2.3.1 网站UI的思路UI,对于设计者来说,可以算是最简单的地方;但对于用户一个良好的用户界面非常重要,普通用户根本不会关心你的界面时怎么实现的,他所关心的是UI是否美丽、大方、好看。如果一个网站的UI不好看,可能用户根本没有用下去的心思了。本网站使用Bootstrap作为UI框架,简单优美。
    2.3.2 获取资源的思路通过豆瓣电影API https://developers.douban.com/wiki/?title=movie/_v2 ,制定合适的抓取策略,获得所需要的资源。
    2.3.3 权限控制思路网站分为管理员和前台用户,必须得根据权限来展示不同的界面和功能。可以利用Java注解来实现。注解可以看成是一个接口,注解实例就是一个实现了该接口的动态代理类。注解大多是用做对某个类、方法、字段进行说明,标识的。以便在程序运行期间我们通过反射获得该字段或方法的注解的实例,来决定该做些什么处理或不该进行什么处理。
    2.4 主要问题设计网站时,主要有以下几个方面的问题要解决:如何设计网站的界面;如何提高丰富的内容;如果较为方便的筛选内容;如何提供下载地址。
    2.5 网站要求本网站要求能适配绝大部分浏览器,并且有较快的响应速度。
    3 系统设计3.1 概要设计3.1.1 系统结构图针对上面的需求分析,我们把整个系统分成三个模块:

    Model:实现数据抓取,数据处理等功能。View:实现网站的界面布局和接收用户响应。Controller用来接收view层的响应,转发给model层。
    以下就是系统结构图如图3-1-1所示:

    3.1.2 系统组件图构件是系统中遵从一组接口且提供其实现的物理的、可替换的部分。构建图显示构建与构建之间的相互关系。构件图是对系统物理方面建模的两个图之一。如图3-1-2 所示是系统的构件图:

    3.1.3 系统界面设计系统界面主要有正在热映、分类、注册、登陆。
    3.2 详细设计3.2.1 版面设计系统的界面是由由html+css来完成的,一个软件的成功与否,不仅在于软件本身的效率、稳定性、用户界面(UI)也是一项非常重要的因素。
    HMTL是用来表述网页的一种语言。HTML文档=网页
    HTML 标记标签通常被称为 HTML 标签 (HTML tag)。Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容。
    <html> 与 </html> 之间的文本描述网页 <body> 与 </body> 之间的文本是可见的页面内容 <h1> 与 </h1> 之间的文本被显示为标题 <p> 与 </p> 之间的文本被显示为段落
    3.2.2 功能设计主要有正在热映、分类、排行、注册、登陆。

    首页:首先进入的是首页,首页展示正在热映的电影的海报和概要信息,点击可以进入具体电影的详情页。
    注册、登录:网站发布评论需要先注册和登录,注册时候需要限制用户用户名格式。
    分类:需要根据条件去筛选电影和排序,并根据关键字搜索。

    4 系统实现4.1 创建系统外观界面根据网站的需要设计网页,主要分为首页、注册、登陆、分类等界面,有公共的头部和尾部。用Html+Css+Bootstrap实现。
    4.2 获取图片功能的实现为了增加响应速度,图片从豆瓣上抓取下来,上传到七牛云。
    public static void uploadToQiniu(String from, String subjectId) { String to = BUCKET_NAME.concat(":").concat(subjectId); String encodeFrom = EncodeUtils.urlsafeEncode(from); String encodeTo = EncodeUtils.urlsafeEncode(to); String url = "http://iovip.qbox.me/fetch/" + encodeFrom + "/to/" + encodeTo; Mac mac = new com.qiniu.api.auth.digest.Mac(QiniuUtils.ACCESS_KEY, QiniuUtils.SECRET_KEY); Client client = new DigestAuthClient(mac); CallRet ret = client.call(url);}
    4.3 根据条件排序和筛选功能的实现可以根据电影年份、地区、类型、关键字进行筛选,按照热门、评分、上映日期进行排序:
    public List<Subject> listBySearch(int start, int end, String year, String place, String type, String sort, String key) { Criteria criteria = getCurrentSession().createCriteria(Subject.class); if (!year.contains("不限")) { criteria.add(Restrictions.eq("year", new Short(year))); } if (!place.contains("不限")) { criteria.add(Restrictions.like("countries", "%".concat(place).concat("%"))); } if (!type.contains("不限")) { criteria.add(Restrictions.like("genres", "%".concat(type).concat("%"))); } if (sort.equals("rating")) { criteria.addOrder(OrderBySqlFormulaUtils.sqlFormula("totalRating / ratingCount desc")); } else if (sort.equals("date")) { criteria.addOrder(Order.desc("pubDate")); } else if (sort.equals("hot")) { criteria.addOrder(Order.desc("commentCount")); } if (StringUtils.isNotEmpty(key)) { criteria.add(Restrictions.disjunction() .add(Restrictions.like("title", "%".concat(key).concat("%"))) .add(Restrictions.like("originalTitle", "%".concat(key).concat("%"))) .add(Restrictions.like("casts", "%".concat(key).concat("%"))) .add(Restrictions.like("directors", "%".concat(key).concat("%"))) .add(Restrictions.like("writers", "%".concat(key).concat("%"))) ); } criteria.setFirstResult(start); criteria.setMaxResults(end); return criteria.list();}
    4.4 基于注解的权限认证网站需要区分管理员和普通用户,判断是否登陆等,来展示不同界面和功能:

    可以继承springmvc的HandlerInterceptorAdapter,然后拦截每个请求,判断是否有@LoginRequired或者@AdminRequired的注解,如果有,记录下当前uri(base64 URLEncoder之后),然后401到登陆界面,登陆成功后再跳回来。可以在一个需要验证的Controller class上写上@LoginRequired,然后整个Controller的所有method都会去做权限验证。可以用@FreeAccess 去排除不需要的的method。
    代码如下:
    public class AuthenticationFilter extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod method = (HandlerMethod) handler; FreeAccess freeAccess = method.getMethodAnnotation(FreeAccess.class); if (freeAccess != null) { return true; } boolean adminRequired = AnnotationUtils.findAnnotation(method.getBean().getClass(), AdminRequired.class) != null || method.getMethodAnnotation(AdminRequired.class) != null; boolean loginRequired = AnnotationUtils.findAnnotation(method.getBean().getClass(), LoginRequired.class) != null || method.getMethodAnnotation(LoginRequired.class) != null || adminRequired; if (loginRequired && !checkLogin(request)) { String url = request.getRequestURI(); String queryString = request.getQueryString(); if (StringUtils.isNotEmpty(queryString)) { url = url + "?" + queryString; } url = new String(Base64.encodeBase64(url.getBytes())); url = URLEncoder.encode(url); //如果是ajax请求响应头会有,x-requested-with if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) { response.setHeader("sessionStatus", "timeout");//在响应头设置session状态 return false; } response.setStatus(401); String redirectUrl = "/login?redirect=" + url; response.sendRedirect(redirectUrl); return false; } if (adminRequired && !checkAdmin(request)) { response.setStatus(403); response.sendRedirect("/403"); return false; } return true; } public boolean checkLogin(HttpServletRequest request) { return ContextUtils.getSessionUtils(request).getUser() != null; } public boolean checkAdmin(HttpServletRequest request) { User user = ContextUtils.getSessionUtils(request).getUser(); if (user == null) { return false; } else { return user.isAdmin(); } }}
    4.5 根据权限来展示界面用户的评论有删除功能,只有用户本人和管理员才能删除评论。扩展Jsp的tag来实现这个功能。
    public class SecurityTagHandler extends SimpleTagSupport { @Setter private String userId; @Override public void doTag() throws JspException, IOException { SessionUtils sessionUtils = getSessionUtils(); if (null == sessionUtils) { return; } User currentUser = sessionUtils.getUser(); if (null == currentUser) { return; } if (currentUser.isAdmin() || currentUser.getId().equals(userId)) { getJspBody().invoke(null); } return; } /** * 获取当前的SessionUtils * * @return */ private SessionUtils getSessionUtils() { JspContext jc = getJspContext(); Object sessionUtils = jc.getAttribute(ContextUtils.SESSIONUTILS, PageContext.SESSION_SCOPE); if (sessionUtils != null && sessionUtils instanceof SessionUtils) { return (SessionUtils) sessionUtils; } return null; }}
    在页面下添加删除按钮:
    <mv:securityTag userId="${comment.userId}"> <button type="button" class="close btn-danger delete_comment" data-dismiss="alert" value="${comment.id}"> </button></mv:securityTag>
    只要满足对应权限的用户才能删除评论。
    4.6 定时更新正在热映电影每天零点定时更新正在热映电影列表,用Spring注解来实现定时任务。
    @Scheduled(cron = "0 0 0 * * ?") //每天零点执行一次public void renewPlaying() { String id; List<Playing> playingList; String responseBody = HttpClientUtils.get(DoubanServiceImpl.DOUBAN_PLAYING_URL); JSONObject jsonObject = new JSONObject(responseBody); JSONArray jsonArray = jsonObject.getJSONArray("entries"); int length = jsonArray.length(); logger.debug("{} movies are playing", length); playingList = new ArrayList<>(length); for (int i = 0; i < length; i++) { id = jsonArray.getJSONObject(i).getString("id"); doubanService.find(id); playingList.add(new Playing(id)); } playingDao.renew(playingList);}
    4.7 前后端认证对用户输入的数据要进行前后端验证,防止用户在数据库中插入非法数据。

    前端用Js + 正则表达式来验证。
    function checkLoginName() { var jqCtrl = $("#txt_loginname"); var loginName = $.trim(jqCtrl.val()); if (!loginName) { jqCtrl.focus(); return false; } var ret = clientValid.validate("LoginName", jqCtrl.val()); if (!ret.success) { jqCtrl.focus(); tool.tooltip(jqCtrl, ret.comment, null, true); return false; } //server validation $.getJSON("checkUserName", {userName: loginName}, function (data) { if (!data.success) { jqCtrl.focus(); tool.tooltip(jqCtrl, data.comment, null, true); return; } }); return true;}

    后端用hibernate-validator来实现。
    /** * Validation constraints for loginName * 限制登录名不能为手机号或者邮箱地址 * * @author veryyoung */@Pattern(regexp = "^(?!(([1][3|5|8][0-9]{9})|([\\\\w-]+(\\\\.[\\\\w-]+)*@[\\\\w-]+(\\\\.[\\\\w-]+)+)))([0-9a-zA-Z_\u4E00-\u9FBF]+)", message = "用户名为数字字母或汉字,不能为手机号或邮箱")@NotNull(message = "用户名不能为空")@Size(min = 2, max = 30, message = "用户名长度需为2-30位")@Constraint(validatedBy = {})@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface UserName { String message() default "{common.loginName}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};}用这个注解来修饰UserName,然后验证的时候只需要try { getValidatorWrapper().tryValidate(user); userService.create(user);} catch (InvalidException ex) { logger.error("Invalid User Object: {}", user.toString(), ex); modelAndView.addObject("error", ex.getMessage()); return modelAndView;}
    5 系统运行5.1 首页进入首页显示的是正在热映的电影的海报和简要信息,点击能进入对应电影的详情页。

    5.2 详情页详情页能看到该电影的详细信息,并且提供了豆瓣链接和下载链接,同时下面有五条短评,可以在该节目发布评论,也可以点击链接查看所有评论。如果是管理员或评论作者,可以删除该评论。

    5.3 评论页评论页提供了所有评论(翻页实现)。

    5.4 发布评论在电影详情页和评论页都可以对电影进行评论。

    5.5 分类页分类页可对电影进行搜索、分类、排序,方便更快的找到需要的信息。

    5.6 注册&登录页发布评论需要注册&登录。

    5.7 个人中心页个人中心页可以查看用户发布的所有评论,如若有权限可以删除评论

    结束语从最开始确定要写个电影网站,到这个网站的整体完成。我从中学到了不少知识与编程技巧。这为我将来的工作积累了一笔财富。毕业设计是我们对知识运用能力的一次全面的考核,也是踏上社会前最后一个专业项目。从接受课题到系统的完成,到论文的编写,每个过程都有很多的收获。
    虽然这个系统还不是很成熟,还比较简陋,但我可以很自豪的说,我是很认真的在写每一行代码,这个系统里的每一个细节我都了如指掌,收获很多,感触很多。
    系统不足:现在网站资源还很少,大部分电影都没有,很多资源都要实时从豆瓣获取,这无疑会拖慢网站的速度,可以制定抓取策略把豆瓣大部分电影都抓取过来,然后做更优雅的展示。
    致 谢四年的大学生活就快走入尾声,伴随着这篇毕业论文的落笔,我四年的本科大学生活也即将画上了句号。回忆这大学四年生活的滴滴点点,美好的大学生活的过往,一切都是历历在目,让人非常留恋,思绪万千。
    非常感谢我的同学们。当我在毕业设计过程中遇到困难和问题时,他们给我提出非常多的建议和意见,使我对整个系统有了总体的思路,并耐心的帮我解决了很多技术上的难题,让我毕设的过程轻松了不少。
    最后,我要特别感谢指导老师。老师在我们毕业的最后关头给了我重要的鼓励和帮助,从课题的选定到开题报告,任务书,整个系统的完成,论文的编写,格式以及内容的检测,老师全程参与进来,并提出了重要的意见和建议,老师严谨的科研精神和认真负责的工作态度都给我树立了正确的榜样,在此表示衷心的感谢。
    这是第一次写真正意义上的论文,马上要踏入企业工作了,希望这篇论文不会是学术思考的终点。
    参考文献[1] 【法】克里斯蒂安▪梅茨编著,《电影的意义》[M], 江苏:江苏教育出版社, 2005
    [2] 【德】齐格弗里德•克拉考尔编著 ,《电影的本性》[M], 江苏:江苏教育出版社, 2006
    [3] 罗刚/王振东编著,《自动动手写网络爬虫》[M], 北京:清华大学出版社, 2010
    [4] 【美】Bruce Eckel编著,《Java编程思想》[M], 机械工业出版社, 2005
    [5] 【美】Baron Schwartz 编著,《高性能Mysql》[M], 电子工业出版社, 2010
    [6] 【美】皮克编著,《Hibernate Quickly》[M], 人民邮电出版社, 2005
    [7] 【美】艾里特编著,《精通Hibernate》[M], 机械工业出版社, 2009
    [8] 周志明编著,《深入理解Java虚拟机》[M], 机械工业出版社, 2011
    [9] 【美】Jon Bentley编著,《编程珠玑》[M], 人民邮电出版社, 2008
    [10] 《编程之美》小组编著,《编程之美》[M], 电子工业出版社, 2008
    [11] 【美】鲍斯维尔编著,《编写可读代码的艺术》[M], 机械工业出版社, 2012
    [12] 子柳编著,《淘宝技术这十年》[M], 电子工业出版社, 2013
    [13] 郭欣编著,《构建高性能Web站点》[M], 电子工业出版社, 2009
    [14] 【美】Cal Henderson 编著,《构建可扩展的Web站点》[M], 电子工业出版社, 2008
    [15] 【美】Eric S. Raymond 编著,《UNIX编程艺术》[M], 电子工业出版社, 2006
    [16] 【美】Martin Fowler 编著,《重构》[M], 中国电力出版社, 2003
    6 评论 98 下载 2018-10-01 22:25:53 下载需要16点积分
显示 0 到 15 ,共 15 条
eject