分类

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

资源列表

  • 基于Android的手机音乐播放器的设计与实现

    摘 要随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活节奏的加快,生活压力越来越大,碎片化的时间越来越多,那么一个可以在碎片化的时间内调节自己心情的产品,无疑将拥有一个巨大的市场,而且随着移动设备硬件越来越先进,人们对移动设备的软件要求也越要越高,而基于Android系统的手机音乐播放器就能很好地满足这个需求。
    Android是一个开源的基于Linux的系统,本论文将基于Android开源系统技术,使用java语言和Android Studio开发工具实现基于Android系统的音乐播放器。相对于传统的卡带式音乐播放器,MP3播放器,MP4播放器,Android系统的手机音乐播放器有着反应速度快,在线听音乐,分享心情感受,收藏歌曲等无法比拟的优势,Android系统的手机音乐播放器逐渐成为人们生活不可或缺的一部分,所以一个基于Android的音乐播放器无疑将拥有一个巨大的市场。
    本文将会详细地从需求分析开始,认真分析用户需求,然后进行界面,数据库等的设计工作。进而使用java实现需求,开发出一个高效的贴近用户的操作简单的音乐APP。最后通过系统化的测试,检验系统的稳定性。同时也要总结整个过程并指出播放器的不足之处,并提出修改的思路。
    关键词:Android,音乐播放器,高效
    AbstractWith the rapid rise of the Android system and mobile Internet, mobile phones have become an indispensable part of people’s lives. In modern people’s lives, people’s life pace is accelerated, life pressure is increasing, and fragmentation takes more and more time. Then a product that can adjust its mood in a fragmented time will undoubtedly have a huge market, and as the hardware of mobile devices becomes more and more advanced, people’s software requirements for mobile devices will also be higher, based on Android. The system’s mobile music player will be able to meet this demand.
    Android is an open source Linux-based system. This article will be based on Android open source system technology, using java language and Android Studio development tools to achieve Android-based music player. Compared to traditional cassette music players, MP3 players, MP4 players, Android mobile music players have a fast response, listen to music online, share feelings, collect songs and other incomparable advantages, Android system Mobile music players have gradually become an integral part of people’s lives, so an Android-based music player will undoubtedly have a huge market.
    This article will start from the requirements analysis in detail, carefully analyze the user requirements, and then proceed with the design of the interface and database. Then use java to realize the demand and develop an efficient and simple music APP that is close to the user. Finally, through systematic testing, the stability of the system is checked. At the same time, we must also sum up the entire process and point out the inadequacies of the player and propose revised ideas.
    Key words: Android, MusicPlayer, Efficient
    1 前言1.1 研究目的与意义现今社会生活节奏越来越快,而听音乐是舒缓压力的有效方式之一,本文的主要目的是开发一个方便快捷地为大众提供服务的音乐播放器,它可以支持多种格式播放,比如MP3,Wav等多种格式,并且能够控制音乐的播放暂停,停止,上一首,下一首等功能,界面简洁,操作简单。
    在现代生活中,能在空闲的时间里听一下音乐,无疑是一大乐趣,而随着科技的进步,人们听音乐的方式也在悄悄地改变,从传统的MP3转到了智能手机,这时候一个好的音乐APP就可以满足你要求的一切,所以本系统选择移动手机作为开发平台。
    目前,移动互联网已经超越传统PC,成为最大的互联网市场,在庞大的手机市场中,主流的手机操作系统包括Android,IOS,Windows mobile,相对于Windows mobile的一蹶不振,IOS的封闭,Android系统由于它的开放性,吸引了越来越多的开发者投身于Android开发社区中,Android成为现今最受欢迎的系统,所以本文选择Android作为开发的目的系统。
    综上,本文选择为基于Android系统的手机音乐播放器,传统的手机音乐播放器一味地追求功能强大而忽略了CPU和内存占用率过大,对低端智能手机用户不友好,所以该APP追求的是一个更加简洁,通用性广的音乐播发器,同时本系统也会在这基础上追求为用户提供更多音乐资源,致力于打造一个最适合大部分用户的APP,同时本人也可以借助这个机会学习Android移动平台的开发技能。
    1.2 研究概况首先简单介绍一下Android系统,Android开始的时候是Rubin Andy团队开发的一个独立的手机系统,他是基于Linux内核,后来(2005年)该系统被Google公司收购,2007年11月Google宣布退出基于Linux的Android开源系统,而这时正值Apple发布革命性产品iPhone。发展到现在,Android已经更新的8.0,Android也经历了11个年头,也成为了市场占有率最高的系统。根据最新市场调查,在中国市场,Android市场份额上升7.2%,达到79.9%,iOS用户则下滑5.4%,Windows几乎面临“绝迹”,而且还具有上升的趋势。
    在Android系统中主流的音乐播放器有百度音乐,酷狗音乐、QQ音乐、天天动听、网易云音乐。
    百度音乐的前身为“千千静听”,二者进行整合之后更是发挥了自身优势,为用户带来了更加完美的视听享受。且百度音乐重视原创和正版,在应用中还专门设立了原创歌曲榜单。百度音乐独有场景电台功能,可根据当前的时间为您推荐不同种类的歌曲,相当的智能化,比如午后会为您推荐一些慵懒又温暖的音乐,而在下班的路上则会推荐一些较为轻快的乐曲。除此之外,百度音乐还有K歌台服务,这里有大量歌曲供您选择,且提供伴奏曲,您尽可以举着手机高歌一曲,保存后还可分享给好友们收听,或请他们也来PK一下,不只是听歌,百度音乐还能满足您唱歌的需求。
    酷狗算是老牌的音乐播放器了,出色的交互设计和良好的使用体验让它积累了不少忠实用户,酷狗音乐拥有海量乐曲库,并且都是正版,这是因为酷狗与多家媒体或唱片公司都是合作伙伴关系,不但在质量上有所保证,更新速度也能保持同步。酷狗音乐中有个功能叫做“演艺直播”,这里聚集着大量的草根明星,用自己的歌喉为用户们献上一首首精心录制的歌曲,用户可为她送礼物和她交流,也能自己点歌,和舞台上的明星不同,这里多了一丝亲切的味道。
    QQ音乐,但它的优势在于,结合着QQ自身的优势,让用户可以享受到更多的服务。听歌识曲应该是音乐客户端的标准配置了,可QQ音乐却将识曲与摇一摇相结合,无需任何点击,晃动一下即可启动,不仅方便还增添了不少乐趣。QQ音乐为用户们准备了明星部落,这里汇聚了明星们的一手消息,和大量的话题,保证能满足用户追星的需求。
    天天动听是上海水渡石旗下的一款音乐播放器,以其绚丽的可视化效果赢得了用户的喜爱,在播放时封面还会随着音乐一起变换,在视觉和听觉上都是一种享受。它功能丰富实用,支持多种格式的歌曲,操作简单流畅,听歌也能变得如此简单,它功能丰富实用,支持多种格式的歌曲,操作简单流畅,听歌也能变得如此简单,天天动听提供了摇一摇切歌功能,且摇的力度也不尽相同。用户可自己设置首页显示内容,个性化做的非常出众。
    网易云音乐上线仅有几年的时间,但是它却迅速成为了用户们追捧的对象,不止是因为其出众的界面设计,在操作体验上也令人印象深刻,网易云音乐在功能上也有创新,它融入了流行的社交元素,让用户在听歌之外,还能实现分享交流的目的。网易云音乐的与众不同之处,是社交,评论、分享让大家因为对音乐的共同品味而走到了一起,除此之外就是主播电台栏目,音乐故事、情感调频、娱乐八卦,还有热度极高的明星做主播,与听CD的感觉完全不同,偶像与粉丝之间消除了隔阂感,距离更近一些。当然其它的功能在网易云音乐中也能找到,比如听歌识曲、定时停止播放,还可以更换主题皮肤。
    1.3 论文的主要工作本文主要针对播放器的基本功能进行实现,主要研究内容分为:对播放界面的优化,美观的播放界面会给用户带来更好的体验,文中主要提到对图片毛玻璃效果的实现,基于百度音乐API的接口实现访问,跨进进程调度音乐播放器,最后还使用高德地图API实现实时的天气预报功能。
    1.4 论文的结构本论文各章内容安排如下:

    第一章:前言,介绍了国内的Android手机音乐播放器发展现状,并进一步分析了这些软件对于用户使用的一些不足
    第二章:开发技术及工具的介绍,这里主要阐述Android系统的发展和架构,Retrofit和Rxjava作为Android客户端访问网络的的框架,和使用MVP的设计模式,使用Android Studio 开发Android端,Idea作为后台的开发工具,JavaEE技术,MySQL数据库,Spring-Boot框架
    第三章:需求分析。通过对该系统实现的可行性做了分析,在了解需求的基础上,对系统的功能需求做了阐述,采用了用例图、用例简介、活动图、包图等对系统的流程进行了分析
    第四章:系统总体设计。概括分析说明了音乐播放器的主要功能,在了解需求的基础上,设计了系统的总体功能模块。从概念结构设计、物理结构设计及数据库设计三方面对系统的设计进行介绍
    第五章:系统详细设计。分别通过时序图、界面、核心代码(内附界面截图及精髓技术的代码)。阐述播放器播放音乐流程。并介绍了本文实践项目的一些亮点与独到之处
    第六章:系统测试。对目前常用的测试技术进行了介绍并介绍了测试该系统的方法
    第七章:结束语。总结整个设计,并说明不足及进一步改善的方向

    2 开发技术及工具的介绍在本章中,本系统主要采用Retrofit和Rxjava作为Android客户端访问网络的的框架,使用MVP的设计模式,使用Android Studio 开发Android端,Idea作为后台的开发工具,使用JavaEE技术,使用MySQL作为后台数据库,Spring-Boot框架。
    2.1 Android系统简介Android是一个基于Linux内核的开放源代码移动操作系统,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发,主要设计用于触屏移动设备如智能手机和平板电脑与其他便携式设备。
    Android系统最初并不是由Google公司研发的,Android最初由安迪•鲁宾(Andy Rubin)的团队开发制作,最初开发这个系统的目的是创建一个数码相机的先进操作系统;但是后来发现市场需求不够大,加上智能手机市场快速成长,于是Android成为一款面向智能手机的操作系统。于2005年7月11日被美国科技企业Google收购。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商成立开放手持设备联盟来共同研发改良Android,随后,Google以Apache免费开放源代码许可证的授权方式,发布了Android的源代码,开放源代码加速了Android普及,让生产商推出搭载Android的智能手机,Android后来更逐渐拓展到平板电脑及其他领域上。随着时间的推移,Android系统逐渐强大起来,现在Android已经成为了全球最大的移动操作系统,Android从面世以来已经有二十多个版本了在这几年的发展过程中,谷歌为Android建立了一个完整的生态系统[5]。Android系统的主要厂商有SAMSUNG,华为,HTC,OPPO,VIVO,小米等。目前最新的额Android版本是Android 8.1(更智能、更迅捷、更强大。广受世人喜爱的不仅仅是曲奇饼干,更是为您打造的全新 Android 系统[1]) 。
    Android系统由高到低分为Application层、Application Framework层、Libraries层、AndroidRuntime层,和 Linux 内核层。蓝色的代表java程序,黄色的代码为运行JAVA程序而实现的虚拟机,绿色部分为C/C和和语言编写的程序库,红色的代码内核(linux内核和driver)。在Application Framework之下,由C/C和和的程序库组成,通过JNI完成从JAVA到C的调用。

    2.1.1 Application所有的应用程序都是使用JAVA语言编写的,每一个应用程序由一个或者多个活动组成,活动必须以Activity类为超类,活动类似于操作系统上的进程,但是活动比操作系统的进程要更为灵活,与进程类似的是,活动在多种状态之间进行切换。利用JAVA的跨平台性质,基于Android框架开发的应用程序可以不用编译运行于任何一台安装有android系统的平台,这点正是Android的精髓所在[6]。
    2.1.2 Application Framework应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。帮助程序员快速的开发程序,并且该应用程序重用机制也使用户可以方便的替换程序组件[11]。
    2.1.3 LibrariesAndroid包含一个C/C和和库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库。
    2.1.4 Android Runtime层Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
    2.1.5 Linux内核Android 的核心系统服务依赖于 Linux 2.6 内核 ,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。
    2.2 Retrofit技术框架A type-safe HTTP client for Android and Java[2],这是Retrofit官网对Retrofit的定义。Retrofit 是 Square公司旗下的类型安全的 HTTP 客户端,支持 Android 和 Java 等,它能将你的 HTTP API 转换为 Java 接口。Retrofit其实就是对okhttp做了进一步一层封装优化。用户只需要通过简单的配置就能使用Retrofit来进行网络请求了。
    Retrofit能够直接返回Bean对象,例如如果用户进行一个网络接口的请求,返回来一串json字符串。那么这个时候一般用户都要拿到这个json字符串后进行解析得到对应的Bean对象,Retrofit只要依赖一下Gson的转换库然后进行简单的配置就能够直接拿到Bean对象了,不需要用户自己去解析。
    2.3 Rxjava技术框架RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences[3]。Rxjava和Retrofit都是由Square公司开发的开源框架,Rxjava一般配合Retrofit一起使用,RxJava是JVM的响应式编程扩展是一个为Java虚拟机编写的使用可观察序列的构建异步的基于事件的程序的类库。它基于观察者模式实现对数据/事件的序列的支持,并添加了一些操作符,允许你以声明式构建序列, 使得开发者无需关心底层的线程、同步、线程安全和并发数据结构。
    2.4 MVP框架技术简介对于一个应用而言用户需要对它抽象出各个层面,而在MVP架构中它将UI界面和数据进行隔离,所以用户的应用也就分为三个层次。

    View:对于View层也是视图层,在View层中只负责对数据的展示,提供友好的界面与用户进行交互。在Android开发中通常将Activity或者Fragment作为View层
    Model:对于Model层也是数据层。它区别于MVC架构中的Model,在这里不仅仅只是数据模型。在MVP架构中Model它负责对数据的存取操作,例如对数据库的读写,网络的数据的请求等
    Presenter:对于Presenter层他是连接View层与Model层的桥梁并对业务逻辑进行处理。在MVP架构中Model与View无法直接进行交互。所以在Presenter层它会从Model层获得所需要的数据,进行一些适当的处理后交由View层进行显示。这样通过Presenter将View与Model进行隔离,使得View和Model之间不存在耦合,同时也将业务逻辑从View中抽离。更好的使得单元测试得以实现[14]

    下图很好的展示了MVP各个组件间的关系:

    2.5 Android studio开发工具简介Android Studio是一个为Android平台开发程序的集成开发环境。2013年5月16日在Google I/O上发布,可供开发者免费使用。2013年5月发布早期预览版本,版本号为0.1。2014年6月发布0.8版本,至此进入beta阶段。第一个稳定版本1.0于2014年12月8日发布。Android Studio基于JetBrains IntelliJ IDEA,为Android开发特殊定制,并在Windows、OS X和Linux平台上均可运行。
    Android Studio 是基于 IntelliJ IDEA 的官方 Android 应用开发集成开发环境 (IDE)。 除了 IntelliJ 强大的代码编辑器和开发者工具,Android Studio 提供了更多可提高 Android 应用构建效率的功能,例如:

    基于 Gradle 的灵活构建系统
    快速且功能丰富的模拟器
    可针对所有 Android 设备进行开发的统一环境
    Instant Run,可将变更推送到正在运行的应用,无需构建新的 APK
    可帮助您构建常用应用功能和导入示例代码的代码模板和 GitHub 集成
    丰富的测试工具和框架
    可捕捉性能、易用性、版本兼容性以及其他问题的 Lint 工具
    C和和 和 NDK 支持
    内置对 Google 云端平台的支持,可轻松集成 Google Cloud Messaging 和 App 引擎
    对最新的Google主推的开发语言Kotlin进行支持

    目前Android Studio的最新版本时3.1。
    2.6 IntelliJ IDEA开发工具简介IntelliJ IDEA是一种商业化销售的Java集成开发环境(Integrated Development Environment,IDE)工具软件,由捷克软件公司JetBrains在2001年1月时推出最初版。
    IntelliJ IDEA是用于开发计算机软件的Java集成开发环境(IDE)。 它由JetBrains(以前称为IntelliJ)开发,可作为Apache 2许可社区版本和专有商业版本提供。 两者均可用于商业开发。
    IntelliJ IDEA能尽可能地促进程序员的编程速度。它包括了很多辅助的功能,并且与Java结合得相当好。不同的工具窗口围绕在主编程窗口周围,当鼠标点到时即可 打开,无用时也可轻松关闭,使用户得到了最大化的有效屏幕范围。以技术为导向的IDEA集成了调试器,支持本地和远程的调试,即使用户需要修改一些设置上 的东西使用户的工作顺利进展。另外,它还提供了通常的监视,分步调试以及手动设置断点功能,在这种断点模式下,用户可以自动地在断点之外设置现场访问,甚 至可以浏览不同的变量的值。IDE支持多重的JVM设置,几个编译程序和Ant建造系统,并且,它使得设置多重的自定义的类途径变得简单。
    IntelliJ IDEA是一个相对较新的Java IDE。它是Java开发环境中最为有用的一个。高度优化的IntelleJ Idea使普通任务变得相当容易,Idea支持很多整合功能,更重要的使它们设计的好容易使用。Idea支持XML中的代码实现,Idea同时还会校正 XML,Idea支持JSP的结构。作用于普通Java代码的众多功能同样适用于JSP(比如整合功能),同时支持JSP调试;支持EJB,尽管它不包括 对个别应用服务器的特殊支持。Idea支持Ant建立工具,不仅是运行目标它还支持编译与运行程序前后运行目标,另外也支持绑定键盘快捷键。在编辑一个 Ant建立XML文件时,Idea还对组成Ant工程的XML部分提供支持。IntelliJ IDEA 被称为是最好的JAVA IDE开发平台,这套软件就是以其聪明的即时分析和方便的 refactoring 功能深获大家所喜爱。缺点是较复杂,对初学者来说,理解起来比较困难。
    2.7 PowerDesign工具介绍Power Designer 是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,他几乎包括了数据库模型设计的全过程。利用Power Designer可以制作数据流程图、概念数据模型、物理数据模型,还可以为数据仓库制作结构模型,也能对团队设计模型进行控制。他可以与许多流行的数据库设计软件,例如PowberBuilder,Delphi,VB等相配合使来缩短开发时间和使系统设计更优化。
    2.8 Rotation Rose简介由于本系统使用RUP设计模式,需要建立可视化建模。可视化建模(VISUAL MODELING)是利用围绕现实想法组织模型的一种思考问题的方法。模型对于了解问题、与项目相关的每个人(客户、行业专家、分析师、设计者等)沟通、模仿企业流程、准备文档、设计程序和数据库来说都是有用的。建模促进了对需求的更好的理解、更清晰的设计、更加容易维护的系统。
    Rational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具。用于可视化建模和公司级水平软件应用的组件构造。
    Rational Rose 是一个完全的,具有能满足所有建模环境(Web开发,数据建模,Visual Studio和 C和和 )需求能力和灵活性的一套解决方案。Rose 允许开发人员,项目经理,系统工程师和分析人员在软件开发周期内在将需求和系统的体系架构转换成代码,消除浪费的消耗,对需求和系统的体系架构进行可视化,理解和精练。通过在软件开发周期内使用同一种建模工具可以确保更快更好的创建满足客户需求的可扩展的、灵活的并且可靠的应用系统。
    2.9 Spring-boot技术简介Spring Boot favors convention over configuration and is designed to get you up and running as quickly as possible[4]。Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
    从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。简便起见,该框架也提供了命令行界面,它可以用来运行和测试Boot应用。框架的发布版本,包括集成的CLI(命令行界面),可以在Spring仓库中手动下载和安装。
    要进行打包和分发的工程会依赖于像Maven或Gradle这样的构建系统。为了简化依赖图,Boot的功能是模块化的,通过导入Boot所谓的“starter”模块,可以将许多的依赖添加到工程之中。为了更容易地管理依赖版本和使用默认配置,框架提供了一个parent POM,工程可以继承它。
    2.10 Mysql数据库简介MySQL Enterprise Edition includes the most comprehensive set of advanced features, management tools and technical support to achieve the highest levels of MySQL scalability, security, reliability, and uptime。 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言—结构化查询语言(SQL)进行数据库管理。由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
    MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
    MySQL,虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。它的历史也富有传奇性。
    2.11 Glide框架Glide is a fast and efficient open source media management and image loading framework for Android that wraps media decoding, memory and disk caching, and resource pooling into a simple and easy to use interface。[7]在泰国举行的谷歌开发者论坛上,谷歌为开发者介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。
    Glide中有一部分单词,用英文单词可能在行文中更加合适,还有一些词在Glide中有特别的含义,这里简要说明一下:

    View:一般情况下,指Android中的View及其子类控件(包括自定义的),尤其指ImageView。这些控件可在上面绘制Drawable
    Target:Glide中重要的概念,目标。它即可以指封装了一个View的Target(ViewTarget),也可以不包含View(SimpleTarget)
    Drawable:指Android中的Drawable类或者它的子类,如BitmapDrawable等。或者Glide中继承Drawable实现的自定义Drawable(如GifDrawable等)。Request - 加载请求,可以是网络请求或者其他任何下载图片的请求,也是Glide中的一个类
    Model:数据源的提供者,如Url,文件路径等,可以从model中获取InputStream
    Signature:签名,可以唯一地标识一个对象
    recycle():Glide中Resource类有此方法,表示该资源不被引用,可以放入池中(此时并没有释放空间)。Android中Bitmap也有此方法,表示释放Bitmap占用的内存

    2.12 MybatisMyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。[9]MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    3 需求分析3.1 系统概述本系统主要的用户为广大的Android手机用户提供音乐播放,歌曲下载,歌迷互动三大模块功能。
    3.2 系统分析3.2.1 系统需求分析随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活节奏的加快,生活压力越来越大,碎片化的时间越来越多,那么一个可以在碎片化的时间内调节自己心情的产品,无疑将拥有一个巨大的市场,而基于Android系统的手机音乐播放器就能很好地满足这个需求。
    通过调查分析,本系统的用户为广大的Android手机用户,用户可以通过本系统实现音乐播放的基本功能包括播放,暂停,上一首,下一首等。用户还可以分享歌曲,对歌曲进行评论或者点赞别人的评论,下载歌曲,具体需求如下:

    音乐播放,音乐播放包括了音乐播放的基本功能:开始,暂停,上一首,下一首,同时还可以滑动唱片来实现切换上下首,通过拖动进度条来切换到音乐的不同位置
    歌曲下载,首先用户需要搜索所需要的歌曲,然后点击下载。同时用户可以搜索不同平台的歌曲,这样就可以不会因为不同版权而听不到音乐
    乐迷互动,用户可以通过在播放页面的评论按钮评论歌曲,进入评论界面后还可以对自己喜欢的评论进行点赞或者评论,同时歌迷也可以通过分享到第三方平台一起享受音乐带来的乐趣

    3.2.2 系统可行性分析
    经济可行性:本系统作为一个毕业设计,并不需要任何的开发经费,而且本人也可以通过这次机会提升本人的Android开发技术和后台技术。并且本系统由于其简介的界面设计和丰富的资源平台将在这个巨大的市场有很大的发展空间
    技术可行性: 为了保证系统开发成功,必须采用RUP的系统开发方法。并且采取主流的MVP设计框架,运用成熟的技术比如Rxjava和Retrofit,还有Glide等。后台也采用了目前主流的MySQL作为数据库,数据安全得到了很好的保障,Tomcat 8.5作为服务器,使用Spring-Boot简易开发

    就本人而言,本人有系统地学习Android开发基础同时也有不错的Android开发技术,和Retrofit和Rxjava的开发经验,也有Spring-Boot的开发技术,所以技术可行性上是没有问题的。
    3.2.3 系统用力模型分析3.2.3.1 包图
    3.2.3.2 用例图及其用例简介用例图定义:由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。
    音乐播放用例:本用例可以通过通过播放器进行对音乐播放的基本操作,包括上一首,下一首,播放,暂停,还有拖动到某一时间点的功能。

    歌曲下载,首先用户需要搜索所需要的歌曲,然后点击下载。同时用户可以搜索不同平台的歌曲,这样就可以不会因为不同版权而听不到音乐。

    乐迷互动,用户可以通过在播放页面的评论按钮评论歌曲,进入评论界面后还可以对自己喜欢的评论进行点赞或者评论,同时歌迷也可以通过分享到第三方平台一起享受音乐带来的乐趣。

    3.3 系统用例分析本文将采用活动图来阐述系统的业务用例实现的工作流程,通过业务工作流程说明业务为向所服务的业务主角提供其所需的价值而必须完成的工作。业务用例由一系列活动组成,它们共同为业务主角生成某些工件。工作流程通常包括一个基本工作流程和一个或多个备选工作流程。工作流程的结构使用活动图来进行说明。
    3.3.1 用例阐述3.3.1.1 播放音乐
    基本流

    用户启动应用并进入播放界面后播放界面有播放,上一首,下一首三个按钮,用户点击播放按钮系统监听到用户点击播放按钮的回调后,系统查找播放列表,判断播列表是否有歌曲。系统找到歌曲,系统将歌曲信息发送给MediaPalyer,MediaPlayer根据歌曲信息找到播放源进行播放
    备选流

    系统在监听到用户点击播放按钮的回调后,系统查找播放列表,判断播放列表是否有歌曲。系统没有找到歌曲,系统提示用户播放列表为空

    3.3.1.2 暂停播放
    基本流

    用户处于播放界面,用户点击暂停按钮系统监听到用户点击暂停按钮的回调后,系统判断现在是否处于播放状态,系统处于播放状态。系统通知MediaPlayer暂停播放音乐,MediaPalyer暂停播放音乐
    备选流

    系统监听到用户点击暂停按钮的回调后,系统判断现在是否处于播放状态,系统并没有处于播放状态。提示用户现在是暂停状态

    3.3.1.3 播放上一首
    基本流

    用户启动应用并进入播放界面后播放界面有播放,上一首,下一首三个按钮,用户点击上一首按钮系统监听到用户点击播放按钮的回调后,系统查找播放列表,判断播列表是否有上一首歌曲。系统找到歌曲,系统将歌曲信息发送给MediaPalyer,MediaPlayer根据歌曲信息找到播放源进行播放
    备选流

    系统在监听到用户点击播放按钮的回调后,系统查找播放列表,判断播放列表是否有上一首歌曲。系统没有找到歌曲,系统提示用户播放列表没有上一首歌曲

    3.3.1.4 播放下一首
    基本流

    用户启动应用并进入播放界面后播放界面有播放,上一首,下一首三个按钮,用户点击下一首按钮系统监听到用户点击播放按钮的回调后,系统查找播放列表,判断播列表是否有下一首歌曲。系统找到歌曲,系统将歌曲信息发送给MediaPalyer,MediaPlayer根据歌曲信息找到播放源进行播放
    备选流

    系统在监听到用户点击播放按钮的回调后,系统查找播放列表,判断播放列表是否有下一首歌曲。系统没有找到歌曲,系统提示用户播放列表没有下一首歌曲

    3.3.1.5 歌曲下载
    基本流

    用户进入在线音乐并点击下载音乐系统弹出下载页面,并且下载音乐
    备选流

    假如网络错误,系统弹出错误界面

    3.3.1.6 评论歌曲
    基本流

    用户点击菜单的评论歌曲系统弹出输入框用户输入评论并点击提交,系统提交数据
    备选流

    假如网络错误,系统弹出错误界面。

    3.3.1.7 分享歌曲
    基本流

    用户点击分享按钮系统弹出分享途径选择,用户选择途径,系统根据选择分享到所选择的平台
    备选流

    假如网络错误,系统弹出错误界面

    3.4 领域涉及模型
    4 系统设计4.1 概念模型CDM:concept data model,即概念数据模型。简称概念模型,是面向数据库用户的实现世界的模型,主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据管理系统(Database Management System,简称DBMS)无关。概念数据模型必须换成逻辑数据模型,才能在DBMS中实现。其只描述信息的特征和强调语义,而不涉及信息在计算机中的表示,是现实世界到信息世界的第一层抽象,根据需求分析及系统设计综合考虑,本系统的概念模型如下:

    4.2 物理模型PDM(Physical Data Model)即物理数据模型,提供了系统初始设计所需要的基础元素,以及相关元素之间的关系;数据库的物理设计阶段必须在此基础上进行详细的后台设计,包括数据库的存储过程、操作、触发、视图和索引表等;本系统的物理如下图:

    4.3 数据库设计根据关系化得到的各个模式,创建音乐播放器系统的各数据表如下。
    4.3.1 歌曲表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    ID
    songid
    bigint


    X


    唱片ID
    albumid
    bigint





    歌手ID
    singer_id
    bigint





    歌曲名
    songname
    varchar(32)
    32




    歌手名
    singername
    varchar(20)
    20




    播放链接
    m4a
    varchar(255)
    255




    下载地址
    downUrl
    varchar(255)
    255




    唱片小图
    albumpic_small
    varchar(255)
    255




    唱片大图
    albumpic_big
    varchar(255)
    255




    唱片名
    albumname
    varchar(32)
    32




    4.3.2 唱片表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    唱片ID
    albumid
    bigint


    X


    唱片名
    albumname
    varchar(20)
    20




    唱片大图
    albumpic_big
    varchar(255)
    255




    唱片小图
    albumpic_small
    varchar(255)
    255




    4.3.3 歌手表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    歌手ID
    singer_id
    bigint


    X


    歌手名
    singername
    varchar(20)
    20




    4.3.4 评论表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    评论ID
    comment_id
    bigint


    X


    用户ID
    user_id
    bigint





    ID
    songid
    bigint





    评论内容
    content
    varchar(517)
    517




    时间
    data
    date





    对应的评论的id
    to_comment_id
    bigint





    用户表


    字段名
    字段码
    数据类型
    数据长度
    备注
    主键




    用户ID
    user_id
    bigint


    X


    用户名
    user_name
    varchar(255)
    255




    4.4 目录结构设计4.4.1 RUP面向对象设计模式的可视化建模用例视图

    4.4.2 客户端工程文件目录图
    目录文件说明:

    Adapter:存放各种适配器
    Aidl:存放在不同进程间传递的Entity
    Application:存放Android的Application
    Contract:存放一下比如URl或者常量
    MVP

    base:存放BaseModle,BasePresent的接口和抽象类其他基于MVP模式的模块
    Interfac:存放一下监听接口
    Service:存放Android的Service
    Tool:存放一下工具类
    Weight:存放一下自定义的控件

    4.4.3 服务端工程文件目录图
    目录文件解释:

    controller:存放控制类,即各个请求相应的逻辑处理
    bean:存放数据实体类Entity
    util:存放开发的公共资源处理类和工具类
    repository:DAO层接口
    service:service层
    annotation:注解处理器
    map:Mybatis的Mapper
    Modle:Modle层
    tool:工具类

    5 系统详细设计5.1 系统时序图5.1.1 播放音乐
    5.2 系统界面及其核心代码5.2.1 播放器界面的实现
    播放界面的xml代码:

    播放控制代码:(播放器和界面分开为两个进程,界面使用AIDL远程控制播放器的进程)


    AIDL接口(通过在AIDL接口定义一个注册监听器的方法使得界面的进程可以接收到播放界面进程的返回参数,然后可以根据参数判断播放进程的状态):


    关键代码如下(歌词主要是通过一个Recycleview实现,通过解析lrc文件获取歌词和不同的时间段中间的歌词位置):


    播放列表主要使用Popwindwos实现,弹出播放列表的时候播放背景变灰,然后监控背景的点击事件,当被点击时播放列表收回,同时还为弹出很收回设置动画,用于获得更好的用户体验。
    关键代码:


    Android使用sharePrefrence来保存本地音乐列表,要获取本地音乐只需要扫描本地的sharePrefrence获取本地的音乐,为了保证主线程不被阻塞,使用AsynTask进行扫描数据,在OnpostExcute刷新界面数据。
    关键代码:



    分享歌曲是通过Android的系统分享途径分享音乐。
    关键代码:

    同时还可以删除音乐,通过删除音乐文件然后重新扫描本地歌曲的方法来删除歌曲;设置为铃声,通过Android系统提供的方法进行设置,这个需要Android系统的写入权限来实现。



    本系统是使用百度音乐API来获取音乐榜单,主要分类有:百度热歌榜,百度新歌榜,华语金曲榜,欧美金曲榜,情歌对唱榜,网络歌曲榜,经典老歌榜,摇滚榜,KTV热歌榜,Billboard,Hito中文版,叱咤歌曲榜等十二个榜单,适应更多用户的需求。列表的封面使用榜单第一名的歌曲,榜单显示全三场的歌曲的名字和歌手。
    关键代码:


    榜单详情使用Google原生的MaterialDesign风格,头部是可折叠的ToolBar,下面是一个RecycleView。
    界面详情:


    分享的实现很本地歌曲的分享是一样的,都是通过Android系统分享的途径来进行分享歌曲,同时也可以支持很多平台的分享,包括当前最流行的QQ和微信。
    关键代码:


    下载歌曲时会判断当前的网络状态,假如时使用移动网络那么会提醒是否要继续下载。
    代码实现:


    下载歌曲时会在通知栏显示下载内容和进度,这是调用系统的DownloadManger实现。
    关键代码:


    当DownloadManger下载完成后会有一个回调,可以通过回调来刷新本地歌曲的列表。
    关键代码:


    Android端可以通过播放界面的菜单进行评论歌曲,当点击发送时会向服务器发送该歌曲的ID和评论内容还有当点的登陆的user,所以要使用该功能必须要登陆以后,代码中的Contract.TOKEN是当用户登陆之后服务器返回的一串token值。
    关键代码:


    用户可以点击评论然后输入内容对已有的评论进行评论。

    在主菜单界面有天气的功能,这个是继承了高德地图API的定位服务和天气服务,首先先定位用户的经纬度,然后将经纬度发送给高德地图服务后台来获取当前的天气状况。
    关键代码:




    这是登陆和注册页面,登陆和注册页面可以相互切换,登陆只需要用户名和密码,点击登录后,Android端会向后台发送登陆验证,假如验证成功,就会向Android端返回一串TOKEN值,当使用到必须要登陆才能使用的服务比如评论歌曲时,Android端会给服务器的请求Http的header里面添加TOKEN值,服务器通过这串TOKEN值解析出用户,然后进行其他相关操作,同时Android端有一个记住密码的功能,只要用户有登陆成功,那么Android端就会在SharePrefernce报错密码和用户名。下次再次点击登录的时候就可以直接显示用户名和密码,方便用户操作。
    关键代码:


    搜索歌曲也是使用百度音乐API接口,可以根据歌手名称,歌曲名等相关联的进行搜索。当点击搜索结果时就可以听该歌曲。
    关键代码:

    6 系统测试6.1 软件测试常识及主要技术软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 从软件开发者的角度出发,希望表明软件产品不存在错误和缺陷,验证软件能正确地实现用户需用户求,确立人们对软件质量的信心。从用户角度出发,希望通过软件测试暴露软件隐藏的错误和缺陷,从而考虑是否接受该产品。一般来说软件测试应由独立的产品评测中心负责,严格按照软件测试流程,制定测试计划、测试方案、测试规范,实施测试,对测试记录进行分析,并根据回归测试情况撰写测试报告。测试是为了证明程序有错,而不能保证程序没有错误。
    测试工具介绍:
    Monkey是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,手势输入,触摸屏输入,如按键输入等,它实现对正在开发的应用程序进行压力测试,也有日志输出。实际上该工具只能做程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义,所以有很大的局限性。
    MonkeyRunner类似于Monkey,它们都是Android SDK原有的。严格意义上来说MonkeyRunner其实是一个Api工具包,比Monkey强大,可以编写测试脚本来自定义数据、事件。但是MonkeyRunner的脚本是用Python来写,这样无疑会加重测试人员的负担。
    Instrumentation是早期Google提供的Android自动化测试工具类,相对于Junit Instrumentation允许你对应用程序做更为复杂的测试,甚至是框架层面的。通过Instrumentation你可以模拟按键按下、抬起、屏幕点击、滚动等事件而JUint几乎都是进行简单的方法测试。Instrumentation是通过将主程序和测试程序运行在同一个进程来实现这些功能,你可以把Instrumentation看成一个类似Activity或者Service并且不带界面的组件,在程序运行期间监控你的主程序。缺点是对测试人员来说编写代码能力要求较高,需要对Android相关知识有一定了解,还需要配置AndroidManifest.xml文件,但是它存在一个缺点就是不可以同一套测试方法只能在一个APP上使用。
    主要测试技术和方法介绍:
    黑盒测试,软件测试的主要方法之一,也可以称为功能测试、数据驱动测试或基于规格说明的测试。测试者不了解程序的内部情况,不需具备应用程序的代码、内部结构和编程语言的专门知识。在黑盒测试中,被测对象的内部结构,运作情况对测试人员是不可见的,测试人员对测试产品的验证主要是根据其规格,验证其与规格一致性。就像对一台自动售货机,为了验证其能否自动售出货物,你可以指定需要购买的物品,塞入钱币,然后观测售货机能否输出正确的货物并找出正确的零钱。在这个过程中你不需要关注自动售货机是如何判定钱币数额,如何选择货物,如何找出零钱等内部操作。这是白盒测试关注的范围,黑盒测试关注的是结果。
    此测试方法可适合大部分的软件测试,如集成测试(integration testing)以及系统测试(system testing)。
    白盒测试(white-box testing)又称透明盒测试(glass box testing)、结构测试(structural testing)等,软件测试的主要方法之一,也称结构测试、逻辑驱动测试或基于程序本身的测试。白盒测试(white-box testing)分为逻辑驱动测试:(语句覆盖,判定覆盖(分支覆盖),条件覆盖,判定/条件覆盖,条件组合覆盖)和基本路径测试。
    白盒测试可以应用于单元测试(unit testing)、集成测试(integration testing)和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。尽管这种测试的方法可以发现许多的错误或问题,它可能无法检测未使用部分的规范。
    6.2 测试用例及结果6.2.1 播放音乐


    Step Name
    Description
    Expected Result




    Step 1
    打开APP
    系统进入音乐播放界面


    Step 2
    点击播放音乐按钮
    系统开始播放音乐


    Step3
    点击播放上一首
    系统播放上一首音乐


    Step4
    点击播放下一首
    系统播放下一首音乐


    Step4
    点击暂停
    系统暂停播放音乐


    Stpe5
    点击歌词
    系统切换到歌词界面


    Step6
    拖动进度条
    系统播放对一个进度的音乐



    6.2.2 评论歌曲


    Step Name
    Description
    Expected Result




    Step 1
    打开APP
    系统进入音乐播放界面


    Step 2
    点击右边菜单栏
    系统展开菜单


    Step 3
    点击登录
    系统进入登录界面


    Step 4
    输入用户名和密码点击登录
    系统显示登录成功


    Step 5
    返回点击唱片图片
    系统进入播放界面


    Step 6
    点击菜单按钮选择评论
    系统进入评论界面


    Step 7
    在输入框输入评论内容发送
    系统显示新增的评论



    6.2.3 下载歌曲


    Step Name
    Description
    Expected Result




    Step 1
    打开APP
    系统进入音乐播放界面


    Step 2
    点击在线音乐
    系统进入在线音乐节目


    Step 3
    点击新歌榜
    系统进入新歌榜单


    Step 4
    点击第一首音乐点击菜单
    系统显示菜单界面


    Step 5
    点击下载音乐
    系统添加下载任务



    7 总结与展望7.1 总结本系统是基于Android的音乐播放器的设计与实现,本系统实现音乐播放器的基本功能,同时也拥有不错的界面设计。论文首先从现在Android音乐播放器的现状说起,分析音乐播放器的需求,然后对整个系统进行分析和设计,接下来就是代码实现,最后再用测试样本进行测试,以验证其可行性。
    尽管本系统实现了音乐播放器的基本功能但是还是有很多不足之处,比如说本系统只集成百度音乐API而不是各个平台的音乐API,因为版权关系,各家音乐播放器拥有不同的版权,导致很多用户需要下载多个音乐播放器才能满足日常需求,加入可以加入各个平台的音乐API就可以为用户提供更好的服务。其次,本系统缺少比较新颖的功能比如说听歌识曲和歌单等,新颖的功能无疑可以更加吸引用户。后台服务只是本地服务导致评论歌曲的功能在不同局域网的手机无法连接。
    7.2 展望正如上面所说本系统还存在各种不足之处,对此对如何改进各种不足做出展望:

    集成更多平台的音乐API
    利用第三方平台开发听过识曲等新颖功能
    买入阿里云服务器,上线服务

    参考文献[1] Android 开发者官网https://developer.android.com/index.html
    [2] Retrofit官网https://square.github.io/retrofit/
    [3] RxJava官网https://github.com/ReactiveX/RxJava
    [4] SpringBoot官网https://projects.spring.io/spring-boot/
    [5] MyBatis官网 http://www.mybatis.org/mybatis-3/zh/index.html
    [6] Mysql 官网 https://www.mysql.com/
    [7] Glide 官网 https://github.com/bumptech/glide
    [8] 《第一行代码Android》郭霖 人民邮电出版社2016.12
    [9] 《Android开发艺术探索》任玉刚电子工业出版社 2015.9
    [10] 《轻量级Java Web整合开发入门》李占波 清华大学出版社 2015.9.1
    [11] 《Spring MVC实战》张龙、覃璐、李哲、丁涛译电子工业出版社 2017.5.1
    [12] 《MyBatis技术内幕》徐郡明 电子工业出版社 2017.6.1
    [13] 《Android源码设计模式解析与实战》何红辉、关爱民 人民邮电出版社 2017.7
    [14] 《Android开发模式和最佳实战》菲尔 达特森 电子工业出版社 2017.2.1
    [15] 《软件工程》萨默维尔 机械工业出版社 2011.5.1
    8 评论 295 下载 2020-03-30 08:31:42 下载需要15点积分
  • 基于JSP和MYSQL数据库实现的知识产权管理系统

    1 前言1.1 主要功能默认系统中,有三种角色,分别为:系统管理员、执法管理员、机构用户。

    系统管理员功能:系统管理、角色管理、权限管理、用户管理
    执法管理员功能:执法部门管理、执法人员管理、服务机构管理、网络检测、惩戒信息、邮箱回复、新闻政策
    机构用户功能:邮箱提问、浏览新闻

    1.2 使用方法
    2 设计思路2.1 数据库设计2.1.1 E-R图


    2.1.2 建表明细根据 E-R图,设计出符合 BC范式的数据库,一共建立 13张表。如下:

    系统表 system:主键 sysID
    菜单表:主键 menuID
    角色表 role:主键 roleID、外键 roleSystem->system(sysID)
    权限表 authority:主键(roleID,menuID)、外键 roleID->role(roleID) menuID->menu(menuID)
    用户表 usr:主键 userID、外键 userRole->role(roleID)
    字典表 dictionary:主键 dicID
    执法部门表 department:主键 departID
    执法人员表 enforceman:主键 enManID、外键 enManDepart->department(departID)
    服务机构表 organization:主键:organID (10)网络检测表 netmonitor:主键:monitorID、外键:organization->organization(organID)、enforceMan->enforceman(enManID)
    惩戒信息表 punishinfo:主键:punishID、外键:organization->organization(organID)、enforceMan->enforceman(enManID)
    邮箱回复表 mailrequire:主键:requireID
    新闻政策表 newspolicy:主键:newsID

    2.1.3 书写脚本用 sql语句书写建数据库、建表、插入数据的脚本。
    2.2 主要模块2.2.1 登录模块用户登录后,将用户的信息和所属角色已授权的菜单项查询出来,放在 session中供页面中使用。
    2.2.2 系统管理员系统管理
    点击系统管理,对所有系统进行管理。包括新增系统,修改系统,删除系统等。
    角色管理
    点击角色管理,对可登录服务机构监管系统的所有角色进行管理。包括新增角色, 修改角色,删除角色等。
    新增角色时,新增字段包括角色名,所属系统和备注。其中所属系统通过下拉框选填。 指派系统时,选定用户后可对该角色指定所属系统。
    用户管理
    点击用户管理,对可登录服务机构监管系统的所有用户进行管理。包括新增用户, 修改用户信息,修改用户登录密码,指派角色和删除等。
    新增用户时, 新增字段包括用户代码,用户名,手机号,电子邮件,密码,服务机构类型,地区,用户类型和备注。其中服务机构类型,地区和用户类型通过下拉框选填。
    修改用户时, 除用户代码外都可进行修改。
    指派角色时,选定用户后可对该用户指派角色。
    权限管理
    可指定每个角色登录系统后的菜单选项。
    2.2.3 执法管理员执法部门管理
    点击执法部门管理,对所有执法部门进行管理。包括新增执法部门,修改执法部门,删除执法部门等。
    执法人员管理
    点击执法人员管理,对所有的执法人员信息进行管理。包括新增执法人员,修改执法人员,删除执法人员等。 指派执法部门时,选定用户后可对该执法人员指定所属执法部门。
    服务机构管理
    点击服务机构管理,对所有服务机构进行管理。包括新增服务机构,修改服务机构,删除服务机构等。
    网络检测
    网络监测可查询和发布监测报告,包含一个报告查询的菜单。点击报告查询,显示区域列出已发布的网络监测报告。包括机构名称,检查时间,检查人员,检查结果等信息。
    点击发布,可发布服务机构的网络监测情况。点击在线发布后,可选择机构,是否合格,并可添加检查人员和备注。点击确认按钮,即可发送监测报告至服务机构。
    监测报告可以通过机构名称,检查人,是否合格及日期等条件进行过滤,查看符合条件的监测报告。
    惩戒信息
    惩戒信息菜单包括在线发布和历史管理两个二级菜单。
    点击在线发布菜单,选择江苏省的 13 个市,点击市名,显示该市所有的服务机构, 可选择需要接收网络监测报告的服务机构。选择完成后填写对该机构的惩戒信息详情, 最后点击发布按钮,进行发布。
    历史管理菜单中可以查看已发布的惩戒信息。
    邮箱回复
    点击邮箱回复菜单。点击信箱回复,右侧显示区域显示待回复的问题。逐条显示, 点击每个问题,可查看问题详细,并可回复。
    新闻政策
    点击新闻政策菜单,显示区域显示已发布的新闻政策,包括新闻标题,新闻类型,文件类型,新闻状态等信息。同时显示区域上方可对新闻政策信息进行过滤查询,并有发布新闻,启用或禁用某条新闻,修改新闻和预览新闻等按钮。
    新闻查询通过新闻标题对新闻进行过滤,筛选出符合条件的新闻。
    点击发布新闻,可在线填写新闻标题,选择文件类型和新闻分类,并可在线编辑要发布的新闻或政策的内容。
    点击启用/禁用,可改变单条新闻的状态,启用或禁用该条新闻。
    选中新闻后,点击修改新闻,可对新闻标题,新闻类型和新闻内容进行更改。
    2.2.4 机构用户邮箱提问
    点击邮箱提问菜单。可以向执法管理员提问,并可以浏览历史提问信息。
    新闻浏览
    点击新闻浏览菜单,并可以浏览历史新闻政策的信息。
    2.3 工作原理
    系统分为四层:实体层(vo)、数据访问层(dao)、控制层(servlet)、显示层(jsp)
    实体层:实现对数据对象的封装,将每个实体作为整体进行封装,在上层调用时,均使用实体进行传参
    数据访问层:实现对数据库的访问,一切对数据库的操作,均在此层实现
    控制层:用 servlet 进行实现,每个工作页面 jsp 均有一个 servlet 对其进行控制,在此层调用 dao层中的方法,完成对数据库的操作,从而为 jsp层提供必要的数据和操作控制
    显示层:用 jsp进行实现,根据 servlet提供的数据进行显示,同时接受客户端的请求,返回给 servlet 做出反应

    3 模块详细设计3.1 数据访问层详细数据访问层以一个类 BaseDao作为父类,在 BaseDao中,完成对数据库连接相关 的配置的封装,使继承此类的子类只需要考虑 sql语句和填充项即可完成对数据库的操作,主要代码如下:
    重要参数
    private static final String DRIVER="com.mysql.jdbc.Driver"; private static final String URL="jdbc:mysql://localhost:3306/agencydb"; private static final String UNAME="root"; private static final String UPWD="baihaoran960524"; protected Connection conn=null; protected PreparedStatement pstmt=null;
    加载驱动
    private void getConn(){ try { conn=DriverManager.getConnection(URL, UNAME, UPWD); } catch (SQLException e) { JOptionPane.showMessageDialog(null, "数据库连接失败!"); e.printStackTrace(); } }
    关闭数据库连接
    public void closeAll(){ if(null!=pstmt){ try { pstmt.close(); } catch (SQLException e) { JOptionPane.showMessageDialog(null, "数据库预编译 SQL关闭失败!"); e.printStackTrace(); } } if(null!=conn){ try { conn.close(); } catch (SQLException e) { JOptionPane.showMessageDialog(null, "数据库连接关闭失败!"); e.printStackTrace(); } } }
    查询数据库操作
    public ResultSet excuteQuery(String sql,Object[] params) throws SQLException{ this.getConn(); ResultSet rs=null; pstmt=conn.prepareStatement(sql); if(params!=null){ for(int i=0;i<params.length;i++){ pstmt.setObject(i+1, params[i]); } } rs=pstmt.executeQuery(); return rs; }
    更新数据库操作
    public int excuteUpdate(String sql,Object[] params) throws SQLException{ int count=0; this.getConn(); pstmt=conn.prepareStatement(sql); if(params!=null){ for(int i=0;i<params.length;i++){ pstmt.setObject(i+1, params[i]); } } count=pstmt.executeUpdate(); this.closeAll(); return count; }
    3.2 登录模块登陆模块主要原理如下:

    客户端在 login.jsp页面中输入用户名 userName和密码 password,点击登录后跳转到 servlet层的 loginSkip进行处理操作
    loginSkip 中,获取 userName 和 password 后,调用 dao层中的 userDao 进行查询, 将查询的数据封装在 vo层中的 User类的 user对象中,在根据的 user的所属角色调用 dao层中的 authorDao 查询此角色可以操作的菜单项。每个菜单项所对应的调用路径已经保存在 WEB-INF文件夹下的 menuInfo.xml中,此时,加载此文件,根据查询的菜单项查询相关的路径,保存在 HashMap类的 menus中。此刻,将 user和 menus保存在 session对象中,然后跳转到主界面 mainWorkPage.jsp
    在 mainWorkPage中完成对 user信息和 menus菜单项连接的布置工作,完成登陆模块。 登陆界面 login.jsp如下:


    主界面 mainWorkPage.jsp如下:

    3.3 系统管理模块系统管理模块主要原理如下:

    点击系统管理菜单项,跳转到 servlet中的 systemWorkPageSkip中
    在 systemWorkPageSkip 中,调用 dao 层方法,查询相关数据,保存在 session 中, 并跳转到 systemWorkPage.jsp中进行显示
    在 systemWorkPage.jsp中,点击刷新/插入/修改/删除操作时,利用表单跳转到 systemWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示

    系统管理界面 systemWorkPage.jsp如下:

    3.4 角色管理模块角色管理模块主要原理如下:

    点击角色管理菜单项,跳转到 servlet中的 roleWorkPageSkip中
    在 roleWorkPageSkip中,调用 dao层方法,查询相关数据,保存在 session中, 并跳转到 roleWorkPage.jsp中进行显示
    在 roleWorkPage.jsp中,点击刷新/插入/修改/删除操作时,利用表单跳转到roleWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示

    角色管理界面 roleWorkPage.jsp如下:

    3.5 权限管理模块权限管理模块主要原理如下:

    点击权限管理菜单项,跳转到 servlet中的 authorWorkPageSkip中
    在 authorWorkPageSkip 中,调用 dao 层方法,查询相关数据,保存在 session 中, 并跳转到 authorWorkPage.jsp中进行显示
    在 authorWorkPage.jsp中,点击刷新/插入/修改/删除操作时,利用表单跳转到authorWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示

    权限管理界面 authorWorkPage.jsp如下:

    3.6 用户管理模块用户管理模块主要原理如下:

    点击用户管理菜单项,跳转到 servlet中的 userWorkPageSkip中
    在 userWorkPageSkip中,调用 dao层方法,查询相关数据,保存在 session中, 并跳转到 userWorkPage.jsp中进行显示
    在 userWorkPage.jsp中,点击刷新/插入/修改/删除操作时,利用表单跳转到 userWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示

    用户管理界面 userWorkPage.jsp如下:

    3.7 执法部门管理模块执法部门管理模块主要原理如下:

    点击执法部门管理菜单项,跳转到 servlet中的 departWorkPageSkip中
    在 departWorkPageSkip 中,调用 dao 层方法,查询相关数据,保存在 session 中, 并跳转到 departWorkPage.jsp中进行显示
    在 departWorkPage.jsp中,点击刷新/插入/修改/删除操作时,利用表单跳转到 departWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示

    执法部门管理 departWorkPage.jsp如下:

    3.8 执法人员管理执法人员管理模块主要原理如下:

    点击执法人员管理菜单项,跳转到 servlet中的 enManWorkPageSkip中
    在 enManWorkPageSkip 中,调用 dao 层方法,查询相关数据,保存在 session 中, 并跳转到 enManWorkPage.jsp中进行显示
    在 enManWorkPage.jsp中,点击刷新/插入/修改/删除操作时,利用表单跳转到 enManWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示

    执法人员管理界面 enManWorkPage.jsp如下:

    3.9 服务机构管理服务机构管理模块主要原理如下:

    点击服务机构管理菜单项,跳转到 servlet中的 organWorkPageSkip中
    在 organWorkPageSkip 中,调用 dao 层方法,查询相关数据,保存在 session 中, 并跳转到 organWorkPage.jsp中进行显示
    在 organWorkPage.jsp中,点击刷新/插入/修改/删除操作时,利用表单跳转到 organWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示

    服务机构管理界面 organWorkPage.jsp如下:

    3.10 网络监测网络监测模块主要原理如下:

    点击网络监测菜单项,跳转到 servlet中的 monitorWorkPageSkip中
    在 monitorWorkPageSkip中,调用 dao层方法,查询相关数据,保存在 session 中,并跳转到 monitorWorkPage.jsp中进行显示
    在 monitorWorkPage.jsp中,点击刷新/发布检测/筛选操作时,利用表单跳转到 monitorWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示
    可以根据下拉列表选择筛选类型,有按日期、机构、人员和结果筛选

    网络检测界面 monitorWorkPage.jsp如下:

    3.11 惩戒信息惩戒信息模块主要原理如下:

    点击惩戒信息菜单项,跳转到 servlet中的 punishWorkPageSkip中
    在 punishWorkPageSkip 中,调用 dao 层方法,查询相关数据,保存在 session 中, 并跳转到 punishWorkPage.jsp中进行显示
    在 punishWorkPage.jsp中,点击刷新/发布惩戒信息/筛选操作时,利用表单跳转 到 punishWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示
    可以根据下拉列表选择筛选类型,有按日期、机构、人员和结果筛选

    惩戒信息界面 punishWorkPage.jsp如下:

    3.12 邮箱回复邮箱回复模块主要原理如下:

    点击邮箱回复菜单项,跳转到 servlet中的 requireWorkPageSkip中
    在 requireWorkPageSkip 中,调用 dao层方法,查询相关数据,保存在 session 中, 并跳转到 requireWorkPage.jsp中进行显示
    在 requireWorkPage.jsp中,点击刷新/回复提问操作时,利用表单跳转到 requireWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示

    邮箱回复界面 requireWorkPage.jsp如下:

    3.13 新闻政策新闻政策模块主要原理如下:

    点击新闻政策菜单项,跳转到 servlet中的 newsWorkPageSkip中
    在 newsWorkPageSkip 中,调用 dao 层方法,查询相关数据,保存在 session 中, 并跳转到 newsWorkPage.jsp中进行显示
    在 newsWorkPage.jsp中,点击刷新/发布新闻/修改/启用/禁用/筛选操作时,利用 表单跳转到 newsWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示
    可以根据新闻标题进行筛选

    新闻政策界面 newsWorkPage.jsp如下:

    3.14 邮箱提问邮箱提问模块主要原理如下:

    点击邮箱提问菜单项,跳转到 servlet中的 mailWorkPageSkip中
    在 mailWorkPageSkip中,调用 dao层方法,查询相关数据,保存在 session中, 并跳转到 mailWorkPage.jsp中进行显示
    在 mailWorkPage.jsp 中,点击刷新/发起提问操作时,利用表单跳转到 mailWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示

    邮箱提问界面 mailWorkPage.jsp如下:

    3.15 新闻浏览新闻浏览管理模块主要原理如下:

    点击新闻浏览菜单项,跳转到 servlet中的 browserWorkPageSkip中
    在 browserWorkPageSkip中,调用 dao层方法,查询相关数据,保存在 session 中,并跳转到 browserWorkPage.jsp中进行显示
    在 browserWorkPage.jsp中,点击筛选操作时,利用表单跳转到 browserWorkPageSkip,在其中进行处理,在跳回 jsp中进行显示
    可以根据新闻标题进行筛选

    新闻浏览界面 browserWorkPage.jsp如下:

    3.16 界面中按钮操作详细界面初始只显示数据库中的查询的数据,并显示对数据库进行增/删/改所需要的表单。是利用了 DIV图层的 display属性,在初始时,增/删/改的表单隐藏,display属性为 none,单击按钮之后,调用 js文件的函数,将图层的 display属性设置为 block,相应的表单也就显示了出来,例如用户管理中单击“添加用户”按钮,相应的表单也显示了出来,如下:

    3.17 界面设计详细3.17.1 数据显示设计在数据库中一些表的外键值均为对应的 ID,而不是 Name,而页面显示的时候, 会将相关表的数据查询出,不见 ID 值替换为 Name值,使界面更加友好。
    一些表有外键约束时,添加或修改选项中的值会采用下拉列表的形式,从而保证数据的一致性。
    应用字典表,一些类型的对象如省份/服务机构类型/文件类型,在数据库中仅存有 Value值的数字,而到前台页面显示时,会查询字典表,显示其对应的 Name值。
    3.17.2 CSS+DIV设计登陆界面

    主界面

    浮动框架页面

    4 模块测试软件系统的测试,分为两个阶段:单元测试、集成测试、验收测试、回归测试。

    单元测试:在软件编码过程中,每完成一个模块时,便会对该模块进行测试,设计驱动程序 和桩程序,发现错误即使解决,保证接下来的工作正常的进行
    集成测试:当所有的单元已经编码完成,则进行集成测试,采用的模式为“渐增式集成”, 对每次集成的接口问题进行测试,发现错误并解决,保证模块间的通讯没有错误
    验收测试:系统集成完毕,根据需求说明,对功能进行验收测试,保证每项功能的正常运行, 发现错误,则进行修改
    回归测试:但发现错误进行修改的时候,修改完成时,进行测试,在保证原先功能运行正常的情况下,检查测试新的模块的正确与否

    5 实验结论此次课程设计,使我更加扎实的掌握了有关数据库设计和 Java Web开发方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
    从需求分析,到数据库的设计,再到编码实现,在整个过程中与同学互相交流和查询资料,不断解决问题,完善自己的知识掌握。
    3 评论 19 下载 2018-11-06 16:13:18 下载需要11点积分
  • 基于java和Sql Server数据库的停车场管理系统

    一、实验内容:实现停车场管理系统,应用于车辆的出、入管理。
    二、功能要求:包括车辆进出管理与系统管理等功能模块,可根据车辆停放时间及收费标准自动收费。用户需要事先办理停车卡并充值,停车卡分优惠卡和普通卡两类。

    车场管理:车辆入场、车辆出场
    信息查询:某时间段的出入场信息,当前在场信息,车辆历史停车记录及收费信息
    信息维护:用户及停车卡信息维护、充值等
    系统管理:车位信息,计费标准等

    系统包含两类用户:管理员用户和普通用户。
    管理员可以使用系统所有功能,普通用户只能查询车辆历史记录、用户信息、停车卡充值,查询计费标准。
    三、实验环境:
    Windows XP
    JDK 1.6
    Eclipse
    SQL Server
    备注:

    在XP平台开发DK(JavaDevelopment Kit)是Sun Microsystems针对Java开发员的产品Eclipse进行前台和程序设计,开发图形用户界面和停车收费功能实施
    SQL建立数据库

    四、需求分析与设计:4.1 需求分析:本软件具有如下主要功能:

    本系统包括两类用户:管理员用户和普通用户。管理员可以使用系统所有功能,普通用户只能查询车辆历史记录、用户信息(只限于个人信息)、查询计费标准、查询当前在场信息、查询出入场信息、当前可用车位信息、口令修改。具体模块划分为如下模块:车场管理模块、信息查询模块、信息维护模块、系统管理模块。
    车场管理模块:(应该分为车辆入场和车辆出场两部分)

    车辆入场功能描述:车辆进入停车场时进行登记,记录入场时间并指定车位。只有具有停车卡的车辆才可进场,没有办理停车卡的车辆,应先办理车卡。如果没有相应车位,不能入场;如果卡中余额低于100元,应先充值后再入场。满足条件的车辆,为其指定车位并记录入场时间。车卡分两种类型普通型和优惠型。车辆出场功能描述:车辆开出停车场时进行登记,记录出场的时间并进行自动收费(从卡上扣除)。根据车辆进场时间,出场时间及收费标准自动计算车主应该缴纳的费用。如果停车时间包含不足一小时的时间,超过30分钟按一小时计算,不足三十分钟不计算。如果卡上余额足够则直接扣除;如果卡上余额不足,则应先充值后再扣除相应费用。
    信息查询模块功能描述:在这个模块里用户可以查询出入场信息、当前在场信息、用户个人信息、用户历史记录、收费标准以及当前可用车位信息
    查询出入场信息功能描述: 查询当前在场信息户可以在这里查询到两种车位的总量及当前可有的车位数量。
    查询用户个人信息功能描述:登录的管理员可以根据卡号和名字查询用户信息。登陆的普通用户只可以查到自己的信息。
    查询用户历史记录功能描述:用户可以输入卡号查询相应卡号的历史记录,包括车位号、开始停车时间、结束停车时间、停车总时间、相应收取的费用。
    收费标准功能描述:用户可以在这里查询不同种类的车位和不同卡的计费标准。
    当前在场信息功能描述:用户可以在这里查询到当前在场的车辆信息,包括卡号,车位号,开始停车时间。
    当前可用车位信息功能描述:在这里用户可以查询当前可用的车位的信息,包括车位号、车位类型。
    信息维护模块在这个模块里用户可以实现用户注册、用户修改及用户充值
    用户注册功能描述:在这里管理员可添加新的用户(普通用户)。
    用户修改管理员在这里可以修改用户。这里会以表的形式显示所有的用户信息,包括用户的停车卡信息维护,充值信息等。管理员点击相应的一行用户信息,这行信息会自动填充到表下的面板里,用户可以在面板里修改用户信息,面板下面有两个按钮,修改、删除,点击相应的按钮可以实现相应的功能。
    用户充值功能描述:用户可以再这里查到自己的余额,并且可以在这里完成充值。
    系统管理模块功能描述:在这个模块里可以修改相应的车位信息计费标准、注册管理员、更改用户口令以及查看系统声明信息。
    管理员注册功能描述:管理员可以在这里添加新的管理员。
    更改口令功能描述:用户可以在这里更该自己的密码。注:操作员只可以修改自己的密码。
    计费标准管理功能描述:管理员可以在这里不同车位类型、不同车卡类型的收费标准。
    关于功能描述:用户可以在这里看到系统声明。

    4.2 界面设计登陆界面

    管理员主界面

    普通用户主界面

    车辆入场界面

    车辆出场界面

    计费标准界面

    当场在场信息界面

    用户历史信息界面

    用户个人信息界面

    普通用户个人信息界面

    出入场信息界面

    当前可用车位信息界面

    用户注册界面

    用户修改界面

    用户充值界面

    管理员注册界面

    更改口令界面

    计费标准管理界面

    关于界面

    五、数据库设计5.1 数据库关系图
    5.2 数据表的结构设计


    用户表:users








    字段名称
    数据类型
    可空
    默认值
    说明


    cardid
    int
    不可

    主键,用户的停车卡号


    name
    Nvarchar(20)
    不可

    用户姓名


    password
    Nvarchar(20)


    用户密码


    cardtype
    Nvarchar(20)


    停车卡类型


    userstype
    Nvarchar(20)


    用户类型


    carid
    int


    用户车牌号


    tel
    int


    用户电话号码


    overage
    int


    用户余额






    车位信息表:sit_infor








    字段名称
    数据类型
    可空
    默认值
    说明


    stationid
    int
    不可

    主键,车位号


    stationtype
    Nvarchar(20)
    不可

    车位类型






    停车收费卡收费表:charger








    字段名称
    数据类型
    可空
    默认值
    说明


    cardtype
    Nvarchar(6)


    车卡类型


    stationtype
    Nvarchar(20)


    车位类型(车卡类型与车位类型一起作为主键)


    charge
    int


    价格






    停车表:park








    字段名称
    数据类型
    可空
    默认值
    说明


    cardid
    int


    车卡号(外键)


    stationid
    int


    车位号(外键)


    parkid
    int

    1,每次增加一
    停车号,主键


    startpark
    datetime


    停车开始时间


    endpark
    datetime


    停车结束时间


    fee
    int


    停车的收费


    sumpark
    int


    停车总时间



    六、关键技术介绍6.1 在其他类中得到当前登录用户对象 实现方法:在LoginFrame类中设置两个静态方法,在其他类中只需要引入LoginFrame类,然后调用他的静态方法即可。方法体如下:
    public static users getUser() { return user; } public static void setUser(users user) { LoginFrame.user = user; }
    6.2 实现用户类型不同,主界面不同的功能 可以定义静态方法disMenu().当用户是普通用户时,调用disMenu()方法即可。具体实现如下
    public void disMenu() { mnuPark.setEnabled(false); mnuSever.setEnabled(false); mnuManZhuCe.setEnabled(false); mnuManCharge.setEnabled(false); } if(user.getUserstype().equals("管理员")) { MdiFrame frame1 = new MdiFrame();//创建一个主窗体 frame1.setVisible(true);//设置其可见 LoginFrame.this.setVisible(false);//设置登录窗体为不显示 } else {//判断用户名是否为null MdiFrame frame = new MdiFrame();//创建一个主窗体 frame.disMenu(); frame.setVisible(true);//设置其可见 LoginFrame.this.setVisible(false);//设置登录窗体为不显示 }
    6.3 怎么得到系统时间 SimpleDateFormat myfmt=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String a4 = myfmt.format(new java.util.Date()).toString();
    6.4 怎么计算时间差值 try { java.util.Date now = myfmt.parse(a3);//a3是系统当前时间(即出场时间) java.util.Date date=myfmt.parse(a7);//a7是入场时间 int l=(int) (now.getTime()-date.getTime());//计算毫秒差值 day=l/(24*60*60*1000);//获取天数 hour=(l/(60*60*1000)-day*24);//获得小时 min=((l/(60*1000))-day*24*60-hour*60);//获得分钟 } catch (Exception e1) { JOptionPane.showMessageDialog(null,"消费计算错误"); } if(min < 30)//如果分钟小于30分钟 a8 = day*24+hour; else //如果分钟大于30分钟 a8 = day*24+hour+1;
    6.5 怎么让布局更优美 使用布局管理器; GridBagLayout,以更改密码界面为例:
    getContentPane().setLayout(new GridBagLayout()); setBounds(234, 129, 285, 223); final JLabel label_5 = new JLabel(); label_5.setText("登 录 名:"); final GridBagConstraints gridBagConstraints_11 = new GridBagConstraints(); gridBagConstraints_11.gridy = 2; gridBagConstraints_11.gridx = 0; getContentPane().add(label_5, gridBagConstraints_11);
    七、系统实现功能结构图
    57 评论 1608 下载 2018-11-19 09:32:08 下载需要13点积分
  • 基于Android Studio实现的新闻APP

    一、作业题目实现一个安卓新闻类App,最低支持安卓系统版本为5.1(minSdkVersion 为API 16 https://developer.android.com/guide/topics/manifest/uses-sdk-element.html )
    二、作业描述互联网科技的发展让新闻的传播从报纸、广播、电视等方式发展到了网页以及最近几年兴起的手机app客户端,人们获取新闻的方式变得异常容易。手机上的新闻app让大家随时随地掏出手机即可看天下事,手机新闻app不再是一个简简单单的新闻获取工具,许多app已经利用数据挖掘构建出了新闻推荐引擎,为用户提供个性化、更有价值的新闻,例如今日头条、天天快报等。
    现在让我们也来尝试一下做一个新闻app!本次大作业的任务就是实现一款新闻获取的工具类软件,其中新闻数据采用的是腾讯网的rss,同学们根据相关rss数据和作业要求利用课上所学的Java和android开发知识实现一个新闻客户端即可。
    三、接口描述本次大作业需要开发的系统结构如图1所示,实现了新闻内容的抓取和存储;客户端从服务器拉取新闻,是学生需要完成的部分,包括新闻频道获取、展示和管理,新闻列表的获取、展示以及刷新,新闻收藏、分享等。
    中文新闻所用的rss为:http://rss.qq.com/index.html ,需要简单了解rss相关知识。
    四、具体实现4.1 新闻列表4.1.1 UIAPP主界面布局xml如下:
    <android.support.design.widget.CoordinatorLayout <android.support.design.widget.AppBarLayout <android.support.v7.widget.Toolbar/ > <android.support.design.widget.TabLayout/ > </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager/></android.support.design.widget.CoordinatorLayout>
    其中CoordinatorLayout用于协调布局中的部件的滑动,AppBarLayout用于显示标题并添加菜单,ViewPager用于显示新闻列表。
    ViewPager中包含多个Fragment,每个Fragment布局xml如下:
    <android.support.v4.widget.SwipeRefreshLayout <android.support.v7.widget.RecyclerView/></android.support.v4.widget.SwipeRefreshLayout>
    其中SwipeRefreshLayout用于添加下拉刷新操作,RecyclerView中以垂直线性布局的方式显示新闻条目。
    RecyclerView中的新闻条目布局xml如下:
    <LinearLayout android:orientation="vertical"> <TextView android:id="@+id/title"/> <LinearLayout android:orientation="horizontal"> <TextView android:id="@+id/source"/> <TextView android:id="@+id/datetime"/> </LinearLayout></LinearLayout>
    即每个条目分为两行,第一行为新闻标题,以较大字体显示,第二行为新闻来源和发布时间,分别位于第二行左侧和第二行右侧,以较小字体显示。
    4.1.2 功能实现新闻列表中主要实现了以下功能:
    下拉刷新获取新的新闻该功能通过重载SwipeRefreshLayout中的onRefresh()功能实现。用户下拉页面会自动调用onRefresh()函数,app后台向服务器申请新闻数据,并更新后台的新闻列表;随后会调用Fragment的Adapter的notifyDataSetChanged函数,更新UI界面上所显示的数据。
    上拉加载更多旧的新闻该功能通过给RecyclerView添加SrollListener监测用户下拉动作,当列表下拉至接近最下端时,会向后台申请更多新闻数据,并调用notifyDataSetChanged函数更新UI界面上的数据。
    新闻列表本地存储该功能通过使用SQLiteOpenHelper类为app添加后台数据库,并在向服务器申请更新数据时将更新的数据放入数据库中。在app开启时会从数据库中取出新闻数据加载到内存中。
    新闻是否看过的灰色标记该功能通过新闻列表中ViewHolder的onClick函数实现。当用户点击某一新闻条目时,会更改该条目的颜色为灰色。同时,阅读标记也会被更新到数据库中,下一次打开程序时灰色标记不会消失。
    新闻搜索该功能通过主页面上的Menu中的条目点击实现。点击Menu中的search条目会弹出AlertDialog搜索框。搜索功能通过对后台新闻数据进行搜索实现,并将搜索到的新闻显示在search Fragment上。









    搜索示例1
    搜索示例2



    新闻分类添加和删除操作该功能通过主页面上的Menu中的条目点击实现。点击Menu中的category条目会弹出多选框,对需要的category进行选中即可。用户选中后点击确定,调用函数对后台选中category的数据进行更新,并调用notifyDataSetChanged函数添加和清除相关页面。

    4.1.3 工作难点与亮点
    页面布局,使用了比较新的控件,需要学习的东西较多。在协调TabLayout和ViewPager中碰到较多问题,包括标题不显示,ViewPager显示空白等
    数据加载,FragmentStatePagerAdapter使用较复杂。碰到了更新后台数据前台不刷新,以及删除Fragment后页面错位的问题。通过上网查阅资料,重载getItemPosition函数得以解决。此外使用了Loader类,对数据进行加载和更新
    新闻分类和删除操作中,对Fragment的重构析构操作较多,碰到了一些问题

    4.2 分享功能4.2.1 实现方式通过调用Android自带的原生分享功能Active_Send实现。由于微信SDK的问题,在同时分享文本与图片上遇到一些问题:微信6.6.7版本以后无法再使用”Kdescription”进行图片与文本的共同分享。
    4.2.2 工作难点与亮点图片URL获得方法通过针对不同版本的android系统,重载不同的WebView的shouldInteruptRequest方法,在WebView加载网页时获取所加载资源的URL,并通过URL的所含字段判断是否为图片类型,从而直接获取图片URL。
    图片下载与选择问题通过BitmapFactory类对图片通过URL进行下载并保存。在保存过程中需要动态申请外存权限,申请过程写在了重载的onCreate函数中。
    Uri传输问题保存图片后,由于android较高版本对权限的控制,需要使用FileProvider类对图片URI进行获取并分享。
    4.3 收藏功能4.3.1 实现方法通过为每一个NewsItem类添加一个favorite成员变量,记录每一条NewsItem是否被收藏过。收藏内容记录在本地,并可以通过服务器进行同步。
    4.3.2 工作难点与亮点数据更新问题在设置收藏的时候,需要对页面进行实时刷新以便显示出最新添加的收藏。此外,需要避免数据重复的问题。
    4.4 新闻推荐4.4.1 实现方法通过对用户阅读过的新闻与收藏的新闻进行记录,为每一个阅读与收藏记录赋予不同的权重,通过加和判断出用户对各分类的喜好顺序,排序后为用户更多推荐未阅读过的喜好顺序靠前的分类的新闻。

    4.5 新闻评论4.5.1 实现方法通过获取用户手机mac地址将评论上传到服务器,服务器端判断是否登录,并决定显示mac地址或用户名。新闻评论自动与服务器同步。
    4.5.2 实现难点与亮点同步评论过程中需要对mac地址进行判断。评论显示布局需要设计。









    评论示例1
    评论示例2



    4.6 服务器设计4.6.1 实现方法在服务器端使用Java语言写了一个多线程服务器,接收用户端的不同请求,包括注册,登录,刷新新闻,收藏新闻,同步收藏,同步评论等。并实现了新闻的mac地址记录缓存,服务器端保存功能,避免了新闻的遗漏。
    注册,登录在服务器端使用mysql数据库记录用户数据,在注册时判断用户名是否存在并返回成功或失败信息;在登录时判断用户名密码是否匹配,并记录登录的mac地址以便后续使用时无需再次登录。
    刷新新闻服务器端每5分钟爬取一次各分类的rss界面获取最新的新闻信息。客户端申请更新新闻时将最近的50条新闻传送给客户端,客户端可以判断传输的新闻是否已存在,并将新的新闻更新到UI界面中。
    收藏新闻服务器端记录每一个登录用户的收藏信息。客户端登录后自动同步收藏信息,并且接收客户端新建的收藏条目。客户端刷新页面后自动再次同步收藏信息。
    4.6.2 工作难点与亮点服务器与客户端同步服务器与客户端同步时为多线程,避免了多个客户端的阻塞。
    服务器本地存储服务器本地创建mysql数据库对信息进行保存。
    mac地址获取与缓存客户端通过MacAddressFetcher类获取手机mac地址。由于android权限限制,获取方法较为复杂。

    五、总结与心得在本次新闻app项目的制作过程中,我学习到了android编程的相关知识和面向google编程的能力,也感受到了人在DDL面前的巨大潜力。7天的时间从不懂android编程到编出一个能够使用的新闻app,也让我自己很惊讶。但也由于时间关系和评分要求,所做出的app界面并不美观,也希望助教谅解。
    附注
    实验手机型号:小米6
    系统版本:MIUI10 8.8.23开发版,Android 8.0.0
    17 评论 309 下载 2020-04-07 09:57:40 下载需要15点积分
  • 基于JSP和MySQL的农产品销售管理系统

    摘 要本文论述了基于JAVA、Web的农产品销售管理系统开发的目的及意义,目的是为了农产品资源的合理利用和物资的充分交流,有些地方富余而卖不出去,有些地方却吃不上。意义在于加快社会主义现代化建设的步伐、实现民主富强的小康社会,充分体现各地的特色。
    根据实际需求和,本人策划了(基于Web的农产品销售管理系统)本体系,本系统充分考虑了国家的农产品生产和销售管理之间的相互关系,以及互联网络的现代化应用,在互联网络中,搭建一个类似网上商城一样的网站系统,其中会用到 MyEclipse、MySQL、JSP等之类的网络工程技术,本系统分为前台销售系统和后台管理系统,前台会员系统,为会员提供:会员注册、购物车、顾客留言、商品浏览、订单管理等主要功能。后台管理系统,为管理员提供:农产品订单管理、农产品的商品管理、农产品的商品分类管理、农产品的特价商品管理、会员信息管理、系统用户管理等优质服务。
    关键词:JSP;农产品;网上商城;MySQL
    AbstractThis paper discusses the purpose and significance of the system based on JAVA, the development of agricultural products sales Web, in order to fully communicate the rational use of agricultural resources and materials, and sell surplus in some places, some places have not. The significance lies in speeding up the socialist modernization construction, realize democracy and prosperity a well-off society, fully reflect the local features.
    According to the actual demand, I designed (Web based agricultural products sales management system) of the system, the system takes full account of the relationship between national agricultural production and sales management, and modern application of the Internet, in the Internet, build a similar online mall as the website system, which use of network engineering technology MyEclipse, MySQL, JSP and so on, the system is divided into front and back office management system, sales system, the membership system, to provide members: the main function of membership registration, shopping cart, customer message, product browsing, order management etc.. The backstage management system, provide the administrator: agricultural products, agricultural products, order management, merchandise management, commodity management, classification of agricultural products agricultural products special offer merchandise management, member information management, user management and service system.
    Key words: JSP; agricultural products; online shopping mall; MySQL
    前 言从瓦特改良蒸汽机到内燃机和电力发明,从哥白尼的日心说到爱因斯坦的原子裂变,名为科学的力量,在人们社会悄然崛起,人们对未知的恐惧并不能阻拦科学的发展。
    随着时间的流逝,科学越来与壮大,最终成为人们都认同的力量,成为了主流,它的发展解放了人的劳动力和思想,让人们有了更多的时间和空间去思考,去发现,去学习,去揭秘,去知道,最终成为人类自己的知识。
    在这种情况下,互联网络掀起了新的科技革命浪潮,他改变了人们的生活习惯,思维方式,交流沟通和知识传承,它方便了人们之间的交流沟通,使空间距离不再成为阻碍,使时间屏障不再成为难题,使语言不通不再成为天险。人们通过它互相交流自己的想法和思维,通过它互相论证自己的观点,通过它来相互传达信息,最后达成共识,总为言之,互联网络以其强大的优势和独特迷人的魅力成为时代的主流,未来是互联网络的时代,当然,也是本人们的时代。
    互联网络技术发展到现在,Java Web技术已经是使用最为多,在这个体系中常常被人用来架构各种程序的技术.人们常常用它来编写代码完成程序并且应用到现实生活和网络的各个方面,它通过连接服务器访问后台进行数据交换进而完成对后台数据的交互除了处理与各种查询。
    JSP是本人们所需要的一种毕业设计技术,而本人们的毕业设计可以用和多种关系数据库中的简单实用型数据库管理系统,为Web框架应用提供了较好的实现方法. 农产品网站就是以这种方式下起色起来的,通过以产品信息展示和采购运输为主要的核心内容来达成本人们让他实现的作用,用网页的形式,以农产品交易为主意交易系统。
    基于JSP的农产品网站网上购物系统是一个很多人都做过类似的网站设计,自己用数据填写别人提前写好的框架,自己根据上帝的要求去完成相应的功能,进而成为人人都用到的需要要求的网站,这样人们就能快速的寻求到自己的宝贝需求而不用带热天的去晒日光浴和大寒天的去吹西北风,并且还有很多上帝,例如:方便盘问,可以“住”进的数据多,容易命令操纵便于增加删除改变纠错查找盘问等;对浏览者来说,统合了盘问产品信息的过程,并且随时可以加快速的找到自己渴望的产品信息。农产品网站系统相比传统的商品信息发布传播的方式具有十分明显的优点。这种显而易见的优势,使它更容易在这个追求方便、快捷的时代下,蓬勃发展和欣欣向荣。
    1 课题简介1.1 选题背景自宇宙出现盘古开天依赖,万事万物就在不断的进步更新淘汰弱者,现在到了如今人们进入了互联网上帝世纪,越来越多的事物和工作都可以在网上用数据流代替和执行,不必再像以前一样亲自出面和出门做事,也比不向本人以前一样在街头走路发传单通知消息,这些纸张的载体因其自身的缺陷而慢慢被淘汰,它们消耗高纸张要钱期刊要刊登费低昂是要提前预定浪费了了人们的时光和精气神而被逐渐淘汰。所以,在网络上走数据流来传达信息和需求进而选定需求的节约时光和精气神的方法被人们大大的接受,互联网络在很短的日子里成为全球所接受认可的主流传播方式。本次毕业设计的上帝是农民主要是为农民的农产品销售买卖提供方便之路,通过使用开发工具制作成为客户和用户都满意的系统。
    1.2 课题的意义在当前时代,民众们已经深深的感受到了Internet信息革命的狂潮的冲击。信息技术的突破使得空间距离已不再成为限制,真正实现了地球村的理想,以Internet为标榜的现代化信息网络快速扩张,它的辐射领域也从单一的信息的交流扩张到人们生活的方方面面。从这个大势中本人们得出,信息资源在互联网信息技术的巨大的传播下,一种新的、基于网络的信息沟通与交流正在逐步形成,这给你、本人、他乃至世界带来了巨大的冲击,这是机遇,也是挑战。
    本人在网上找了一下这方面的数据发现农村中的信心普及率很是低农民们都不是怎么会用手机顶多就是打打电话发发短信,平时不太会上网更不会想到通过网络手段去卖出自己的劳作成果—农产品,这无疑大大浪费了农民的劳动成果和国家资源也大大打击了人们的生产劳作的积极性,所以一个可以为农民处理难题的体系应运而生。本次毕业设计的开发,不光可以为农民们出售他们的农产品提供网上道路,省去他们精气神和时间金钱不用必须亲自去菜市场或推着三轮车去大街上去卖菜,而且还使的买菜的家庭主妇不用花费大把的时间去实体店里采购这样既省钱又省精气神。这绝对是农民心目中 的最好用最符合他们期望的系统。
    1.3 系统目标系统的目标是为上帝服务—农民,主要通过开通网上那个东西提供数据的方便之路使农民能够通过网络快速方便的与那些急需农产品却又找不到供货商的买家进行交流达成协议,进而形成供求关系长期下来是形成产业链也必是不可能,形成物资的充分流动与吸收吸引,并且省去了民众许多的time和money。
    在很多城市、镇子里面、超市里的水果蔬菜之类的农产品都昂贵非常的让人恐惧,而在农村了很多东西都烂在树上、拦在土地里、堆在家里都卖不出去,而你又需要某些东西却不知道到哪里去找,可能只能亲自或找人代去才能买到不然的话就要花大价钱被小贩当肥羊仔宰,还不一定能找到所需要的,同时还有可能受不同能量在空寂的空间流动的限制。在另一是事物的相同方面,农产品网站所提供的更加方便、更加简单的农产品的咨询查找;而拥有本系统有的公司的业绩硬顶会大幅提升有,因为它让人们更好受以及更不难受更方便不吃亏及省去资产浪费使大家能够以最少的资产做最大的事随之更持续更坚挺活的更久。
    2 可行性研究本人们实施研究,要做的是在有限的time和资源条件下确定所有问题,并且找到问题的解决的方法和可能性,进行的原因是确定所找的问题应不应该去费工夫研究,放开你的大脑去畅想有几种可能:
    2.1 技术可行性于Web的农产品销售管理的策划是靠Web服务器以及浏览器来完成的。然后应用Java Web技术,使用方便、快捷、应用性强大的、好用MyEclipse开发工具软件来设计完成整个系统,建立Web项目,用Java语言编写程序,用JSP(Java版的HTML)设计丰富多彩、美轮美奂的动态界面,本系统使用的是 MySQL数据库。在学校上学期间,老师花功夫讲过这门语言并且让本人们编写了好些相关程序以及做过好些课程设计,对本次毕业设计有一定的经验和把握,而且如果有问题,指导老师就会帮本人们讲解,所以,本人认为,此次毕设在技术上是可行的。
    2.2 经济可行性在此次毕业设计之前,本人对相关情况做过调查,并有了很好的了解和整体把握,虽然需要较高的技术和相应的制作完成人员,但任何困难是阻挡不了本人的,本人坚信党和人民坚信国家,坚信本人一定会成功,只有前期有个好开头后期就会节省大量的人力物力。农产品更容易强劲的买盘能否产生本人们开发者所不知道的各种可能的未知。这些可能的未知就像黑暗处的毒蛇一样隐藏不为人知,不知道什么时候就会跳出来咬你一口,所以在维护上要多下些功夫啊,而本系统的开发只需要技术较好的软件工程师,就能成功。与其它的系统相比,本系统可靠性相当强,只即开发出来,后期运行良好就可以了。如果它成功上架并应用,不光可以为农民们出售他们的农产品提供网上道路,省去他们精气神和时间金钱不用必须亲自去菜市场或推着三轮车去大街上去卖菜,而且还使的买菜的家庭主妇不用花费大把的时间去实体店里采购这样既省钱又省精气神,满足了人们的需要。因此在经济上可行的。
    2.3 操作可行性操作可行性是看本人是否有可能去做并做完本次毕业设计。
    随着互联网和信息技术的不断进步,各种技术层出不穷,电脑的小型化和私有化,软件工程师们的技术的成熟,使得很多系统都能够实现并且应用,独立开发与生产成为了可能,MyEclipse、Tomcat、MySQL等开发工具软件都能在网上下载,应用教程也能在网上学习,Java、Web等的jar包在网上直接下载导入开发工具之中,就能够自己编写程序,开发前曾向老师请教过相应的问题,因此对整个程序有了一个大体的了解和清晰的模块划分,将程序划分一个又一个的模块,是整个程序有了一个清晰展示,这其中每个模块都是可以完成的。
    综上所述,程序的操作性是可行的。
    2.4 法律可行性本系统的开发遵循客观法律法规和人性,不损人利己,不侵犯他人财产和权益,誓死遵守国家的荣誉和法则、一切以集体和国家利益为主,为人民造福,所以不存在危险主义,恐怖主义,帝国主义,侵权等问题,具有法律可行性。
    3 需求分析3.1 系统需要解决的主要问题目前,本系统需要了解客户的层次分类和客户具体需要哪些功能,能做到什么,达到什么程度,提供什么便利,使用本系统后又能有什么改变和益处,能为客户、人们和国家带来哪些影响,能为社会带来那些发展。
    本次系统的需求对象是农民,要完成系统的全能制作,就必须要完成对农民的实际情况和现场检查的了解意见收集看看他们需要什么都会什么能做那些能为他们做哪些,对他们亲切问候完成分析报告进而严格根据分析报告制作系统一步一步完成农民要求的功能,最后验收符合他们的要求内容的情况然后就能收到钱币了。
    3.2 系统具备的基本功能农产品销售管理体系的成功是靠两个重要部分完成的,他们真的很重要,前台用户销售系统要求基本功能都实现,如登录、注册、购买、下订单、修改密码、查订单。在此基础上如果能体现界面美观、大方、美轮美奂等,能一下子突出重点、震撼他们的内心的效果,就更好了。
    3.2.1 网站前台作为用户上网浏览能瞬间看到的功能界面,首先,功能全面、且简洁易懂好操作,让用户能够方便快捷的使用本系统,进而爱上本系统并吸引更多的用户前来,让他们也能够了解记住本系统的上帝是谁—是他们。为上帝们直接展示的功能界面主要包括商品信息按类别、名称搜索,用户注册成会员,会员留言,购物等。上帝们进入本系统首面就能看到所有的数据流,游客和任何人都可以查看询问。上帝们注册表级进入后就可以拥有权限做他们本人可一直在做的事了。
    3.2.2 网站后台作为拥有特殊权利的人群的操作界面,理应没有注册界面,为了方便拥有特殊权利的人群对系统的管理,提供了方便的模块化管理模式。后台系统模块主要分为是管理模块、会员(在前台注册的用户)的管理模块、商品的分类管理模块、商品本身是管理模块、订单(用户购买东西的凭证)的数据流等。
    3.3 数据流图数据流图(DFD):是一颗天才的发现烈日般的发明。是本人设计中表达最为清晰度的图,其中本图没有任何(应该是太多)难以理解的地方,简单一点,好懂一点、任意一点、容易并又容易一点(不懂得查资料,你就会了),它只是一个描述说明“水”(信息)的流动和处理(信息来回交流并把有返回结果的信息在交流的过程图)情况,是极好的向人们(即使不是专业的计算机相关人员)表达他们想法和理解的工具。



    图 形 符 号
    名 称
    符 号 说 明





    实体
    讲解体系除外有关数据的团体和微小,框内为之称号



    处理
    追究某种相应解释和体悟 其中,PM区的解释相应的顶号 C区的解释相应的称号



    数据存储
    讲解与剖析的相应资料的“住处”,DN部分讲解资料“住处”的标号,S部分讲解“住处”的资料的称号



    数据流
    讲解资料的流向方向,FM讲解资料流向的称号



    农产品网站系统TOP数据流图

    农产品网站系统管理员子系统数据流图

    农产品网站系统会员操作子系统数据流图

    3.4 数据字典数据字典是看有信息和有关资料的团体,数据字典的作用是在软件的分析和设计过程中提供关于数据的描述信息[1]。它让人们有了关于数据最重要直观的野望。
    3.4.1 数据存储数据存储是相应资料停歇或看管的住处。本人们常常把它堆放在文献中、资料数据库中、缓存池中、内存中包括但不限于话会话session、二级缓存池、表,下面就是一些本系统的数据表,也是本系统的相关资料“住处”的地方。




    3.4.2 数据流数据流是相应资料在通道的流动方法。本设计使用的是不同的编号来代表不同的信息流,清晰的展示了设计的信息为他人了解本系统提供了极大地方便。



    3.4.3 数据处理数据的处理往往在数据的后台不是那么容易找见,给软件工程师们造成了极大的困扰,使他们不能方便的通过查看数据的交互处理来定位问题和了解流程,这时,通过编号定位信息进而了解业务流程和解决问题就非常有必要了。


    4 总体设计4.1 概述本次毕业设计到这里就开始思考怎么完成任务的事了,这里大体部署出设计的各个阶段任务内容和完成时间,然后对各个阶段的任务内容进行分析后确定软件的各种功能模块的划分从而对系统进行论述概写,即,也就是分析判断确定本次毕业设计的模块组成结合和实现的。
    4.2 系统功能本次毕业设计提炼本人的深思熟虑和对系统完美剖析而得到的结果来看,处理体系设计规定为两个分部,是会员子体系和拥有特殊权利的人群子体系。
    4.2.1 会员子系统会员子系统主要包括会员注册(系统必须,几乎每个系统都有)、购物车(一般买到的东西可以放购物车和直接付钱,这里本系统是统一放购物车)、顾客留言(供用户发表言论的地方)、商品浏览(本系统的主要功能也是系统的首页也是商务网站永恒的信仰,太常见了)、订单管理(查询用户自身所买东西的地方)、修改注册资料。会员子系统如图4-1。

    4.2.2 拥有特殊权利的人群子体系功能划分拥有特殊权利的人群子体系可设计出如下图的图形如图4-2。

    4.3 系统功能描述4.3.1 会员子系统功能描述会员(没有特殊权限的人群)是系统中的上帝,主要可以实现没有特殊权限的人群的注册(身为一个系统中的UI中最重要的一部分没有客户的系统给谁用,这部分是应定要有的)、购物车(没有特殊权限的人群买下东西给那里放,而是这里)、顾客留言(供没有特殊权限的人群查看交流的地方这里你可以查找到的没有特殊权限的人群给本系统的评价来供你查考)、商品浏览(没有特殊权限的人群要选择产品就需要看看都有什东西)、订单管理(没有特殊权限的人群消费了就要有收据,这是凭证是老板和没有特殊权限的人群查看的依据)、修改注册资料(这个用于客户忘记密码之用)等功能。具体功能如下:

    没有特殊权限的人群注册(Lid registratie):用于给叔叔阿姨们加入而使用的,各位没有特殊权限的人群还等什么快来吧别让宝宝失望
    商品浏览(Product bladeren):没有特殊权限的人群浏览产品资料和特价产品资料
    修改注册资料(Inschrijvingsgegevens wijzigen):登录系统的没有特殊权限的人群变更与团体相反的东西的资料
    购物车(Uw winkelwagen):存储没有特殊权限的人群购买的产品资料待结算
    没有特殊权限的人群留言(Klant berichten):没有特殊权限的人群可以向拥有特殊权限的人群宣传留言资料
    单子管理(Orderbeheer):审阅和修改单子资料

    4.3.2 拥有特殊权利的人群子系统功能描述拥有特殊权限的人群对子系统Be responsible for全部体系的各种资料的更新与维护的操纵。

    订单管理(Orderbeheer):拥有特殊权限的人群对没有特殊权限的人群的订单进行审阅和去掉控制
    系统没有特殊权限的人群的控制(Systeem heeft geen speciale rechten beheersen van mensenmassa):对体系的没有特殊权限的人群的资料进行添加修改删除控制
    留言的操纵控制(Kontrolelementer for post):拥有特殊权限的人群对没有特殊权限的人群发布的留言信息实施控制
    商品类别的操纵控制(Categorie Productcontrole):拥有特殊权限的人群对商品的类别资料实施控制
    特价商品(Specijaliteti):拥有特殊权限的人群发布和控制特价产品资料
    商品的操纵控制(Control and control of commodities):拥有特殊权限的人群发布和控制产品资料
    没有特殊权限的人群的操纵控制(Mensen zonder bijzondere machtiging controle):拥有特殊权限的人群对已经注册的没有特殊权限的人群实施控制

    4.4 数据库设计此物几乎每个设计都能都能及都会用到的高效好用方便的技术,它既能存储数据又能读取数据,使本人的毕业设计不至于成为只能看或只能跳转的界面(中看不中用)正是因为有了这个技术本人们的毕业设计才能多姿多彩本人们的各种软件才能够具备实用性经济性整个社会才会进入互联网的时代,注意使用数据库设计必须要有相应的数据库语言,如本人在本次毕业设计中用到的MySQL数据库,它能很好的存储数据提取数据因而大量应用于网站架设上,也就是说打开电脑上网找找发现很多的网站都用MySQL并且没有一个网站不用数据库技术,它让数据有了“家”,进而就能“住进”更多的数据,实现了从只能算数到能实现论文查重,从只能测算弹道(物理存储设备还那么大)还相当费劲到发射火箭相当轻松,数据库技术的作用功不可没,在学校的时光老师常常讲解数据库讲理好几种包括MySQL、oracle,好几种册次包括数据结构、SQL语句,好几种实例加上应用包括上课讲的例子、课程设计,他说这个非常重要,所以那些学弟学妹们努力学习SQL语言吧。
    数据库技术有几大优点:

    数据库兼容性强
    本次毕业设计的设计那可不是以次为焦点的策划技术
    本次毕业设计的数据库是有相当严格的标准
    本次毕业设计的要求能相当的联系出来

    4.4.1 数据库概念结构设计人们往往讨厌看到复杂的东西因为那很难看懂并且还有浪费时间更可怕的事实是你花费了时间却看不懂,数据库就是这样一个东西,但看他的数据库语句你发现他很混乱看不懂就是它认识你而你不认识他,这往往导致出现解析困难的情况,所以一种直观的视图概念工具就应运而出了—ER图,它用来对物体进行抽象,再把抽象的结果用线相互关联起来这样一个清晰明了的结构图就出来了,通过它软件工程师们可以大致的了解各个对象之间的关系并对系统有了规划和认知就是一个外行人都能够了解。它有两个明显的优点:简单容易;受人喜爱哪怕这个人他不懂计算机。所以无论是做程序还是做业务最好都画上E-R图,它有助于你理解你所做的事并让你善于总结和善于发现,本人的结束大学的任务中就有ER图。
    E-R图是表达事物“奸情”的联系的东西,它有一下能量组成:

    矩形框—实体类型(Rektangulære boks-type enhed)
    菱形框—联系类型(Diamanter-kontakt type)
    椭圆形框—实体的属性(Oval box – en egenskab for en enhed)。

    各实体属性图
    大家快来看看啊,下面的都是“尸体”属性图,快开瞧一瞧啊!如下所示:
    没有特殊权限的人群图

    拥有特殊权限的人群图

    产品类图

    留字图

    产品图

    实体总E-R图

    4.4.2 表的设计本人的毕业设计数据库逻辑架构使用的是MySQL。它的作用就是为本人的毕业设计的数据提供足够的和规划好的整齐的存储空间,方便本人们实现资料的相应控制。
    本体系的资料库称号db_shop_wgsc.sql。主要包括如下几个表:
    商品类别(category)表



    字段名称
    说明
    类型
    长度
    允许空




    ID
    ID
    int
    4



    CateName
    分类名称
    char
    40



    CateDesc
    分类描述
    text
    0




    留言(leaveword)表



    字段名称
    说明
    类型
    长度
    允许空




    ID
    编号
    int
    4



    Member
    顾客姓名
    int
    4



    Admin
    拥有特殊权利的人群
    int
    4



    Title
    留言标题
    char
    60



    Content
    内容
    text
    0



    LeaveDate
    留言时间
    datetime
    0



    AnswerContent
    回复内容
    text
    0



    AnswerDate
    回复时间
    datetime
    0




    会员级别(memberlevel)表



    字段名称
    说明
    类型
    长度
    允许空




    Id
    序号
    int
    4



    LevelName
    名称
    char
    20



    Favourable
    折扣
    int
    4




    拥有特殊权利的人群(Admin)表



    字段名称
    说明
    类型
    长度
    允许空




    ID
    ID
    int
    4



    AdminType
    类型
    int
    4



    AdminName
    姓名
    char
    12



    Password
    密码
    char
    12



    LoginName
    账号
    char
    12




    商品(merchandise)表



    字段名称
    说明
    类型
    长度
    允许空




    ID
    ID
    int
    4



    Category
    类别
    int
    4



    MerName
    名称
    char
    40



    Price
    特价
    decimal
    8



    SPrice
    售价
    decimal
    8



    MerModel
    型号
    char
    40



    Picture
    图片
    varchar
    100



    MerDesc
    描述
    text
    0



    Manufacturer
    厂家
    char
    60



    LeaveFactoryDate
    出厂日期
    datetime
    0



    Special
    是否特价
    int
    4




    会员(member)表



    字段名称
    说明
    类型
    长度
    允许空




    ID
    编号
    int
    4



    Memberlevel
    级别
    int
    4



    LoginName
    账号
    char
    12



    LoginPwd
    密码
    char
    12



    MemberName
    真实姓名
    char
    20



    Phone
    电话
    char
    15



    Address
    地址
    varchar
    100



    Zip
    邮编
    char
    10



    RegDate
    注册日期
    datetime
    0



    LastDate
    最后登录日期
    datetime
    0



    LoginTimes
    登录次数
    int
    4



    Emails
    邮箱
    varchar
    100




    订单(orders)表



    字段名称
    说明
    类型
    长度
    允许空




    ID
    编号
    int
    4



    Member
    会员号
    int
    4



    Cart
    购物车号
    int
    4



    OrderNO
    购物单号
    char
    20



    OrderDate
    时间
    datetime
    0



    OrderStatus
    订单状态
    int
    4




    购物车(cartselectedmer)表



    字段名称
    说明
    类型
    长度
    允许空




    ID
    编号
    int
    4



    Cart
    购物车号
    int
    4



    Merchandise
    商品编号
    int
    4



    Number
    数量
    int
    4



    Price
    价格
    decimal
    8



    Money
    金额
    decimal
    9




    账单(cart)表



    字段名称
    说明
    类型
    长度
    允许空




    ID
    编号
    int
    4



    Member
    会员代号
    int
    4



    Money
    总额
    decimal
    9



    CartStatus
    账单状态
    int
    4




    4.5 业务流程图它常常指的是软件工程师们对业务的了解情况,这个业务时做什么,为哪些人服务,怎么流通的,为什么这里是这样流的,具体的内容是什么,这些都是程序员必须要知道的(无论是测试还是开发人员),在公司工作的软件工程师们相信大家深有体会对一个业务的了解,尤其是对新生(实习生)了解业务都有相关文档来进行描述,文档中就有业务的相关流程图,新生们通过这个图就能大体和整体了解相关业务,也就是通过这个图,他们将了解他们日后将要进行的工作和饭碗。
    下面是一些流程图的符号,本人了解业务时,常常接触它们,所以认识它们,下面本人来给大家分享一下:
    其中图1-1农产品业务流程图:


    5 详细设计与系统实施5.1 相关技术简介本次毕业设计在这一阶段就是要开始具体规划了,怎么写如何写就成为要思考的;

    first,对本系统第一部分首页,要有产品的展示,游客不管是不是会员有没有登录首先要看到这部分内容才会对本系统有了解有兴趣才会试着去注册登录进而有了后面的一系列事情,可以说它是一切的前提。当然登录注册界面也要放在首页并且占用面积不宜过大,否则会影响客户的兴趣,想想一个系统最主要的是向人们表示他们的作用和价值而不是其它一些次要的东西。如果你能做到以上几点,那你的系统的第一步就好了
    Second,用户点击进去后要了解产品怎么办?这时就需要产品的介绍了这种能让用户了解产品信息的方法了,用户通过注册登录后就浏览首页通过产品名称和图片来找到要找到产品了,那么用户不知道产品的名称只知道大概图片或只知道产品名称而不知道图片或通过查询(后便讲到)得到但不确定想要更具体的了解产品信息,这样通过单击图片和“查看详情”就得到了更具体产品详情,这样用户就因为能够查询产品详细信息(这可能就是你比同类产品多的地方)而对本系统大力支持进而让你的系统更有名并且吸引更多人来最后甚至走出市场打开国门进军国际舞台,还有为了防止因产品太多客户浏览太频繁导致人们厌倦需要做一些功能,第一增加商品搜索功能让商品更快更容易的被找到这包括模糊查找和精确查找,第二增加商品分类功能根据不同性质的商品分成不同的类别,这样用户就能根据类别更快一步查找物品。以上的功能本系统都有
    Thirty,也是最重要的一部分之一,当客户辛苦注册登录并浏览查找到所需商品时,却发现少了最重要的东西—没有购买按钮,不能购买那就尴尬了,所以本系统还要添加购买功能,当用户点击购买后跳转到购物车界面后就能看到他们所买的东西的单价、数量(默认是1可修改)和总计了,如果客户不想买的话还有返回上一级的选项供选择,点击“返回上一级”按钮,返回首页然后进行重新购买,如果客户(ˇˍˇ) 想~弄走购物车里的东西,有挑走购物车里的东西的选项按钮供挑选,按下“清空购物车”,购物车变空,如果想进行购买的话按下“下一步”就会生成订单项等到客户确认,如果客户不想买的话还有返回上一级的选项供选择,点击“返回上一级”按钮,返回首页然后进行重新购买,如果想进行购买的话点击“确认”就会生成订单并把数据发送给后台,联系拥有特殊权利的人群就可以从后台查到数据

    This volume aims to take the reader behind the details of the Access interface, focusing on the general knowledge necessary for Access power users or developers to create effective database applications. [1]
    5.1.1 B/S模式及其优势随着科学技术的发展,互联网络信息技术也随着发展,原来使用的C/S技术模式也随着Internet的逐渐扩张,慢慢向(B/S)技术模式转变。
    很久以前,互联网公司都喜欢采用C/S(client/Server)技术模式来生产产品,这种C/S(client/Server)技术模式生产下来的产品因为client分担了一部分数据处理,所以对服务器的要求就降低了,这种情况对公司的发展扩张就极为有力了,就导致很多软件工程师们从事并开发出了很多C/S(client/Server)技术模式的应用软件,这是他的优点,同时也是它的缺点,因为在这种开发模式下的软件产品,相当一部分的数据思维都在于客户端处理,那么,可能就会出现一些的缺陷:

    前台客户端系统的下载、安装、运行、测试、维护乃至最后的升级就非常的困难了。首先,下载需要一定的流量(MB),这一步让用户看着他们干瘪的钱包心痛,安装需要一定的时间,让分分钟上万、生活节奏快、视时间为生命的部分用户(社会精英)肝疼,每次打开运行又要一些时间,哎!不说了,上火啊!然后,运行出了问题的话,得!强制退出、重新启动,哦!对了,如果你的手机内存小,客户端产生的数据量大,嗯,还要清理一下垃圾(前一次运行产生的数据),又肾虚啊!最后,每一次的测试、维护乃至最后的升级都要耗费公司的人力物力财力,软件工程师们的时间和精力,夭寿啊!这是本人真是的经历,在公司工作时,客户端系统每开发出一个版本,就要赶紧开发下一个版本,是很忙的,有时候都没时间管本人们,誒,不说伤心的事情了
    一部分的业务逻辑和数据处理集中到了客户端,就会有可能导致安全隐患

    使用C/S(client/Server)技术模式成产软件产品,受几个因素影响,如电子设备的硬件差异、软件运行环境的不同(使用Android是操作系统,还是iPhone的操作系统)兼容性的问题又是一道重击,正是由于这其中的种种问题,人民开始使用(B)/(S)体系,这种模式与C/S模式最不同的也是最重要的部分,以现成的东西替换繁重的客户端,完成数据的交互。
    B/S的技术模式的使用但却换来了非常多的益友:

    数据体系在浏览器下载、安装、运行、测试、维护乃至最后的升级时,可以可能在相应的地方制作相应的设备就OK
    很多的使用都是在想用的乡音的地方进行的,这大大增加了体系的影响性

    这里补充一点,虽然B/S模式看似为本人们添加了很多的都得用处,但是由于相应设备的某些方面的局限性的限制,可能,在C/S的技术中部分相对可以设计的相应设备的性质,在B/S的技术模式下,编程受到重重阻碍,可能不能搭建设计。然而这样,B/S的技术还是当今时代many公司生产软件产品的使用技术。所以各位后来人,去学习去寻找去努力为了以后的饭碗和前途去努力的拼搏吧!!!
    5.1.2 Web—JSP技术JSP技术是本人做毕业设计使用最多的Web应用开发技术之一,本人通过它的设计脚本(底层代码)来学习它,将来你们也没用到它,所以请努力学习使用它,后面本人们才做详细讲解。
    5.1.3 MyEclipse简介MyEclipse是本人实现本次毕业设计的主要集成开发工具,类似于eclipse开发工具,但是比它更好用,它可以在工作空间中创建工程(文件夹和文件),对工程不停地添加内容,如创建并编写Java文件,完成逻辑代码,创建并编写JSP文件完成界面布置并向后台提交用户输入的数据,工程文件自带框架(各种已经写好的封装了Java对象的jar包),极大地丰福了程序的编写和MyEclipse的内容,MyEclipse开发工具天生自带Tomcat和很多插件,不必用户自己去一一架设,这为用户带来了方便,能使软件工程师们集中时间与精力,更加高效的编写、调试、测试、运行程序并成功完成任务,公司也能因此增加效益,社会、人民也能因此更加美好。
    MyEclipse 是一个十分方便的、好用的、快捷的、流行的、卓越的用于互联网未知领域的开道的Java的东西纠合,MyEclipse的功能非常强大且完好,应用范围很广,尤其是对各种开源免费的产物的拥护十分不错。本次毕业设计中用Java Servlet接受表单数据,用AJAX文档,用JSP编写优美漂亮的界面传递数据给后台(要经过Java Servlet),用Struts框架转化数据为各种action,用Hibernate映射Java对象与数据库的属性,用 JDBC数据库链接,Tomcat做服务器传递数据。上述多项功能都集成于MyEclipse。可以说有了MyEclipse几乎不需要其他java开发工具。
    5.1.4 Tomcat简介Tomcat是一个十分优秀并且十分好用的服务器,它不需要程序员自己写服务器、自己写输入流、输出流,来来回回自己传递字节或字符流,最重要的是它免费,并且开源这大大方便了程序员编程,节省了每次来回写输入流、输出流的时间,老师曾说,Tomcat是轻量级的应用服务器,对于很多小型,中型项目来说,它是首要选择,本人们创建项目,编写程序时,要经常用到它.通过它实现并达到本人们想要的效果。
    Jakarta Tomcat服务器是在SUN公司的JSWDK(Java Server Web DevelopmentKit,SUN公司推出的小型Servlet/JSP调试工具)的基础上发展起来的一个优秀的Java Web应用容器,它是Apache-Jakarta的其中个子项目。
    5.1.5 MySQL简介MySQL是一种方便的、好用的、开放源码的、便捷的、使用范围广的、可拓展性好的数据库的管理系统。它是一种小型的数据库,所以(相比其他大型数据库)就有了占用系统内存少、速度和反应快、浪费资源少、成本低等之类的优点,因为这些优势它很快占据了广大的市场(尤其是在小型、中型公司,)为了节约成本,增加效益,就选择了MySQL作为他们公司所搭建的网站的数据库。
    MySQL配合其他一些网络技术和开发工具,就能很好的架构网站或其他应用。本次毕业设计中使用的数据库也是此次介绍中的MySQL数据库。
    5.1.6 JavaScript简介JavaScript(简称JS),是一种方便的、好用的、能对对象和事件进行编辑处理的网页开发语言,它可以再HTML上使用(对新手来说,它就相当于一个Java版本的HTML),用于给HTML的网页添加动态操作。
    JavaScript是由网景公司(Netscape)开发设计的一种动态的、内置支持类、属于弱小类型的、基于原型的网页开发语言。
    是能让HTML的网页更加活泼的网页开发语言,也是当前业内网页设计中好学、方便、好用又快捷的语言。人们可以利用JavaScript轻易的做出丰富多彩的网页。
    5.1.7 JSP简介JSP(对新手来讲,就当他是一个Servlet),由出名的Sun首倡主导、联络许多家公司一起讨论并创建的一种动态技术标准。它实现了在HTML中的书写Java语言(指令、脚本,动作元素)。它通常被发送到服务器端(server),经过编译执行返回给客户端(Browser/client)的就是一个HTML,所以客户端(Browser/client)自然就能浏览。在接收到访问JSP网页的request请求时,Web服务器端(server)可以实现你很多的功能设计让你是想能够使用你所(ˇˍˇ) 想~要的性质,其中拨入的Java程序片段可以用作包括但不限于斗志斗彩的内容的添加和对数据“住”的地方的操纵等,方便实现网页的动态功能。

    经过一次性编写,使其成型,然后就可以四处的运行
    适用范围广大,可以在系统的多个平台运行。JSP从发明出来开始就是用来在各个平台溜达的,并且可以在任何环境中进行搭建、在任何环境中扩展。本人们把它和ASP相比较,JSP的优势就很明显了
    很强的可伸缩性。只要有一个相应的Jar包,本人们就可以四处运行Servlet或JSP,从一台服务器到many台服务器,Java Server Pages表现出来了强大的生命力
    功能强大并且丰富多样的开发工具的拥护。在这一点上与ASP很像,众所周知,有了许多非常功能很好并且卓越的开发工具都支持Java,其中有一部分是可以免费得到、可以独自编的并且已经可以顺利的运行在多种平台之下了
    可以支持并用于服务器端的交互。在工作空间新建一个web工程,工程中自带交互服务器端的组件,软件工程师们可以在其中书写、设计、运行、进而实现具有相应的逻辑功能的组件来供本系统的程序调用,来增加本人的毕业设计的系统的强大

    最后,JSP是本系统中很重要的、不可或缺的一部分,它构成了本人系统美轮美奂的动态页面和用户输入数据的数据提交功能。没有它就没有本系统。
    5.1.8 JDBC 简介JDBC(数据库连接)是好用的、便捷的、大大节省软件工程师门时间的语句,为人们使用相关资料提供有利的condition,这也是Java语言“编写了一次,处处都运行”的优点。JDBC为工具/数据库软件工程师们提供了一个统一的API标准,据此软件工程师们可以编写更高层次的接口工具和、类,这样软件工程师们就能够通过纯 Java API 来编写好用的、方便的数据库应用程序。
    JDBC的各项人物的关系数据库中,你可以与他,它不是一项容易的任务,换句话说,使用JDBC和API,就不必为访问关系数据库专门写一个程序了,本系统中就是使用了JDBC的高级封装方法,大大节省了本人的代码量和时间,因为有JDBC的系统可以向相应关系型数据库发送SQL以便调用。
    5.1.9 Hibernate简介Hibernate是一个便捷的好用的时尚潮流的数据库资料链接方法,是JDBC的升级版,能够更好的、更方便的连接数据库,使得软件工程师们可以随时随地的使用这个对象与关系的映射框架来操纵数据库。 这个对象与关系的映射框架可以应用在任何使用JDBC的场合中,如客户端的Java的程序, Web应用中的Servlet/JSP程序。
    hibernate比JDBC简单好用、便捷、方便、快速,它不需要输入很多的连接代码,数据库里的数据也不用循环提取。制作它的人是一个聪明、执着、有毅力、有恒心、不拍困难的人,因为它真的很优秀、研发它的过程必然充满了艰辛与磨难。
    Hibernate优点:

    对象/关系数据库映射(ORM)
    透明坚强化(Transparant sterke)
    很好很方便的事务处理(Very, very convenient transaction processing.)
    它没有占有性(It has no possession.)
    移植性会很好(Portability is good.)
    方便好用的缓存体系(Easy and easy caching system)
    简洁的HQL编程(Simple hql programming)

    Hibernate的缺点:

    不好学(Bad science.)
    虽然它把JDBC中的重复的数据进行了封装(包装成一个方法),使其调用是极其方便、快捷、好用,大大节省了软件工程师们的时间、金钱和工作量,但是它本身涉及或者是调用的东西也是极为复杂而又繁多的,这大大增加了初次学习者的负担和压力,让人们学习它的过程充满艰辛、苦难、挑战和心酸(谁又知道本人是怎么过来的,苦啊),所以使用的时候要好好注意,努力学习,不要因困难而放弃。千般苦难都阻挡不了本人们对学习的热爱,本人们向往努力向往美好明天。
    5.2 程序流程图程序流程图又称为程序框图,是本人们学习并且作项目时常用的方法。本人们学习并且作项目时常用的方法,在本次毕业设中,也是必须有的。
    下面是是本人画的没有特殊权限的人群体系的图(Below is a diagram of the membership system I draw)。

    拥有特殊权限的人群子体系程序流程图( Mensen met speciale machtigingen systeem stroomschema)

    5.3 拥有特殊权利的人群子系统的实施虽然该系统的计划,但从后面,由系统拥有特殊权利的人群的系统到系统的成员。成员需要实际上是管理的网站的一部分的您的需要,更重要的是管理的网站的,管理系统的需要。基于背景的管理系统,并于次年由于各种实际数据在数据库中,前厅部系统会更清晰的原始版本。
    后台体系是给某些特殊权势的人群使用的,十分位豆子都猜等性质。
    5.3.1 连接数据库的包含文件数据库中的数据是动态 Web 页后,可以创建很多时候重复的代码。它存储了数据库连接参数,您必须编写的文件。JDBC 封装方法的对象系统在这里,使用 Hibernate,JDBC 数据库中,以便通过连接的连接。
    文件中数据库参数代码如下:

    5.3.2 拥有特殊权利的人群登录页面如果拥有特殊权利的人群要登录的话可以通过点击进入后台的按钮进入后台界面其对应的页面是Admin/adminLogin.jsp,本页是拥有特殊权利的人群子系统管理的入口,不会是什么人都能登录的,必须是特定的相关要求的人才能进出本系统,尤其是网站的后台管理系统,如果发生数据泄露的话将会给使用人带来巨大的损失,所以本次毕业设计的后台管理系统是不设及注册功能的。此消息的危地马拉页的主要派别是取悦不是拥有特殊权利的人群身份。访问页控制台后端系统如下图。

    其相应的页面代码如下图5-3.1(De bijbehorende code van de pagina hieronder 5-3.1)

    5.3.3 会员管理模块在系统主页面中点击会员管理进入会员管理页面。
    成员的 web 页将显示系统中用户的注册表数据。关于按钮 supprimer 是完全摆脱自己的所有成员和成员。对应 Admin/URURadminMember.domr?meth = browseMember,面对显示页的计划:5-4。

    对应的代码如图5-4.1(Overeenkomstige code in figuur 5-4.1)

    在后台管理界面中挑选无特殊权利人群的详情,就会跳转到其对应的资料路径是为Admin/adminMember.do? method=viewMember&id=1,然后就是查看无特殊权利人群的详细信息页面。页面显示如图5-5所示:

    其对应的JSP代码如图5-5.1(De overeenkomstige JSP-code in figuur 5-5.1)

    在后台管理中的界面中挑中留言管理按钮,就会跳转到对应的资料路径,就会进入到查看没有特殊权利的人群的留言信息页面。页面设计如图5-6所示:

    其中对应JSP代码如图5-6.1(Die de bijbehorende JSP-code in figuur 5-6.1)

    5.3.4 产品控制模块产品控制的显示(Paj pwensipal pwodwi jesyon)
    一些特殊权利人群去挑中按钮来对产品实施相关操纵,其中大都是添加修改删除搜索管理。==相当的方法是method=browseMer,页面的设计如图5-7所示:

    修改产品资料(Modifiseer produk inligting)
    跳入相应产品的具体内容侦查相信的资料。==相当的方法是 method=loadMer&id=1,页面的设计如图5-8所示:

    其中“提交”按钮的代码设计如图5-8.1:(Die “stuur” knoppie kode is as volg:)

    5.3.5 特价商品管理模块拥有特殊权利的人群对特价商品信息进行管理。==相当的可能方法为 method=browseSMer,==相当的页面显示如图5-9所示:

    其中对应的JSP代码如图5-9.1:(JSP kode een soos in figuur 5-9.1:)

    拥有特殊权利的人群挑中查看详情查看产品的详细情况,如图5-9.2:

    其对应的JSP代码如图5-9.3:

    挑中修改商品的选择,如图5-9.4(Uchukuzi iliyobadilishwa uteuzi wa bidhaa, kama inavyoonyeshwa katika Kielelezo 5-9.4)

    相应的JSP代码,如图5-9.5(Msimbo JSP, kama inavyoonyeshwa katika Kielelezo 5-9.5)

    挑中新增特价商品就能添加商品,如图5-9.6(alichagua Ongeza mpya specials wataweza kuongeza kipengee, kama inavyoonyeshwa katika Kielelezo 5-9.6)

    对应的JSP代码如图5-9.6(Msimbo wa JSP inayoendana na Kielelezo 5-9.6)

    5.3.6 订单模块拥有特殊权利的人群对没有特殊权利的人群的订单信息进行审阅和去掉控制。
    订单控制的显示中显示全部订单信息,==相当的方法为Admin/adminOrder.do? method=browseOrder,对应的页面设计如图5-10所示:

    在单子相关操作的相关资料中挑中相关资料操纵,审查单子的详细信息,==相当的磁盘文件为Admin/adminOrder.do? method=viewOrder&id=7,对应的页面显示如图5-11所示:Ukurasa ufaao inaonekana kama inavyoonyeshwa katika Kielelezo 5-11:

    5.3.7 系统用户管理模块本次毕业设计的特殊权利人群去对相关资料实施大部分系统都会进行的操纵。
    本系统的特殊权利人群的主页面,==相当的方法是 method=browseAdmin,对应的页面设计如图5-12所示:Sanifu ya ukurasa sambamba unaonyeshwa katika Kielelezo 5-12:

    修改拥有特殊权利的人群信息页面,==相当的可能方法设计是method=loadAdmin&id=2,对应的页面显示如图5-13所示:

    填加没有特殊权利的人群信息页面,如图5-13.1。

    5.3.8 商品类别管理模块拥有特殊权利的人群对商品的类别信息加以增加删除更改查看处理其对应的可能方法是Admin/adminCate.do? method=browseCate,==想当的页面设计,图5-14:

    5.4 会员子系统5.4.1 相关的显示在这个相关资料中标记有很多事实是上帝需要的可以看到的能供人们使用和坚持的。供人们使用生产选中。==相当的方法为wgsc/mer.do? method=browseIndexMer,==相当的页面设计如图5-15所示:

    其中“登录”按钮的代码是:(”Kuingia” kitufe msimbo ni:)

    5.4.2 会员注册页面查看页面的房子,请单击登录页面注册成员按钮。相应的磁盘之后的其他规则和相应的页面的图 5-16 的脸,在这里,使用系统技术 Struts 的检查数据从没有特殊权利的人群的人:

    5.4.3 搜索商品信息页面在主页面中输入要搜索的关键字,点击搜索按钮,显示相应信息。对应的磁盘文件1.输入单词搜索页,主要单击按钮搜索来显示相应的信息。相应可能方法mer.do? method=searchMer&cateid=0,在脸上 5-17 的相应计划页的显示︰

    挑选搜索结果页面以查看详细信息的另一个,相应提交磁盘嗅到植物的详细信息对应的可能方法为mer.do? method=showMer&id=1,对应显示,图5-18的纸皮上:

    5.4.4 购物车的信息页面没有特殊权利的人群查看购物车中的商品信息。对应的可能方法为cart.do? method=browseCart,相当的可能的资料显示,图5-19:

    没有特殊权利的人群在相应的设施中挑中下一步进入提交订单页面。对应的磁盘文件为cart.do? method=checkOrder,相当的可能的资料显示如图5-20:

    挑选订单键来生产制造出成订单。对应的可能方法为cart.do? method=submitOrder,==相当的资料显示,图5-21:

    5.4.5 单子操控显示没有特殊权利的人群查看订单管理界面并对订单进行相应操纵等方法。==相当的可能方法为order.do? method=browseOrder,对应的页面显示如图5-22所示:

    5.4.6 顾客留言页面没有特殊权利的人群查看和发布留言信息。==相当的可能方法为mem.do? method=browseWord,相当的页面显示如图5-23所示:

    5.4.7 修改资料页面没有特殊权利的人群更改与团体相反的东西的资料。==相当的可能方法为mem.do? method=loadMember,相当的页面显示如图5-24所示:

    6 测试与维护6.1 测试的任务及目标6.1.1 测试的任务在本系统开发完成之后,通过相应的测试方法测出系统中的错误,以减少后期时间和成本花费。
    6.1.2 测试的目标
    是为了找到系统中的错误而做的行为
    是用来发现还没找到的question

    6.2 测试方案弄这个让人熟悉的东西是为了让本人让老师让同学让人们看看可能的question。本人们所说测试进行是不停地对系统导进本人们提前写好的东西,导出本人们的提前制定好的从而验证系统的功能,进而找到功能问题。在校老师长江的方法大概有两种,这里就不继续唠叨了,就在后面再一一介绍。
    黑盒测试,用来对编写好的类进行尝试(输入测试数据,得到结果),不管程序的内容如何,只查看程序的功能是否符合规格说明书的规范,程序是可以接收输入的资料产生测试人员预定的输出信息,而且要能够保持不破坏除这个接口以外的其他部分的信息。
    结构测试,要求程序开发人员必须深刻了解程序的内部构造和逻辑处理过程,进行这种测试方法对开发人员的能力要求比较高,他们必须了解程序内部的逻辑脚本和算法每一条每一列都要清清楚楚明明白白才能顺着顺序往下执行。
    6.2.1 模块测试也叫单元测试是将每一个可以分割的程序封层一个一个的单位,然后分别审查每一个单位的能力看有没有问题、哪里不顺畅、要坚定的这行下去。
    模块测试主要由代码审查和软件测试两部分组成[1]。
    在“基于Web的农产品销售管理系统”中经常有模块测试不通,但有可能整体确定能够运行,在下次出问题,所以模块测试非常有必要,不经过它,你几乎完不成测试,更别提随后的集成测试、验收测试。
    6.2.2 集成测试本次毕业设计中在这里卡住了,为了这个集成测试,本人苦思冥想、夜不能睡,每时每刻都在想着如何才能解决,前面的单元测试保证了每个模块都能正常运行,但一到一起运行时,不是这出问题(数据交互出错),就是那出问题(模块冲突不兼容),错误报告杂乱无章,不好找到问题,心都快碎了,后来静下心来,认真研读代码,一步一步排除错误,终于找到问题所在。
    从这件事中本人们懂得了集成测试是非常有必要的,它为本人们检查并暴露了本次毕业设计中的问题,进而通过解决这些问题使程序终于能够顺利运行了,前期做的越少后期就做的越少:

    编写的测试软件较少,开销较小
    错误位置容易判断
    测试更彻底

    6.2.3 验收测试这一步是验证软件的有效性。目的是老师证明本系统能够正常运作并达到最基本的功能要求,本次毕业设计的使用是黑盒测试,最终的概率为:

    可能与毕业设计的发现可能相符合,设计的系统是可以接受的
    界面不够美观,功能有待加强,还有提升的空间

    在这一阶段测试发现的问题,仔细想想就能发现其实和需求分析阶段的报告是有关联的。所以最好就在需求分析阶段等之类的前阶段就把问题、需求弄好。否则越往后,错误修改成本越高。
    6.2.4 平行运行本人们程序员所谓的平行运行就是同时运行。本次的毕业设计和以前相似的体系功能作copy,可以来知道本人们设计的能力如何。
    6.3 设计测试方案测试方案是本次毕业设计中最重要的一部分之一,本人设计方案时,用到的是最简单的黑盒测试,并且还是简单的一些测试组成立简单的测试方案,用了一些简单的逻辑就组成了好用的测试,本人测试了数据的可用性包括但不限于长度的限制、特殊字符的应用。编写测试用例时常常遇到数据走不通,用system.out.print方法输出语句俩查看哪里是错误真的非常可悲而又可怜,测试它为什么是这里的错误,最后发现是数据库中表之间的关联导致数据紊乱今儿是这里出现错误,但也是本人的失败疏忽,不断的书写,是本人对系统有了更深的认知、更规整的思路规划与感悟,都将是本人以后要用到的都将是本人的人生宝贵的财富。
    6.4 系统维护系统维护是对后期系统的修补维持运行与升级,在你系统做好能够运行了之后,并不是说就可以万事大吉了,你往往还要不停地修改增加功能使其更好用更全面更符合客户需求,在现在不断发展的互联网落实带,万事万物包括软件都在不停的更新进步并且不断淘汰落后的陈腐的旧的事物可以预见现在新奇的好看的好用的漂亮的有很大用处的很多优点的事物在随后的一段时间里必将过时落后淘汰,例如,手机产业中的华为、小米、iPhone等不停地更新他们的产品,哪怕是刚研发出来、很新的产品对他们来说研发出来了那就过时了,在市场还没流行或刚开始流行的时候他们已经开始开发下一版本的、更新的产品了,记得在本人在公司实习的那段时候有一次加班去完成任务发现组长和老员工们还在加班,回到家之后就睡了,凌晨1:00左右发现组长的QQ还在亮着,也就是说组长还在工作,真养的奉献精神值得人们钦佩与学习,刚好明天是周六,他们却要结束现在是版本,周六加班去开发新的版本,时间很是紧张,任务很是艰巨,从这里可以看出公司的产品更新是很快的,更可以看出互联网行业的东西更新淘汰的速度是多么快啊,所以软件的维护与升级是多么的重要,它已经成为各个软件行业的最重要的环节之一了,它让本人们的系统能够正常也能运行与使用,防止用户在使用中突然出现错误bug导致系统崩溃甚至用户数据泄露从而造成巨大的损失,那么本人们的系统不仅是前功尽弃、白做了,还要承担巨量的赔偿损失费,得不偿失啊,所以再次告诫各位朋友们,做系统一定不能忽略系统的后期维护。
    参考文献[1] 孙卫琴,Tomcat与web开发技术详解[M],北京:电子工业出版社,2004
    [2] 赵瑞雪,农业企业物业管理管理系统研制[J].计算机与农业,2003,30(5):80-84.
    [3] 陆惠恩,软件工程基础[M],北京:人们邮电出版社,2005:19-20
    [4] 罗辉,web商务系统的设计与实现[J],电脑与信息技术,2008,(1):165-168
    [5] 汪泉,我国农业电子商务的SWOT分析及应对策略[J].北京农业职业学院学报, 2006,20(6):19-22
    [6] 林丽蓉,论农业电子商务与农业化[J],湖北经济学院学报,2007.4
    [7] 石见,研究和建立农产品市场信息社会服务体系[J],农业信息探索,1998,(5)
    [8] Raymond Frost. 数据库设计与开发[M].北京:清华大学出版社,2007.
    [9] 福勒.UML:精髓标准对象建模语言简明指南[M].北京:电子工业出版社.2012.70-90
    [10] Steven Roman. Access Database Design &Programming[M]. USA: O. Reilly,1999-07
    [11] DENG XF,LV XN,ZHENG SY,et al. GIS-based agricultural products safety traceability system[J]. Transactions of the Chinese Society of Agricultural Engineering,2008,24: 172 -176.
    [12] YANG XT,QIAN JP,ZHANG Z,et al. Design of agricultural product trace coding based on geography coordinate and multi-encrypt [J]. Transactions of the Chinese Society of Agricultural Engineering,2009,25( 7) : 131 -135.
    [13] LING J,XIE R,HE XT. On . net-based food quality and safety tracing technique and its implementation[J]. Computer Applications and Software,2010,27( 1) : 145 -147.
    [14] MENG M,LIANG WH,SONG QD,et al. Coding research of circulation code and back yards of agricultural products[J]. Chinese Journal of Tropical Agriculture,2010,30( 1) : 82 -85.
    10 评论 184 下载 2020-08-03 19:00:05 下载需要13点积分
  • 基于QT实现的植物大战僵尸游戏

    1 系统需求分析当可怕的僵尸入侵的时候,谁能想到,弱小的植物能承担起保卫家园的责任?也许你早听 说过那些没有脑子的僵尸席卷整个街区、吃掉一户一户屋主人的脑子的故事。但这次,你终于 要真正面对入侵自己家园的僵尸了。有僵尸在你的草坪上!
    草坪是植物们的领地。面对疯狂践踏的入侵者,植物们不惜以自己的身躯阻挡僵尸前进 的道路。可是僵尸的利齿不仅可以用来吃掉脑子,还可以用来吃掉植物。面对挡路的一切东西, 僵尸们选择:吃掉它们!
    用什么来保卫你自己的家园和脑子呢?我们只有勇气,和自己手中的那把小铲子。
    试设计游戏,并实现以下功能:

    拥有图形界面,如游戏主界面和准备界面
    能完成游戏操作,如放置植物,删除植物,生成僵尸,攻击等操作
    正确且合理的胜负判断
    实现卡牌冷却效果
    两个场景的选择,晴天和黑夜
    背景音效的实现,如碰撞,放置植物以及收集阳光等
    正确显示阳光槽,植物卡牌槽等部件
    实现九种植物和七种僵尸
    实现调试功能,按下一些按键可以执行一些特殊操作,比如快速产生僵尸和增加阳光
    实现代码层级的一些基本要求,如面向对象的继承派生多态等机制,文件操作(读取 媒体资源文件,读取记录用户名和游戏最长时间的文本文件),一些基本数据结构的使用 (如 list,map,set)等

    2 总体设计植物大战僵尸是一款游戏非常经典的益智类游戏,画风友好,玩法多样,整体逻辑比较 清晰。本次我选择使用 c++的 GUI 库 Qt 来写复现游戏。总体上来说完成了游戏加载界面,菜单选择界面,主游戏逻辑和交互界面和游戏的基本功能。由于手头的资源有限(比如植物 和僵尸的贴图)以及时间等方面的限制,本游戏实现了了七种僵尸和九种植物,以及白天和 黑夜两个场景模式,具有了一定的可玩性。
    首先谈一下我在初期设计的主要想法。我认为,同为程序,不同种类的程序的开发思路 是截然不同的。比如设计一个数据管理系统和游戏的思路是截然不同的。我认为游戏的最 大特点在于它是一种交互性极强的产品形式,而且一般工程量较大,需要兼顾内在逻辑和 外在用户交互界面,并且由于和用户的交互性极强,操作多样化,非常适合面向对象的开发 思想。因此本次自选题我选择了实现植物大战僵尸这一经典的游戏。
    基于自己的水平考虑,我选择了非常常规的经典面向对象的思路,定义良好的复用性强 的基类,如果想要添加新的对象和功能,只需要从基类派生并将新类加入生成器。在逻辑和 UI 界面的关系选择上,让每个游戏对象负责处理自己的逻辑和动画,而不是将逻辑和画面 完全分开,每回合逻辑执行完成后渲染画面。因为前者虽然效率低了一些,但是总体上说更 符合人的思路,对前期的架构设计要求也没有那么高,可以后期逐步完善,拓展性更强一 些。
    而在要求上,我完成了必须要求

    函数重载
    类的继承和抽象基类
    动态分配 内存和文件操作
    使用了 list 和 set 等数据结构

    总体上来说,需要实现的模块和功能有:

    渲染场景:包括加载欢迎界面和游戏主界面
    多种植物:游戏的主要实体对象之一
    多种僵尸:游戏的主要实体对象之一
    多种飞行物:如豌豆、孢子等,也是游戏的重要对象
    多种动画:在游戏中需要根据实物的状态来更新各种动画
    奖励物:阳光等
    多种卡片:主要指的是种植植物是选择的卡片,需要完成冷却功能

    考虑到他们都具有相同的一些特性(例如都是实体对象,都有贴图,位置,自己的主逻辑函 数函数),而且为了方便主逻辑中队每个对象的遍历(如更新状态,删除对象),因此我定义了 zObjcet 类作为共同的基类,由 zObject 类派生出其余的类别。而 zObject 类本身由 Qt 的基本 类别 QLabel 派生,因为 QLabel 本身属于最简单的基本对象,而且具有贴图,播放动图,设置 大小等基本功能,非常适合派生出其他对象并在此基础上增加功能。
    游戏的类大致结构如下图(具体结构见下方 UML 图),接下来将详细介绍程序的内容。

    3 详细设计3.1 基本对象 —— 架构、类的派生关系本游戏的 UML(缩略图)如下:

    本程序一共定义了 52 个类,除了一个继承自 Qt 最基本空间 QDialog 的 mianDialog 类用于 生成游戏基本图形界面框,其余所有类都继承自 zObject 类,而 zObjcet 类自身继承自 Qt 自带 基本类型 QLabel。
    按照功能,zObject 类直接派生出七个类,分别对应上文所说的七种实体类别和功能,七个 大类分别再派生出具体的小类别,如 zPlant 类下派生出 9 种具体的植物类,而七种基类不参与 具体的对象实例化,这样的优点是逻辑清楚,方便管理。下面我将主要介绍基类和其派生出的 七个基本大类。
    3.1.1 基类:zObject其代码实现如下:
    class zObject : public QLabel{ Q_OBJECTpublic: explicit zObject(QWidget* parent = 0); bool alive = true; virtual void act()=0; int strength = 1; zScene* scene;};
    基类 zObject 自派生 QLabel,因为 QLabel 非常合适定义基本实体:QLabel 的 SetMovie 配合 QMovie 是显示游戏动画(素材为 gif 格式)的便捷利器;而且 QLabel 也没有什么 多余的属性与方法,基本来自 QWidget,只是一个普通的窗口组件。
    bool alive,表示它是否活着。本属性不一定表示通俗意义的“活着”,比如一个动 画播放完了,我们就可以把 alive 置成 false,等着逻辑来把它删掉,可以用将本属性当作 标记,交给逻辑中专门的死亡处理机制,从外部释放掉内存空间,并把对象删除。
    virtual void act()=0。这个虚函数就是游戏内所有对象的核心逻辑函数。主逻辑的重要功 能就是调用场上一切“活着”的对象的 act()来构成整体逻辑。
    int strength 表示生命值。只有植物和僵尸有这样的属性,但是还是写进了接口。其余对 象默认置 1 即可。
    zScene* scene 提供了一个指向自己所处的 zScene 的指针,便于 act()逻辑来访 问一些全局的对象。zScene 是游戏场景类,也由 zObject 派生。由于 parent 指针指向的 是 QWidget 而不是 zScene,此处 parent 指针没法优雅的访问 zScene 的一些特殊属性。parent 强制转化为 scene 以后就没有了这个问题。
    3.1.2 场景管理类:zScenezScene 是负责管理其他类的类,在它的属性里面有包含其余类对象的容器 QList,而其 余类也有指向所在场景的指针。ZScene 派生出四个具体类:zStartScene, zStartScreen, zLawnScene, zDarkScene,分别对应开始界面,开始选关界面,白天关卡界面,和夜晚关卡 界面。
    3.1.3 主要实体类:zPlant 类和 zZombie 类这两个类具有很多相似的之处,因此放在一起介绍。zPlant 和 zZombie 是两种基本的对象, 负责派生出各种丰富多彩的植物和僵尸。其共同点是都有 virtual void hit(int damage, bool silence = true)方法,供其余对象调用,对它产生伤害。植物有表示它所处网格位置的 int raw, column,僵尸有表示它在某行上的一维位置的 double xpos,另外僵尸还有诸多特殊状态都写在 了僵尸基类里面,比如冰冻。
    3.1.4 飞行抛射类:zFlyingObjcet 类飞行抛射物类,其特点是不断被发射和碰撞判定,代表物有豌豆、火球、孢子(小蘑菇 发射的)等。其 act()较为复杂,且有对僵尸 hit()方法的直接调用。目前碰撞判定采取的是 纯一维逻辑,只判定同行上的碰撞。这里对于原游戏做了一些简化,未加入杨桃这种可以向 五个方向发射小星星的机制。
    3.1.5 动画类:zAnim 类zAnim 动画类较为简单,只负责播放动画,放完就自动销毁,没有任何逻辑处理内容。zAnim 的用途十分广泛,任何逻辑执行时都可能抛出一个或多个动画,用来可视化的展现逻辑的效果。 而动画本身用快速更新贴图和一些 gif 实现。
    3.1.6 奖励物:zBonus 类特点是响应用户的鼠标点击,目前主要是阳光,可以很容易的拓展出金币等奖励物对象。
    3.1.7 卡牌类:zCard 类放在游戏画面最左侧的植物卡槽。包括铲子也是一种卡牌。具有冷却时间、判定阳光消 耗等功能。并且由拖动放置的效果。
    3.2 多媒体 —— 丰富多彩的效果实现多媒体的实现方式主要有两方面:声音 QSound 与画面 QMovie。 QSound::play(char* path)很方便的实现了异步音效播放,只需要把 wav 格式的音效加入 qrc 资源文件,非常方便易用。由于 wav 格式的体积过大,我没有加入背景音乐播放的功能, 只实现了碰撞,射击等游戏内音效。
    QMovie 需要挂载在 QLabel 及其派生类的对象下才能播放,而由于 QObject 类派生自 生自 QLable,因此很容易实现播放动画。在表现僵尸被冰冻减速的时候,还使用了 QMovie::setSpeed(50)使动画的播放速度减半,直观的呈现冰冻。
    卡牌的冷却效果仅仅是使用了两层半透明 QWidget,这部分逻辑写在 zCard 的 act 里面。游戏开始的时候那个转场效果转变也是半透明 QWidget 制作的。
    总体上说该游戏界面比较美观,很多细节模仿原版的设计,素材也来自原游戏。
    3.3 游戏核心——逻辑与交互由上述所说,本游戏内采取了独立个体的模式,即每一个对象内可以实现自己逻辑功能(act 函数),包括碰撞判定,切换状态、播放动画、产生新对象加入 scene 等等。zScene 下面包含 每种对象的容器。既然要多态,为什么不给所有对象都弄一个容器,干脆多态到底呢?分开容 器实际上是为了让碰撞判定效率更高,比如说飞行抛射物只用关心僵尸,在进行碰撞判定的时 候只需要扫描 zZombie 的容器 Zombies 即可,像动画之类的就可以完全跳过。但是这种分离 是需要适度的。比如目前飞行抛射物对植物的碰撞判定只有火炬树桩,单独建立一个容器显然是不经济的。
    在划分实体的大类时,一个重要的划分依据就是碰撞判定的模式。比如飞行抛射物对僵尸 有碰撞判定(击中)、僵尸对植物有碰撞判定(啃咬)。而动画不参与碰撞判定,如上所说,判定 的功能由对象自身的 act()函数完成,动画类只负责贴图。这样一定程度上做到了动画和逻辑分离的模式。
    游戏的主定时器定义在各种 scene 下,每 20ms 进行一次逻辑运算和画面更新。
    代码如下:
    void zLawnScene::onTimer(){ this->removeDeath(); this->act(); this->SunFront->setText(QString::number(this->sunPoint)); this->createZombie(); if (qrand() % 521 < 1) { zBonus* sun = new zSunFall(this); Bonuses.append(sun); } this->exit->raise(); this->judge();}
    其中有一些细节操作,比如更新阳光槽的显示数值、把 UI 中的 exit 按钮提升到上面来、 随机掉落阳光……忽略以上细节部分,先关注核心逻辑部分:
    removeDeath():死亡判定函数,负责扫描各个容器,把上一回合 alive 被置为 false 的对象释放并删除,防止内存泄漏。
    act()逻辑,负责调用所有对象的 act()执行各自的逻辑。
    createZombie()僵尸产生器,负责产生当前回合的僵尸。
    judge()失败判定,判断玩家是否失败。
    以上就是主定时器的实现,可以看到由于各种复杂的操作都被封装到了各个类自己的 act() 函数中,所以非常简单。这一点体现了封装的思想。
    有关交互,Qt 有专门的窗口事件响应器和信号-槽机制对交互做出反应,然后直接把产生的 影响作用于对象,供下一回合的 act()调用来更新状态,相当于异步接受操作。但是由于主定时 器的更新时间只有 20ms,和用户交互起来非常流畅。
    而各种僵尸和植物的一些具体操作函数,主要是一些一维碰撞判定,移动位置,切换 QMovie, 发射 zFlyingObject 对象,发射 zAnim 等,属于细节问题,在此不多赘述。
    4 系统调试在游戏的调试过程中,主要发现了以下两个问题:

    最初我在将背景音乐播放加入了游戏中。但是随之而来诞生了一个问题: 由于背景音乐文件本身是 wav 格式,体积较大,加入 qrc 资源文件后会导致编译时内存不足而 失败。这一点可以通过加载外部文件解决。更大的一个问题是由于本游戏是单线程的,所有模 块运行在一个线程下,而 qt 的音乐播放机制不是很高效,会占用较多的资源,加入背景音乐后 会导致主游戏界面出现卡顿。因此我取消了背景音乐的播放功能。这一点可以考虑采用多线程 来解决,将音乐播放等多媒体操作单独写在主逻辑之外的线程,但由于当时已经属于开发后期, 重新开发多线程的架构成本太高,因此就没有具体实现。由此可见,在开始时的思考和架构的搭建非常重要。
    内存泄漏的问题。在完成了游戏功能的实现后。我开始了游戏的测试。我在游戏中留了便 于调试的后台——快捷键即可快速产生大量僵尸或者植物等。当我手动产生了大量僵尸和植物 后我打开任务管理器监视内存和 CPU 的使用情况,却发现程序的内存使用率正在以肉眼可见的 美妙 MB 级别的量级攀升,而且没有下降的势头。很明显这里发生了内存泄漏的问题。

    考虑到由于僵尸和植物都是一次性产生的,因此导致内存持续上升的应该是各种 zFlyingObject 对象,每发射一枚豌豆都会使用内存,而这些空间没有被正确释放。
    而在查看代码后,我发现了问题代码:
    while(p < FlyingObjects.count()){ if(!(FlyingObjects[p]->alive)) { delete(FlyingObjects[p]); FlyingObjects.removeAt(p); } else { p++; }}
    一开始我在此处忘记在此处写上 delete 语句,导致被删除的指针指向的内存空间没有被释 放,内存占用不断飙升。
    这一个小 bug 很快被解决了,但是我还是不放心,决定查一下程序中的内存泄漏问题, 结果发现我的程序中到处都是内存泄露,只是没有这个明显而已。最后我花了半天的时间通读 代码,修改了七八出没有正确释放内存的错误。 最后我总结了防止内存泄露的两个办法:

    任何指针在其内存空间被释放之前,都要确保其能被访问到。我现在养成了把指针写在对象的属性里的习惯,拒绝在对象某个方法里新定义指针。 因为一旦方法结束了,在方法里定义的指针变量的生存期也就过了,指针变量消失了然而 它所指向的内存空间还在,这段内存空间无法访问又占用着资源,这就是内存泄露。
    在对象的析构函数中,释放所有对象中出现过的指针的内存空间。全部!一个也不能少!这个时候手动写析构函数非常重要!而删除指针的时候涉及到野指针问题,delete 完以后就立刻把指针赋为 nullptr 即可。

    按照这两个原则,我对大部分代码都进行了改写。最后的一次测试,我布好阵型,关掉 声音,让游戏自己运行了一晚上。晚上睡觉之前程序占内存 43.3MB,早上起来以后一看还 是 43.3MB。在如此长时间的压力下还能保持稳定,我相信内存泄露问题已经被我消灭了。
    以上两个问题只是 debug 中一个有代表性的小环节,还有若干次性能优化、压力 测试,就不再赘述了。通过这样一个较大型项目的编写,我深刻感到写出高效,优美的代码是 一件需要非常高的技巧和反复锻炼的过程。而完成代码后并不是万事大吉,多种方式的测试对于成熟产品的开发具有十分重要的意义。
    5 测试结果与分析作为游戏的测试,就是一遍一遍的运行+花式玩耍。这一点我在后期进行了较多的测试, 例如长时间运行,同时产生多个对象等。经过测试和修改,程序已经能够在比较极端的局面 下教稳定运行。以下是运行界面的一些效果:
    为了方便测试,我定义了一些快捷键,用于参考:

    数字键盘 1:产生普通僵尸
    数字键盘 2:产生旗子僵尸
    数字键盘 3:产生路障僵尸
    数字键盘 4:产生铁桶僵尸
    数字键盘 5:产生铁门僵尸
    数字键盘 6:产生撑杆僵尸
    数字键盘 7:产生报纸僵尸
    数字键盘 8:增加 100 点阳光
    数字键盘 9:跳过准备阶段,进入僵尸全面进攻状态

    加载界面

    选择场景界面,有两个场景可供选择,左下角显示从 user.txt 读取的用户名和最好时间。

    游戏界面 白天 多种僵尸和植物





    游戏界面 黑夜



    僵尸潮测试高负荷下运行


    失败界面

    高负荷运行时僵尸潮内存和 CPU 占用

    6 总结总体上说这次大作业给我带来了很大的收获和挑战,我在上面投入了非常大的精力,前前后后大约写了五周左右,也对于程序开发设计有了全新的认识。
    在选题目时,我一开始的想法就是做游戏,而查询资料后选择了据传闻是“最好的 c++ GUI开发库”Qt。通过一段时间的自学后,我选择了最开始的题目:“小游戏 2048”.这个游戏非常简单,也很容易上手,结果导致我在三天内就把它完成了,整个项目也只有大约 1000 行左右的的代码。处于希望搞点大事情的心态,我选择放弃了这个项目,目标转向了现在这个较复杂的游戏植物大战僵尸。
    Qt 库本身就是一个非常精致漂亮的 C++产品,通过学习 Qt 的使用,我对于 C++里面的一些机制例如重载,流等有了更深刻的认识,也学习了全新而威力巨大的信号-槽,事件等机制。而使用 Qt 开发这个游戏的过程中,更是一遍一遍地虐自己的过程。从开始的毫无思路,到四处找代码学习,再到写出来的代码一团糟乱跑不起来,再到能跑起来后各种奇形怪状的 bug,这个过程让我痛并快乐着。当项目成功运行的一刹那,喜悦和激动让我感到极大的幸福和满足感,之前的连续五六个小时的修改,debug,推倒重来带来的疲倦和挫折感一扫而空。我想这就是这样一段开发经历里给我带来的最大精神收获。
    而回到知识能力层面,通过这样的一个项目,我的读代码,写代码,debug,测试能力都得到了极大的提升,也提高了我的自己解决问题的能力,比如搜索,和同学讨论,看书等。通过这样一个项目的锻炼,我明白了 C++是一个威力巨大的武器,其中的多样的机制例如重载,继承,派生和多态的用处极大,熟练使用这些机制能够很大程度上影响开发的效率,提升代码的质量。比如再开发完游戏后,我将第一个大作业成绩管理系统也移植到了 qt 平台上,实现了 GUI 界面,而由于这个项目的开发,我只用了一天的时间就重构了项目。
    13 评论 278 下载 2019-02-25 09:52:12 下载需要15点积分
  • 基于JAVA的仿QQ聊天器

    第一章 引言本系统是基于java开发的聊天室。有用户注册、用户登陆、修改密码、忘记密码、添加好友、用户聊天、群聊功能。如果服务器还没有启动,则客户端是不可以登陆、注册、忘记密码,如果在运行过程中,服务器断开则系统会有提示,聊天对象如果下线发送消息后会有弹窗提示,添加好友后有是否添加好友成功提示。
    第二章 概要设计2.1 使用平台及技术此项目运行在Windows 10上,使用Eclipse作为IDE,用MySQL作为数据库。以Java为主要设计语言。
    2.1.1 Java的优点
    简单性
    Java实现了自动的功能收集,简化了内存管理的工作,这使程序设计更简便,同时减少了出错的可能。

    面向对象
    Java提供了简单的类机制和动态的架构模型。对象中封装了它的状态变量和方法。很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。
    Java同样支持继承特性,java的类可以从其他类中继承行为,但java只支持类的单重继承,即每个类只能从一个类中继承。
    Java支持界面,界面允许程序员定义方法但不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。

    多线程
    多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。多线程保证了较高的执行效率。

    安全性
    用于网络、分布环境下的java必须要防止病毒的入侵,java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。
    2.1.2 MySQL介绍MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
    MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
    MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
    2.2 环境的搭建过程2.2.1 Eclipse的安装在 https://www.eclipse.org/downloads/ 中选择64bit的选择下载安装到本地D盘。
    2.2.2 MySQL的安装在 https://www.mysql.com/downloads/ 中选择Microsoft Windows版本下载到本地,然后安装(按默认安装即可),设置密码MySQL Root Password并记住。
    2.2.3 JDBC驱动包的下载与引入由于Eclipse不自带JDBC驱动,然而JDBC驱动是Java连接数据库必要的包,因此按以下步骤下载引入包。

    JDBC的下载
    在浏览器输入 https://dev.mysql.com/downloads/connector/j/ ,选择zip文件下载到本地,解压到合适的位置。

    JDBC包的导入
    在项目处右键 ->Build Path ->Add External Archives ->选择下载好的jdbc驱动包.jar文件 ->打开。
    2.3 功能和设计方法总体而言,在客户端:当用户登录后,生成唯一的socket, 存放在Client实体类中,在整个客户端就一个Client类和一个socket。有一个窗口控制器——ChatUIList,用来记录用户和好友聊天框是否打开,当收到消息后,首先在ChatUIList中查询是否有好友的窗口,如果没有则新建聊天框弹出并显示消息,如果存在与好友的窗口则将消息追加到原聊天框并重新着重显示该窗口。在客户端还拥有一个“命令控制中心”——ChatTread类,在ChatTread类中判断并处理来自服务器中的命令(消息),如果是“message”那么客户端收到是来自好友的消息,如果是“requeste_add_friend”则是好友申请命令,类似有“WorldChat”, “accept_add_friend”, “refuse_to_add”, “changepwd” 等命令。在服务端:有多个socket,用SockList管理连接成功的用户名及其socket。同样在服务端也有一个“命令控制中心”——ServerTread类,它负责处理来自客户端的命令(消息),判断命令的类型,并正确处理他们,给出处理结果和判断是否处理成功,将处理后的命令转发给正确的用户。
    2.3.1 注册功能设计一个注册UI(RegisterUI)类,在打开程序后,模仿QQ在左下方有一个注册按钮,点击注册按钮后弹出注册页面,用户填完必填信息后由客户端将命令发送给服务端(如果服务器在线),服务器收到“register”命令后,连接数据库判断,如果注册成功则返回注册成功消息并弹窗提示,如果失败则弹窗提示注册失败。
    2.3.2 登录功能打开客户端后,类似QQ有登录按钮,当用户填完用户账号和用户密码并提交后,客户端将登录请求发送给给服务端判断(如果服务端在线),如果密码正确则用户登录成功,显示朋友列表(FriendsUI),否则提示密码错误或账号不存在。
    2.3.3 忘记密码在客户端右下侧有忘记密码按钮,用户点击按钮后弹出忘记密码页面(ForgetUI),用户填写用户账号后客户端将消息发往服务器,服务器在数据库中检测该账号是否存在,如果存在则显示提示问题,如果不存在则提示账号不存在。用户填写完后续相关信息后,点击“重置密码”按钮后,如果找回密码答案正确则向服务器发送修改密码请求,如果失败则弹窗提示密码错误。最后服务器将处理结果(修改密码是否成功)返还给客户端。
    2.3.4 单独聊天(私聊)用户登录成功后,双击好友后,首先判断用户与该好友是否有聊天框存在,如果不存在则创建新的聊天框(ChatUI)并在ChatUIList中登记,如果存在则将改聊天框突出显示。用户可以再聊天页面(ChatUI)发送消息,如果好友不在线,服务器会返回好友不在线提示,客户端弹窗提示,如果好友在线收到消息则无提示(类似Linux,没有消息就是好消息)。好友收到消息时,在ChatUIList中查询是否有与该好友的聊天窗口,如果没有则新建窗口显示并在ChatUIList中注册,如果存在则直接将消息追加到聊天窗口上并突出显示。
    2.3.5 多人聊天(群聊)这里实现的多人聊天式世界喊话,即在线用户都能收到世界喊话的消息,没有好友限制,实现与单独聊天类似。不同的是,服务器收到“世界喊话”命令后,在SocketList中查询当前在线用户,并将世界喊话消息发送给这些用户。
    2.3.6 添加好友在好友列表页面左下角有添加好友按钮,点击该按钮后弹出添加好友框(AddFriendUI),在添加好友框中重复输入两次欲添加的好友name便可向服务器发送好友请求。当用户收到好友请求后,同意或拒绝都像添加方反馈,添加成功后重新登录便可刷新好友列表。
    2.3.7 修改密码在好友列表右下方有修改密码按钮,点击该按钮后弹出修改密码框(ChangePwdUI),在这里只需要重复输入两次新密码即可修改密码,是否修改成功服务器都会做出应答,客户端有弹窗提示。在服务端对数据库进行操作,由于可能数据库会出错,如果数据库未成功修改密码,那么要提醒客户
    第三章 详细设计3.1 流程图介绍3.1.1 系统总体结构设计
    3.1.2 系统主体处理流程
    3.1.3 系统流程逻辑
    3.2 主要类图说明3.2.1 客户端中主要类图3.2.1.1 UI类图
    3.2.1.2 消息处理、控制类图
    3.2.2 服务端中主要类图3.2.2.1 UI类图
    3.2.2.2 消息处理、控制类、数据库相关图
    3.3 数据库表展示数据库名为myqquser, 此数据库中若干个表,一个用户表(tb_user),用来存储用户的信息,如用户名,用户密码,用户问题,用户答案;每一个用户有一个好友表,好友表里存着用户的好友名。
    3.3.1 数据库构成截图此时数据库中有三个用户分别为inforSec、 zzz、sdust,tb_user中存放着用户的信息,inforSec_friends中存放着inforSec的好友信息,zzz_friends存放着zzz的好友信息,sdust_friends中存放着sdust的好友列表。

    3.3.2 用户表(tb_user)的结构及存放的数据
    3.3.3 某一用户好友表结果及数据
    3.4 主要算法、类的描述3.4.1 客户端中主要类、算法的描述3.4.1.1 UI类MainFrame、FriendsUI、ChatUI、ChangeUI、AddFriendUI、RegeditUI、ForgetUI分别为主窗口页面、好友列表页面、聊天窗口、修改密码窗口、添加好友窗口、注册窗口、忘记密码窗口。这一部分主要是显示处理和逻辑处理。
    3.4.1.2 消息处理、通信类ChatUIList类主要记录客户端打开的聊天页面,处理与好友的消息弹窗。Client类中有socket负责和服务器通信。ChatTreat类是客户端的消息处理中心,处理来自服务器的各种消息并做出相应。
    3.4.2 服务器端主要类、算法的描述3.4.2.1 UI类服务器端只有一个UI页面——StartServerFrame,因为服务器没有太多消息要显示,所以一个启动窗口即可。
    3.4.2.2 消息处理、通信类Service类中有socket,负责与客户端建立通信,每个建立的通信都存储在SocketList中,供服务器查询哪些用户上线。ServerThread类是服务器端的控制中心,负责处理来自用户端的消息,并转发给正确的用户,有时还会对数据库进行操作。
    3.4.2.3 数据库处理相关DBHelper类负责和数据库建立连接,UserService类负责处理具体的和数据库交互的内容,如查询用户账号和密码是否匹配、修改密码、注册用户、忘记密码、添加好友等操作。
    第四章 测试结果与截图注册用户


    登录

    忘记密码,修改密码

    用户聊天,添加好友,群聊

    第五章 总结这次设计经过不懈的努力,程序基本满足聊天的需要。完成后的程序实现了用户注册、用户登录、忘记密码、写消息、发消息、回复、群聊、添加好友、修改密码等功能。给用户较好的体验。完成了登录页面、注册页面、好友列表、忘记密码、修改密码等页面框架,使得程序较美观。由于一个人完成这个项目,时间比较紧张,对网络传输的一些知识不太熟悉,所以没有完成文件传输功能。
    完成的项目功能不太完善,虽然完成了群聊(世界喊话),但不能和好友列表中的具体几个人进行群聊。在进行项目时候,UI部分代码的编写不够仔细,所以部分UI不够美观。世界喊话的实现太过草率,整个页面的利用率低。后续可以在世界喊话页面增加群聊功能,在数据库中为每个人创建一个群表,记录每个人加入的群,完成真正的群聊。对UI部分进行优化,使整个项目更美观。
    程序设计期间,通过询问老师、同学和网上搜索相关解答等多种方式学习到很多课堂上没有的知识,增强了解决实际问题的能力。在此之前,对于java编程技术没有很深入的认识,对其工作方式和原理缺乏透彻的认识。在这段时间里,我认真的学习了java语言开发,对编程思想有了进一步的体会,养成了一些良好的编程习惯。程序虽然完成了,但是距离完美还存在一定的差距,用java开发大型项目还有很多我需要去努力学习的知识。希望自己能不断学习和实践,争取以后做得更好。
    4 评论 132 下载 2019-02-11 14:26:12 下载需要12点积分
  • 基于C#的聊天程序

    1.引言1.1目的编写详细设计说明书是软件开发过程必不可少的部分,其目的是为了在完成需求分析说明书的基础上完成需求分析说明规定的各项模块的具体实现的设计工作。
    1.2定义套接字Socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
    端点IPEndPoint:由IP地址和端口号构成,端口对应进程。这两个组合起来可以唯一的标识网络中某台主机上的某一个进程。这样就有一个唯一的身份标识,后面可以进行通信了。
    TCP协议:TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议。
    回环端口:即本机的一个虚拟端口,为IPAddress.Loopback,其IP地址为127.0.0.1
    2.总体设计2.1软件描述荆棘鸟聊天程序是基于Socket设计的一个windows桌面端多人聊天程序,采用C/S架构,服务器可以自定义监听的IP(可设置为仅能本机使用或允许联机使用),客户端也可以设置服务器的IP,但是客户端设置的IP必须与服务器监听的IP相同,否则会连接不上服务器,如果不自己设置IP,默认为只能本机使用,即127.0.0.1.
    2.2设计方法本软件采用传统的软件开发生命周期的方法,采用自顶向下,逐步求精的结构化的软件设计方法
    2.3软件结构2.3.1总体结构
    3. 模块设计说明3.1程序描述本程序分成两部分,分别是服务器端和客户端。服务器启动后,用户使用客户端连上服务器后即可进行多人聊天 。在一台机器上,服务器只能启动一个,而客户端可以启动很多个,但是客户端的总数目不得超过100个。对于服务器和客户端,均采用多线程异步处理机制,在关闭程序后会自动回收所有子线程。
    3.2功能本程序能实现多人聊天功能。服务器打开后,客户端需要通过设置正确的服务器IP来连接服务器,服务器也可以设置自己能监听的IP地址进行监听,如果客户端与服务器均不手动设置IP,那么默认的IP是本机的回环地址(IPAddress.Loopback),而且客户端的IP和服务器端的IP必须设置为相同的才能正常连接上。客户端连接服务器的要求是必须设置一个唯一的用户名,用户名若重复则会进行提示并需要重新设置一个唯一的用户名后才能连接上服务器。同时客户端也会检测用户名是否包含敏感词汇(会影响程序正常运行的词),若包含也需要重新设置用户名。客户端连上服务器后,能显示服务器状态信息(服务器是否关闭)、是否有用户上下线以及其他用户发出来的消息。服务器端能显示用户的连接与下线信息,以及服务器的状态信息。同时服务器也能恢复默认监听的IP地址,即IPaddress.Loopback(127.0.0.1),且服务器会显示当前监听的IP地址。
    3.3 性能对于1M的带宽的网络

    客户端连接上服务器的时间在10秒以内。
    客户端间通信的时间间隔不得超过10秒。

    3.4 输入项
    服务器:需要输入(选填)监听的IP,如果不填则默认是本地回环端口127.0.0.1,输入的IP必须为格式正确且服务器所能监听的IP,否则将会进行提示。
    客户端:

    需要输入唯一的用户名(前17个字符不能为“Server has closed”,否则会影响程序正常运行),且用户名不能为空。连接上服务器后用户名将不能进行修改。需要输入服务器的IP以进行连接,格式和服务器的监听的IP相同,且客户端输入的IP必须和服务器监听的IP相同,否则将无法连接上。连接上服务器后服务器的IP不可修改。允许在输入框中输入文本信息以进行多人聊天,但是仅限文本信息。

    3.5 输出项
    服务器 :

    能显示当前监听的IP,如果不自己设置监听IP,则默认为127.0.0.1。能显示服务器的状态,即时启动还是关闭。能显示客户端连接服务器的状态,当客户端连接或者断开连接时,服务器端会显示。
    客户端:

    显示服务器状态信息,即服务器是否已经关闭。显示其他用户发来的信息,即进行正常的聊天。显示其他用户的上下线信息。

    3.6 流程逻辑首先启动服务器(服务器程序打开后会自动启动,此时监听的端口为127.0.0.1)。然后启动客户端,设置用户名,设置服务器的IP(如果不设置则默认为127.0.0.1)。点击客户端的连接服务器按钮,检查用户名是否合法,不合法则直接终止并需要重新设置用户名后重试,若用户名合法,则检查客户端设置的IP格式是否正确,若不正确则中断连接并需要重新设置服务器IP。然后进行客户端与服务器端的连接。若客户端与服务器设置的IP不一样,或者服务器未开启,则会提示连接失败,服务器未打开。
    正常连接上后,其他在线的客户端会提示此用户上线了。服务器可以点击关闭服务器,此时所有客户端都会提示服务器已关闭并自动关闭客户端与服务器的连接。客户端也可以点击退出聊天,可以关闭与服务器之间的连接,此时服务器端与其他在线用户均能收到此用户已下线的消息。
    服务器端在服务器开启后会显示当前所监听IP,若选择重置,则会先断开所有客户端的连接,然后重新开启服务器,并监听所设置的IP,显示的当前监听的IP也会随之改变。此时所有客户端全部被强制下线,必须设置与服务器相同的IP并重新连接服务器后才能继续进行聊天。
    3.7 接口
    当新用户连接上服务器后,会给服务器发送 “用户名”+“$”,服务器读取到这种格式的数据会将’$’去掉之后将其当成新用户进行保存,与该用户的套接字一起以键值对形式保存在字典中,并将上线消息进行转发。
    当用户需要退出聊天时,会给服务器发送“$”,服务器读取到仅有一个‘$’的数据时会将对该用户的连接关闭,并将其从用户字典中删去,且将用户下线信息进行转发。
    clientSocket为客户端中用来连接服务器的套接字,客户端用clientSocket != null && clientSocket.Connected根据情况判断是否连接上了服务器或服务器是否关闭。
    当服务器向用户发送的消息为“#用户名#”的时候,表示该用户名已经有人使用,需要客户端更换用户名后才能重新连接。
    当服务器向客户端发送的消息的前17个字符为“Server has closed”时,表示服务器已经关闭。
    在服务器端代码中,类Broadcast的成员函数PushMessage(String msg, String uName, Boolean flag, Dictionary<String, Socket> clientList)是用来对所有客户端进行转发信息的。当flag为false时表示是系统消息,直接发送msg+DateTime.Now.ToString(),而如果是其他客户端发送的聊天信息需要转发时,则设置flag为true,会发送uName: msg+ DateTime.Now.ToString()。

    3.8 注释设计函数模块的注释放在函数的头部,关键语句的注释放在语句的上面一行或者语句的后面。对所有参考资料均在注视中标明来源网址,并抄下或者自己写下了关键性的注解。
    3.9 限制条件本程序只能在64位windows操作系统下运行,且该系统必须装有.NET 4.5及以上的框架。
    3 评论 62 下载 2019-08-05 11:46:04 下载需要10点积分
  • 基于C#和Sql Server的图书管理系统

    1 课程设计意义与目标1.1 课程设计的意义《可视化编程技术课程设计》是在学生学习完《可视化编程技术》以后进行的设计性集中实践课程,通过课程集中实践,目的是使学生能加深对理论教学内容的理解,学会可视化编程技术的综合应用,培养学生分析问题的解决问题的能力。
    1.2 课程设计的目标通过课程集中实践,要求学生加深对讲授内容的理解,累积经验、学会独立上机调试程序;并且逐步达到综合运用封装、继承和多态等C#难点知识,更深地理解面向对象程序设计的基本概念与方法,从而学会利用C#语言解决一般应用问题,能设利用可视化编程技术开发复杂和综合性的计算机管理信息系统,并为后续专业课程的学习奠定程序设计基础。
    2 课程设计的题目2.1 设计题目概述
    图书管理系统
    2.2 开发环境搭建
    开发语言:C#
    开发工具:Visual Studio 2010
    数据库管理工具:SQL Server 2008

    3 系统的设计与实现3.1 物理数据模型设计




    3.2 主要界面设计
    界面中用了textbox,label,combobox,textbox用于获取数据输入,combobox用于数据选取,button用于单击事件。在用户类别可以选择用户类型,管理员。

    界面中用了textbox,label,combobox,dataGridView,textbox用于获取数据输入,combobox用于数据选取,button用于单击事件,dataGridView用于数据显示。
    功能:可以增加,修改,删除图书。

    界面中用了textbox,label,combobox,dataGridView,textbox用于获取数据输入,combobox用于数据选取,button用于单击事件,dataGridView用于数据显示,用户借书,管理员可以查看用户的借书记录。

    密码修改:可以更改当前用户登录的密码,旧密码符合条件,新密码和旧密码不能相同,新密码和确认密码的相同的条件。

    界面中用了textbox,label,combobox,dataGridView,textbox用于获取数据输入,combobox用于数据选取,button用于单击事件,dataGridView用于数据显示,用户借书,管理员可以查看用户的借书记录。模糊查询在下面有具体介绍。

    管理员信息管理:可以对管理员进行增添改查。

    书库管理:对书库进行增删改查。

    书库查询:按地区分类和按书库编号分类,第二个combobox会自动加载所有记录的值供你选择。

    书库管理:用来增加书库,删除,修改。

    用户管理:对用户的增删改查。

    用户登录之后的界面。

    管理员登录之后的界面。
    4 调试过程中出现的问题及解决办法4.1 数组索引超出界限解决方法:利用断点调试,重新赋值。

    4.2 从试图获取数据时,应添加新的字段
    5 个人体会及建议在这次课设中,基本都是在学习新知识的过程,从powerdesigner到动软生成软件,让我知道了这个工具的强大之处,渐渐开始会用一点,在第一天晚上想重做一遍学生信息管理系统,不料,动软生成的路径没改,直接给覆盖了,所以只能重头再来,在这时就有想法想做个不一样的系统,上学期用C++做了个图书管理系统,有点印象,就选择做这个,一开始一直模范着你给的day1,day2,day3,看不懂BLL,DAL,MODEL之间的关系,经过思考,理解了他们之间的关系,BLL负责储存方法相当于API,DAL负责储存数据,MODEL负责各个对象的类,后面理解了就开始自己写,用户负责借书,用户的增删改,添加用户,管理员负责查询书库,书库的增删改查,查询图书,图书的增删改查,借书记录的增删改查,在这个过程中不仅了解了动软生成软件的机制,而且可熟练的利用这个工具,在这个工具的基础之上,我写出了更多好用的函数供自己使用。在windows应用开发上了解更多控件和控件属性的使用和结合,可以做出功能和界面相对完整的程序,总之,在这次课设中受益匪浅。
    16 评论 473 下载 2019-03-10 21:28:03 下载需要13点积分
  • 基于Android系统手机通讯录管理软件的设计与开发

    摘要谷歌在安卓领域投入了大量精力来开发,使得安卓技术得以广泛推广,现安卓移动平台设备在市场上已经得到大量推广及普及。在Android移动终端操作系统的快速发展,Android的各种手机软件也大量增长。当然,在手机终端中,手机通讯录是手机终端必不可少的基础功能,其质量直接影响着用户对手机使用的体验与感觉。手机通讯管理软件不仅仅只是能够简单添加联系人以及联系方式的功能,而今已发展成为多种形式,丰富了联系人的信息,存储了更多的内容。此课程设计研究的这个项目,主要实现添加联系人的多种联系方式的功能。
    本软件采用Android Studio+Android SDK集成环境,应用程序编程语言采用Java高级语言开发。通过对通讯录中的联系人的管理,来方便用户通讯更加便捷,联系人的数据保存更加安全。在对Android手机通讯管理软件进行详细的系统设计时,对功能进行详细的划分并对其功能做了详细的介绍,列出了一些主要功能流程图。
    关键词:通讯录 Android 数据库 SQLite
    第一章 绪论1.1 项目研究背景经过多年的发展,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。
    Android是一套真正意义上的开放性移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Android最大特点在于它是一个开放的体系架构,具有非常好的开发和调试环境,而且还支持各种可扩展的用户体验,Android里面具有非常丰富的图形系统,对多媒体的支持功能和非常强大的浏览器。
    Android平台的开放性等特点既能促进技术的创新,又有助于降低开发成本,还可以使运营商能非常方便地制定特色化的产品。
    1.2 项目研究的目的及意义随着4G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。在Google和Android手机联盟的共同推动下,Android在众多手机操作系统中脱颖而出,受到广大消费者的欢迎。
    手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。根据手机功能使用调查显示,有9成以上的消费者使用手机通讯录功能。随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向发展。通讯录从无到有,大大丰富了内容,同时结构也发生了革命性变化,而且随着手机的发展,相信更优秀的通讯录会越来越受到社会各层人士的喜爱。
    1.3 系统主要实现内容通过对Android技术的相关研究,了解Android源码实现原理以及过程,从而设计出一款能够使用的手机通讯录。
    这款手机通讯录实现的相关内容如下:

    简洁、实用的操作界面
    联系人的增删改查
    分类的增删改查
    呼叫联系人
    登录、注册、修改密码
    群组的增删改查
    导入导出联系人
    支持模糊查询手机通讯录

    第二章 系统分析2.1 系统可行性分析2.1.1 技术可行性Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java 应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。
    本软件用的是Java开发语言,在Android Studio集成开发环境下,调试容易。当前的计算机硬件配置或则现有安卓手机的硬件配置也完全能满足开发的需求,因此技术上是绝独可行的。
    2.1.2 经济可行性开发该系统所需的相关资料可以通过已存在的相关系统进行调查采集,所需的软件系统、硬件平台等都易于获得,且不需要Android平台机器,用模拟器即可实现开发研究,开发成本低,容易实现,从经济角度来看,该系统可行。
    2.1.3 操作可行性不管是安卓平台的手机,还是计算机,其成本的下降,导致计算机,安卓手机购买成本的降低.这套系统是利用自己的计算机,且使用安卓模拟器,使开发出来的系统有友好的用户界面、操作简单,因此在操作上是可行的。
    2.2 Android通讯录的使用意义该系统针对的主要用户是Android手机用户。Android手机通信管理系统包括以下主要内容:联系人增删改查、呼叫联系人、分类增删改查、多条件搜索、导入导出联系人、修改密码等功能。要设计一个良好的手机通讯录,就必须首先明确该应用环境对系统的要求。
    第三章 系统概要设计3.1 系统总体设计Android手机通讯管理软件主要功能模块包括:联系人增删改查、呼叫联系人、分类增删改查、多条件搜索、导入导出联系人、修改密码等。

    3.2 处理流程设计3.2.1 业务流程图用户首次进入手机通讯管理软件后,会进入用户注册界面,当用户注册成功之后,输入密码即可看到联系人列表界面。联系人列表界面右下方显示增加联系人按钮。上方可以进行联系人的多条件搜索。同时长按某个联系人可实现编辑删除功能。当然点击联系人也可以看到详细信息。界面中显示我的群组列表,打开之后即可进行群组的增删改查功能。点击菜单键,显示通讯录的导入导出功能以及修改密码功能。
    3.2.2 数据增加流程图添加联系人时,数据由用户输入,点击确定按钮,判断数据是否合法(及用户名是否为空),合法则插入到数据库;不合法,提示错误信息,让用户重新输入。流程如图所示:

    3.2.3 数据修改流程图编辑联系人时,点击编辑联系人菜单,输入修改后的数据,点击确定按钮,判断数据是否合法,合法,则更新数据库;不合法,则返回错误信息。 流程如图所示:

    3.2.4 数据删除流程当用户选定一个联系人时,单击删除联系人菜单,提示用户是否删除,点击确定按钮,则从数据库中删除此条记录。数据删除流程如图所示:

    3.3 数据库设计3.3.1 SQLite数据库简介SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低。
    本系统采用的是Android系统自带的SQLite轻型数据库数据库。因此占用资源非常小。
    3.3.3 数据库表结构首先创建数据库,在数据库中创建表用来存储联系人数据,其中包括联系人姓名、手机号、群组ID、地址等联系方式。创建群组表用来保存ID和群组名称等信息。两个表联合配合。表结构如图所示:

    第四章 系统详细设计4.1 联系人浏览模块进入手机通讯管理软件后,看到的第一个界面是联系人列表界面。该列表是由ListView控件生成的,打开数据库(如果数据库不存在则创建数据库,并创建数据表),查找数据库中所有的联系人,并把联系人姓名和移动电话号码以及职位这填充到ListView的adapter中。每一行显示一个联系人的姓名和手机号码,联系人的显示的顺序是根据插入数据库的顺序显示的。点击某个联系人会进入查看联系人界面,可以查看联系人的详细信息,对联系人进行编辑、删除、拨打电话、导入导出通讯录等。

    点击[菜单]按钮时,就会显示主菜单项,其中包括:修改密码、导出数据、导入数据。
    点击添加按钮,会进入添加联系人界面,可以输入联系人相关信息,完成联系人添加功能。点击上方搜索栏目,会进入联系人查找界面,可以进行联系人查找,搜索想要找的联系人。
    点击菜单按钮,打开修改密码、导出通讯录、导出通讯录等功能。

    长按列表的某一行时,会弹出长按菜单,其中包括:拨号、编辑联系人、删除联系人。点击查看联系人菜单会进入查看联系人界面。点击编辑联系人菜单会进入编辑联系人编辑界面。点击删除联系人时,会弹出对话框,询问是否删除联系人,点击确定,则从数据库中删除该联系人。

    4.2 查看联系人模块在联系人浏览界面点击某个联系人,则会跳转到该界面。该界面使用TextView把从数据库中调出的联系人的详细信息显示出来,这里面包括联系人姓名、手机号、地址等详细信息。

    4.3 编辑联系人模块编辑联系人界面使用EditView控件显示并修改联系人的详细信息。联系人的所有信息,处于可编辑状态,手机号和座机号的EditView设定为只能输入数字。修改完信息后点击确定按钮,触发确定按钮点击监听事件,从而对数据库中该联系人的信息进行更新, 然后自动返回联系人浏览界面。点击取消按钮会返回联系人浏览界面。

    4.4 查找联系人模块这里采用的查找方法是SQL模糊查询,可以只输入联系人姓名中的一部分,即可查找到所有包含该部分的联系人,并在ListView中显示出来所有的联系人的姓名和手机号码。可实现查找职位、手机号码、名字等信息。

    4.5 修改密码点击菜单,可以查看该软件的修改密码、导入导出等情况。并可实现全部功能。

    4.6 分类管理点击我的群组界面,可以查看群组并且显示群组。在里面可以对群组进行增删改查操作。
    94 评论 386 下载 2019-01-30 17:27:39 下载需要13点积分
  • 基于JAVA EE的失物招领系统

    摘 要随着社会、经济和科学技术的不断进步发展,快节奏的生活方式让学生在校园生活中频繁出现丢失物品的状况,使学生遭受了经济和精神上的伤害。如今,丢失物品已经成为一个普通存在的问题,追寻一种高效率且有秩序的失物招领管理方式是当前社会共同向往的。失物招领工作信息化管理的实现有了必要性,只有信息化手段的介入,才能成为失物招领的一个方便可行的解决方案。本系统设计了基于JAVA EE开发的嘉园失物招领系统,失主可以通过网络进入到本系统的Web客户端查询自己丢失的物品是否已经发布到失物招领系统上,或者可以发布自己丢失的物品信息,使拾取到物品的人可以联系到失主,捡到物品的人同样可以发布拾取物品信息。管理员通过系统Web管理后台对寻物信息,招领信息,失物类别进行管理。一个良好的信息交流平台,使师生和工作人员能够及时找到失物,给校园生活带来了极大的方便。
    关键词:失物招领,系统设计,Web端,Java语言
    AbstractWith the continuous advancement of society, economy and science and technology, the fast-paced lifestyle has caused students to frequently lose items in campus life, causing students to suffer economic and mental damage. Nowadays, lost items have become a common problem. Pursuing an efficient and orderly management method of lost and found is the common aspiration of the current society. It is necessary to realize the information management of lost and found work. Only the intervention of information technology can become a convenient and feasible solution for lost and found. This system has designed the Jiayuan Lost and Found system based on JAVA EE development. The owner can access the Web client of the system through the network to check whether the lost items have been released to the lost and found system, or can publish the information of their lost items. The person who picks up the item can contact the owner, and the person who picks up the item can also post the items information. The administrator manages the search for information, claim information, and lost property category by web management backstage. A good information exchange platform enables teachers and students and staff to find lost property in time, bringing great convenience to campus life.
    Keywords: lost and found, system design, Web, Java
    引 言在如今信息发达的时代,快节奏的生活方式让学生在校园生活中频繁出现丢失物品的状况,使学生遭受了经济和精神上的伤害;从古至今,丢失物品就是一个普通存在的问题,追寻一种高效率且有秩序的失物招领管理方式是当前社会共同向往的。失物招领工作信息化管理的实现有了必要性,只有信息化手段的介入,才能成为失物招领的一个方便可行的解决方案。一个良好的信息交流平台,使学生失主能够及时找到失物,给校园生活带来了极大的方便。
    本系统采用了基于JAVA EE开发的嘉园失物招领系统,此失物招领系统是为失主和捡到物品的人搭建的一个信息交流平台,失主可以通过网络进入到本系统的Web客户端查询自己丢失的物品是否已经发布到失物招领系统上,或者可以发布自己丢失的物品信息,使拾取到物品的人可以联系到失主;捡到物品的人同样可以发布拾取物品信息;管理员通过系统Web管理后台对寻物信息,招领信息,失物类别进行管理。
    第1章 绪论1.1 项目背景当今,各大高校地域范围广、人口密度大,在校园生活中,学校师生经常来往于教师、图书馆、食堂等场所,随身物品如书籍、钥匙、饭卡、银行卡等生活用品难免容易丢失。即使有时丢失的是一些小物品,却可能对于失主来说有特别的意义和重要性或者包含失主的重要隐私。在信息技术时代,传统寻物招领方式已经不能满足人们的需要。传统张贴寻物启事、招领启事,其效率低、保密性差、管理不集中。易使失主遗忘,难以获取相关信息;从而给失主造成不必要的经济损失,同时也增大了管理人员的工作量。随着信息技术的迅速普及, 校园也慢慢地利用信息化技术进行管理[1]。开发校园失物招领系统,极大地提高认领率,减小失主经济损失,从而能够更好的服务于学校师生和工作人员。
    在国内外,失物招领系统在一些地区已经有了一定了发展,而且各地区有独自的特色的失物招领管理系统。相对于了国内,国外的失物招领系统开发较早,关注性强,用户通过账号密码登录系统查询失物,对于失物采取了现代信息化管理,具备了完善的失物数据库,管理效率高。在亚洲地区,各种失物招领机构遍布,可是依然采用人工管理的方式,其工作量巨大,物品运送规格难度艰巨,而建立一个网络数据库,可以免于失主奔波于各个失物招领机构。我国对于失物招领系统的建设工作也很重视,很多高校和地区同样建立了自己的失物招领管理系统。
    1.2 项目目的和意义开发该项目的目的是为了对于失物招领工作进行更加信息化、系统化、平台化的建设,而拾金不昧可以在一定层面上反映出学生的精神文明素质、道德修养水平、综合素质深度,对于拾金不昧的学生给予表扬和宣传是对当代大学生在道德修养、精神文明上的一种激励,一种正能量的鼓舞,使校园文化建设更加顺畅和谐。开发失物招领管理系统是一件迫在眉睫的事情, 并且该系统是基于网络的, 失主可以在网络上查询和报失以及确认[2]。通过功能模块的优化组合实现可以让失主在网络上发布失物,更加有利于找回自己的物品,拾取者也可发布失物信息,失主通过失物招领网络平台可以确定失物信息并招领,失物招领在线交易平台是为失主与拾获者之间进行失物招领提供的一个平台。有效的减少了工作量,便利了广大的师生及工作人员。失物招领网络平台的开发可以解决校园师生丢失物品的管理, 可以让失物招领部门工作人员高效的管理丢失物品, 降低工作人员的工作量, 以及方便全校师生, 使得师生在丢失物品后能够及时找回[3]。
    1.3 论文主要内容和结构安排本文介绍了基于JAVA EE的嘉园失物招领系统的设计与开发。

    第一章是绪论部分,对失物招领系统大致情况进行了简要介绍,简述了项目背景、项目目的和意义
    第二章是系统设计的技术和开发环境,介绍了系统开发所用到的关键技术,开发使用的语言和使用的开发环境
    第三章是对系统进行了整体的需求分析,工作流程的详细分解,功能模块的整体介绍
    第四章是系统的总体设计和详细设计分解,阐述了系统的各个功能模块的业务逻辑和数据结构
    第五章包括对系统的功能测试,整体研究工作的总结,对系统开发的过程和结果进行总结和展望

    第2章 系统涉及的技术和开发环境2.1 前端2.1.1 HTML超文本标记语言(HyperText Markup Language),标准通用标记语言下的一个应用。是网页制作必备的编程语言。“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。超文本标记语言的结构包括“头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。
    2.1.2 CSS正层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
    2.1.3 JqueryjQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
    2.1.4 AngularJSAngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC(Model–view–controller)、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。
    2.2 后端2.2.1 JavaJava是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
    2.2.2 MySQLMySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
    2.2.3 XML语言XML全称是Extensible Markup Language,即可扩展标记语言。XML技术是W3C组织发布的,目前推荐的国家标准是W3C组织于2000年发布的XML1.0规范[4]。
    2.3 开发环境2.3.1 MyEclispeMyEclipse,是在eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发。MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持相当不错。
    2.3.2 Navicat PremiumNavicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。
    第3章 系统需求分析3.1 系统总体功能
    3.2 系统功能概述失物招领系统主要为了让在校师生及工作人员能够便于发布寻物信息和拾取物品的信息,还有通过失物招领系统进行丢失物品的检索等一些问题。大学生课外活动较多, 随身物品较多, 经常活动于不同的场所, 遗失物品的现象时有发生[5]。但是由于没有任何便利的平台来发布失物信息,使得很多人无法获取与之相关的信息,太多的失物,尤其是那些对失主很重要、但对拾得人却毫无价值意义的物品,如有效证件、钥匙,却再也找不回来[6]。这便使传统的失物招领工作中心带来了极大的工作量。而本系统的设计正是让在校师生及工作人员可以快速的对于失物进行检索和发布。
    3.3 系统需求概述失物招领系统服务于校园内的学生、教师和工作人员,该系统运行与校园网内,由失物招领处进行管理维护。失物者通过网络接入Web服务器, 向Web服务器发送各种请求[7]然后发布寻物启事信息,系统针对于每一个寻物启事提供相应的评论功能,其他人员可以访问系统查看各个寻物启事为失物者提供相关信息及线索。失物者在发布寻物启事信息的时候会要求填写管理密码,失物者可以通过该管理密码对相应的启事进行删除、修改操作,如若失物者已经获取了失物的相关线索,可以对该寻物启事进行删除操作,以保证失物者以及线索提供者的信息安全。拾物者可以发布招领启事信息, 拾物者在捡到失物的时候可以访问该系统,发布招领启事信息,填写信息或亦可上传相关图片等待他人认领。失主在失物招领系统中检索到自己的失物可以通过该招领启事信息中的联系人与拾物者联系。拾物者在确认物品已经被失物者领走以后,就可以访问系统将该招领启事信息删除。为了用户的信息安全,本系统对数据进行优化处理,如果发布的启事信息在六个月内未被删除,则启事信息的所有联系方式将成为报名状态,如果一年内未被删除,则启事信息将会被系统自动删除。
    管理员同样可以发布失物招领信息,同时,管理员可以登录失物招领管理后台,用户所有启事发布都会经过管理员审核,只有当管理员审核通过时,启事信息才会发布到系统上。管理员也是可以对失物分类、寻物启事、招领启事进行管理操作。
    3.4 功能需求分析3.4.1 管理员登录模块针对于校园环境的特殊性,管理员一般为校园失物招领处的负责人,只有知道管理员登录用户名和密码才可以进入失物招领管理后台。登录过程中实现安全登录,避免恶意登录、暴力破解或者通过直接输入路径进入失物招领管理后台。
    修改密码,如果管理员要进行密码修改,只有通过安全登录到失物招领后台才可进行修改密码操作,通过输入原密码和两次新密码即可完成修改密码操作。
    登录状态验证内部实现,用于验证管理员是否已经登录为能否正常使用功能的前提条件。
    3.4.2 物品审核模块当用户发布寻物启事或者招领启事时,并不会立即发布到失物招领系统上,而是需要经过管理员通过失物管理后台物品审核模块对于新发布的启事信息进行审核。管理员可以查看新发布启事信息详情,审核通过则发布启事信息,审核不通过则从数据库上删除该启事信息。
    3.4.3 首页展示模块管理员成功登录失物招领管理后台后,则显示失物管理后台首页,首页总共展示四项统计数据,分别为未审核寻物启事信息数量,总发布寻物启事信息数量,未审核招领启事信息数量,总发布招领启事信息数量。管理员可立即看到这四项统计数据,更加方便对于管理员快速对于待审核数据进行审核,提高用户体验性。
    3.4.3 数据统计模块对于失物信息数据的统计,不仅仅只包含首页展示模块中的数据统计。该数据统计模块,同样另外统计了四项数据,分别为寻找中寻物启事信息数量,已失效寻物启事信息数量,寻找中招领启事信息数量,已失效寻物启事数量。
    3.4.4 失物分类模块用户在失物招领系统中,在发布失物信息或者检索失物信息时,其失物分类是通过复选框来进行选择。失物分类的添加、修改、删除等操作则由管理员进行管理更新。
    3.4.5 寻物管理模块管理员对寻物启事信息进行管理,但管理员在失物管理后台不能够进行修改或者添加寻物启事信息,仅能进行查询和删除操作,显示页仅显示部分寻物启事信息,通过查看详情即可查看更多寻物启事信息。
    3.4.5 招领管理模块管理员对招领启事信息进行管理,但管理员在失物管理后台不能够进行修改或者添加招领启事信息,仅能进行查询和删除操作,显示页仅显示部分招领启事信息,通过查看详情即可查看更多招领启事信息。
    3.4.6 失物展示模块失物招领系统的失物展示, 用户进入系统主界面后即可查看到最新发布的失物招领信息,首页仅显示最新一周内发布的失物招领信息,如果首页没有查看到要寻找的物品,可以通过导航栏中的寻物启事或招领启事中进入完整启事信息列表,即可通过精准查询检索到需要寻找的物品。如果用户需要进行快速检索操作,可以进入导航栏通过快速检索输入物品特征进行快速搜索。
    3.4.7 失物添加模块用户通过访问失物招领系统首页即可查看到寻物启事发布、招领启事发布两个按钮,根据需求选择需要发布的信息按钮,进入信息发布页面,信息发布页面中有多条信息需要填写,其中带星号标识的表单是必须填写的。
    3.4.8 失物详情模块通过失物展示模块可以查看失物详情,每个失物展示模块都且仅有一个对应的失物详情链接。失物详情页面显示了该失物的所有信息包括图片。在失物详情模块中可以进行评论操作,管理启事操作。
    3.4.9 失物操作模块在用户发布启事信息时,要求用户填写相应的管理密码,在对启事信息进行相应的修改操作或删除操作时将会用到。用户通过点击管理启事而出现的下拉框中选择删除或修改操作后,输入相应的密码即可进行操作。当用户选择修改操作时,输入正确的管理密码后,则出现弹窗,用户选择需要进行修改的数据进行修改即可完成操作。当用户选择删除操作时,输入正确的密码后,可以进行删除操作,系统会再次提醒用户是否确认删除,用户进行相应的选择即可完成删除操作。
    忘记密码,用户在忘记自己当初设置的管理密码时,可以在填写密码的表单中点击忘记密码链接,则会出现一个弹窗,该弹窗会要求用户输入启事信息相应的信息编号,信息编号在启事详情信息中有显示,发送信息编号后,管理密码会发送到改启事信息用户的预留邮箱,邮箱为用户在添加启事信息时的必填项。
    3.4.10 评论操作模块当其他人员浏览启事信息时,可以对相应的启事信息进行评论。评论主要目的就是提供失物的线索,方便失主可以找回自己的物品。
    3.3 非功能性需求系统非功能性需求主要包括以下几个方面:
    (1)界面需求友好性
    Web模式长期使用时需要保证用户进入系统后可以寻找到主要的关注点,就是直接在首页显示一周内的失物招领信息,在页面变化时添加过渡动画,在加载数据量大的内容时需要显示加载动画,提高人机交互体验性。需要有简洁清晰的界面来形象的显示。
    (2)操作需求准确性
    所有操作应当简便易用,所有涉及数据操作的内容都需要对用户操作进行判断限制,所有关键操作如删除、新增、修改等都需要用户进行确认,防止用户误操作导致数据错误。
    (3)用户体验感
    简洁清晰的页面,整体交互简单直接,各页面之间切换流畅,可保留已打开的页面,所有信息保持时效性,保有充分的用户操作提示信息。
    第4章 系统设计与实现4.1 系统设计目标对于当今校园失物招领工作的独特性,工作量较大,工作繁琐性等特征,同样, 捡到物品的学生也因为缺少相应的平台而难以将物品归还给失主[8]。同学们在丢失物品之后不知道怎么有效找寻丢失的物品,很多的大学的论坛,qq群,微信群等等地方有很多这种消息,但是通过QQ群这些方式发送寻物启事和失物招领的消息受用户权限限制,传播效率并不高[9]。本文主要设计和实现校园失物招领系统。充分利用校园网络坏境,使用校园网,发挥信息化手段的特性,使失物招领信息传播速度快,发布和检索方便实时且支持Web端等特点,最大效率上保证了丢失物品和被拾取物品的信息快速发布,让校园内师生及其工作人员快速得到失物信息。
    4.2 系统总体功能设计模块失物招领管理系统主要分为两个部分,涉及前台和后台,主要的技术是基于Java语言,用户界面是bootstrap框架,可运行于Windows操作系统。主要包括管理员登录模块、失物招领模块、寻物启事模块等,系统整体功能模块划分流程图如下图4-1所示。

    本系统分为两个子系统,分别为Web前台子系统、Web后台子系统,两个子系统使用同一个数据库。Web前台子系统主要是用户使用来发布启事信息、浏览启事信息等操作,Web后台子系统增加了管理员操作部分,具有管理员登录、管理失物类别等操作。
    4.2.1 系统开发环境与平台
    运行环境: windows XP/win7/win8/win10
    开发环境:Windows 10
    使用语言:Java,javascrip
    引用框架:Spring、SpringMVC、Mybatis
    关键工具包:httpclient(调用系统服务)
    开发工具:MyEclipse 2017 CI和Navicat Premium
    数据库:MySQL
    引用开源库:Jquery、日期和时间库、Json解析库和单元测试库等

    4.3 系统架构设计4.3.1 传统架构采用这种架构存在的问题,模块之间耦合度太高,其中一个升级其他都得升级,开发困难,各个团队开发最后都要整合一起,系统的扩展性差,不能灵活的进行分布式部署。
    4.3.2 分布式架构把系统拆分成多个工程,要完成系统的工程需要多个工程协作完成。这种形式叫做分布式。采用这种架构的优点,把模块拆分,使用接口通信,降低模块之间的耦合度。把项目拆分成若干个子项目,不同的团队负责不同的子项目。增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。可以灵活的进行分布式部署。采用这种架构的缺点,系统之间交互需要使用远程通信,接口开发增加工作量。
    4.3.3 系统选用架构本系统采用的架构就是分布式架构,大大降低了系统的耦合度,可以对系统进行灵活的分布式部署。系统的结构主要分成为三层:数据层、服务层和用户层。数据库用于存储数据,使用数据库来实现。用户层通过HttpClient来调用服务层的提供的服务,服务层用于解析用户层的请求并根据数据库的信息处理Web前台客户端的请求。服务层运行于Java虚拟机上,用户层主要运行于Web浏览器上,负责信息的呈现和引导用户进行操作,服务层和数据层直接与数据库进行通信。服务层和用户层之间则通过网络进行通信。

    数据层以数据库的方式来实现,Web前台客户端和Web后台管理端使用的是同一个数据库,因此无需考虑信息同步问题服务层分为数据处理层和网络层,数据处理层从网络层得到用户层发送过来的请求进行处理并将处理结果通过网络层发送至用户层服务层和数据层之间的数据传输通过数据处理使用SQL查询语句和Mybatis框架的使用来访问数据库,数据层返回结果集合到服务层服务层和用户层的数据传输格式需要统一,因此服务层和数据层传输数据时统一使用JSON格式。即发生放将数据转换成JSON格式再发送出来。然后从JSON中提取出所需的数据
    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

    Model层主要负责实现具体业务功能的类
    View层是与用户的交互层,负责提交用户的请求和数据,并将后端的响应的结果返回给用户层,同时提供用户提交信息的验证功能
    Controller层负责项目中的业务功能实现流程的管理工作,哪些类来实现具体业务功能,结果在哪显示等由Controller层控制,同时还负责其他两层的通信,协助传递信息和负责重定向与转发操作

    4.4 系统数据库设计4.4.1 管理员登录管理员表中给出了各个属性的数据类型、长度及主外键说明。管理员信息中采用的Spring Security框架默认的BCrypt算法加密存储登录密码。
    BCrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥,所提供的所有字符都具有十分重要的意义。密码越强大,您的数据就越安全。管理员信息表的设计如表4-1 所示。



    字段名
    说明
    键值
    数据类型
    备注




    id
    管理员编号
    主键
    Bigint(20)
    不为空


    username
    用户名

    varchar(50)
    不为空


    password
    密码

    varchar(100)
    不为空


    phone
    手机号码

    Varchar(20)



    email
    联系邮箱

    varchar(50)



    4.4.2 失物分类当用户添加启事信息或者检索启事信息时,用户将采用下拉框的形式来选择失物分类,因此,失物分类由后台添加,主要有主键和分类名称两个属性组成,失物分类信息表中给出了各个属性的数据类型、长度及主外键说明。失物分类信息表的设计如表4-2 所示。



    字段名
    说明
    键值
    数据类型
    备注




    id
    分类编号
    主键
    Bigint(20)
    不为空


    category_name
    物品分类名称

    varchar(50)
    不为空



    4.4.3 寻物启事寻物信息表除了包含失物所包含的属性数据类型、对应字段、长度、主键外,还包含了外键,表中详细的定义了失物的各类属性名称,还有两个比较特殊的属性,一个是审核状态,两一个是管理密码,审核状态包含0表示未审核,1表示审核通过,2表示审核未通过。寻物启事信息表的设计如表4-3 所示。



    字段名
    说明
    键值
    数据类型
    备注




    id
    启事编号
    主键
    Bigint(20)
    不为空


    category_id
    分类编号
    外键
    Bigint(20)
    不为空


    lost_place
    失物地点

    varchar(50)
    不为空


    lost_time
    丢失时间

    datetime
    不为空


    infoTitle
    信息标题

    varchar(100)
    不为空


    rewards
    悬赏金额

    varchar(100)



    description
    详情描述

    text
    不为空


    images
    物品图片

    varchar(255)



    status
    审核状态

    int(1)
    不为空


    contacts
    联系人

    varchar(255)



    tel
    手机号码

    varchar(50)



    QQ
    QQ号码

    varchar(50)



    email
    联系邮箱

    varchar(50)
    不为空


    address
    联系地址

    varchar(255)



    password
    管理密码

    varchar(20)
    不为空



    4.4.4 招领启事招领启事信息表与寻物招领启事表类似,但是唯一一个不同的招领启事不含有悬赏金额属性,其除了常规的属性名称对应字段、类型长度的定义外,也是同样包含了一个失物分类信息表的外键,说明了外键关联表和其定义。招领启事信息表的设计如表4-4 所示。



    字段名
    说明
    键值
    数据类型
    备注




    id
    启事编号
    主键
    Bigint(20)
    不为空


    category_id
    分类编号
    外键
    Bigint(20)
    不为空


    found_place
    拾物地点

    varchar(50)
    不为空


    found_time
    拾取时间

    datetime
    不为空


    infoTitle
    信息标题

    varchar(100)
    不为空


    description
    详情描述

    text
    不为空


    images
    物品图片

    varchar(255)



    status
    审核状态

    int(1)
    不为空


    contacts
    联系人

    varchar(255)



    tel
    手机号码

    varchar(50)



    QQ
    QQ号码

    varchar(50)



    email
    联系邮箱

    varchar(50)
    不为空


    address
    联系地址

    varchar(255)



    password
    管理密码

    varchar(20)
    不为空



    4.4.5 评论管理基于为了让物品找回能够有多种方式,实现了在查看物品详情信息后可以在详情信息底下留下失物信息,可以在不使用其他方式的情况下以另一种形式通知失主。评论信息表包含常规的属性名称对应字段、类型长度的定义。评论信息表的设计如表4-5 所示。



    字段名
    说明
    键值
    数据类型
    备注




    id
    启事编号
    主键
    Bigint(20)
    不为空


    goods_id
    物品编号

    Bigint(20)
    不为空


    comment_text
    评论内容

    text
    不为空


    comment_time
    评论时间

    datetime
    不为空



    4.4.6 详情信息当我们查看失物的基本信息后,想要深入的了解失物的详情信息时,便可以点击失物进入详情信息页面,详情信息表包含常规的属性名称对应字段、类型长度的定义。详情信息表的设计如表4-6 所示。



    字段名
    说明
    键值
    数据类型
    备注




    id
    启事编号
    主键
    Bigint(20)
    不为空


    goods_id
    物品编号

    Bigint(20)
    不为空


    publish_time
    发布时间

    datetime
    不为空


    page_view
    浏览次数

    int(11)
    不为空


    status
    启事状态

    int(1)
    不为空



    4.5 Web管理后台功能模块实现4.5.1 登录模块的设计与实现登录模块的设计,众所周知想要对Web资源和其他后端内部信息进行保护,最好的办法莫过于Filter,要想对方法调用进行保护,最好的办法莫过于AOP。所以Spring Security框架在我们进行用户认证以及授予权限的时候,通过各种各样的拦截器来控制权限的访问,从而实现安全。所以,我们设计了Web管理后台的安全登录,采用了Spring Security框架具体实现。
    登录模块的实现,一个能够为基于Spring的企业应用系统提供声明式的安全防问控制解决方式的安全框架,简单说是对访问权限进行控制,应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。 spring security的主要核心功能为 认证和授权,所有的架构也是基于这两个核心功能去实现的。下图4-2就是权限认证未通过登录状态效果图。

    管理员输入正确的用户名和密码成功经过Spring Security框架权限认证后直接进入首页,登录后页面如下图4-3成功登录效果图。

    管理员安全登录系统之后,如若想要修改密码,可通过界面点击修改密码按钮,按标准填写原密码与新密码即可完成操作。下图4-4为修改密码效果图。

    4.5.2 启事审核模块的设计与实现启事审核的设计,关于这模块的设计是为了防止用户恶意刷数据,还有用户发布的数据存在问题等一些问题,导致数据库无效数据的大量堆积,造成用户的体验感极低,网站的负荷、数据库的压力过大。那么,我们应该考虑一种从最优的角度去避免这样的情况发生,就是每次用户发布的寻物启事信息或者招领启事信息都经过管理员审核,虽然从另一种角度来看,增加了失物招领处的工作量,但是利大于弊,保证了用户发布的失物信息的质量和有效性。
    启事审核的实现,了解了启事审核模块的目的和整体设计,关于启事审核模块的实现,首先,寻物启事信息表和招领启事信息表都有一个status属性字段,其中当status值为0时,为未审核状态,当status值为1时,为审核通过状态,而当status值为2时,为审核未通过状态。
    我们默认用户发布的寻物启事信息或者招领启事信息的status值为0,失物招领后台管理系统将会拦截所有审核状态status值为0的数据,要求进行审核,才能发布到失物招领前台客户端。拦截的数据通过管理员经过严格审核之后,审核状态status值为1的数据则放行,而审核状态status值为2的数据则将其从后台数据库删除。下图4-5为启事审核流程图,图4-6为启事审核效果图。


    4.5.3 失物分类管理模块的设计与实现失物分类管理模块的设计,用户在失物招领系统中,在发布失物信息或者检索失物信息时,其失物分类并不是自己填写而是通过复选框来进行选择,所有失物类别的数据由后台进行管理。
    失物分类管理模块的实现,主要实现了对失物分类的增加、删除、修改与查询,失物可批量删除,查询数据方面通过输入分类名称进行模糊查询相关数据。显示数据方面实现了分页显示,管理员可以设置一页显示的数量等。下图4-7为分类管理效果图。

    4.5.4 寻物启事管理模块的设计与实现寻物启事管理模块的设计,首先考虑到保证用户数据的安全性等其他问题,失物招领后台管理不允许对用户的启事信息进行修改操作,添加失物信息则在失物招领前台客户端实现。所以,后台仅实现了对于启事信息的删除和查询操作。招领启事管理模块类似于此。
    寻物启事管理模块的实现,对于启事信息分页显示,实现了批量删除操作,考虑删除操作的危险性,使用layer弹窗框架显示警示提醒。查询数据实现精准查询,用户可以选择失物分类,选择日期开始时间,日期结束时间,关键字进行查询。日期组件选择了angular ui-bootstrap日期控件,引入了中文文件,方便用户操作。下图4-8为启事信息管理模块效果图。

    4.5.5 数据统计模块的设计与实现数据统计模块的设计,数据统计的首要就是简要明了,让管理员能够清晰的统计数据信息,失物招领管理后台的数据统计主要设计了已失效招领启事数据统计,已失效寻物启事数据统计,寻找中招领启事数据统计,寻找中寻物启事数据统计。
    数据统计模块的实现,通过前端请求数据,后端响应的数据以echarts数据饼状图图形化的形式展示,ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9 /10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。ECharts为百度的推出一款相对较为成功的开源项目,总体上来说有这样的一些优点,ECharts容易使用,ECharts支持按需求打包,ECharts开源支持中国地图功能。下图4-9为数据统计效果图。

    4.6 Web前台客户端功能模块实现4.6.1 失物招领首页设计与实现失物招领的首页设计主要以美观简洁易操作为主旨,通过首页导航栏可进入寻物启事、招领启事、发布信息和快速检索等页面,下图4-10为失物招领首页效果图,图4-11为最新一周寻物招领启事资讯效果图。
    g)

    4.6.2 快速检索模块的设计与实现为了让用户快速查找到目标、提升用户的搜索体验和输入效率,本系统实现了搜索关键字智能提示。下图4-12为快速检索效果图。

    4.6.3 启事信息发布的设计与实现用户发布启事信息时,部分信息为必填项,其余选填,启事添加实现了添加图片插件BootStrap FileInput和日期选择插件angular ui-bootstrap,两者样式非常美观,提升了用户的体验感。下图4-13为启事信息发布效果图。

    4.6.4 启事详情信息的设计与实现通过查看物品启事时,可点击查看详情信息页面,可进入物品详情页面,在物品详情页面可以查看物品的所有信息,包括详情信息浏览次数、物品图片、物品详情页面评论信息、物品详情描述、管理启事操作等。下图4-14为物品详情信息效果图,图4-15为物品详情信息页面评论信息效果图。


    4.6.5 管理启事的设计与实现管理启事主要设计了删除启事功能、修改启事功能与忘记密码操作功能。当用户发布寻物启事信息或招领启事信息时,会要求用户必须填写管理密码,这在用户对其发布的启事信息进行修改操作或删除操作时使用,用户必须输入正确的管理密码才能进行此项操作,如若用户忘记密码,可通过点击忘记密码链接后弹窗输入启事信息编号,则管理密码将会发送到当用户发布寻物启事信息或招领启事信息时要求用户必须填写的邮箱上,用户收到邮箱信息信息即可得到管理密码。下图4-16为管理启事效果图,图4-17为忘记密码操作效果图,图4-18为修改启事信息效果图。



    第5章 系统测试与结果分析失物管理系统的测试主要是为了保证系统各功能模块的正常运行,保证系统能满足功能,并且防止在用户进行操作时放置出现不在系统限制的范围内,需要对系统进行一些功能测试,目的在于发现错误和不满足需求的部分,并对发现的问题进行修复。
    5.1 系统测试环境选择
    客户端硬件:PC
    客户端软件环境:Windows 10
    数据库:MySQL
    版本控制:GIT

    5.2 测试计划系统完成后,需要对其进行各功能模块进行测试,下面以寻物启事管理模块为例,进行测试计划。寻物启事模块具体如表5-1所示。



    功能
    输入
    输出




    新增寻物启事
    点击发布寻物启事信息
    跳转到寻物启事发布页面,显示待填写表单。



    输入必填信息




    点击发布按钮
    提示操作结果,刷新页面


    启事信息审核
    点击审核处理
    弹出启事审核弹窗,显示启事信息



    点击审核结果选项
    提示操作结果,刷新待审核启事信息表


    修改寻物启事
    点击启事详细信息,点击管理启事,输入管理密码,点击修改启事
    弹出待修改启事所有信息弹窗并回显图片



    输入修改信息




    点击修改按钮
    提示操作结果,刷新页面


    搜索寻物启事
    选择搜索条件,输入搜索关键字




    点击搜索按钮
    显示所需的寻物启事信息


    删除寻物启事
    选择需删除寻物启事或全选本页寻物启事




    点击删除按钮
    提示操作结果,刷新页面



    5.3 测试用例测试用例主要由以下几张表构成为寻物启事管理模块测试。新增寻物启事功能如表5-2所示,审核寻物启事功能测试如表5-3,搜索寻物启事功能测试如表5-4所示,修改寻物启事功能测试如表5-5所示,删除寻物启事功能测试如表5-6所示。
    表5-2 新增寻物启事功能测试



    测试用例
    Test01




    测试项目
    新增寻物启事


    输入
    1. 点击发布寻物启事按钮 2. 点击选择失物分类 3. 寻物启事信息必填项 4. 点击选择图片 5. 点击选择日期 6. 点击发布按钮


    执行步骤
    1. 进入失物招领首页 2. 点击发布寻物启事按钮 3. 进入寻物启事发布页 4. 选择失物分类为“宠物” 5. 选择图片并上传“宠物图片” 6. 选择丢失日期为“2019-3-5” 7. 输入寻物启事信息必填项 8. 点击提交按钮


    预计输出
    1. 正确完成填写所有必填项,显示“发布成功”弹窗,选择返回首页,或继续发布信息。 2. 若填写发生错误,提示错误信息。



    表5-3 审核寻物启事功能测试



    测试用例
    Test02




    测试项目
    审核寻物启事


    输入
    1、 点击寻物审核 2、 选择寻物启事点击审核处理 3、 点击审核结果(审核通过或未通过)按钮


    执行步骤
    1、 进入失物招领管理后台首页 2、 首页显示未审核寻物启事数量 3、 点击物品审核选择寻物启事审核 4、 选择要审核的寻物启事点击审核处理 5、 浏览审核寻物启事 6、 点击审核通过按钮


    预计输出
    1、 审核通过,提示“审核通过”,刷新待审核寻物启事列表,列表中审核的寻物启事消失,审核通过的寻物启事成功发布。



    表5-4 搜索寻物启事功能测试



    测试用例
    Test03




    测试项目
    搜索寻物启事


    输入
    1. 选择失物分类 2. 选择开始日期 3. 选择结束日期 4. 关键字 5. 点击搜索按钮


    执行步骤
    1. 进入寻物启事页面 2. 选择失物分类为“钱包” 3. 选择开始日期为“2019-3-1” 4. 选择结束日期为“2019-3-12” 5. 输入关键字“粉色钱包” 6. 点击搜索按钮


    预计输出
    1、显示寻物启事失物分类为钱包,日期范围在2019-3-1到2019-3-12,物品特征为粉色钱包的记录。



    表5-5 修改寻物启事功能测试



    测试用例
    Test04




    测试项目
    修改寻物启事功能测试


    输入
    1、 输入管理密码 2、 点击前往修改 3、 修改失物地点 4、 修改丢失日期 5、 点击确认修改


    执行步骤
    1、 选择寻物启事 2、 点击查看详情 3、 点击管理启事 4、 选择修改启事 5、 输入管理密码 6、 点击前往修改 7、 修改失物地点为“主五#402” 8、 修改丢失日期为“2019-03-03” 9、 点击确认修改


    预计输出
    1、 提示修改成功,并刷新寻物启事详情页面,修改信息成功显示到寻物启事详情页面。 2、 发生错误,寻物启事详情未发生改变,提示错误信息。



    表5-6 删除寻物启事功能测试



    测试用例
    Test05




    测试项目
    删除寻物启事功能测试


    输入
    1. 点击管理启事 2. 点击删除按钮 3. 进入删除页面 4. 输入管理密码 5. 点击确认删除按钮


    执行步骤
    1. 进入寻物启事详情页面 2. 点击管理启事 3. 点击删除按钮 4. 进入删除页面 5. 输入管理密码“123456” 6. 点击确认删除按钮 7. 弹窗提示确认操作 8. 点击确定按钮


    预计输出
    1. 提示“删除成功”,刷新失物招领首页,选择的寻物启事已被删除掉 2. 提示“密码错误请重新输入”,重新输入。



    5.4 测试结果与分析通过一系列的功能测试,所有模块的测试结果与预计输出一致,符合预期的功能需求。
    结 论通过对校园失物招领所碰到的实际问题的具体分析,联系国内外失物招领网站的特征,开发和设计了失物招领系统。该系统不仅融合了校园信息化工作的特征,将传统的失物招领工作信息化,网络化,依靠全校学生的力量就能够很快地找到所失之物, 从而减少经济及精神损失, 规范学校的校风校貌, 有利于创建一个“无遗”的和谐校园[10]。
    本文主要阐明了失物招领系统的设计与实现,从该项目的背景,到该系统开发所用的技术框架和系统运行环境,再到系统的需求分析和功能的详细描述和实现过程。本系统主要重点部分在于启事信息的发布和查询浏览,通过对启事信息模块化的显示,使用户浏览更加便利,顺应了当前校园坏境下对系统的要求和实际需求,通过系统网络化的方式可以提高系统在校园坏境下的使用率,可以真正的提高校园寻回失物的机会。
    失物招领系统实现了启事信息发布、启事信息的快速查询、启事信息的精准查询、启事信息的审核功能、启事信息的数据统计等功能。通过本系统可以大大缓解高校失物招领工作中的一些繁复流程,提升了效率,有一定的应用和推广价值[11]。
    参考文献
    [1]吴江平.高校失物招领管理系统的研究与分析[J].科技广场, 2015年11期:32-35.
    [2]董伟东.失物招领系统的建立[J].计算机光盘软件与应用, 2014年01期: 251-252.
    [3]谭伟,林俊存.基于JSP的高校失物招领网络平台的设计与实现[J].电子世界, 2016年21期:109-110.
    [4]唐志婧.基于Android的校园失物招领平台的设计与实现[D].内蒙古自治区:内蒙古大学,2017.
    [5]周梦萍.基于J2EE的高校失物招领系统的开发设计[J].福建电脑,2018年04期:125-126.
    [6]陈玲.遗失物招领付费之研究[J].成都理工大学学报(社会科学版), 2016年01期:34-38.
    [7]刘莹.校园失物招领公益性管理系统[J].福建电脑, 2017年11期:128.
    [8]邹骅.基于微信公众平台的校园失物招领系统设计[J].河北软件职业技术学院学报,2017年03期:228.
    [9]查玉华,胡开华,张玉静.基于Web的校园寻物网站设计[J].电脑知识与技术, 2016年32期:49-50.
    [10] 张瑾,马皎,史伶丽,丁学翠,董莉霞.校园失物招领管理网页的开发[J]. 机电信息,2018年33期:118-119.
    [11]高越.高校失物招领系统的设计与实现[D].吉林省:吉林大学,2017.
    7 评论 206 下载 2020-06-07 09:48:33 下载需要13点积分
  • 基于Jsp的操作系统页面置换算法程序

    1. 实验目的页面置换算法是虚拟存储管理实现的关键,通过本次实验理解内存页面调度的机制,在模拟实现FIFO、LRU等页面置换算法的基础上,比较它们的效率及优缺点,从而了解虚拟存储实现的过程。
    2. 实验内容模拟实现下列几种页面置换算法,对比缺页率。
    3. 系统开发和运行环境


    操作系统
    Windows 7




    编程语言及工具
    JavaScript(jQuery),IE9以上/FireFox/ Chrome


    配置文件



    备注




    4. 程序设计4.1 数据结构var memoryNumber = 7; //初始页块数var stack = []; //创建存页面的数组var method = 'fifo'; //初始化页面置换的算法var timer = null;var cache = { memoryNumberInput: $('#memoryNumber'), //取输入的页块数 stackInput: $('#stack'), //取创建的队列 stackWait: $('#stackWait'), //等待运行页面的区域 stackFinish: $('#stackFinish'), //完成页面的区域 stackStatus: $('#manages .stack .content'), //页面剩余 methodStatus: $('#manages .method .content'), //选择的算法 loseStatus: $('#manages .lose .content'), //缺页率 cpuStatus: $('#manages .cpu .content'), //内存状态 boxs: $('#boxs')}; // 缓存DOM
    4.2 主要算法设计FIFO页面置换算法

    LRU页面置换算法

    5. 程序运行演示5.1 初始化页面
    5.2 创建页块数输入页块数,点击确定

    输出结果

    5.3 创建页面输入页面数

    显示


    也可以点击随机创建按钮,随机创建7个页面号

    显示


    5.4 运行点击运行,内存状态、缺页率、页面剩余动态变化

    虚拟存储器的页块的页面置换动态显示

    完成页面那一块区域也动态显示,最终显示

    5.5 停止点击停止按钮 ,程序就能停止

    5.6 重置点击重置按钮 ,让页面重新加载

    7. 实验总结
    用前端的html+css+javascript+jquery完成此次实验
    可以随机创建7个1-7的页面号
    采用了动态的形式展现整个程序运行过程,美观、清晰
    用jQuery+javascript操作DOM对象
    动态显示内存状态、缺页率、页面剩余数
    2 评论 10 下载 2019-06-12 11:29:31 下载需要10点积分
  • 基于PHP和MySQL实现的网页聊天系统

    一、网站总体设计1.1 网站设计主题.随着互联网的发展,使得通过网络实现人与人之间的联系沟通变得越来越重要。当你的朋友或者家人不在身边时,而思念的情感之浓,聊天软件更加方便;当你与同事共同探讨工作问题时,聊天软件更加方便。所以聊天软件很重要。为我们的生活提供了太多方便。
    1.2 网站功能要求1.2.1 网站功能结构图设计一个简易的网页聊天软件。该系统将完成注册用户、用户登录、和添加好友、实现群聊,本系统的功能模块图如图 1-1 所示。

    1.2.2 网站扩展功能
    实现删除用户完成用户个人详细资料添加
    二、网站数据库设计2.1 MySQL 介绍MySQL 是一种关系型管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据妨碍一个大仓库中,这样就增加了速度并提高了灵活性。
    MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准语言。由于其提价小、速度快、总体拥有的成本低,尤其是开源码这一特点,一般中小网站开发都选择 MySQL。
    2.2 数据库详细设计2.2.1 数据库设计网页聊天系统,需要完成用户的登录注册,聊天信息缓存,用户信息。
    2.2.2 数据表设计2.2.2 用户表 chat_user
    表功能:保存用户登录和个人信息表结构

    2.2.2 聊天信息表 chat_message
    表功能:保存用聊天内容表结构

    2.2.3 表间关系
    三、网站界面实现3.1 Dreamweaver 介绍Adobe Dreamweaver,简称“DW”,中文名称 “梦想编织者”,最初为美国公司开发 [1] ,2005 年被收购。DW 是集制作和管理网站于一身的所见即所得编辑器。利用对 、、等内容的支持,和可以在几乎任何地方快速制作和进行。
    3.2 网站界面设计3.2.1 登录界面界面功能描述
    完成用户的登录和注册
    界面效果图

    界面操作流程

    部分核心代码
    header("content-type:text/html;charset=utf-8");$userName = $_POST['userName'];$userPwd = $_POST['userPwd'];clude_once("./Tools/phpTools.php");$sql = "select * from chat_user where userName = '$userName' and userPass = '$userPwd'";$arr = mysqli_excute_select($sql);if(count($arr) > 0) { header('location:./chat.php'); session_start(); $_SESSION['info'] = $arr[0];} else { echo "账号或者密码错误,请<a href='login.html'>重新登录</a>";}
    3.2.2 登录界面界面功能描述
    群聊界面
    界面效果图

    界面操作流程
    在输入框中输入需要发送的信息,然后点击发送。点击消息选择撤回
    部分核心代码
    header('content-type:text/html;charset=utf-8');session_start();$userId = $_SESSION['info']['Id'];$messageContent = $_POST['messageContent'];include_once "./Tools/phpTools.php";$sql="insertintochat_message(user_id,content)values('$userId','$messageCont ent')";$arr = mysqli_excute_zsg($sql);var_dump($arr);if($arr > 0) { header("location:./chat.php");} else { echo "发送失败";}
    3.2.3 登录界面界面功能描述
    所有用户界面
    界面效果图

    界面操作流程
    查看所有的好友信息
    部分核心代码
    <table class="table table-bordered table-striped"><thead><tr><th width='15%'>序号</th><th width='15%'>姓名</th><th width='15%'>密码</th><th width='55%'>头像</th></tr></thead><tbody><?phpheader("contentg-type:text/html;charset=utf-8");include "./Tools/phpTools.php";$sql = "select * from chat_user";$arr = mysqli_excute_select($sql);// var_dump($arr);for($i=0; $i<count($arr); $i++): ?> <tr> <td><?php echo $arr[$i]['Id']?></td> <td><?php echo $arr[$i]['userName']?></td> <td><?php echo $arr[$i]['userPass']?></td> <td> <img src="./images/icon/<?php echo $arr[$i]['userIcon']?>" alt=""> </td> </tr> <?php endfor;?></tbody></table></div></body>
    五、测试和总结5.1 测试和调试成功实现群聊

    输入错误的用户密码后提示登录错误要求重新登录

    5.2 系统存在的问题由于本系统知识一个小课题作业,存在很多的不足,安全性,多用户的并发性,交互体验感不足,界面不够美化。
    5.3 总结运用的技术本系统主要运用的技术 PHP、JavaScript、MySQL、jQuery,文件上传。
    5.4 收获及心得体会PHP 吸收了、和的特点,利于学习,使用,主要适用于开发领域。PHP 独特的混合了、、以及自创的语法。它可以更快速地执行。用 PHP 做出的与其他的相比,是将嵌入到(下的一个应用)文档中去执行,执行效率较高;PHP 还可以执行后代码,编译可以达到和代码运行,使代码运行更快。
    在完成这个课题的学习后,加深了我对与 PHP 技术的理解和运用能力,是自己学习了一门新的编程语言。
    1 评论 4 下载 2021-05-28 12:26:08 下载需要11点积分
  • 基于Java和Sql Server 2005的酒店管理系统

    一、系统功能结构
    业务流程图

    二、数据库设计餐台信息表E-R图

    菜系信息表E-R图

    菜品信息表E-R图

    消费单信息表E-R图

    消费项目信息表E-R图

    数据库模型关系图

    视图

    三、Java程序设计
    3.1 用户登录界面设计
    3.2 主面板设计
    3.3 菜品管理
    3.4 台号管理
    3.5 菜系管理
    3.6 用户管理
    3.7 年结账
    2 评论 58 下载 2020-01-31 17:20:27 下载需要11点积分
  • 基于QT实现的扫雷小游戏

    一、需求和规格说明本题目做一个N x M 的扫雷游戏,每个方格包含两种状态:关闭(closed)和打开(opened),初始化时每个方格都是关闭的,一个打开的方格也会包含两种状态:一个数字(clue)和一个雷(bomb)。你可以打开(open)一个方格,如果你打开的是一个bomb,那么就失败;否则就会打开一个数字,该数字是位于[0,8]的一个整数,该数字表示其所有邻居方格(neighboring squares)所包含的雷数,应用该信息可以帮助你扫雷。

    1.1 具体实现要求的细节
    能够打开一个方格,一个已打开的方格不能再关闭
    能够标记一个方格,标记方格的含义是对该方格有雷的预测(并不表示真的一定有雷),当一个方格标记后该方格不能被打开,只能执行取消标记的操作,只能在取消后才能打开一个方格
    合理分配各个操作的按键,以及各方格各种状态如何合理显示

    1.2 课程设计目的掌握线性结构的应用,并体会如何用计算机程序完成一个有趣的游戏。
    1.3 基本要求
    能够给出游戏结果(输、赢、剩余的雷数、用掉的时间按妙计)
    游戏界面最好图形化,否则一定要清楚的字符界面

    1.4 实现提示用二维数组表示N x M 区间,要仔细考虑如何初始的布置各个雷以及各个方格的状态及变化。
    二、设计根据上述需求,利用QT完成图形化界面的制作。从QT的函数库继承QMainWindow类,构造主界面类mainWindow,在其中定义paintEvent函数用于不断刷新界面,mousePressEvent用来定义鼠标点击事件。定义私有对象CDrawmap对象drawMap;定义对象offsetx与offsety表示界面偏移距离;QTimer类的对象runtime用来计时;Dialog类的对象message来定义对话框。
    另外定义槽函数, updatetime()用来更新函数,on_actionRestart_triggered()用来重启,on_actionEasy_triggered()表示简单难度,on_actionMedium_triggered(表示中等难度,on_actionHard_triggered()表示困难难度,on_actionSuper_triggered()表示超级困难难度。更设置了on_actionExit_triggered()表示退出游戏,on_actionAbout_triggered()来介绍游戏,BGM1-4添加了音乐模块。
    由此需要构建CDrawMap类用来画图,有Create来创建图,Restart来重新启动图,定义了获取map[m][n]点周围格子数的函数num(),然后构造画图部分:**Map用来定义格子,存储一个数字(0-8表示周围雷数,-1为雷,且已经被点开,49-59表示被右键插上红旗,99-109表示还未被点开),max_x,max_y分别表示图最大行数和列数,nMine表示总共布的雷,rMine表示当前的雷,用于显示,timer表示计时器,winf用来记录当前游戏情况,0表示未知,1表示点到雷,2表示赢。iswin()函数用来测试是否赢。然后就是定义按键功能,Onrbtdown(int m, int n)用来定义右键插小红旗事件,Onlrbtdown(int m, int n)定义左键点击事件, Onlbtup(int m, int n)用来定义递归DFS点击格子事件。
    2.1 系统类图
    2.2 属性和方法定义MainWindow

    CDrawMap

    三、用户手册
    点击空格,若为雷,失败。不含雷的空格点开后的数据表示该格周围8个格子中含雷的个数
    右键可以插小旗标注雷,标注错误结束时会显示带叉的雷,游戏直至所有的雷被标记或者所有的不是雷的空格被点开为胜利
    游戏有四个难度模式,其中super为恶搞,屏幕显示不下qwq。。。
    游戏框界面会记雷的个数,和游戏的时间计时。此外,表情处,游戏进行中为笑脸,失败为沮丧脸,胜利为夏娜,失败点击沮丧脸可以实现Restart功能
    游戏菜单略简,只有信息About和宣难度,和重启、退出,实现不了保存名次等高级功能

    四、调试及测试添加对话框需要将其与主窗口信息连接,另外调用函数时需要包含相应的头文件,还有类的继承与声明时需要搞清楚相互之间的关系,还有按键与函数之间信号槽之间的关联也是十分重要,可以在UI界面设置,也可以直接用connect函数关联。还有调试时候可以考虑在函数中加入输出信息的形式来测试该函数是否被执行。
    五、运行实例
    六、进一步改进
    程序中应该设置一个自由模式,由用户来输入想要绘制的地图的行列和雷数
    该游戏应该设置一个可以保存游戏高分记录的数据库,以便玩家来保存自己的光辉历史
    该游戏配的背景音乐太过简略

    七、心得体会开始时候是无从下手的,于是先去玩了扫雷游戏,以前都是瞎玩的,现在才彻底了解其规则。然后我又在网上搜寻了相应的代码来学习,不过网上的东西太繁杂,我选取了其中利用数字来判断格子情况的方式,然后用QT做了UI设计,不能不佩服QT的强大,同时它也很复杂,于是我只是对其进行了框架式的了解之后,只是把我要用的函数搞懂就没有继续学习了,也很惭愧,还被老师批评了一下,没有扎好基础。然后就是构造主界面,一步步完善,然后添加一些Windnows上本来就有的功能,再加上了一个介绍游戏的对话框,又加了几个BGM进去,中间各种BUG真是令我欲仙欲死,搞得我连续好几天开夜车作战。
    5 评论 72 下载 2019-04-16 10:06:59 下载需要11点积分
显示 0 到 15 ,共 15 条
eject