钢琴网系统毕业论文.doc
钢琴网系统目 录1 引言21.1 设计背景21.2 现状分析31.3 实现功能32 确定开发环境42.1 语言环境42.2 开发框架42.3 开发环境52.3.1 语言环境、数据库、服务器52.3.2 symfony框架环境63 系 统 概 述83.1 钢琴网系统的作用83.2钢琴网系统设计思想83.3 钢琴网系统存在的问题现状94 需 求 分 析104.1 现状分析104.2 系统的结构104.3 技术要求114.4 运行环境115 钢琴网系统设计125.1钢琴网系统结构功能125.2 网站结构125.3数据库的分析与设计145.4 主要功能模块145.5钢琴网系统实现155.5.1 系统结构155.5.2 开发工具156 具体设计及实现166.1系统用户浏览模块实现166.2 用户注册、登录和权限管理的实现186.2.1登录模块186.2.2注册页面196.3实现用户发布信息功能模块196.4系统运行截图196.4.1钢琴网系统登录界面196.4.2考试系统考试主界面206.4.3用户浏览新闻、琴行等界面216.3.4用户提交信息界面226.4.5后台管理界面226.4.6查询及结果界面237 系统测试与调试237.1 测试目的及任务237.2 测试方法237.3 系统调试237.3.1 系统调试的常用方法238 结果与分析249 致 谢2510 参考文献2611 附录271 引言互联网现已成为我们生活中不可缺少的部分,网络以其无可比拟的时效性和廉价性吸引了无数商家的眼球。现代商务网络已经成为必不可少的一种产品宣传的方式。但是公司性的网站只是单纯的产品展示,会让用户很难了解到除产品以外的其他信息,例如用户在选择产品的时候想知道大众的意向,想在线和其他人交流,产品行业的最新动态等,用户想了解这些不得不转向其他的网站浏览,这样就大大降低了网站本身的商业价值。所以我这里将产品展示、用户发布、浏览相关信息、用户交流等都融合在钢琴网系统里。随着计算机及其网络技术的飞速发展和社会信息化水平的不断提高,计算机在教育测量和评价过程也得到了广泛的应用。Internet正是顺应着这一新的趋势,以举火燎原之势席卷全球,深入人们生产生活的各个发面。与传统产品展示系统相比,让用户可以发布自己的信息,一方面用户可以得到经济上的回报,另一方面直接的帮助了网站管理员丰富了网站的内容。通过钢琴网系统,用户可以直接通过浏览网站了解到最新的钢琴价格、琴行信息、自己所在地区的培训信息、钢琴相关的服务信息,当然用户也可以发布自己的商业信息,这样网站就不仅仅具有产品展示的商业价值,用户也可以了解到更多相关的产业信息,在线交流分享自己的见解。这样钢琴网相比于普通的商业网站将更加具有用户黏度,更加能吸引用户的使用,网站本身的商业价值也将的到提升。1.1 设计背景 背景故事:王先生家住在武昌,工作稳定,家庭幸福。最近王先生和妻子达成共识,决定让6岁的女儿练习钢琴,于是准备给女儿买一架钢琴供女儿练习。王先生在网上搜索了一下,大多与钢琴相关的信息都是一些商业性的宣传网站,只有钢琴的宣传信息,觉得宣传的意味太重,钢琴的价格在中国也不算小数目,要买当然要谨慎。于是不得不向熟人打听,求助。到琴行买了钢琴后,才发现要找搬家公司搬运刚钢琴,而琴行附带的搬运服务价格又很贵,于是不得不请琴行的搬运车将钢琴运回家。钢琴买回家后,需要联系女儿的钢琴老师,在浩如烟海的培训信息中想找到自己新人的培训信息可不简单,于是王先生花了整整一天的休息时间找来了钢琴老师。女儿练琴还没几天,老师就反映钢琴的音律有问题,需要调律,于是又上网寻找钢琴调律师。女儿练了半年,王先生觉得女儿很反感练习钢琴,王先生和妻子也不愿意强迫孩子,于是花了上万元的钢琴闲置在家。综合一下,王先生从想给女儿买钢琴开始就面临一系列的问题:1.选择合适的钢琴,包括价格、品牌(涉及模块:钢琴选购、琴行信息);2.了解行业信息,例如了解品牌的行业口碑、性能等(涉及模块:行业新闻、钢琴选购、用户评价、留言等);3.决定买后联系相关的钢琴服务,例如钢琴培训、钢琴搬运、调律等服务信息(涉及模块:培训、服务模块);4钢琴闲置之后的处理,例如作为二手出售,出租等;这一系列的问题完全可以在钢琴网中就得到解决而不用到处去搜索,打听(涉及模块:信息发布);总上所述,为了满足用户各方面的需求,钢琴网系统就应运而生了。1.2 现状分析目前国内乐器市场潜力巨大,而钢琴素有乐器之王的美称,它作为一种高档、优雅的乐器自然受到大众的追捧,销售钢琴所产生的商业利益也很大,商家也都在不遗余力的宣传。商家所选择的宣传平台主要是自己企业的网站,这样的宣传成本低,维护难度相对较小,但是对于用户的需求却得不到满足。用户在涉足乐器这个行业的时候就像了解更多的相关信息,而学习的过程就是不断的了解行业信息,和网友交流,观察大众的评价等等。所以我认为可以将宣传重点放在用户的需求上,用户在浏览宣传资料的同时能够自我成长,注重用户的需求才是网站的生存之道,也是网站能不能实现商业价值的重要体现。因此我将钢琴网的定位定位在门户性质的钢琴网站,整合各种信息于一体,满足用户的需求,甚至还可以扩展到所有乐器的销售宣传和用户交流。1.3 实现功能1.用户浏览各种信息,包括钢琴的选购、行业新闻、服务信息、培训信息、琴行信息等等;2.用户注册成为注册用户(包括个人用户和企业用户);3.注册用户发布和管理(更新、删除)自己发布的信息;4.用户搜索想找自己想要的钢琴(钢琴搜索);5.按不同的需求选择钢琴(价格、型号、品牌等)6.管理员管理用户,授予用户不同的权限;7. 上传文件时重命名文件名(“当前时间”+“_文件名”)sfValidatorFile类中修改generateFilename()方法;8.删除物理文件;在删除数据库记录的同时删除服务器文件夹中的对应物理文件9.管理员审核用户发布的消息,更新网站内容;2 确定开发环境在系统实施之前很重要的一项工作就是确定系统的开发环境。系统规模的大小、需求、个人对编程语言的熟悉和爱好等等都决定着系统的开发环境。2.1 语言环境 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。PHP是能让你生成动态网页的工具之一。PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点()自由下载。PHP遵守 GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到,同时其学习和安装过程很简单。虽然在大学的课程中没有系统的学习过PHP语言,但是我实习的过程中使用的语言正式PHP,因此在实习的过程中我自学了PHP语言并且结合symfony的框架进行开发工作,另外一方面的原因是PHP国内的技术力量并不是集中现在并不是分散在成熟企业中,而是主要分布在网络新手,技术爱好者,部分中小企业,教育机构,作为新手的我当然想选择一门简单易学的语言,所以本次毕业论文我选择的是PHP语言作为编程语言。2.2 开发框架如今的PHP框架层出不穷,其中有些比其他的更加惹人耳目。我不是这方面的专家,甚至不能熟练地使用其中的一种,所以在这里我也不想讨论哪些算是框架,哪些不算框架。这里我要选择的是哪一中框架能让我快速的学会使用并高效的进行项目开发。随着Ruby on Rails的火爆,PHP这个流行的Web应用脚本语言也出现了大量的新一代开发框架。与此同时,国内PHP开发者也开始紧跟国外发展,推出了不同的开发框架。在RoR流行之前,PHP领域也有不少开发框架,例如Mojavi、WACT、PHPMvc和Seagull等。这些框架虽然也采用了MVC模式、数据库抽象层等技术。但由于当时PHP本身不像现在这样流行,所以这些框架都没有得到大量应用,最终归于沉寂。而在感受到RoR提供的快速开发能力后,PHP社区像被注入了兴奋剂。各种应用技术和开发框架层出不穷。Symfony正是这些新涌现的PHP框架中的佼佼者。ymfony是一个非常成熟的框架,大量利用了已有的开源项目。Symfony使用Mojavi的核心代码实现了框架的MVC模式,利用 Propel作为数据库抽象层。Symfony不仅功能强大,而且对Ajax有全面的支持。加上官方网站提供的大量文档和教程,并拥有一个活跃的社区,因 此受到许多开发者的欢迎。对于希望选择一个框架作为企业内部系统基础架构的企业来说,Symfony的成熟度、丰富的文档和活跃的社区都是值得考虑的。毕竟企业内部系统更为看重的是稳定性和长期的支持。综合以上原因和个人对各种框架的使用熟练程度,symfony理所当然的成为了我的首选。2.3 开发环境2.3.1 语言环境、数据库、服务器XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。这个软件包原来的名字是LAMPP,但是为了避免误解,最新 的几个版本就改名为 XAMPP 了。它可以在Windows、Linux、Solaris三种操作系统下安装使用,支持多语言:英文、简体中文、繁体中文、韩文、俄文、日文等。许多人通过他们自己的经验认识到安装 Apache 服务器是件不容易的事儿。如果您想添加 MySQL、PHP 和 Perl,那就更难了。XAMPP 是一个易于安装且包含 MySQL、PHP 和 Perl 的 Apache 发行版。XAMPP 的确非常容易安装和使用:只需下载,解压缩,启动即可安装PHP、MySQL数据库和Apache服务器,非常方便。2.3.2 symfony框架环境在安装了Xampp之后,下面我们就可以着手安装symfony框架了。Symfony是一个基于MVC模式的面向对象的PHP5框架。Symfony允许在一个web应用中分离事务控制,服务逻辑和表示层。同时,它还包含了 很多工具和类用以缩短开发复杂的网络应用的时间。基于最佳Web开发实践,已经有多个网站完全采用此框架开发,symfony的目的是加速Web应用的创 建与维护。它的特点如下:1.简单的模板功能;2.缓存管理;3.自定义URL; 4.多语言与I18N支持;5.采用对象模型与MVC分离;6.Ajax支持。 Symfony的安装过程是在线完成的,其过程相当复杂,在这里就不做赘述了,下面我将着重阐述一下symfony的各种特点在项目开发中的应用。1.模板功能。在symfony的框架环境下,通过运行symfony命令在模型层就能生成大量数据模型对数操作的方法,在视图层可以用实例方便的调用这些方法。模板也是通过symfony命令得到的,它包含了查询对应页面需要显示的数据内容,只需要一句简单的symfony命令就能快速的得到一些简单的页面,如果想进一步的开发和美化,只需要在其基础上进行深化就可以了而不需要进行繁琐的编码得到初始的系统框架,这样就大大加快的开发的效率。2.缓存管理。symfony提供一套灵活的服务器端缓存系统。对YAML文件进行的简单直观的设置,就允许将整个页面,动作或局部模板的响应结果,以及模板片断保存到文件中。底层数据改变时,可有选择性得删除部分缓存。删除部分缓存的操作可以用命令行和特殊的动作方法实现。symfony也提供一套简单的方法实现客户端缓存,该方法利用了HTTP头。本章将讲述这些内容,介绍如何监控缓存带来的性能提升。3.自定义URL。自定义URL可以美化系统的URL外观。我们都知道,url中的关键词对搜索引擎排名中的重要作用。如果以关键词为域名的网站,那排名就很容易排到前面去,所以这也从另一个角度说明一个行业词之类的域名本身还具有seo价值。漂亮的URL外观不仅能便于搜索引擎的收录,而且在用户体验方面也发挥着重要的作用,例如用户可以直接从URL信息上了解自己浏览的是什么行业、什么类型的网站等等。4.多语言与I18N支持。I18N就是Internationalization(国际化)的缩写,其原因是I和n之间一共有18个字母。对于叫成熟的网站系统国际化是不可避免的。例如一个门户型的网站,用户人群不仅包括中国人,还包括很多外国人,为了符合特殊人群的阅读习惯,语言国际化不可避免。5.采用对象模型与MVC分离。symfony完整实现了MVC三层,封装了所有东西,包括 $POST,$GET 数据,异常处理,调试功能,数据检测;包含强大的缓存功能,自动加载Class,symfony还具有很强大的view层操 作,能够零碎的包含单个多个文件;非常强大的配置功能,使用yml配置能够控制所有框架和程序运行行为,能够很随意的定义各种自己的 class,并且symfony能够自动加载(auto load)这些class,能够在程序中随意调用;包含强大的多层级项目和应用管理:Project -> Application -> Module -> Action,能够满足一个项目下多个应用的需要。模型是指从现实世界中挖掘出来的对象模型,是应用逻辑的反映。模型封装了数据和对数据的操作,是实际进行数据处理的计算的地方。视图是应用和用户之间的接 口,它负责将应用显现给用户和显示模型的状态。控制器负责视图和模型之间的交互,控制对用户输入的响应响应方式和流程,它主要负责两方面的动作:把用户的 请求分发到相应的模型;将模型的改变及时反应到视图上。MVC将这些对象分离以提高灵活性和复用性。6.Ajax支持。AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。Ajax应用程序的优势在于: 1. 通过异步模式,提升了用户体验;2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用;3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。3 系 统 概 述3.1 钢琴网系统的作用钢琴网的作用是方便用户获取钢琴相关的各种服务信息,例如钢琴的选购,钢琴相关的各种服务信息、行业信息等等。钢琴网还可以供企业级用户发布和展示自己的产品信息,获取商业利益。用户对象涉及面很大,主要包括想培养孩子钢琴兴趣的家长,对钢琴知识和曲谱有兴趣的学生,有能力做钢琴服务行业的个人和企业,钢琴乐器销售的企业甚至是赋闲在家的钢琴老师,与钢琴相关的在这里应有尽有。3.2钢琴网系统设计思想钢琴网系统主要包括系统的登陆、用户浏览、用户发布信息、后台管理系统和在管理员审核用户发布的信息等。首先是系统登陆功能,在symfony框架开发中大量运用到了插件(plugin)。这里我用的是sfGuardPlugin,它是专用来管理用户权限管理,分组的插件,它的方便就是很方便的管理用户,安全性也很好,但是不足的就是没有用户注册的页面,因此我通过阅读相关文档手动加上了用户注册页面。用户浏览信息的设计主要是用户界面和体验的设计。用户在浏览信息时怎么样才能让用户最大量的获得相关信息,相关的信息在一个页面就可以看到,从而节约大量的操作,这里我采用组件的形式,将可以重用的信息单独封装成组件,在需要用的地方直接调用即可,同时又减少了工作量(重复编码)。用户发布信息是先通过分析各种用户可能想发布的信息,将其抽象成数据库的表结构,将注册用户提交的信息存储在数据库中,通过管理员审核将其发布在钢琴网上。后台管理系统的设计。感谢Symfony框架强大的自动完成功能。通过运行相应命令symfony可以根据数据库定义生成后台管理程序,能实现大部分的管理要求,而且可以加入自定义的管理动作。管理员是很和注册用户发布的信息的设计。通过在各种发布信息的表结构中预定义一个show属性,用户提交信息的时候默认为0,网站管理员通过后台管理界面对需要审核的信息进行审核,同意发布的信息将其show属性修改为1,在前台程序中查询条件中加入条件为show属性为1的信息进行查询,显示。3.3 钢琴网系统存在的问题现状因为开发经验的不足,钢琴网还存在着很大的改进空间。例如用户的提交流程略显繁琐,用户使用流程不优化,有些也确实是技术上的原因,种种这些都需要未来花大力气来学习和修改。总结了一下,系统还存在着如下的问题需要改进:1.在批量上传对象的多张图片时,如果最多一次可以上传四张图片,而用户实际只上传了一张图片。剩下的三张图片虽然没有选择上传的文件,但是也保存到了数据库中,其中文件名的字段为空,这样现任不合理。2.搜索引擎的局限性;现在已经做好的搜索引擎只能搜索钢琴对象而不能搜索全站的信息(例如新闻、琴行等),而且还存在的问题就是输入中文搜索的时候搜索不到任何内容,问题可能出在将数据库的记录存储到data/piano.dev.index目录下的文件中时对字符格式进行了转化,中文字符被转换成了其他的字符类型,所以在搜索中文字符关键字的时候就搜索不到记录对象。3.权限的管理流程的问题;当一个企业用户想要发表自己的企业信息时,先要注册一个企业用户类型的账户,经过管理员的审核之后才授予其相应发布权限,当权限授予之后,用户发表的信息还要得到管理员的审核才能发布到前台显示,整个过程稍嫌繁琐,用户注册提交信息列成还需要进一步的优化。 4 需 求 分 析4.1 现状分析用户对象涉及面很大,主要包括想培养孩子钢琴兴趣的家长,对钢琴知识和曲谱有兴趣的学生,有能力做钢琴服务行业的个人和企业,钢琴乐器销售的企业甚至是赋闲在家的钢琴老师,与钢琴相关的在这里应有尽有。目前国内乐器市场潜力巨大,而钢琴素有乐器之王的美称,它作为一种高档、优雅的乐器自然受到大众的追捧,销售钢琴所产生的商业利益也很大,商家也都在不遗余力的宣传。商家所选择的宣传平台主要是自己企业的网站,这样的宣传成本低,维护难度相对较小,但是对于用户的需求却得不到满足。用户在涉足乐器这个行业的时候就像了解更多的相关信息,而学习的过程就是不断的了解行业信息,和网友交流,观察大众的评价等等。所以我认为可以将宣传重点放在用户的需求上,用户在浏览宣传资料的同时能够自我成长,注重用户的需求才是网站的生存之道,也是网站能不能实现商业价值的重要体现。因此我将钢琴网的定位定位在门户性质的钢琴网站,整合各种信息于一体,满足用户的需求,甚至还可以扩展到所有乐器的销售宣传和用户交流。本系统所使用的开发语言PHP5是位于服务器端的脚本运行环境,通过这种环境,用户可以创建和运行动态的交互式 Web 服务器应用程序,如交互式的动态网页,包括使用 HTML 表单收集和处理信息,上传与下载等等。更重要的是,PHP5支持面向对象的编程语言,能够很好的抽象显示业务逻辑,加快开发速率。Symfony框架在欧洲已经是很成熟的中型站点开发框架,其可以根据定义好的数据模型自动生成对该模型的各种操作方法和模型对象之间的关系关联方法。从而节省大量的硬编码时间,加快开发速率,这也是我为什么选择symfony框架的主要原因。4.2 系统的结构symfony框架提供了一种将各种单独的数据模型设置成单独的模块一面影响各自之间的数据处理。这里钢琴网的系统可以大致分为四大模块:1.用户注册、登录模块(sfGuardPlugin),2.显示信息,用户浏览模块;3.用户发布信息模块;4后台管理模块,其中后台管理又分为信息管理和用户管理。4.3 技术要求1.语言基础,熟悉PHP5的语言特性和其各种函数的使用;2数据库设计基础,理解数据模型之间的各种逻辑关系,例如一对一、一对多、多对多关系的数据库表示、程序语言的实现等;3.编程思想,对MVC的编程思想有很深的认识;它不同于传统的面向过程的开发,它将程序严格的划分为三层,即模型层、控制层、视图层。各层之间相互依存,但是作用各不相同。4.外语基础(英文),因为国内关于symfony框架的参考文章很有限,大部分的参考文献是来自于国外的网站、论坛,因此在研究symfony框架时要具备一定的英文阅读能力。4.4 运行环境为了保证系统运行的效率和可靠性,系统Web服务器端应具有较高的软硬件配置,客户端的要求不是很高。此应用程序可广泛运行于互联网。其运行要求如下:服务器端: Apache,IE 5.5/6.0,MySQL数据库,symfony1.2 ,php5.14以上。客户端: Windows98/2000/XP,Internet Explorer(IE)等本系统在WindowsXP +Apache+FireFox3.04下调试通过。5 钢琴网系统设计5.1钢琴网系统结构功能系统管理自己发布的信息浏览信息个人用户企业用户后台前台浏览信息管理自己发布的信息发布服务信息发布服务、企业信息管理员登录游客浏览信息管理信息钢琴网系统包括:用户浏览信息,注册、登录和管理自己发布的信息。系统用户可以选择注册和不注册两种方式使用。对于为注册用户只提供浏览功能,对注册用户提供发布和删除自己的信息。其中注册用户又分为个人用户和企业用户,个人用户可以发布自己的服务信息,企业用户可以发布自己的产品、服务信息。用户登录后可以打不自己的信息,等待网站管理员的审核,现实用户发布的信息。系统的具体功能框架如图4-1所示:图5-1 钢琴网系统功能框架图5.2 网站结构功能需求已经确定,下面根据系统的功能需求确定整个网站结构。钢琴网系统的网站结构如下图所示:图5-2 网站结构图5.3数据库的分析与设计因为钢琴网中数据的涵盖面很大,包括新闻、钢琴、琴行、服务信息、用户等数十个主要对象和其附属对象,例如新闻表,其附属表包括新闻分类表和评论表。而我所选取的开发框架symfony将数据库的定义全部写在schema.yml文件中,在该文件中可以定义各种实体的数据库表结构,包括实体的主键、外键定义,实体之间的关系定义等。然后再运行相关命令,根据在schema.yml文件中定义的数据模型生成互相关联的数据模型,这样就可以在控制层方便的实现各个实体之间的关系。5.4 主要功能模块系统主要功能模块及功能图如下:图5-3 钢琴模块图 图5-4 曲谱模块图5.5钢琴网系统实现5.5.1 系统结构由于该系统面向总校和分布于全国各地的教学中心,因此在系统结构上采用B/S结构相结合的多层软件体系结构。域网内部快速的信息处理, B/S结构具有较好的网络扩展性和兼容性,以B/S结构能满足地理位置分散、通讯介质各异的应用。采用多层体系结构可以将数据库、业务逻辑、用户界面分离开,这样做的优点是:可伸缩性好、可管理性强、可重用性好、部署应用程序的代价比较小。5.5.2 开发工具钢琴网系统使用的编程语言是PHP语言,数据库为MySQL,服务器为Apache和symfony的开发框架。PHP虽然不是真正的面向对象的语言,但是在PHP5之后加入了面向对象的特性,而且它作为一种开源的语言,经过世界范围内使用者的丰富和完善,在安全性和稳定性上已经能够满足大中型项目的需求。MySQL数据库主要应用在中型规模的项目,目前企业级的项目大多数都是用MySQL数据库。Symfony的框架适合于大中型企业级的项目开发,其开发过程完全体现了MVC的开发思想,结合钢琴网的定位综合性的门户网站,所以这里我采用了symfony的框架进行开发,其活跃的社区和数目繁多的插件都是我选择symfony框架的原因。6 具体设计及实现6.1系统用户浏览模块实现 前面提到钢琴网系统的实现是利用MVC的设计模式来实现其体系结构的,它将交互式应用分为三层:模型(model)、视图(view)和控制器(controller)三个部分。其中模型层是依据schma.yml文件中定义的数据库模型通过运行相关命令生成的。其中封装了对象模型的数据和对数据进行的操作。视图是用户和应用之间的接口,它负责两个方面:将用户的请求分发到相应的模型和将模型的改变及时反映到视图上,而视图的作用就是作为用户的操作界面和应用的输出。系统用户可以浏览的信息大致可以分为新闻、钢琴信息、服务信息和曲谱信息,其在前台显示的原理大致相同,这里我以钢琴信息浏览的实现为例子进行说明。当管理员在后台发布了一个钢琴信息并将其存入了数据库,那么在前台界面怎么得到钢琴的信息并将其显示出来呢?对于钢琴对象的数据和对其的操作全部封装在模型层,模型层包括对钢琴对象的添加、删除、修改、查询、处理和它相关联对象之间的关系等等的方法。模型层是通过schema.yml文件中的数据定义在symfony框架中运行相关命令得到的,这里我着重就控制层和视图层说明一下其实现用户浏览的实现方式。1. 首先是钢琴主页面,在钢琴模块的控制层里面的executeIndex()方法负责从模型层得到所有符合查询条件的钢琴对象,代码如下:public function executeIndex(sfWebRequest $request) $c = new Criteria(); $c->addAscendingOrderByColumn(PianoPeer:ID);/按钢琴的ID号排序 $c->add(PianoPeer:SHOW, 1);/查询所有show字段为1的钢琴 $this->piano_list = PianoPeer:doSelect($c);/将查询到的钢琴对象集放在piano_list对象中 $this->pager = new sfPropelPager('Piano',6);/运用pager对象定义每页最多显示6个钢琴对象 $this->pager->setCriteria($c); $this->pager->setPage($this->getRequestParameter('page', 1); $this->pager->init(); 视图层(indexSuccess.php)代码: <div class="piano_b" > <h2>钢琴选购</h2> <br> <?php foreach ($pager->getResults() as $piano): ?> <div class="piano_b_1" style="float:left;width:20%;"> <a href="<?php echo url_for('piano_show',$piano) ?>"><img src="/uploads/pianos/<?php echo $piano->getLogo() ?>" alt="<?php echo $piano->getName() ?> logo" border="0" height=100 width="110" /></a> <p><a href="<?php echo url_for('piano_show',$piano) ?>"><?php echo $piano->getBrand().$piano->getName()."".$piano->getPrice(); ?></a></p> </div>2.显示钢琴对象属性的页面: 当用户点击了一个钢琴的链接,URL将其ID号传递到show()方法,按照该ID号查询得到ID好为当前ID号的钢琴,再通过调用钢琴模型里的方法获取该钢琴的各个属性。控制层代码: public function executeShow(sfWebRequest $request) $this->piano = $this->getRoute()->getObject(); $c = new Criteria(); $c->add(PianopicturePeer:PIANO_ID, $request->getParameter('id'); $c->addAscendingOrderByColumn(PianopicturePeer:ID); $c->setLimit(8); $this->pianopictures = PianopicturePeer:doSelect($c); $this->services = $this->piano->getServices(); $this->user = $this->piano->getUser(); 6.2 用户注册、登录和权限管理的实现在symfony框架的项目开发中大量运用到了插件,插件是世界各地的程序爱好者或软件从业人员按照其规定的编码标准开发的,能够方便的移植到项目开发中的已完成的应用。如果在项目中自己独立开发像登录模块这样安全性要求较高的模块难免存在安全性的隐患,而在symfony的插件体制中,可以允许项目大量运用已存在的并且运行很稳定的插件,而且还加快了项目开发的速度,所以这里我选取的是在symfony框架项目开发中运用得非常频繁的一款插件sfGuardPlugin,它提供了用户登录、权限管理等功能,还能根据实际需求扩展其用途。6.2.1登录模块登录模块的实现代码: <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="/css/pinao.css" rel="stylesheet" type="text/css"/></head><form action="<?php echo url_for('sf_guard_signin') ?>" method="post"> <?php echo $form'username'->renderRow(array('class'=>'text1'); ?> <?php echo $form'password'->renderRow(array('class'=>'text1'); ?> <?php echo $form'remember'->renderRow(); ?> <!-<input type="submit" value="登 录" />-> <input type="image" src="/images/Index2_13.jpg" style="vertical-align:middle;"/><span style="color:#bd1d11; margin-left:5px;">|</span><a href="#" style="color:#d31f11;margin-left:10px;">忘记密码</a></form></html>6.2.2注册页面在sfGuardPlugin插件中并没有提供用户注册的功能,所以这里我自建了一张用于存储用户详细信息的sf_guard_user_profile表,用户注册时用到的表单是由两个表单部分组成的:sf_guard_user表单和sf_guard_user_profile表单,该插件提供了扩展功能的接口。感谢sfGuardPlugin,因为sfGuardUserForm.class是继承自sfGuardUserAdminForm.class的,而在sfGuardUserAdminForm.class中已经为我们要创建的模型sfGuardUserProfile预定义好了接口,在sfGuardUserAdminForm.class中已经存在判断sfGuardUserProfile是否存在的判断语句,如果存在就是用mergeForm()方法将userprofile的Form嵌入到User表单中,所以在使用new新创建用户的时候,$form可以直接包含用户详细信息的创建。6.3实现用户发布信息功能模块 根据系统设计用户可以在钢琴网中发布自己的企业信息、服务信息,当管理员授予注册用户相应权限后该用户可以在对应页面提交自己的信息。Symfony框架中的表单是根据模型生成的,例如用户发布的信息表单被抽象成了InfoForm.class.php类,在该类中可以自定义该表单的属性和外观等。6.4系统运行截图待添加的隐藏文字内容26.4.1钢琴网系统登录界面钢琴网系统登录界面如图6-1所示。图6-1钢琴网系统登录界面6.4.2考试系统考试主界面钢琴网主页如图6-2所示。图6-2 钢琴网主页6.4.3用户浏览新闻、琴行等界面 新闻主页界面如图6-3所示。图6-3 新闻主页界面用户浏览新闻界面如图6-4所示。图6-4 用户浏览新闻界面6.3.4用户提交信息界面用户提交钢琴信息界面如图6-5所示。图6-5 提交钢琴信息6.4.5后台管理界面后台管理界面如图6-6所示。图6-6后台管理界面6.4.6查询及结果界面查询及结果界面显示如图6-7所示。图6-7查询及结果界面7 系统测试与调试7.1 测试目的及任务测试的任务是发现系统中所存在的尚未解决的问题,只有及时的发现问题才能有效的解决问题。测试的目标是暴露程序中的错误,因此测试在程序设计中有着极其重要的地位。测试阶段的根本任务是发现并改正软件中的错误。设计测试方案是测试阶段的关键技术问题,其基本目标是选用尽可能少的高效测试数据,作到尽可能完善的测试,从而尽可能多地发现软件中的错误。7.2 测试方法黑盒测试和白盒测试是软件测试的两类不同方法。测试任何产品都有两种方法:如果已经知道了产品应该具有的功能可以通过测试来检验是否每个功能都能正常使用;如果知道产品内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明说的规定正常进行。7.3 系统调试7.3.1 系统调试的常用方法一般来说,调试可以通过以下几种方式:一个是从头至尾将程序运行一边找到错误,二是回溯法,再一个就是原因排除法。无论采用什么方法,调试的根本目标都是寻找软件错误的原因并改正之。这个目标是通过把系统地评估,直觉和运气组合起来实现的。软件测试是在软件投入运行之前,对软件需求分析,设计规格说明和编码的最终复审,是软件质量保证的关键步骤。它是为了发现错误而执行程序的过程,或者说软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设