分类

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

资源列表

  • 基于C#实现的电影院售票管理系统

    一、引言1.1选题背景随着互联网和电子商务的快速发展,网上购物已经成了现代人生活中很重要的一种方式,如:数码产品、生活用品、化妆品护肤品等,只要是人们需要到的东西,基本都可以在网上购买。除了购买各种物品,现代人的生活也不再向过去一样单调,除了学习和工作之余,人们的娱乐生活也逐渐丰富,最普遍的娱乐休闲方式之一就是到电影院看电影,那么传统的电影订票窗口显然已经不能满足人们的需要了,所以开发一个电影院网上订票系统是非常必要和可行的。以前传统的电影票订票方法是去电影院的购票窗口查看电影的上映时间、场次、可选座位等信息再进行购票,人们往往需要排队才能买到电影票,这样不仅浪费了人们宝贵的时间,而且电影院工作人员的工作量也很大,对于这种低效率、浪费时间的事情,完全可以以网上购票的方式来改变。
    为了提高劳动的效率、节约成本、提高服务质量,我们小组开发了此款系统,用以方便影院的售票和客户的购买,通过这个系统,可以很快的实现会员注册、登录、购票,后台管理员可以新增影片、排片等基本操作。
    二、需求分析2.1 用户需求需要在网上购买电影票的用户可使用本系统,进行会员的注册登陆之后可以进行网上查询电影、购买电影票等操作,省去了去电影院实体窗口排队买票的繁 琐程序。
    2.2 系统功能分析
    新用户的注册、登录,用户数据能存在后台数据库中
    电影的录入、删除、查询、修改
    电影的排片
    管理员查询会员级别等信息
    会员查询影片信息
    会员购买电影票

    2.3 条件与限制系统可以实现一些基本的购票功能,但系统较简单,尚存在很多缺陷,不能实现完善和全面的功能。
    缺陷:

    首先要使用admin进行登录才能开始注册会员
    购票后无法查看购票信息
    不可以支持选座
    购票时不能通过搜索影片名字等来查找影片

    三、模块设计3.1 系统流程图系统流程图如图一所示:

    系统功能图如图二所示:

    3.2 系统使用指南对于用户
    首先,系统使用者先通过admin登录,进入到新用户注册页面,以管理员的身份为用户注册一个新的会员账号,已注册好的账号密码自动保存在后台数据库中,用户下次可以直接使用已注册的会员账号登录本系统进行电影的查询、购票等操作。
    对于管理员
    首先,管理员可以为新用户注册不同级别的会员账号、查看会员的信息。其次,管理员可在系统后台做电影的录入、删除、查询、修改等基本操作,除此之外,添加好影片后可以对电影进行的排片。
    四、数据库设计及实现4.1 系统E-R图E-R图如图三所示:

    4.2 逻辑结构设计(关系数据库设计)
    顾客(Cus、CusCard、CusType、CusTel(key))
    登陆(UserName、UsePwd、UserType)
    电影(Mname(key)、MBZ、MLanguage、MTYPE、MDirector、MACT、MTime)
    排片(MName(key)、MPrice、MRoom、Mcount、MTime、MBRQ、MERQ)
    上映(ID(key)、MName、MPrice、MRoom、MCount、MTime、MRQ)
    购票(PID(key)、Cname、GPCount、GPJE、MName、SYRQ、FYT、GPRQ、CZY)

    4.3 数据库主要代码及触发器会员信息
    CREATE TABLE [dbo].[Cus]( [CusTel] VARCHAR(50) NOT NULL PRIMARY KEY, [CusName] VARCHAR(50) NOT NULL, [CusCard] VARCHAR(50) NULL, [CusType] VARCHAR(50) NULL)
    触发器
    SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[InsertULogin] on [dbo].[Cus]after insertasdeclare @username varchar(50)declare @userpwd varchar(50)select @username=CusTel from inserted select @userpwd= right(CusCard,6) from inserted insert into ULogin values(@username,@userpwd,'C')
    购票信息
    CREATE TABLE [dbo].[GP]( [PID] VARCHAR(50) NOT NULL PRIMARY KEY, [CName] VARCHAR(50) NOT NULL, [GPCount] INT NULL, [GPJE] FLOAT NULL, [MName] VARCHAR(50) NULL, [SYRQ] VARCHAR(50) NULL, [GPRQ] VARCHAR(50) NULL, [CZY] VARCHAR(50) NULL, [FYT] VARCHAR(50) NULL)
    触发器
    SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[UpdatePP] on [dbo].[GP]after insertasdeclare @MName varchar(50)declare @SYRQ varchar(50)declare @count intselect @MName= MName,@SYRQ=SYRQ,@count=GPCount from inserted update MovieSY set mcount=mcount-@count where MName=@MName and MRQ=@SYRQ
    电影信息
    CREATE TABLE [dbo].[Movie]( [MName] VARCHAR(50) NOT NULL PRIMARY KEY, [MLanguage] VARCHAR(50) NOT NULL, [MDirector] VARCHAR(50) NULL, [MAct] VARCHAR(50) NULL, [MName] INT NULL, [MBZ] VARCHAR(255) NULL, [MType] VARCHAR(50) NULL)
    上映信息
    CREATE TABLE [dbo].[MovieSY]( [ID] INT NOT NULL PRIMARY KEY, [MName] VARCHAR(50) NOT NULL, [MRoom] INT NULL, [MCount] varchar(50) NULL, [MName] INT NULL, [MTime] VARCHAR(50) NULL, [MRQ] VARCHAR(50) NULL)
    排片信息
    CREATE TABLE [dbo].[PP]( [MName] VARCHAR(50) NOT NULL PRIMARY KEY, [MPrice] INT NOT NULL, [MRoom] VARCHAR(50) NULL, [MCount] INT NULL, [MTime] VARCHAR(50) NULL, [MBRQ] VARCHAR(50) NULL, [MERQ] VARCHAR(50) NULL)
    触发器
    SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[InsertPP] on [dbo].[PP]after insertasdeclare @MName varchar(50)declare @BRQ varchar(50)declare @ERQ varchar(50)declare @MTime varchar(50)declare @MRoom varchar(50)declare @MPrice intdeclare @MCount intdeclare @MBRQ datetimedeclare @MERQ datetimedeclare @RQ varchar(50)select @MName= MName,@BRQ=MBRQ,@ERQ=MERQ,@MTime=MTime,@MRoom=MRoom,@MPrice=MPrice, @MCount=MCount from inserted set @MBRQ=CONVERT (datetime,@BRQ)set @MERQ=CONVERT (datetime,@ERQ)while @MBRQ<=@MERQbegin set @rq=CONVERT(varchar(50), @MBRQ, 112)insert into MovieSY values(@MName,@MPrice,@MRoom,@MCount,@MTime,@RQ) set @MBRQ=DATEADD(DAY,1,@MBRQ)endCREATE TABLE [dbo].[MovieSY]( [UserName] VARCHAR(50) NOT NULL PRIMARY KEY, [UserPwd] VARCHAR(50) NOT NULL, [UserType] VARCHAR(50) NULL)
    五、系统设计与实现5.1系统开发环境
    硬件环境

    Intel Pentium 166MHz或以上;内存:需要至少512MHZ;
    软件环境

    运行于Windows2010版的操作系统之上;SQL Server2008数据库;Visual Studio2013;

    5.2 功能模块
    输入功能模块
    查询显示功能模块
    查询、售票功能模块
    登录、注册功能模块

    5.3 系统主要页面展示登录、注册页面

    登陆后的页面

    会员注册页面

    会员信息查询页面

    添加影片页面

    查询修改影片页面

    排片页面

    “排片”页面通过连接数据库,可以搜索影片的名字、导演、主演来选择影片,再输入票价,放映大厅,座位数,放映时间等信息,最后确认排片。
    购票页面

    购票页面通过对获得的已经被排片的电影进行选择而进行购票这一操作。在购票前需填入购票数量、联系电话,系统会自动计算合计金额。之后点击购票按钮则能进行购票操作。但一旦购票成功则不能进行退票操作,也不能查看所购买的电影票。
    数据库页面

    六、主要特色6.1 系统实用性系统首先可以进行新用户的注册,用户数据能存在后台数据库中。管理员可以进行电影的录入、删除、查询、修改,添加好影片后进行电影的排片。退出登录后再使用之前注册的会员登录,可以购买电影票。
    6.2 突出优势和特色(创新点)
    购票时可以看到影片的导演、主演等信息
    用户分为钻石用户,白金用户和普通用户,对用户进行了分类

    7 小结数据库技术课程设计是一次对课堂所学知识的灵活应用,是理论知识与实践的相结合。经过了一周的课程设计,本系统基本达到了当初的设计要求,设计上也基本合理。我们不仅对数据库系统的认识更加深入,同时也掌握了面向实体的系统分析的基本方法,对VS也有了新的认识,也知道了要有坚持不懈,不惧困难的精神,才能取得成功。一个简单的系统,每一个细节都需要在实践中去挖掘并进行进一步的修改完善。本次课设让我们受益匪浅,在分析问题以及解决问题等方面的能力有所提高,也是一次很好的同学之间交流合作的机会。数据库技术的用途很广,还有很多值得我们学习,希望今后能有更多这样的机会。
    16 评论 241 下载 2019-01-01 21:08:08 下载需要18点积分
  • 基于JSP和Mysql的城市公交查询系统的设计与实现

    摘 要近年来, Internet推动了以互联网技术为核心的各项工作蓬勃展开,互联网的强大也大大的促进了社会的发展,整个社会信息化进程逐步加快,网络也变成了我们日常活动中越来越重要的组成成分。为了使得我国公交乘客出行及查询有关信息更方便,本文运用JAVA语言技术,Jsp技术,Mysql数据库开发了B/S结构的城市公交查询系统。
    该系统顺应了时代发展且具有以下优点:首先,方便乘客的出行,乘客不用询问站牌工作人员如何倒车,便可到达目的地。其次,乘客在网上就可以查询到公交公司发布的路况信息,以便提早做好换乘准备节约出行时间。最后,本系统可以节约人力资源,以往的站牌附近要安排公交公司的工作人员来帮助不熟悉的乘客,有了公交查询系统提前上网查询便可知道。
    关键词:B/S架构;JAVA;Mysql;JSP
    AbstractIn recent years, Internet promoted the work of Internet technology as the core of the Internet booming, powerful also greatly promoted the development of the society, the information process of the society gradually accelerated, network has become an increasingly important component of our daily activities. In order to make our bus passengers travel and query information more convenient, this paper uses the JAVA language technology, Jsp technology, Mysql database to develop the B/S structure of urban public transport query system.
    The system complies with the development of the times and has the following advantages: first of all, to facilitate passenger travel, passengers do not ask the stop sign, how to reverse the staff, you can reach the destination. Secondly, passengers can inquire about the traffic information issued by the bus company in order to save the travel time. Finally, the system can save human resources, the bus stop near the bus station staff to help passengers who are not familiar with, with a public transport inquiry system, advance access to the Internet will be able to know.
    Key words: B/S architecture; JAVA; Mysql; JSP
    1 绪论1.1 选题背景随着低碳生活的普及,人们更倾向于低碳环保的出行方式,完善公交系统无疑具有重要意义。公交是居民日常生活中最常使用的交通工具之一,伴随着我国经济繁荣和城市人口增长,出行工具的选择也变得越来越重要。政府在公共交通方面的投入正在逐步加大,使得城市内、城乡间的公交系统更加完善,原来的公交线路不断更新,居民们接收到的信息滞后,出行变得很不方便。纸质公交指南时效性低且不方便使用者查询。本系统加入了浏览器查询、自动更新等功能完善系统使居民的出行更加方便快捷。
    1.2 国内外发展状况除了杭州,上海等几个城市的居民可以通过电子站牌了解公交车的行驶情况外,其它城市需要乘公交出行的居民获取公交实时信息几乎是不可能的。我国许多城市都有一些颇具设计感的公交站台,但我们却很难在这里找到我们出行需要的信息。因此,居民想要找到“静态线路信息”或者“动态实时信息”都感到十分困难。
    有了权威的交通信息发布机构才能确保乘客获得信息的时效性,而迄今为止我国大多数城市还没有有关的管理机构和相关法律法规。随着居民对于公共交通出行的需求越来越大,本文基于信息技术和管理理论建立了管理信息系统。从提高居民生活水平的角度看,将计算机管理信息系统应用于我们的日常生活中是时不我待的。所以我的毕业论文选择了公交车查询系统,就因为他是一个较为贴近生活的一个问题,并且如果开发出来,则可以很大的方便乘客查询相关的公交信息,为自己的出行制定良好的乘车计划。
    1.3 选题的目的近年来,我国的城市发展速度之快,道路修缮之完善令很多市民的非常吃惊,城市的范围在不断扩大,随之公交线路的铺设也在随时进行,作为当代的大学生,每学期从学校回到自己的故土,是否发现自己的家乡在经历着一些变化,一时间连自己家乡的方位都有些晕头转向,更何况是那些外地的打工者或是来当地旅游的游客他们未尝不是这样,询问当地的市民看似是一种好办法,但是遇到倒车频繁,路途偏远,也怕是心有余而力不足,所以一个好的,便捷的,用户体验好的公交查询系统甚是重要,想去什么地方把他们输入进去,一目了然,想途径什么地点自己也可随意的查看,也不用因为自己解释不清楚或听得不清楚引起不必要的绕远。我设计的系统不仅包括了站点,公交线路的查询,还包括了公告发布和在线提问功能,让市民实时掌握城市的公交动态,方便他们的出行。
    1.4 研究手段及意义1.4.1 研究方法本研究课题设计的公交查询系统客户端模块,主要工作有:

    亲身体验了解客户需求,进行相关的需求分析
    根据需求分析和设计的本系统的框架
    根据框架结构的设计,制结构图
    编写相关的开发技术文档
    编写代码
    对系统进行单元测试

    1.4.2 技术路线本文涉及的系统基于B/S(Browser/server,浏览器/服务器),该模式采用了多种技术,在所有平台下都能顺畅地运行。
    1.4.3 意义近年来,我国经济发展迅速,城市建设也越来越完善。随着人口的增加,城市交通压力也在不断加大,公共交通与居民的生活息息相关,同时对于经济发展有着不容忽视的影响。虽然公共交通快捷且客运量大,但是公交信息的更新却跟不上公交系统发展壮大的步伐,居民难以获得及时的信息造成耽误出行。因此,创建一个方便的的公交信息查询系统,包含浏览器查询,实现中心控制、自动更新等功能,将极大地提升居民的出行体验。
    2 相关技术简介2.1 Jsp技术介绍JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。 JSP是一种Java servlet,主要用来运行Java web的使用者界面。开发者通过使用HTML代码、XHTML代码、XML元素和嵌入JSP操作编写JSP。JSP技术使用web表单得到用户自定义数据、通过数据库和其他数据库资源,接着动态地建立网页。JSP标签有各种各样的功能,像访问数据库、记载用户采取的信息、造访JavaBeans组件等,不仅如此在各种网页中对信息的传达和共用。
    JSP程序通过Java的编程语言,对动态网页进行封装。根据tags和scriptlets,网页对存在于服务端的资源的应用逻辑的造访也是可以的。JSP将网页逻辑与网页设计和显示分隔开,对可重新利用的基于组件的设计进行支持,更易于对基于Web的应用程序进行开发。
    JSP以及Servlet ,在服务器上运行的,一般将运行后的html文本返送给客户端,仅仅在客户端的浏览器就能显示。先运行调用JSP页面的代码,然后在Web服务器送回的JSP文件的结果中碰到的HTML代码送回到客户端。Java程序段来运行数据库,重定向页面可以插入页面和动态页面的功能需要被新建。运用标记和编程语言技术形成动态生成的网页时,将形成逻辑处理包。
    Java Servlet 是JSP的技术根本,并且很多的Web应用程序的设计都要有Java Servlet和JSP的共同合作。JSP简单易用,完全的面向对象,不仅平台无关性还有安全可靠,这些都是继承了java技术。
    从JSP出世后,很多的企业都设立JSP技术的服务器,像IBM、Oracle、Bea这些企业,也让JSP快速变为商业应用的服务器端语言。JSP和 Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java 2 platform Enterprise Edition)应用体系中的一部分。Servlet与 CGI很相似,它是HTML程序和后台隔离开的。它们的开始原理也差不多,都是服务器接到客户端的指令后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process),而Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(Parent Thread)来实现资源共享,这样就减轻了服务器的负担,所以,Java Servlet可以用来做大规模的应用服务
    JSP技术的优点:

    一次编写,到处运行:除了系统之外,代码无需做任何改动
    系统的多平台支持:一般可以在所有情况下的平台上进行设计,可以放在所有情况下进行发展。相比ASP/.net来说,优点是显而易见的
    强大的可塑性:根据一个小的Jar程序能够对Servlet/JSP进行操作,也能根据不少的服务器进行集群和负载平衡,而且可以根据多个Application处理问题。单个服务器到多个服务器,Java表现了一个创造性的能力
    拥有多元化的工具:Java现有的很多设计方法中许多工具不需要成本,其中大部分均可以在各平台中顺利进行
    支持服务器端组件:web的运行需要强大的服务器支持,因此为了完善系统的可操作性,开发者应当在使用web时加入其它工具,JSP能够利用 JAVA BEANS 组件来展示出各式各样的商务功能
    内部对象表现出:request 用户端请求,这个请求会包括来自GET/POST请求的参数; response网页传回用户端的反应;管理pageContext 网页的属性;session 与请求相关的会话;application servlet正在进行的内容;out 用来输送响应的输出流; config 代码片段配置对象;page JSP网页本身

    2.2 MyEclipse简介MyEclipse是基于Eclipse进行插件合成,最终形成功能强大的开发软件。目前主要用于JAVA,JAVAEE的开发,也可以用于移动应用的开发,其主要特点是功能强大,应用广泛,并且支持很多开源的产品,应用前景非常广发。
    MyEclipse是由Eclipse通过对插件的集成而来,是对IDE的拓展,可以用来开发网页等应用,可以实现程序的开发,调试,发布等,能极大的提高开发效率,能完美支持HTML、STRUTS等,可以说集成后的MyEclipse包含了当前所有主流的开源产品。MyEclpise也经历了很多代的产品,从最开始的到后来的2014版本,2015版本等都说明了它在发展历程中的变化。
    MyEclipse的配置使用也非常智能,不需要使用者懂太多的知识,只需要在自己使用的功能中进行了解即可,在完成项目开发之后,也可以直接通过MyEclipse进行项目部署,可以将网页项目进行选中,直接运行在Tomcat中,也可以将项目打包通过导出功能将项目全部导出,然后将项目发布到tomcat中,通过对配置文件的设置安排项目,之后进行查看。可以说,有了MyEclipse之后,基本就能支持所有的web开发,就能使用快捷的编译工具进行快速的开发,也能在各种各样的服务器上进行代码测试。在其他方面,MyEclispe也有很多的开发前景,比如在云开发领域,在移动端开发领域,在企业级开发领域等等,因此,MyEclipse的应用场景非常的广泛。
    2.3 数据库技术数据库的设计是研究数据库及其应用系统的技术,是数据库在应用领域中主要的研究课题。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效的存储数据,满足各种用户的应用需求(信息要求和处理要求)。一个信息系统的各个部分能否紧密的结合在一起以及如何结合,关键在数据库。因此只有对数据库进行正确的概念设计、合理的逻辑设计以及有效的物理设计才能开发出完善而高效的信息系统。数据库设计是信息系统的开发和建设的重要组成部分。
    2.3.1 数据库的体系结构数据的体系结构分成三级:内部级(Internal),概念级(Conceptual)和外部级(External)。这个三级结构有时也称为“三级模式结构”。

    外部级:最接近用户,是单个用户所能看到的数据特性。单个用户使用的数据视图的描述称为“外模式”
    概念级:涉及到所有用户的数据定义、是全局的数据视图。全局视图的描述称为“概念模式”
    内部级:最接近于物理存储设备,涉及到实际数据存储的结构物理存储数据视图的描述称为“内模式”

    数据库的三级模式结构是数据的三个抽象级别。它把数据的具体组织留给DBMS去做,用户只要抽象地处理数据,而不必关心数据在计算机中的表示和存储,这样就减轻了用户使用系统的负担。
    2.3.2 数据库管理系统(DBMS)数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统。DBMS是数据库系统的核心组成部分。对数据库的一切操作,包括定义、查询、更新及各种控制,都是通过DBMS进行的。
    在不同的计算机系统中,由于缺乏统一的标准,即使同种数据模型的DBMS,它们在用户接口、系统功能方面也常常是不相同的。
    用户对数据库进行操作,是由DBMS把操作从应用程序带到外部级、概念级、再导向内部级,进而操作存储器中的数据。DBMS的主要目标,是使数据作为一种可管理的资源处理。
    DBMS的主要功能为:

    数据库定义功能:DBMS提供数据定义语言(DDL)定义数据库的三级结构,包括外模式、概念模式、内模式及基相互之间的映象,定义数据的完整性、安全控制等约束。因此,在DBMS中应包括DDL的编译程序
    数据库的操纵功能:DBMS提供数据操纵语言(DML)实现对数据库中数据的操作。基本的数据操作分成两类:检索、更新
    数据库的保护功能:数据库中的数据是信息社会的战略资源,对数据的保护是至关重要的大事
    数据库的恢复功能:在数据库被破坏或数据不正确时,系统有能力把数据库恢复到正确的状态
    数据库的并发控制:DBMS的并发控制子系统能防止错误发生,正确处理好多用户、多任务环境下的并发操作
    数据库的完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作
    数据库的安全性控制:防止未经授权的用户蓄谋或无意地存取数据库中的数据,以免数据的泄露、更改或破坏
    数据库的存储管理:把各种DML语句转换成低层的文件系统命令,起到数据的存储、检索和更新的作用
    数据库的维护功能:数据装载程序、备份程序、文件重组织程序、性能监控程序
    数据字典:数据库系统中存放三级结构定义的数据库称为数据字典(DD)。对数据库的操作都要通过访问DD才能实现,通常DD中还存放数据库运行时的统计信息

    2.3.3 Mysql数据库MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。MySQL AB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。

    MySQL是一种数据库管理系统:数据库是数据的结构化集合。它可以是任何东西,从简单的购物清单到画展,或企业网络中的海量信息。要想将数据添加到数据库,或访问、处理计算机数据库中保存的数据,需要使用数据库管理系统,如MySQL服务器。计算机是处理大量数据的理想工具,因此,数据库管理系统在计算方面扮演着关键的中心角色,或是作为独立的实用工具,或是作为其他应用程序的组成部分
    MySQL是一种关联数据库管理系统:关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大的仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL指得是“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言,它是由ANSI/ISO SQL标准定义的。SQL标准自1986年以来不断演化发展,有数种版本。在本手册中,“SQL-92”指得是1992年发布的标准,“SQL:1999” 指得是1999年发布的标准,“SQL:2003” 指得是标准的当前版本。我们采用术语“SQL标准”标示SQL标准的当前版本

    MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的优点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适用于Web站点或者其他应用软件的数据库后端的开发工作。此外,用户可利用许多语言编写访问MySQL数据库的程序。作为开放源代码运动的产物之一,MySQL关系数据库管理系统越来越受到人们的青睐,应用范围也越来越广。速度和易用性使MySQL特别适用于Web站点或应用软件的数据库后端的开发工作。
    该数据库是数据和数据库对象的集合,包括表数据库对象是指(表) ,视图(View ),存储过程(存储过程)和触发(触发)等。
    数据库通过SQL(Structured Query Language)来对数据进行操作和管理,这里包括一些基本的操作如select、delete、insert、update语句。ADO ( ActiveX数据对象)是微软的数据库应用程序开发和数据库访问技术。数据库访问接口,来自不同数据源的数据。 ADO封装了很多的程序中使用的OLE DB访问接口的COM接口,它是技术的高级别访问。在数据库管理系统和接口如图2-1所示的原则。 MySQL是一个小型关系型数据库管理系统,它的快速,多线程,多用户。可以与网页文件一起方便地放在网站的目录中的MySQL数据库文件,正是由于此类特点,网站开发的数据库支持技术通常采用MySQL数据库。使用图形化的管理工具的数据库管理。
    JSP MyAdmin是一个用JSP编写的、基于Web的、跨平台的MySQL管理程序,支持简体中文,使用Web浏览器作为管理界面。通过JSPMyAdmin可以进行绝大部分的MySQL操作,包括对数据库级操作,表级操作,以及数据管理等。

    2.3.4 MySQL特点特性
    可以处理拥有上千万条记录的大型数据
    支持常见的SQL语句规范
    可移植行高,安装简单小巧
    良好的运行效率,有丰富信息的网络支持
    调试、管理,优化简单(相对其他大型数据库)
    支持多种操作系统,这意味着在一个操作系统中实现的应用可以很方便地移植到其他的操作系统下
    MySQL的核心采用完全的多线程编程
    算法优化查询SQL,切实提高搜索速度

    2.3.5 MySQL数据库应用环境相对于其他主要数据库如Oracle,DB2,SQL Server,MySQL有自己的缺点,如,如有限MySQL集群,是一个相对贫穷的效率,但它并没有降低它的声誉。一般的个人消费者和中小型企业,非常的适用MySQL数据库,不仅因为其实一个开源的软件而且体积小、速度快、总体拥有成本低,这也是使用者考虑的范畴之一。
    目前,互联网的结构来最流行的网站上的LAMP(Linux操作系统,Apache+ MySQL的+ PHP)使用的操作系统,如Linux操作系统,Apache Web服务器,服务器端脚本解释器的MySQL数据库, PHP等四个免费软件或开源软件,因为,可持续和可以创建一个免费的网站系统(劳动力成本),所以你的花费不大。
    2.4 JAVA概述Java非常适合于企业网络和Internet环境,现在已成为Internet中最受欢迎、最有影响的编程语言之一。面向对象主要有四大特性:封装、抽象、继承和多态。

    封装:在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属性,同时也具有eat(),sleep()等行为,我们在行为中实现一定的功能,也可操作属性,这是面向对象的封装特性
    抽象:抽象就是将一类实体的共同特性抽象出来,封装在一个抽象类中,所以抽象在面向对象语言是由抽象类来体现的。比如鸟就是一个抽象实体,因为抽象实体并不是一个真正的对象,它的属性还不能完全描述一个对象,所以在语言中体现为抽象类不能实例化
    继承:继承就像是我们现实生活中的父子关系,儿子可以遗传父亲的一些特性,在面向对象语言中,就是一个类可以继承另一个类的一些特性,从而可以代码重用,其实继承体现的是is-a关系,父类同子类在本质上还是一类实体
    多态:多态就是通过传递给父类对象引用不同的子类对象从而表现出不同的行为,多态可为程序提供更好的可扩展性,同样也可以代码重用

    2.5 J2EE技术J2EE 技术,即Java 2平台企业版(Java 2 Platform Enterprise Edition),是一种B/S模式的体系结构,是利用 Java技术简化企业应用系统开发、管理和部署等复杂问题的一套完整的体系结构。该技术由SUN公司推出,基于Java 2平台,它继承了Java语言方便、灵活、跨平台等优势,还提供了对EJB(Enterprise Java Bean)、Java Servlets、JSP(Java Server Pagers)、XML 、API等技术的支持,从而即降低了开发多层应用系统的难度和复杂性,又提供了对现有应用系统的强大支持。
    J2EE技术一般分为四个层级:客户层、WEB表示层、业务逻辑层、数据层(EIS)。如下图2-2所示。


    客户层:可以包括瘦客户端、胖客户端,用户可以与该层进行交互作用,是系统的用户界面,可以呈现出适当的视图,收集查询,显示最终结果,是用户在本地所使用的最后的模型成品
    Web表示层:接收客户层组件的要求,处理请求,然后将请求路由到业务层的适当组件;接受业务层传來的结果,计算一个适当的视图,然后将视图路由到对应客户端
    业务逻辑层:这一层由若干运行在EJB容器下的EJB组件和应用服务器组成。EJB封装了业务逻辑,应用服务器提供了JDBC技术,来访问数据库
    数据层(EIS): 将前端业务逻辑层的组件与后端数据库层连接起来,收集好的信息放在该层,供用户访问

    Web表示层和业务逻辑层是给 J2EE 发布工作任务的层次,主要是通过服务器完成工作。这两层是 J2EE 的核心层次。
    2.6 B/S结构B/S框架是目前被广泛采用的一种先进的框架结构,它是一种基于互联网的程序架构。当前的使用已经非常广泛,突破了传统的C/S结构的模式,给程序开发的模式带来新的技术革命。它是随着互联网技术的不断发展而发展起来的。随着互联网技术的不断发展,各种信息网站已经不能单独在一台电脑上使用和运行了,所以基于互联网的模式就逐步的发展起来了,并且得到了大规模的应用。
    B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易。
    B/S架构不需要在任何客户端来进行进行程序的部署,使用这样的程序结构来使用开发好的系统是利用浏览器来使用的,就是把开发好的程序配置到一台远程服务器上,在任何可以访问这台服务器的客户端电脑上都可以对程序进行操作和使用,这样的方式给使用者带来了极大的便捷。这样的结构提高了程序的运行效率,打破了地域的限制,降低了程序的使用成本。
    对于我的城市公交查询系统,我们可以把系统配置在远程的服务器上,在得到访问权限之后,只要能够上网就可以使用和访问该系统并进行相关的操作,这样的一种先进模式我们之后只需要对服务器上的程序进行维护即可保证程序的正常使用,大大的提高了工作效率,降低了维护的成本。
    C/S与B/S 区别:

    硬件环境不同:B/S 建立在广域网之上的,不必是专门的网络硬件环境,例如电话上网,租用设备,信息自己管理。有比C/S更强的适应范围,一般只要有操作系统和浏览器就行
    对安全要求不同:C/S 一般面向相对固定的用户群,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S 结构适宜。可以通过B/S发布部分可公开信息。 B/S 建立在广域网之上,对安全的控制能力相对弱,可能面向不可知的用户
    对程序架构不同:C/S 程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。B/S对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上。比C/S有更高的要求 B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk2000,Exchange2000等,全面支持网络的构件搭建的系统.SUN和IBM推的JavaBean构件技术等,使 B/S更加成熟
    软件重用不同:C/S 程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好。B/S 面对的多重结构,要求构件相对独立的功能,能够相对较好的重用,就如买来的餐桌可以再利用,而不是做在墙上的石头桌子
    系统维护不同:C/S 程序由于整体性,必须整体考察,处理出现的问题以及系统升级。升级难,可能要再做一个全新的系统。B/S 构件组成,方面构件个别的更换,实现系统的无缝升级。系统维护开销减到最小,用户从网上自己下载安装就可以实现升级
    处理问题不同:C/S 程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关,应该都是相同的系统。B/S 建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的. 与操作系统平台关系最小
    用户接口不同:C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高。B/S 建立在浏览器上,有更加丰富和生动的表现方式与用户交流。并且大部分难度减低,减低开发成本
    信息流不同:C/S 程序一般是典型的中央集权的机械式处理,交互性相对低

    B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化,更像交易中心。
    2.7 Tomcat服务器Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP[15]程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 服务器部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 服务器时,它实际上作为一个与Apache 独立的进程单独运行的。
    当配置正确时,Apache 为HTML页面服务,而Tomcat 服务器实际上运行JSP 页面和Servlet容器。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat服务器的默认模式。不过,Tomcat服务器处理静态HTML的能力不如Apache服务器。目前Tomcat服务器最新版本为8.0.0。
    Tomcat 服务器运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能。因此利用Tomcat服务器作为集群服务器管理系统的Web应用服务器。
    2.8 Web技术网络对人类生活的影响是革命性的。它改变了人们传统的生活方式,有了网络人们可以从众多的信息中搜索,然后找到自己想要的部分;无论何时何地人们都可以通过网络与朋友取得联系,通过网络可以坐在家里就能够认识来自世界各地的陌生人,还可以登陆网上银行或在网上购物,足不出户就可以货比三家。
    网络的快捷是大家有目共睹的,只要几秒种的时间就可以把一封电子邮件发送到大洋彼岸。可以让处在地球上不同角落的人在同一时间收到同一条讯息,这种传递信息的方式可以让消息的传送者与接收者之间能够及时进行互动,快捷的信息交流的方式服务了全人类。
    网络是非常自由的,在网络上人人都是平等的,无论是什么身份什么地位的人都有权力发表自己的观点和看法,做自己想做的事情,不必有所顾忌,不用在乎对方的职位、年龄。
    创新性是网络的另一特性。每一项技术的发展都离不开创新,网络技术的发展也是如此。不断创新是网络之所以始终保持旺盛的生命力的根本,这种创新性也让我们不断地接收新的观念,学习新的技术,从而引导我们更好地去发展我们社会。
    Web技术提供了下面的优点:

    一个提供了很好的用户体验,让用户能很容易地完成任务,并利用了设备本地的一些性能
    一个web应用提供了丰富的视觉体验,又不会分散人的注意力;它注重美学,使用和本地应用一样的设计模式,又不失易用性
    一个web应用非常注重用户的交互、参与和完成任务,而不是让他们仅仅浏览网页。应用程序是自包含的(self-contained),也即用户不用导航到其他站点或者应用来完成任务

    3 系统需求分析3.1 需求分析软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。通过对应问题及其环境的理解与分析,为问题涉及的信息、功能及系统行为建立模型,将用户需求精确化、完全化,最终形成需求规格说明,这一系列的活动即构成软件开发生命周期的需求分析阶段。
    需求分析是介于系统分析和软件设计阶段之间的桥梁。一方面,需求分析以系统规格说明和项目规划作为分析活动的基本出发点,并从软件角度对它们进行检查与调整;另一方面,需求规格说明又是软件设计、实现、测试直至维护的主要基础。良好的分析活动有助于避免或尽早剔除早期错误,从而提高软件生产率,降低开发成本,改进软件质量。
    3.1.1 设计的原则
    可用性原则:开发此系统本着以方便乘客查询准确的公交信息和方便用户对公交系统合理安排调度为原则
    可靠性原则:必须为管理员和用户提供安全的服务,尤其是要保证从 Internet 上可以访问到的后台用户管理,公交信息管理等功能的安全性
    友好性原则:使城市公交信息查询系统的操作上要求简单方便,便于用户和管理员掌握
    可维护性原则:能够对用户提出的相关的需求对该软件进行相关的修改和维护

    3.1.2 系统设计目标
    分析国内外公共交通建设及公交查询的研究现状和特点,简述学者在公交网络路径算法研究的发展历程
    分析系统的需求。研究乘客出行的心理和行为,包括乘客获取公交信息的 途径、关注的信息、出行的考虑因素等,从用户角度分析得到系统需要完成的目标 和功能
    设计系统的总体框架。介绍系统的开发环境和流程,从总体上设计系统的 功能,根据系统功能划分子模块,并详述每部分需要完成的功能,设计数据库
    查找了解现有公交查询系统的网络路径最优算法。分析城市的公交线路特点,通过对地理公交网络的抽象,建立了公交网络的路径模型,并在此模型基础上,探讨了公交网络的最优路径算法
    详述系统的设计与实现过程。对系统各模块的具体实现和结果给出了清晰的说明,以拟定的路线为实验数据,给出了查询的结果分析
    总结了查询系统的特点以及一些不足之处,并对系统的改进作了展望

    3.2 系统可行性分析可行性分析包括现有的条件和解决的问题,研究方法的分析,采用的技术路线,实验方案的可行性。现有的条件是:对城市公交查询系统的研究和体会,本人计算机完备的软硬件,对文献资料的准备。要解决的问题是实现页面的设计,数据库的建立,数据库连接和创造,每一个表的文件上传功能。
    3.2.1 经济可行性分析由于本系统属于小规模管理使用的系统,整个系统比较小,因此开发成本不是特别大。本人独立完成了整个开发过程,实现全部的开发任务只需要一台PC机和上述的各种软件。由于PC机是我原有的,而且无需专门升级硬件;而在网上又可以免费下载各种软件,因此,整个开发成本较小,这也为我们提供了非常大的方便,可以进一步完善网站。在使用成本上,连接国际互联网上的计算机,用户只需要拥有一台能够了,在世界的任何一个角落使用网站所有功能和服务只需要通过注册就行了。并且没有很高的要求计算机的硬件,软件方面也没有别的要求,访问与使用具有广泛性。因此,从经济可行性分析来看,这个系统体现了经济实惠,但是功能强大的特点。
    3.2.2 技术可行性分析本课题使用的是Java技术,开发平台选用MyEclipse,MyEclipse有这完整配备的功能,便于初学者使用还有代码提示,让我使用更加得心应手。在决定好编程框架后,再说用Java语言编码的优点:效率高、可重用性强、代码量少等。同时,使用的数据库是MySQL,开源的MySQL增添了可视化和稳定化的优点,而且安全方面也做得很好,更别说它的强大的保存数据功能以及查询数据功能。
    3.3 用户需求要设计一个良好的公交查询系统,就必须首先明确该应用环境对系统的要求。公交查询系统的应用背景为:方便市民搭乘公交车出行。所以乘客可以通过对车站站点查询、公交线路查询、站-站查询三种查询形式。同时设有管理员管理界面,负责添加、修改、删除指定的公交线路信息,为了更好的适应公交查询系统的实时性,使本系统更加完善,能更好的为用户所利用,我觉得还设计了在线提问和网站发布公告功能,在线提问能很好,很快的知道市民对公交查询系统的意见和一些对线路上不明确的提问,而网站发布功能则能更好的帮助政府和公交公司发布新闻和紧急情况,方便市民的知晓。因此,该系统需满足以下几方面需求:

    查询功能:系统需要提供几种不同方式的查询手段,包括根据公交线路、日常站点、和任意两个站点查询乘车路线。其次,采用算法查找任意两个站点之间的乘车路线。具体功能如下所述:

    根据公交站点进行相应的信息查询根据公交线路进行相应的信息查询通过选择任意两个站点,完成两站点之间最短乘车路线查询
    用户管理功能:主要是删除用户信息和修改用户基本信息

    后台车次管理功能主要包含添加车次和站点功能、更新车次和站点功能、删除车次和站点功能,这样做到系统实时更新,为用户查询提供更为准确的信息。具体如下:

    完成车次和站点添加功能
    完成车次和站点更新功能
    完成车次和站点删除功能
    用户登录验证功能
    用户注册信息功能
    用户注销功能
    删除用户信息功能
    在线提问功能:在线提问主要包括用户对公交线路疑惑的问题发布,旨在让市民和政府和共同为提出疑问的市民进行解决和讨论
    网站公告发布功能:进行一些实时新闻的发布,包括线路的绕行,公交车价格的调整,以及一些实时的路况信息,均可通过此来查询,旨在为用户提供一个实时的,便捷的公交插叙系统

    3.4 系统功能需求概述需求分析就是分析用户的需要与要求。如果需要评估的结果准确地反映用户的实际需求,这将直接影响到方案设计的整个阶段,而且对系统的使用产生影响。着眼于需求评估是完成调查,收集和研究,并可能受到影响的数据管理和安全信息的需求的过程。一般使用者都相对缺少相关的计算机方面的知识,并且可以确定计算机是否可以为自己做什么,不能做什么,所以无法非常准确的去表达自己的需求,但是他们是最终的用户,他们的需求才是最终的需求,但是技术人员缺少用户的专业方面的知识,不是很容易理解到用户的真正需求,有时候可能还会误解到用户的需求;新的硬件和软件技术的出现也会让系统的业务需求得打变化。所以技术人员必须要使用一些得到的方法来保证可以与用户不断的交流这样才可以确定用户最终的需求。通过与用户不断深入地进行交流,了解到目前系统存在的主要问题。
    需要研究是从用户分析和细化的信息,在功能和性能上有描述。它是软件开发过程中的第一阶段的一部分,主要任务是要了解你需要什么,什么应做的工作,以确定系统的,因此在目标系统提出完整,准确,清晰,具体的要求,并表示以书面形式唤醒。
    软件的用户界面是与该对象最直接的接触,包括是否允许用户简单,方便使用,该请求的响应时间,对整体的用户感受有很大落差。
    要设计一个良好的公交查询系统,就必须首先明确该应用环境对系统的要求。公交查询系统的应用背景为:方便市民搭乘公交车出行;手动(目前)、自动(将来)、及时更新查询数据。因此,该系统需满足以下几方面需求:

    查询功能:系统需要提供几种不同方式的查询手段,以实现灵活方便地管理整个系统
    数据的更新修改

    更新:系统允许管理员级别的用户对数据进行更新、修改并且存盘操作编辑:系统允许管理员级别的用户对数据进行编辑、删除的操作,保证现库的真实性与实时性

    系统采用B/S模式。整个系统最关键的就是数据库系统,一个强大的数据库可以支持完善一个优秀的软件设计,通过软件系统与数据库系统的连接来实现通过软件界面观察和处理操作数据。
    3.5 运行环境本系统是一个WEb版的应用程序,需要在服务器上部署中间件Tomcat、MySQL数据库,其他的客户端通过网络进行访问该服务器即可。

    开发硬件平台

    CPU:酷睿双核 3.2GHZ内存:4G以上硬盘:500GB
    服务器端硬件平台

    服务器参考配置:Intel Xeon Quad Core E5530 80W 2.40GHz/5.8GT/8MB Cache, 2x2GB DDR3-1066MHz, 2.5in HS 146GB SAS,HS 675W PSU, ServeRAID MR10i(RAID 5), 2*Giga Ethernet,Light Path, CD-RW/DVD Combo, 1U,3 Years Onsite Next Business Day. 146GB 10K 6Gbps SAS 2.5” SFF Slim-HS HDD x3550M2/x3650M2/HS22
    开发软件平台

    操作系统:Window 8 或Win 7均可数据库:Mysql

    4 系统概要设计4.1 概要设计的概论软件概要设计的核心内容就是依据需求规格或规格定义,合理、有效地实现产品规格中定义的各项需求。他注重框架设计、总体结构设计、数据库设计、接口设计、网络环境设计等。概要设计是将产品分割成一些可以独立设计和实现的部分,保证系统的各个部分可以和谐的工作。概要设计的原则包括:模块化和分层细化、模块独立和信息隐蔽。
    4.2 架构设计系统采用B/S模式架构。B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix 、SQL Server或 MySQL等数据库。浏览器与同数据库进行数据交互,可以通过Web Server实现 。
    我们的系统使用的应用程序开发模型的B / S结构的三个阶段。目前,互联网应用架构,事务处理分为三个层次,即Web浏览器的互联网服务器数据库服务器。在这种架构中,通过Web浏览器业务表现是容易执行,用户通过Web浏览器提交表单时,将信息提供给消费需求的Internet服务器,Internet服务器,所需的分析查询,数据库服务器,数据库服务器执行,数据库服务器的查询结果返回给使用标准的HTML语言返回给Web浏览器的Internet服务器,Internet服务器。
    4.3 系统功能结构图及分析4.3.1 系统功能结构图系统功能结构图如图4-1所示:

    4.3.2 系统基本功能系统功能的划分方式可以分成很多种类,但是我按照界面流程将它分为了两大模块,第一个模块为前台查询模块。前台查询包括:站点查询,公交线路查询,站-站的查询,在线提问,网站公告。第二个模块为后台管理模块,后台管理模块包括:用户管理、线路维护、公告管理、提问管理。下面本节主要对各个基本的功能进行一个简要的介绍。
    站点查询
    站点查询是本系统的主要功能之一,为用户倒车提供前提条件,用户可以根据自己所到的站点,查询本站所经过的公交线路,从而完成换乘,前往自己的目的地,进入系统首页,在站点查询的对话框内输入自己要查询的地点,接着会转入到另一页面,这个页面包含了经过这一站点的所有公交线路,可点击查看,了解自己需换成的公交车的车号,完成换乘。
    公交线路查询
    公交线路查询是不系统不可缺少的功能之一,用户可根据自己了解到的公交线路名称,查询该线路途经的站点,事先了解好自己所要经过的站点,提前做好下车准备,防止自己下错站,进入功能页面,在公交线路的对话框里输入所要乘坐的公交线路名称,之后会出现匹配的公交线路,点击查看,了解自己的所经的站点信息。
    站—站的查询
    此功能是整个系统的核心,也是最便捷的公交查询方法,只要用户输入自己的位置,以及所要到的位置,就会出现公交线路名称,途径站,以及所要换乘的下一班车,无需自己查看,系统自己就会给成乘车意见。进入页面输入自己的起始站,然后在第二个对话框输入自己要到达的站点,系统将显示出换乘的路线,这个功能十分的便利,深受广大市民的喜欢。
    在线提问
    在线提问功能是本系统的辅助功能。用户可根据自己对公交线路的不明确,向广大的市民发出提问,也可以抱怨本系统的不完善的地方供系统的设计者进行修改,完善系统的功能。
    网站公告
    网站公告功能也是本系统的辅助功能,用户可以点击此模块,查看网站管理员发布的公交信息,包括一些公交价格的调整,以及道路的施工导致的公交线路的绕行都可以在上面发表。
    登录功能
    登录功能是一个系统的重要组成部分,也是一个系统重要的门户功能,登录功能主要实现了使用者对系统的登录,在本文所设计的系统中,登录主要分成了两种登录身份:一般用户登录和管理员登录。两种身份登陆,能细分系统的功能模块,实现更加方便的操作和管理。
    用户管理
    用户管理是一个系统的重要功能之一,对用户的管理可以实现对系统使用者的了解和查看,能让使用者更加方便的使用本系统,用户的种类分为多种,本文主要体现在一般用户和管理者两种用户上面,可以对用户的信息进行添加修改,也可以删除和禁用用户。
    线路维护
    线路维护是对此系统功能的最大的保障,一个系统的基本功能是否可以实现全靠此功能维护,线路维护功能可对现有公交线路进行修改和删除操作,也可添加新的公交线路,这部分属于管理员用户的功能。
    公告管理
    公告管理是对前面所说的公告发布的一种监管,管理员用户可对已经发布的公告就行修改和删除,也可对新的公告进行添加,旨在为用户提供一个实时的公交线路查询的体验,方便乘客出行。
    提问管理
    提问管理是系统管理员对在线提问内市民发布的问题进行答复的功能,这个功能是系统管理员与市民进行交流的一个模块,管理员不仅能回答市民的问题,也可以发布一些问题征求市民的意见。
    4.4 系统用例图4.4.1 UML用例图简介用例图用来确定需求的范围,这些需求是设计开发的依据。用例图将系统看作黑盒,从外部执行者的角度来理解系统。
    用例图展示了用例之间以及同用例参与者之间是怎样相互联系的。用例图用于对系统、子系统或类的行为进行可视化,使用户能够理解如何使用这些元素,并使开发者能够实现这些元素。
    下面简要介绍一下用例图中的组成元素:

    角色(Actor)是与系统中的用例交互的一些实体,在实际情况中,角色可以是人,也可以是其他系统或者硬件设备。在画用例图的过程中,角色往往是第一个被确定的,因为系统或者用例在开始时是模糊的,但是参与系统的角色是最容易明晰的。有了角色之后,根据角色与系统的交互,以及角色要求的功能,可以进一步确定系统和用例
    用例(Use case)指的是系统的功能,它是系统某个功能的所有执行动作的集合。在UML图示中它是一个椭圆,但是具体分析用例的时候需要给出这个用例的所有执行动作的步骤
    连接(Assocation)是角色与用例的连接,表达此角色可以初始化此用例
    注释(Note)可以添加到任何地方,对用例图的不同部分加以说明
    泛化(Generalization)在面向对象的技术中无处不在,它的另一个名字也许更为著名,就是“继承”

    4.4.2 系统用例图系统总用例图如图4-2所示:

    此用例图给出了系统所有用户的操作用例的框架,包括乘客用户和后台管理员用户,乘客用户的操作登陆浏览器,进入查询页面,选择查询方式,在线提问,以及查看发布的公告等功能,而后台管理员则可进行用户管理,线路管理及公告发布等功能,根据此用例图一目了然一般用户和管理员用户的职责。
    后台管理系统用例图如图4-3所示:

    后台管理用户包括的工作有:公交线路管理、公告发布管理、用户管理。公交线路管理包括对所用公交线路的进行的增加还有删除操作的功能。公告发布管理包括对公告的增加和删除操作,用户管理就是对所有使用该系统的管理员用户进行的管理,包括增加用户和删除用户。
    4.5 技术架构所使用的架构是系统建设的关键,传统c/s架构,访问和操作已经不能满足大量用户需求,目前网络系统应用的主流是b/s,它基于浏览器的架构,可以交给服务器端来处理大量的数据处理工作,只用通过普通IE浏览器的客户端,还可以访问系统,操作起来方便快捷,而且利于更新和维护系统,在该方面具有优势的是java语言。
    系统三层架构如图4-4所示:

    4.6 数据库结构设计数据库设计( Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。
    4.6.1 数据库设计的原则数据库的结构分析在系统开发前的设计中占有很重要的位置,一个好的系统离不开一个层次清晰、功能完整的后台数据库结构。
    在设计数据库时,应尽量分离各个实体和表,一个实体对应一个表;同时,应明确各实体间的关联,明确各实体间的属性,以便确定它的字段。总之,在设计数据库时,应注意各表间的独立性和关联性,这是一个好的数据库结构首先要具备的条件。下面给出了数据库设计中的几点要求:

    规范命名:所有的库名、表名、域名必须遵循统一的命名规则,并进行必要说明,以方便设计、维护、查询
    控制字段的引用:在设计时,可以选择适当的数据库设计管理工具,以方便开发人员的分布式设计和数据小组的集中审核管理。采用统一的命名规则,如果设计的字段已经存在,可直接引用;否则,应重新设计
    库表重复控制:在设计过程中,如果发现大部分字段已经存在,开发人员应怀疑所设计的库表是否已经存在。通过对字段所在的库表及相应设计人员的查询,可确认库表是否确实重复
    并发控制:设计中应进行并发控制,即对于同一个库表,在同一时间只有一个人有控制权,其他人只能进行查询

    4.6.2 数据库结构分析根据系统功能的要求,本系统管理和维护的数据元素(Entity 实体)有:系统用户、普通乘客用户、公交线路、公告发布,在线提问,提问评论。

    系统用户实体包含这样一些基本属性:系统用户的ID、登录账户、密码、姓名、联系电话、系统用户的状态。其中,系统用户的ID是用户的唯一标志。系统用户能够实现系统的登录,完成对后台公交线路的管理,包括对线路的添加和删除操作,还有对所有用户的管理,对公告发布的管理
    普通乘客用户可以直接点击主页上的公交信息查询按钮进入查询功能:包括两个站点之间的查询、根据公交线路进行查询、根据站点进行查询。还可以进行公告的查看和在线提问和评论
    公交线路的基本属性有:公交线路id,公交线路名称,公交线路所经站点,公交线路开始时间,以及公交线路终止时间
    公告发布的基本属性:公告id,公告的正文以及公告发布的标题
    在线提问的基本属性:问题id,问题的描述,问题的状态,问题发布的时间,问题的标题,问题发布者id

    4.6.3 数据库概念模型现今应用的最广泛的数据库是关系型数据库。因为它是一个面向对象的系统设计,当然,数据库的设计,必须是面向对象的。现在应该怎么考虑对类进行持久性操作,即对象类是怎样映射到关系数据库的二维表中的。现今,像PowerDesigner、Rose 等都可以采用数据库建模工具来实现。
    用户的信息实体图如图4-6:

    公交线路实体图如图4-7:

    公交公告发布实体图如图4-8:

    公交在线提问实体图如图4-9:

    4.6.4 部分数据库数据表字段设计在物理结构设计阶段,首先应该分两步走:

    一是,在关系数据库中,确定数据库的物理结构,主要是指存取方法和存储结构。时间和空间效率是对物理结构的评价
    二是,要选取存取方法,并且是正确的关系模式,存取索引方法、聚簇存取、HASH存取方法等都是常用的方法

    依据以上规范数据库的部分表设计见下页:
    用户表如表4-1所示:



    编号
    字段名称
    数据类型
    字段大小
    说明




    1
    userid
    char
    11
    用户id


    2
    password
    varchar
    20
    密码


    3
    phone
    varchar
    15
    用户联系电话


    4
    ralname
    varchar
    30
    用户姓名


    5
    state
    varchar
    2
    用户状态


    6
    username
    verchar
    20
    用户账号


    7
    usertype
    verchar
    20
    用户的类型



    公交线路信息表如表4-2所示:



    编号
    字段名称
    数据类型
    字段大小
    说明




    1
    bid
    char
    11
    公交线路id


    2
    bname
    varchar
    30
    公交线路名称


    3
    buspath
    Longtext

    公交线路站点


    4
    endDate
    varchar
    30
    公交线路起始时间


    5
    startDate
    varchar
    30
    公交线路终止时间



    公交系统公告发布信息表如表4-3所示:



    编号
    字段名称
    数据类型
    字段大小
    说明




    1
    pid
    char
    11
    公告发布id


    2
    content
    varchar
    255
    公告发布正文


    3
    title
    varchar
    30
    公告发布标题



    公交系统在线提问信息表如表4-4所示:



    编号
    字段名称
    数据类型
    字段大小
    说明




    1
    talkid
    char
    11
    在线提问id


    2
    talkcontent
    varchar
    255
    在线提问内容描述


    3
    talktime
    varchar
    30
    在线提问的时间


    4
    talktitle
    varchar
    30
    在线提问的标题


    5
    talkuserid
    char
    11
    在线提问的用户id



    5 系统详细设计详细设计是将解决问题的办法进行具体化。详细设计主要是针对程序开发部分来说的,但这个阶段是不真的编写程序的,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的代码。
    详细设计是将概要设计的框架内容具体化,明细化,将概要设计转化为可以操作的软件模型。在实际项目进行过程中,这个过程可以省略,主要是视项目的具体情况和项目要求而定,可以有详细设计,也可以直接按照概要设计进行编码。这个过程主要是保证编码的顺利进行,可以预先扫清编码过程中的障碍,提高代码的质量和编码的效率。详细设计的结果决定了最终的程序代码的质量。详细设计不仅仅要逻辑上正确的实现模块的功能,更重要的是设计出的出处理过程应该进可能简明易懂。
    5.1 系统数据库连接配置<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property name="url" value="jdbc:mysql://localhost:3306/newspubs"> </property> <property name="username" value="root"></property> <property name="password" value="123456"></property></bean>
    5.2 系统流程图的分析设计5.2.1 用户登录流程图用户登录流程图如图5-1所示:

    进入用户登录界面,首先输入用户名和密码,点击登录按钮,后台就行用户名和密码的匹配环节,如若俩个都正确及进入该用户界面,倘若有一个不对则登录失败,系统会提示用户重新输入。
    5.2.2 会员注册流程图会员注册的流程图如图5-2所示:

    用户注册进入注册页面,注册内容有,账号,密码,姓名以及手机号,当将这些信息输入之后,后台数据库会比对用户输入的信息是否有无注册,假如已经注册,系统则会提示用户这个信息已经注册过,需要重新输入,假如没有比对成功,则成功建立相应的账户,并在数据库中得以保存。
    5.3 系统登陆模块实现用户系统主要分为俩大类:一类是一般用户,一类是管理员用户。
    由于系统功能的特殊性,前台使用者不用登陆就可以实现公交查询的功能。
    第一部分主要是一般用户,一般用户可以随意注册,注册的信息主要包括:用户的账号,用户的密码,用户的信息,还有用户的电话这四大部分,注册的信息会同数据库中已存在的信息进行对比,查看是否重复,如果重复则重新输入。注册成功就可进行一般用户的登录,比对用户账号和密码是否正确,若正确登录成功,反之重新提醒用户进行登录。
    一般用户登录界面如图5-3所示:

    第二部分为管理员用户登录,因为管理员用户的登录界面不能存在注册按钮,所有管理员用户的信息必须从数据库中直接录入。
    实现的过程主要有几个步骤,进入首页后点击右上角的进入后台按钮,将会看到图5-4的登录界面,按照要求输入管理员用户的账号密码,首先对管理员输入的信息进行保存然后利用程序从数据库中进行检索看是不是有管理员输入的信息在数据库中是否存在如果存在就返回正确的结果,如果不正确就返回错误的结果。如果结果数据库中存在就显示登录成功,如果数据库不存在就显示失败请重新登录。
    管理员用户登录界面如图5-4所示:

    5.4 前台功能模块设计5.4.1 公交查询设计本系统的首页设计为查询界面,为的是方便高效和快捷,此系统查询分为三大功能:第一个功能为站-站的查询功能,第二个是公交线路的查询功能,第三个是公交站点的查询功能。接下来将介绍三大功能:

    站—站的查询功能:用户可将准备出发的起始站点和终止站点分别对应的输入到换乘查询的输入框内,系统会根据用户输入的站点信息,列出提供的换乘路线,系统将优先查找到的直达公交线路排在前面,方便用户的选择
    公交线路的查询功能:用户可以输入完整的公交线路号进行查询公交线路,系统会筛选出匹配的线路,用户可以点击查看,查看所查到的公交线路,里面有每个线路确切的途经站点
    公交站点的查询功能:用户在不了解公交线路的情况下,可以搜素要到达的公交站点,输入自己要到达的地点,公交查询系统会对比数据库为用户匹配出所有进过这一站点的公交线路,用户可根据此来选择乘坐的线路

    查询界面如图5-5所示:

    用户输入起始站与终点站查到的结果如图5-6所示:

    用户输入公交线路查询如图5-7所示:

    用户输入公交站点查询如图5-8所示:

    5.4.2 热门线路功能模块设计热门查询线路模块列举了所有在数据库中的公交线路,本人在网上随意挑选了一些公交线路录入其中,市民可以在热门线路中查看所有公交线路,挑选符合属于自己出行的公交线路
    下图是热门线路模块的界面,如图5-9所示:

    5.4.3 网站公告功能模块设计用户点击网站公告模块后会看到管理员发布的公交新闻,包括一些公交线路的改道,还有公交价格的调整,网站公告由后台管理员进行上传。
    下图是网站公告功能模块的实现界面图,如图5-10所示:

    下图是网站公告内容的详细信息,如图5-11所示:

    5.4.4 在线提问模块设计在线提问模块旨在帮助乘客解决他们在实际的乘车过程中遇到的困难,以及对城市公交查询系统的建议,这是一项非常人性化的设计,因为设计员并没有真正的参与使用,有些问题体会不到,用户可在此模块发表问题,提出自己的见解,也可在此回答其他市民的疑惑。
    下图是在线提问功能模块的界面,如图5-12所示:

    5.5 后台功能模块设计管理员的设置是为了系统能够安全的、系统的平稳运行,本系统为管理员设置了用户管理、公告管理、线路维护和会员提问四大功能模块。

    用户管理:用户管理是对已注册用户的基本信息进行更新维护;主要包括对用户的添加,用户的删除,用户的修改
    公告管理:公告管理是对公告进行发布和对已发布公告进行修改和删除操作,保证公告的实时性,及时添加新的公告,也要删除旧的,无用的公告
    线路维护:线路维护主要是对新线路进行添加和对不用线路的删除,以及对现有线路的修改
    会员提问:对市民提出的问题进行答复,帮助市民解决出行问题,更好的完善城市公交管理系统

    用户管理的实现界面,如图5-13所示:

    线路维护管理管理的实现界面如图5-14所示:

    公告管理的实现界面如图5-15所示:

    6 系统测试6.1 程序测试网站测试是软件设计的最后一道工序,也是非常重要的一步。用于检查软件的质量、性能、可靠性等是否符合用户需求。一套严谨的、规范的、完善的测试过程将大大提高软件的质量、可信度、可靠性,降低软件的出错率,降低用户风险系数。通常网站测试包括:功能测试,安全测试,可用性测试,性能测试、兼容性测试等方面。
    在系统设计的过程中,这是必然的,存在一些错误。对于错误的语言和语法,程序在运行时,会自动提示你错的地方,并请求立即修改,所以,这样类型的错误是比较容易发现和纠正的。但另一类错误是在程序执行时由于不正确的操作,或是导致的错误结果的对某些数据的计算公式的逻辑错误。这类错误隐蔽性很强,时而出现,因此,这是非常耗时费力的,对这一类动态发生的错误的排查。
    软件测试,描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
    为了使本软件运行更加稳定,我对它进行了全面的测试,其中测试分为二部分,一种是界面测试;另一种功能测试。
    首先我们来说界面测试,界面测试是为了使程序在不同的的操作平台上能够运行界面,并且能够保持原来的风格。经测试程序运行正常,运行界面上的字体图片等设置都能够保持得非常好。不出现字体变形等情况。
    其次进行功能测试。该系统测试采用的是单元测试,集成测试,完善性测试等多种方式进行测试。
    经过测试,所有功能都能得以实现,没有任何变形。至此,在功能的测试上也已经比较圆满的完成了。
    6.2 测试的重要性及目的6.2.1 测试的重要性系统测试是开发一个管理信息周期中非常重要而且漫长的的阶段。其重要性体现在他是保证系统质量与可靠性的重要关口,是对整个系统开发过程的最终审查。
    系统测试的主要任务是尽可能的检查出程序中的错误,提高系统的可靠性,主要的目的是位列检验系统“做得如何”。其中这一阶段又可以分为三个步骤:模块测试;组装测试;确认测试;通过测试整个管理系统来确定能不能够满足用户的需求。通过测试发现问题以后,我们要经过不断的调试找出错误具体原因和位置,然后对其进行修改。
    系统开发完成后就需要进行系统测试,测试在一个软件的开发过程中是非常重要的,其意义在于:

    发现软件错误
    有效定义和实现软件成分由低到高层的组装过程
    验证软件是否满足任务书和系统定义文档所规定的技术要求
    为软件质量模型的建立提供依据

    6.2.2 测试的目的Grenford J.Myers曾对软件测试的目的提出过以下观点:

    测试是为了更好的找出程序中存在的问题、错误
    好的测试方案是很有可能是到现在为止仍然未被发现的错误的测试方案
    成功的测试则是找出了至今仍然没有被发现的错误的测试
    测试并不单纯是为了找出错误。而是通过分析错误,来找出产生错误的原因,来避免发生错误,帮助程序员找出软件开发过程中的缺陷,以便及时进项改正
    测试是为了检验修改或优化过程是否引发新的问题、软件所能达到处理能力和是否达到预期的处理能力等

    6.3 测试的步骤就像开发过程,测试过程中要完成的一步一步的逻辑上的每一步都是在继续之前的一个步骤。由许多个子系统是大型软件系统,并且多个包括各子系统模块的。因此,一个软件系统的测试基本上由以下步骤组成:

    测试模块,编码和详细设计错误往往在本测试程序中找到
    在此测试步骤中遇到的测试系统的软件错误的设计,规范的要求的错误也可以找到
    系统需求规格说明书的错误也是在这个测试程序进行验收测试发现

    在我们设计软件的过程中,测试系统常用的测试方法主要有两种:功能测试和结构测试。
    功能测试也被叫做黑盒测试和数据驱动测试,是在已经知道系统应该具有的具体功能的情况下,通过黑盒测试来测试系统功能是不是能够正常运行。在测试时,将系统当做不能打开的盒子,在不管系统内部结构与特性的状况下进行测试,它只检查系统功能是不是根据系统说明书的规定正常运行的,同时检测系统是否能正确接收的输入信息和输出信息的正确对应,并保持系统的完整性的外部信息需求。
    白盒测试与黑盒测试相反,它了解系统内部工作的各项具体程序,能够通过测试来检查系统内部的运行是不是按照系统说明书的规定进行正常运作的,因此,白盒测试又被叫做结构测试和逻辑驱动测试。根据测试程序的结构在每个道路试验,当系统运行时不是能按预定要求正确运行,无论其功能如,白盒测试试验,道路试验是一个逻辑驱动器,这种测试主要用来软件测验。
    首先我们来说界面测试,界面测试是为了使程序在不同的的操作平台上能够运行界面,并且能够保持原来的风格。我把完整程序拷贝到不同版本的电脑平台环境下,程序运行正常,运行界面上的字体、图片等设置都能够保持得非常好。不出现字体变形等情况。
    其次进行功能测试和性能测试,功能测试主要包括五项内容:适用性、准确性、可操作性、依从性、安全性。
    系统性能测试主要是通过模拟系统运行环境,测试系统性能是否符合客户的需求。性能测试的重要技术指标是:系统的运行速度、系统响应的时间和支持并发节点数。
    最后进行系统的可用性测试,可用性测试用于检测系统的可理解性、可操作性和学习性等方面内容。
    6.4 测试的主要内容测试过程分为哪会保证测试,即质量几个阶段:代码审查,单元测试,集成测试,确认测试和系统测试。

    单元测试:集中在一个小软件单元设计审查 - 模块是一个测试单元,意识和定义模块的功能实际发现,这种情况不符合测试说明和编码错误
    集成测试:集成测试模块安装在根据进行集成测试的设计要求,其主要目的是为了发现问题相关的接口。例如有可能是一个问题,由于疏忽,与其他模块的模块,并造成有害影响;不能产生所需的功能键,组合功能;看起来可以接受的个别错误是不可接受的,当积累;可能有错误,如整个数据结构
    确认测试:该试验的目的是验证,该系统能够工作如期,根据需要,以显示未来的用户。集成测试后,已经把一个完整的软件系统,设计按照完成安装的所有模块,从根本上推动问题接口错误的,那么软件的有效性将能够得到进一步的确认,试验工作证实,它是功能和软件的性能,如用户所期望的
    系统测试:在软件开发完成后,并且系统将最终在包的其它部分,在测试系统上执行。包括恢复测试,安全性测试,强度测试和性能测试

    系统测试主要从以下几个方面:

    功能测试:测试满足发展的需要,旨在提供这里所描述的功能,用户需求是否得到满足。功能测试是测试最常用的系统和强制性测试和正式的规格通常是标准的软件测试
    强度测试和性能测试:该测试系统的最大实际程度的能力,即在某些情况下,负载的软件功能进行
    安全测试:验证内置到系统中的保护机制,它可以保护系统,所以从很不安。该系统主要是针对权限对系统进行测试,并为void仅仅是数据,错误的数据和测试数据的非法干扰的能力

    6.4.1 功能测试功能测试主要包括五项内容:适用性、准确性、可操作性、依从性、安全性。
    本系统功能测试如表6-1所示:



    测试内容
    测试结果




    适用性



    准确性



    可操作性



    依从性



    安全性




    本系统功能测试测试用例6-2所示:



    测试标识
    测试项目
    测试用例输入及说明
    预期结果
    测试记录




    用户管理模块功能点
    新增用户
    系统管理员单击”新增”按钮
    成功进入到新增用户界面
    测试通过


    用户管理模块功能点
    登录全部置空
    令所有文本框为空
    提示(请输入账号密码)
    测试通过


    用户管理模块功能点
    提交新增用户信息
    在新增用户界面输入有效数据并点击提交按钮
    显示注册成功
    测试通过


    用户管理模块功能点
    删除用户
    在界面上点击要删除的用户,并点击删除按钮
    删除成功,并退回到用户管理界面
    测试通过


    用户管理模块功能点
    编辑用户
    系统管理员单击”编辑”按钮
    成功进入到编辑用户界面
    测试通过


    公告管理模块功能点
    新增公告
    系统管理员单击”添加”按钮
    成功进入到新增公告界面
    测试通过


    公告管理模块功能点
    全部置空
    令所有文本框为空
    提示(标题不能为空)
    测试通过


    公告管理模块功能点
    提交新增公告信息
    在添加公告界面,点击保存
    添加成功后跳转到公告界面
    测试通过


    公告管理模块功能点
    删除公告
    系统管理员点击删除公告并点击删除键
    显示删除成功并跳转到公告界面
    测试通过


    线路维护模块功能点
    新增线路
    系统管理员单击”添加”按钮
    成功进入到添加线路界面
    测试通过


    线路维护模块功能点
    全部置空
    令所有文本框为空
    提示(线路名称不能为空)
    测试通过


    线路维护模块功能点
    提交新增线路信息
    在新增线路输入有效数据并点保存
    添加成功后跳转到线路维护界面
    测试通过


    线路维护模块功能点
    编辑线路
    系统管理员单击”编辑”按钮
    成功进入到编辑线路界面
    测试通过


    题目管理模块功能点
    删除线路
    点击删除的线路再点击删除按钮
    显示删除成功
    测试通过


    会员提问模块功能点
    查看问题
    点击查看按钮
    成功查看问题
    测试通过


    会员提问模块功能点
    回复问题
    点击查看问题并参与回复
    成功增加回复内容
    测试通过



    6.4.2 可用性测试可用性测试用于检测网站的可理解性、可操作性和学习性等方面内容。具体测试方面如表6-3所示。



    测试项
    测试人员的评价




    窗口移动、改变大小、关闭等操作是否正常



    操作模块是否友好



    模块和提示内容等文字描述是否正确



    模块布局是否合理、协调



    模块的状态是否正确(对选中项能否发生对应切换)



    键盘、鼠标操作是否支持



    所需的数据项是否正确显示



    操作流程是否合理



    是否提供帮助信息




    6.4.3 性能测试系统的性能测试主要是通过模拟网站运行环境,测试网站性能是否符合客户的需求。性能测试的重要技术指标是:网站的运行速度、网络响应的时间和支持并发节点数。

    测试网站的运行速度:通过在不同的计算机上进行试运行本网站,没有发现任何停顿、迟滞现象
    测试网络响应时间:网络响应时间主要包括:网络最小响应时间、平均响应时间和最大响应时间这三个参数。经过测试,在网络运营良好状态下,局域网内响应时间三参数为:1/2/5s,外网响应时间三参数为3/7/12s,符合客户的需求,属于在用户的心理可承受范围内
    支持并发节点数:经过模拟的环境测试,本网站在并发节点达到45个时,网络运营的速度会发生比较大的波动,延迟时间10秒左右,符合客户需求

    6.5 测试结论由于自己独立写的项目不多,考虑问题肯定会不周全,存在很多的难以预料的问题,写的功能有时候也难以满足用户需求,代码和接口也会出现很多问题,不规范的书写习惯,都会导致项目不无法达到用户的目标,无法让用户放心的使用,用户体验效果差。正是因为这样所有的项目在交付用户使用之前,必须经过专业技术人员的测试,一个好的项目需要不断的打磨,需要不断的反馈意见,不断地再加工,才能设计出符合用户要求,用户体验良好的项目。测试的技术人员,需要根据项目设计的人员制作的项目文档,对用户要求的各个功能进行测试并根据测试结果编写好测试的文档,在经过这一系列的工作后,可以有效的规避因设计人员在设计过程中的小纰漏,提升项目的质量,最终交付给用户一个完美的作品。
    本系统设计要求基本都可以达到,此系统具有完整的软件功能,良好的用户界面,能够正确的处理错误信息,而且能够准确的提出错误的种类。总体说来,软件通过测试。
    经过对上述的测试结果分析,本系统满足用户的通过计算机平台用户使用的要求和需求。所有基本功能齐全,操作简单,产品运行性能良好,是一个值得推广的公交查询系统。
    总结与展望本此毕业的内容所实现的是城市公交查询系统的设计与实现,主要介绍了java与jsp技术。本设计按照以下五个步骤对此项目进行设计:

    需求分析
    概要设计
    后台数据库的实现
    项目的详细设计
    系统的测试

    当下此系统的基本功能已得到实现,从3月份开始准备资料到5月份基本完成了项目的设计,要是想很好的完成这个项目,使它运用到生活中是远远不够的,还需要不断地用户反馈,不断修改,不断地充实,我也将会在今后的学习中,不断的完善它,改进它,使其更好。
    本系统具有以下优点:

    该系统可以运行在多个操作系统平台(Windows NT和Windows 2000 / Windows XP和Windows Vista)数据库管理系统采用MySQL和Java开发环境,可移植性好
    该系统界面简单,操作方便,容易进入的信息,人们使用的术语

    但也存在以下缺点:

    界面跳转复杂,接口不能被刷新,可以改进
    功能比较简单,没有进一步提高一些选修的程序等,不能更好的为用户提供更强大的功能服务
    数据库设计有冗余,需要进一步优化

    毕业设计的选题是在老师的指导下最终确立的,选题确定好后就开始学习这方面的资料进行学习,开始在这方面可以说是不熟悉的,虽然最初学习JSP技术,但学校学习的东西如果没有运用到实际的设计中终究是不行的,以前都是老师带领我们做,第一次做难免会怯场,但是最终通过自己的努力,老师的指导,同学的帮助,完成了本系统的设计。
    本次毕业设计已基本画上句号,在整个设计的道路上是劳动和汗水凝结的成果。为了解决一丢点的困难,我翻阅书籍,询问老师,与同学探讨,从不懂到熟知也是一个新的经验和新的收获的过程。学习是一个长期的过程,系统设计过程中,遇到了很多问题,后来通过自己的努力来解决大部分问题,但同时也学到了很多知识。通过这次毕业设计,我从最初的Java语言,和后来的Web开发学会了很多,然后在训练过程中,通过所学到的知识应用到实际发展实践中,最后到软件功能集成的整个设计过程的思想。
    该系统在实施过程中也常遇到一些困难,毕竟,JSP技术的掌握不熟练,有许多控件不能真正明白他们的意思,有一个对象调用的一些方法,并不十分了解,美化界面处理不好。所以开始的设计真的遇到了许多困难,但通过和老师同学的帮助以及在线学习,解决设计中的许多问题,但也使我有了一定的JSP技术的掌握,同时巩固了以前学过的知识。实现了质的上升,在一个纯粹的理论学习到实际上手再向完成毕业设计前进,理论联系实际情况,是学术认知的另一次跃进。
    参考文献[1] 汪光焘.畅通城市交通,实现城市的可持续发展.可持续发展,2002,(2):18-19
    [2] 马武定.城市化与城市可持续发展的基本问题.城市规划汇刊,2002,(2):7-9
    [3] 冯博.SQL实用教程.北京:人民邮电出版社,2005
    [4] 严蔚敏,吴伟明.数据结构(c语言版).北京清华大学出版社,1997
    [5] 张海藩.软件工程.北京:人民邮电出版社,2002
    [6] 黄斯伟.HTML完全使用详解.北京:人民邮电出版社,2005
    [7] Anthony J.Dos Reis. Compiler Construction Using Java,JavaCC,and Yacc. Wiley-IEEE Computer Society Pr; 1 , 2011
    [8] Joan Casteel. Oracle 12c:SQL. Course Technology; 3, 2015
    [9] Richard North Patterson. Eclipse. Pan Publishing, 2009
    [10] 李兴华,王月清.名师讲坛:Java Web开发实战经典基础篇(JSP、Servlet、Struts、Ajax) [平装][M].清华大学出版社,2010.
    [11] 李刚.轻量级Java EE企业应用实战(第3版):Struts 2+Spring 3+Hibernate整合开发[M].电子工业出版社,2012.
    [12] 孙卫琴:《精通Hibernate:Java对象持久化技术详解》[M].电子工业出版社出版,2010.
    [13] Budi Kurniawan (作者),崔毅 (译者),俞哲皆 (译者),俞黎敏 (译者).Servlet和JSP学习指南[M].机械工业出版社,2013.
    [14] 陆舟.Struts2技术内幕:深入解析Struts2架构设计与实现原理 [M].机械工业出版社,2012.
    [15] 陈亚辉,缪勇.Struts2+Spring+Hibernate框架技术与项目实战[M].清华大学出版社,2012.
    [16] 施瓦茨 (Baron Schwartz),扎伊采夫 (Peter Zaitsev),特卡琴科 (Vadim Tkachenko),宁海元.高性能MySQL(第3版)[M].电子工业出版社,2013.
    [17] 薛华成.信息管理与信息系统专业教材系列:管理信息系统(第6版)[M].清华大学出版社,2012.
    [18] 王颖.基于JSP的学生学籍信息管理系统的设计与实现[J].电子科技大学,2012.
    [19] 朱丽萍.基于JSP的高校图书管理系统开发和实现[J].电子科技大学,2011.
    [20] 吕勇.基于JSP的实验室项目管理系统的设计与实现[J].武汉理工大学,2012.
    [21] 庞丽娜.Java 应用开发技术详解[M],科学出版社,2007:126-235
    [22] Cay S.Horstmann,Gary Cornell著,叶乃文,邝劲筠,杜永萍.JAVA核心技术卷I:基础知识,程序设计教程[M].人民邮电出版社,2008.5:87-234
    [23] 张超.基于JSP Struts2技术的房地产信息管理系统的设计与实现[D].吉林大学,2012.
    [24] (美)Powell.R. (美)Weeks.R.著. 袁鹏飞译. C#和.NET架构. 北京:人民邮电出版社,2002.4 17
    [25] 萨师煊,王珊.数据库系统概论(第三版).北京:高等教育出版社,2000.2
    1 评论 37 下载 2020-08-10 11:47:16 下载需要14点积分
  • 基于JavaScript实现的数独游戏

    一、问题描述设计并实现一个基本的数独游戏。功能包括根据用户选择的级别给出初始盘面数字(级别越低,数字越多),并且能够实时监测并提示冲突;当用户完成后,保存最近十次的成绩(完成一次所需时间)以及最好成绩。
    二、问题分析数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。
    因此,核心问题就是我们需要得到一个含有一定数目空格的九宫格,并且一定存在一种填写方式使得九宫格满足数独的要求。
    我们可以先得到一个完整的,满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复的数独表。然后随机得到数独表中空格的位置,在通过可视化生成游戏界面,实现交互功能。
    在用户与界面交互过程中,实时监测冲突是否产生,检验提交的答案是否正确,保存最近十次成绩和最好的一次成绩。
    三、算法设计本游戏为使用JavaScript开发的网页数独游戏,因此以下算法实现为JavaScript实现。
    经问题分析可得我们需要解决的几个核心子问题,并设计算法如下:
    3.1 传统回溯法生成数独表网上提供的数独算法多种多样,但绝大部分的核心思想依然是传统回溯法:通过一个9*9的二维数组sudu表示一个数独九宫格。
    首先初始化该数组,值都为0,然后将该九宫格的第一行依次随机填入1-9中的一个数字。接下来,从第二行开始,遍历该数组剩下的元素。
    每遍历到一个位置,随机填入1-9中的一个数字,然后判断这个九宫格目前的所有数字是否满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复的要求。如果满足,继续向下一个位置遍历;如果不满足,则重新随机填写该位置。当重复填写了十次之后依然不满足要求,则回溯到上一个位置,重新填写该位置。
    直到遍历完所有数组后,我们也就得到了一个完整的数独表。用sudu表示。
    Math.floor(Math.random() * 9 + 1)可得到1-9范围内的随机整数。
    3.2 随机生成难度级别不同的数独由3.1得,sudu数组保存着完整的数独表,那么游戏中的有空格的数独表可以用9*9的二维数组curSudu表示,其中空格位置的数字设为0。如果填入了数字,则实时修改curSudu中该位置的值。
    通过空格个数的不同来区分数独难度级别,空格个数越多,难度级别越高。设计该游戏难度级别有三个,分别为,初级:15个空格;中级:30个空格;高级:45个空格。
    欲实现该需求,则先根据难度随机生成对应数目的空格的位置坐标(i,j),用数组表示为:blanks=[{row: i, column: j},……]。其中0 <= i <= 8, 0 <= j <= 8。通过Math.floor(Math.random() * 9)即可生成需要的i,j。curSudu一开始等于sudu,得到blanks后将curSudu对应空格的值设为0。
    3.3 用户填写数独时实时判断是否产生冲突用户每填写完一个数字,都会触发判断冲突事件。由于之前填过的数字都被判断过,所以只需要判断刚刚填入的数字所在的行,列,粗线宫内是否满足条件。
    首先保存刚刚填入的数字num,然后对所在的行,列,(3*3)区域,分别进行遍历,假如遍历到的数字等于刚刚填入的数字并且所在的位置不同,则该填入数字在九宫格内产生了冲突;否则没有冲突。
    3.4 保存最近十次成绩和最好成绩设计成绩的数据结构为:
    let user = { username: username, time: time}
    时间表示成绩高低,时间越短,成绩越好。
    每当游戏开始时,将当前时刻距 1970 年 1 月 1 日之间的毫秒数保存在全局变量time中。当提交答案,游戏结束时,time = ((new Date().getTime() - time) / 1000 / 60).toFixed(2),得到从开始到结束的时间,以分钟为单位,保留两位小数。
    每次提交成绩时,将用户名和成绩保存在user中。然后从数据中通过getRank()得到最近的十次成绩(用长度为10的一维数组ranks表示),通过getMaxGrade()得到最好的一次成绩maxGrade。
    将user.time与maxGrade.time进行比较,如果user.time比maxGrade.time更小,则maxGrade=user;然后将user插入ranks的最前面,去掉ranks最后一个元素,将ranks的长度保持在十。然后存入数据中。
    四、软件架构该软件是由JavaScript,HTML,CSS编写的的网页游戏,其中主要逻辑算法由JavaScript完成。而其软件架构为MVC模式
    4.1 控制层(Controller)JavaScript是一门事件驱动型的语言,通过在网页的特定DOM中绑定相应的事件监听,当用户在界面上特定的DOM元素上进行特定操作时就会触发对应的事件监听函数时,对逻辑进行处理。
    4.2 视图(View)该软件的界面由HTML和CSS决定,文件夹中的index.html和style.css会在浏览器的运行下生成对应的DOM树与样式,并在浏览器上渲染出界面。Js可以修改DOM树和样式,从而改变视图。
    4.3 模型(Model)sudu.js和index.js文件中保存着实现处理事件的对应代码。而数据保存在浏览器的localstorage中。因为由于规定对浏览器的限制,浏览器只能读取本地文件,却不能修改本地文件,所以在不使用服务器的情况下,本软件通过浏览器的localstorage来保存修改成绩。
    五、实现与测试5.1 软件实现生成数独表和判断是否冲突的函数
    在sudu.js中定义Sudu函数,返回函数:
    回溯法生成数独表:gennerateShudu(), 判断填入元素所在的行,列,(3*3)是否冲突:checkRow(), checkColumn(), checkNine()。
    5.2 软件测试游戏初始界面

    选择难度为“初级”后点击‘开始游戏’按钮后游戏开始界面

    在第1行第2列填入5,产生冲突后右边文本框中提示冲突,空格颜色变红

    在修改数字为9之后,冲突消失界面

    填满数字提交答案之前的界面

    点击‘提交结果’按钮后游戏界面,显示用时3.71min,要求输入用户名

    填入用户名

    点击‘提交’按钮,成绩保存后的界面

    点击‘排行榜’按钮,打开成绩榜单,显示最好的一次成绩与最近十次成绩,其中最近一次成绩yolanda:3.71min 保存在最前面

    六、性能评价传统的回溯法的性能较好,通过这种算法可以较快地得到满足数独要求的二维数组。但仍然存在可以优化的余地,不断的回溯的时间复杂度仍然较高,但在游戏中,并不碍事。
    但是因为浏览器本身对于内存管理以及计算机的问题,在多次游戏之后,浏览器很有可能会崩溃,此时关掉浏览器,重新打开文件即可。
    七、总结本次课程设计,我选择了编写数独游戏的课题,一开始时是准备用C语言编写,用easyx的图形库编写图形界面。但是发现easyx的图形库用起来仍然很麻烦。因此最后编写的语言选择了我最为熟悉的JavaScript,根据JavaScript的应用领域,可视化方面选择了网页版本。
    本次课程设计较为简单,主要难点便在于如何设计出性能较好的生成完整数独表的算法以及如何在不用服务器的情况下,让浏览器能够对本地的文件进行修改。通过查询资料与自己琢磨,选择了传统的回溯法,并且用JavaScript实现。在上文也提到,由于产商,语言制定者对浏览器和语言的限制,JavaScript无法通过浏览器对本地的文件进行修改,仅能做读取操作,在多方权衡之后,选择了浏览器自带的localStorage,将最近十次成绩的字符串和最好一次成绩的字符串缓存于浏览器中。
    通过本次课程设计,我对网页开发更加熟悉,对于浏览器的性能,特性,JavaScript语言的一些特性也更加了解。对于算法的设计也更加熟练,收益匪浅。
    3 评论 30 下载 2019-01-27 10:58:50 下载需要12点积分
  • 基于JSP和SQL Server的网上花店销售系统的设计与实现

    摘 要随着时代的快速发展,我们的生活已经离不开计算机网络,而电子商务的快速发展正在改变着人们的生活方式。随着各种网上购物平台的不断兴起,人们早已习惯了不用出门就买到自己需要的东西。但是针对鲜花销售这方面的网络平台还很少,因此设计一个网上花店销售系统很有前景。
    网上花店销售系统采用JSP+Servlet+JavaBean的MVC模式,将数据对象、业务逻辑以及用户界面分离。该系统分为用户和管理员两个角色。用户注册登录后可以浏览鲜花,浏览公告,购买鲜花,管理员登录后可以对系统进行管理和维护。
    网上花店销售系统对于用户来说操作方便,满足了用户随时随地购买鲜花的需求,不仅为用户节省了时间,还提高了用户的购买效率。对于花店老板而言,不仅提高了销售效率还降低了时间和人工成本。
    关键词:销售系统;JSP;MVC;网上花店
    AbstractWith the rapid development of the times, our lives have been inseparable from the computer network, and the rapid development of e-commerce is changing people’s way of life. With the continuous rise of a variety of online shopping platform, people have long been accustomed to buy their own needs do not have to go out. But for the sale of flowers on the network platform is still very small, so the design of an online florist sales system is promising.
    Online flower florist system using JSP + Servlet + Javabean MVC model, the data object, business logic and user interface are separate. The system includes two roles: user and administrator. After registering, user can browse the flowers, browse the announcement, buy flowers, Administrators can manage and maintain the system after logging.
    Online florist sales system for the user is easy to operate, It fulfills the needs of users to buy flowers anytime and anywhere.This system not only saves user’s time, but also improve the user’s purchasing efficiency. For the flower shop owner, this system not only improve the sales efficiency but also reduce the time and labor costs.
    Key words: sales system; JSP; MVC; online florist
    1 绪论1.1 现状分析鲜花销售行业最初是鲜花销售商个体进行实体销售,后来经过发展形成了鲜花进入批发市场再进行分销的形式。传统的鲜花销售模式是以实体花店为主体,直到后来由于网络的迅速发展,电子商务的介入使鲜花销售发生了很大的变化。随着人们生活水平的提高以及对生活品质的要求,鲜花销售行业发展的前景也越来越好。目前,很多大的鲜花销售品牌已经开始了鲜花的网上销售,方便了消费者购买鲜花的需求,节约了大量的时间。但很多个体鲜花销售商的鲜花销售依然不够景气,还停留在传统花店的状态。这样不仅消费者必须亲自进入花店进行购买,再加上鲜花包装等一系列工序,浪费了大量的时间,而且鲜花销售商也会由于实体销售的缺陷降低销售额。另外,传统花店销售由于地域性的约束和客户范围的划分,使得传统花店的客户受到限制。因此发展网上花店销售系统就显得比较重要,也比较有前景。这样能扩展鲜花消费市场,实现利润增长。网上花店销售系统的实现不仅缩短了鲜花上市时间,节约了成本,方便了消费者购买,方便管理员管理,节约了大量时间和大量的人力物力,还增强了人们之间的感情交流等。
    1.2 研究意义传统的实体鲜花销售存在很多的限制,该系统致力于满足用户随时随地在网上挑选购买鲜花的需求。对于花店老板而言,可以提高工作效率,使网上鲜花管理工作系统化、规范化、自动化,提高整个购买鲜花流程的效率,使总体水平上升到一个新的高度。与传统花店相比,网上花店有其不可比拟的优势。首先网上花店的运营成本较低,职员人数较少,也不需要很大的运营场地。其次网上花店有传播信息迅速、容量大、范围广、可交互等特点。不仅如此,网上花店的建立,可以更好的满足消费者的需求。通过这种网络工具为消费者带来方便,同时促进浏览此网站用户的购买欲,提高销售效率。
    网上花店系统给用户提供了一整套完整的网上鲜花订购流程,使用户足不出户直接进行网上购物,给消费者带来了很大的方便。随着人类社会的发展,人际交往变得越来越重要。在这个繁忙的社会,人们很少有时间能见面交流感情,在特殊的日子里送给好友一束鲜花是用于联络感情的很好方式,因此受到广大消费者的欢迎。与此同时,商家也不再需要在商店里被动的等待顾客,完全可以坐在家里就轻松的卖出自己的商品,获得利润。计算机的存储与快速查询功能大大提高了网上花店管理的效率,并且还提高了查询并购买鲜花的精确度。方便快速的操作,不仅可减少从前的漏洞,还可以减少因工作的冗余出现的错误,更重要的是该系统的操作非常简单,推广起来比较容易。
    1.3 研究方法网上花店销售系统将采用瀑布模型的方式,先对目前鲜花销售的情况进行概述,然后对开发系统的环境以及技术进行简要介绍,之后对开发网上花店销售系统进行可行性分析、需求分析、总体设计、详细设计、编程实现以及测试直到实现最终理想的效果。本文将详细阐述整个实现过程。
    2 系统的开发环境及技术简介2.1 系统开发环境简介2.1.1 MyEclipse简介MyEclipse企业级工作平台作为对Eclipse IDE的扩展,它的功能体现在可以在数据库和JavaEE的开发、发布、应用程序服务器的整合方面极大的提高工作效率。MyEclipse几乎包括了目前所有主流开源产品的专属Eclipse开发工具,它作为功能丰富的JavaEE集成开发环境,在功能方面包括了完备的编码、调试、测试和发布,十分完整地支持HTML、Struts 2、Spring、JSP、CSS、JavaScript、Servlet、Hibernate、JDBC数据库链接工具等。JavaEE模型;Web开发工具;EJB开发工具;应用程序服务器的连接器;JavaEE项目部署服务;数据库服务;MyEclipse整合帮助是MyEclipse的7类特征。在Eclipse中,对于以上每一种功能上的类别都存在相应的功能部件,以及一系列可以用来实现它们的插件。MyEclipse这种结构上的模块化为它带来了很多优势,可以让开发人员在基本不影响其他模块的前提下,可以单独的扩展和升级任一模块。
    2.1.2 Tomcat简介Tomcat服务器是一个免费的开放源代码的Web应用服务器。运行时占用的系统资源小;扩展性好;支持负载平衡与邮件服务等开发应用系统常用的功能这几个特点使得其很受编程人员的喜欢。任何一个编程人员都可以更改它或在其中加入新的功能,因此Tomcat服务器还在不断的改进和完善中。 Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是调试和开发JSP程序的第一选择。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你运行Tomcat时,它实际上是作为一个与Apache独立的进程单独运行的。
    2.1.3 SQL Server简介SQL Server 是一个关系数据库管理系统,常用的有SQL Server 2000,SQL Server 2005,SQL Server 2008等版本。SQL Server 2008是微软公司2008年推出的数据库产品。它紧密结合了微软公司的各类主要产品,与Windows操作系统、Office办公软件、Visual Studio开发平台的最新技术进行了衔接。其各项指标在同类产品中都堪称优秀,而且图形化的管理界面十分便于学习与使用。SQL Server 2008具有很多新的特点,它是可信任的,使得公司可以以很高的安全性、可靠性和可扩展性来运行他们最关键任务的应用程序。它是高效的,使得公司可以降低开发和管理他们的数据基础设施的时间和成本。它是智能的,提供了一个全面的平台,可以在你的用户需要的时候给他发送观察和信息。
    2.2 系统开发技术简介2.2.1 JSP简介JSP全称Java Server Pages,是一种动态网页开发技术。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Servlet和JSP配合才能完成。JSP具备了Java技术简单易用的特点,完全地面向对象,具有平台无关性、主要面向因特网且安全可靠。简单的理解,JSP就是HTML页面+Java代码,但是JSP中能写的内容还不止这些,可以包含HTML标签,CSS,JavaScript,JAVA代码,EL表达式,引入并使用其他标签库,例如JSTL标签库、Struts 2标签库等。浏览器可以直接运行HTML页面,但是不能直接运行JSP页面,JSP是需要在拥有JSP引擎的服务器中运行的,例如Tomcat服务器。所以JSP是运行在服务器端的,运行完之后,把动态生成的HTML页面再使用IO流写回给浏览器,浏览器接收并且解析后再呈现出来效果。JSP的生命周期分为编译阶段,初始化阶段,执行阶段,销毁阶段。
    2.2.2 Javabean简介JavaBean 是一种Java语言写成的可重用组件。为了编写JavaBean,类必须是特定的和公共的,并且具有无参数的构造器。JavaBean通过提供一个符合一致设计模式的公共方法公开内部域的成员属性。众所周知,属性名与此模式相一致,其他java类可以通过自省机制发现和操纵这些JavaBean的属性。用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。JavaBean可分为两种:一种是有用户界面的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。JavaBean是可复用的平台独立的软件组件,开发者可以在软件构造器工具中对其直接进行可视化操作。一个JavaBean由3部分组成:属性、方法、事件。
    2.2.3 Servlet简介Servlet是一个基于JAVA技术的Web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容,Servlet是平台独立的Java类,编写一个Servlet实际上就是按照Servlet规范编写一个Java类,Servlet被编译为平台独立的字节码,可以被动态地加载到支持 Java技术的Web服务器中运行。Servlet容器也叫Servlet引擎,是Web服务器或者应用服务器的一部分,用户在发送请求和响应之上提供网络服务,Servlet不能独立运行,必须被部署到Servlet容器中,由容器实例化和调用Servlet的方法,Servlet容器在Servlet的生命周期内包含和管理Servlet。Servlet是单实例多线程的运行方式,每个请求在一个独立的线程中运行,提供服务的Servlet实例只有一个Servlet 具有可升级性,能响应更多的请求,因为Servlet容器使用一个线程而不是操作系统进程,线程占用的资源要小,Servlet使用标准的API,被更多的Web服务器所支持。Servlet使用Java语言编写,拥有更多的Java程序语言的优点,Servlet可以访问Java平台丰富的类库,使得各种应用的开发更为容易,Servlet容器给Servlet提供额外的功能。
    2.2.4 JDBC简介对系统来说数据库连接应该说是最为重要的部分,Java中连接数据库的技术是JDBC。JDBC作为一种用于执行SQL语句的Java API,具备为多种关系数据库提供统一访问的功能,JDBC是由一组用Java语言编写的类和接口组成的。为了达到可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序的目的,JDBC提供了一种基准。众所周知,JDBC API、JDBC驱动程序和JDBC驱动程序管理器是JDBC的三个部分,即可以通过Java.sql包来提供JDBC API,JDBC API上仅仅设计为了利用数据库而提供的类的接口,提供JDBC驱动的软件商来实际完成这个接口。当JDBC API制作的程序进行数据调用时,JDBC驱动发挥它的作用,实际连接数据库并且进行相应的处理, JDBC API的接口类也由JDBC驱动提供。
    两层模型(C/S)和三层模型(B/S)同样都是JDBC API支持数据库访问的。在两层模型(C/S)中,Java Applet或应用程序与数据库会直接进行对话,与所访问的特定数据库管理系统进行通讯时需要一个JDBC驱动程序,数据库收到被用户送来的SQL语句,而用户将会收到其被送回的结果。客户机/服务器配置指的是数据库可以位于另一台计算机上,用户通过网络连接到上面。其中客户机就是我们平时常说的用户的计算机,而服务器是我们常说的提供数据库的计算机,网络是Internet。在三层模型(B/S)中,服务的”中间层”先是收到命令,然后由服务的“中间层”将SQL语句交给数据库,数据库需要对SQL语句进行处理并将所得结果送回到中间层,最后用户将会收到中间层所得的结果。JDBC是用于直接调用SQL命令的“低级”接口。它在这方面的功能极佳,相比其它的数据库,它连接API易于使用,与此同时它也被设计成为了一种基础接口,高级接口和工具可以建立在它之上。很明显,JDBC具有如下优点:JDBC支持不同的关系数据库,JDBC使得开发人员不需要再使用复杂的驱动器调用命令和函数,可以将常用的JDBC数据库连接封装成一个类等。
    2.2.5 SQL语言简介SQL全称是结构化查询语言(Structured Query Language),SQL语言结构简洁,功能强大,简单易学。SQL语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。SQL语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。SQL语言不仅是一个功能强大的通用的关系数据库标准语言,而且还是一种介于关系演算和代数之间的语言,其功能之强大体现在查询、操纵、定义和控制这四个方面。SQL语言包含以下六个部分:

    数据查询语言
    数据操作语言
    事务处理语言
    数据控制语言
    数据定义语言
    指针控制语言

    作为非过程化的语言,SQL一次只对一个记录进行处理,自动对数据提供导航。SQL不对单个记录进行操作,它不仅可对记录集进行操作,还允许用户在高层的数据结构上工作。对于所有SQL语句,输入的是接受集合,输出的是返回集合。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。SQL可用于所有用户的DB活动模型,这里所指的用户包括系统管理员、数据库管理员、 应用程序员、决策支持系统人员以及许多其它类型的终端用户等。基本的SQL命令简单易学,一般情况下只需很少时间就能学会,即使是高级的命令在几天也内便可掌握。SQL语言则将所有任务统一在了一种语言中。用户之所以可将使用SQL的技能从一个关系数据库管理系统转到另一个,是因为所有主要的关系数据库管理系统都支持SQL语言。
    3 可行性研究3.1 经济可行性经济可行性,主要考虑的是系统开发涉及到的一些相关费用问题,企业是否可以支撑这些费用,通常来分析,软件系统开发主要包括的费用有设备购买费用,人员开发成本,设备维护更新成本,以及其他零散费用等,这些费用中,人员开发费用相对较高,但是本次系统开发规模小,周期短,所设计的开发费用不高,因此企业不必担心此方面问题。再则就是设备购买费用,一般保持电脑,交换机,网络,服务器等,这些都是一次性购买,费用也不高。因此,对于企业来讲,问题不大,经济上可以接受。通过对现已存在的相关系统进行调查,开发该系统所需的相关资料可以由此采集。同时所需的应用软件、系统硬件也便于获得,因此该系统开发成本不高。在引进该系统之后,不可否认,与传统方式相比可以节省不少人力、物力及财力,因为它的确具有效率高、质量高、成本低以及实用性高的特点。所以,站在经济的角度来讲,网上花店销售系统被认定为是可行的。
    3.2 技术可行性技术可行性主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。首先,系统采用的是JAVA开发技术,这项技术比较全面,实用广泛,没有实现不了的功能需求;其次该网站采用了SQL Server2008数据库,它能够处理大量数据,同时保持数据的完整性并提供许多高级管理功能,它的灵活性、安全性和易用性为数据库编程提供了良好的条件;最后开发工具,采用的是MyEclipse,工具中具有框架函数等,可以直接引用。因此,系统的软件开发平台已成熟可行。硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。
    3.3 操作可行性操作可行性主要是考虑系统完成后,用户使用的是否便利,是否可以达到用户的操作要求。该系统界面设计充分考虑浏览用户的习惯,鲜花信息浏览,公告浏览,鲜花搜索,用户注册,用户登录,用户挑选鲜花加入购物车,用户将购物车的鲜花生成订单,用户查看订单,用户管理个人信息等功能操作方便。除此之外,对于管理员而言,管理界面一目了然,对于系统的管理和维护也很容易。更重要的是所有网页设计清新、简洁、合理,不会让用户感到视觉疲劳,可操作性强。
    3.4 法律可行性法律可行性主要是看新系统的开发会不会在社会上或政治上引起侵权,有无违法问题。网上花店销售系统开发过程中所有技术资料都是合法的;在开发过程中是不存在知识产权问题的;未抄袭其他系统,故不存在侵犯版权问题;开发过程中不会涉及任何法律责任。
    4 需求分析4.1 数据描述4.1.1 数据流图数据流图简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。网上花店销售系统的数据流图如图4-1所示。

    在该数据流图中方框表示数据的原点或终点,原点和终点是系统之外的实体。椭圆表示变换数据的处理,也称之为加工,它对数据流进行某些操作或变换。箭头表示数据流,数据流是数据在系统中的运行方向。双杠表示数据存储文件,是用来暂时存储数据的。网上花店销售系统的实体有两个,分别为用户和管理员,用户对应于在网上购买鲜花的顾客,管理员对应于网上花店的老板。此系统中的加工对于用户来说有浏览鲜花、查看分类、管理用户信息、管理购物车、生成并查看订单、查看公告,对管理员来说有鲜花管理、分类管理、用户管理、订单管理、公告管理。此系统中的数据存储包括鲜花信息、分类信息、用户信息、购物车信息、订单信息和公告信息,在实际的实现中应该将这些信息存储在对应的表里,虽然鲜花信息、分类信息、用户信息、订单信息和公告信息是用户和管理员共享的,但是由于权限的不同用户对于鲜花信息、分类信息以及公告信息只有查看的权限,管理员对于这些信息有增、删、改的权限。在数据流图中反映为加工的不同。
    用户在系统中可以浏览鲜花、查看分类、管理用户信息、管理购物车、生成并查看订单、查看公告,本系统中用户数据流图如图4-2所示。

    管理员在系统中可以进行鲜花管理、分类管理、用户管理、订单管理、公告管理,其中管理员可以对鲜花、分类和公告进行添加、修改、查看和删除,对用户进行查看和删除,对订单进行查看和处理。本系统中管理员数据流图如图4-3所示。

    4.1.2 数据字典数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。图4-1中数据流条目如下所示:

    用户信息=用户ID+用户名+密码+姓名+角色+手机号+地址
    鲜花信息=鲜花ID+鲜花名+鲜花图片+上架时间+分类ID+分类名+价格+是否推荐+点击数+鲜花销量+鲜花描述
    公告信息=公告ID+标题+内容+添加时间
    分类信息=分类ID+分类名称
    购物车信息=购物车ID+用户ID+鲜花ID+鲜花名+价格+购买数量
    订单信息=订单ID+订单状态+用户ID+用户姓名+用户手机+收货地址+订单详情+订单号+备注+生成时间+总价

    根据数据流条目得到数据项条目如表4-1所示。



    名称
    类型
    长度
    别名




    id
    int
    11
    用户ID


    username
    varchar
    255
    用户名


    password
    varchar
    255
    密码


    xingming
    varchar
    255
    姓名


    role
    int
    11
    角色


    dianhua
    varchar
    255
    手机号


    dizhi
    varchar
    255
    地址


    id
    int
    11
    鲜花ID


    pname
    varchar
    255
    鲜花名


    imgpath
    varchar
    255
    鲜花图片


    createtime
    varchar
    255
    上架时间


    fname
    varchar
    255
    分类名


    jiage
    double

    价格


    tuijian
    varchar
    255
    是否推荐


    dianjishu
    int
    11
    点击数


    xiaoliang
    int
    11
    鲜花销量


    miaoshu
    text

    鲜花描述


    id
    int
    11
    公告ID


    biaoti
    varchar
    255
    标题


    neirong
    text

    内容


    shijian
    varchar
    255
    添加时间


    id
    int
    11
    分类ID


    fname
    varchar
    255
    分类名称


    id
    int
    11
    购物车ID


    shuliang
    int
    11
    购买数量


    id
    int
    11
    订单ID


    status
    varchar
    255
    订单状态


    xiangqing
    text

    订单详情


    orderid
    varchar
    255
    订单号


    beizhu
    varchar
    255
    备注


    shijian
    varchar
    255
    生成时间


    zongjia
    double

    总价



    4.1.3 系统IPO图IPO图是输入—处理—输出图(Input-Process-Output)的简称。基本形式是画三个方框,在左边框中列出有关输入数据,在中间框内列出主要处理,在右边框中列出产生的输出数据。网上花店销售系统的输入数据主要是用户信息以及鲜花信息,处理主要针对用户、鲜花分类、鲜花详情、购物车以及订单,输出数据对应于处理过程。该系统IPO图如图4-4所示。

    4.2 功能需求4.2.1 功能划分本网上花店销售系统主要分为前台操作和后台管理两部分。

    前台操作

    前台作为与用户直接交互的界面,在考虑功能的同时,也考虑了操作的简洁和方便性,目的是让大多数不太懂电脑操作的用户也能轻松的享受该系统带来的便利前台主要功能包括:首页(主界面)、鲜花搜索、鲜花分类、花店公告、鲜花浏览、用户注册、用户登录、订购鲜花、查看购物车、查看订单等
    后台管理

    后台管理考虑了花店管理的操作简单方便后台主要功能包括:分类管理、鲜花管理、公告管理、订单管理、用户管理

    4.2.2 功能描述
    首页(主界面):提供简洁美观的主界面,界面陈列系统提供功能,用户和管理员通过选择各个功能来达到自己所需的目的
    用户注册:新用户通过填写注册表单,将自己的详细信息输入并提交系统,系统会通过与数据库的连接以及表单限定的格式来检查合法性。注册成功后可以进行订购等其他功能
    用户登录:用户通过输入“用户名”和“密码”进行登录,系统会通过与数据库的连接来检查合法性,如果存在则登录成功继续接下来的功能,如果不存在则返回登录界面
    鲜花浏览:用户可以通过选择该功能看到本系统鲜花的详细介绍
    加入购物车:用户可以通过该功能选择自己要购买的鲜花并放入购物车,在购物车也可以进行数量的修改并且生成订单。但要首先登录才可以实现该功能
    生成订单:用户可以把购物车里的鲜花下订单
    查看订单:用户可以查询自己的订单,但首先必须登录
    修改个人信息:用户可以修改个人资料
    管理员分类管理:管理员可以对系统首页的分类进行增加、查看、修改、删除
    管理员鲜花管理:管理员可以对系统首页的鲜花进行增加、查看、修改、删除
    管理员公告管理:管理员可以对系统首页的公告进行增加、查看、修改、删除
    管理员订单管理:管理员可以对用户的订单进行查看、处理
    管理员用户管理:管理员可以对系统已经注册的用户进行查看、删除

    4.3 性能需求网上花店销售系统在日常处理中的响应速度为秒级,达到实时要求,以及时反馈信息。在进行统计分析时,根据所需数据量的不同而从秒级到分钟级,原则是保证操作人员不会因为速度问题而影响工作效率。系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足用户对信息处理的求。由于网上花店销售系统的查询功能对于整个系统的功能和性能完成举足轻重,作为系统的很多数据源,其准确性很大程度上决定了网上花店销售系统的成败。在系统开发过程中,必须采用一定的方法保证系统的准确性。用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。当操作发生变化时,一些功能同样能够实现。因为在实现各项功能时了,把功能划分成了不同的模块,各模块之间互不干扰,而且JavaBean都采用类的形式,每个功能都封装成一个类,当运行环境发生变化时,对程序会有一些影响,但打上补丁就可以继续运行了。总体上讲,本系统具有一定的自适应性。
    4.4 运行需求
    硬件条件:英特尔酷睿2 CPU、1GB 内存、20GB以上硬盘的PC机
    软件条件:Windows 7操作系统

    当系统遇到问题时,首先查看运行环境是否更改;如果更改,只修复运行环境即可;若未更改,查看系统中各个模块之间的接口是否有问题,可通过调试改正错误。数据库最严重的问题是数据库损坏,此时最好是从备份恢复数据库。如果是由于存储问题导致部分数据库文件损坏,但数据库还可以连接,这种情况采用导出数据库的表结果和数据的方法来恢复数据库。解决数据库的性能问题,可以从以下方面入手,检查数据库的配置,如缓冲池,排序堆等是否处理;检查数据库是否收集过统计信息,准确的统计信息对语句优化起着重要的作用;对sql语句进行优化;查看是否有系统资源瓶颈。
    4.5 其他需求网上花店销售系统是直接面对使用人员的,而使用人员往往对计算机并不是非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面。针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。网上花店系统中涉及到的数据是相当重要的信息,系统要提供方便的手段供系统维护人员进行数据的备份,日常的安全管理,系统意外崩溃时数据的恢复等工作。
    5 总体设计5.1 系统功能模块设计网上花店销售系统一共分为前台和后台两大模块,两个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连的,各个模块访问的是同一个数据库,只是所访问的表不同。
    网上花店销售系统的前台功能模块分为:

    鲜花展示模块:鲜花展示模块主要是向用户展示网上花店的鲜花,主要分为鲜花搜索和鲜花分类两个子模块。用户可以通过鲜花搜索直接查询自己想要了解的鲜花,也可以通过鲜花分类查找某一类的鲜花
    公告展示模块:公告展示模块是管理员发布的与网上花店系统相关的公告信息,可以包括系统的使用或者最新的优惠活动等。用户登录系统后,可以查看公告信息,以此来最快的了解系统
    购买鲜花模块:购买鲜花模块主要是完成用户在网上的购物的流程。购买鲜花模块分为加入购物车和生成订单两个子模块
    用户管理模块:用户管理模块分为用户注册、用户登录、用户修改信息三个子模块

    网上花店销售系统前台功能模块图如图5-1所示。

    用户进行购买鲜花时,先进行注册,然后进行登录,登录系统后用户可以浏览鲜花,把需要购买的鲜花加入购物车,把购物车的鲜花生成订单。用户购买鲜花时序图如图5-2所示。

    网上花店销售系统的后台功能模块分为:

    分类管理模块:分类管理模块主要是实现管理员对系统分类的管理,使得用户可以按照分类挑选鲜花,方便了用户的挑选,管理员通过这个模块可以向系统添加新的分类,查看已有的分类,修改已有的分类,删除旧的分类
    鲜花管理模块:鲜花管理模块主要是实现管理员对系统鲜花的管理,该模块对整个系统至关重要。管理员通过这个模块可以向系统添加新的鲜花,查看已有的鲜花,修改已有的鲜花,删除旧的鲜花
    订单管理模块:订单管理模块主要是实现管理员对系统订单的管理,管理员通过这个模块可以查看用户下的订单并对订单做出相应的处理
    公告管理模块:公告管理模块主要是实现管理员对系统公告的管理,这样用户进入系统后可以通过浏览公告获取网上花店销售系统的最新资讯,并且可以在最短的时间内对系统有基本的了解。管理员通过这个模块可以向系统添加新的公告,查看已有的公告,修改已有的公告,删除旧的公告
    用户管理模块:用户管理模块主要是实现管理员对已注册用户的管理,管理员通过这个模块可以查看用户的信息或者删除用户

    网上花店销售系统后台功能模块图如图5-3所示。

    5.2 数据库设计5.2.1 概念结构设计描述概念模型的有力工具是E-R模型,E-R模型是用E-R图来描述现实世界的概念模型。E-R模型包括实体、属性、实体之间的联系等。接下来将用E-R图对网上花店销售系统进行概念结构设计,包括各实体间的E-R图及各实体的详细属性E-R图。其中实体型用矩形表示,矩形框内写明实体名。属性用椭圆形表示,并用无向边将其与相应的实体型连接起来。联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型。
    本网上花店销售系统的实体有管理员,用户,公告,订单,分类,鲜花。下面将分别设计各实体的E-R图。
    用户E-R图如图5-4所示。

    在该E-R图中,对于用户实体,用户可以浏览公告,因此用户实体和公告实体是浏览关系,用户可以选购鲜花,因此用户实体和鲜花实体是选购关系,用户可以查看分类,因此用户实体和分类实体是查看关系,用户可以管理自己的购物车,因此用户实体和购物车实体是管理关系,用户可以查看自己的订单,因此用户实体和订单实体是查看关系,用户在系统中是被管理员管理的,因此用户和管理员是被管理的关系。
    管理员E-R图如图5-5所示。

    在该E-R图中,对于管理员实体,管理员可以对系统的公告、订单、分类、鲜花进行管理,对已注册的用户进行管理,因此它与其他实体的关系都是管理关系。
    用户实体的属性有ID、用户名、密码、姓名、角色、手机号、地址。用户详细属性E-R图如图5-6所示。

    鲜花实体的属性有ID、鲜花名、鲜花图片、上架时间、分类ID、分类名、价格、是否推荐、点击数、鲜花销量、鲜花描述。鲜花详细属性E-R图如图5-7所示。

    公告实体的属性有ID、标题、内容、添加时间。公告详细属性E-R图如图5-8所示。

    分类实体的属性有ID、分类名称。分类详细属性E-R图如图5-9所示。

    购物车实体的属性有ID、用户ID、鲜花ID、鲜花名、价格、购买数量。购物车详细属性E-R图如图5-10所示。

    订单实体的属性有ID、订单状态、用户ID、用户姓名、用户手机、收货地址、订单详情、订单号、备注、生成时间、总价。订单详细属性E-R图如图5-11所示。

    5.2.2 逻辑结构设计逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。数据库设计时注意保证在整个系统运行和业务操作过程中,数据库都能便于访问和查询,同时还需要考虑到要尽量节省数据库操作时的响应时间,尽可能的提高数据库对程序和业务请求的响应速度。
    根据概念结构设计阶段的E-R图,设计数据库表结构如下。
    t_Fenlei分类表
    该表存放分类ID及分类名称。t_Fenlei分类表如表5-1所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    fname
    varchar
    255
    分类名称



    t_Product鲜花表
    该表存放鲜花信息,主要包括鲜花名、鲜花图片、上架时间、价格、鲜花销量、鲜花描述等信息。分类表和该表相关联,因此表中还包含了分类ID以及分类名。t_Product鲜花表如表5-2所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    pname
    varchar
    255
    鲜花名


    imgpath
    varchar
    255
    鲜花图片


    createtime
    varchar
    255
    上架时间


    fenleiid
    varchar
    255
    分类ID,外键


    fname
    varchar
    255
    分类名


    jiage
    double

    价格


    tuijian
    varchar
    255
    是否推荐


    dianjishu
    int
    11
    点击数


    xiaoliang
    int
    11
    鲜花销量


    miaoshu
    text

    鲜花描述



    t_Gonggao公告表
    该表存放公告信息,主要包括标题、内容、添加时间。t_Gonggao公告表如表5-3所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    biaoti
    varchar
    255
    标题


    neirong
    text

    内容


    shijian
    varchar
    255
    添加时间



    t_Gouwuche购物车表
    该表存放购物车ID、以及用户ID、鲜花ID、鲜花名、价格、购买数量。t_Gouwuche购物车表如表5-4所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    userid
    int
    11
    用户ID,外键


    pid
    int
    11
    鲜花ID,外键


    pname
    varchar
    255
    鲜花名


    jiage
    double

    价格


    shuliang
    int
    11
    购买数量



    t_User用户表
    该表中存放用户的基本信息,普通用户和管理员共用此表,主要包括用户ID、用户名、密码、姓名、角色、手机号、地址信息。普通用户和管理员通过角色的值进行区分, 0表示普通用户,1表示系统管理员。t_User用户表如表5-5所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    username
    varchar
    255
    用户名


    password
    varchar
    255
    密码


    xingming
    varchar
    255
    姓名


    role
    int
    11
    角色


    dianhua
    varchar
    255
    手机号


    dizhi
    varchar
    255
    地址



    t_Dingdan订单表
    该表存放订单ID、订单状态、以及关联表里的用户ID、用户姓名等信息。t_Dingdan订单表如表5-6所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    status
    varchar
    255
    订单状态


    userid
    int
    11
    用户ID 外键


    xingming
    varchar
    255
    用户姓名


    dianhua
    varchar
    255
    用户手机


    dizhi
    varchar
    255
    收货地址


    xiangqing
    text

    订单详情


    orderid
    varchar
    255
    订单号


    beizhu
    varchar
    255
    备注


    shijian
    varchar
    255
    生成时间


    zongjia
    double

    总价



    6 详细设计与实现根据总体设计部分对于功能模块的划分,在详细设计中采用JSP+Servlet+Javabean的MVC模式,其中系统的显示由JSP页面完成,用Javabean封装对象,业务的逻辑处理由Servlet完成,对于数据库的操作写在dao包的文件里。
    6.1 系统对象的设计与实现系统中总共包括七个对象,分别为用户,管理员,公告,鲜花,类别,购物车和订单。系统的类图如图6-1所示。

    在实现过程中将这七个对象封装成bean对象,其中管理员和用户的封装对象内容相同,故二者共用一个对象,用属性role进行区分,0表示用户,1表示系统管理员。六个对象对应于代码中的Dingdan.java,Fenlei.java,Gonggao.java,Gouwuche.java,Product.java,User.java。以User.java为例,关键代码如下:
    public class User { private int id;//主键 private String username;//用户名 private String password;//密码 private String xingming;//姓名 private int role;//用户角色 0表示用户,1表示系统管理员 private String dianhua;//手机 private String dizhi;//收货地址}
    6.2 系统首页的设计与实现该系统首页页面风格简单明了,上边横条可以选择注册和登录,左侧有鲜花搜索,鲜花分类,销量排行榜以及花店公告,用户可以根据自己的需求浏览相关内容。页面右侧是鲜花列表,用户可以通过点击相应的链接查看详情或者加入购物车。首页页面的设计如图6-2所示。

    具体的实现过程是:index.jsp文件主要包括鲜花列表部分,在index.jsp页面引入黄色横条的head.jsp以及左侧的left.jsp。
    6.3 系统前台功能的设计与实现6.3.1 用户注册模块的设计与实现用户注册需要填写相应的信息,主要包括用户名、密码、确认密码、姓名、收货地址以及手机号码。用户注册页面的设计如图6-3所示。

    该页面对应代码中的register.jsp,该页面对输入的每一个数据都有格式上的要求,用户名不能为空且必须是数字,字母或者下划线,密码不能为空且至少6位,确认密码要和密码一致,姓名,收货地址以及手机号都不能为空,手机号码还要符合正确的格式。当用户进行注册时,页面首先会对输入的数据格式进行检验,若输入错误会有相应的提示。除此之外,当用户输入正确的格式的数据之后,点击了注册按钮,系统会在数据库进行比对,若用户名已经被注册,系统也会弹出相应的提示,若用户名还未注册则将数据插入数据库,提示注册成功并跳转到首页。具体的实现过程是在IndexServlet.java中对注册进行逻辑处理,在UserDao.java中对数据库进行操作。
    该页面关键代码如下:
    <form action="indexServlet/register" method="post" onsubmit="return checkform()"> <label>用户名:</label> <input type="text" class="form_input" name="username" id="usernameid" /> <label>密码:</label> <input type="password" class="form_input" name="password" id="passwordid"/> <label>确认密码:</label> <input type="password" class="form_input" name="password2" id="password2id"/> <label>姓名:</label> <input type="text" class="form_input" name="xingming" id="xingmingid"/> <label>收货地址:</label> <input type="text" class="form_input" name="dizhi" id="dizhiid"/> <label>手机:</label> <input type="text" class="form_input" name="dianhua" id="dianhuaid"/> <input type="submit" class="form_submit" value="注册" /></form>
    用户在注册时,第一不能有空值,第二两次密码的输入要一致,第三各项数据的格式要正确。除此之外,用户名不可以是已经注册过的。用户注册程序流程图如图6-4所示。

    6.3.2 用户登录模块的设计与实现用户登录需要填写用户名以及密码,登录页面的设计如图6-5所示:

    该页面对应代码中的login.jsp,用户名和密码都不能为空,否则页面会进行相应的提示,当输入用户名和密码点击登录之后,系统会在数据库中查找,若有匹配的数据则提示登录成功并跳转到首页,否则提示用户名或密码不正确。具体的实现过程是在IndexServlet.java中对登录进行逻辑处理,在UserDao.java中对数据库进行操作。
    该页面关键代码如下:
    <form action="indexServlet/login" method="post" onsubmit="return checkform()"><label>用户名:</label><input type="text" class="form_input" name="username" id="usernameid" /><label>密码:</label><input type="password" class="form_input" name="password" id="passwordid"/><input type="submit" class="form_submit" value="登录" /></form>
    用户在登录时,用户名和密码要一致,如果正确才可以登录成功,否则登录失败需要重新输入登录信息。用户登录程序流程图如图6-6所示。

    6.3.3 公告浏览模块的设计与实现用户在首页可以浏览花店公告,通过点击花店公告的标题可以查看花店公告的详细信息。花店公告页面以及公告详情页面设计如图6-7以及6-8所示。
    花店公告页面

    公告详情页面

    具体的实现过程是,当用户点击花店公告的标题时,通过IndexServlet.java的gonggaoupdate方法获取对象,然后通过GonggaoDao.java对数据库进行操作,最后将对象传到gonggao.jsp页面。
    公告详情页面关键代码如下:
    <form action="${url }" method="post" onsubmit="return checkform()"><div class="form"><div class="form_row"><label>公告标题:</label>${bean.biaoti }</div><div class="form_row"><label>内容:</label>${bean.neirong }</div><div class="form_row"><label>发布时间:</label>${bean.shijian }</div><div class="form_row"><input type="button" class="form_submit" value="返回" onclick="javascript:history.go(-1);"/> </div> <div class="clear"></div></div></form>
    6.3.4 鲜花列表模块的设计与实现用户在系统首页的鲜花列表可以浏览鲜花,鲜花列表包括鲜花名,图片,分类名,鲜花价格,以及查看详情和加入购物车两种操作。点击查看详情后页面会跳转到鲜花信息详情页面。鲜花列表页面以及鲜花信息详情页面如图6-9以及6-10所示。
    鲜花列表页面

    鲜花信息详情页面

    鲜花列表页面对应代码中的index.jsp,鲜花信息详情页面对应代码中的product.jsp,具体实现方式是当用户点击查看详情时,在IndexServlet.java中用productupdate方法进行具体处理,之后把对象传到product.jsp页面。当用户点击鲜花列表或鲜花信息详情页面的加入购物车时,如果用户已经登录,那么系统跳转到我的购物车页面。否则,系统会提示用户先登录并跳转到登录页面。
    6.3.5 用户购物车模块的设计与实现我的购物车页面,包括鲜花名,单价,购买时间,小计。用户可以修改购买数量或者删除购物车里的东西,也可以点击链接跳转到订单页面。我的购物车页面设计如图6-11所示。

    我的购物车页面对应代码中的gouwuchelist.jsp,当用户点击鲜花列表或鲜花信息详情页面的加入购物车时,在IndexServlet.java中用gouwucheadd2方法进行添加商品到购物车操作,在GouwucheDao.java里对数据库进行操作,将所选鲜花数据插入数据库。我的购物车页面的变更删除分别用IndexServlet.java的gouwucheupdate2方法和gouwuchedelete方法实现。
    6.3.6 用户订单模块的设计与实现我的订单页面,包括订单号,收货人姓名,订单状态,生成时间,总价,以及查看订单详情的操作。用户也可以查看和搜索自己的订单。我的订单页面如图6-12所示。

    我的订单页面对应代码中的orderlist.jsp,查询订单的操作在indexServlet/orderlist中实现,查看订单详情的操作在indexServlet/dingdanupdate3中实现,其中对数据库的操作在DingdanDao.java中完成。
    6.3.7 用户信息管理模块的设计与实现用户可以在个人信息页面对自己的信息进行管理,主要是对姓名,手机号以及收货地址的更改,可以在修改密码页面进行密码的修改。用户信息页面的设计与修改密码的设计如图6-13以及6-14所示。
    个人信息页面

    修改密码页面

    个人信息页面对应代码中的userupdate.jsp,修改密码页面对应代码中的passwordupdate.jsp,修改个人信息在是在indexServlet/userupdate2中完成的,修改密码是在indexSe rvlet/passwordupdate2中完成的,操作数据库的部分在UserDao.java中完成。
    6.4 系统后台功能的设计与实现6.4.1 系统后台页面的设计与实现管理员登录成功后会进入系统后台页面,主要包括左侧的主菜单以及中间的欢迎页面。主菜单包括,分类管理,鲜花管理,公告管理,订单管理,用户管理。系统后台页面如图6-15所示。

    管理员在此页面可以通过点击左侧主菜单进行相应的管理。关键代码如下:
    <ul> <li><a href="<%=basePath2 %>manageServlet/fenleilist" >分类管理</a></li> <li><a href="<%=basePath2 %>manageServlet/productlist" >鲜花管理</a></li> <li><a href="<%=basePath2 %>manageServlet/gonggaolist" >公告管理</a></li> <li><a href="<%=basePath2 %>manageServlet/dingdanlist" >订单管理</a></li> <li><a href="<%=basePath2 %>manageServlet/userlist" >用户管理</a></li></ul>
    6.4.2 分类管理功能的设计与实现管理员通过此功能可以查看、修改、删除已经存在的分类,也可以增加新的分类。该系统分类管理页面如图6-16所示。

    分类管理页面对应代码中的fenleilist.jsp,添加新分类以及查看和修改分别对应fenl eiadd.jsp,fenleiupdate3.jsp,fenleiupdate.jsp,管理员进行操作时,系统通过在ManageSer vlet.java中的方法实现,对数据库的操作在FenleiDao.java中实现。
    6.4.3 鲜花管理功能的设计与实现管理员通过此功能可以查看、修改、删除已经存在的鲜花,也可以增加新的鲜花。该系统鲜花管理页面如图6-17所示。

    鲜花管理页面对应代码中的productlist.jsp,添加新商品对应productadd.jsp,上传图片对应productupdate5.jsp,查看和修改分别对应productupdate3.jsp,productupdate.jsp,管理员进行操作时,系统通过在ManageServlet.java中的方法实现,对数据库的操作在ProductDao.java中实现。
    6.4.4 公告管理功能的设计与实现管理员通过此功能可以查看、修改、删除已经存在的公告,也可以增加新的公告。该系统公告管理页面如图6-18所示。

    公告管理页面对应代码中的gonggaolist.jsp,添加新公告对应gonggaoadd.jsp,查看和修改分别对应gonggaoupdate3.jsp,gonggaoupdate.jsp,管理员进行操作时,系统通过在ManageServlet.java中的方法实现,对数据库的操作在GonggaoDao.java中实现。
    6.4.5 订单管理功能的设计与实现管理员通过此功能可以查看和处理订单。该系统订单管理页面如图6-19所示。

    订单管理页面对应代码中的dingdanlist.jsp,查看订单详情对应dingdanupdate3.jsp,管理员进行操作时,系统通过在ManageServlet.java中的方法实现,对数据库的操作在DingdanDao.java中实现。
    6.4.6 用户管理功能的设计与实现管理员通过此功能可以查看和删除用户。该系统用户管理页面如图6-20所示。

    用户管理页面对应代码中的userlist.jsp,管理员进行查询用户和删除用户操作的时候,系统通过在ManageServlet.java中的方法实现,对数据库的操作在UserDao.java中实现。
    7 系统的调试与测试7.1 程序调试调试是在测试发现错误之后排除错误的过程。调试的目的是为了解决存在的错误,即对错误定位、分析并找出原因改正错误,因此调试也称为纠错。软件调试是一项具有很强技巧性的工作,调试是一个通过外部表现找出原因的思维分析过程。常用的调试技术是消去原因法,即通过思考,分析列出发生错误的所有可能原因,逐个排除,最后找出真正的原因。试探法、归纳法、折半查找法、演绎法都属于消去原因法。
    7.2 程序测试7.2.1 测试的内容功能测试:用户注册登录后进行鲜花选购、查看公告等功能,与此同时查看数据库内容是否同步更改,若更改成功则说明程序正确,反之说明程序错误。同理以管理员身份进行登录,对公告、用户等进行查看更改,查看数据库的变化。

    链接测试:在点击菜单按钮之后,查看跳转的页面是否正确
    极限测式:可以通过频繁登录与退出数据库这类频繁的操作来对系统进行测试等

    7.2.2 测试用例根据系统的功能,测试用例为以下几方面:

    用户的注册和登录以及退出,管理员的登录以及退出
    用户浏览鲜花,将鲜花加入购物车,对购物车的鲜花数量进行更改,生成订单,提交订单,查看订单,修改个人信息
    管理员对分类、鲜花、公告进行增、删、改、查,对订单和用户进行查、删

    具体的测试细节为:

    用户注册测试:用户注册时,填写各项信息,首先是各项信息空值的测试,其次是各项数据的数据格式的测试
    用户及管理员登录测试:用户及管理员登录时只需填写用户名和密码,因此测试时主要对用户名和密码的匹配性进行测试
    用户及管理员退出测试:用户和管理员的退出主要是通过点击“退出系统”按钮,因此实际测试中只需测试用户点击按钮后是否能够正确跳转
    浏览鲜花测试:浏览鲜花时用户可以点击查看详情去获取鲜花的详细信息,因此实际测试中只需测试用户点击按钮后是否能够正确跳转到相应的鲜花详情页面
    加入购物车测试:鲜花列表以及鲜花详情页面都有包含加入购物车功能,因此实际测试中需要在两个页面都测试用户点击按钮后是否能够正确跳转到购物车页面
    管理购物车测试:在购物车页面,用户可以对购物车里的鲜花数量进行更改,可以删除购物车里的鲜花,因此实际测试中需对这两方面进行测试
    生成订单测试:用户点击生成订单页面会跳转到确认订单收货信息页面,因此实际测试中要测试用户点击链接后能否正确跳转
    提交订单测试:用户提交订单后会跳转到订单页面,因此实际测试中要测试用户点击提交按钮后页面能否正确跳转以及数据库信息是否相应改变
    用户管理个人信息测试:用户可以更改自己的姓名、收货地址和手机,更改后数据库数据会有相应改变,因此实际测试中要测试用户点击提交按钮后页面能否正确弹出更改成功的信息以及数据库信息是否相应改变
    管理员分类管理测试:管理员在网上花店后台对于分类的管理主要是对分类的增加、修改、查询和删除,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行增加、修改和删除操作时前台显示的分类是否改变以及数据库中的分类数据是否相应的改变
    管理员鲜花管理测试:管理员在网上花店后台对于鲜花的管理主要是对鲜花的增加、修改、查询和删除,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行增加、修改和删除操作时前台显示的鲜花是否改变以及数据库中的鲜花数据是否相应的改变
    管理员公告管理测试:管理员在网上花店后台对于鲜花的管理主要是对公告的增加、修改、查询和删除,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行增加、修改和删除操作时前台显示的公告是否改变以及数据库中的公告数据是否相应的改变
    管理员订单管理测试:管理员在网上花店后台对于订单的管理主要是对订单的查询和处理,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行处理操作时订单是否显示已处理并且数据库中的订单数据是否相应的改变
    管理员用户管理测试:管理员在网上花店后台对于用户的管理主要是对用户的查询和删除,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行删除操作时数据库中的用户数据是否相应的删除

    7.2.3 测试结果通过上一小节对测试细节的分析,对系统进行相应的测试,具体的测试结果如表7-1、表7-2以及表7-3所示。
    在表中有四项内容:

    名称:指测试的对象
    操作:指测试过程中进行的操作方法
    预期结果:指对测试操作产生结果的预测
    实际结果:指实际对系统进行测试时产生的结果

    登录注册测试结果



    名称
    操作
    预期结果
    实际结果




    用户注册测试
    在注册表单输入各种格式的数据
    格式正确则注册成功,反之失败
    同预期


    用户登录测试
    在登录表单输入未注册和已注册数据
    与数据库数据一致则登录成功,反之失败
    同预期


    管理员登录测试
    在登录表单输入正确数据及错误数据
    与数据库数据一致则登录成功,反之失败
    同预期


    用户退出测试
    点击退出系统
    正确退出
    同预期


    管理员退出测试
    点击退出系统
    正确退出
    同预期



    用户操作测试结果



    名称
    操作
    预期结果
    实际结果




    浏览鲜花测试
    点击首页的鲜花列表相应链接
    跳转到相应鲜花界面
    同预期


    加入购物车测试
    点击加入购物车按钮
    跳转正确并且数据库相应改变
    同预期


    管理购物车测试
    对购物车内容进行增、删
    跳转正确并且数据库相应改变
    同预期


    生成订单测试
    点击生成订单按钮
    跳转正确
    同预期


    提交订单测试
    点击提交订单按钮
    跳转正确并且数据库相应改变
    同预期


    管理个人信息测试
    修改个人信息并提交
    跳转正确并且数据库相应改变
    同预期



    管理员操作测试结果



    名称
    操作
    预期结果
    实际结果




    分类管理测试
    在分类管理界面进行增删改查
    跳转正确并且数据库相应改变
    同预期


    鲜花管理测试
    在鲜花管理界面进行增删改查
    跳转正确并且数据库相应改变
    同预期


    公告管理测试
    在公告管理界面进行增删改查
    跳转正确并且数据库相应改变
    同预期


    订单管理测试
    在订单管理界面进行查看和处理
    跳转正确并且数据库相应改变
    同预期


    用户管理测试
    在用户管理界面查看和删除用户
    跳转正确并且数据库相应改变
    同预期



    结论完成了网上花店销售系统的设计,系统前台实现了用户在线浏览所有鲜花,按需求搜索相关鲜花,浏览系统公告以及注册登录后对鲜花选购的操作和购物结束后对订单信息的查看。系统后台实现了管理员对鲜花、分类、公告、订单、用户的管理。
    所设计系统中有一些优点,第一系统安全性高,本系统使用者分为管理员和用户两个角色,当其登录系统时,对其身份进行严格认证;第二采用隔离与访问控制,本系统根据用户的工作需求来分析,对用户权限进行了严格的控制,比如,用户只能浏览鲜花信息而不能修改,系统管理员就可以添加、删除、修改鲜花信息;第三操作简便,该系统本着方便易用的目的进行设计,无论是管理员还是用户都不需要具备专业的计算机知识,只要懂得计算机的一些基本操作,就可以轻松的对花店进行使用,这样做更加贴近用户,使用户使用方便,提高用户的体验。
    但本系统也有一些不足,比如界面相对比较简单,功能相对有限。所以该系统还可以继续完善。
    参考文献[1] 万常选,刘云生. 电子商务的技术及其应用[J]. 计算机工程与应用. 2002(07) .
    [2] 王知强,郑炜. 基于UML的动态企业建模的研究与实现[J]. 哈尔滨商业大学学报(自然科学版). 2005(02) .
    [3] 文灿华,张伟. 基于JSP的网上商城的设计与实现[J]. 电脑知识与技术. 2010(31) .
    [4] 鲁晓东,李育龙,杨健编著.JSP软件工程案例精解[M]. 电子工业出版社, 2005.
    [5] 杨学瑜等编著.JSP入门与提高[M]. 清华大学出版社, 2002.
    [6] 张琳. 网上购物系统的设计与开发[J]. 科技信息(学术研究). 2007(24).
    [7] 陈春蓉. 网上购物系统的设计与开发[J]. 软件导刊. 2009(08).
    [8] 万华. 基于JSP的网上购物系统的实现[J]. 现代计算机(专业版). 2002(10).
    [9] Enhancing Java server availability with JAS. Reinhard Klemm,Navjot Singh. Software. Practice \& Experience . 2001.
    [10] D.C.Ghita.JavaScript Generators. Studia Universitatis Babes-Bolyai:Series Informatica . 2010.
    [11] Jeffrey A Hoffer,Joey F. George.Modern SystemsAnalysis and Design. 2003.
    3 评论 58 下载 2020-08-03 19:01:00 下载需要14点积分
  • 利用哈希表实现电话号码查询系统

    第一章 需求分析1.1 问题描述设计一个电话号码查询系统,为来访的客⼈提供各种信息查询服务。
    1.2 基本要求
    设计每个记录有下列数据项:电话号码、用户名、地址
    从键盘输入个记录,分别以电话号码和用户名为关键字建立不同散列表存储
    采用一定的方法解决冲突
    查找并显示给定电话号码的记录
    查找并显示给定用户名的记录

    1.3 实现提示
    设计不同的散列函数,尝试不同类型冲突解决方案,考察平均查找长度的变化
    记录与散列表分开,达到不同关键字散列表可共享记录

    1.4 补充内容
    自动读入硬盘中的记录,并可以选择存储更新后的记录
    提供信息检测机制,以学号作为唯一关键字,对重复学号的记录不允许插入
    提供删除功能
    提供空⽩检测机制,输入信息任意一项为空则不允许插入
    提供格式检测机制,输入信息的格式不正确则不允许插入(如年龄不允许输入字符或字符串)
    采用不同的hash函数构建方法和不同的冲突处理方式
    实现用户界面

    第二章 系统描述2.1 开发语言及主要功能实现方法本程序基于java语言写成,配置java所需环境变量。 本程序中链表和hash函数均未使用java库中已有函数,链表和hash函数都 是使用java语言自⼰编写实现。 Java 语言实现链表和 C 语言类似,但由于 java 没有指针功能,因此可以将 节点作为单独的类,用引用的方法实现链式链接。 Hash函数分别采用除留取余法和伪随机数法,其中伪随机数用于字符串构造 hash函数,可根据不同的字符串生成不同的随机数。 冲突处理分别采用线性探测法、再哈希法和链地址法。
    2.2 单条记录所含内容结合学生电子号码本的需求情况,选出本部周围的8项内容,作为一条记录:



    学号
    姓名
    性别
    年龄
    电话号码
    住址
    学院
    专业




    123456789
    张三

    19
    1357924680
    学3-236
    计算机学院
    计算机科学与技术



    (其余记录与此格式相同,不做重复)
    2.3 Hash 函数及处理冲突方法本系统分别对学号、姓名、电话号码三项构建 hash 函数,并采用不同的冲突处理方法,具体如下:

    学号散列表:采用除留取余法构建hash函数,采用线性探测法处理冲突
    姓名散列表:采用伪随机数法构建hash函数,采用链地址法处理冲突
    电话号码散列表:采用除留取余法构建hash函数,采用再哈希法处理冲突

    除留余数法
    m是散列表表长。
    f(key) = key mod p (p<=m)
    随机数法
    注意random的随机种子需要是固定的,以便查询的时候能够根据key重新找到,适用于关键字长度不等的情况。
    f(key) = random(key)
    再哈希法
    遇到冲突就重新采用一个散列函数计算新的存储位置,可以使关键字不产生聚集。
    f i (key)=RH i (key) (i=1,2,...k)
    链地址法(拉链)
    将所有关键字的同义词记录在一个单链表中,在散列表中只存储所有同义词表的头指针。
    第三章 功能模块结构3.1 信息插入模块
    功能:插入单条记录,依次输入单条记录中的信息
    输入要求:学号不允许重复、每项信息不能有空值、性别只允许男/女,年龄只允许输入数字等等
    输出结果:将该记录保存在链表中备份,依次采用三种不同的 hash 函数构建散列表索引项,并处理冲突,实现记录与散列表分开,达到不同关键字散列表可共享记录

    3.2 信息修改模块
    功能:按照输入学号修改相应记录,在屏幕上显示对应记录的所有信息并允许修改
    输入要求:学号不允许重复、每项信息不能有空值、性别只允许男/女,年龄只允许输入数字等等
    输出结果:将原记录在链表中的内容更新备份,同时更新三种不同的 hash 函数构建的散列表索引项

    3.3 信息删除模块
    功能:删除单条记录,同时删除链表中的记录和各散列表中的索引
    输入要求:相应记录的学号必须存在
    输出结果:同时删除链表中的记录和各散列表中的索引

    3.4 信息查询模块——按照学号查找
    功能:根据学号的散列值查找单条记录,实际上为查找学号散列表中的索引并获取对应的完整记录
    输入要求:相应记录的学号必须存在
    输出结果:在屏幕上显示相关记录

    3.5 信息查询模块——按照电话查找
    功能:根据电话号码的散列值查找单条记录,实际上为查找电话号码散列表中的索引并获取对应的完整记录
    输入要求:相应记录的电话号码必须存在
    输出结果:在屏幕上显示相关记录

    3.6 信息查询模块——按照姓名查找
    功能:根据姓名的散列值查找单条记录,实际上为查找姓名散列表中的索引并获取对应的完整记录
    输入要求:相应记录的姓名必须存在
    输出结果:在屏幕上显示相关记录(由于姓名可能重复,所以可能会显示多条记录)

    3.7 信息保存
    功能:将已有记录保存在本地
    输入要求:无
    输出结果:在本地保存所有信息


    第四章 主要模块算法说明4.1 学号散列表设计
    hash函数构建方法:通过除留取余法构建散列表
    处理冲突方法:采用线性探测法,一次一步

    4.2 电话号码散列表设计
    hash函数构建方法:通过伪随机数法构建散列表处理冲突方法:采用再哈希法
    4.3 姓名散列表设计
    hash函数构建方法:通过伪随机数法构建散列表
    处理冲突方法:采用链地址法(插入、删除、更新、查询全部包含在内)

    4.4 记录插入模块设计从界面上⽂本框中读取字符串,并进⾏判断:

    首先各项都必须按 照要求,⽐如年龄不能为字符,学号不能为字符等等
    然后判断是否有某项为空,有空则不允许插入
    最后检测学号是否重复, 重复则不允许插入。 然后在链表中添加完整记录,同时建⽴学号、电话号码、姓名的索引

    4.5 记录修改模块设计首先根据给定的学号选择相应记录,显示在屏幕上,允许用户自⾏修改。从界面上⽂本框中读取字符串,并进⾏判断:

    首先各项都必须按 照要求,⽐如年龄不能为字符,学号不能为字符等等
    然后判断是否有某项为空,有空则不允许插入
    最后检测学号是否重复, 重复则不允许插入。 然后在链表中更新完整记录,同时更新学号、电话号码、姓名的索引

    4.6 记录删除模块设计删除输入学号对应的记录,同时删除链表中的节点和各索引表中的索引。
    第五章 运行结果主界面

    添加纪录

    通过学号查找记录并修改

    查询界面

    查询信息如下所示:

    保存信息到本地

    第六章 课程设计总结
    ⼈机交互的问题,用户界面如何设计得美观且易于使用,在此使用java UI设计,设计友好美观的界面,方便用户使用
    怎样能利用合理的哈希函数构建算法和冲突处理算法
    如何实现记录与散列表分开,达到不同关键字散列表可共享记录
    6 评论 200 下载 2018-11-05 12:19:45 下载需要13点积分
  • 基于PHP和MySql的学生成绩管理系统

    摘 要随着学校向全国及至世界范围的持续扩张,学生人数的增加,对于学生的信 息管理也越来越复杂,要求也越来越高,因此需要一个全面、详细的信息管理系 统,以便完成对学生信息的管理。无纸化的环境是技术时代的一个梦想,也是许 多学校和公司越来越意识到的一个真实世界。以前是由学生档案和公告栏来提供 各种信息及通告新的变化,而现在这个繁杂的工作已被网站和内部计算机网络所 取代。使得学生信息的管理更方便、安全。 根据调查得知,现在广大学生进行信息提交的主要方式是基于文件、表格等 纸介质的手工处理,学生信息管理部门信息处理工作量大,容易出错,且管理方 面因人而异。然而学校网上学生信息管理系统应该覆盖各个所需功能,使各级管 理人员和广大教职工在信息系统的辅助下进行工作,提高管理的整体水平。使得 学生信息管理更方便。 学生信息管理系统,可以用集中的数据库将与人力资源管理相关的信息全 面、有机地联系起来,有效地减少了信息更新和查找中的重复劳动,保证了信息 的相容性,从而大大地提高了工作效率,还能使原来不可能提供的分析报告成了 可能。在采用和实施学生信息管理系统之后,就会将依赖于人的过程改为依赖于 计算机系统的过程。学校管理人员只要获取了相应的权限,就可以随时进入系统, 直接查阅相应的信息。采用和实施学生信息管理系统不仅仅是为了提高工作效 率。为了除掉手工记录的低效率工作方式,运用信息化管理,提高工作效率,开 发本系统。 应该看到,在实施学生信息管理系统后,经过整合的、较为全面、准确、一 致和相容的信息不仅可以让学校领导对本学校学生资源的现状有一个比较全面 和准确的认识,同时也可以生成综合的分析报表供学校领导人在决策时参考。
    1 绪论1.1 课题简介随着时代的发展,成绩管理 成了每个教育部门不可或缺的一部分,它的内容对于学校 的有效管理显得尤为重要,作为计算机的一部分,用计算机进行成绩管理无疑会把这个过程 变得尤为简单。 学生管理系统为学生提供了简易的操作和方便的查询,以及更好的被管理。
    1.2 系统背景随着社会信息量的与日俱增,学校需要有一个学生成绩管理系统,以方便对学生的成绩 进行有效的管理。学生成绩管理系统是一个学校不可缺少的重要部分,它的内容对于学校的 决策者和管理者来说都至关重要,所以学生成绩管理系统应该为用户提供充足的信息和快捷 的查询手段。当前成教学院没有一个完善的成绩信息管理平台,计算机使用主要基于 Microsoft Office,不能发挥有效的作用。而且随着我国教育改革的不断深入以及自学教育 的不断扩招,参加考试的人越来越多,考试科目的多样化,使得成教学院对自学考试成绩的 管理越趋繁琐、复杂,工作业务繁杂,工作量大,这种传统的学生管理模式已经暴露出种种 弊端:难以统一调配和处理,效率极低,缺乏科学性以及合理性。随着计算机应用的普及与 深入,利用计算机能够对所有自学考试成绩进行统一管理,并进行分析,大大减少教学秘书 的工作量,提高工作效率,为教学办公带来了极大的方便。通过操作手册,使用者可以了解 本软件的基本工作原理及使用说明。操作人员只需输入一些简单的汉字、数字,就可以存储、 查找、修改、打印学生成绩信息等。本系统开发的总体任务是实现学生成绩管理的系统化、 规范化、自动化、达到提高学生成绩管理效率的目的,本系统本着实用性、通用、开放和安 全的原则,使数据库开发软件开发制作,实现了学生信息管理、课程信息管理、学生成绩管 理、成绩查询等功能。该设计方法易于推广至其它信息化管理系统的设计,充分利用计算机 作为辅助工具,实现学生考试成绩从传统的手工管理到计算机管理,对提高管理效率和节约 大量的人力、物力有一定的推动作用。本系统一切从实际出发,充分考虑了成绩的内部管理、信息交流等方面的复杂需求,实现成绩的有效管理,真正为学生成绩管理提供一个电子平台。 合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。同时,合理 的数据库结构也有利于程序的实现。
    1.3 系统开发运行环境
    操作系统:win10
    软件:AppServ(php+apache+mysql),nginx(代理)

    2 需求分析2.1 系统需求当今社会,计算机的使用已经深入到日常生活和工作的方方面面,它逐渐成 为人们学习和工作时必不可少的工具。虽然目前为止已经开发出了成千上万的软 件系统,但它们并不能满足用户的各种特殊需要,因此人们不得不开发属于自己 的软件,能够满足自己的特殊需求。学生管理系统是教育事业单位必不可少的。 它的内容对学校的管理者来说至关重要,学生成绩管理系统应该能够提供快捷的 查询功能以及能够及时修改、增添、删除信息等功能。传统的人工管理文件档案 的方式存在很多缺点,例如:效率低、保密性差、另外时间一长,信息量的不断 扩增,都给查找、更新何维护带来很大困难。使用计算机对学生成绩进行管理, 具有手工管理不可比拟的优点。例如:检索迅速、查找方便、存储信息量大、保 密性好、及时更新并进行维护等。计算机管理学生成绩能够提高学校的管理效率, 是科学化、正规化管理的重要途径,型心计算机管理将不断深入到学校的各项事 务的管理当中。
    2.2 功能要求2.2.1 教职工对学生成绩有一个整体的了解,在今后的教学中能有所改进。同时可 以对自己教授的课程进行修改,进一步了解学生的个人情况,便于因材施教。 当学生的个人信息发生改变时,老师能够及时进行修改。例如学生转校、后来转 到本系、或者毕业生离开学校等,老师能够根据具体情况对学生信息进行添加、 修改、删除等。能够管理课程信息,合理安排老师教授的课程,及时为学生提供 选课信息。老师能够对课程名、课程编号、学分等进行修改和更新。能够对学生 成绩进行发布、修改、删除,清晰地了解学生的成绩情况,以便做出总结和改进。
    2.2.2 学生能够查询个人的学习成绩和总体学生的成绩,以便做出新的定位。

    成绩查询:成绩修改、成绩添加、成绩删除等
    课程查询:课程修改、课程添加、课程删除等
    学生查询:学生信息修改、学生信息添加、学生信息删除等

    2.3 可行性分析为了使系统在学院的管理中发挥更大的作用,实现工作过程的计算机化,提高工作效率 和工作质量,现提出如下的系统开发目标:

    提供了成绩查询的平台,可以用来发布成绩
    任何学生都能上去查看自己的成绩
    学生可以凭借自己的学号进行查询
    管理员可以进行数据的添加

    可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。也就是说 可行性研究的目的不是解决问题,而是确定问题是否值得去解,研究在当前的具体条件下, 开发新系统是否具备必要的资源和其它条件。
    2.3.1 经济可行性主要从对项目的经济上进行分析评价,一方面是支出的费用,包括设备购置费、管理 和维护费用、人员工资和培训费等,另一个是取得的收益。这是个超小型的管理系统,从投 入的人力,财力与物力来讲是非常之小的,只要一台电脑,一台打印机,这个系统就可以搞 起来,考虑到学校里有电脑,现只要购置一台打印机就可以了。从节省人力方面,可以让管 理人员从繁与复杂的工作中解脱出来,做更多的工作,可以给教学管理提高一个层次。
    2.3.2 管理性学生成绩管理系统是对学生成绩进行管理的一个简单系统,主要又成绩的输入、输出、 浏览、打印、数据备份等组合而成,因此可适用于任何学校用作成绩管理。该系统管理方法 科学,相应的管理制度成熟,所记录的原始数据准确,且操作简单、快速,对管理人员的计算级应用技术要求不高,可被一般管理人员所接受,所以在管理上具备一定的可行性,便与普遍采用。
    2.3.3 技术性在开发本应用软件时,我是按照软件周期进行开发的。而我所设计的学生成绩管理系统 是一个用php 和 Mysql 加前端js框架实现的前后端分离开发的应用系统。
    2.4 安全与完整性要求建立数据库用户,对其权限进行设置。确定各表主键、索引、参照完整性、 用户定义完整性。
    2.5 数据字典学生表(学号,姓名,性别,系别,学生年龄)
    课程表(课程号,课程名,课时,学分)
    成绩表(课程号,学生号,成绩。)
    老师表(老师姓名,老师编号,所授课程,联系电话)

    名字:老师信息描述:学生成绩管理系统中存储的所有老师的信息定义:老师信息=老师姓名+所授课程+教师编号+联系电话
    名字:学生信息描述:学生成绩管理中存储的所有学生信息定义:学生信息=学生学号+学生姓名+学生性别+学生系别+学生年龄位置:存储 输出供查询
    名字:课程信息描述:多个必要课程信息组成定义:课程信息=课程号+课程名+课时+学分位置:存储 输出供查询
    名字:用户表信息描述:用户个人的信息定义:用户信息=用户名位置:存储 输出供查询
    名字:学生成绩信息输入:学生姓名输出:相应的学生成绩信息
    名字:查询信息描述:用户提出的具体查询请求定义:查询信息=[课程查询信息]+[学生查询信息]位置:课程表 学生表 成绩表
    名字:添加信息输入:学号、学生姓名、学生性别、系别、学生年龄输出:新输入的学生信息
    名字:删除信息输入:选中所要删除的学生信息输出:删除完成系统的实体与联系

    3 概念结构设计3.1 系统与实体的联系由需求分析的结果可知,本系统设计的实体包括:

    学生基本信息:学号,姓名,学院,班级,年龄,性别
    课程基本信息:课程名,课程号,学时
    教师基本信息:教师号,教师姓名,职称,年龄,性别,学院
    学院基本信息:学院名、学院号、院长姓名

    这些实体间的联系包括:

    每位学生可以学习多门课程,每门课程可供多位学生学习
    每门课可以由多个老师教,每个老师可以教多门课程
    学生每选一门课就可以得到一个成绩,不选此课就不能取得该课程成绩

    3.2 各个实体 E-R 图3.2.1 学生表
    3.2.2 教师表
    3.2.3 课程表
    3.2.4 成绩表
    3.2.5 总体实体练习图
    3.3 E-R图转实为关系模型3.3.1 学生表


    属性名
    数据描述
    数据类型
    是否为空
    备注




    sno
    学号
    Char(8)
    不允许为空
    主键


    sname
    姓名
    Char(10)
    不允许为空



    Ssex
    性别
    Char(2)
    不允许为空



    Ssex
    性别
    C har(2)
    不允许为空



    sbirth
    出生日期
    atetime(8)
    允许为空



    class
    所在班级
    Char(4)
    不允许为空



    type

    Char(7)
    允许为空



    3.3.2 教师表


    属性名
    数据描述
    数据类型
    是否为空
    备注




    tno
    教师编号
    char(5)
    不允许为空
    主键


    tname
    姓名
    varchar(10)
    不允许为空



    depart
    部门
    varchar(8)
    不允许为空



    Tsex
    性别
    char(2)
    不允许为空



    Tbirth
    出生日期
    datetime ,
    允许为空



    prof
    职称
    char(6)
    允许为空



    3.3.3 课程表


    属性名
    数据描述
    数据类型
    是否为空
    备注




    cno
    课程号
    Char(5)
    不允许为空
    主键



    cname
    课程名称
    varchar(10)
    不允许为空


    tno
    教师编号
    char(3)
    不允许为空



    3.3.4 成绩表


    属性名
    数据描述
    数据类型
    是否为空
    备注




    sno
    学号
    Char(8)
    不允许为空
    主键


    cno
    课程号
    Char(5)
    不允许为空
    主键


    degree
    成绩
    Float(8)
    不允许为空



    5 物理结构设计4.1 确定关系模型的存取方法在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击 物理模型的关系,可以对该关系的名称、注释等信息进行查询。可对该关系的属 性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。在实 际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间, 在建立索引时应遵循:在经常需要搜索的列上建立索引; 在主关键字上建立 索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据 范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规 则。才能充分利用索引的作用避免因索引引起的负面作用。
    4.2 数据流图该数据流图主要体现教职工对学生信息、课程信息和学生成绩的管理,然后 存储的信息作用于查询系统。在学生能够操作的只有成绩查询,如图所示:

    5 效果图5.1 登录5.1.1 学生
    5.1.2 教师
    5.1.3 管理员
    5.2.学生界面5.2.1 首页
    5.2.2 个人信息
    5.2.3 成绩查询默认当前学期

    选择学期

    5.2.4 本学期课表
    5.3 教师界面5.3.1 欢迎界面
    5.3.2 查询教授的课程
    5.3.3 录入成绩
    5.3.4 已录警告
    5.3.5 录入
    5.3.6 选择查看教授的课程已录入的成绩
    5.4 管理员界面5.4.1 学生管理界面查询所有

    分类模糊查询

    添加学生

    编辑信息

    删除学生

    5.4.2 教师管理查询所有

    分类模糊查询

    添加教师

    编辑信息

    删除学生

    5.4.3 课程管理
    5.4.4 排课管理
    5.5 其他5.5.1 退出登录
    5.5.2 修改密码
    6 主要代码6.1 database.php<?phpreturn [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '127.0.0.1', // 数据库名 'database' => 'grademanager', // 用户名 'username' => 'root', // 密码 'password' => '123456', // 端口 'hostport' => '3306', // 连接dsn 'dsn' => '', // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => '', // 数据库调试模式 'debug' => true, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 'deploy' => 0, // 数据库读写是否分离 主从式有效 'rw_separate' => false, // 读写分离后 主服务器数量 'master_num' => 1, // 指定从服务器序号 'slave_no' => '', // 是否严格检查字段是否存在 'fields_strict' => true, // 数据集返回类型 'resultset_type' => 'array', // 自动写入时间戳字段 'auto_timestamp' => false, // 时间字段取出后的默认时间格式 'datetime_format' => 'Y-m-d H:i:s', // 是否需要进行SQL性能分析 'sql_explain' => false,];
    6.2 登录代码 // 登录 public function login() { $t = model('CommonResData'); if (input('post.username') && input('post.password')) { $username = input('post.username'); $password = input('post.password'); $identity = input('post.identity'); if ($identity == 0) { $t->data = Db::query("select admin_name from admin where admin_id=$username and admin_password='$password'"); if ($t->data) { $t->code = 0; $t->data = $t->data[0]['admin_name']; // return JSON($t->resData($t->code,$t->data)); } else { $t->code = 3; $t->data = '没有该用户或密码错误'; } } else if ($identity == 1) { $t->data = Db::query("select teacher_name from teacher where teacher_id=$username and teacher_password='$password'"); if ($t->data) { $t->code = 0; $t->data = $t->data[0]['teacher_name']; // return JSON($t->resData($t->code,$t->data)); } else { $t->code = 3; $t->data = '没有该用户或密码错误'; } } else if ($identity == 2) { $t->data = Db::query("select student_name from student where student_id = $username and student_password='$password'"); if ($t->data) { $t->code = 0; $t->data = $t->data[0]['student_name']; } else { $t->code = 3; $t->data = '没有该用户或密码错误'; } } else { $t->code = 2; $t->data = '登录失败'; } Session::set('islogin',$username); Session::set('identity',$identity); return JSON($t->resData($t->code,$t->data)); } else { $t->code = 2; $t->data = "用户名密码不能为空"; return JSON($t->resData($t->code,$t->data)); }}
    6.3 判断是否登录 public function isLogin() { $isLogin = Session::get('islogin'); $t = model('CommonResData'); if (!$isLogin) { $t->code = 1; $t->data = '未登录'; return; } else { $t->code = 0; session('islogin', $isLogin); } }
    7 总结在此次的学生成绩管理系统程序设计的过程中,我充分认识到了做计划的重要性,只要实现把整体方案规划好,才能保证以后设计的顺利进行,才能应对出现的突发事件,达到系统设计的目标。在开始进行系统设计时,我对管理信息系统的认识比较少,对系统的开发 缺乏本质和深入地研究调查,以至与在着手设计的过程中,困难接踵而至。然而又不知道怎样解决,直到后来重新对此次的设计做了认真细致的规划调查,最终才使整个程序的设计工作完成,当爱系统还是有很多不足。然而,本次程序设计的收获不仅仅让我了解了 php与 appServ,使我对系统开发有了初步的了解,提高了编写程序的兴趣,如果今后有机会的话,我希望能够对编程有更深入的学习。
    7 评论 130 下载 2019-09-25 17:04:50 下载需要14点积分
  • 基于C++实现的小型超市管理系统

    1.系统设计说明1.1 需求分析本次设计主题为小型超市管理系统,根据研究分析,该管理系统主要是对商品不同种类信息进行分别储存,修改,查询,增加,删除,对于库存和销量的排序以及文件的读取。对此我们应该明确需求,从而能够合理设计程序。
    1.2 系统功能描述主菜单一共有七个功能,分别是:商品录入和修改(对商品信息进行录入和二次修改),商品的的增加(重新增加商品),商品的删除(删除原有商品信息),商品的查询(查询已有商品),商品的排序(对商品的库存和利润进行排序),信息储存(将商品信息存如txt文件)和信息读取(从txt文件中读取商品信息)。
    功能模块图

    1.3 系统流程分析增加商品流程图

    商品录入、修改、删除流程图

    2.存储数据结构设计说明2.1 数据结构分析和设计设计了一个基类,里面有价格,名字,成本,结余,入货日期等变量,同时还有输入、输出、计算总利润等函数。同时派生出六个派生类。每个类都有相同的成员函数实现多态。


    class basic//基类

    double price;//价格 char name[n];//名字 double cost;//成本 int surp;//结余 long int date;//入货日期 char unit[n];//计量单位char unit1[n];//计量单位2double getmoney()//计算利润void setdata()//输入信息void display()//展示信息
    class fvm :public basic//水果蔬菜和肉类

    char fvmnumber[n];//编号int fvmtimes;//批次long int fvmdate[max];//入货日期 int fvminnumber[max];//入货数量void ssetdata()//输入所有数据 void setin()//输入进货批次,日期和进货量 void set(){//更改数据 void sdisplay()//输出数据

    其他类和水果蔬菜和肉类类似。
    2.2 数据记录如何创建通过类定义数组,输入数据进行创建。
    outfile.open(文件名,ios::out);if(!outfile){ cerr<<"open error"<<endl; return -1;}for (int i=0;i<a1;i++){ outfile<<文件内容;}
    3.应用界面设计说明界面列表

    各界面中主要变量、函数:

    录入:void ssetdata()
    增加:利用for循环
    删除:利用for循环对数据删除
    cout<< "请输入要删除的商品编号"; cin>>c;itemp =-1;for(int i=0;i<a3;i++){ if(strcmp(c,snacksji[i].snumber)==0) { cout<<"成功查询"; itemp =i; }}if(itemp!=-1){ for(int a=itemp+1;a<a3;a++) { snacksji[a-1]=snacksji[a];} a3=a3-1; cout<<"删除成功"<<endl;}else cout<<"没有找到该编号"<<endl;
    查询:void sdisplay()//输出数据
    排序:定义新数组
    typedef struct { int sell;//库存 double money;//利润 char tname[n];//名字 }rectype;进行排序算法
    文件储存
    outfile.open(文件名,ios::out);if(!outfile){ cerr<<"open error"<<endl; return -1;}for (int i=0;i<a1;i++){ outfile<<文件内容;}
    文件读取
    FILE *fp;if((fp = fopen("fvm.txt","r")) == NULL){ fprintf(stderr," 文件打开失败!\n"); exit(0); } cin>>a1;for(int i=0; i<a1; i++) //循环读取{ fscanf(fp,"%s%lf%lf%d%d",&a[i].tname,&a[i].p,&a[i].c,&a[i].sell,&a[i].d); cout<<文件信息;}fclose(fp);

    4.遗留问题数组定义太复杂太多,类继承整理不清晰。对于原来文件的和类的定义还是很模糊。代码过于冗杂,而且设计思路有所欠缺。
    1 评论 66 下载 2020-06-09 15:00:23 下载需要11点积分
  • 基于JSP和MYSQL的酒店房间管理系统

    摘 要随着社会服务行业的不断发展,使用计算机系统软件来管理整个酒店业务的 要求也逐年提高,我国一些酒店都采用了相关的酒店管理系统来管理酒店业务, 以解决酒店全凭原始的手工记录管理效率低、易出错的缺陷;另外酒店行业对自 身提供服务的质量和能力也有了更高的要求,因此,酒店管理系统正因此而越来 越受到管理者的重视。
    本课题结合酒店管理系统的开发过程,详细介绍如何针对酒店的需求,将先 进的软件应用技术融入现代酒店管理系统当中,开发出功能更完善的酒店管理系 统。本酒店管理系统采用 JSP 技术、MYSQL 数据库,基于 B/S 结构开发实现,系 统主要包括两大功能模块,即用户功能模块和管理员功能模块。本系统采用当前 流行的 B/S 结构,将酒店管理各方面信息集中存储于数据库,实现了信息的实时 共享,适合酒店向集团化发展的需要。系统具有运行稳定、数据结构严谨、稳定 性强等特点。
    关键词 :酒店管理系统; MYSQL 数据库; JSP 技术; B/S 结构
    1 概述1.1 研究背景网络的快速发展从根本上更改了世界的企业的管理方式,自二十世纪九十年 代开始,我国的很多企业就设想可以通过互联网来进行管理企业相关信息。因为 当时存在很多的原因,比如企业的声誉非常不好进行认证、互联网的相关法律法 规也不够完善、开发技术也不够成熟等,阻碍了互联网在各大企业中的发展速度。 进入二十一世纪以后,我国经济有了快速的发展,限制企业管理的各个难题逐一 被解决,国内各大企业都加入到了电子信息化的管理模式中来。
    由于我国经济发展水平正在飞速发展,酒店这个行业作为服务行业中的重要 组成部分,己经越来越显示出其强劲的发展势头。随着我国酒店的不断增多,酒 店这一行业竞争也越来越激烈,因此需要开辟一个新的管理方式。我国酒店业利 用计算机管理系统来加强管理、提高服务水平,虽然至今已有多年的历史,但由 于我国起步发展较晚,只是一些浅层次应用,大多数还停留于七拼八凑的 MIS 系 统水平,甚至还仅限于简单的电算化和信息发布阶段,与国际酒店业先进信息化 应用的差距非常明显。信息化程度不高导致企业决策失误、市场反应速度缓慢等, 己经成为制约我国酒店业进一步发展的重要瓶颈。
    鉴于目前酒店管理的现状,结合信息管理系统的发展,该 JSP 酒店管理系统 充分运用 MIS 的总体思想,综合应用了 MYSQL、JSP 等技术开发,具有很好的管 理功能,真正完好地达到服务于用户的计划。
    1.2 研究现状根据最新调查得知,在此之前对酒店信息的管理通常是基于文本,表格等纸 介的手工处理,酒店客户信息情况的统计和核实等通常采用人工检查与核实,以 及对客房信息的管理等通过人工计算或手抄等方式进行,信息量大,但在数据处 理方面存在工作量大且易出错,其次还存在数据繁多与数据丢失等现象出现,而 且还不方便查找,在总体上存在缺乏系统与规范的信息管理系统现象,为了提高 工作效率我们急需开发出这套 JSP 酒店管理系统。
    随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信 息的重要场所,二十一世纪是信息的时代,所以信息的交换和信息流通显得特别重要。因此,使用计算机来管理酒店信息成为必然。开发合适的酒店管理系统, 可以方便酒店管理者对客房、预订以及会员等信息的管理,提高酒店管理的工作 效率及查询效率,有利于更好的了解客户、管理客户。
    1.3 研究意义JSP 酒店管理系统是酒店业务流程的重组整合用户信息资源,以更有效的方 法来管理酒店业务,从而降低运营成本,为客户提供更经济、快捷、周到的服务, 保持和吸引更多的客户,以求最终达到酒店利润最大化的目的。
    JSP 酒店管理系统与传统方式管理方式比较有很多的优点如:

    查询比较方便:JSP 酒店管理系统提供了非常多的查询途径,可以通过各种途径进行查询, 快速又准确
    信息量大:与过去的管理方式比较,JSP 酒店管理系统能够提供方便的酒店信息
    成本比较低,风险小,不受地点的限制:JSP 酒店管理系统最突出的优势是,管理员通过本系统可快速进行酒店相关 信息的管理,这样就使管理者直观的了解酒店相关信息,大大节省了手工翻阅的 时间。同时为用户提供了一个便利的查询预订的途径,更好的为客户服务

    2 系统相关技术介绍2.1 开发工具本系统的设计主要运用了 MyEclipse 和 Tomcat 后台服务器技术,设计时中 采用了 JSP 技术完成了页面设计过程,接下来我们主要对 MyEclipse 和 Tomcat 进行说明。
    2.1.1 MyEclipseMyEclipse,通常用来设计 Java, J2EE 的 Eclipse 插件集合,利用它可以 完成对数据库和 J2EE 的开发。通过对应用程序服务器进行整合,可以大大的增 强运算速度。MyEclipse 的功能十分强大,几乎涵盖了各种设计功能。
    2.1.2 TomcatTomcat 是一种是一个免费的开放源代码的 Web 应用服务器。在访问客户比 较少的情况下被经常采纳,在设计 JSP 程序时成为最好的选择。换句话说,将 Tomcat 服务器安装到一台电脑上时,可通过它对 HTML 页面的访问请求进行配合。 事实上,Tomcat 可以看成 Apache 服务器基础上的延伸,但它工作时相对比较独 立,因此当 tomcat 工作时,事实上它是看成一个与 Apache 服务器相对独立的 进程运行的。
    2.2 JSP 技术JSP 程序使用了 Java 编程语言,JSP 技术可以对动态网页进行封装。通过 tags 和 script,网页还能访问存在于服务端的资源的应用逻辑。JSP 可以分离网页逻 辑与网页设计和显示,对可重用的基于组件的开发进行支撑,更容易的对基于 Web 的应用程序进行设计。
    当 Web 服务器接收到访问 JSP 网页的请求时,首先运行的程序段,接下来将 JSP 文件中的 HTML 代码和运行效果一并返还给用户。通过 Java 文件的插入能够 对数据库、网页多重定向等运行,从而满足构建动态网页所需要的程序。JSP 和 Servle 相同,都可以通过服务器端运行。由于能够将一个 HTML 文本返回给用户 端,所以用户端具备浏览器就可以进行浏览。HTML 程序和穿插在内部的 Java 程 序可以构建 JSP 网页。在服务器被用户端访问时,能够处理相应的 Java 代码, 然后将产生的 HTML 页面再返回给用户端的浏览器。JSP 的设计关键是 Servlet, 通常大型的 Web 应用程序的设计成果也通过 Java Servlet 和 JSP 的协作。JSP既拥有了方便快捷的 Java 程序,又统统的面向用户,既实现了平台的无关性危 险还比较小,可以具备互联网的全部优势。
    JSP 技术的优点:

    一次编写,到处运行。除了系统之外,代码无需做任何改动
    系统的多平台支持。通常情况下,能够在任何情况下的全部平台上进 行设计,能够安排在任何情况中,也能够在任何情况下进行发展。相比 ASP/.net 来说,优点是显而易见的
    强大的可塑性。通过一个不大的 Jar 程序能够对 Servlet/JSP 进行运 行,也能够通过很多服务器进行集群和负载平衡,甚至能够通过多台 Application 解决问题。单台服务器到多台服务器,Java 展现了一个强大的功能
    具有强大和多样化的开发工具支持。Java 已经有了很多的设计方法, 何况大部分工具都是没有花费的,这中间有很多都在多种平台之下顺畅的进展
    支持服务器端组件。只有很有力的服务器端组件才能支撑 web 运行,因 此开发者可以在调用 web 页面时通过另外的开发工具来达成纷乱效用的组件,来 加强系统的可操作性。JSP 可以通过完善的 JAVA BEANS 组件来达成纷乱的商务功能

    内部对象表现出:request 用户端请求,此请求会涵盖来自 GET/POST 请求 的参数; response 网页传回用户端的反应;管理 pageContext 网页的属性; session 与请求相关的会话;application servlet 正在进行的内容;out 用来 输送响应的输出流; config 代码片段配置对象;page JSP 网页本身。
    2.3 B/S 结构在三层体系结构的 B/S(Browser/Server,浏览器/服务器结构)系统中, 用户可以通过浏览器向分布在网络上的众多服务器发出请求。B/S 系统极大地简 化了客户机的工作量,客户机上只需要安装、配置少量的客户端运行软件即可, 服务器将担负大量的工作,对数据库的访问以及应用程序的执行都将由服务器来 完成。
    B/S 架构的不断成熟,主要使用 WWW 浏览器技术,结合多种浏览器脚本语言, 用通用浏览器需要实现原本复杂的专有软件来实现的强大功能,并节约了开发成 本,是一种新的软件架构。B/S 系统包括:表示逻辑层,控制逻辑层,数据展现 层,三层是相对独立又相互关联。
    2.4 MYSQL 数据库在软件项目中,通过使用数据库来操作数据,可以保证数据的独立性、一致 性和安全性,为系统提供有效地访问数据的方式,同时为程序员减少了应用程序 的开发时间。
    常见的数据库无非分为两类,一类是关系型数据库(Oracle,DB2,MySQL, SQL Server )和非关系型数据库(NoSql、MongeDB)。不同的数据库有各自的优缺 点,此处不做具体介绍。
    MySQL 支持多线程的特点,可以方便的利用系统资源,有效提高速度,而 且提供了 TCP/IP、ODBC 和 JDBC 等多种方式途径来连接数据库;虽说其功能 不够强大、规模也相对较小,但是对于本系统来说足够了,同时也可以进行二次 开发的数据库表结构空间的扩展。
    使用 MySQL 建立系统数据库,不仅有利于前期对数据的整合处理操作,同 时利于后期的二次开发的数据扩展操作,对于有限级的数据处理,MySQL 可以 很好的胜任。
    3 系统分析3.1 可行性分析对所有的系统来说,都有可能会受到时间和空间上的制约。所以,我们在设 计每一个项目的时候,必须对该系统实行可行性分析,这样不但能够降低项目的 危害,还能改降低人力、物力和财力的损耗。下面对技术、经济、操作和法律四 个方面进行介绍。
    3.1.1 技术可行性JSP 酒店管理系统的开发基于 B/S 模式,主要包括前端应用程序的开发以及 后台数据库的建立和维护两个方面。对于应用程序的开发要求具备功能要完备、 使用应简单等特点,而对于数据库的建立和维护则要求建立一个数据完整性强、 数据安全性好、数据稳定性高的库。
    在过去很长一段时间,网络软件的开发都采用客户端(Client)/服务器(Server)模式,即所谓的 C/S 模式。比如在 Java 中,可以通过 Socket 实现一 个客户端/服务器的架构。在这种模式下,主要业务逻辑都集中与客户端的程序, 因此,必然导致以下问题:

    系统的安装、运行、调试、维护和升级的困难
    在 JSP 酒店管理系统中,客户端分布在信息逻辑和用户界面之间,必然增 加了系统的安全隐患

    正是由于 C/S 架构的这些问题,人们逐渐接受了基于浏览器/服务器(Server) 结构的系统,即 B/S 模式。在 B/S 这个模式中,用通用的浏览器来取代之前的客 户端系统程序就是主要的核心。
    B/S 模式对 C/S 模式虽然只作了少许改动,但却带来了很大的优势:因为客 户端统称为浏览器,所以,应用程序在下载、升级、维护时,仅需要在服务器端 进行配置就可以了。所有的配置工作均集中在服务器端,大大的解决了了系统的 安全隐患。
    虽然 B/S 模式拥有很多优势,但是因为在客户端能够利用编程对象仅仅是浏 览器,因此,之前在 C/S 模式下很简单就能实现的一些客户端功能,在 B/S 模式 下,却变的很难实现甚至无法实现。
    虽然如此,B/S 模式仍然是当前许多应用系统的首要选择模式。
    对于计算机专业毕业的学生,对数据库比较熟悉,该系统运行 MYSQL 数据库, 掌握了 Java 编程语言,建立这样一个系统应该在能力范围之内。
    因此从技术方面讲开发此系统是可行的。
    3.1.2 经济可行性本系统采用的软件都是开源的,这样能够削减很多的精力和资源,降低开发 成本。同时也能够提升设计的作用,JSP 酒店管理系统对计算机配置的条件要求 很低,即使是网吧淘汰下来的计算机也能够满足需要,因此,本系统在经济上是 完全具有可行性的。
    3.1.3 操作可行性JSP 酒店管理系统是基于 B/S 模式,通过电脑进行访问和操作,且界面简单 易操作,用户只要平时使用过电脑都能进行访问和操作。本系统具有易操作、易 管理、交互性好的特点,在操作上是非常简单的。因此本系统可以进行开发。
    3.1.4 法律可行性此 JSP 酒店管理系统是自己设计的管理系统,具有很大的实际意义。开发环 境软件和使用的数据库都是开源代码,因此对这个系统进行开发与普通的系统软 件设计存在很大不同,没有侵权等问题,在法律上完全具有可行性。
    总而言之,设计一个 JSP 酒店管理系统具有效率高,操作简便,降低成本等 优点,所以,建立一个 JSP 酒店管理系统是非常必要的。
    3.2 用户需求分析JSP 酒店管理系统主要满足 2 种类型用户的需求,这 2 种类型用户分别为管理员和用户。用户间的静态结构图如图 3-1 所示:

    3.3 性能需求分析为了保证JSP酒店管理系统能够长期、稳定、高效的运行,必须要保证系统 开发的性能。在JSP酒店管理系统的开发过程中,必须用充分的方法确保系统的 安全性和有效性。我们要充分考虑以下几点:

    安全性:在信息化的时代,信息就是宝贵的财富,保证信息的安全,特别是 个人信息更要求可靠的安全性
    先进性:结合当前流行趋势,开发要符合用户的需求,能够快速准确的实现 酒店信息管理相关功能
    可扩展性:JSP酒店管理系统给酒店信息管理带来了极大的便利,提高了管 理效率,备受管理人员的关注,因此在开发JSP酒店管理系统的过程中,我们要 考虑到系统的可扩展性,便于将来系统的升级、更新
    有效性:有效性主要包括功能有效性,设计JSP酒店管理系统的功能一定要 最大限度地满足用户的需求

    3.4 系统流程分析3.4.1 操作流程为了保证系统的安全性,要使用本系统必须先登陆到系统中,管理员和用户 通过不同的账号和密码,登录到不同的管理界面。其登录流程图如图3-2所示。

    3.4.2 注册流程用户在注册账号的时候,首先进入注册界面,填写用户信息进行注册。用户 注册流程图如图3-3所示。

    3.5 系统用例分析3.5.1 管理员用例系统中的核心用户是系统管理员,管理员登录后主要功能有系统用户管理, 注册用户管理,酒店楼层管理,酒店类型管理,酒店客房管理,客房信息管理, 酒店活动管理,留言管理和系统管理。管理员用户的用例如图3-4所示。

    3.5.2 用户用例用户可以查看网站信息,包括首页,酒店活动,地理位置,客房信息,在线 留言,注册登录,登录后进入个人中心,包括个人资料管理,我的预订管理,入 住记录管理和退房记录管理,用户用例图如图3-5所示。

    4 系统设计4.1 系统结构设计JSP 酒店管理系统的设计与实现主要分为用户和管理员 2 个用户角色,系统 结构图 4-1 所示:

    4.2 系统功能模块设计4.2.1 功能概述JSP酒店管理系统分为三个用户角色,分别是管理员,员工和用户,其具体 功能如下:

    管理员功能模块: 管理员登录后主要功能有系统用户管理,注册用户管理,酒店楼层管理,酒店类型管理,酒店客房管理,客房信息管理,酒店活动管理留言管理和系统管理
    用户功能模块: 用户可以查看网站信息,包括首页,酒店活动,地理位置,客房信息,在线留言,注册登录,登录后进入个人中心,包括个人资料管理,我的预订管理,入 住记录管理和退房记录管理

    4.2.2 系统功能结构通过上述分析,得出本JSP酒店管理系统功能模块图如图4-2所示:

    4.3 系统顺序图顺序图表示交互、是指为得到一个期望的结果而在多个分类器角色之间进行的交互序列。
    4.3.1 登录模块顺序图
    4.3.2 添加信息模块顺序图
    4.4 数据库设计4.4.1 数据库设计原则在概念设计中,通常用四种方法: 自顶向下、自底向上、逐步扩张、混合策略,以它为骨架集成由自底向上策略中设计的各局部概念结构 在物理结构设计阶段首先分两步走:确定数据库的物理结构,在关系数据库中主要是指存取方法和存储结构。对 物理结构的评价是时间和空间效率。选取正确的关系模式存取方法,常用的有:存取索引方法、聚簇存取、HASH 存取方法等。
    4.4.2 数据库实体在此阶段,用户可以参与和评价数据库系统的设计,从而有利于保证数据库 系统的设计与用户的需求相吻合。在概念模式的设计中,E-R模型法是最常见的 设计方法。
    通过上述分析对数据库的需求,与系统概念模型的特点及开发方法相结合, 我们可以建立E-R模型图,本系统的E-R图如下图所示:
    管理员信息实体E-R图如图4-5所示:

    酒店客房信息实体E-R图如图4-6所示:

    客房预订信息实体E-R图如图4-7所示:

    留言板信息实体E-R图如图4-8所示:

    入住登记信息实体属性图如图4-9所示:

    退房信息实体属性图如图4-10所示:

    4.4.3 数据库表设计本酒店管理系统需要后台数据库,本系统采用MYSQL数据库进行数据的存储, 下面介绍数据库中的各个表的详细信息。
    allusers 管理员信息表



    列名
    数据类型
    长度
    是否主键
    注释




    ID
    int
    1,1

    编号


    username
    varchar
    50

    用户名


    pwd
    varchar
    50

    密码


    cx
    varchar
    50

    权限


    addtime
    datetime


    添加时间



    jiudiankefang 酒店客房信息表



    列名
    数据类型
    长度
    是否主键
    注释




    id
    int
    1,1

    编号


    fanghao
    varchar
    50
    用户名
    房号


    louceng
    varchar
    50

    楼层


    leixing
    varchar
    50

    类型


    jiage
    varchar
    50

    价格


    yajin
    varchar
    50

    押金


    zhuangtai
    varchar
    50

    状态


    tupian
    varchar
    50

    图片


    beizhu
    varchar
    500

    备注


    addtime
    datetime


    添加时间



    kefangyuding 客房预订信息表



    列名
    数据类型
    长度
    是否主键
    注释




    id
    int
    1,1

    编号


    fanghao
    varchar
    50

    房号


    louceng
    varchar
    50

    楼层


    leixing
    varchar
    50

    类型


    jiage
    varchar
    50

    价格


    yajin
    varchar
    50

    押金


    yudingriqi
    varchar
    50

    预定日期


    yudingshiduan
    varchar
    50

    预定时段


    tianshu
    varchar
    50

    天数


    yudingren
    varchar
    50

    预订人


    xingming
    varchar
    50

    姓名


    shenfenzheng
    varchar
    50

    身份证


    beizhu
    varchar
    500

    备注


    issh
    varchar
    2

    是否审核


    addtime
    datetime


    添加时间



    liuyanban 留言板信息表



    列名
    数据类型
    长度
    是否主键
    注释




    Id
    int
    1,1

    编号


    cheng
    varchar
    50

    昵称


    xingbie
    varchar
    2

    性别


    QQ
    varchar
    50

    QQ


    youxiang
    varchar
    50

    邮箱


    dianhua
    varchar
    50

    电话


    neirong
    varchar
    500

    留言内容


    addtime
    datetime


    留言时间


    huifuneirong
    varchar
    500

    回复内容



    ruzhudengji 入住登记信息表



    列名
    数据类型
    长度
    是否主键
    注释




    id
    int
    1,1

    编号


    fanghao
    varchar
    50

    房号


    louceng
    varchar
    50

    楼层


    leixing
    varchar
    50

    类型


    jiage
    varchar
    50

    价格


    yajin
    varchar
    50

    押金


    xingming
    varchar
    50

    姓名


    shenfenzheng
    varchar
    300

    身份证


    ruzhuriqi
    varchar
    50

    入住日期


    lidianriqi
    varchar
    50

    离店日期



    tuifang 退房信息表



    列名
    数据类型
    长度
    是否主键
    注释




    id
    int
    1,1

    编号


    fanghao
    varchar
    50

    房号


    yajin
    varchar
    50

    押金


    xingming
    varchar
    50

    姓名


    shenfenzheng
    varchar
    50

    身份证


    jine
    varchar
    50

    金额


    feiyongjiesuan
    varchar
    50

    费用结算


    tuifangriqi
    varchar
    50

    退房日期


    tuifangren
    varchar
    50

    退房人


    beizhu
    varchar
    200

    备注


    issh
    varchar
    2

    是否审核


    addtime
    datetime


    添加时间



    5 系统的实现5.1 用户功能模块的实现5.1.1 系统主界面用户进入本系统可查看酒店活动、地理位置以及客房信息等,系统主界面如 下图5-1所示。

    5.1.2 用户登录界面用户要想实现酒店客房预订操作必须登录系统,用户登录界面展示如图5-2 所示。

    5.1.3 酒店客房信息界面用户可就如酒店客房信息界面查看客房详情信息,登录后并可进行预订和评 论操作,酒店客房信息界面展示如图5-3所示。

    5.1.4 客房预订界面用户在客房预订界面可输入预定日期、离店时间以及身份证等,客房预定界 面展示如图5-4所示。

    5.1.5 用户注册界面未有账号的用户可进入注册界面进行注册操作,用户注册界面展示如图5-5 所示。

    5.1.6 在线留言界面用户在在线留言界面可输入留言内容,进行留言操作,在线留言界面展示如 图5-6所示。

    5.1.7 我的预订管理界面用户登录后可进入我的预定管理界面查看个人预定信息,并可对其进行删除 操作,我的预定管理界面展示如图5-7所示。

    5.2 管理员功能模块的实现5.2.1 管理员登录界面管理员要想进入系统后台进行管理操作,必须登录系统,管理员登录界面展 示如图5-8所示。

    5.2.2 注册用户管理界面管理员登录后可查看注册用户信息,并可对其进行审核、修改和删除操作, 注册用户管理界面展示如图5-9所示。

    5.2.3 酒店楼层管理界面管理员可添加、修改和删除酒店楼层信息,酒店楼层管理界面展示如图5-10 所示。

    5.2.3 酒店客房管理界面管理员可添加、修改和删除酒店客房信息,酒店客房管理界面展示如图5-11 所示。

    5.2.5 预订信息查询界面管理员可查看用户客房预订信息,并可对其进行审核和添加预订入住操作, 预订信息查询界面展示如图5-12所示。添加预订入住界面展示如图5-13所示。
    预订信息查询界面

    添加预订入住信息界面

    6 系统测试6.1 系统测试目的与意义系统测试是开发一个管理信息周期中非常重要而且漫长的的阶段。其重要性 体现在他是保证系统质量与可靠性的重要关口,是对整个系统开发过程的最终审 查。
    系统测试的主要任务是尽可能的检查出程序中的错误,提高系统的可靠性, 主要的目的是位列检验系统“做得如何”。其中这一阶段又可以分为三个步骤: 模块测试;组装测试;确认测试;通过测试整个管理系统来确定能不能够满足用 户的需求。通过测试发现问题以后,我们要经过不断的调试找出错误具体原因和 位置,然后对其进行修改。
    6.2 测试方法在我们设计软件的过程中,测试系统常用的测试方法主要有两种:功能测试 和结构测试。
    功能测试也被叫做黑盒测试和数据驱动测试,是在已经知道系统应该具有的 具体功能的情况下,通过黑盒测试来测试系统功能是不是能够正常运行。在测试 时,将系统当做不能打开的盒子,在不管系统内部结构与特性的状况下进行测试, 它只检查系统功能是不是根据系统说明书的规定正常运行的,同时检测系统是否 能正确接收的输入信息和输出信息的正确对应,并保持系统的完整性的外部信息 需求。
    白盒测试与黑盒测试相反,它了解系统内部工作的各项具体程序,能够通过 测试来检查系统内部的运行是不是按照系统说明书的规定进行正常运作的,因 此,白盒测试又被叫做结构测试和逻辑驱动测试。根据测试程序的结构在每个道 路试验,当系统运行时不是能按预定要求正确运行,无论其功能如,白盒测试试 验,道路试验是一个逻辑驱动器,这种测试主要用来软件测验。
    软件测试工作必须要通过制定测试计划、设计测试、实施测试、执行测试、 评估测试五个阶段完成。设计测试的目的是确定、描述和生成测试过程和测试用 例。实施测试的目的是实施设计测试中定义的测试过程。测试的目的是实施和测 试过程定义的设计实现。测试的目的是确保由运行意图建立系统的实现。
    6.3 其他错误在程序设计实现的过程中不可避免的会产生各种难以预料的错误,如书写错 误、传值类型不一致、参数传递问题等等。这些都需要通过细心的检测与不断的 调试才能够排除。比如在servlet路径配置时因粗心错误导致运行导致所报错误, 如图6-1所示:

    6.4 测试结果经过对上述的测试结果分析,本酒店管理系统满足用户的要求和需求。所有 基本功能齐全,操作简单,系统运行性能良好,是一个值得推广的酒店管理系统。
    7 系统评价7.1 系统的特点和优点本系统设计时借鉴了国内外优秀网站的优点,从界面到系统设计都保证了管 理员、员工以及用户能够方便操作。系统的主要特点和优点归纳如下:

    本系统用的移置性和针对性都比较高,因为针对性高可以提供更好的 服务而移置性可以在多个系统上运行,更给客户带来了极大的方便
    该酒店管理系统内容全面,管理方便可以及时的全面的处理各种错误, 异常,这样避免了很多因客户的马虎操作而出现的失误,其操作方便,用户界面 友好,能够上网的人都可以很好的进行操作

    7.2 系统存在的不足和改进方案本系统应为时间仓促造成了很多的不足,下面我来一一的进行陈述并在日后 得到更好的改进方案:
    首先界面并不够美观,不能更好的吸引用户,所以在今后的日子里我会对其 视觉上的不足作出修改,其次系统的代码和数据库出现了非常多的冗余现象,都 是因为对编程技术的应用不够熟练,在日后我会加强自己的自身学习和能力,减 少这样的冗余现象。
    2 评论 28 下载 2020-08-26 10:31:16 下载需要11点积分
  • 基于Java的飞机大战游戏的设计与实现

    摘 要现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communication ,第四代移动通信技术)网络的深入,越来越多的IT行业开始向手机行业转移重心。而手机行业中游戏方面的利润所占比重较大,并且手机游戏大多数则是由Java语言开发研制的。所以我想顺应时代发展,用学到的Java知识对游戏进行一次深入的了解与创作。
    Java语言在我们大学学习中占了很大的比重,其优点甚多:面向对象,可靠,安全,多平台可移植,高性能,多线程等。面向对象是相对于c语言的面向过程来说的,在面向对象编程中,我们用Java去新建一个对象,调用其方法就能实现我们的目标,并不需要了解这个对象的方法的具体实现过程;Java的可靠安全特点体现Java不支持指针,禁止第三方访问,杜绝了外部风险。所以使用Java开发游戏,是一个正确的选择。
    大学学习即将结束,在毕业之际,我想用我4年里学习的知识为自己编写一个属于自己的游戏——飞机大战游戏,为我的大学生活画上圆满的句号。
    关键词:Java游戏;面向对象;可靠安全;多线程
    AbstractNowadays, with the emergence and popularization of smart phones, plus 4 g (the 4 th Generation mobile communication, the fourth Generation mobile communication technology) the development of the Internet, more and more in the IT industry began to shift to the mobile phone industry center of gravity. Aspect of the game of the mobile phone industry profits account for a large proportion, and most mobile game is developed by Java language. So I want to keep up with the development of The Times, use Java knowledge for an in-depth understanding of the game and creation.
    Java language learning in our universities accounted for a large proportion of its many advantages: Object-oriented, reliable, secure, multi-platform portable, high-performance, multi-threading. Object-oriented process-oriented with respect to the terms of the c language, object-oriented programming, specifically we use Java to create a new object, call its methods will be able to achieve our goal, we do not need to know the object’s method of implementation ; reliable safety features reflect Java Java does not support pointers to prohibit third-party access, to eliminate the external risk. Therefore, the use of Java development aircraft war game, is the right choice.
    University coming to an end, on the occasion of the graduation, I want to use my four years studying knowledge and made themselves a game of their own - Aircraft war game for my college life painting satisfactory conclusion.
    Keywords: Java game; object oriented; reliable and secure; multi thread
    1 引言1.1 项目背景90后的我们,童年最开始接触电子游戏是在游戏厅,那时候的飞机大战游戏机前,往往人山人海,绚丽多彩的画面,带感操作让人沉醉不能自拔。再后来,珍珠港(Pearl Harbor),虎虎虎(Tora! Tora! Tora!)等空战电影中激烈的空战和飞机在天空中的英姿让我彻底爱上了空战,所以毕业设计我选择了与飞机战斗有关——基于Java的飞机大战游戏的设计与实现的毕业设计。
    而选基于Java的飞机大战游戏的设计与实现为题,是对大学期间学到知识的一次实践运用,也是对自己大学四年学习成果的一次检验。
    柏拉图:“游戏是一切幼子生活和能力跳跃需要而产生的有意识的模拟活动。”亚里士多德给游戏的定义是:“游戏是劳作后的休息和消遣,本身并带有任何目的性的一种行为活动。”可以说,游戏是一种一直存在的社会现象,有了人类就有了游戏,人类与游戏息息相关。游戏也随着人类的进步有了新的发展。
    PC机刚开始普及的时候,游戏并不能被广泛接受。最主要的原因就是不能充分发挥PC机的性能,即游戏程序不能最大化使用PC机的硬件资源,导致PC机的早起游戏画面差,操作感僵硬,可玩度不高,所以不被人们所接受。但是随着切硅的技术的提升导致CPU性能的飞跃及Java语言的开发,游戏程序对硬件资源的利用率的提高,现在游戏的各个方面都有了质的飞跃。比如20世纪末,暴雪公司下的《星际争霸1》掀起全球星际流,其操作感和画面打击感及游戏可玩性都有很大的提升。当然,除了游戏本身的优秀质量以外,可以较广的支持不同的硬件设备的功能也不容忽视,高中低端PC机都有不错的流畅度。
    而飞机大战类游戏中起步较早的还要数由日本公司Cyber Front研制并发行的雷电系列,该系列操作简单,节奏明快,因此,可以说成是飞机大战游戏类的经典之作。该系列下的《雷电3》在2016年中旬从PS2平台移植到PC机平台上后,更成为当时风靡一时的游戏。
    《雷电3》一共有8个关卡,分别是病变的森林,玄武岩城市。岩石港湾,金色的沙漠,原子核工厂,小行星带,大型宇宙舰和地方总部。雷电3的关卡不多,而且流程比较短,所以主要还是以刷新分数上限,挑战操作极限的目的为主,考验玩家的手速和反应能力,是一款极为经典的游戏,即使过去了十几年,《雷电3》仍然广受欢迎,各大应用商店的点击下载量还是很高,衍生出来的游戏更是数不胜数。
    1.2 国内外研究现状Java语言经过多年的发展,已经十分成熟。Java语言称霸企业级应用这门多年的事实证明了这门语言适合开发各种项目。当Java语言的运行效率随着发展再次提升了一大截后,Java语言的一系列优势就更加明显的体现出来了,比如:语言严谨,高抽象,可读性强等。
    对于游戏开发,由于涉及到各种复杂的问题情况,经常遇到新的问题,所以在开发过程中,需要进行对代码进行不断的修改添加,这就需要可以随时随地的修改代码。而Java具有虚拟机特性,Java游戏本身也可以用Java来写,例如,目前的BeanShell,Groovy和其他脚本语言可以很容易地,无缝地与Java语言的互动,我们可以通过脚本随时对游戏进行添加与删除,不必要重新开发某个模块。这是大大方便了Java游戏编程。
    在游戏的发展中涉及到了大量的Java技术,某些技术现在已经淘汰,但是也有些技术一直在使用。如Sun公司较早推出了3D技术— Java3D,是一个高度封装的API,OpenGL和Direct 3D都是基于Java3D的,可以说是最有名的3D Java技术;Jogl函数则是opengl接口对Java的实现;lwjgl函数(light weight Java game library)是将游戏图形(opengl)、音效(openal)、控制输入集合为一,以成为Java界的directx(不是direct3d)而努力;joal函数则是Java对openal的一个绑定,是Java音效的一个解决方案;jinput函数是Java对非标准输入设备(游戏手柄,操纵杆)的解决方案; Project Wonderland是Sun开发的一个3d虚拟世界构建工具等。
    由于VR(Virtual Reality)虚拟现实的发展,对游戏的发展影响巨大。科幻电影小说中的科幻游戏玩法有可能成为现实,未来游戏也许不需要鼠标键盘,只需要一个类似VRBox的头盔设备即可完成指令的输入与输出。
    1.3 项目主要工作本次项目的题目——基于Java的飞机大战游戏的设计与实现,主要目的是实现飞机大战这个游戏。期望结果:游戏无BUG(现在人们将在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为BUG——漏洞),简单易上手,老少皆宜,让玩家“玩不释手”。
    从游戏的玩法来说,主要就是我方飞机(Hero airplane)和敌方飞机(Enemy airplane)的对决,首先是游戏的开始界面与结束界面,然后就是我方飞机(Hero airplane)的移动方式(鼠标移动或者键盘移动,我打算选择鼠标移动,因为鼠标移动可以转移到手机上,现在大多数手机都没有键盘,基本靠手指滑动操作),接下来就是我方飞机(Hero airplane)子弹的生成,然后是敌方飞机(Enemy airplane)的出现坐标的选择,然后飞机与子弹防碰撞,飞机与飞机的防碰撞,最后是我方飞机(Hero airplane)与敌方飞机(Enemy airplane)的对战结果。
    该游戏要满足以下功能性需求:

    游戏状态控制功能:游戏的状态控制包括运行、暂停、恢复及结束游戏,首先是游戏的开始页面,在游戏正在进行时,如果你有其他的事情又不想结束游戏你可以将鼠标移出游戏界面或者鼠标在游戏界面单击即可暂停游戏,当你的其他事情解决后你还可以选择恢复游戏,继续玩下去,当游戏结束时会显示游戏结束界面
    游戏难度的调整:玩家随着玩游戏的时间的增加,敌方飞机的数量会增加,出现的频率会有所提高,移动速度也会提高
    游戏界面绘画功能:在右上角显示游戏时间(游戏难度于时间成正比,即游戏时间越长难度越高),玩家游戏得分,与我方飞机生命值,游戏主屏用来显示玩家对我方飞机(Hero airplane)的控制与敌方飞机(Enemy airplane)的出现及移动的显示
    玩家游戏控制功能:玩家可以通过控制移动鼠标或者键盘来控制友机的移动

    1.4 本文组织结构本文的组织结构如下:

    第一部分介绍了本文的国内外背景
    第二部分介绍了开发游戏项目涉及到的软件平台与开发语言
    第三部分介绍了项目的需求分析
    第四部分介绍了项目各个模块的实现
    第五部分介绍了对软件测试的过程及结果,找到项目的优缺点

    2 开发平台与开发技术本章主要介绍软件开发平台如何选择。本软件涉及到的开发平台是IntelliJ IDEA,开发技术是Java技术。下面将会介绍一下选择IntelliJ IDEA的理由。
    2.1 IntelliJ IDEA简介IntelliJ IDEA是一个Java的 集成开发环境(IDE),用于开发各种项目的计算机软件。它是由JetBrains公司(原名的IntelliJ)开发的,个人版被Apache 2授权许可,商业版则是作为专业版,可以用来进行大型的商业开发。
    IntelliJ IDEA的第一个版本发布于2001年1月,并且是第一个具有先进的代码导航和一个代码重构的综合能力的Java IDE。
    IntelliJ IDEA对于系统的要求:微软的Windows 10/8/7 / Vista/ 2003 / XP(incl.64位),最少1 GB内存,2 GB RAM(推荐),300 MB硬盘空间+至少1 GB的高速缓存,1024×768的最小屏幕分辨率。
    IntelliJ IDEA特点:

    编码提示:IDE可以进行代码提示,比如:结合上下文对当前代码进行补充;代码导航,可以快速定义到某个声明过的类;代码错误提示,对于代码错误的地方进行提示并且提供有效的解决方案
    内置工具和整合:IDE提供了构建与打包工具,如grunt , bower , gradle , 和 SBT 。它支持各个版本的控制系统,如 GIT , Mercurial , Perforce , and SVN 。可以直接从IDE对SQL Server,ORACLE,PostgreSQL和MySQL数据库进行访问
    各种各样的插件系统:IntelliJ IDEA支持插件,通过插件可以对IDE添加额外的功能。无论是从IntelliJ IDEA的插件库网站或通过IDE的内置插件,都可以进行搜索插件和插件的安装。目前的IntelliJ IDEA个人版则拥有1495个可用的插件,其中IDE的旗舰版则拥有1626个可用的内置插件

    2.2 IntelliJ IDEA与Eclipse 的比较我们大学学习中,对于Java的开发工具一般都是选择 Eclipse,MyEclipse开发工具。Eclipse是Sun公司自己开发的Java开发工具,优点在于简洁没有插件,用户可以根据自己的需求自己寻找安装合适的插件,同时这也是它的缺点,没有提供插件,某些开发就会让人感觉不方便,并且插件都是个人开发,并不是适合所有人。MyEclipse则需要收费(虽然网上有破解版,但是并不提倡,支持正版从你我做起),它实际上是将eclipse和其他常用插件集成在一起的一个庞大开发工具,优势就是常用插件齐全,不用自行下载安装,当然支持自己扩展,劣势就是插件太多导致软件繁重,运行时占用系统太多资源,当然他是收费的(对于学生来说这个是致命的)。
    IntelliJ IDEA更为优秀的原因是:IntelliJ IDEA更为智能,更贴合用户。以下进行详细说明。

    调试:作为调试过程的一部分,我们通常希望选中一些表达式来查看它的值。在Eclipse中,你需要选择这种表达,并且准确选择整个表达式是很重要的,否则在Eclipse中无法评估它。在IntelliJ IDEA中,你只需按下有关快捷键,即可看到表达式的值
    自动完成:自动完成功能的好坏是区分任何IDE的标杆。在这方面的感觉的背景下,IntelliJ IDEA则有一个定性的优势。IntelliJ IDEA不等待任何按键,比如,当你输入一个方法函数是,它立刻会明白方法函数希望将某个定义过的类作为第二个参数,这时会有一个静态变量在类名处呈现可见状态。对于用户来说,提供建议和想法是一个的确不错的做法。但是Eclipse做不到,Eclipse只能理解你当前输入的字符,并不能与前边的联系起来
    重构:专业编程人员如果利用IntelliJ IDEA的IDE提供的重构将会事半功倍。所有IDE提供了一个用处非常大的重构。但话又说回来,IDEA的重构是非常智能的。它知道你想要什么,并提供了大多数情况下适用的不同的建议选项

    如果我们选择一个Java IDE作为开发工具,那么IntelliJ IDEA肯定比Eclipse的更好。这不只是一个个人品味的问题。客观来说IDEA的确是第一选择,它可以让你快速,方便地编写和修改代码,建议适当的函数,提供适当的方法。它不要求你准确选择表达式,但会猜测你想要做什么。
    2.3 JavaJava是一个通用计算机编程语言,是并发的,类型,面向对象的。它的目的是让应用程序开发者“一次编写,到处运行”,也就是说Java可以在任何设备上开发,也可以在任何装有Java虚拟机(JVM)设备上运行,而无需再次编译。
    Java应用程序通常被编译成字节码可以在任何装有Java虚拟机上(JVM)的计算机体系结构上运行。截至2016年,Java是最流行的编程语言之一,特别是对于客户端,服务器的Web应用程序,有报道称有900万开发者在使用Java语言进行开发。Java是由詹姆斯•高斯林在Sun Microsystems(这已经被甲骨文公司收购)创造的,并于1995年发布,作为Sun Microsystems的Java平台的核心组件开发,Java语言多从C和C ++中语法派生出来的。
    最初有Sun公司对参考实现Java的编译器,虚拟机和类库下发专用许可证。截至2007年5月,按照Java社区进程的规章制度,SunRelicensed GNU下大部分的Java技术都在通用公共许可证下。其他人也开发了Java软件替代和实现了Sun公司下的一些技术,如GNU Java编译器(字节码编译),GNU Classpath(标准库)和IcedTea项目的Web(浏览器插件小程序)。
    目前(2016年6月)Java的最新版本是第8个版本,这是目前Oracle支持免费的唯一版本,单早期版本都是由甲骨文等公司在商业基础上的支持的。
    詹姆斯•高斯林,迈克•谢里登和帕特里克•诺顿启动Java语言项目是在在1991年6月,Java最初设计则是用于交互式电视,但它相对于在当时的有线数字电视产业过于超前。后来该项目又由名称Green并最终改名的Java,从Java咖啡(来自爪哇的一种咖啡)得名。高斯林设计的Java与C / C ++ 语法风格相似,系统和应用程序的程序员会发现二者有很大程度的相似点。
    Sun Microsystems公司在1995年发布了第一个公开的实行版本Java 1.0,它承诺“一次编写,到处运行”(WORA)。其相当安全,并设有配置的安全标准,它对网络和文件实行访问限制。主流浏览器很快将Java程序的能力纳入到网页中运行,导致Java迅速走红,然而大多数是外面的浏览器,但是这并不是原来的计划,所以在2016年1月,甲骨文宣布,基于JDK 9 Java运行时环境将不再支持浏览器插件。Java 1.0编译器由亚瑟•范•霍夫重新用Java编写,严格遵守Java 1.0语言的规范。Java 2,新的版本可以在不同类型的平台搭建不同的配置。 J2EE包括面向企业级应用的技术和通常在服务器环境中运行的API,而J2ME对API功能的移动应用进行了优化,桌面版改名为J2SE。在2006年,出于营销目的,将新版本J2分别命名为Java EE,Java ME,和Java SE。
    1997年,Sun Microsystems加入ISO/ IEC JTC 1标准组织,后来的ECMA国际组织要求Java正式化,但它很快就从组织中退出了。但Java仍然是一个事实上的标准,控制Java社区的标准。2006年11月13日,Sun在GNU通用公共许可证(GPL)条款支持下将其Java虚拟机(JVM)公布于众。2007年5月8日,Sun完成了开源的所有过程,在自由软件/开源分发条款下放出了它所有的JVM的核心代码,除了从Sun未持有版权的小部分代码。2010年4月2日,詹姆斯•高斯林(Java的主要创始人)从甲骨文公司辞职。
    3 可行性研究可行性研究顾名思义,研究其的可行性。可行性研究是项目开发之前的重要阶段。在软件开发实践中,软件开发人员或者用户对市场的了解不充分,对技术的掌握不好,对进行开发的各项风险评估不足等因素,有些问题不能再预期下得到解决,造成不可预估的损失,为了避免盲目的软件开发和不必要的损失,相关人员需要对开发特定软件项目的可行性进行研究,结合资金、时间和环境等各方面的制约条件,对该软件产品是否能够解决存在的问题,是否能够带来预期的效果和价值做出评估。
    3.1 技术可行性现在开发游戏的语言一般都是Java语言,为了保证开发出来的游戏可以在手机、Web浏览器、PC客户端等平台使用,所以就要求开发语言可以在多平台移植,而Java语言刚好符合这个特性。开发工具IntelliJ IDEA可以下载并且可以免费使用,Java的编译工具JDK也可以在Sun官网上直接下载安装,其过程十分简单。
    3.2 经济可行性配置较低的电脑也能进行Java游戏的开发,一台电脑就行,开发成本低。由于Java具有跨平台以及一次编译,到处运行的特点,开发出来的游戏可以放到各大游戏平台上发售,玩家可以在电脑,浏览器,手机等各种平台运行。而且软件维护简单,实用性强,一次开发使用,即可长久使用,当软件满足不了用户需求时,只需对用户的需求进行添加即可。
    3.3 操作可行性本游戏操作简单,在电脑和浏览器上可以用鼠标键盘操作,在手机上可以用手触摸屏幕运行。
    3.4用户使用可行性本软件操作简单,对用户的要求,不需要多强技术能力。
    3.5 法律可行性信息产业部已将游戏通用引擎研究及示范产品纳入国家“863计划”,这是中国首次将游戏技术纳入国家科技计划当中。
    4 需求分析需求分析是对即将开发的系统确定一个完整的,准确的要求。需求分析的结果是否完美解决了用户的问题,将直接影响到后面的进程,并影响到设计结果是否能让用户接受。软件需求分析对软件系统提出了清楚、准确、全面而具体的要求,是对软件使用者意图不断进行揭示与准确判断的过程,它并不考虑系统的具体实现,而是严密地、完整地描述了软件系统应该做些什么的一种过程。
    4.1 系统需求概述飞机大战主要需要我方飞机和敌方飞机,还有子弹,特殊nPC,开始背景,结束背景,以及背景音乐。我方飞机可以随意移动,敌方飞机无规律出现。游戏玩家通过鼠标移动控制飞机移动,我方飞机在游戏开始时就一直能发射子弹,当我方子弹碰到敌方飞机时,敌方飞机消失。当玩家飞机碰到敌方子弹时,生命值减一,直到玩家飞机生命值为一时,游戏结束。
    基于Java的飞机大战游戏的设计与实现有以下几个模块:

    游戏状态控制功能模块
    游戏难度的调整模块
    游戏界面绘画功能模块
    玩家游戏控制功能模块

    4.2 功能模块设计4.2.1 游戏状态控制功能模块游戏的状态控制包括运行及结束游戏,首先进入游戏的开始页面,在游戏进行时,玩家必须躲避或者击落敌方飞机,玩家飞机的生命值降低为0的时候游戏就会结束,弹出游戏结束界面。
    4.2.2 游戏难度的调整模块玩家玩的时间越长游戏的难度越高,敌方飞机的数量越多、敌方飞机出现的频率越高,玩家保证飞机的存活的难度越高,操作难度相应也高。
    4.2.3 游戏界面绘画功能模块左上角会显示玩家飞机当前生命值,游戏时间,当前分数,其他地方用来输出玩家对我方飞机的控制与敌方飞机的动作显示。
    4.2.4 玩家游戏控制功能模块玩家可以通过控制鼠标或者键盘来控制方飞机(Hero airplane)的移动。
    4.3 游戏难点分析4.3.1 绘图美化清新靓丽的游戏界面将给用户带来愉悦的美感。因此,在这个游戏中,主要参考原始的游戏画面,敌我飞机的形象也应该是美丽的。
    4.3.2 多线程技术的实现应用程序线程机制的基石,实现了游戏,游戏的刷架的控制,装上各种角色的资源和背景(如飞机,机友)的要求,以实现整个游戏实现自动控制线程 控制。
    4.3.3 防碰撞问题的解决例如,敌方飞机与玩家飞机防碰撞,敌方飞机与玩家飞机防碰撞,等等。防碰撞检测技术实现在不同情况下,有不同的防碰撞检测方法。
    4.3.4 动画的实现用图片的阵列,动画切片变换形成。图像阵列,千变万化的图像画在画布标,使动画,这是一个图像的形成阵列。使用切片来实现动画,所有的帧都放置在相同的图像中,以达到爆炸的效果。
    5 飞机大战功能实现5.1 模型图
    5. 2 软件功能模块
    5.3 游戏首页的实现5.3.1 界面实现飞机大战的界面如图1-3所示。

    5.3.2 流程图游戏开始的流程图如图1-4所示。

    5.3.3 核心代码游戏初始化代码
    \** 写于3月20日,主要目的:完成游戏的初始化过程*\public final void paint(Graphics g) { g.setColor(this.bgColor); g.fillRect(x, y, width, height); g.setColor(this.fgColor); g.drawRect(x, y, width, height); this.paintBoxContents(g);}private void paintBlock(int x, int y, int blockType, Graphics g) { int blockX = this.boardX + (this.blockSize * x); IntblockY=this.boardY+(this.blockSize*(y-TetrisConstants.TOP_VISIBLE_ROW)); if(TetrisConstants.BLOCK_EMPTY != blockType) { g.setColor(TetrisConstants.COLOR_BLACK); g.fillRect(blockX + 1, blockY + 1, this.blockSize - 1, this.blockSize - 1); this.setColor(blockType, g); g.fillRect(blockX, blockY, this.blockSize - 1, this.blockSize - 1); } else { g.setColor(TetrisConstants.COLOR_WHITE); g.fillRect(blockX, blockY, this.blockSize, this.blockSize); }}
    5.4 游戏开始模块的实现5.4.1 界面实现飞机大战的开始界面如图1-5所示。

    5.4.2 流程图流程图如图1-6所示。

    5.4.3 核心代码游戏开始模块的功能代码
    \** 写于3月27日,主要目的:完成游戏的开始界面*\private int clearCompletedRows(TetrisPiece piece) { TetrisBoard board = this.getBoard(); for(int i = 0; i < TetrisConstants.FOUR_BLOCKS; i++) { int rowY = piece.getBlockY(i); if(board.checkRowCompleted(rowY)) { this.markRowCompleted(rowY, true); } } int numClearedRows = 0; for(int y = TetrisConstants.HEIGHT - 1; y >= 0; y--) { if(numClearedRows > 0) { board.dropRow(y, numClearedRows); } if(this.isRowCompleted(y)) { numClearedRows++; this.markRowCompleted(y, false); } } for(int i = 0; i < numClearedRows; i++) { board.clearRow(i); } return numClearedRows;}
    5.5 发射子弹模块的实现5.5.1 界面实现发射子弹界面实现如图1-7所示。

    5.5.2 流程图流程图如图1-8所示。

    5.5.3 核心代码发射子弹实现代码
    \** 写于4月5日,主要目的:完成游戏的子弹的自动发射*\public void rotate(int pivotX, int pivotY, boolean rotateDirection) { if(TetrisConstants.ROTATION_TYPE_TOGGLE == this.rotationType) { // 如果翻转类型为TOGGLE rotateDirection = this.rotationToggle; //判断翻转方向 this.rotationToggle = !this.rotationToggle; // 如果与canRotate匹配,中心点方块将被使用 } // 重构四个小块,每个都转动 for(int i = 0; i < TetrisConstants.FOUR_BLOCKS; i++) { int blockX = this.getBlockX(i); int blockY = this.getBlockY(i); // 左旋转:交换x和y坐标,x坐标取反 // 右旋转:交换x和以坐标,y坐标取反 int dx = blockY - pivotY; int dy = blockX - pivotX; if(rotateDirection) { // 如向左旋转 dx *= -1; } else { // 如向右旋转 dy *= -1; } int rotateX = pivotX + dx; int rotateY = pivotY + dy; this.setBlockCoords(i, rotateX, rotateY);//得到翻转后的新坐标 }}
    选中敌机目标后,开始发射子弹。在TetrisBoard.Java中的checkRowCompleted()方法实现了此功能,其代码如下:
    public boolean checkRowCompleted(int rowY) { for(int x = 0; x < TetrisConstants.WIDTH; x++) { if(TetrisConstants.BLOCK_EMPTY == this.getBlockType(x, rowY)) { // 选中目标,发射子弹 return false; } } return true;}
    当击中敌机后,积分就会有所变化,计算并显示出用户当前的分数。同时等待玩家键入数字,选择游戏难度开始新的游戏。其实现由init()方法控制,其代码如下:
    \** 写于4月12日,主要目的:完成游戏的难度选择*\private void init() { this.board = new TetrisBoard(); this.gameCanvas = new TetrisCanvas(this); this.activePiece = new TetrisPiece(); this.completedRows = new boolean[TetrisConstants.HEIGHT]; //初始化数组 this.hiScore = this.openAndReadHiScore(); this.nextPieceType = TetrisConstants.UNINITIALIZED; this.rand = new Random(); // 设置exit/pause/resume命令 this.setuPCommands(); this.gameCanvas.addCommand(this.exitCommand); // 显示title屏 this.setGameState(TetrisConstants.TITLE_STATE);}
    5.6 积分模块的实现5.6.1 界面的实现飞机大战积分模块界面如图1-8所示。

    5.6.2 核心代码积分板实现代码如下:
    \** 写于4月16日,主要目的:完成游戏的积分模块*\public void drawCount(Graphics g){ g.setColor(Color.white); Font font = new Font("宋体", 1, 20); g.setFont(font); g.drawString("积分:" + this.score, 0, 470); }
    实现积分的增长
    if (burst != null) burst.draw(g_off);for (int i = 0; i < list.size(); i++) { Role chara1 = (Role) list.get(i); if (chara1.isDead()) { if (chara1 instanceof Enemy) { chara1.drawBurst(g_off); this.battle.score++; } list.remove(i); }}
    全屏爆炸时,计算炸死几个敌人增长分数
    if(GamePanel.skillCount>0){ for (int i = 0; i < GamePanel.list.size(); i++) { Role chara1 = (Role) GamePanel.list.get(i); if(!(chara1 instanceof Battle) && chara1.x>0 && chara1.y>0 && !(chara1 instanceof BossA) && !(chara1 instanceof BossB) && !(chara1 instanceof BossC)){ GamePanel.list.remove(i); if(chara1 instanceof Enemy){ this.score++; }
    实现积分的输出
    private void gameOver() { GamePanel.skillCount = 10; if (Key.enter) { gameMode = 12; stage = 1; } else { g_off.setColor(Color.white); Font font = new Font("黑体", 1, 28); g_off.setFont(font); FontMetrics fontMetrics = getFontMetrics(font); g_off.drawString("Game Over", (450 - fontMetrics.stringWidth("Game Over")) / 2, (500 + fontMetrics.getHeight()) / 2 - 50); String score = "Score: " + this.battle.score; g_off.drawString(score, (450 - fontMetrics.stringWidth(score)) / 2, (500 + fontMetrics.getHeight()) / 2 - 20); if (15 <= current % 50) g_off.drawString("请按 回车", (450 - fontMetrics.stringWidth("请按 回车")) / 2,(500 + fontMetrics.getHeight()) / 2 + 100); } }
    5.7 防碰撞逻辑判断飞机是否中弹的逻辑非常简单就是在绘制飞机与子弹的时候判断两个图片是否存在重合的部分,如果存在则玩家生命值减一,之后将中弹飞机从飞机队列中删除,子弹同样的处理。
    5.7.1 核心代码防碰撞逻辑核心代码
    \** 写于4月24日,主要目的:完成游戏的防碰撞模块*\public boolean checkHit(Role chara) { if ((chara instanceof EnemyA) || (chara instanceof EnemyB)|| (chara instanceof EnemyC) || (chara instanceof EnemyShot)) { if ((x + WIDTH) - 14F > chara.x && x + 14F < chara.x + chara.WIDTH && (y + HEIGHT) - 12F > chara.y && y + 12F < chara.y + chara.HEIGHT) { //如果碰到敌人,敌人死亡 chara.dead(); //如果碰到子弹血量减少 if (chara instanceof EnemyBeam){ power--; } power -= 50; if (power <= 0) { dead(); //绘制爆炸图片 GamePanel.burst = new Burst(x, y); } return true; }
    5.8 游戏操作的实现本游戏操作采用鼠标/键盘的移动来实现玩家飞机的移动。
    5.8.1 核心代码游戏操作实现代码
    \** 写于4月23日,主要目的:完成游戏的游戏操作*\public void move() { oldx = x; oldy = y; if (Key.left) { if (Key.xkey) x -= (double) speed / 4D; else x -= speed; if (x <= 0.0F) x = 0.0F; } if (Key.right) { if (Key.xkey) x += (double) speed / 4D; else x += speed; if (x + WIDTH >= (float) app.getWidth()) x = (float) app.getWidth() - WIDTH;} if (Key.down) { if (Key.xkey) y += (double) speed / 4D; else y += speed; if (y + HEIGHT >= (float) app.getHeight()) y = (float) app.getHeight() - HEIGHT; } if (Key.up) { if (Key.xkey) y -= (double) speed / 4D; else y -= speed; if (y <= 0.0F) y = 0.0F; }
    5.9 特殊NPC蜜蜂\** 写于4月30日,主要目的:完成游戏的特殊NPC的添加*\package com.tarena.fly;import Java.util.Random;/**蜜蜂*/public class Bee extends FlyingObject implements Award{ private int xSpeed=1;//x坐标移动速度 private int ySpeed=2;//y坐标移动速度 private int awardType;//奖励类型 /**初始化数据*/ public Bee(){ this.image=ShootGame.bee; width=image.getWidth(); height=image.getHeight(); y=-height; Random rand=new Random(); x=rand.nextInt(ShootGame.WIDTH-width); awardType=rand.nextInt(2);//初始化时给奖励 } /**获得奖励类型*/ public int getType(){ return awardType; } /**越界处理*/ @Override public boolean outOfBounds(){ return y>ShootGame.HEIGHT; } /**移动,可斜着飞*/ @Override public void step(){ x+=xSpeed; y+=ySpeed; if(x>ShootGame.WIDTH-width){ xSpeed=-1; } if(x<0){ xSpeed=1; } }}
    6 系统测试测试是处在开发阶段的最后部分,是保证软件质量的重要手段。软件测试是一个软件应用程序或一个所谓的条件处理和评估在控制条件(包括正常条件和非正常条件)下操作并评价其结果的过程。软件测试过程中应当故意诱导程序发生错误,正常情况下它虽然不应该存在,但是不确定它有可能在任何时候出现。从本质上说,软件测试是“探测”发现“探针”的问题。
    6.1 测试的定义及其重要性6.1.1 测试的定义软件测试是一项为了给利益相关方提供有关产品质量或者是正在测试的服务的信息而进行调查的过程。软件测试也可以提供一个客观,独立的视角来看待软件,以便让企业知晓并理解软件实现过程中可能存在的风险。软件测试技术是一种带着为了发现软件或者程序的BUG(错误或者其他的缺陷)的态度来运行一个程序或者应用的过程。
    软件测试涉及一个软件组件或系统组件的执行,以评估所关注的对象的一个或多个属性。在一般情况下,这些属性表明该组件或系统被测试的程度:

    满足其设计和发展的需要
    对各种输入进行正确的相应
    在用户可容忍的时间内实现其功能
    所有功能都能满足使用
    可以在预定的环境中完美安装并运行
    可以实现如其利益相关者所期望的正常结果

    由于即使对简单的软件组件所进行的测试数量都是数量巨大的,所有的软件测试都运用一些策略去挑选那些无论在时间是对资源都是合适的测试用例。其造成的结果是,软件测试通常(但也不排除其他情况)尝试着带着为了发现软件BUG(错误或者其他的缺陷)的态度来运行一个程序或者应用。当BUG不被解决时,需要反复进行软件测试的工作。它可能解决其他更深层次的BUG,但也可能会使得程序出现新的BUG。
    软件测试可以为用户和赞助商提供有关软件质量和可能存在的风险等级的信息。当然,这种信息是相对客观,独立的。
    软件测试可以为用户和赞助商提供有关软件质量和可能存在的风险等级的信息。当然,这种信息是相对客观,独立的。例如,例如,在软件开发的不同阶段,大部分的测试工作总是在系统需求已经被明确定义时才开始的,然后在测试过程中实现。与此相反,Agile(敏捷开发,是一种对于经常被用于在线应用程序的开发模型的涵盖性术语)方法下,需求,分析,编程和测试经常同时进行。
    6.1.2 测试的重要性尽管测试可以在某些特定假设的前提下,确定了软件的正确性,但是测试还是不能找出软件中所有的缺陷。相反,有些人也许可能会注意到这些问题,它对产品的申明和行为进行评论或与其他产品对照比较,看是否违反了Oracle公司的原则。这些Oracle的原则可能包括(但不限于)规范,合同,类似的产品,过去同一版本的产品,预期的计划或预期的目的,用户或客户的期望,相关标准,适用法律或其他标准。
    测试的主要目的是检测软件故障,使得缺陷被发现并且纠正。测试不能证明在所有条件下,软件或者程序都能正常的运行,它只能检测到在某种特定情况下,软件或者程序不能正常工作。软件测试的范围通常包括代码的检查以及在各种环境和条件的代码的执行情况以及检查的代码功能:什么是它应该做的,如何让它做需要它做的。在软件开发的当前环境中,检测团队可以独立于开发团队之外。从软件测试得出的信息可被用来校正开发软件的过程,防止出现无法挽回的错误。
    每个软件产品都有一些特定的用户。例如,用户对视频游戏软件和银行软件有完全不同的看法。因此,当一个组织开发或以其他方式投资一个软件产品时,软件测试可以评估它的最终用户,购买者或者其它利益相关者是否会接受该软件产品。软件测试是试图评估这一信息的过程。
    并非所有的软件缺陷是由编码错误引起的。往往因为一些错误会付出巨额的代价,这些错误常见的原因之一就是出现在需求方面,例如,程序员没有完全理解需求,从而导程序设计开发时与用户出现分歧。需求的差距往往来自非功能性需求,如可测试性,可扩展性,可维护性,可用性,性能和安全性。
    软件故障,在下述情况是发生:程序员犯了一个错误(失误),这将导致在本软件的源代码中出现一个缺陷(故障,错误),如果执行这种有缺陷的代码,在某些情况下,系统会产生提示出现错误,从而引起了故障。当然并非所有缺陷都将导致故障的发生。例如,死代码缺陷永远不会导致故障。当环境变化时的缺陷可以成为一个失败的关键。这些在环境变化的例子中包括软件在新的计算机硬件平台运行,源代码的改变,或用不同软件进行交互,一个简单的缺陷可能导致一个软件的失败。
    软件测试的基本问题是:即使一个简单的产品,用所有的输入组合和先决条件(初始状态)进行测试是不可行的。这意味着一个软件产品的缺陷数量可以是非常巨大的,而且很多缺陷是难以在测试中发现的。更重要的是,非功能性的属性(它应该做什么与它如何做)如 可用性,可扩展性,性能,兼容性,可靠性是高度主观的; 一个人可能接受其中一个属性的价值却不能认同另外一个。
    软件开发人员无法测试所有的东西(所有的输入组合和先决条件),但他们可以使用组合测试设计,来确定他们想要覆盖测试所需的最小数量。组合测试设计,使用户用很少的测试用例能够获得很大的测试覆盖率。他们可以使用组合测试设计的方法来构建他们的测试用例,是他们的测试速度与测试深度有很大的提升。
    6.2 测试方法软件测试可用许多方法。回归,演练,或校对被称为静态测试,而实际执行程序代码与给定的测试案例被称为动态测试。静态测试往往是隐含的,如校对,再加上编程工具/文本编辑器查看源代码结构或编译器(预编译器)检查语法和数据流的静态程序分析。当程序在运行时动态测试发生。动态测试可以在程序100%完成前开始测试,以便测试特定的代码,也可以应用于分散的功能或者模块中。这个典型的技术使用驱动程序或在调试环境下执行。
    程序测试的主要方法分为两大类:白盒测试和黑盒测试。
    白盒测试(也称为清晰盒测试,玻璃盒测试,透明盒测试和结构测试)可以观察源代码,测试内部结构或程序的运作,而不是暴露终端用户的功能。白盒测试系统,用于设计测试用例,以及透视内部编程的技巧。测试器通过选择路径输入代码来确定相应的输出。这类似于在测试一个电路节点,例如:电路测试(ICT)。
    而白盒测试可以应用于单元测试,集成测试和系统测试的软件流程,但是它通常在单元级别进行的。它可以在集成单元和子系统之间的测试路径上进行系统级别的测试。虽然这种方法测试设计可以发现许多错误或问题,但是它可能无法规范检测到或遗漏需求分析未实现的部分。
    在白盒测试中使用的技术包括:

    API测试 -通过公共和私人的应用测试的API(应用程序编程接口)
    代码覆盖率 -创建测试,以满足代码覆盖率的一些标准(如:测试设计人员可以创建测试,以使程序中所有的语句至少执行一次)
    故障注入方法-有意引入故障来衡量测试策略的效果
    突变检测方法
    静态测试方法

    代码覆盖工具可以评估任何方法,包括创建了一个完整的测试套件的黑盒测试方法。这允许软件团队可以很少对测试进行检查,只确保对最重要的一个系统的部分功能点进行检验即可。代码覆盖率常作为衡量测试好坏的指标,甚至用代码覆盖率来考核测试任务完成情况:

    功能覆盖,函数是否执行
    语句覆盖,语句是否执行
    判定覆盖,对程序中每个判定条件的真分支和假分支至少进行一次判定

    100%的语句覆盖,确保所有的代码路径或分支(在以下方面控制流程)至少执行一次。这对于确保功能的正确有很大的帮助,但是对于相同代码有可能因为输入的不同而有不同的结果。
    黑盒测试把软件作为一个“黑盒子”,具有审查的功能,而有关内部实现的任何细节都不清楚,也看不到其源代码。该测试人员只了解该软件的功能与作用,而不清楚它是如何具体实现的。黑盒测试方法包括:等价类划分,边界值分析,全局测试,状态表转移,决策表测试,模糊测试,基于模型的测试,用例测试,探索性测试和基于规范的测试。
    基于规范型的测试旨在去测试软件关于适应性要求方面的功能。这种级别的测试通常需要测试人员提供全面的测试用例,然后只需验证其中一个给定的输入值,输出值(或行为),不管在测试用例中与期望结果是否相同。测试用例的选取是建立在规范和要求下的,也就是说,应用程序应该做什么。它使用的软件的外部描述,包括规格,要求,和设计以获取测试用例。这些测试虽然有时有用,有时无效,但是通常是有用的。
    基于规范的测试可能只能检测其功能的有效性和正确性,但它不足以应对复杂或高风险的情况。
    黑盒测试技术的一个优点是不需要专业的编程知识。即使编写程序的编程人员与测试人员有鸿沟一般的编程差距,但是测试人员总能从不同的方面给出相应的建设性意见。在另一方面,黑盒测试的过程可以被说成是“摸着石头过河。” 因为不需要检查程序的源代码,所以在某种情况下,测试人员需要写很多测试用例来检查程序,但是该程序只能被一种测试用例来测试或者只能测试程序的部分功能。
    测试的这种方法可以应用到软件测试的各个方面,例如:单元测试,集成测试,系统测试和验收测试。它虽然不能包括测试过程中的所有流程,但是在单元测试中却保持着绝对的优势。
    6.3 测试结果软件评价是指软件在正式运行了一段时间之后,对它在功能上、技术上和经济上所进行的审核评价。针对本软件的评价如下:

    软件功能评价:根据这套软件开发前的目标,试运行完成后软件后,软件达到了预定的发展目标,在实际使用功能可满足用户的需求
    技术评价:该软件设计合理,功能达到预期目标,软件后运行稳定,可靠,安全,实用
    经济评价:在规定时间内,该软件完成后,软件分析,以确定软件的发展目标,符合设计要求,投入使用,为用户节省了大量的人力,物力和财力,提高科学管理水平

    参考文献[1] 杨大生, 陈忠. 基于Symbian平台飞机大战游戏设计[J]. 福建电脑, 2010(07):140-140
    [2] 谢海军. 基于Java的手机游戏引擎的研究及实现[D]. 西南交通大学, 2007.
    [3] 马鹏强. 基于J2ME的手机五子棋游戏设计与实现[D]. 电子科技大学, 2012.
    [4] 周凤英, 文惺. Java游戏开发起步[J]. 电脑爱好者, 2003(14):116-116.,
    [5] 陈立伟. 精通Java手机游戏与应用程序设计[M]. 中国青年出版社, 2005.
    [6] 丁知平, 罗光华, 陈传起,等. 基于项目驱动的Java手机游戏开发教学方法的探讨[J]. 科技信息:科学教研, 2008(7):208-208.
    [7] 陈小玉. 基才J2ME的Java手机游戏开发实例[J]. 电脑编程技巧与维护, 2005.
    [8] Ross J M. Guiding students through programming puzzles: value and examples of Java game assignments.[J]. Acm Sigcse Bulletin, 2002, 34(4):94-98.
    [9] Wang Y H, Wu I C, Jiang J Y. A portable AWT/Swing architecture for Java game development[J]. Software Practice & Experience, 2007, 37(7):727–745.
    [10] Zhu Y. Design and implementation of a Java game applet[J]. Computer Science & Software Engineering, 2002.
    2 评论 20 下载 2020-07-25 15:58:31 下载需要15点积分
  • 基于php的教材管理系统

    摘 要随着时代的进步,网络的应用已经相当普及,人们也认识到网络信息量大,传播方便快捷等特点,网上银行、网上商店、网上查分都应运而生。需求促进了技术的发展,而在这其中,PHP技术则因为可以进行复杂的数据库操作、很强的交互性以及方便用户控制管理且简便易学而备受青睐,成为当前相当热门的网络开发技术。MYSQL是一个真正的多用户,多线程的MYSQL数据库服务器。是一个客户机/服务器结构的实现,它由一个服务器守护程序MYSQL和不同的客户程序和库组成。由于其源码的开放性及稳定性,且与网站流行编程语言PHP的完美结合,很多站点都利用其作为后端数据库,获得了广泛应用。
    本文首先介绍了PHP技术的工作原理、工作过程及其运行环境和PHP文件的编程特点,以及如何较好地配置PHP的需求环境,既使大家对PHP有更好的了解,同时也有利于更好地使用PHP技术。其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。
    关键词: PHP, MySql, Apache, 数据库,数据库实现,数据源 ,电子高校教材
    AbstractWith the development of the computer and technology of the network, it ispopularized day by day in the world that Internet/Intranet uses, in numerousnetwork services, web gives somebody the feeling of finding everything freshand new, and among them, ASP carry on complicated data base operate , verystrong interaction and help user control management and simple and convenientto learn and was favored while being easy to learn, become the quite hotnetwork technology at present.
    This article first introduced operationprinciple of the ASP technology, the workingprocess and its running environments and the programming characteristic of theASP document , as well as how doesdispose the ASP demand environment well, since everybody has a betterunderstanding to ASP, simultaneously is also advantageous to uses the ASPtechnology well. Secondly, having introduced the visit method based onWeb data-base of Access relatively in detail, including how to establish andjoin, carry out inquiring and disposal and so on, combining the data-basetechnology and ASP technology theoretically. Thereafter, on the basis of this,this text come out the design and exploitation of a currency-check-affairsystem based on web—webregistration sub-system, which based on network. Mainly recommend the foregoingpreparation (software and hardware) and the design considering of basic constitutesand the implement of functions of the system (including signing up on the net,submitting photograph, querying result, maintain systematically, etc), and thespecialties and security design of this system. Finally expound the matter andshortage of the system, in order to ameliorate better in the future .
    Keywords:PHP, Mysql, Apache, database, DB implement, datasource,E-GovermentAffair
    第一章 引言1.1 问题的提出在电子计算机技术发展日新月异的今天,计算机技术、网络技术和信息技术的发展和应用早已深入到了各行各业,并发挥着它们的巨大潜力,特别是网络的高速化、广泛化发展和运用。在我国,各类企业的改革,一切都在朝着社会化、高效化、智能化发展,管理体制的改革更是进行着大手笔。但是,国家高校职能的改革程度还远远不够。高校教材管理系统是计算机技术和网络迅速发展的一个高校办公应用解决方案。高校教材管理系统将Internet网络技术与现代管理观念相融合,针对信息技术的特点对办公系统进行规划和重构,对高校内部信息流进行优化及合理配置,生成动态的、安全的、专有的数字化信息源,将办公体系全面自动化,流程化,数字化。以此为桥梁,横向连接同事间的交流与协同工作,纵向实现上下级一体化的高效办公体系,从而更明确、更有效地支持高校的管理和决策。
    1.2 设计方案本系统采用B/S结构,所有的程序及数据都放在服务器上,终端在取得相应的权限后使用Web页面浏览,录入,修改等功能。在语言方面使用PHP语言,在数据库上我们为了节约成本,采用了免费的MySQL数据库(当然,也可以移植到Oracle上),服务器使用Apache Web服务器。
    处理流程如下图:


    1.2.1 功能要求
    登录:四种不同权限的人,管理员/系级人员/老师/学生,不同人登录后界面应有所不同,如果相同要做到不同功能并是是所有人都可用
    教材征订:教师通过每年的开课计划进行教材征订,征订的结果(订单号,教材编号,教材名,教材类型,作者,出版社及版本号,征订时间,征订人,所订班级,征订数量)由系级人员审批并保存,最后由管理员形成征订表单.之后是由采购员去买,与我们无关
    教材入库:和征订单比对后入库(可有可无),入库字段:教材编号,教材名,作者,出版社及版本号,市场价,实购价,数量,入库时间
    教材发放:在首页通知什么时间内领书,各班班长过来领.并记录领书人和所属班级.如果教师领书,只能领一本。每笔记录库存相应减少(在管理员界面实现)
    相关查询:四种权限人员都可以查看教材情况(教材编号,教材名,教材类型,作者,出版社,库存量)
    管理员还可查看:预定清单,发放清单,和财务清单并能开成报表(尽可能是可以查一段时间内的信息)

    1.2.2 实现形式采用页面对话交互方式进行,把页面形成工具(DREAMWAVER4)和动态编辑工具(PHP)以及强大的数据库支持(MYSQL)融为一体,达到完成功能块目的。要求该功能块具有整个系统的统一风格。
    1.2.3 具体内容标题栏部分
    采用“高校教材网”统一标题头,即:左为“网上办公,无纸办公”图片,右为“人民高校为人民”,下为其他功能模块的超链接。
    主体部分

    登录:四种不同权限的人,管理员/系级人员/老师/学生,不同人登录后界面应有所不同,如果相同要做到不同功能并是是所有人都可用
    教材征订:教师通过每年的开课计划进行教材征订,征订的结果(订单号,教材编号,教材名,教材类型,作者,出版社及版本号,征订时间,征订人,所订班级,征订数量)由系级人员审批并保存,最后由管理员形成征订表单.之后是由采购员去买,与我们无关
    教材入库:和征订单比对后入库(可有可无),入库字段:教材编号,教材名,作者,出版社及版本号,市场价,实购价,数量,入库时间
    教材发放:在首页通知什么时间内领书,各班班长过来领.并记录领书人和所属班级.如果教师领书,只能领一本.每笔记录库存相应减少(在管理员界面实现)
    相关查询:四种权限人员都可以查看教材情况(教材编号,教材名,教材类型,作者,出版社,库存量)
    管理员还可查看:预定清单,发放清单,和财务清单并能开成报表(尽可能是可以查一段时间内的信息)

    1.3 系统运行环境本子系统承接高校教材办公网系统,对运行环境的要求是:
    1.3.1 硬件需求下列的配置是本次实际操作中的配置:

    兼容Intel486等级以上的PC电脑
    64M以上的RAM
    15GB以上的硬盘空间
    48倍速以上的光驱
    1.44软驱

    实际操作中可以略低于此配置。
    1.3.2 软件需求本系统采用了目前最佳组合-LAMP,即:Linux + Apache + MySQL +PHP, 该组合具有更稳定、高效能、更经济的特点。

    操作系统-Linux,采用“飓风Linux”
    Web服务器软件-Apache
    数据库服务器与用户端软件-MySQL
    页面应用软件-PHP4

    除了上面这些动态网页开发环境的需求,还有一些时在安装时需要的软件,在Linuz系统中都可以找到或到网上下载:

    C语言编辑器-将C语言源文件编译成可执行软件的工具
    Apxs-制作Apache动态模块的工具
    SecureEdit-跨平台上传文件的工具

    本次开发过程是:先在Window下编写代码,然后上传到服务器进行调试。
    第二章 设计的理论依据2.1 Linux + Apache + MySQL + PHP 最优组合现在的“网络生态”已经不能只有展示的功能,凡是网上下单、网络购物、检索查找等都是在网上随处可见的服务。这些功能的运作都牵涉到用户的选择、输入数据以及服务端处理数据与回应等动作,所以这样的网页即为互动式网页。也正是本系统所要采用的网络形式。
    在HTML文件的结构下使用互动式网页就必须在服务器端另外增加这些处理信息的功能,通常是针对用途写一个网页应用程序来负责处理。而以互动式网页存取得数据当然必须能长时间储存,所以网页应用程序就要能存取数据库,在浏览器上显示互动式网页,如下图所示:

    通过以上的介绍您应该已经知道,如果是一个网站内容提供者(ICP),要提供互动式网页的服务,必须要有WWW服务器,网页应用程序和数据库这三个成员,当然它们都必须在操作系统下执行,所以把操作系统也算在内总共四项软件。本系统采用了当今最佳组合――LAMP。

    LAMP就是Linux、Apache、MySQL加上PHP。首先是Linux操作系统(免费!),这两年在PC地舞台上大放光明,尤其在server地使用上悄然威胁微软的地位。Web服务器Apache(免费!)在全球的website有极大的使用率。数据库MySQL (免费! ), 一个快速、稳定的SQL数据库服务器。PHP(免费! ), 扮演处理互动式信息的网页应用程序的角色。除了稳定、高效能之外,它们均免费,是最经济的选择,而且丰富的网络资源与众多的高手绝对不会让你求教无门。
    2.2、PHP, Apache, Mysql, Linux介绍2.2.1 PHP 简介PHP的全名即是Hypertext Processor,最早的名称由来则是来自PHP Tools(Personal HomePage Tools),PHP的程序引擎是一个公布源代码的Open Source 成员。PHP是一种“服务器端的HTML嵌入式的描速语言(HTML - embedded scripting language)”。其语法混合了C、Java、Perl以及PHP式的新式语法,它比CGI或者Perl可更快速地执行动态网页,同时PHP的数据库层操作功能强大,这使得PHP语言这几年飞速发展,风靡全球。
    以下是PHP的基本特点:

    开放源代码――所有的源代码都可以得到
    免费使用――PHP是一个免费软件,尽可放心使用
    基于服务器端――由于PHP是在Web服务器端运行的,所以它的程序可以很大、很复杂而不会降低客户端的运行速度
    跨平台――PHP程序可以在UNIX、Linux或者Windows操作系统下运行
    嵌入HTML――PHP语言可以嵌入到HTM内部,则易学
    还有语言简单、效率高、分析XML、数据库模块、文件存取、文本处理、复杂的变量,图象处理等特点

    最新PHP4.0的特点:

    别名――通过引用别名为变量赋值,给编程带来极大方便
    扩充了API模块――提供扩展接口模块
    个性化的Java支持――PHP4.0和Java的交互
    对象和数组嵌套――实现功能更加强大的对象以及数组嵌套
    面向对象的编程――为面向对象的编程、构造类以及对象提供扩展的功能和新特征。

    还包括如自动资源释放、布尔类型、进程生成、COM/DCOM支持、与PHP3.0的兼容性很好、配置、加密支持、类型检查、FTP支持、PHP4新增函数或功能增强函数、“Here”打印、HTTP Session fallback系统、ISAPI支持、内存、多维数组、其他类成员函数、对象重载支持、输出缓冲支持、支持引用等特点。编写好后,将其放在服务器的提供的Web的目录里,通过IE浏览器可看到结果“我的第一个PHP程序!”。具体语法参考PHP4.0相关书籍。
    2.2.2 Apache 简介本系统的操作所使用的web服务器软件为Apache。Apache是目前全世界的网站使用最多的服务器。在2000年2月十全世界有58.08%的使用率。同样地,Apache的优点也是稳定、快速与开放,同时也有众多的功能,并且可以在不同操作系统下执行。前面的内容已经介绍了web 服务器负责完成传送显示在浏览器的 HTML 文件内容,而数据处理就是 PHP 程序的工作了。所以在服务主机使用PHP时必须将解读PHP程序代码的功能加到Apache ,也就是按装Apache 的PHP 模块(module)。以往如果要加入PHP模块,就必须先将PHP的源代码编译成Apache 的模块,再将Apache加上PHP功能模块重新编译。从PHP3开始就支持了Apache 的动态共享对象(Dynamic Shared Object , DSO)模块的功能,也就是说PHP3可以编译DSO模块,Apache 只需在需要执行时调用PHP3模块就可以使用PHP3的功能。这样以来,即使修改PHP、换装新版本或是重新安装PHP都可以不必 动用Apache ,当然PHP4 也可以编译DSO模块。
    2.2.3 MySQL 简介MySQL数据库系统与PHP整合使用是一个高效率的组合。MySQL是一个多用户(Multi-user)、多线程(Multi-thread)的SQL数据库系统,使用目前最普遍地数据库标准语言:SQL(Structured Query Language)。MySQL包括了服务器端程序与多种 用户端程序及程序库,并且可以在不同平台执行。其特点还有稳定、快速与高灵活性等。
    MySQL有瑞典的T.c.X DataKonsultAB公司开发出来,开发的主要目的就是以快速、健全以及使用微目标,最初的开发即是因为该公司需要能在廉价的主机上执行,优于当时各种商用数据库,且快速管理庞大数据库的SQL服务器。MySQL是一个还在开发中的数据库系统,但是其效能已经非常优秀。在MySQL网站(http://www.mysql.org )上你可以看到它们的使用记录是以管理40个以上的数据库,超过10000个表,同时其中还有500个以上的表超过7百万记录,而这些数据总共超过了10Gbytes的容量。
    2.2.4 Linux简介操作系统最好的选择当然是使用面费又稳定的Linux系统。Linux是在1991年发展起来的与UNIX兼容的操作系统,可以免费使用,它的源代码可以自由传播且可任人修改、充实、发展。Linux本身是一个完整的32位的多用户、多任务操作系统。而本次开发过程使用的版本是飓风软件公司出品的国产Linux操作系统。它是经汉化后形成的Linux操作系统。凡是Linux操作系统均可到网上下载。
    2.3 安装及注意事项LAMP (Linux + Apache + MySQL + PHP/Perl/Python) 近几年来,已经成为Web 社区的事实标准。我们将介绍LAMP组合的安装,假定你的机器上已经安装了Linux ,如果你对Linux 的安装还有什么问题的话,可以去相关的一些开放源码站点论坛上发表贴子,向其他网友寻求帮助。也可以向相关的厂商寻求技术支持。本文的LAMP中的 P,暂时解释为PHP,A解释为Apache,M解释为MySQL,L当然解释为Linux。所有LAMP组合中的软件都是开放源代码产品,所以您不必担心产品的价格以及版权问题。相反,有广大的开放源码社区开发人员的不断努力,这些产品的版本更新速度反而比那些昂贵的专有软件更快。虽然Linux 因为界面问题,会让您望而却步,但是您不必担心,现在,这些软件都采用了浏览器管理界面,好多都提供phpMyAdmin(一个利用PHP 语言在浏览器上管理MySQL的程序)以及WebMin(通过浏览器来管理系统)来让您方便的管理系统。PHP现在的版本已经到了4.0.4pl1,是一门面向对象的交叉平台的服务器端脚本语言。可以嵌入HTML语言中,可以作为Apache 的模块来运行。下面我们以 tarball(.tar.gz)格式(和它相对的是RPM 格式)的版本为例子,来介绍安装过程。
    2.3.1 安装Mysql因为RPM包安装非常简单而且成功率高所以我选择这种安装方式。
    方法:在Xwindows下双击此文件就可以了。在提示符下输入:

    rpm -i MySQL-3.23.38-1.i386.rpm

    2.3.2 安装Apache和PHP注:Apache和PHP是在一起安装的,这一点一定要理解。
    步骤如下:    

    先确定Apache安装后的路径
    安装并编译PHP,把PHP作为Apache的模块安装到Apache的安装路径(即Apache的解压缩的路径)
    安装并编译Apache 因为只有先把PHP作为Apache的模块安装到Apache的安装路径(即Apache的解压缩的路径),再安装Apache才能使Apache执行PHP文件。

    2.3.3 开始安装解压缩文件
    tar zxvf Apache_1.3.9.tar.gz tar zxvf PHP-4.0.2.tar.gz配置Apache确定Apache安装后的路径:
    cd Apache_1.3.9 ./configure --prefix=/usr/local/apache进入PHP的解压目录,输入:
    ./configure --with-apache=../Apache_1.3.9 --with-mysql --disable-debug --enable-track-vars注:”../Apache_1.3.9”表示Apache的解压路径,这个路径一定要正确,我是把Apache和PHP放在同一路径下解压的。 这样做就是让PHP作为Apache的模块和Apache一起安装。
    下一步:编译、安装PHP到Apache的原始目录中
    在提示符下输入:make
    完成之后再输入:make install
    再将php.ini.dist拷贝到这个目录:/usr/local/lib,并重命名为php.ini
    cp php.ini.dist /usr/local/lib最后一步是安装Apache
    进入Apache的解压目录输入:
    ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a接下来:make
    make install至此安装工作完成了。你还需要改动一些地方,才能让Apache执行PHP,如下:
    编辑Apache配置文件:
    /usr/local/apache/conf/httpd.conf找到这一行:AddType application/x-httpd-php4 .php4
    去掉前面的“#”号。再加上下面的几行:
    AddType application/x-httpd-php .phpAddType application/x-httpd-php .php4重新启动Apache: cd /usr/local/apache/bin ./apachectl restart
    用下面这个文件在浏览器下测试Apache和PHP:
    test.php<? phpinfo();?>如果出现了有关PHP的信息,说明你已经成功了!注意大小写!
    利用PhpMyAdmin来管理Mysql:将解压后的PhpMyAdmin目录放到你的Apache的htdocs目录下,修改这个文件使之成为中文的界面:config.inc.php
    找到有“english”单词的一行,将“english”改成“chinese_gb”存盘,这样就完成了。 这回再到浏览器下执行一下这个目录下的 index.php文件,这下应该出现Mysql的管理界面了而且还是中文,是不是很舒服!
    第三章 开发过程3.1 设置服务器这里主要是介绍Linux服务器中最重要的网络服务:
    Web服务器的配置
    安装好Apache 服务器后,还需要根据实际情况完成各项参数的配置,其设置文件位于/www/httpd/conf/目录下,通常使用3个配置文件httpd.conf, mysql.conf 和srm.conf来配置Apache。
    httpd.conf提供了最基本的服务器配置,是对守护进程httpd如何运行的技术描速;srm.conf是服务器的资源映射文件,告诉服务器各种文件的MIME类型,以及如何支持这些文件;mysql.conf用于配置服务器的访问权限,控制不同用户和计算机的访问权限。
    用命令:#/www/bin/apachectl restart启动来设置各项参数。
    a. ServerType standalone //可使httpd进行自我处理,占用较少CPU资源b. ServerRoot “/usr/local” //指定守护进程的运行目录其他参数可根据实际需要设置。
    3.2 设置数据库3.2.1创建数据库和数据表教材管理子系统所用的数据库名为:jc;
    教材管理子系统所用的数据表有5项,名分别为:users(用户简要信息表),aducat(学历信息表),emergen(意外事故情况表),family(家属信息表),resume(个人简历表)。

    用命令:

    /# cd /var/www/html 回车,进入mysql所在目录;/#mysql –p 回车,根据提示键入密码;
    用命令:create database jc;//完成创建数据库
    用命令:show databases; //显示数据库
    用命令:use jc; //指定使用的数据库

    以下将完成各表项的创建:
    教材管理系统数据库设计

    表[xuesheng] xuehao ingming banji xi user_name password
    表 [laoshi] jiaoshihao xinmin xi user_name password
    表[xi] xingming xi user_name password
    表 [admin] name user_name password
    表[zhengding] dingdan jcbianhao jcming jcleixin zuoze cbshe banben shijian zdren szbanjji zdshuliang
    表 [ruku] jcbianhao jcming zuoze cbshe banben scjia sgjia suliang rukushijian
    表 [fafang] shijian lsren ssbanji
    实体: xuesheng laoshi xi admin zhengding ruku fafang
    学生属性 学号,姓名,班级,系,账号,密码
    老师属性 教师号,姓名,系,账号,密码
    系级人员属性 姓名,系,账号,密码
    管理员属性 姓名,账号,密码
    征订属性 订单号,教材编号,教材名,教材类型,作者,出版社及版本号,征订时间,征订人,所订班级,征订数量
    入库属性 教材编号,教材名,作者,出版社及版本号,市场价,实购价,数量,入库时间.
    发放属性 时间 领书人 所属班级 数量

    3.2.2 数据库连接为了保证程序的安全,编写独立的数据库连接功能程序:
    <?php do{include("../config.php");} while($sql==""); //数据库所在的主机地址,localhost是本机地址 $MYSQL_HOSTNAME = "localhost"; //数据库登录的用户名称 $MYSQL_USERNAME = "root"; //数据库登录的密码 // $MYSQL_PASSWORD = "1111"; //要登录的数据库的名称 // $DATABASE = "jc"; //数据库的连接操作 $link_id=$sql;?>
    3.2.3 创建数据源用命令:
    insert into usersvalues(1003,’张三’,’男’,’汉’,’教材部’,’部长’,’工程师’,’1978-03-24’,’成都市人民南路3段3号’,12345,6,4,3);其他表数据源类似插入。
    用命令:
    select * from users order by ID;可以查看所录入的数据源。
    注:教材管理和职员教材信息管理两部分的功能实现,由薪资管理模块和公共信息管理模块提供。
    3.3 系统功能实现教材管理子系统作为高校教材办公网的一个模块,将完成对高校系统中公务员的教材管理,目前包括教材规章制度、重要通知、最新教材信息、信息查询、管理员登录以及相关功能链接。其中以信息查询和管理员登录为主,将实现个人信息的简要和详细查询,部门中人员信息的简要和详细查询;人员信息的录入、修改、删除、教材管理以及教材管理。采用页面交互式操作,用网页制作工具dreamwaver或其它工具实现,功能程序用php实现,将所有的程序放置在服务器上,通过apache提供;达到网上办公和无纸办公。可以参考以下功能模块图。
    3.3.1 系统登录用户登录高校教材办公网后,点击“登陆”链接进入本子系统。

    如下图示,进入教材管理子系统主页面:

    3.3.2 教材规章制度教材管理规章制度栏,将向所有公务员提供各种咨询信息,为初到机关的员工讲解具体要求。通过点击即可链接到所要查看项目,可以进入该项的详细内容页面。其具体内容由用户方提供,粘贴到页面即可。如上图左示。
    3.3.3 重要通知重要通知栏,将由教材部或科发布其最近最新的教材通知,由管理员在新闻发布管理项,可以添加,修改,删除新闻。如上图中上示。
    3.3.4 最新教材信息最新教材信息栏,将由教材部或科发布其最近最新的教材信息,包括与本单位一切相关信息,仍由管理员在新闻发布管理项,可以添加,修改,删除新闻;通过点击相关项,可浏览其详细信息。如上图中下示。
    3.3.5 信息查询//选择进入模块login1.php<? php switch($choose): case "c1": require("infomation1.php"); break; case "c2": require("infomation2.php"); break; case "c3": require("depart1.php"); break; case "c4": require("depart2.php"); break; default: require("m6_index.php");endswitch;?>

    职员信息查询:将向员工用户提供公务员信息查询,即:员工简要信息查询和其详细信息查询。简要信息查询时,当输入员工的帐号和姓名,点击“确定”后,由程序search1.php提交到数据库中,根据ID和NAME从表users中提取数据返回infomation1.php显示;详细信息查询时,输入员工的帐号、姓名和密码,点击“确定”后由程序modify11.php提交到数据库中,根据ID、NAME和PASSW从表users以及aducat、emergen、family、resume中提取数据返回infomation2.php显示。
    //个人简要信息search1.php<? if($ID AND $NAME){ //判断输入信息,若正确则连接数据库 do{ require("../config.php"); }while($sql==" "); $str="SELECT NAME,XB,MZ,BM,ZC,ZW,ID,CSNY,XZDZ FROM users WHERE ID='$ID';"; $result=mysql_query($str,$sql); mysql_close();//关闭数据库 $record=mysql_fetch_row($result); }?>//送出查询结果
    //个人信息详细查询mofify11.php<?php if($ID AND $NAME){ //判断输入信息,若正确则连接数据库 do{ require("../config.php"); }while($sql==""); $str="SELECT * FROM users WHERE ID='$ID';"; $result=mysql_query($str,$sql); $record1=mysql_fetch_array($result); $str2="SELECT * FROM aducat WHERE ID='$ID';"; $result2=mysql_query($str2,$sql); $record2=mysql_fetch_array($result2); $str3="SELECT * FROM resume WHERE ID='$ID';"; $result3=mysql_query($str3,$sql); $record3=mysql_fetch_array($result3); $str4="SELECT * FROM family WHERE ID='$ID';"; $result4=mysql_query($str4,$sql); $record4=mysql_fetch_array($result4); $str5="SELECT * FROM emergen WHERE ID='$ID';"; $result5=mysql_query($str5,$sql); $record5=mysql_fetch_array($result5); mysql_close(); }?>

    部门信息查询:部门简要信息查询和其详细信息查询。即:查询该部门员工的信息。部门简要信息查询时,只需输入部门名称,点击“确定”后,程序search2.php根据BM(部门名)提交到数据库中从表users,中查询到该部门所有员工的简要信息返回depart1.php显示。详细信息查询时,需输入你的姓名,帐号,密码,且必须是领导,职务编码为4。然后输入被查询者的姓名和帐号,点击“确定”,由程序depart12.php提交数据库从表users,aducat,emergen,resume,family中查询,返回到depart2.php显示。
    //部门信息简要查询search2.php<? //判断输入信息,若正确则连接数据库 do{ require("../config.php"); }while($sql==" "); if($BM){ $select="select * from users where BM='$BM';"; $result=mysql_query($select,$sql); //$record=mysql_fetch_row($result); $sn_index=mysql_num_rows($result); for($index=0;$index<$sn_index;$index++){ $arr[$index]=mysql_fetch_array($result); }; mysql_close(); }?>
    用list_display.php程序来实现逐条显示
    <? //逐条显示 <TR align=center><TD ALIGN=CENTER><?echo $arr[$index][ID]?></TD> <TD ALIGN=CENTER><?echo $arr[$index][NAME]?></TD> <TD ALIGN=CENTER><?echo $arr[$index][XB]?></TD> <TD ALIGN=CENTER><?echo $arr[$index][MZ]?></TD> <TD ALIGN=CENTER><?echo $arr[$index][BM]?></TD> <TD ALIGN=CENTER><?echo $arr[$index][ZC]?></TD> <TD ALIGN=CENTER><?echo $arr[$index][ZW]?></TD> <TD ALIGN=CENTER><?echo $arr[$index][CSNY]?></TD> <TD ALIGN=CENTER><?echo $arr[$index][XZDZ]?></TD> </TR>?>
    //部门详细信息查询depart12.php<? //判断输入信息,若正确则连接数据库 if($ID AND $NAME AND $PASSW AND $OBJECTN AND $OBJECTID){ do{ require("../config.php"); }while($sql==""); $str=" SELECT ZWBM FROM users WHERE ID='$ID';"; $result=mysql_query($str,$sql); $record=mysql_fetch_array($result); if($record[0]==4){ if($OBJECTID AND $OBJECTN){ //判断输入信息,若正确则连接数据库 do{ require("../config.php"); }while($sql==""); $str="SELECT * FROM users WHERE ID='$OBJECTID';"; $result=mysql_query($str,$sql); $record1=mysql_fetch_array($result); $str2="SELECT * FROM aducat WHERE ID='$OBJECTID';"; $result2=mysql_query($str2,$sql); $record2=mysql_fetch_array($result2); $str3="SELECT * FROM resume WHERE ID='$OBJECTID';"; $result3=mysql_query($str3,$sql); $record3=mysql_fetch_array($result3); $str4="SELECT * FROM family WHERE ID='$OBJECTID';"; $result4=mysql_query($str4,$sql); $record4=mysql_fetch_array($result4); $str5="SELECT * FROM emergen WHERE ID='$OBJECTID';"; $result5=mysql_query($str5,$sql); $record5=mysql_fetch_array($result5); mysql_close(); } } }?>
    3.3.6 管理员模块登录时要求输入管理员的姓名、密码、帐号,此处设定为:姓名(SSSS)、密码(12345)、帐号(6666),点击“确定”后,由程序login2.php提交到数据库,根据输入的信息判断其是否为管理员,若是可进入。进入后,点击左边的各项即可链接到相应的功能项,继续操作。

    //管理员登录功能程序<?php //判断输入信息,若正确则连接数据库 do{ require("../config.php"); }while($sql==" "); if($ID=="6666" and $NAME=="ssss" and $PASSW==12345){ $select="select ID from users where ID='$ID' AND NAME='$NAME' AND PASSW='$PASSW';"; $result=mysql_query($select,$sql); if($result){ require("manager.php"); } else { echo"您填入的信息有误,<a href=m6_index.php>请回上一页重新登录!</a>"; } mysql_close(); }?>
    登录成功后,进入管理员页面(manager.php),如下:
    在页面的左侧选择操作项,右侧绿色区域为工作区。


    职员信息录入:公务员号(ID)项必须录入数据,直接在文本框中录入数据,要求日期类的格式必须为“1990-09-09”,身高“170cm”,体重“65kg”,在录入界面中输入数据后,按“提交”后,由程序insert.php提交数据库,对users, aducat, emergen, resume, family 五表插入数据;当提示数据录入成功后,点击返回,可继续录入。

    //职员信息录入insert.php<?phpif($ID){ //判断输入信息,若正确则连接数据库 do{ require("../config.php"); }while($sql==""); //向users表插入数据 $str="INSERT INTO users VALUES('$ID','$NAME','$XB','$MZ','$CSNY','$XZDZ','$ZC','$ZW','$BM','$BMBM','$ZWBM','$MJ','$PASSW','$HYZK','$ZZMM');"; //插入新数据 if(!$str){ echo "can not insert data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //向aducat表中插入数据 $str="INSERT INTO aducat VALUES ('$XL','$SCHOOL','$GRADATE','$MAJOR','$SPECI','$LANGU','$ID');"; //插入新数据 if(!$str){ echo "can not insert data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //向emergen表中插入数据 $str="INSERT INTO emergen VALUES ( '$YWLLR','$YWGX','$YWTX','$YWDH','$YWSYR','$YWSYGX','$YWSYTX','$YWSYDH','$ID');";//插入新数据 if(!$str){ echo "can not insert data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //向family表中插入数据 $str="INSERT INTO family VALUES ('$JSCH1','$JSXM1','$JSXB1','$JSCSRQ1','$JSZY1','$JSGZDW1','$JSZZ1', '$JSCH2','$JSXM2','$JSXB2','$JSCSRQ2','$JSZY2','$JSGZDW2','$JSZZ2', '$JSCH3','$JSXM3','$JSXB3','$JSCSRQ3','$JSZY3','$JSGZDW3','$JSZZ3','$ID');";//插入新数据 if(!$str){ echo "can not insert data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //向resume表中插入数据 $str="INSERT INTO resume VALUES ('$JG','$SG','$TZ','$XUX','$STZK','$HJ','$SFZH','$HOBBY','$YB','$EML','$HYZK','$ZZMM','$XZ','$ID');";//插入新数据 if(!$str){ echo "can not insert data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //向base表中插入数据 $str="INSERT INTO base(id,name,password,bmbm,zwbm) VALUES('$ID','$NAME','$PASSW','$BMBM','$ZWBM');";//插入新数据 if(!$str){ echo "can not insert data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } mysql_close();//关闭数据库 echo "添加数据成功!<a href=insert.php>返回</a>";}else{ echo "添加数据不成功!<a href=insert.php>返回,请检查数据类型的正确性!</a>";}?>

    职员信息修改:在修改界面中,首先输入被修改者的帐号(ID)和姓名(NAME),点击“确定”后由程序modify11.php提交到数据库,首先将其原始数据搜索出返回到modify.php中显示,在此基础上对数据进行修改,修改完毕再由程序modify12.php提交到数据库对数据进行更新users,aducat,emergen,resume,family五表操作,提示修改成功后,可返回,继续下一次修改。

    //职员信息修改<?if($ID){ //判断公务员号是否存在 do{ require("../config.php"); }while($sql==""); //update users table $str="UPDATE users SET NAME='$NAME',XB='$XB',MZ='$MZ',CSNY='$CSNY',XZDZ='$XZDZ', ZC='$ZC',ZW='$ZW',BM='$BM',BMBM='$BMBM',ZWBM='$ZWBM',MJ='$MJ',PASSW='$PASSW',HYZK='$HYZK',ZZMM='$ZZMM' WHERE ID='$ID';"; //更改数据 if(!$str){ echo "can not update data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //update aducat table $str="UPDATE aducat SET XL='$XL',SCHOOL='$SCHOOL',GRADATE='$GRADATE',MAJOR='$MAJOR',SPECI='$SPECI',LANGU='$LANGU' WHERE ID='$ID';"; //更改数据 if(!$str){ echo "can not update data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //update emergen table $str="UPDATE emergen SET YWLLR='$YWLLR',YWGX='$YWGX',YWTX='$YWTX',YWDH='$YWDH',YWSYR='$YWSYR',YWSYGX='$YWSYGX',YWSYTX='$YWSYTX',YWSYDH='$YWSYDH' WHERE ID='$ID';"; if(!$str){ echo "can not update data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //update family table $str="UPDATE family SET SCH1='$JSCH1',JSXM1='$JSXM1',JSXB1='$JSXB1',JSCSRQ1='$JSCSRQ1',JSGZDW1='$JSGZDW1',JSZZ1='$JSZZ1',JSCH2='$JSCH2',JSXM2='$JSXM2',JSXB2='$JSXB2',JSCSRQ2='$JSCSRQ2',JSGZDW2='$JSGZDW2',JSZZ2='$JSZZ2',JSCH3='$JSCH3',JSXM3='$JSXM3',JSXB3='$JSXB3',JSCSRQ3='$JSCSRQ3',JSGZDW3='$JSGZDW3',JSZZ3='$JSZZ3' WHERE ID='$ID';"; //更改数据 if(!$str){ echo "can not update data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //update resume table $str="UPDATE resume SET JG='$JG',SG='$SG',TZ='$TZ',XUX='$XUX',STZK='$STZK',HJ='$HJ',SFZH='$SFZH',HOBBY='$HOBBY',YB='$YB',EML='$EML',HYZK='$HYZK',ZZMM='$ZZMM',XZ='$XZ' WHERE ID='$ID';"; //更改数据 if(!$str){ echo "can not update data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } //update base table $str="UPDATE base SET name='$XM',bmbm='$BMBM',zwbm='$ZWBM',password='$MM' WHERE id='$GWYH';"; //更改数据 if(!$str){ echo "can not update data"; exit; } $result=mysql_query($str,$sql); //送出查询字符串 if($result==0){ echo "can not query "; exit; } mysql_close(); //关闭数据库 echo "数据修改成功!<a href=modify2.php>返回</a>"; }?>

    职员信息删除:在删除界面中,首先输入被删除者的帐号(ID)和姓名(NAME),点击“确定”后;程序delete.php根据ID提交到数据库查询是否有此人,然后将其删除,根据提示信息继续操作。
    //职员信息删除<!---Deleteuser php script begins here---><?phpif($ID and $NAME){ //判断输入信息,若正确则连接数据库 do{ require("../config.php"); }while($sql==" "); //删除users表中某一信息 $deleteresult="DELETE FROM users where NAME='$NAME' AND ID='$ID'"; $result=mysql_query($deleteresult, $sql); if(!result){ echo "can not query"; exit; } $affected_rows=mysql_affected_rows( $sql); //删除aducat表中某一信息 $deleteresult ="DELETE FROM aducat WHERE ID='$ID'"; $result=mysql_query($deleteresult, $sql); if(!result){ echo "can not query"; exit; } $affected_rows=mysql_affected_rows( $sql); //删除family表中某一信息 $deleteresult ="DELETE FROM family WHERE ID='$ID'"; $result=mysql_query($deleteresult, $sql); if(!result){ echo "can not query"; exit; } $affected_rows=mysql_affected_rows( $sql); //删除resume表中某一信息 $deleteresult ="DELETE FROM resume WHERE ID='$ID'"; $result=mysql_query($deleteresult, $sql); if(!result){ echo "can not query"; exit; } $affected_rows=mysql_affected_rows( $sql); //删除emergen表中某一信息 $deleteresult ="DELETE FROM emergen WHERE ID='$ID'"; $result=mysql_query($deleteresult, $sql); if(!result){ echo "can not query"; exit; } $affected_rows=mysql_affected_rows( $sql); //删除base表中某一信息 $deleteresult ="DELETE FROM base WHERE id = '$ID'"; $result=mysql_query($deleteresult, $sql); if(!result){ echo "can not query"; exit; } $affected_rows=mysql_affected_rows( $sql); mysql_close(); echo "<b>$NAME</b> 已经被成功的删除了.";}?>

    教材信息管理:具备录入,修改,删除;同上点击链接后,根据提示信息继续操作。该块由教材管理栏完成。


    教材管理:同上点击链接后,根据提示信息继续操作。
    新闻发布管理:目前由于时间原因暂未实现,若要实现可与系统主页中的新闻管理相似处理。
    职员相片管理:目前由于时间原因暂未实现,具备相片上传、相片修改、相片删除功能。暂时实现相片上传功能,后继实现。

    3.3.7 相关功能链接该部分用于提供客户的功能扩展,暂未连接功能项,留待客户具体需求提出后实现。
    4 评论 162 下载 2018-12-27 13:04:09 下载需要11点积分
  • 基于JSP和MySQL开发的酒店管理系统的设计与实现

    摘 要中国经济近几年来取得蓬勃飞速发展,使得人民生活水平的要求和生活的质量有了很高的要求。因此人们对外出旅游和就餐的需求也越来越大。同时,随着我国科技水平的兴起和对互联网+新时代的大力支持,酒店管理系统在现代人们的生活中扮演着不可或缺的角色。
    酒店管理系统,不仅能够加大对酒店的有效管理,而且能够使顾客享受到更优质服务。这个酒店管理系统从实际的需求出发实现了管理员权限管理模块,餐饮信息管理模块,客房信息管理和餐饮预订模块,顾客消费情况管理,客房预订操作模块。
    这个系统以jsp风格为主要的开发语言,使用现在比较流行的MVC框架作为辅助手段,运用于开源免费的小型tomcat服务器来进行对MYSQL操作,在Myeclipse企业版开发环境软件上运行,完成了一个酒店管理系统。本系统具有简单易懂的操作方式和显示详细的房间信息,用户可以方便的了解到本酒店的全面信息,节约时间和成本。
    关键字:酒店管理, JSP, MYSQL, tomcat

    AbstractWith the rapid development of China’s economy, people’s living standards generally improved. So the number of people traveling and dining is increasing. At the same time, with the rise of China’s science and technology and the arrival of the Internet + era, the hotel management system for modern people’s lives played an important role.
    Hotel management system, not only to the effective management of the hotel, but also to provide customers with better service. Therefore, this article on the hotel management system system research is very necessary. The main functions of the hotel management system include the following sections: administrator rights management module, room information management module and room booking module, catering information management module and catering booking module, customer consumption module.
    This system to jsp as the main development language, the use of MVC framework, the use of the database is open source free MYSQL database, deployed in open source free small server tomcat, in Myeclipse Enterprise Edition development environment software to run, completed a hotel management system The system has a convenient and quick user interface, easy to understand the mode of operation, the user can easily understand the hotel’s comprehensive information, saving time and cost, so that the real thing to make the best use of their best.
    Key words: Hotel Management,JSP, MYSQL,tomcat
    1 绪论1.1 课题背景中国改革开放以后,我国大力发展经济、教育、旅游等等先进产业链,人们对于外出旅游和群体聚餐的需求越来越大。而且我国的良好的科学教育水平和人民文化素质的提高,为酒店管理系统提供了良好的机遇和前景。
    采用现代化开发模式,能够方便快捷的对酒店进行有效的管理了解酒店的具体情况,同时提供令顾客满意的服务,提高了效率。顾客可以方便地了解酒店的客房情况和餐饮情况,进行提前预订消费。目前,由于中小型酒店缺少必要的资金和人员,仍采用手工记录和打电话咨询的方式,对酒店管理和顾客预订都很不方便,而且极其容易出错。所以开发一套适合的用于中小酒店的酒店管理系统是非常符合当代的条件,既可以节约软件开发成本预算,也可以提高酒店服务水平。
    1.2 目的和意义人们现在越来越注重精神上的满足,排除了学习读书等消遣方式之外,外出参加旅游和组织聚餐也成为当下放松心情,缓解压力的重要环节。因此对酒店的入住情况和餐饮服务质量的及时了解是十分有必要的。而且随着顾客对酒店的需求越来大,和酒店有关的信息也就越来越多,单靠人力已经无法完成必要的信息记忆和信息整理,由此得出,我们必须要一套完善的酒店管理系统满足顾客的需求,提供对酒店管理的效率。酒店管理系统可以帮助我们完成对信息的有效存储和永不丢失,也能对信息进行有效整理,极大缓解了人员的工作负担。而且能够知道所需要的具体信息,执行效率也是非常方便快捷,几乎不会出错。以上种种可以看出来,通过使用酒店管理系统能够更加有效的对酒店进行管理和有效的进行信息处理,这样就可以达到员工福利的目的,缓解了雇职人员之间的矛盾,减少了酒店管理的成本。
    1.3 开发工具及技术1.3.1 开发工具这个项目采用的是MyEclipse+tomcat+Mysql+JSP开发。以下分别介绍这次开发的主要技术方法和应用方式。
    MyEclipseMyeclipse是在面向对象的开发过程中还是很有用的。实在eclipse的基础之上有增加了一系列有利于开发人员编程的插件的集合,另外自己还可以根据自己的具体需求来进行私人订制,增加一些具有特色的功能。Myeclipse对我们软件开发人员来说确实是一个功能齐全的企业级应用开发环境。
    TomcatTomcat是由一些知名软件公司开发的,例如Apache和sun等等公司。首先要明确,tomcat的开发者很人性,不收取费用,而且还给我们提供了其制作原理。是属于服务器,而且是轻量级的对设备的要求低,我们可以从tomcat的实际原理进行参考,对自己分析研究服务器设计具有重大意义。为什么要选择tomcat是因为它在占用很少的资源的情况下能够独立运行一些应用,而且扩展性能也是非常好的。
    MySQLMYSQL是一项公益性的,供编程人员模仿学习,它的存在一直对我们研究学习工作意义非凡,不仅能够降低我们的开发成本,减少投入资金,而且我们可以欣赏到大师级的代码技术和代码风格,最主要的是能够学到他们的设计理念和设计思想。另一方面,MYSQL使用了各种各样的不同风格的编译器和开发工具的测试,使得我们的源代码能够轻松移植到其他平台上,减轻我们的开发。
    1.3.2 JSPJSP,ASP,PHP是现代流行的动态网页技术标准,是有一些十分优秀的大公司结合实际需求制定的一个标准。在以前众所周知的HTML程序段中添加一些具有特殊意义的java程序段以及自己特定的jsp标签属性,由此形成了JSP文件。当然,jsp完全继承了Java的一些优秀的特点,能够应用与各种不同的平台之上。
    为了满足我们对动态网站迅速开发的目标,到达编程人员的身心需求,缓解人员的工作状态,JSP进一步改进优化:

    将具体所需的内容与所要显示的界面进行分离:web开发工程师在进行网站设计的时候,可以采用HTML或者是XML来确定最终页面的具体情况到底是什么界面。通过使用JSP来实现动态页面的制作,其中具体的逻辑过程被封装起来。这样的话,对我们所写的代码具有一定的保护作用,又能保证在任何其他浏览器上都具有一定的可用性
    可重复使用组件:开发人员及软件工程师能够共享和重复使用经常使用的组件
    可以跨平台实现:在市面上的几乎所有平台都支持JSP+servlet+JavaBean,不需要考虑不同平台之间的移植问题

    为了方便与数据库相连接,专业人员开发了JDBC驱动程序来供我们使用。除此之外,sun公司还有许多关于数据库的技术供我们使用参考。这里就不一一介绍,希望在后期学习中在做介绍。
    1.3.3 MVC简介MVC是一种编程思想,是一种将代码中的输入部分,输出部分和程序的逻辑处理部分分开进行代码设计。这种编程方法主要将代码分成三部分:模型,视图和控制器三个核心部分。

    视图:主要是指用户主管视觉上能够欣赏的界面。在以前的网站中,视图主要是有HTML来扮演主要的角色。但随着世界上计算机科学与技术水平的不断革新,新的技术水平不断出现,主要有xml,flash等等。视图仅仅是允许数据输出和用户能够就行操作等简单界面,并没有进行真正的逻辑处理
    模型:模型表示系统的逻辑处理部分,主要指在数据库中处理数据。一个视图可以对应多个模型,因此大大减少了代码的数量和代码的重复量
    控制器:控制器是指在知晓用户输入的情况下,通过使用模型和调用视图来满足用户的具体需求

    MVC工作过程是:首先让用户输入信息并使用控制器来得到用户输入的结果。接下来根据用户的具体请求,用具体模块来处理用户的信息请求并返回最终结果。最后,控制器用具体的视图来显示来返回请求数据。
    1.4 软硬件需求本系统开发机器的配置:

    处理器:Intel(R)Core(TM) i5-3230M CPU @2.60GHz 2.60GHz
    RAM:4.00GB

    软件需求:

    操作系统版本:Win7
    开发工具:MyEclipse 10
    后台服务器:jdk1.8.0_05 Apache Tomcat 6.0
    开发语言:Java
    浏览器:360安全浏览器8.1

    1.5 本章小结本章主要介绍了本文研究的课题所涉及背景以及研究所的目的及其意义。表明研究是十分有必要的。同时,也简单介绍了本课题所研究的一些关键技术,表达了为什么要用这些技术以及这些技术的优势。最后也简单介绍了本次研究所需要准备的软硬件条件和设施。

    2 需求分析需求分析可以认为是软件开发的重中之重。对于软件的后期开发和测试起到了关键性的作用。从历史的经验中我们可以看出,需求分析的成功与失败决定了后期软件制作所要花费的代价。一个好的需求就是成功的一半,能够大大降低软件开发的成本。反言之,一个失败的软件需求,不能正确反映客户的需求,将会给后期软件开发和维护带来极大的困难。
    本系统在进行需求分析时,严格按照客户的实际需求来进行。减少后期因需求不足导致额外的花费。
    2.1 需求调研现阶段,我们国家经济状况良好而且国家对旅游政策的大力支持,人民对酒店的性能、服务设施等条件要求十分严格。这样会带来酒店的极大的扩张,管理也越来越困难,面对顾客各种复杂而且膨大的信息量和信息资源,单单靠人力无法单独完成。因此利用计算机的优势所在,采用现代化管理技术,减少不必要的人力消耗至关重要。通过酒店管理系统,可以实现有效系统管理,方便对酒店的各种操作,降低各种复杂工作的量,提供员工的工作效率。根据实际需求和各种技术支持发现,对酒店采用现代化,专业化,系统化管理方式是非常有必要也是十分可行的。综上所述,本文的酒店管理系统使十分值得研究和发展的。
    2.2 可行性分析开发酒店管理系统可能会受到现实生活中的各种各样的限制,比如:开发的时间,技术水平和资源有效分配等等问题。由此可见,在开发系统之前,可行性研究的实行显得十分重要和有必要。可以减少不必要的人力的消耗和财力的损失,减少这个系统开发的风险投资。这里从以下几个方面进行研究和分析,本系统是否真正的具有可行性、可研究性
    2.2.1 技术的可行性主要用Myeclipse进行本系统的发布,在eclipse不能运行,运用主流的tomcat开源免费的服务器,数据库也是开源免费的Mysql数据库。主要开发语言还是面向对象的开发语言Java。这个系统主要完成一些简单业务,如客房信息管理和客房预订操作模块,餐饮信息管理模块和餐饮预订操作模块。前端界面采用html+css等技术进行页面设计,后台采用java来操作数据库进行增删改查和用Java实现图片上传等操作。同时java也是开源的,为系统开发也提供了一些系统架包。由此可以看出,现有的技术是完全可以支撑起本系统的开发。
    2.2.2 经济的可行性根据技术可行性可以看出,酒店管理系统主要采用免费开源的软件进行开发,通过这样做,我们的开发成本得到了有效的管理,节约了大量开发工具的费用,不需要大量的软件开发成本需求。采用免费开源的软件还可以根据自己的需求对其进行改造适应自己的需求和发展,因此可以看出,从经济的角度对酒店管理系统分析可以得出酒店管理系统在经济方面也是可行的。
    2.2.3 操作可行性酒店管理系统操作简单方便,大多都是通过鼠标进行操作和管理。而且由于现在电脑技术的迅速普及,基本每个人都具备基本的电脑操作技巧,因此在用户具备一定的操作技巧的基础之上进行简单的培训就可以使用酒店管理系统对酒店进行全面细致的管理。
    2.2.4 法律的可行性本酒店是自己进行独立开发和测试完善的,具有很强的实际操作意义。另外,开发所使用的软件大多数是开源免费的,因此不存在侵犯版权之类的问题,是在法律允许的范围之类进行开发和测试的。因此,在法律上是可行的。
    根据以上的种种条件,可以判断出酒店管理系统在当今社会上对酒店管理和发展具有很大的帮助和发展,因此可以看出,酒店管理系统的开发和应用是大势所趋,是非常适合当今时代的发展。
    2.3 系统用户用例图2.3.1 管理员用例图管理员是酒店管理系统的主要管理权限用户,主要有以下四大功能,管理人员对使用本系统用户人员管理,对客房信息进行管理,对餐厅餐饮和菜色进行管理,对顾客消费情况进行管理。

    2.4 功能模块需求分析本酒店管理系统与现代开发软件的特点完美结合,界面友好,观赏性强。下面依次介绍本系统的功能:

    本系统界面友好,且具有良好的健壮性,能预防各种出现的错误提示操作
    管理人员对使用本系统用户人员管理,对客房信息进行管理,对餐厅餐饮和菜色进行管理,对顾客消费情况进行管理
    本着对用户和酒店负责的态度,对酒店信息和用户信息起到一定安全作用,防止信息泄露,对用户和酒店造成困扰

    管理员功能模块说明:

    用户人员管理:这个功能主要包括对系统人员就行删除增加和密码修改等基本操作等
    客房信息管理,主要有以下几部分组成:

    客房类型的增加和删除:现在有单人间,双人间和豪华间等等客房信息的补充和修改:主要指房间号,房间面积,价格以及房间的真实图片等必要的信息客房预订的增加和删除:主要是指客户对酒店的预订情况,包括客房的房间号,预订天数,预定时间和客户信息等
    客户信息的增加修改和删除和查看:主要用于完成对客户信息的修改和删除,当然也可以进行客户信息的增加和查看
    餐饮管理,主要有以下几部分组成:

    特色菜品的介绍:对特色菜品进行及时增加,过时的菜品进行删除和不合理的菜品进行修改,查看本店特色菜品操作,特色菜的名称,价格,和真实图片等操作进行管理。也能增加和删除特色菜品餐桌预订管理: 对已经预订了的餐桌消费人员进行修改,查看预订信息进行就餐和删除一些已经就餐完成或就餐预订取消的信息餐桌预订添加:将顾客要求的预订信息添加到本系统
    消费管理:主要指住房消费和餐饮消费两部分,用于对顾客消费情况进行登记和查看,以便对酒店收入情况进行管理

    2.5 性能需求2.5.1 系统的安全性本文设计的这个酒店管理系统具有严格的执行权限要求,只有符合管理员身份的人员才可以对其进行操作管理,对已经取消管理员资格的人员也可以手动对其进行删除管理,提高系统的安全性。
    2.5.2 数据的完整性
    对数据的记录要求精确,信息不能出现空白信息,否则显示错误
    各个数据项的记录必须要求是正确的,不能出现虚假信息,造成错误
    不同界面显示的相同信息的数据也必须保持一致,不能出现相同信息不同数据的现象

    2.6 本章小结本章主要是对软件的需求进行分析。不过在其分析之前,简单的从经济,技术,操作,法律等方面研究了本系统是否值得分析设计。其次,本文采用用例图来分析软件在功能方面的实际需求。都软件的性能需求也进行了评价分析。

    3 系统分析与设计系统分析与设计分析与设计时系统开发过程中最重要的一个环节部件。它会影响到后续代码编写的实施。尽管不同系统具体的实施过程不同,但都有异曲同工之妙。在实际的工作和学习中可以看出,系统分析与设计的质量与系统的成败有巨大的联系。
    管理系统分析的任务是:在充分认识原有系统的基础上,通过查询可行信息、定义问题识别、规划详细调查、通过系统化分析,最后完成了新系统的逻辑方案设计,或称逻辑原型设计[2]。
    3.1 系统模块设计3.1.1 总体设计框架在上述对系统的分析的基础上,现在对系统进行总体设计,总体设计功能的模块如图 3.1所示。

    3.1.2 总体设计具体模块按照总体设计的功能模块和需求分析,酒店管理系统的各个模块的数据字典:

    系统管理员数据:包含的数据项用户名,密码
    客房类型数据:包含的数据项有id号,类型名称
    客房信息数据:包含的数据项有房间号,房间面积,房间简介,房间图片,房间类型
    房间预订数据:包含的数据项有预订客房,预订时间,预订用户的名字及电话,预订天数
    入住消费数据:包含的数据项有入住客房,入住时间,客户姓名及联系方式,预订天数和消费金额
    客户信息数据:包含的数据项有客户名字,地址,电话,E-mail
    **特色餐品数据:包含的数据项有名称,描述,图片,价格
    **餐桌预订数据:包含的数据项有预订时间,预订餐桌号,预订人
    **餐饮消费数据:包含的数据项有消费时间,消费金额,消费者姓名

    3.2 数据库的分析与设计当代的计算机软件系统已将不单单是运用计算机来静态的处理解决问题,而是利用具体数据,具体情况具体分析动态解决实际问题。因此数据就显得尤其至关重要。而数据都是在数据库中进行各种操作实现完成的。运用数据库管理系统的优势和特点,来对数据信息进行有效的管理、合理的分析、灵活的运用等的。数据库的巨大优势使得数据库已经作为了现在信息系统等计算机系统的主要部件。对数据库设计是否合理直接影响到整体系统的质量问题。
    本系统建立抽象的概念数据模型主要是选用:

    集中式模式设计法:根据全局数据模式为各个用户组或应用定义外模式。对用户要求描述的逻辑结构分类、二维表的形式表示实体间数据模型,并建立抽象的概念数据模型[1]
    视图集成法:以个别部分的为基础,分别设计局部模式,然后在以这些视图为基础,集成为一个全部模式[1]

    3.2.1 数据库的概念结构设计概念设计时,要先进行数据分析,然后在从下往上依次建立数据库整体概念结构,从用户的角度出发看问题,进行视图的整合设计,最后对整合的设计进一步分析优化得到最后结果。
    本文中数据库的概念结构设计采用实体联系属性的E-R模型。E-R模型都是包括实体,联系(不同实体之间的关系),属性(实体具有的特征)三部分内容,本文通过绘制E-R图来描述E-R模型。
    概念设计最终要能够正确表达酒店对数据的实际需求,也就是要能够完成酒店的所有功能。概念模式是独立存在的,与数据库逻辑结构基本上无关。当然了,它也与数据库的物理结构无关。
    通过对酒店管理系统的需求分析和系统所需的概念结构,结合自己对E-R图的理解,下面是建立的E-R模型图。










    实体
    属性
    实体间关系



    酒店管理系统的数据库E—R图如图3.2所示:
    )
    3.2.2 数据库的逻辑结构设计众所周知,数据库的概念模型与某个具体的数据库是没有关系的,因此,我们需要结合实际所使用的数据库的特征来进行具体变化,也就是转化成逻辑关系模型,来让计算机进行处理加工。概念模型向数据库的逻辑模型进行转化需要遵守的规则:

    每一个实体要转换成一个关系
    所有的主键必须定义非空(NOT NULL)
    对于有多个联系的实体要区分主次,按照一对多,一对一和多对多的顺序来依次建立外键。

    通过以上的分析,我们现在建立了相应的逻辑结构,下面逻辑结构的详细说明部分。
    用户信息表主要是记录了住房客户基本信息,表结构如表3.3所示。



    列名
    数据类型
    长度
    允许空
    是否主键
    说明




    user_id
    int
    4


    编号


    user_realname
    varchar
    50


    姓名


    user_address
    varchar
    50


    地址


    user_tel
    varchar
    50


    联系电话


    user_email
    varchar
    50


    邮箱


    user_post
    varchar
    50


    邮编


    user_fax
    varchar
    50


    传真



    管理员信息表主要记录了管理员基本信息,表结构如表3.4所示。



    列名
    数据类型
    长度
    允许空
    是否主键
    说明




    userId
    int
    4


    编号


    userName
    varchar
    50


    用户名


    userPw
    varchar
    50


    密码



    客房信息表主要是记录了客房的基本信息,表结构如图3.5所示。



    列名
    数据类型
    长度
    允许空
    是否主键
    说明




    fangjianhao
    Int
    4


    编号


    catelog_id
    varchar
    50


    客房类别


    area
    varchar
    50


    面积


    jieshao
    varchar
    50


    介绍


    fujian
    varchar
    50


    图片



    客房预订信息表主要是记录了客房预订的基本信息,表结构如图3.6所示。



    列名
    数据类型
    长度
    允许空
    是否主键
    说明




    id
    Int
    4


    编号


    user_id
    varchar
    50


    预订用户


    kefangid
    Int
    4


    客房号


    tianshu
    varchar
    50


    预订天数


    yudingzheTel
    varchar
    50


    联系电话


    shijian
    varchar
    50


    预订时间



    客房类别信息表主要是记录了客房类别的基本信息,表结构如图3.7所示。



    列名
    数据类型
    长度
    允许空
    是否主键
    说明




    id
    Int
    4


    房间号


    Kefang_leixing
    varchar
    50


    客房类型



    餐饮信息表主要是记录了餐饮的基本信息,表结构如图3.8所示。



    列名
    数据类型
    长度
    允许空
    是否主键
    说明




    canyin_key
    Int
    4


    编号


    canyin_name
    varchar
    50


    名称


    jiage
    varchar
    50


    价格


    jieshao
    varchar
    50


    介绍


    fujian
    varchar
    50


    图片



    餐饮预订信息表主要是记录了用户餐饮预订的基本信息,表结构如图3.9所示。



    列名
    数据类型
    长度
    允许空
    是否主键
    说明




    id
    Int
    4


    编号


    name
    varchar
    50


    预订人


    canzuo_number
    varchar
    50


    预定餐桌号


    shijian
    varchar
    50


    预订时间



    入住消费信息表主要是记录了用户入住消费的基本信息,表结构如图3.10所示。



    列名
    数据类型
    长度
    允许空
    是否主键
    说明




    id
    Int
    4


    入住人身份证号


    name
    varchar
    50


    预订人


    Name_cost
    varchar
    50


    消费


    shijian
    varchar
    50


    入住天数



    餐饮消费信息表主要是记录了用户餐饮消费的基本信息,表结构如图3.11所示。



    列名
    数据类型
    长度
    允许空
    是否主键
    说明




    id
    Int
    4


    用餐人的身份证号


    name
    varchar
    50


    用餐人名字


    Name_cost
    varchar
    50


    消费



    3.2.3 数据库的连接原理Hibernate是由专业人员设计的一种对酒店管理系统进行有效管理的系统框架,本文就采用了这种框架。Hibernate 是一种开源的,并且能够将对象关系进行映射的一种框架,它通过对JDBC部分对象的进行了封装设计,因此,我们程序员在编程设计时,可以根据自己喜好使用面向对象的编程思想来进行数据库的各种操作。它可以完成具体的Java类与其相应的数据库表来进行映射,也能够对数据进行查询和对数据进行恢复。与JDBC连接数据库的传统方式相比较来看,Hibernate在很大程度上已经可以减少工作量的操作。另一方面,Hibernate提供了代理模式,它可以对需要载入的具体类进行简化操作。使用代理模式的目的主要是减少从数据库提取数据所需的代码工作量,这样我们的开发时间和开发成本也就得到了有效的缓解和降低。 由于Hibernate具有众多优点,受到了技术人员的青睐,现在市面上流行的服务器都是可以与Hibernate进行良好的集成。
    Hibernate 的运行过程如图3.5所示:

    图3.1给出了 Hibernate 的具体运行过程,它可以与应用程序之间建立持久性服务的主要原因是使用了数据库和利用了配置文件。
    3.3 设计思想
    采用良好的交互界面,减少键盘输入,尽可能多的使用鼠标操作
    采用B/S架构。使用浏览器/服务器模式这种开发方式不需要用户下载特定的软件,只要在具有浏览器的计算机上基本都可以进行操作,符合大众心理
    功能模块化设计原则。将不同的功能作为一个模块来进行划分设计,这样思路清晰,逻辑清楚,有利于后期的编码,测试和调试
    使用了面向对象分析方法。按照不同功能的模块划分,使用面向对象分析方法学来分析各个模块中所需要的类包括类中的属性和方法,以及不同类之间的关系等等。采用面向对象方法学来提高程序的质量,有利于后期的开发维护

    3.4 详细设计3.4.1 登录模块设计
    在登录界面,包含用户名,密码信息,输入之后点击登录进入酒店管理系统
    用户名和密码都不能为空,否则会弹出对话框进行提醒
    后端也会进行验证。如果验证不通过,弹出对话框提示用户名或密码错误。后端验证成功,提示登录成功,跳转到系统页面

    3.4.2 客房管理模块设计3.4.2.1 客房类型模块
    客房类型界面主要包括类型的id号,类型名称,操作和添加
    可以查看客房类型的具体信息,每项都有具体的值都不可以是空的
    通过操作下方编辑和删除按钮可以对客房类型信息进行操作
    点击下方添加按钮可以进行客房类型进行添加

    3.4.2.2 客房信息模块
    客房信息界面主要包括房间号,房间面积,房间简介,房间图片和房间类型和操作
    可以了解房间的具体信息,若有一项的值为空的话是不合法的
    点击操作下方的删除按钮可以删除某个特定房间
    点击本页面上的添加按钮,跳转到客房添加界面进行客房信息添加。添加的信息同(1),并且要上传房间图片

    3.4.2.3 客房预订模块
    在这个模块中,主要有预订的客房号,预订时间,预订天数,预订人的名字和电话和操作
    主要用于管理用户的预订信息,其中房间号必须和客房信息里面的房间号相一致,不会出现不存在的房间号。预订时间也一定在今天及其以后的时间,不会出现已经过去的时间。预订人和联系方式已经预订天数都不允许空,都有具体值
    使用鼠标点击特定预订信息后面的删除按钮,可以删除此条预订信息
    通过添加按钮出现客房预订信息界面,可以进行客房预订信息的添加

    3.4.2.3 入住消费模块
    入住消费模块主要信息是入住的房间号,入住时间及天数,入住者的名字及其联系电话和消费金额
    主要是用于记录用户的消费记录情况,入住的房间号一定是存在的房间号,入住时间也必须符合现实,联系电话是11位阿拉伯数字,这些信息参数值也必须不为空
    对已经付过账要离开的顾客可以点击对应后面的删除按钮进行删除操作,去除记录
    对于将要入住和正在入住的顾客点击添加按钮进行消费信息的添加

    3.4.3 客户模块设计3.4.3.1 客户信息模块
    客户信息模块主要用于显示客户信息和根据顾客名查询特定入住者
    客户信息模块主要有查询框和查询按钮,以及一些顾客基本信息比如:用户名字和联系方式,住所等等信息
    对已经离开和将要离开的用户,通过其信息后面对应的删除按钮进行删除,完成住宿

    3.4.3.2 添加客户模块
    添加客户模块对于已经入住的顾客进行信息添加完善
    添加客户模块主要包含多个文本框,比如客户名字,联系方式和地址等等一些必要信息,还有一个提交和重置按钮
    当填写完用户信息,点击提交按钮时,弹出对话框提示操作成功。这时,客户信息界面上就会显示刚才添加的用户信息

    3.4.4 特色菜品介绍模块设计3.4.4.1 特色菜品模块
    特色菜品模块所显示的信息可供顾客选择菜单上的菜品,提供餐饮服务,方便顾客选菜
    特色菜品模块显示一些菜品的名称,菜品的描述和图片以及价格等必要的信息和删除操作

    3.4.4.2 添加特色菜品模块
    添加特色菜品界面上包含几个文本框信息和提交,重置按钮
    这几个文本框所要填写的信息与特色菜单模块上的信息必须一一相对应,不能出现不相符的状况
    当填写完特色菜品信息进行提交后,弹出提示框显示操作成功,并且在特色菜品界面上会显示刚才所添加的菜品信息

    3.4.5 餐桌预订管理模块设计3.4.5.1 餐饮预订模块
    餐饮预订界面主要是显示餐桌预订的相关信息,包括预订时间,预订餐桌和预订人以及删除操作
    预订时间也是需要符合当前时间,不能是已经过去的时间,预订时间和预订人不能为空
    当顾客已经就过餐或者不在就餐时,点击删除按钮可以取消预订的信息

    3.4.5.2 添加餐饮预订模块
    餐饮预订添加界面包含预订的时间,预订人的名字和预订的餐桌号三个文本框信息,以及重置和提交按钮
    添加餐饮预订界面上的信息和餐饮预订界面上的信息是完全吻合的,需要将添加的信息显示到餐饮预订界面上

    3.4.6 餐饮消费管理模块设计
    餐饮消费管理界面主要是保存了用户消费的相关内容,比如消费时间,金额和消费者名字和删除信息操作
    当本次消费已经完成时,就可以点击删除按钮就可以删除此条所要删除的信息记录

    3.5 本章小结本章主要是进行系统设计。首先进行系统的总体设计,确定系统的主要功能模块。其次我们根据系统所需要完成的功能模块来进行ER图的分析和建立。再根据E-R图来确定数据库的逻辑模型,建立数据库的逻辑模型结构。最后是系统的详细设计阶段,确定各个模块的具体细节,为下一阶段的系统实现做充分的准备。

    4 系统功能实现前面我们已经明白了用户的具体需求,也经过了系统的分析和设计阶段,本章是进行系统的实现。根据前面对系统的分析和设计,我们现在对系统进行具体的代码实现。通过前面的对系统的逻辑分析,现在要正真转化成能够在机器上运行的物理系统,是对前面所做工作的总结和肯定。
    4.1 系统登陆页面实现描述:每个系统都需要相应的账号和密码进行登录。这样,不会因为随意登录操作系统而造成系统混乱。在系统设计之初,给出了管理员账号。
    下面展示了程序的运行效果如图4.1所示:

    进行登录时,输入本人自己的用户名和密码进行登录。然后点击登录按钮进行信息的提交。然后我们的后台会寻找相应的service来进行用户名和密码的匹配操作。根据用户名和密码的具体情况,返回具体的结果。
    public String login(String userName,String userPw,int userType) { String result="no"; 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"; } return result; }
    4.2 总体功能模块描述:我们登录到系统后,可以看到可供我们操作的六大功能模块。这时,只需要点击相应的菜单来运用相应的功能。效果图如图4.2所示:

    在本文具体设计过程中,本系统的每个页面都进行了系统性的拦截,防止不法分子不需要登录来进行恶意操作。
    if(session.getAttribute("user")==null){ out.print("<script>alert('请先登录!');window.open('../index.jsp','_self')</script>"); }
    4.2.1 管理员管理4.2.1.1 系统管理员信息管理描述:登录人员进入管理员操作界面后,后天根据用户的具体操作来寻找具体的action类来进行系统响应。本文中主要是利用了List对象集合,通过request来显示出具体的信息。程序效果图如下图4.3所示

    系统管理员管理关键代码:
    /** 添加系统管理员 **/ public void adminAdd(HttpServletRequest req,HttpServletResponse res) { String userName=req.getParameter("userName");//获取填写用户名 String userPw=req.getParameter("userPw");/获取密码 String sql="insert into t_admin(userName,userPw) values(?,?)";//数据添加到数据库中 Object[] params={userName,userPw}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "操作成功"); req.setAttribute("path", "admin?type=adminMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res); } /** 系统管理员删除 **/ public void adminDel(HttpServletRequest req,HttpServletResponse res) { String sql="delete from t_admin where userId="+Integer.parseInt(req.getParameter("userId"));//在数据库中查找满足userId的数据 Object[] params={}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "操作成功"); req.setAttribute("path", "admin?type=adminMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res); }
    4.2.1.2 系统管理员密码修改界面描述:管理员点击左侧的菜单“密码修改”,系统显示出密码修改的界面。修改时,必须要输入正确的原密码。否则,会弹出对话框提示原密码错误。其次,新密码和确认密码保持一致。不然会弹出对话框两次输入的密码不一致。程序效果图如下图4.4所示

    4.2.2 客房类别管理4.2.2.1 客房类别信息录入描述:本功能需要操作人员输入正确的客房类型。如果操作人员出现失误信息填写错误,系统都会给相应的出错信息。本文在后台也设置了相应的函数来进行信息的处理。要能够将管理员填写的信息正确反映到客房信息界面上,信息的提交以及信息的交互都具有及时性。本文程序的实际效果如下图4.5所示:

    4.2.2.2 客房类别信息管理描述:本文这个功能主要是显示本酒店所有的客房类别信息供顾客选择和对酒店客房进行更好的分类。这些客房类别信息都保存在list对象里面,并通过request对象来进行显示输出。程序效果图如下图4.6所示:

    4.2.2.3 客房类别信息删除描述:本功能可以对已经过时货已经不存在的客房类别进行去除操作,能够及时反映本酒店的真实信息。删除时,给出了提示,为了防止出现误删除。程序效果图如下图4.7所示

    客房类别信息删除删除代码:
    public void kefangleixingDel(HttpServletRequest req,HttpServletResponse res) { String sql="update t_kefangleixing set del='yes' where id="+Integer.parseInt(req.getParameter("id")); Object[] params={}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "操作成功"); req.setAttribute("path", "kefangleixing?type=kefangleixingMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res); }
    4.2.2.4 客房类别信息修改描述:设置这个功能的主要目的是为了修改录入客房类别时出现的错误,或者对已经不符合酒店实际情况的信息进行修改。
    4.2.3 客房信息管理4.2.3.1 客房信息添加录入描述:当我们的酒店进行进一步扩张和发展的时候,我们就需要运用这个功能。这个要求使用人员要输入不存在的房间号和已经存在的房间类型,否则给出相应的信息提示,录入信息失败。这个功能所填写的信息通过后台的service及时反映到客房信息界面上。程序效果图如下图4.8所示:

    客房信息添加关键代码:
    String fangjianhao=req.getParameter("fangjianhao");String fangjianmianji=req.getParameter("fangjianmianji");String fangjianjianjie=req.getParameter("fangjianjianjie");String fujian=req.getParameter("fujian");String fujianYuanshiming=req.getParameter("fujianYuanshiming");String kefangleixingId=req.getParameter("kefangleixingId");String del="no";String sql="insert into t_kefang(fangjianhao,fangjianmianji,fangjianjianjie,fujian,fujianYuanshiming,kefangleixingId,del) values(?,?,?,?,?,?,?)";Object[] params={fangjianhao,fangjianmianji,fangjianjianjie,fujian,fujianYuanshiming,Integer.parseInt(kefangleixingId),del};DB mydb=new DB();mydb.doPstm(sql, params);mydb.closed();req.setAttribute("message", "操作成功");req.setAttribute("path", "kefang?type=kefangMana");String targetURL = "/common/success.jsp";dispatch(targetURL, req, res);
    4.2.3.2 客房信息管理描述:客房信息管理方便入住人员对房间的信息有一个大致的了解,节约了顾客寻找房间的时间。相应的list对象来保存相应客房信息,然后利用系统提供的request对象来进行显示。程序效果图如下图4.9所示:

    4.2.3.3 客房信息修改描述:本文通过使用这个功能对房间的真实信息已经改变了的状况进行修改,让顾客第一时间来反映本酒店客房的真实信息。程序效果图如下图4.10所示:

    4.2.3.4 客房信息删除描述:主要是对已经不存在的客房进行去除操作,当本酒店对某个特定的客房进行去除时,就需要用此功能进行客房的删除。删除后,客房信息界面上也就不再显示本客房的具体情况。客房信息管理关键代码:
    TKefang kefang=kefangDAO.findById(id);kefang.setDel("yes");kefangDAO.attachDirty(kefang);Map request=(Map)ServletActionContext.getContext().get("request");request.put("msg", "操作成功");return "msg";
    4.2.4 客房预订信息管理4.2.4.1 客房预订信息管理描述:客房预订这个功能的需求性非常高,顾客可以提前寻找酒店进行入住,不需要因无法找到二无法入住。它显示了顾客的预订信息,顾客可以凭借这些信息来进行入住。程序效果图如下图4.12所示:

    预订信息管理关键代码:
    public String yudingMana() { String sql="from TYuding where del='no'"; List yudingList=yudingDAO.getHibernateTemplate().find(sql); for(int i=0;i<yudingList.size();i++) { TYuding yuding=(TYuding)yudingList.get(i); yuding.setUser(userDAO.findById(yuding.getUserId())); yuding.setKefang(kefangDAO.findById(yuding.getKefangId())); } Map request=(Map)ServletActionContext.getContext().get("request"); request.put("yudingList", yudingList); return ActionSupport.SUCCESS; }
    4.2.4.2 客房预订信息删除描述:当顾客因意外无法入住或者已经入住完,我们就可以使用客房预订删除功能来进行处理。当删除了预订信息后,后台会将预订信息界面上的删除的信息进行去除,不在显示。客房预订信息删除代码:
    public String yudingDel(){ TYuding yuding=yudingDAO.findById(id); yuding.setDel("yes"); yudingDAO.attachDirty(yuding); Map request=(Map)ServletActionContext.getContext().get("request"); request.put("msg", "操作成功"); return "msg";}
    4.2.4.3 客房预订信息添加描述:当顾客计划将要在本酒店入住时,我们就可以记录下预订顾客的信息为后期顾客入住提供证明。本界面上客房必须是现存的房间号,不存在的房间号不会显示出来供选择。程序效果图如下图4.13所示:

    4.2.5 客户信息管理4.2.5.1 客户信息管理描述:我们需要记录客户的信息来进行客户管理,我们可以方便查询客户信息,为客户提供服务。这些客户信息都是运用了list对象进行处理的,在需要的时候,调用request对象来进行显示供参考。当客户信息过多时,管理人员可以输入客户的名称进行特定客户查询。程序真实表达他如下图4.14所示:

    4.2.5.2 客户信息添加描述:客户来进行入住登记的时候,就可以利用本系统的这个功能将特定的客户添加到本系统中。下面就是本文中的现实的图如图4.15所示:

    4.2.6 特色餐饮管理4.2.6.1 特色菜品介绍描述:本功能主要展示本酒店提供的餐饮服务有哪些。当顾客需要聚会就餐时,可以参考本页面上的餐品信息的具体介绍并根据自己的口味爱好来进行选择,方便就餐人员的选择。菜品介绍功能真实图如下图4.16所示:

    4.2.6.2特色菜品添加描述:管理员点击左侧的菜单“特色菜品添加”,就可以添加特定菜品。菜品添加界面如下图4.17所示:

    4.2.7 餐桌预订管理4.2.7.1 餐桌预订管理描述:当顾客想在本酒店进行餐饮服务,而现在不在本酒店的时候,就可以运行此功能。它显示了所有就餐人员的时间,信息等等。当具体进行餐饮服务时,可以利用本界面的信息进行对比。餐桌预订的效果图如下图4.18所示:

    4.2.7.2 餐桌预订信息添加描述:当有顾客有要预订餐饮的需求的时候就要使用本界面上的信息,并且将本界面填写的信息正确反映到餐桌预订的界面上。餐桌预订信息添加效果图如下图4.19所示:

    4.2.8 客户消费管理4.2.8.1 客户入住消费管理描述:当顾客入住时,需要对其的消费情况做一个记录信息。一方面顾客可以对自己的消费的情况有一个真实的的了解。同时,也可以对了解本酒店的经营状况,确定是否需要改进。客户入住消费图如下图4.20所示:

    4.2.8.2 客户入住消费删除描述:当顾客的消费记录已经过去很久了,为了节约存储空间,就可以对其进行删除处理。客户入住消费删除图如下图4.21所示:

    4.2.8.3 客户入住消费添加描述:当顾客办理入住手续的时候,需要对其消费情况进行添加。并且其添加的信息显示到客户入住消费的界面上。客户入住消费添加图如下图4.22所示:

    4.2.8.4 客户餐饮消费管理描述:这里真实的记录了某个特定人的真实消费情况,顾客可以查询自己的消费情况,并进行支付。酒店也可以知道餐饮服务这块业务的收入情况,并进行适当的调整和完善。客户餐饮消费运行图如下图4.23所示:

    4.2.8.5 客户餐饮消费删除描述:对已经结过餐饮费用且对消费金额无异议的顾客。按照实际情况,将结账记录久远的信息去掉。客户餐饮消费删除执行图如下图4.24所示:

    4.2.8.6 客户餐饮消费添加描述:当顾客就餐结账的时候,需要对顾客就餐消费情况进行统计管理。在本页面上添加的信息会体现到客户餐饮消费界面上。下图4.25就是其运行结果:

    4.3 本章小结本章主要用来说明系统设计开发的情况。也就是说,向用户展现的系统概貌。这一章已经可以看出对对上一章中总体设计和详细设计中所展现的功能模块都已经实现完成了,也达到了需求分析中用户的实际需求。通过本章节对系统的介绍,相信会对本系统有一个多方面的客观认识。 
    5 系统测试5.1 系统测试目的与意义为了发现代码中存在的错误和减轻后期代码维护工作量,我们需要对酒店管理系统进行测试。软件测试是通过输入特定值并将输出结果与预定的输出结果结果进行对比,找出程序中存在的错误。软件测试的根本目的是尽可能多的发现现在程序中存在的错误和潜在错误,通过后期调试改正程序中存在的错误。通过测试,提高软件的质量,给客户一个满意的答案。
    测试一般分为三个阶段完成:模块测试,主要用于发现编码和详细设计中存在的错误。将一个个单个模块作为一个测试对象进行测试。系统测试,我们也可以称之为集成测试。主要是验证系统的功能与需求分析中指定的功能是否相一致,验证各个模块之间的是否能够进行组装。验收测试也就是通常说的集成测试,将整个系统作为一个整体来进行测试。本文主要是采用黑盒测试,验证已经设计完成的功能是否能够正常运行和是否缺少必要的功能。
    5.2 测试原则
    测试应该在早期就要开始实施,因为越早发现错误就越能够减少后期的工作量,降低成本
    自己设计的程序一般由其他专业人员来进行测试
    设计测试用例也要尽可能合理全面,既要测试合法的数据,也要想到不合法的数据以及测试数据的边界等等
    选择尽可能会出错的测试用例进行测试

    5.3 测试目标
    发现一些可以通过测试避免的开发风险
    实施测试来降低所发现的风险
    确定测试何时可以结束
    注重测试,将测试作为软件开发的一个重要环节
    测试的其目的是发现程序中的错误并调试,使系统符合客户的需求,达到预期值

    5.4 测试用例设计的原则
    全面性

    应尽可能覆盖程序的各种路径应考虑存在跨年、跨月的数据大量数据并发测试的准备
    正确性

    输入界面后的数据应与测试文档所记录的数据一致预期结果应与测试数据发生的业务吻合。
    符合正常业务惯例

    测试数据应符合用户实际工作业务流程兼顾各种业务变化的可能
    可操作性

    测试用例中应写清测试的操作步骤,不同的操作步骤相对应的操作结果

    5.5 测试过程5.5.1 主页面的登录模块测试测试流程:

    打开系统首页,输入错误的登录信息
    登录
    输入正确的登录信息
    登录
    测试结果

    登录模块的测试记录表,测试过程如5-1所示:



    模块名称
    测试用例
    预期结果
    实际结果
    是否通过




    登录模块
    用户名:null 密码:null
    弹出错误提示,请输入用户名
    失败,提示请输入用户名如图5.1所示
    通过


    登录模块
    用户名:m1 密码:null
    弹出错误提示,请输入密码
    失败,提示输入密码 如图5.2所示
    通过


    登录模块
    用户名:m1 密码:1
    弹出错误提示,用户名或者密码错误
    失败,提示用户名或者密码错误 如图5.3所示
    通过


    登录模块
    用户名:root 密码:root
    弹出提示, 通过验证,系统登录成功。
    登录成功,提示 通过验证,系统登录成功。 如图5.4所示
    通过



    5.5.2 修改密码测试测试步骤:

    登录系统后,点击“密码修改”
    输入原密码,新密码和确认密码
    点击提交按钮
    测试结果鉴定

    管理员模块的测试信息表,测试过程如5-2所示:



    模块名称
    测试用例
    预期结果
    实际结果
    是否通过




    管理员模块
    原密码:null 新密码:null 确认密码:null
    弹出错误提示: 原密码不正确
    失败,提示原密码不正确 如图5.5所示
    通过


    管理员模块
    原密码:xls 新密码:null 确认密码:null
    弹出错误提示,原密码不正确
    失败,提示输入密码 如图5.6所示
    通过


    管理员模块
    原密码:root 新密码:null 确认密码:null
    弹出错误提示,新密码不能为空
    失败,提示新密码不能为空 如图5.7所示
    通过


    管理员模块
    原密码:root 新密码:root01 确认密码:root02
    弹出错误提示, 两次输入的密码不一致
    失败,提示 两次输入的密码不一致 如图5.8所示
    通过


    管理员模块
    原密码:root 新密码:root01 确认密码:root01
    弹出提示, 修改成功,并且重新登录时,只能使用新密码。
    成功,提示 修改成功,并且重新登录时,只能使用新密码。 如图5.9,5.10,5.11所示



    5.5.3 客房添加测试测试步骤:

    登录系统后,点击“客房信息”页面上的添加按钮
    在文本框中输入数据
    点击提交按钮
    对比测试结果

    客房添加测试信息表,测试过程如5-3所示:



    模块名称
    测试用例
    预期结果
    实际结果
    是否通过




    客房管理模块
    房间号:111 房间面积:100 房间简介:干净整洁 房间图片:1492489628424.jpg 房间类型(下拉框,只显示已经添加的客房类型):单人间
    在客房信息界面上能正确显示填写信息。
    所填写的信息在客房信息界面上显示出来了 如图5.12,5.13所示
    通过



    5.5.4 客房预订添加测试测试步骤:

    登录系统后,点击“客房预订”
    点击添加按钮,进入客房添加界面
    点击提交按钮
    对比测试结果

    客房预订添加测试信息表,测试过程如5-4所示:



    模块名称
    测试用例
    预期结果
    实际结果
    是否通过




    客房预订添加模块
    现存的房间号只有110和111
    在客房预订添加界面上的房间号只显示110,111。(注:房间号是下拉框)
    房间号确实只显示现在已存在的房间号 如图5.14所示
    通过



    5.5.5 客户信息查询测试测试步骤:

    登录系统后,点击“客户信息”
    在查询的文本框中输入要查询的顾客名
    点击提交查询按钮
    分析显示结果

    客房预订添加测试信息表,测试过程如5-5所示:



    模块名称
    测试用例
    预期结果
    实际结果
    是否通过




    客户信息模块
    查询小兰的信息
    在多个客户信息中只显示出了小兰的信息
    确实只显示出顾客小兰的信息如图5.15,5.16所示
    通过



    5.5.6 其余模块测试剩余模块与已经列出了的模块测试都是大同小异,本文就不在这里一一列举。但是在实际的测试中所有的模块都是经过严格的测试。
    5.6 中文乱码问题处理在web.xml中配置:
    <param-name>encoding</param-name><param-value>gb2312</param-value>
    对应的SetCharacterEncodingFilter.java文件中的重要代码,在初始化init()方法中定义:
    public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore");}try{ byte[] tempByte = gbStr.getBytes("GB2312"); uniStr = new String(tempByte,"ISO8859_1");}catch(Exception ex){}return uniStr;
    5.7 其他错误本文在程序开发阶段,由于自己不够细心和代码量庞大的缘故,难免会出现一些传值得名字不一致无法找到、传值参数的类型不同而无法识别和传值得个数不同而无法运行等等情况。下图5.17就是因为路径问题而导致的错误。

    5.8 本章小结本章主要对各个模块进行单元测试,当然也对本系统进行了集成测试。主要采用黑盒测试的方法学,找出程序功能上的不足,并通过调试来进一步完善系统。测试中发现了一些不足,比如中文乱码,信息没有及时传递等等问题。由此可以看出,系统测试也是我们软件开发过程中的不可或缺的一环,对我们系统的完善性和健壮性有很大的帮助。所以,在以后要注重系统测试环节。

    结论通过这次对酒店管理系统的设计,我收获良多。首先利用MVC模型。通过使用MVC模型可以达到界面和逻辑部件分离。换言之,当我们需要修改界面风格时,不需要再改变系统的逻辑部件。这样有利于后期的系统维护。代码的复杂度相对应的也就减轻了,有利于系统的实现。
    在系统的开发和设计中,我运用B/S三层开发结构技术和自己平时学习积累的知识水平,完成这个酒店系统的开发。通过开发这个酒店管理系统我也明白了软件开发不单单是完成代码编写,而是具有一整套完整的体系,代码只是其中占据很少一部分,前期准备才至关重要。另外,测试对我们的帮助也很大。测试也要在早期进行,越早发现系统中的错误,所要花费的代价也就越少,对我们也就越有利。如果后期发现错误,尤其是在维护时期,那么有可能付出比开发这个系统还要大的代价,得不偿失。
    这个系统可以帮助酒店工作人员刚好的管理酒店,本系统主要实现了一下几个功能:

    客房管理功能:在这个模块中,我们可以查看,增加和删除客房的类型。也可以查看客房的信息和预订客房并记录消费情况
    客户管理功能:我们可以利用此功能查询特定客户的信息情况,了解客户的实际情况,也可以增加新的顾客
    特色菜品功能:在这个功能下,详细的记录了本酒店的餐饮服务,顾客可以根据自己的喜好来选择餐饮服务,也可以添加新的菜色
    餐饮预订功能:顾客可以根据自己的实际情况来进行就餐时间,就餐地点的选择,方便顾客的实际用餐
    餐饮消费功能:记录了顾客的餐饮消费金额,方便顾客查阅,了解自己的消费细节

    希望在以后中,进一步完善。可以分析出不同职业,不同性别,不同年龄段的的人对房间类型的需求,对餐饮不同菜色的喜爱程度。
    通过这次对酒店管理系统的设计,也让我完整的体验了一次软件开发的全过程。获益良多。锻炼了自我学习,自我研究的能力。同时,也为自己以后的工作学习甚至生活都起到了关键的作用。也锻炼了我的耐心和查找错误并分析错误的能力。
    当然,由于技术和时间的关系,这个系统也存在一些问题。比如对酒店的收入和消费人群没有系统的统计和分析。希望在以后的学习中,继续提高自己的专业水平和技能素养。不断完善自己的系统。
    参考文献[1] 黄剑.基于移动互联网酒店管理系统的设计与实现[D]. 电子科技大学,2014(11):21-25
    [2] 杨玉平.基于WEB的酒店管理系统的设计[D].吉林:吉林大学 , 2012,(21):21-38
    [3] 宣振国.基于Mysql的数据库集群设计与实现[D].北京:北京邮电大学,2013:25-28
    [4] 莫祖英,马费成. 数据库信息资源内容质量用户满意度模型及实证研究[J]. 中国图书馆学报,2013,(10):113-115
    [5] 杨宏. 大数据与智慧酒店管理[J].科技创新与应用,2015 ,(32):76+102
    [6] 陈娅玲. 新形势下酒店管理如何实现创新[J].黑龙江教育学院学报, 2014,(22):174-203
    [7] 陈世敏.大数据分析与高速数据更新[J].计算机研究与发展, 2015, (74):115+168
    [8] Michael J.A.Berry,LinoffGordonS.Mastering Data mining,The art and science of customer management [C].America,2004,11-34
    [9] MarkAllenWeiss.Data structure and algorithm analysisin C[J].America.2004,12+97
    [10] Thomas M.Cover,Joy A.Thomas.Elements of Information Theory[J]America.2011,27-86
    3 评论 20 下载 2020-07-26 11:30:51 下载需要14点积分
  • 基于Java的局域网聊天工具

    一 需求分析掌握Java语言的程序设计方法,理论结合实际操作巩固我们所学的现有知识,使用图形用户界面和socket通信实现一个聊天程序,充分利用线程知识,实现用一个局域网聊天室,同时学会处理各种异常和io输入输出流的应用,学习运用多线程操作。
    聊天要以图形化界面的形式展现。可以实现聊天窗口的显示和关闭,同时可以载入客户输入的信息和读取输出的信息。在对话区域的右侧有滚动条,当该页面的面版满了,可以通过滚动条进行上拉和下拉。该对话区域可以实现多人同时进行聊天,也可以进行单人私聊。聊天内容前有显示是谁发送的消息,发送给谁等。
    先启动一个服务器,设置服务器端口,然后启动客户端,通过连接IP地址和连接客户端成功之后即可以登入客户。只要连接共同的IP地址和共同的端口即可以通过线程和服务器、客户端之间的联系实现单人与单人私聊,单人与多人的群聊。
    二 总体设计2.1 服务器端的建立服务器的功能是通过连接服务器端口实现客户端和服务器之间的的链接,当客户端成功连接到服务器端的时候,就新建一个Server_Thread线程,用于处理与客户端的通信,并启动该线程。显示一些信息,用户登录登出消息。
    2.2 客户端的建立客户端的功能是连接服务器之后,创建新客户ID,并能进行与其他用户聊天的聊天窗口。客户端会新建一个Client_Thread线程,用于客户端与服务器之间的通信,并启动线程。
    2.3 服务器端线程的建立服务端线程用于处理单个用户与其他用户进行通信,服务端线程一直处于运行状态,读取从客户端发来的消息,并对发来的消息类型进行处理,并将信息通过线程关系转发给不同的客户端。通过套接字跟迭代器遍历通知各线程用户上线,用户下线。
    2.4 客户端线程的建立客户端线程是当一个客户端建立时,客户端用于处理发送信息。当客户登入时并且输入信息该线程会读取客户写入的信息,同时更新在线客户列表实现客户的上线和下线的通知。
    2.5 程序模块划分局域网聊天程序包含以下几个模块:服务器端模块,服务器端线程模块,客户端模块和客户端线程模块。
    如下图所示:

    2.6 程序运行流程打开程序软件,要先打开服务器和客户端,在服务器上设置一些信息,然后再服务器界面上显示出来,然后服务器就处于等待客户端连接的状态,当客户端连接后,马上建立两条线程,然后就开始运行,实现通信,通信好后就结束程序。如下图所示:

    三 程序详细设计与实现3.1 程序中主要方法分析服务器端方法列表如下:



    方法名
    方法功能




    ChatServer( )
    创建服务器界面


    addWindowListener()
    用于关闭服务器窗口。


    connect()
    用于服务器和客户端的连接



    服务器线程方法列表如下:



    方法名
    方法功能




    run()
    用于实现用户上下线和聊天功能


    logout()
    方便起见给下线写的方法



    客户端方法列表如下:



    ChatClient()
    创建聊天界面,并连接到服务器




    setMonitorForSetIPJMenuItem();
    为设置ip项设置时间监听


    setMonitorForSetPortJMenuItem();
    为设置端口项设置事件监听


    setMonitorForAboutJMenuItem();
    为帮助项设置事件监听


    setMonitorForLogoutJButton();
    为登出项设置事件监听


    setMonitorForCurrentClientList();
    为当前用户列表设置事件监听


    setMonitorForSentJButton();
    为发送按钮就行事件监听


    loginButton.addActionListener(new Monitor());
    为登陆按钮设置监听


    keyPressed()
    为发送键设置的回车快捷键


    createJMenuBar()
    创建菜单栏



    客户端线程方法列表如下:



    方法名
    方法功能




    run()
    用于更新客户列表和输入和显示功能


    addDate()
    显示时间的功能



    3.2 程序实现3.2.1 服务器端ChatServer()
    该方法是服务器端ChatServer类的构造方法,继承了JFrame类,用于创建服务器界面,对窗口设置了滚动条和其规格,并设置了关闭服务器窗口的按钮。主要代码如下:
    public ChatServer() { this.setTitle("服务器"); Container container = this.getContentPane(); displayJTextArea = new JTextArea(); displayJTextArea.setEditable(false); JScrollPane jsp = new JScrollPane(displayJTextArea); jsp.setVerticalScrollBarPolicy (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); container.add(jsp, BorderLayout.CENTER); this.setBounds(400, 150, 500, 350); this.setVisible(true); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); }
    connect()
    在服务器上记录服务器的一些信息:本机名、本机地址和本机监听的端口。服务器若一直开着,就会一直等待着,直到客户端的连接;客户端一旦连接成功,马上就会在服务器界面上显示连接客户的信息,然后同时会创建对应的线程,接下来就开始运行线程。主要代码如下:
    public void connect() { try { serverSocket = new ServerSocket(port); //记录服务器端的一些信息 displayJTextArea.append("本机名:" + InetAddress.getLocalHost().getHostName() + "\n"); displayJTextArea.append("本机地址:" + InetAddress.getLocalHost().getHostAddress() + "\n"); displayJTextArea.append("本机监听端口:" + port + "\n"); } catch (BindException e) { JOptionPane.showMessageDialog(null, "此端口已被占用,无法监听!", "提示", JOptionPane.WARNING_MESSAGE); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { } while (true) { try { socket = serverSocket.accept(); //等待客户端的连接 Date now = new Date(); SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd E kk:mm:ss"); displayJTextArea.append("\n" + f.format(now) + "\n"); displayJTextArea.append(socket.getInetAddress().getHostAddress() + " is connected" + "\n"); Server_Thread st = new Server_Thread(socket, threadList, displayJTextArea); //客户连接上,建立对应的线程 st.start(); } catch (IOException e) { e.printStackTrace(); } } }
    3.2.2 客户端ChatClient()
    该方法是客户端的构造方法,继承了JFrame类,用于创建客户端聊天界面,采用了GridBagLayout的布局,包含客户信息、在线客户列表、会话对象、聊天窗口等信息。对登陆、退出、发送和菜单等的按钮设置了监听。为方便起见,为发送按钮设置了回车的快捷键,且在聊天的界面进行了滚动条的设置。主要代码如下:
    public ChatClient() { this.setTitle("客户端"); Container container = this.getContentPane(); GridBagLayout layout = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints(); constraints.fill = GridBagConstraints.BOTH; //组件随着所给区域可以进行扩展 container.setLayout(layout); createJMenuBar(); 。。。。。。 //中间省略语句为对界面的设置 this.setBounds(400, 100, 450, 500); this.setVisible(true); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent arg0) { System.exit(0); } }); setMonitorForSetIPJMenuItem(); //为设置ip项设置时间监听 setMonitorForSetPortJMenuItem(); //味设置端口项设置事件监听 setMonitorForAboutJMenuItem(); //为帮助项设置事件监听 setMonitorForLogoutJButton(); //为登出项设置事件监听 setMonitorForCurrentClientList(); //为当前用户列表设置事件监听 setMonitorForSentJButton(); //为发送按钮就行事件监听 loginButton.addActionListener(new Monitor()); //为登陆按钮设置监听 messageJTextField.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { //为发送按钮设置的监听 if(e.getKeyChar() == KeyEvent.VK_ENTER) { sendMessage(); } } }); }
    关键方法
    public void setMonitorForSetIPJMenuItem(); // 用于为设置ip项设置时间监听public void setMonitorForSetPortJMenuItem(); //用于为设置端口项设置事件监听public void setMonitorForAboutJMenuItem(); //用于为帮助项设置事件监听public void setMonitorForLogoutJButton(); //用于为登出项设置事件监听public void setMonitorForCurrentClientList(); //用于为当前用户列表设置事件监听public void setMonitorForSentJButton(); //用于为发送按钮就行事件监听public void loginButton.addActionListener(new Monitor());//用于为登陆按钮设置监听public void messageJTextField.addKeyListener(new KeyAdapter() //用于给发送按钮设置回车快捷键
    3.2.3 服务器端线程run()
    迭代遍历,通过线程实现上线通知防止重名登入与消息的发送以及调用logout方法,选择回话对象。
    public void run() { while (true) { String msg = null; try { msg = reader.readLine(); if (msg.startsWith("login")) { loginName = msg.substring(msg.indexOf(':') + 1).trim(); if (! threadList.containsKey(loginName)) { writer.println(loginName + ": 登录成功!"); threadList.put(loginName, this); displayTextArea.append(loginName + " 进入聊天室 \n"); displayTextArea.setCaretPosition(displayTextArea. getText().length()); Iterator<Entry<String, Server_Thread>> it = threadList.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Server_Thread st = (Server_Thread) entry.getValue(); if (st != this) { st.writer.println("用户上线:" + loginName); //通知各线程上线通知 writer.println("用户上线:" + st.loginName); //刷新自己的线程 } }} else { writer.println(loginName + " 已存在,请选择其他的用户名登录"); } } else if(msg.startsWith("logout")){ logout(); break; } else {String [] toClientNames; toClientNames = msg.substring(msg.indexOf('#') + 1).split("#"); String message = toClientNames[toClientNames.length - 1]; for (int i = 0; i < toClientNames.length - 1; i++) { Server_Thread st = threadList.get(toClientNames[i].trim()); st.writer.println(loginName + ": " + message); } writer.println(loginName + ": " + message); }} catch (IOException e) { logout(); break; } }}
    logout()
    迭代遍历信息,实现下线通知,删除套接字端口。
    public void logout() { Iterator it = threadList.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Server_Thread st = (Server_Thread) entry.getValue(); if (st != this && st.isAlive()) { st.writer.println("用户下线:" + loginName); } } threadList.remove(loginName); if (socket != null) { try { socket.close(); }catch (IOException e1) { e1.printStackTrace(); }}
    3.2.4 客户端线程run()
    运行程序,实现对客户的登录,上线,下线以及对客户发送信息的读取,同时更新在线客户。
    public void run() { String s = null; while (true) { try { while((s = reader.readLine()) != null) { if (s.endsWith("登录成功!")) { addDate(); cc.displayTextArea.append(s + "\n"); cc.logoutJButton.setEnabled(true); cc.clientNameTextField.setEnabled(false); cc.loginButton.setEnabled(false); } else if (s.startsWith("用户上线:")) { String loginName = s.substring(s.indexOf(":") + 1); addDate(); cc.displayTextArea.append("客户:" + loginName + "上线 \n"); cc.displayTextArea.setCaretPosition(cc.displayTextArea.getText().length()); cc.currentClientList.add(loginName); continue; } else if (s.startsWith("用户下线:")) { String loginName = s.substring(s.indexOf(":") + 1); addDate(); cc.displayTextArea.append("客户:" + loginName + " 下线 \r\n");cc.displayTextArea.setCaretPosition(cc.displayTextArea.getText().length()); cc.currentClientList.remove(loginName); continue; } else { addDate(); cc.displayTextArea.append("客户" + s +"\n"); cc.displayTextArea.setCaretPosition(cc.displayTextArea.getText().length()); } } } catch (IOException e) { JOptionPane.showMessageDialog(null, "服务器异常!", "提示", JOptionPane.ERROR_MESSAGE); break; } } }
    addDate()
    显示日期,星期和时间.
    public void addDate() { Date now = new Date(); SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd E kk:mm:ss"); cc.displayTextArea.append("\n" + f.format(now) + "\n"); cc.displayTextArea.setCaretPosition(cc.displayTextArea.getText().length());}
    四 运行测试打开服务器,立即弹出设置端口的窗口,提示要设置端口

    当端口设置成功后,服务器显示一些信息

    打开客户端,弹出客户端的主界面

    用户注册新ID登陆显示

    在服务器主界面显示客户端上下线信息如下

    客户端界面显示在线客户列表及多用户聊天窗口
    6 评论 101 下载 2018-11-16 10:55:15 下载需要10点积分
  • 基于java的多人聊天程序课程设计

    一、设计内容及要求1.1 设计内容聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本程序采用客户机/服务器架构模式。通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。用多线程可完成多点对多点的聊天。
    1.2 设计要求主要有两个应用程序,分别为服务器程序和客户端程序。服务器应用程序主要用于消息转发、客户登录信息的管理以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。该聊天系统实现私聊,群聊,用户注册,登陆,退出聊天系统等功能。
    二、系统需求分析2.1 系统介绍在当今信息时代,有许多的聊天工具,例如QQ、微信等。本程序就是利用Java网络编程的知识,采用客户机/服务器架构模式来实现客户端与客户端之间的通讯。
    2.2 开发背景在当今信息时代,越来越多的聊天工具被应用,Java语言是当今流行的网络编程语言,它具有面对对象、跨平台、安全、多线程等特点。使用Java语言不仅可以实现大型企业级的分布式系统应用,还能为小型的、嵌入式设备进行应用程序开发。面对对象的开发方法是当今最流行的开发方法,它不仅更贴近现实,而且有利于软件的维护和继承。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及面对对象的特性,锻炼我们熟练的应用面对对象的思想和设计方法解决实际问题的能力,所以我选择了开发Java多人聊天程序。
    三、系统总体设计3.1 系统功能结构图
    3.2 系统数据流程图
    四、系统详细设计4.1 本设计所涉及技术和知识点
    C/S体系结构:采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。其中客户端用了发送和接受收显示聊天消息,服务器用来监听客户端的消息,并将接收到的数据转发到所用的客户端上,这样实现群聊功能。Socket套接字:作为多人聊天程序,网络编程的知识必不可少,其中用到了Socket套接字、IP地址、端口号等网络编程的知识。客户端与服务器的窗口用到Java Swing图形用户界面知识,其中包括界面的布局、组件的使用以及各种监听事件的使用。多线程:为了是客户端与客户端之间的消息、客户端发送与接收的消息不发生冲突,将每个客户端的发送和接收用不同的线程。IO流:聊天时客户端与服务器之间肯定有数据的输入输出,所以IO流的知识在这里也十分重要。
    4.2 功能模块详细设计
    客户端:运行客户端时,弹出登录客户端界面,这是需要设置用户名、IP地址和端口号,其中IP和端口号必须和服务器的对应,否则连接不上服务器。登录后进入客户端聊天界面窗口。这时可以与其他客户端之间在一个聊天室中聊天,若想私聊某人,只需在聊天内容前加上@该用户的姓名+:就可以了。点击右上角的下线按钮即退出该聊天室。
    发送消息:当点击发送按钮时,将消息通过DataOutputStream流中的writeUTF发送到服务端,服务端通过DataInputStream中的readUTF接受客户端的消息,紧接着服务端通过DataOutputStream中的writeUTF发送个所有客户端。
    私聊:当用户登录后,在没有点击发送按钮前,先将该客户端的姓名发送到服务器,服务器先接收到用户的姓名,然后在接收聊天消息。
    服务器:启动服务器,弹出设置服务器的窗口,填写服务器的IP地址和端口号,点击确定后,服务器启动,并不断监听客户端的连接和接收客户端发来的消息。

    五、编码与实现5.1 具体功能模块实现该多人聊天程序包括8个文件,功能如下:
    1. Client.java 包含Client类,其中有main、connectServer函数,是客户端启动的入口。在main函数中通过创建一个ClientLogin对象,来打开登陆窗口。 ClientLogin login = newClientLogin();
    2. ClientFrame.java
    包含ClientFrame类,该类继承于Jframe类,用来创建客户端的窗口。 其中包括窗口中的各个组件、布局以及组件的监听事件。
    sendButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { msg = msgText.getText().toString(); ClientSend.send(); msgText.setText(null); });
    发送按钮的监听事件,当点击发送时,将发送栏中的消息保存在字符串msg中,在,然后调用 ClientSend.send()函数,将该字符串发送到服务器。
    3. ClientLogin.java
    包含ClientLogin类,该类继承于Jframe类,用来创建客户端登录窗口,其中包括设置IP地址、端口号、用户姓名的各种组件,和登录按钮的监听事件:
    btn_login.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { name = jtf_userName.getText().toString(); ip = jtf_ip.getText().trim(); port = Integer.parseInt(jtf_port.getText().toString()); //点击登录后,客户端连接服务器 try { Client.connectServer(); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } //隐藏当前窗口 dispose(); //关闭 //打开客户端 new ClientFrame(); } });
    点击登录按钮时,将窗口中用户姓名、IP地址和端口号分别赋值给字符串name、ip、port变量,然后调用Client.connctServer()来连接服务器,并且关闭该窗口,创建ClientFrame对象来打开客户端窗口。
    4. ClientReceive.java
    包含ClientReceive类,该类中有Runnable接口,用于创建一个用户接受服务器消息的客户端接受线程。
    线程体:
    public void run() { String msg = null; while(isRunning){ //将接受信息输出到客户端窗口中 msg = receive(); System.out.println(msg); ClientFrame.msgRecordText.append(msg+"\n"); } }
    该线程处于死循环中,其中receive()函数用来接收服务器的消息,并通过ClientFrame.msgReceordText.append(msg+”\n”)将消息显示在客户端的窗口聊天记录面板上。
    5. ClientSend.java
    包含ClientReceive类,该类中有Runnable接口,用于发送消息,该线程的线程体为空:
    public void run() { }
    当用户点击客户端窗口中的发送按钮时,会调用该类中的send函数,用于将消息发送到服务器。
    6. Server.java
    包含Server类,其中包含main、setServer方法和List<ServerForward>集合类。
    其中main函数是服务器的入口,用来打开服务器设置窗口。
    main函数:
    ServerFrame serverFrame = new ServerFrame();
    setServer函数:
    public static void setServer() throws IOException { //从服务器窗口获取ip和端口号 String ip = ServerFrame.ip; int port = ServerFrame.port; ServerSocket server = new ServerSocket(port, 0,InetAddress.getByName(ip)); while(true) { Socket client = server.accept(); System.out.println("连接成功"); ServerForward serverForward = new ServerForward(client); allClient.add(serverForward); Thread thread = new Thread(serverForward); thread.start(); } }
    启动服务器,不断的监听客户端的连接,当有客户端连接上时,在List<ServerForward>集合类中添加该线程,并启动该线程。
    7. ServerForward.java
    包含ServerForward类,服务器接受一个客户端得信息,再转发给其他客户端。该类中主要包括receive、send函数,用于转发客户端的消息。
    线程体:
    public void run() { //接受用户的昵称 while(isRunning) { if (name == null) name = getClientName(); else break; } while(isRunning) { sendToClient(receive()); } }
    因为服务器的工作不间断的,所以用无限循环。getClientName()从客户端中接受用户的姓名,并保存字符串name中。sendToClient(receive())接收一个客户端的消息,并转发给所有客户端。
    8. ServerFrame.java
    包含serverFrame类,该类继承于JFrame,用于创建服务器设置界面,其中包括设置IP地址、端口号,和确认按钮的监听事件:
    btn_set.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ip = jtf_ip.getText().trim(); port = Integer.parseInt(jtf_port.getText().toString()); //关闭窗口 dispose(); //点击确定后,设置服务器ip和端口号 try { Server.setServer(); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } });
    将服务器设置窗口中的IP地址和端口信息ip、port字符串中,并调用Server.setServer函数,开始启动服务器。
    5.2 演示界面5.2.1 服务器设置窗口
    5.2.2 客户端登录窗口
    5.2.3 客户端窗口
    5.2.4 群聊和私聊
    10 评论 388 下载 2018-10-21 14:43:22 下载需要13点积分
  • 基于SSM和MySQL的企业人事管理系统的设计与实现

    摘 要随着现代计算机网络技术的不断完善,和经济的不断发展,传统的管 理技术已经不再满足整个企业的需要,更多的企业则注重计算机信息管理, 而人事管理系统是典型的计算机信息管理之一,企业可以借助于它进行人 事管理,达到事半功倍。随着企业的雇佣人数的增加,从而有效地管理人 员信息成为必然。人事管理系统的开发主要包括后台数据库的管理和维护,以及前台程序开发两个方面。本篇文章分析了人事管理系统的组成情况以 及一些基本的功能模块,包括系统功能的框架分析,系统开发的软硬件环 境分析,和系统的数据库逻辑设计分析,以及系统的数据流程分析。该系 统主要利用 Java 语言和 IntelliJ IDEA 软件进行设计开发,在文中进行了详细的介绍。该系统是小型企业的人事管理系统,它简单实用,安全性高, 能够基本上满足企业人事管理的需要,实现了对企业员工信息的整体化,系统化和自动化。
    关键词:人事管理;IntelliJ IDEA;系统化
    1 绪论随着科学技术的的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻人事,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对人事信息进行管理,具有着传统系统无法比拟的优点。因此,开发这样的系统,对单位人事管理工作进行有效电子化管理,化简为繁的手工操作,提高工作效率是很有意义的。
    现代的社会中,办公自动化进入社会的每一个角落已经势不可挡,而人事管理系统时办公自动化的一个小小体现,它为人事管理大量又复杂的员工数据工作提供了方便,提高了人事管理工作的效率,为办公自动化的普及奠定了基础。人个现代化企业事业单位不可或缺的部分,它的内容对于企事业的管理者来说至关重要。人事管理系统应该能够为管理者提供充足的信息和快捷的查询手段。但很多单位并没有对人事工作进行电子化管理,还是那种管理人员多,管理效率低,决策依据少的尴尬局面。
    人事管理系统是典型的计算机信息管理系统之一,它开发主要包括后台数据库的建立和维护以及前端应用程序的开发。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用,界面美观等特点。人事管理系统可以提供丰富的功能,降低人事管理工作的强度,提高其公司人事管理工作的效率,并依靠系统的强大的功能为人事管理的使用创造良好的条件,从而能够适应其公司人事管理的要求,推动其公司人事管理的信息化建设。
    1.1 设计背景随着经济体制的快速发展,对于企业、事业单位的人事管理部门来说,非常需要的一 个操作方便、功能实用、能满足本企业对员工信息管理及需求的系统。在企业选择人事管理系统时,主要存在以下几个方面的要求:

    可以真正的实现对企业的人事管理
    系统的功能要符合本企业的实际情况
    系统的功能操作要方便、易懂,不要有多余或复杂的操作
    可以方便地对人事信息进行输出打印

    1.2 设计意义本系统就是基于本公司的人事管理而设计的,是对公司的人事资料进行管理,为人事管理人员提供了一套操作简单、使用可靠、界面友好、易于管理和使用的处理工具。本系统对人事各种数据进行统一处理,避免数据存取、数据处理的重复,提高工作效率,减少了系统数据处理的复杂性。本系统不仅使公司人事管理人员从繁重的工作中解脱出来,而且提高了人事管理的效率,提高了人事管理的科学性,方便了用户查询、管理人员进行管理。
    人事管理是现代企业管理工作不可缺少的一部分,是适应现代企业管理尺度的要求、推动企业人事管理走向科学化、规范化的必要条件。只有人事管理规范了,才能在其他方面更好的发展。为了适应现代企业或公司经营发展的需要,人事管理也从以前的手工管理逐渐被规范化的管理信息系统所代替。众所周知,当今社会为信息社会,世界已进入在计算机信息管理领域中激烈竞争的年代。因此,为提高企业工作效率‘保证企业人事管理质量,人事管理便成当今企事业单位中不可缺少的一部分。它适应时代潮流,是现代企业制度发展的要求,推动企业人事管理科学化,规范化的必要条件“科学技术是第一生产力,只有人事管理规范化,其他事情才能办好。为适应现代企事业单位管理规范化,经营发展战略的需要,人事管理也应由原来的手工管理逐渐被规范化的信息管理系统所 代替。因此,要想加强人事管理,单纯依靠以前的手工管理,不尽浪费大量的人力,物力,财力,而且效率不高。所以人事管理信息系统能够为高层领导者提供准确的人员信息,以便领导者了解企业各个部门的人员构成,安排好工作计划使企业变得更高效,更具有生命力。因此,开发人事管理系统更具有一定的社会现实意义。
    1.3 设计思路能够录入人事的基本资料,在操作上能够完成诸如添加、修改、删除、查询、新用户的设置及密码修改等方面的工作,基本满足人事日常业务的需要。
    人事管理信息系统主要包含员工基本信息,工作情况,学历,职位情况等各方面信息,内容比较简单。同时还综合了其他系统的功能,总结归纳出所需现有的功能。主要是为人事信息进行服务,对职位的变动、员工资料查询,公告信息查看等功能。总体上说具有编辑,查询,员工管理等功能。
    在如今的社会中如果再用手工管理这样一个庞大的业务,那不仅对人的脑、身体都带来很多的不便,所以我们现在是很需要这样的一个系统来管理,我的这个设计是最基本的管理。提高系统开发水平和应用的目的。
    本系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
    本系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
    总之,在人事管理系统的开发过程中,我们应该充分考虑这些基本原则,这样,我们做的系统才能够具有一定的生命周期。
    2 需求分析基于其他企业人事管理软件的不足,要求能够制作一个可以方便、快捷的对员工信息进行添加、修改、删除的操作,为了能够更好的存储职工的信息,可以将职工的信息添加到 Word 文档,这样,不但便于保存,还可以通过 Word 文档进行打印。 根据企业对人事管理的要求,指定企业人事管理系统目标如下:

    操作简单方便、界面简洁美观
    在查看员工信息时,可以对当前员工的家庭情况等进行添加、修改、删除操作
    方便快捷的全方位查询所有数据
    可以将员工信息以表格的形式插入到 Word 文档中
    实现数据库的备份、还原及清空操作
    由于该系统使用对象较多,要有较好的权限管理
    能够在当前运行的系统中重新进行登录
    系统能够运行稳定、安全可靠

    2.1 需求描述管理员进入主界面,软件开始运行,提供用户登录功能,不同的用户登录操作的功能不同,非管理员用户登录只能查看一些公告信息等,而管理员登录后,可以进行用户管理丶部门管理、职位管理、员工管理、公告管理等功能。管理员可以通过点击部门管理进入里面,可以添加部门、查看部门信息、删除部门等操作。在主界面,管理员可以随意选择自己的操作达到最终的目的。
    人事管理系统的主要作用就是为用户管理不同部门的员工,能够有效的完成人事管理的日常工作;将零散的、杂乱无章的人员信息进行一些整理,方便用户的查询、汇总以及分析。一个完整的人事管理系统应实现以下基本功能。

    部门管理:能够维护体现部门间的组织关系,反映部门的基本信息,能够进行部门的增加撤消,以及部门信息(如部门名称、负责人名称等)的修改
    职位管理:用户管理:能够对系统用户进行编辑、增加或删除,并指定用户的权限
    员工信息的管理:维护员工的基本信息,用户可以进行员工档案信息的录入及更改,其中包括员工的基本信息,要求这些员上档案信息可以进行新增、删除、修改操作,同时可以进行浏览和查询的操作
    公告管理:可以查询所有公告或根据公告名称,公告内容进行模糊查询

    2.2 用例建模用户进行登录后,可以进行部门管理丶岗位管理丶员工管理丶公告管理和用户管理的增、删、改查操作,不同的用户具有不同的角色,分配的功能也不相同。如图:
    员工用例模型

    管理员用例模型

    2.3 用例描述2.3.1 用户管理用例描述
    用户管理用例描述

    用例编号:CASE01用例名称:用户管理用例描述:系统管理员对用户的信息进行 CRUD 操作前置条件:系统管理员成功登录系统后置条件:系统管理员在系统中新增了用户或修改了用户信息或删除了系统中已经存在的用户或查看某个用户的信息活动步骤
    系统管理员登录系统用户点击【新增】按钮,弹出新建用户界面,系统管理员输入用户信息,点击【保存】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示新增后的用户列表系统管理员在用户列表中选择某个用户,点击【修改】,弹出用户修改界面,显示用户的当前信息,管理员更改用户信息,点击【保存】,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的用户列表系统管理员在用户列表中选择某个用户,点击【删除】,弹出删除提示框,当用户确定删除后,系统将当前用户信息删除,并返回到用户列表,显示删除后的用户列表数据格式:用户信息(用户 ID、用户名,密码,登录名,状态)

    部门管理用例描述

    用例编号:CASE02用例名称:部门管理用例描述:系统管理员对部门的信息进行 CRUD 操作前置条件:系统管理员成功登录系统后置条件:系统管理员在系统中新增了部门或修改了部门信息或删除了系统中已经存在的部门或查看某个部门的信息活动步骤
    系统管理员登录系统管理员点击【新增】按钮,弹出新建部门界面,系统管理员输入部门信息,点击【保存】按钮,系统对输入的信息进行验证,将合法的 信息保存,然后显示新增后的部门列表系统管理员在部门列表中选择某个部门,点击【修改】,弹出部门修改界面,显示部门的当前信息,管理员更改部门信息,点击【保存】, 系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的部门列表系统管理员在部门列表中选择某个部门,点击【删除】,弹出删除提示框,当部门确定删除后,系统将当前部门信息删除,并返回到部门列表,显示删除后的部门列表
    数据格式:部门信息(部门 ID 丶部门名称丶详细信息丶部门编号丶部门地址)
    职位管理用例描述

    用例编号:CASE03用例名称:职位管理用例描述:系统管理员对职位的信息进行 CRUD 操作前置条件:系统管理员成功登录系统
    后置条件:系统管理员在系统中新增了职位或修改了职位信息或删除了系统中已经存在的职位或查看某个职位的信息
    活动步骤
    系统管理员登录系统管理员点击【新增】按钮,弹出新建职位界面,系统管理员输入职位信息,点击【保存】按钮,系统对输入的信息进行验证,将合法的 信息保存,然后显示新增后的职位列表系统管理员在职位列表中选择某个职位,点击【修改】,弹出职位修改界面,显示职位的当前信息,管理员更改职位信息,点击【保存】, 系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的 职位列表系统管理员在职位列表中选择某个职位,点击【删除】,弹出删除提示框,当职位确定删除后,系统将当前职位信息删除,并返回到职 位列表,显示删除后的职位列表数据格式:职位信息(职位 ID 丶职位编号丶职位描述)

    员工管理用例描述

    用例编号:CASE04用例名称:员工管理用例描述:系统管理员对员工的信息进行 CRUD 操作前置条件:系统管理员成功登录系统后置条件:系统管理员在系统中新增了员工或修改了员工信息或删除了系统中已经存在的员工或查看某个员工的信息活动步骤
    系统管理员登录系统管理员点击【新增】按钮,弹出新建员工界面,系统管理员输入员工信息,点击【保存】按钮,系统对输入的信息进行验证,将合法的 信息保存,然后显示新增后的员工列表系统管理员在员工列表中选择某个员工,点击【修改】,弹出员工修改界面,显示员工的当前信息,管理员更改员工信息,点击【保存】,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的员工列表系统管理员在员工列表中选择某个员工,点击【删除】,弹出删除提示框,当员工确定删除后,系统将当前员工信息删除,并返回到员 工列表,显示删除后的员工列表 数据格式:员工信息(员工 ID,姓名,性别,手机号码,邮箱,地址,学历等)

    公告管理用例描述

    用例编号:CASE05用例名称:公告管理用例描述:系统管理员对公告的信息进行 CRUD 操作前置条件:系统管理员成功登录系统后置条件:系统管理员在系统中新增了公告或修改了公告信息或删除了系统中已经存在的公告或查看某个公告的信息活动步骤
    系统管理员登录系统管理员点击【新增】按钮,弹出新建公告界面,系统管理员输入公告信息,点击【保存】按钮,系统对输入的信息进行验证,将合法的 信息保存,然后显示新增后的公告列表系统管理员在公告列表中选择某个公告,点击【修改】,弹出公告修改界面,显示公告的当前信息,管理员更改公告信息,点击【保存】, 系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的公告列表系统管理员在公告列表中选择某个公告,点击【删除】,弹出删除提示框,当公告确定删除后,系统将当前公告信息删除,并返回到公告列表,显示删除后的公告列表
    数据格式:公告信息(公告 ID 丶公告标题,内容,发布日期)

    3 系统设计3.1 数据库设计本系统采用的是 mysql 数据库,Mysql 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的关系数据库管理系统应用软件之一。由瑞典 MySQL AB 公司开 发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
    3.1.1 概念模型
    3.1.2 逻辑模型
    3.1.3 数据库脚本



    3.2 系统架构设计本系统采用 Spring+SpringMVC+MyBatis 三大框架搭建,全过程使用注解式开发, 使用 spring 来管理所有的 bean 对象,不再需要我们去显式地new一个对象,而是让 Spring 框架帮你来完成这一切。使用 SpringMVC 在项目中拦截用户请求,它的核心 Servlet 即 DispatcherServlet 承担中介或是前台这样的职责,将用户请求通过 HandlerMapping 去匹配 Controller,Controller 就是具体对应请求所执行的操作。而 mybatis 则是对 jdbc 的封装,它让数据库底层操作变的透明。mybatis 的操作都是围绕 一个 sqlSessionFactory 实例展开的。mybatis 通过配置文件关联到各实体类的 Mapper 文件,Mapper 文件中配置了每个类对数据库所需进行的 sql 语句映射。在每次与数据库 交互时,通过 sqlSessionFactory 拿到一个 sqlSession,再执行 sql 命令。
    3.3 模块设计3.3.1 项目执行流程页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。
    4 产品实现4.1 部门管理模块实现4.1.1 界面设计部门管理列表界面

    部门管理添加界面

    部门管理修改界面

    4.1.2 功能实现部门管理 Controller 层代码实现:


    部门管理 service 层实现:


    部门管理 dao 层实现:

    4.2 职位管理模块实现4.2.1 界面设计职位管理列表界面

    职位管理添加界面

    职位管理修改界面

    4.2.2 功能实现职位管理 Controller 层代码实现:


    职位管理 Service 层代码实现:


    职位管理 Dao 层代码实现:

    4.3 员工管理模块实现4.3.1 界面设计员工管理列表界面

    员工管理添加界面

    员工管理修改界面

    4.3.2 功能实现员工管理 Controller 层代码实现:



    员工管理 Service 层代码实现:


    员工管理 Dao 层代码实现:


    4.4 公告管理模块实现4.4.1 界面设计角色管理列表界面

    角色管理添加界面

    角色管理修改界面

    4.4.2 功能实现公告管理 Controller 层代码实现:


    公告管理 Service 层代码实现:


    公告管理 Dao 层代码实现:

    4.5 用户管理模块实现4.5.1 界面设计 角色管理列表界面

    角色管理添加界面

    角色管理修改界面

    4.5.2 功能实现用户管理 Controller 层代码实现:


    用户管理 Service 层代码实现:


    用户管理 Dao 层代码实现:

    5 结论5.1 毕业设计成果特点本系统主要是面向管理者群体。方便用户信息的管理、查询和更改,减少人员的重复劳动,节约大量人力和物力。企业人事管理系统的出现,解决了老式的纸质管理的弊端,使企业的人事管理工作系统化、规范化、自动化,降低了企业人事管理工作的强度,从而提高企业人事管理的效率。
    5.2 不足之处或遗留未予解决的问题因为本系统是基于个人的理解来进行开发的,所以考虑到还有很多不足之处和一些还遗留未解决的问题:

    对于框架的底层实现原理不清楚,只能做到运用却不理解,这是之后需要学习的
    对于建用例图,E-R 图等等运用还不是很熟练,这是后面我需要进行学习和提升的地方
    对于 AdminTEL 前端框架里模态框实现下拉列表回写数据的功能没有得到解决,还有 jquery 的一些事件处理和属性选择运用的不是很熟练,这是我后面需要进行学习的地方

    参考文献[1] 刘浩. Java 从入门到精通[M]. 北京:人民邮电出版社,2010:7-10.
    [2] 印旻. Java 语言与面向对象程序设计[M]. 北京:清华大学出版社,2000:88-102.
    [3] 萨师煊 ,王珊. 数据库系统概论[M]. 北京:高等教育出版社,2005:23-57.
    [4] 王玉英. 基于 JSP 的 MySQL 数据库访问技术[J]. 现代计算机:专业版
    [5] 赵钢. JSP Servlet+EJB 的 Web 模式应用研究[J]. 电子设计工程
    [6] 肖英. 解决 JSP/Servlet 开发中的中文乱码问题[J]. 科技传播
    [7] 戴维尔,JavaScript 程序员教程,电子工业出版社
    [8]安训国.数据结构(第四版).大连:大连理工大学出版社,2009.6
    5 评论 29 下载 2020-08-25 11:28:07 下载需要13点积分
  • 基于C语言的二叉树基本操作的实现

    1 问题描述
    在主程序中编写一个简单的菜单,将有关二叉树的操作
    建立一棵二叉树的存储结构
    遍历一棵二叉树(包括层次遍历)
    统计二叉树叶子结点的个数
    求二叉树的深度
    子树交换

    2 基本要求
    建立一棵二叉树的存储结构
    遍历一棵二叉树(包括层次遍历)
    统计二叉树叶子结点的个数
    求二叉树的深度
    子树交换

    3 算法思想
    CreatBiTree()运用递归创造二叉树的每一个节点
    Exchange()通过递归交换左右子树
    Depth()通过递归计算二叉树的深度
    InorderTraverse()递归中序遍历二叉树
    PreOrderTraverse()递归先续遍历二叉树
    PostOrderTraverse()递归后续遍历二叉树

    4 模块划分// 其功能是创造一颗二叉树BiTree CreatBiTree(BiTree T);// 其功能是计算一颗二叉树的深度int Depth(BiTree T);// 其功能是交换左右子树void Exchange(BiTree T);// 其功能是中序遍历void InorderTraverse(BiTree T);// 其功能是前序遍历void PreOrderTraverse(BiTree T);// 其功能是后序遍历void PostOrderTraverse(BiTree T);
    5 数据结构数据类型BiTNode定义如下:
    typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;
    6 测试



    2 评论 40 下载 2018-11-07 15:37:09 下载需要7点积分
显示 0 到 15 ,共 15 条
eject