【www.liuxuezz.com--专业】
毕业,汉语词语,拼音是bìyè,意思是学生在学校或训练班修业期满,达到规定要求,结束在本校学习的课程,也可以引申指小结、休止。出处《二十年目睹之怪现状》,《刘继庄传》。以下是小编为大家收集的计算机专业毕业设计论文范文(精选3篇),仅供参考,欢迎大家阅读。
这次毕业设计让我更加熟悉了从理论到实践的跨越。从当初的查阅图书,到现在的网站成功运行,这中间有很多值得回味的地方。记得去年暑假在学校呆的时候,偶尔对php这门语言产生了浓厚兴趣,下决心要自己尝试着去学习。可是,刚开始就碰到了钉子,当时学校里没有几个学生,我就去图书馆借阅查资料,就apache服务器的安装就占用了我一周的时间,到最后才恍然大悟,其实就是一个端口的配置问题我没有搞懂。
人们总是对刚接触的事情记忆犹新,我也不例外。记得专科的时候,我选择了delphi语言作为自己与计算机的交流媒介,当时好奇的心理不亚于我对php的兴趣。我本以为我学好了这门计算机编程语言就拥有了全世界,可是随着视野的不断开阔,课程的不断更新,我慢慢了解了懂得一门语言真的是冰山一角,在计算机的世界里,只要你有兴趣,总会有太多的新奇吸引着你。
做事情有时候是不需要理由的。对于office办公软件,我就是如此。我不喜欢看小说,就在两个假期里把word研究了一遍,真的发现word的功能很强大。由于专科时候偏重的是软件设计,我只好利用课余时间来学习自己感兴趣的平面设计方面的知识。专升本之后,班级的事情变化太快,让我一时之间很难接受,而且学的知识偏重硬件,我又不太感兴趣,没有学会什么就荒废了很多时间,倒是对健康知识了解了不少,也算是慰藉一下自己本科空虚的心灵吧。
这次的设计,从选题到实现,几乎都是自己独立完成的。从前台网页设计的实现,到后台代码的编辑,我用到的软件主要有word、photoshop、fireworks、dreamweaver、apache、mysql、powerdesigner等,并首次运用php语言,开发了这个简单的在线招聘网站。在系统的开发过程中,多门以前感觉很抽象的课程,如软件工程、数据库原理、面向对象程序设计等变得清晰起来,强烈地感觉到这几门理论课程在实践中的重要性。
整个过程中,从需求分析到设计、编码、测试,我都力求规范化和文档化,努力让自己以前学的知识运用到本网站的开发中,尽量保证整个系统的开发进度和质量,顺利完成这次的毕业设计,为自己的大学生涯画上一个完美的句号。
不过,在系统开发过程中,好多知识都是随学随用,就增加了很多不必要的麻烦。比如说:一个网页中的表单不能相互嵌套,php关于中文乱码的处理,数据库的安全性问题,框架的使用等。虽说这些都会消耗系统开发的时间,但在老师、同学以及自己的不断努力下,不怕麻烦,不怕重复,当克服了这些问题之后,我会感觉到自己的知识在一点一滴地积累,不知不觉中增加。
虽然很多错误被克服了,但是系统中难免还有很多不足之处,希望各位评委老师和同学给予指正与建议。
我相信,只要肯钻研,只要挤时间,一切自己想要的知识都可以掌握。
随着毕业日子的到来,毕业设计也接近了尾声。经过几周的奋战我的毕业设计终于完成了。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次毕业设计使我明白了自己原来知识还比较欠缺。自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。
在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。
我的总结也就这么多了,总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。
在此要感谢我的指导老师对我悉心的指导,感谢老师给我的帮助。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。
1.1 系统开发的背景
在科技日益发达的今天,社会对每个身处其中的分子要求越来越高,懂得一门外语只是基本的要求。而学习外语也要讲究一定的方法,一些辅助的工具也是必不可少的。
回顾过去背单词的方式,大家都是对着一本厚厚的字典,用笔在纸上反来复去的写,力求用次数来达到记忆的目的。可这种方式太浪费时间,一些单词被背了又背,一些单词却未被问津,自己都不知道哪些是已经记下来的,哪些是还不会的。把时间都白白的浪费掉了,真是得不偿失,因此,改变这种方式势在必行!使用计算机编写的背单词工具就改变了这种状况,使背单词也变得“轻松”起来。面对当前市场上背单词工具质量的良莠不齐,因而提出了设计一个新的,功能更实用,操作更方便,界面更友好的英语背单词工具——“攻破单词”。
通过对此工具的使用,可以节省很多时间,提高记忆效率,加强学习上的灵活性,使记忆、测试和查单词等各方面都很方便、轻松、快捷,相信它更能满足学习英语的学习者的需要,提高学习的进程,增加学习的兴趣。
1.2 软件开发的策略将程序看作是按照顺序执行的一系统指令,这通常称为过程编程。过程化程序设计的典型特征是:程序中的数据对于所有过程都是可见的,因此也很容易造成混乱;过程与数据之间的关系是独立的,数据并没有要求一定要用那些方法来处理,原则上任何过程都可以对数据进行操作。在面向过程的程序设计方法中,首先考虑的是程序的功能,即程序要解决的问题,通过将功能逐步细化,直到每一个小的功能模块都能够用函数或过程来实现。然后设计数据结构,编写功能模块(过程),最后将它们组合成一个复杂的程序。换句话说,面向过程的程序设计采用的是“算法+数据结构=程序设计”的思想,即首先考虑解决问题的算法,然后再设计适合的数据结构使得算法得以有效的实现。面向过程的程序设计方法对于小型程序来说是适合的,但是用它来开发大规模的、可重用的应用就显得力不从心了。
与过程编程相对的是面向对象的编程。面向对象编程(OOP)从另外角度看待计算机程序,它将重点放在使用计算机所完成的任务上,而不是在计算机处理任务的方式上。在面向对象编程中,计算机程序概念化为一组对象,它们一起工作以完成一项任务。每个对象是程序的单独一部分,以特定的严格控制的方式与其他部分互相交流。面向对象编程超越程序复杂,用客观世界的对象模型自然地表示软件开发,用对象代表需要解决的问题的中心环节,而不是以函数过程、数据结构为中心,从而使计算机程序的分析、设计和实现的过程和方法改变了过去的脱节和跳跃的状态,这就使人们对复杂系统的认识过程与系统的程序设计过程简单化,并使两者容易达到一致。面向对象编程具备了几个优点,比如:代码维护方便、可扩展性好、支持代码重用技术等。这些优点是过程编程语言所不具备的。可以使用“对象+消息=程序设计”来表示面向对象的理论。图1-1、1-2为面向过程的程序设计与面向对象程序设计的图示,在其中可以直观地看到二者的区别。
1-1 面向过程的程序设计
1-2 面向对象的程序设计
本软件的开发就使用面向对象的方法。
1.3 软件的开发方法面向对象的方法经由系统分析、设计和试验等阶段,遵从软件生命周期的规律。所谓软件的生命周期是指一个软件从它的发生到其消亡的过程。以下是利用生命周期法开发软件的各个阶段的具体内容:
(1)系统规划阶段:其主要任务是明确软件开发的请求,并进行初步的调查,通过可行性研究确定下一阶段的实施。可行性分析的任务是确定项目开发是否必要和可行。也就是要对问题定义阶段中所提出的问题进行分析,以决定所提出的问题是否有“可行”的解。所谓可行,首先在技术上要可行,即现有技术能否解决所提出的问题;其次是经济上可行,即用户能否支付实施项目所需要的费用,项目建成后能否取得预期的经济效益;最后进行操作上和法律上的可行性研究。综合这些方面的论证,最终决定是否实施该项目。当然,这项工作就是建立在初步调查的基础上。
(2)用户需求分析阶段:在这个阶段中,就是了解用户的需求,准确的确定用户需要的功能,明确为了实现这些功能,需要哪些处理,需要处理什么数据;需要存储哪些数据文件;得到哪些信息;输入输出数据的格式以及有关处理的具体算法等。此外需要找出为了实现既定功能所需要的约束条件,典型的约束为成本约束和时间约束。另一个重要任务是要规定系统的生效准则,规定在目标系统建成后验收目标系统的一些原则以及具体的验收方法等。具体工作包括:
1 详细调查
其具体的调查内容包括:清楚当前市面上现存的背单词工具所具备的功能和实现方法,了解使用者在使用过程中存在的问题和希望使用的功能。
2 提出新系统的逻辑设计
系统分析结束时,应完成系统分析报告,交上级审批.系统分析报告是系统设计的依据,是与用户交流的工具,是应用软件的重要组成部分。其内容包括:原系统分析部分、新系统逻辑模型、新系统信息量的估计。
(3)系统设计阶段:其任务是在系统分析的基础上,按照逻辑模型的要求,科学合理地进行系统的总体设计和具体的物理设计,为下一阶段的系统实施提供必要的技术资料。具体分为:总体设计阶段和详细设计阶段。
1 总体设计阶段:这个阶段中的主要任务是得到一个能够实现用户需求的理想的系统结构。所谓理想的结构指的是:能够实现需求阶段中规定的功能;系统容易设计和实现;系统易于维护。设计内容包括划分子系统、设计规范制定、数据流程图设计、功能结构图设计、系统物理配置方案设计。
2 详细设计阶段:在这个阶段中的任务是进行系统所需要的数据结构设计和数据库的物理设计。输入输出设计、编写程序模块设计说明书。
系统设计工作结束后,要提交系统设计报告。若系统设计被审查批准,整个系统开发工作便进入系统实施阶段。
(4)系统实施阶段:这是软件系统的实现阶段,要进行模块编码和模块测试。模块测试又称为单元测试。模块编码要严格按详细设计阶段开发的模块逻辑进行。模块程序设计完成之后,应经过严格的测试。程序测试应该采用科学的方法。主要是黑盒法和白盒法进行测试,从而尽可能多地发现模块中错误,并加以改正。把经过彻底测试的模块组装起来形成需要的应用系统。再进行集成测试,采用的是黑盒测试方法,集成的方法可采用自顶向下集成或自底向上集成,或者二者结合的方法。
(5)维护阶段:主要包括改正性维护、适应性维护和完善性维护:改正性维护是改正程序中所遗漏的错误,保证用户程序能正常运行;完善性维护是增加程序的功能以满足用户的进一步需求;适应性维护是当用户改变硬件或软件支持环境时,满足程序需要的修改工作。维护阶段是一个非常重要的阶段,维护工作的好坏直接影响到用户的满意程度[6]。
1.4 系统开发环境的选取根据软件所要完成的功能和结合当前情况,我选择了Java语言。Java语言诞生于1991年,是由SUN MicroSystem公司的Jame Gosling,Bill Joe等人为在电视、控制烤面包箱等家用电子产品上进行交互式操作而开发的一个名为Oak的软件,1995年下半年正式以Java这个名字推出,并引起轰动[2]。
Java语言是一种完全的面向对象的编程语言。在Java语言中,对象是表现事物,消息传递是事物间的相互关系,类和继承分别是相似行为对象的抽象和类之间的关系,方法是允许作用于类对象上的各种操作。面向对象程序设计有三个基本的特征:封装(Encapsulation)、继承(Inheritance)与多态(Polymorphism)[2]。所谓封装,就是用一个自主式框架把对象的数据和方法连在一起形成一个整体。可以说,对象是支持封装的手段,是封装的基本单位。Java语言的封装性较强,因为 Java无全程变量,无主方法,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作。多态性就是多种表现形式,具体来说,可以用一个对外接口,多个内在实现“方法”表示。继承是指一个对象直接使用另一对象的属性和方法。Java提供给用户一系列类(class),Java的类有层次结构,子类可以继承超类的属性和方法。与另外一些面向对象编程语言不同,Java只支持单一继承。
作为一种计算机语言,Java相当的优秀,最为显著的优点是它与平台无关,同样的代码可以不用改动就可以在各种软硬件平台上运行。这种平台无关性对于开发Internet应用程序来说是非常重要的。Java有以下基本特点:
简单性:“我们用Java来设计应用系统时,程序员不需要非常专业的训练,并且这种语言应该和当前所流行的技术一致,因此,虽然我们发现C++并不是这样的语言,但Java还是被设计成为尽可能和C++类似。只有这样Java才易于理解。我们将C++中那些很少使用、难于理解以及令人迷惑的东西去掉形成Java,这些被去掉的C++特性在我们看来,带来的好处远不如它们可能造成的痛苦。”——《Java语言白皮书》
面向对象:Java语言是一种完全的面向对象的编程语言。
分布式:分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上,操作分布是指把一个计算分散在不同主机上处理。
强健性:Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性。Java虽然源于C++,但它消除了许多C++的不可靠因素,可以防止许多编程错误。
安全性:一种编程语言,尤其是网络编程语言,与跨平台性随之而来的还有另一大特性:安全性。在网络上,如果网络语言不十分可靠,极有可能被人有意或无意地造成恶果。为防止利用Java程序攻击其他人的系统,Java主要的编译和运行时系统中采取了防护措施,为Java代码筑起了两道坚实的防护屏障。
跨平台:所谓跨平台,就是指应用程序与计算机系统硬件结构的无关性,更直观的说就是用Java编写的应用程序不和修改就可在不同的软硬件平台同样的运行。
可移植性:同体系结构无关的特性使得Java应用程序可以在配备了Java解释器和运行环境的任何计算机系统上运行,这成为Java应用软件便于移植的良好基础。
解释方式执行:Java字节码可以在任何装有Java解释器的机器上直接执行。
高效率:“虽然字节码的运行效率通常已经能够满足应用要求,但还有一些要求很高运行效率的场合,在这些情况下,字节码可以‘即时’地被翻译为特定宿主机的机器码。”——《Java语言白皮书》
多线程:Java语言的多线程机制使应用程序能够并发执行,而且,它的同步机制保证了对共享数据的正确操作,
动态可扩充性:Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响应用程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。
Java的众多优点,使我对它产生了浓厚的兴趣,让我觉得不去学习它是不行的。也许编写工具软件并不能完全体现Java语言的优势,但我想通过此次实践走进Java。
“工欲善其事,必先利其器”,使用合适的工具是提高软件开发效率的重要途径。Java的开发工具分成三大类,分别为:文本编辑器、Web开发工具和集成开发工具[8]。我采用的是美国Borland公司推出的可视化集成开发工具——JBuilder ,以及文本编辑工具——UltraEdit。Jbuilder是目前使用最广泛的Java开发工具之一,支持开发人员构建标准的Java应用系统。其开放的环境、丰富的Java开发向导和基于组件的开发方式,极大地简化了开发人员的工作,使得开发更为快捷和简便,加快了项目的进度。
数据库方面采用Microsoft Access, Access功能足够强大,足以应付一般的数据管理及处理需要,而且它易于掌握。采用Windows200中文版作为开发、测试和运行的平台。硬件选择Intel PentiumⅡ,256内存,40G硬盘等。
第二章 系统规划2.1 软件开发中的主要问题凡事预则立,不预则废。科学的规划对于任何需要经过较长时间努力才能实现的事情都是非常重要的。
规划,一般是指对较长时期的活动进行总体的、全面的计划。作为一个背单词的工具,是一名英语学习者学习的助手。而无论是谁,习惯一旦养成就不容易改变使用背单词工具也是一样,选择好了,在之后很长一段时间之内也不会更换。所以说如何使使用者能使用的方便、舒服,并且真正实现“助手”的含义就是重中之重。考虑到学习者的水平不同,要求掌握的单词级别也就不同,所以就要有词库选择的功能;考虑到避免重复练习的问题,所以就要有改变单词出现次序和记录不同用户的测试进度的功能;考虑到要有反馈练习成效的问题,所以就要有测试的功能;考虑到要有单词查找的问题,所以就要有字典的功能;考虑到不可能将所有单词都收录到库中,所以就要有词库维护的功能,另外还需要加设一些听力方面的辅助功能。
在现存的一些背单词软件中,往往对以上问题考虑的或多或少有一些欠缺,其中一个主要原因就是人们更多地关心软件的经济效益,用很多花俏的东西代替了切实有用的功能,而对于使用者的需求又了解过少,对于软件的具体方案考虑较少,对总体方案与发展战略问题不够重视。总之,软件开发中,往往缺乏科学的、有效的系统规划。
2.2 软件开发目标力求实现一个小巧精悍的绿色英语单词辅助记忆软件。拥有一定的信息量,软件功能具有人性化,可以设定单词浏览速度的自动浏览,又可手动浏览;按照正序/逆序/随机/默认浏览记忆;随时查找单词和进行测试;能够播放听力文件;可以进行词库维护,使其成为您背诵英语单词的“利器”。
世界上有许多难事,但是没有完成不了的难事,背单词就是其中的一种,只要努力,人定胜天,人生终将辉煌!
第三章 系统分析3.1 系统的初步调查系统的初步调查是系统分析阶段的第一项活动,初步调查阶段的主要目标是从分析人员的角度看新项目开发有无必要和可能。初步调查的内容包括两方面:调查内容和分析内容。前者包括调查有关工作的信息,包括主要输入、主要输出、主要处理功能;后者主要分析现有什么,需要什么、在现有资源下能提供什么、此项目有无必要和可能进一步的调查与开发。
本软件开发的初步调查采用的主要方式是与英语学习者(包括使用和未使用过背单词工具的)进行交流,把握第一手资料。经过初步调查了解到,现在很多学习者还停留在“字典—纸—笔”的古老背单词方式上,用书写次数来达到记住的目的,这种方式不但花的功夫多,而且收效还不好,可以说是事倍功半。而那些现在正在使用计算机背单词的学习者,从不同方面反映了他们在使用背单词工具中所存在的问题,总觉得在不同程度上不够理想。
现存背单词软件的主要问题包括:有些设计的过于繁琐,难于操作,并不实用或是使用起来不够灵活;有些则又过于简单,不能满足使用者的需求,比如说单词从头到尾,顺序固定,即不能变换次序又不能分级别记忆,反来复去总是记开头那么几个;测试功能不够健全,无法真正检测使用者的学习情况等等。
所以说,各方面的人,都需要一个切实好用的英语背单词工具,提高英语学习效率。
3.2 系统的可行性分析可行性研究是以相对短的时间和相对低的成本来确定给定的问题是否有解。这里相对短和相对低是指和实现建议系统所需时间和成本相比较而言。可行性研究主要从下述4个方面进行研究:技术可行性、经济可行性、操作可行性和调度可行性[5]。
(1) 技术可行性:技术可行性的考虑集中在现存的计算机硬件能否支持被研究的系统,首先关心的是该组织是否有相应的软件和硬件能够支持处理建议的应用程序。其次考虑在规定平台之上,利用现有的成熟技术是否能够实现这个应用。现代计算机硬、软件技术的飞速发展,为系统建设提供了技术条件。计算机等基础设施的更新换代也紧跟潮流的发展,这就为开发系统提供了坚实基础。
(2) 经济可行性:这是经典的并且是最常使用的评价计算机系统的方法。这个评价的结果称为成本/效益分析。简单地说,经济可行性研究是确定得自新系统的节省和利益,将这些利益和系统的实现成本相比较,如果利益超过成本,则开发新系统的决策是肯定的;否则的话,除非有其他特殊原因,这个决策将是否定的。本软件的实现是作为考核学生学习情况的手段,不存在经济可行性的问题。
(3) 操作可行性:是指人员的手工操作而不是指计算机系统操作是否可行,也就是说在实现了建议的计算机系统后,所需要的配合的手工操作是否可行。作为新时代的学生,几乎人人都具备计算机的基本操作能力,而本软件的使用又十分简单方便,所以具备操作可行性。
(4) 调度可行性:指的是建议的计算机系统能否在规定的期限内交付给用户。基于本软件,经过上述的分析,可以在规定的期限内完成。
除了上面讨论的4个方面的可行性论证,有些产品的开发可能会涉及现存法律方面的问题,即需要进行法律可行性论证。
从当前情况来看,本软件的开发是可行的。
3.3 对现存软件的研究对现存软件进行详细研究是了解系统需求和进行系统分析与设计的重要基础工作,因此要进行全面、细致而充分的研究。通过研究,发现现存背单词工具各自存在以上一点或几点问题:
(1) 单词一起存放,不能根据不同层次的用户选择词库;
(2) 单词练习方式单一;
(3) 没有单词测试功能,或测试功能不全面;
(4) 没有记录用户个人信息的功能;
(5) 没有单词查询的功能;
(6) 无法向库中添加单词;
通过分析,可以看出这些问题,都是需要进行改进的。
3.4 新系统逻辑方案的提出建议的计算机系统是基于现存软件之上建立的,这应该是现行系统的完善与提高。用户所提供的信息往往是现行系统的缺陷,而不是整个系统的功能与行为。
在问题定义阶段对建议的功能、规模和约束条件等已经作了规定。在可行性研究阶段通过和使用者的交流,对用户的需求有了初步的了解。因此在这个阶段中,设计者应该进一步澄清问题定义中的模糊部分,更正错误部分。通过这个活动,清楚地描述新系统的主要功能,主要的数据输出与输入数据的来源,以及所需要的特殊处理。本软件的逻辑模型主要是以数据流程图为主要描述工具。
(1)数据流程图 (简称为DFD)
数据流程图是在对系统调研阶段绘制的业务流程图进行分析的基础上,从系统的科学性、管理的合理性、实际运行的可行性角度出发,将信息处理功能和彼此之间的联系自顶向下、逐层分解,从逻辑上精确地描述新系统应具有地数据加工功能、数据输入、数据输出、数据存储及数据来源和去向。数据流图是组织中信息运动的抽象,是逻辑模型的主要形式[5]。数据流程图的图例如下:
第四章 系统设计4.1 目的与任务此阶段的任务就是根据用户需求分析阶段得到的目标系统的物理模型确定一个合理的软件系统的体系结构。这个体系结构的确定包括合理地划分组成系统的模块,模块间的调用关系及模块间的接口关系。软件的体系结构从总的方面决定了软件系统的可扩充性、可维护性以及系统的性能。并考虑到经济、技术和运行环境等方面的条件,确定系统的总体结构和系统各组成部分的技术方案,合理选择计算机和通信的软、硬件设备,提出系统的实施计划,确保总体目标的实现。
4.2 系统的总体结构设计总体设计的任务是确定软件的体系结构,软件体系结构指的是软件的总体结构以及该结构提供系统的功能的方式,也说是说软件体系结构是程序的一些部件(模块)的层次结构,这些部件相互作用的方式以及这些部件使用的数据结构[5]。“攻破单词”的功能结构图如图4-1所示。
如图所示,系统由用户信息管理、单词和美音赏析三大模块组成。其中各功能模块又包含子模块。下面对各大模块分别进行描述。
(1) 用户管理模块:
这个模块主要是进行用户进入的身份验证和记录用户的个人信息。新用户必须进行注册,方可使用本软件;原有用户也要在输入了用户ID和密码之后才能进入练习阶段,当然,作为一名已注册用户是可以进行密码修改的。加入此功能目的是为了让系统能记录不同用户的练习情况,统计测试成绩,这样一来,使用者可以很方便的知道自己在何时进行了测试,并且取得了怎样的成绩。方便用户了解自己的学习情况,统筹安排。
(2) 单词模块:
这是本软件的核心部分,也是关键所在。其中包括四个子模块:
词库设置模块:在这里用户可以选择词库、选择开始位置、确定每次的练习单词个数、选择自动浏览的浏览速度、单词的排列次序:分为顺序/逆序/随机几在种。在单词练习方面,可以选择单词的显示模式,分为隐藏单词/隐藏词
图4-1“攻破单词”功能模块图
义/单词大写几种。浏览方式分为自动和手动两种。
测试模块:用于进行单词测试,并统计测试结果。
字典模块:用于进行单词查找,分为“英译汉”和“汉译英”,其中“汉译英”支持模糊查询。
维护模块:用于向词库中添加单词。
(3) 美音赏析模块:
用于播放英语听力文件,通过打开文件对话框,选择一个文件进行播放。因为目前JAVA支持的音频文件格式有:AIFF、AU、WAV、type0和type1的MIDI,以及RMF[1]。所以在程序中对文件选择的格式进行了限制,只有符合格式的,才可能被选定。
4.3 系统的物理结构设计从系统本身看,只需要制作成单机使用即可,使用者在自己的计算机上运行本软件,就可以进行单词的练习和使用相关功能。
数据库是数据管理的最新技术,是计算机科学的重要分支。现在普遍使用的大中型数据库有IBM DB2,Oracle, SQL Server, SyBase, Informix等。常用的小型数据库有Access, Paradox, foxpro等。个人用户常用的主要是基于中小型数据库的MicroSoft SQL和Access。由于微软的Access使用简单,而且又是世界上最流行的桌面数据管理系统[5],更加因为它适用于本软件,所以本软件使用Access数据库完成单词的存储等多项任务。
4.4 系统运行的软硬件环境考虑到本系统的运行的稳定及性能要求,本系统系统配置如下:
硬件配置:
CPU: PentiumⅡ以上
内存:64M以上
硬盘:剩余空间 以上
多媒体机器(若无声卡,则无法收听声音文件)。
软件环境需求:
操作系统:
数据库:MicroSoft Access
软件:装有JDK
4.5数据库设计(1) 数据库设计的主要任务是针对一个给定的应用环境,在给定的硬件环境、操作系统、以及数据库管理信息系统等软件环境下,创建一个性能良好的数据库模式,建立数据库及其应用系统,使之能有效地收集、存储、操作和管理数据,满足用户地各类需求[5]。
(2) 概念设计
在系统的数据库设计中, 先要对系统分析得到的数据存储进行分析,分析数据存储之间的关系,然后得出系统关系模式。
(3) 逻辑结构设计
逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R 图, 转换为与选用的具体机器上的数据库管理系统产品所支持的数据模型相符合的逻辑结
图4-2 “攻破单词”数据库的E-R图
构。本系统的E-R 图如图4-2所示:
(4) 物理结构设计
本系统数据库中设计4张表,各表基本结构信息如下,分别为:表4-1单词表,表4-2书目表,表4-3测试记录表,表4-4用户注册表。
表4-1 单词表(t_word)
表4-2 书目表(t_book)
表4-3 测试记录表(t_test)
表4-4 用户注册表(t_user)
4.6用户界面设计为了使用者使用方便,提高学习效率,本软件将采用命令按钮和菜单选择相结合的设计方法,做到界面风格一致,并且界面朴素大方,任何人都能够接受。
本软件可以管理个人用户,所以进入系统之前必须通过验证。简洁、清晰、友好是此界面应具有的设计风格。用户只需填写用户ID和密码,然后点击【确定】按钮,就可进入主界面。主界面是用户进行单词练习的地方,也是进行功能选择的地方。当用户做出选择以后,系统就进入相应的窗口界面。
本系统主要界面设计图样:
(1) 登录界面图样如图4-3所示
图4-3 “攻破单词”登录界面图样
登录界面设计思路:如图4-3所示,本界面是用户使用本软件首先呈现给用户的界面,用于用户登陆信息的管理。当【登陆】按钮被点击后,通过在数据库的t_user表中查找,如果用户ID和密码输入合法有效将可进入系统,出现主界面;当【取消】按钮被点击后便可以退出该操作界面;当【修改密码】按钮被点击后则出现修改密码对话框,用于已注册用户的密码修改;如果是一位新用户,则要点击【注册】,进行新用户注册环节。
(2) 系统主界面图样如图4-4-1所示。
主界面设计思路:如图4-4-1所示,菜单条上的各菜单项与本系统实现的各种功能的窗体界面相连接,当用户进入系统后,用户可以通过选择菜单中的菜单项进入相应的界面。主界面也是用户进行单词练习的地方。练习界面如图4-4-2所示。在界面上可以通过对复选框的选择,实现“隐藏单词”/“隐藏词义”/“单词大写”的不同显示单词方式;并且通过滚动条的设置,确定自动浏览的速度,速度范围为50毫秒—10000毫秒/个,还可以手动浏览单词。
在“单词”菜单下,分别有:“词库设置”、“测试”、“字典”、“词库维护”和“退出”子菜单。
在“美音赏析”菜单下,有“选择”和“返回”子菜单。
图4-6-1 “攻破单词”主界面图样
图4-6-2 “攻破单词”显示单词后的主界面图样
其它界面与功能实现,将在下一章中详细介绍。
第五章 系统实现在软件的生命周期中,经过了系统规划、系统分析和系统设计等阶段以后,便开始了系统实施阶段。在系统分析和设计阶段,系统开发工作主要是集中在逻辑、功能和技术设计上,工作成果是以各种系统分析与设计文档来体现的。系统实施阶段要继承此前各阶段的工作成果,将技术设计转化为物理实现,因此系统实施的成果是系统分析和设计阶段的结晶[5]。
5.1 与数据库的连接在Java语言中,保持数据有几种方法,分别为:利用平面文件、串行化对象和使用数据库[11]。使对象串行化意味着可以把该对象写入某个流中,然后从该流中把它读取回来。流处理的一个例子是把输出结果发送到磁盘文件中,或通过网络连接发送给另一台计算机。此方法在本程序中不适用;当需要存储的只是一些配置设置,以后才打印的文本文档或要传输给世界上其他某个地方的XML文档时,平面文件是一种可行的选择,本程序就应用文件的方式存储听力文件;数据库是一种复杂的存储技术,它可以处理大量的数据,并且能方便的进行修改和查询,用数据库来存储单词是一个不错的选择。
数据库可以被定义为是在计算机存储设备上合理存放的,相互关联的数据集合,这种集合具有以下特点:
·以一定的数据模型来组织数据,数据尽可能的不重复。
·以最优方式为某个特定组织的多种应用服务。
·其数据结构独立于使用它的应用程序。
·对数据的定义、操纵和控制,由数据库管理信息系统统一管理。
SQL(Structured Query Language,结构化查询语言)是一种介于关系代数与关系演算之间的结构化查询语言,它是一个通用的、功能极强的关系数据库语言,集数据查询、数据操纵、数据定义和数据控制功能于一体。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select,Insert,Update,Delete,Create,以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作[2]。而实现Java语言与SQL结合起来的编程接口就是JDBC(Java DataBase Connection,Java数据库连接)。JDBC允许开发人员使用一个与数据库无关的公用API来编写应用程序。软件开发人员把数据写在API上,而不是写在底层数据库上。JDBC的中心在于执行基本的SQL声明和取回结果。Java JDBC代码能在数据库之间移植,是因为那些数据库特定的代码被包含在了一个叫做驱动程序的Java类中,如果需要改变数据库,我们只需要改变Java代码使用的驱动程序,就立即可以在新数据库上运行。JDBC API被设计成了能在尽可能多的关系数据库平台上使用。JDBC API通过提供封装具体功能的大量Java类和接口,是我们能轻松地编写访问关系数据库的代码。我们可以:
• 使用一个Driver Manager(驱动程序管理器)类来装载一个驱动程序。
• 使用一个Connection(连接)对象(实现 Connection接口的一个类实例)来建立与数据的连接。
• 使用一个Statement(语句)对象来封装SQL语言,并把它们发送给数据库与执行。
• 使用一个ResultSet(结果集)对象来检索查询结果等等[3]。
其中,JDBC驱动程序可分为以下4个种类:
① JDBC-ODBC桥加ODBC驱动程序程序。
这类驱动程序把JDBC转换成ODBC驱动器,靠ODBC驱动器和数据库通信。
② 本地API
此类型的驱动程序,将运用Java包装由数据库厂商所提供、用于操作数据库的API函数。
③ 纯Java客户库驱动程序
这种驱动程序将JDBC转换为与数据库无关的网络协议,之后这种协议又被某个服务器转换为一种数据库协议。这是最为灵活的JDBC驱动程序,可移植性最好。
④ 本地协议纯Java驱动程序。
这种类型的驱动程序不通过任何额外的中介软件,而是直接通过Java程序并利用网络协议,将操作数据库的需求,传递给数据库[2]。
本软件通过JDBC-ODBC桥访问数据库。其实现数据库连接的代码段如下:
try {
user = "";
password = "";
url = "jdbc:odbc:word";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn= DriverManager.getConnection(url,user,password);
sqlStatement = conn.createStatement();
} catch (Exception e) {
System.out.println("DbWord initialize:" + e);
}
5.2 线程的设计在传统操作系统中,“进程”是一个重要的概念。进程是一个内核级的实体,并且操作系统以它为执行单元进行调度。进程由PCB(Process Control Block)、程序代码、数据组成。在计算机中,可能有多个程序在运行。通常,将一个正运行的程序的实例称作一个进程,它不仅执行着自身的指令序列,拥有自己的数据空间,而且还占用着一定的系统资源,如CPU时间、内存空间以及一些设备的使用权等。进程之间是相互独立的,即使是启动两个相同的程序,系统都会启动两个独立的进程,它们分别占用不同的系统资源。随着操作系统的发展,出现了线程的概念。线程是对进程的扩展。在现代操作系统中,都支持多线程。
所谓线程,是一个逻辑概念,是指程序中的一个执行流。在一个进程中,可以有多个线程。它和线程一样,有一个入口、一个出口和一个顺序执行序列。这些线程在操作系统的调度下并发执行。使得每个线程都好像在独占整个系统资源。线程是操作系统的最小高度单元。Java中的线程有五种状态,分别是新生态(newborn)、可执行态(runnable)、执行态(running)、阻塞态(blocked)和死亡态(dead),通过程序控制实现状态间的转换。
线程与进程的区别主要体现在如下几个方面:
(1) 同样作为基本的执行单元,线程的划分比进程小。因此,支持多线程的系统要比只支持多过程的系统并发度高。
(2) 进程将内存作为自己独有的资源,每个进程都有自己的内存。与此相反,线程却共享内存单元,并通过共享内存交换信息。
(3) 线程的创建和进程的创建不同。创建进程要把程序段和数据从磁盘交换数据。因此多线程利于提高效率。
(4) 进程是相对静态的,代表代码和数据存放的地址空间。而线程是动态的,每个线程代表进程内的一个执行流。
启动线程占用较少的系统资源,并且线程共享进程资源。可以看出,线程具有轻便的特性,因此线程也称为轻线程。目前,多线程编程已经成为编程的一个有效的工具。利用多线程可以编出界面友好、效率高的应用程序,已得到了广泛的应用。
生成线程有两种方法,一种是通过继承Thread类实现线程体,另一种是通过实现Runnable接口来实现线程体。由于Java中不支持多继承,利用Runnable接口是子类做线程模板的唯一方法。
在本软件中也应用了线程的概念,主要的应用表现在“美音赏析”部分,使菜单的响应事件类实现Runnable接口,在其中重写的 run()方法中实现声音文件的播放,当选中【选择】菜单项时就创建一个线程,调用 run()方法。这样即使是在播放声音文件的同时也可以进行其它的操作,体现Java的多线程的优势。以上为菜单响应事件中,run()方法的实现源代码:
class MenuItemListener implements ActionListener,Runnable {
private FileInputStream ff=null;
public void run(){
try{
locate = new JavaSoundAudioClip(ff);
locate.play();
}
catch (IOException e){
}
}
┋
}
5.3具体的功能实现程序流程图又称程序框图,是详细设计过程中使用最广泛的工具,具有直观、形象、容易理解的特点;程序设计又称编码,是系统生命周期中继详细设计之后的阶段,这个阶段的任务是使用选定的程序设计语言,把程序设计说明书体现的信息处理过程描述后,转化成能在计算机系统上运行的程序源代码。由于篇幅有限,在介绍部分界面功能时,为便于讲解,本人附上该功能模块的程序流程图或实现相应功能的代码段。
(1) “登陆”的功能实现
界面如图4-3所示,用户输入信息,点击【登陆】按钮后,创建两个String类型对象,其值分别为文本输入框和密码输入框的内容,创建一个数据库连接的对象,通过Select语句,在数据库的t_user表中进行查找,如果存在相应记录,则进入主界面。其程序流程图如图5-1所示。
以下为“登陆”界面的【登陆】按钮的事件处理的程序编码。
String strUser = this.jTextField1.getText();
String strPwd = this.jPasswordField1.getText();
DbWord dw = new DbWord();
dw.DbWord();
String strSql = "Select user_id,user_pwd from t_user where ";
strSql = strSql + "user_id=""+strUser+"" and user_pwd="" +strPwd+ """ ;
try {
ResultSet rs = dw.runSelect(strSql);
if (rs.next()){
Words_in_mind window = new Words_in_mind();
window.setTitle("攻破单词");
window.pack();
Dimension ScrDim=window.getToolkit().getScreenSize();
Dimension WinDim=window.getSize();
int x=(int)((ScrDim.getWidth()-WinDim.getWidth())/2);
int y=(int)((ScrDim.getHeight()-WinDim.getHeight())/2);
window.setLocation(x,y);
LogOn.strUserId = strUser ;
window.setVisible(true);
this.setVisible(false);
}else{
this.jLabel3.setText("The UserID or Password is Error");
this.jTextField1.setText("");
this.jPasswordField1.setText("");
}
} catch(Exception ex){
System.out.println("Frm_LogOn.jButton1_acctionPerformed: " + ex.getMessage());
}
N
N
Y
Y
图5-1“登陆”模块程序流程图
(2) “修改密码”的功能实现
界面如图5-2所示,用户输入信息,当【确定】按钮被点击后,创建四个String类型对象,其值分别为文本输入框和密码输入框的内容,创建一个数据库连接的对象,通过Select语句,在t_user表中查找用户ID和密码均符合的记录,在判断了用户两次输入的新密码相同后,通过Update语句完成数据库中该条记录的密码修改,在些过程中,界面下方的标签框会显示相应的提示信息;当【取消】按钮被点击后便退回登陆界面。
图5-2 “攻破单词”修改密码界面图样
(3) “注册”的功能实现
界面如图5-3-1所示,用户输入信息,当【确定】按钮被点击后,创建三个String类型对象,其值分别为文本输入框和密码输入框的内容,判断输入有效后,创建一个数据库连接的对象,通过Select语句,在t_user表中获取最大的用户ID,将其值“加一”,作为新记录的user_id字段值。将获取的用户在输入框中
输入的内容分别作为新记录的user_name,user_pwd字段值,用Insert语句在t_user
5-3-1 5-3-2
图5-3 “攻破单词”注册界面图样
表中追加新记录,并在屏幕上回显新用户的ID,界面如图5-3-2所示,这是用户登陆时要用到的,所以要记住自己的ID;当【取消】按钮被点击后便可以退出该操作界面。其程序流程图如图5-4所示。
N
N N
Y
Y
图5-4“注册”模块程序流程图
(4) “词库设置” 的功能实现
界面如图5-5所示,些界面是用户进行单词练习必须设置的界面,倘若用户没有进行过此界面的设置,点击主界面的【开始】按钮,此界面也会出现。窗体界面由一个组合框,用于选择书目,组合框中的的内容是通过读取数据库中t_book表获得的;一组单选按钮,程序中定义了一个iOrder的整型变量,通过它的0,1,2,3的其中一个值确定默认/顺序/逆序/随机的不同浏览方式;三个文本域,是用户的输入区,用于设置“开始位置”、“复习数量”和“浏览速度”,其中“开始位置”的默认值为本用户各词库已测试单词的下一个(进行选书时响应)。以下为将书名
图5-5 “攻破单词“词库设置界面图样
添加到组合框中的功能实现源代码:
try {
int iBookNum,i=0;
DbWord dw = new DbWord();
dw.DbWord();
ResultSet rs = dw.runSelect("Select count(*) as count from t_book");
if (rs.next()){
iBookNum = Integer.parseInt(rs.getString("count"));
}else{
iBookNum = 0 ;
}
rs = dw.runSelect("Select book_name from t_book");
String[] sBookName = new String[iBookNum];
while (rs.next()) {
sBookName[i] = rs.getString("book_name");
i++;
}
Vector vBook = new Vector(iBookNum);
for( i = 0; i
上一篇:大学专业职业生涯规划范文四篇