java课程设计记忆游戏(精选6篇)
Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下:
(1)扫雷游戏分为初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。
(2)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。
(3)用户要揭开某个方块,可单击它。若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(4)如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(5)扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。
(6)用户可以选择标记疑问的方块,用可以勾选游戏菜单下的标记(或者用快捷键alt+G 然后M)即可,此时双击右键并可出现“?”标记。另有颜色选项,当用户勾选此项时,游戏将以最低图像像素来显示。
(7)如果用户需要即使提示声,并可选中声音选项,此时将听到计时的卡塔声。当用户点中雷时,将有爆炸声产生,胜利时,将有凯旋的旋律播放,此时企鹅出现欢悦表情。
二、需求分析
1、扫雷游戏概述
扫雷是一种具有迷惑性的对记忆和推理能力的简单测试,它是长久以来最受欢迎的Windows游戏之一。游戏目标:找出空方块,同时避免触雷。
2、扫雷的操作方法
游戏主区域由很多个方格组成。使用鼠标随机点击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷;如果点开的格子为空白格,即其周围有0颗雷,则其周围格子自动打开。
例如,方格中出现1,说明上下左右及斜角合计有一颗雷,依次类推,2则有2颗,3则有3颗。
3、需实现的主要功能
(1)用户可以自定义级别并且可以任意输入雷数;
(2)具有计时功能,即显示用户完成移动盘子所花费的时间;(3)用户可以选择是否有音效;(4)自动保存扫雷英雄榜;
三、总体设计
1、总体功能图
扫雷游戏主界面游戏菜单重新开始帮助开局级别选择标记英雄榜退出关于扫雷
2、总体流程图
开始定义并初始化个按钮,菜单等菜单菜单事件处理按钮按钮开局选择级别标记声音英雄榜退出重新开始方块展示相应的效果是否点中雷NY结束
四、详细设计
1、扫雷棋盘的布局设计
系统的整体布局为:CardLayout布局, 采用了菜单、按钮、面板„等组件,菜单主要包括开始,选择级别,标记,扫雷英雄榜,退出,按钮的功能是重新开始新的游戏。
2、雷区的设计
MineArea类是javax.swing包中Jpanel容器的子类,实现了ActionListener和MouseListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。标明MineArea类的主要成员变量、方法以及和MineGame类之间组合关系的UML图如图2-1所示。
JPanelActionListenerMouseListenerMineArearow,colum,mineCount,markMount: inblock: Block[]blockView: BlockView[][]showTime: JTextFieldshouMarkedMineCount: JTextField initMineArea(int,int,int): voidactionnPerformed(ActionEvent)voidmousePressed(MouseEvent): voidlay: LayMinesrecord: Record reStart: JButtontime: Timer show(int m,int n): voidinquireWin(): voidMineGamemineArea:MineArea------------------MineArea类的UML图
以下是UML图中有关数据和方法的详细说明。
1、成员变量
(1)block是Block类型的数组,用来确定雷区有多少需进行扫雷的方块。(2)blockView是BlockView类型的数组,负责为block数组中的Block对象提供视图。
(3)lay是LayMines类型的对象,负责设置block数组中的哪些方块是雷或不是雷。
(4)record负责提供保存成绩的界面,是一个对话框,默认不可见。用户只有扫雷成功后(用时最少),才可以看见对话框。
(5)reStart是一个按钮对象,用户单击它重新开始游戏。(6)time是计时器对象,负责计算用户的用时。
2、方法
(1)initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度、高度、雷的数目以及雷区的级别。
(2)actionPerformed(ActionEvent)是MineArea类实现的ActionListener接口中的方法。当用户单击blockView中的某个方块时,actionPerformed(ActionEvent)方法负责执行有关算法,例如,当用鼠标左键单击方块上的按钮后,若该方块下有雷,actionPerformed(ActionEvent)方法将使用户输掉本局,若该方块下无雷,actionPerformed(ActionEvent)方法将显示blockView对象中的标签,该标签上是一个数字,该数字代表当前方块的周围的8个方块中共有多少颗雷。
(3)show()方法是一个递归方法。actionPerformed(ActionEvent)方法执行时将调用show方法进行扫雷。
(4)mousePressed(MouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标有件事mousePressed(MouseEvent)方法负责让方块上显示一个探雷标记。
(5)inquireWin()方法用来判断用户是否扫雷成功,如果成功该方法负责让record对话框可见。所谓扫雷成功是指不仅找到了全部的累而且用时最少。综上所述,MineArea创建的扫雷区域效果如图2.2.2所示。
3、音效的设计
music类是java.awt包中Frame的子类,通过构造音效声音方法,在MainFrame主类中,通过ActionListener来监视是否已开始游戏,来决定播放计时声,之后又通过ActionListener来监视是否踩到雷和是否完成来决定,播放相应的音乐。下面标明music类的主要成员变量、方法以及和MineFrame类之间组合关系的UML图如图2-2所示。
musiclooping,looping2,looping3:booleanfile1,file2,file3:Filesound1,sound2,sound3:AudioClipchosenClip1,chosenClip2,chosenClip3:AudioClipdidaInit():voiddidaLoop():voiddidaStop():voiddetonationInit():voiddetonationPlay():voidvictoryInit():voidvictoryPlay():void MineArea类的UML图
4、排行榜设计
LogDialog是javax.swing包中Jdialog对话框的子类,并实现了ActiongListener接口。LogDialog创建的对象dialog是MainFrame类(主类)的成员之一,当用户选择查看“英雄榜”菜单项时,该对话框可见,提供了查看扫雷的最好成绩的界面。标明LogDialog类的主要成员变量、方法以及和MainFrame类之间组合关系的UML图如图2-3所示。JDialogActiongListenerLogDialogfile:File 显示成绩:重新记分:JButtonactionPerformed(ActionEvent):voidreadAndShow:voidMineGameshowHeroRecord:ShowRecord
LogDialog类的UML图
五、调试分析、测试结果
在程序代码基本完成后,经过不断的调试与修改,最后测试本次所设计的扫雷游戏能够正常运行,在基本功能与画面上与Windows自带的扫雷游戏没有太大差别,没有出现明显的错误和漏洞,但是在一些细节方面仍然需要完善,比如在游戏中可以加入一些不同语音的提示,在游戏完成和失败的时候可以弹出一些小的Flash动画,还有就是可以扩展一下扫雷英雄榜的功能等。总的来说本次设计在功能上已经基本达到要求,其他细节方面有待以后完善。
六、结论及改进设想
1、界面的美观性做的不太好,比如说布局,颜色搭配有待改进
2、背景音乐在播方的时候有一点小问题,比如单击停止播放,音乐并没有停止,需要单击2次或多次;另外背景音乐似乎很占内存,运行的时候容易死机。
3、MineGame的初始化界面大小难以控制,特别是在自定义的情况下,需在手动改面窗口的大小。
七、心得体会
这个扫雷游戏是完全模拟微软系统自带的扫雷游戏,所以难度是比较大了,必然在编程过程中也遇到很多问题,有些问题比较简单但就不知道错在哪里,有些大问题之道在哪就是不知道怎么办才好,后来经过自己的不断调试,这个扫雷游戏终于大功告成。
经过编写这个扫雷游戏,我认识到应该注意细节问题,虽然是很小的问题,但可以提高自己编程的能力,而且还可以培养自己编程的严谨性,同时还可以为以后的编程积累经验。编写完这个扫雷游戏,我发现自己有很多的不足,我想如果让我来单独来编写这个游戏,我感觉很吃力,因为这个游戏涉及到好多算法。感触最深的就是我们真的要扎扎实实的打基础!并且我感觉到只要我们自己肯下功夫学习,我们也可以做出很好的东西。
通过该课程设计,全面系统的理解了程序构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。现在通过自己动手做实验,从实践上认识了Java是如何处理命令的,课程设计中程序比较复杂,在调试时应该仔细。
在这次课程设计中,我就是按照实验指导的思想来完成。加深了理解文件系统的内部功能及内部实现,培养实践动手能力和程序开发能力的目的。
八、参考文献
[1] 耿祥义.Java大学实用教程.北京:清华大学出版社,2009. [2] 耿祥义.Java课程设计.北京:清华大学出版社,2008.
[3] 王鹏.Java Swing图形界面开发与案例详解.北京:清华大学出版社,2008. [4] 丁振凡.Java语言实验教程.北京:北京邮电大学出版社,2005. [5] 郑莉.Java语言程序设计.北京:清华大学出版社,2006.
课程体系设计
随着3G技术的成熟, 手机开发人才需求大幅增加, 手机游戏开发人才的培养应顺应市场的需求, 科学设置课程, 突出实践性和实用性。Java手机游戏开发专业是我们在大量调研的基础上, 在我校开设的培养手机游戏开发人才的新专业。该专业需要学生在掌握Java的基础上, 进一步掌握手机上的游戏开发技术, 需要学生掌握图像处理、手机平台特性、动画、美工、游戏策划及编程语言等。
在设置课程时, 我们进行了大量的调研, 结合同类专业的培养方案, 在加强实践特色的基础上制定了该专业的课程体系, 该体系包括理论课程和集中实践, 理论课程又分为公共基础课、职业素质基础课和职业技术课。Java手机游戏开发专业的主要课程设置如表1所示。
课程体系构成
公共基础课公共基础课是根据我国大学教育的指导方针制定的, 目的是为了提高在校生基本素质, 完成学校规定的基本素质教育, 提高学生的思想道德水平和认知能力。在相关专业, 主要开设了艺术鉴赏等课程, 通过这些课程学习使学生具备一定的审美能力, 为将来设计出界面好看的游戏打下基础。
职业素质基础课职业素质基础课的培养目标是使学生了解计算机的相关基础知识, 熟悉常用的算法, 掌握游戏开发的基础知识, 熟悉游戏开发的整个过程, 了解游戏策划和运营等知识, 全面了解游戏的开发过程。核心课程设置如下。
1.游戏设计概论课程。该课程的培养目标是让学生对游戏及游戏发展有一个全面了解, 主要包括游戏的类型介绍、游戏产业发展、国内的游戏产业、游戏市场发展、游戏开发人员需求、游戏的创作过程和游戏工程师发展等内容。学生通过学习对个人的职业规划有了认识, 可逐步确定个人的发展方向。
2.Java程序设计课程。该课程的培养目标是让学生掌握Java编程语言的基本内容和方法, 为后续的Java手机游戏程序设计课程提供基础, 讲授重点是编程语言的基本结构, 培养学生的基本编程能力。
3.数据结构课程。该课程是计算机专业的基础课, 目标是让学生掌握常用的算法, 在设计课程的教学内容时考虑到手机游戏开发的实际应用, 特别增加了碰撞检查相关的算法内容。
4.游戏架构与策划。该课程的培养目标是让学生了解游戏架构与策划的相关知识, 内容主要包括游戏背景设计、游戏关卡与任务设计、游戏界面与用户控制等游戏策划和构架设计的流程。学生通过学习对个人的职业规划能有更深入的认识, 逐步确定个人的发展方向。
职业技术课职业技术课是整个游戏开发专业的核心课程, 目标是使学生掌握游戏开发的主要技术和开发方法, 掌握主流开发工具, 并学会开发Java手机游戏, 具备参与游戏开发的能力。核心课程设置如下。
1.PhotoShop课程。虽然不是游戏开发专业的核心基础课程, 但作为游戏开发人员, 对平面图像必须有一个深刻的认识, 这门课程要求学生学会平面图像的基本处理方法, 掌握PhotoShop开发工具的各种操作技能, 进一步直观感受游戏的魅力。
2.J2ME程序设计课程。这是核心课程, 要求学生在掌握Java的基本语法、面向对象的基本思想和类的相关内容的基础上, 掌握J2ME程序设计中的MIDP高层界面设计和底层界面设计, 掌握游戏中的动画和多线程设计, 掌握MIDP记录管理。
3.J2ME手机游戏案例开发课程。这是核心技术课程, 在课程内容上, 通过完整的游戏案例使学生能够学会不同类型的Java手机的开发模式。在案例的选择上, 我们将游戏分为益智类、射击类、动作类及角色类等常见的游戏类别, 针对每个类别给出一个完整的游戏案例, 使整个游戏的开发贯穿于授课过程中, 在课堂上采用“1+1”模式, 即一次讲授加一次上机的模式。
4.手机开发平台。这门课的突出特点是“广”, 介绍一些当前主流的手机开发平台, 如Android、iPhone等, 通过一些简单的实例让学生认识更多的手机开发平台, 了解不同平台之间的差异, 为后续的学习与提高打开思路。
集中实践培养过程的实施可以归结为“夯实基础, 强化训练”, 夯实基础即培养基本的编程能力, 掌握基本的游戏开发技术;强化训练即强调实际能力的培养, 通过对实际的游戏开发项目进行训练, 使学生综合掌握所学内容。在我们的课程体系中, 通过实践提供给学生的实际能力呈现出鲜明特点。在第1~4学期分别设置了一级、二级、三级集中实践课题和毕业实训。具体实践环节安排如表2所示。一级实践课题为验证型实践, 在第一学期最后1周进行, 学生在学习了Java语言基础之后, 通过实践掌握Java语言及软件的开发方法。一级实践课题一般给学生一些小的题目, 让学生验证。如, 要求学生用Java语言编写一个小的五子棋游戏等, 学生通过开发这些小程序, 能够学习游戏开发软件的模块划分方法、软件的基本组成等知识。二级实践课题为验证型实践, 在第二学期最后3周进行, 学生在学习了J2ME程序设计课程之后, 通过实践掌握J2ME程序设计的内容。二级课题要求学生以小组形式展开, 3~5学生共同完成一个Java手机游戏中涉及的小模块, 或制作一个小的完整的游戏, 如制作一个拼图游戏等。学生通过实践除了掌握J2ME程序设计的基础知识外, 还可掌握游戏开发过程中所涉及的其他能力, 如模块的划分、团队之间的合作沟通等。三级实践课题为设计型实践, 在第三学期最后3周举行。学生在学完J2ME案例开发课程之后, 同时也基本学完了所有的专业课程。三级课题要求学生以项目组的形式展开, 4~8个学生为一个项目组, 要求项目组完成一个完整的Java手机游戏, 并要求项目组最后提交相关的文档, 包括需求文档、设计文档和测试报告等。项目组成员之间分工合作共同完成游戏项目的开发过程。毕业实训采用实地场景教学, 参与实际的游戏项目、角色模拟、项目驱动。我们通过与实训公司合作共同完成对学生毕业实训的培养目标, 主要采用两种方式, 一是学生到公司实训, 二是学校从公司聘请工程师到学校开展实训。各实践环节环环相扣, 循序渐进, 由易到难, 由单一到综合, 形成一个完整的实践体系。
遇到的问题与采取的措施
时间短, 任务重随着高职教育体制的改革, 原来的三年专科教学现在已经改成两年, 在两年的时间内完成众多专业课的培养, 是一项艰巨的任务。特别是在有些学生底子比较薄弱的情况下, 更会感觉学习任务重。在讲课过程中, 教师不得不忽略一些不重要、不常用的知识点, 如在Java的授课过程中, 针对Java的界面编程部分不能耗费过多的课时。
教学环境有待改善在实际教学中, 我们采用的开发环境大多是模拟环境, 尽管学生也可以通过模拟环境开发出手机游戏, 但相对于实际的手机运行环境还是有一定的差距。学生在模拟环境中开发的游戏往往在移植到实际环境时出现这样或那样的问题。在开发环境上, 学校的投入还不够, 有待进一步解决。
考核方式控制难传统的试卷考试方式对于以实践为宗旨的教学体系而言不是很适应, 我们在教学改革中采用了笔试加机试的方式。上机考试在突出计算机课程实践考核的同时, 也在控制考试效果方面出现了不少问题, 如电子文档较纸质文档更易复制等等。我们在控制考试结果的有效性方面投入了很多人力物力, 增加了不少硬件和软件方面的控制, 耗费了不少资源。
学生到企业实训难学生到企业实训难主要表现在两个方面, 一是资金难, 二是组织难。在资金方面, 企业靠利润驱动, 学生实训往往要收较高的费用, 这方面我们采取学校和学生共同承担的方式加以解决。在组织方面, 主要是学生人数较多, 管理师资的力量相对不足, 只能通过学生分组, 教师和学生共同管理的方式加以解决。
通过实际教学和总结, 我们在Java手机游戏开发专业的建设方面取得了成效, 已经逐步形成了完整的课程体系。但作为一种新的技术人才, Java手机游戏开发工程师的培养需要社会环境的支持, 特别是需要手机游戏开发企业的支持。在3G技术大发展的今天, 我们迫切希望在更多企业的支持下, 通过我们的努力培养出更多的符合企业需求的游戏开发人才。
参考文献
[1]韩玉民, 车战斌, 买志玉.高职软件类学生校外毕业实训管理的探索与实践[J].计算机教育, 2010, (1) :83-85.
[2]何拥军, 朱小平, 范路桥.高职游戏专业课程置换工学结合人才培养模式探讨[J].职业教育研究, 2010, (3) :32-33.
[3]王理.高职院校游戏专业建设初探[J].黄冈职业技术学院学报, 2007, (9) :39-41.
[4]罗光华, 陈传起, 丁知平.高职艺术院校游戏设计专业教学的研究[J].中国高新技术企业, 2008, (7) :256-258.
关键词课程建设;课程设计;软件编程(Java方向)
中图分类号G420文献标识码A文章编号 1673-9671-(2010)031-0135-01
2005年,国务院《关于大力发展职业教育的决定》中提出的一项重要任务,即深化职业教育教学改革。并在《关于全面提高高等职业教育教学质量的若干意见》进一步明确提出:课程建设与改革既是提高教学质量的核心,也是教学改革的重点和难点。长期以来,传统学科性课程始终统治着我国的职业教育,但职业教育最根本的特性是职业性,最重要的目标是培养技能型人才。职业素养和职业能力的提升主要通过课程教学实现,是否拥有与岗位、岗位群相适应的课程设计,关系到高职人才培养目标能否实现,关系到高职教育能否持续发展。
通过几年的实践教学及高职教学改革经验的探索,我对高职院校的国家精品课程《软件编程(Java方向)》的课程设计有了一些独特见解,下面我将从课程定位与设计思路、教学内容的选取、教学设计、考核与评价等方面进行论述。
1课程定位与设计思路
1)课程定位。本课程是为培养Java程序员而设置的,是软件技术专业的一门专业核心课程,主要培养学生的软件编码能力和项目开发能力,使之适合Java程序员的工作岗位需求。通过本课程的教学使学生掌握面向对象的程序设计思想、动态网站开发的相关技术,能够采用MVC的设计模式,选择合适的框架技术和开发工具,设计和开发基于Java的应用程序。为今后从事软件开发、软件测试、软件管理等岗位打下良好的基础。
2)设计思路。课程设计的核心是课程内容的设计、教学模式的设计、实施方案的设计与评价体系的设计。本课程遵循“以职业行动获得知识”的认知规律,以岗位工作综合能力培养为核心,对职业岗位的工作内容、工作过程、工作环境等内容加以分析提炼,并按照循序渐进的教育规律进行深度加工,对应构建课程教学,使学生获得知识的过程始终与具体的职业实践相对应。与启明信息技术股份有限公司合作,结合Java程序员的岗位需求,把课程设置为软件编程Java—桌面开发、软件编程Java—web开发、软件编程Java—web高级开发三个模块。通过以上三个模块的学习,培养学生编程思想,积累项目开发经验。
2教学内容选取
1)社会调研。近三年,课程组成员通过专家访谈、调查问卷和网络搜索三种方式社会调研,明确软件企业对Java程序员的任职要求,掌握Java程序员的工作任务和工作方法。了解企业对Java程序员的总体要求;调查问卷主要针对不同类型软件企业以及同一软件企业不同层次的人员(项目经理、系统分析师、系统架构师、编码人员和测试人员)进行,从不同层面了解企业对Java程序员的具体要求。
2)工作任务及职业能力分析。通过调研,掌握软件企业软件开发部门的工作任务,对其进行总结归纳,明确Java程序员的典型工作任务。根据软件企业Java程序员的典型工作任务和任职要求,进行全面的职业能力分析。(1)具备C/S架构设计能力;(2)具备B/S多层架构设计能力;(3)数据库设计能力;(4)根据具体情况调试程序的能力。
3)内容选取。本课程以工作任务为载体选取学习内容,开发设计学习性项目,组织教学内容。遵循“做中学,学中做”的教学原则,以完成项目为目标,以工作过程为主线,以企业工作组织形式(小组)为团队,将学习过程映射为工作过程,在自主学习过程中完成指定任务,掌握专业技能。本课程分为软件编程Java—桌面开发、软件编程Java—web开发、软件编程Java—web高级开发三个模块。
桌面开发模块包括掷骰子、简单计算器、聊天室、二十一点游戏、超市管理系统5个项目,使学生掌握面向对象的思想及J2se基础知识。web开发模块使用网上购物管理系统(WEB1.0)项目,使学生掌握Jsp、Servlet、Filter等技术。web高级开发模块使用网上购物管理系统(WEB2.0)项目,使学生掌握各种流行框架技术的应用。
3教学设计
坚持以岗位能力培养为本位的设计原则,教学内容、教学方法以及考核方式均围绕能力培养来进行设计。在教学过程中,培养学生树立面向对象程序设计的思想,强调学生在学习过程中的主体地位,并实现分层次教学。将学生开发实际工程项目的能力培养以及再学习能力和创新能力的培养作为教学的重点,采用“项目驱动”教学法和“榜样学习”教学法进行教学。以掷骰子项目为例,教学设计如表1所示。
表1掷骰子项目教学实施方案设计
4考核与评价
为保证学生成绩采集的多元性、全面性及公平性,本课程采取過程考核与企业案例考核相结合的方式,这种方式极大地调动了学生学习的积极性、主动性,使课堂教学更加高质高效地进行。
1)过程考核。根据学生平时阶段性项目设计、课堂提问等综合表现,给出过程考核成绩,过程考核成绩占总成绩的40%,此种方式能够在一定程度上增加成绩采集的全面性、客观性,也是对学生平时表现的监督,是保证课堂教学质量的前提。
2)企业案例考核。本课程最终采用“企业案例考试”,学校与企业共同制定案例实践考试方式的项目。企业案例考核占总成绩的60%。它不是以简单客观题为主的标准化考试,而是引入了以企业实际项目为
基础、企业参与命题的“企业案例考试”方式,学生在进行案例考试的同时,就是在模拟企业实际工作中的项目开发,使考试内容与工作实践结合更加紧密,考试结果的说明性更强。“企业案例考试”是对传统考试方式的革新,是考试与企业岗位需求的良好结合。“企业案例考试”将最大限度地杜绝学生突击背题等有损考试真实性的行为,从而能够保证以最小的误差评定学生在Java程序员岗位的工作实践能力,能够为IT校企联盟中企业提供最精确的人才素质信息。
以上为本人对高职院校Java课程的设计思路,在实施过程中建议采用高职高专系列工作过程导向化教材,建议选用具有企业工作经历和中小型项目开发能力的双师型教师,并能够指导学生进行生产性实训,具备行动导向教学组织能力。
参考文献
[1]陈亚玲.中国高职教育改革与发展的回顾与反思,2007,9.
[2]徐明华.Java Web整合开发与项目实战[M].北京:人民邮电出版社,2009.
作者简介
一、课程设计的目的
为了进一步巩固java程序设计课程所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了一周的Java程序设计课程设计。
通过此次课程设计,巩固所学java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
二、课程设计的基本要求
1、明确题目要求,进行需求分析;
2、进行功能设计,编写设计说明;
3、进行程序设计与调试;
4、对设计过程进行系统的总结;
5、界面美观大方;
6、完成设计报告
7、课程设计建议在Editplus +JDK、JCreator +JDK、myeclipse平台上开发、调试。
8、Java源程序应加上详尽的注释语句,对所设计的类、属性、方法说明其用途,对方法的调用说明其用意和使用参数的原因。特别是有深刻理解、有独特见解的地方,用注释语句加以说明。
三、课程设计的主要内容
利用学到的编程知识和编程技巧,通过具体项目的分析、设计和开发,掌握开发Java大型软件项目过程中所需要的软件技术并熟悉软件。
可以以小组为单位,每组1至2名学生,在教师的指导下,每组完成一个题目。题目可由下面提供的选题中选择或学生自选经教师审核后方可。该组每个同学承担题目的不同部分,每位同学的课程设计报告必需独立完成。题目类型大致分配如下:
1、网络通讯类,编制网络聊天(Chat)程序,以下简称“网络”类。
2、图形界面Application类,编制类似计算器、MP3播放器、围棋打谱,斗地主、潜艇大战、挖地雷、迷宫等功能单一的程序,以下简称“图形 ”类。
3、通讯类,使用Socket通讯完成信息通讯,比如QQ
4、数据处理类,编制考试系统、出题系统、查询系统、学生学籍、课程成绩、图书编目、仓库货物等数据录入查询程序,以下简称“数据”类。
5、其它类型,自选题目,须经老师同意。
四、主要技术关键的分析、解决、方案比较
以下是可以参考的课程设计可能包含的相关知识:
1、Java核心编程J2SE:
面向对象技术
Java程序运行机制
开发环境的安装和配置 Java语言基础和重点API Java程序异常的处理 I/O、控制台程序开发 Swing程序开发 Socket通讯
2、数据库技术:
关系型数据库原理 SQL数据查询语言 MS SQL Server使用方法
数据库中对象的建立与使用
Java数据库编程(JDBC)
五、课程设计考核方式与标准
采用上机情况、程序质量、实习报告相结合的考核形式:
1、上机情况
包括出勤情况、调试程序时表现。
2、程序质量与创新能力
最终完成的程序设计的工作量、质量、难易程度。
3、课程设计报告
报告的格式与内容。
六、参考题目及要求:
1、多媒体播放器程序的设计与实现
目的:利用java开发一个支持mp3、wma、wmv、avi、mpg等不同音频、视频格式的多媒体播放器。通过课程设计掌握多媒体编程的基本原理。任务: 编程实现一个可支持多种音视频格式的多媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、停止以及歌曲信息的查询与添加等;
2、带格式的文本编辑器
功能参考word软件
3、学生信息(包括成绩)管理系统
要求:
使用图形用户界面
用数据库建立1或2个学生信息表。(不限使用哪种数据库)能连接数据库并实现查询、增、删、改等功能。
4、期刊资料信息管理系统
要求:
使用图形用户界面
用数据库建立1或2个图书信息表。(不限使用哪种数据库)能连接数据库并实现查询、增、删、改等功能。借阅记录等信息
5、聊天小程序QQ 要求:使用图形用户界面。能实现一个聊天室中多人聊天。可以两人私聊。提示:使用socket通信
6、ATM柜员机模拟程序
要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
1)查询余额:初始余额为10000元
2)ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
3)ATM存款:不能出现负存款。
4)修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
7、超市收银系统
要求:使用图形用户界面。
由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从数据库中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。
另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满200元,可为其发放一张会员卡,以后在该商场购物可向9折优惠。
8、网络监听程序
要求:使用图形用户界面。
有服务器和客户端,服务器监听客户端的登陆。即:如果A客户端登陆服务器,则服务器界面上的A字母对应的红灯变成绿色。
绿灯表示连接,红灯表示断线。提示:socket的监听方法
9、全球通计费程序
要求:使用图形用户界面。
使用真实的全球通资费标准,模拟统计一个特定号码的一个月的实时话费。能根据输入实现各种用户的话费的计算并显示月实时帐单。
提示:使用接口和多个子类实现分别表示金卡、银卡等各种套餐的话费计算。
10.学生机房上网计费系统
要求: socket通讯
11.电子英汉词典
要求:
能够编辑词典库中的信息
能够实现英译汉,汉译英。(要考虑一词多义)
12.加密与解密
要求:采用图形用户界面
1)给定任意一个文本文件,进行加密,生成另一个文件。2)对加密后的文件还原。3)图像水印的添加以及还原
13.小游戏
要求:。
程序随机产生20—50根火柴,由人与计算机轮流拿,每次拿的数量不超过3根,拿到最后一根为胜。(使用图形界面)
14.敏感词汇分析
要求:
任意选择一个文本文件,分析该文件,如果存在敏感词汇(这些词汇保存在sentive.txt文件中,每个词占一行),报告每个词出现的次数。
15、猜数字游戏
要求:计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语。
要求提交Application和Applet两个版本的程序。
16、小学算术运算测试程序
要求:制作一个可供小学数学运算程序:10以内加减法,能根据输入题数出题,判断做题是否正确,最后计算分数。
要求提交Application和Applet两个版本的程序。
17、模拟画图
要求:模拟Windows中的画图程序,实现图形图像的编辑、修改、保存等功能。模拟时钟
要求:通过多线程技术,重绘界面,界面包括表盘和指针。并用数字表显示时间。实现要点:多线程技术,图形的绘制。
18、打字训练测试软件
要求:设计一个英文打字测试软件。从文件中调入英文录入材料,最后可以给出错误率,平均录入速度。
19、用java开发一个小型数据库管理系统,比如Access 在界面中输入SQL语句,可以完成数据可的相关功能 20、学生宿舍管理系统
数据库
21、电话号码查询系统,ip地址、手机归属地查询
要求:有电话录入,修改,增加,删除,按姓名查询,按电话号码查询,按部门查询,按部门显示,显示所有电话号码信息,打印等功能。
22、同学录管理系统()
要求信息的录入、查询、删除、修改等一列功能。
22、购物车子系统
要求:使用图形用户界面。当输入给定的顾客编号和密码(初始卡号和密码为123456)时,系统能进入购物车子系统,顾客可以按照以下规则进行: 查询自己购物车中商品信息; 修改 删除物品 数据库库存管理
23、火车票管理系统
要求: socket通讯,多线程
服务器端数据库存放火车票信息
客户端(窗口)卖票,退票
24、利用Socket通讯模拟学生食堂卖饭系统
账户的管理,充值管理,售饭管理
启动两个客户端(窗口),模拟售饭过程
25、为一个超市设计一个货物管理程序。
要求:
进货库:货号,货名,型号
,进货量,进货价,经办人,销售库:货号,销售量,售价,利润。
存库:
货号,库存量。
二
包含功能:
1)在程序中初始化库存库,销售库,及进货库.2)可提供菜单,供随时添加,修改,删除,查找库中信息.(具体货物及编号等自编),在设计时应尽量考虑全面,比如查找就可以按照货名或者货号,经办人等来查找。
3)可自动计算利润等字段。可以统计总利润。
4)可随时根据进货库调整库存库。
5)可随时根据销售库调整库存库。
6.)可根据要求核对库中内容,如数量是否一致等。
7.)可根据销售情况统计出销售排行榜。
8.)自行设计的其他功能。
1、学期授课计划是否符合教学大纲要求 符合。
2、教学内容及进度是否与学期授课计划有出入,是何原因 无出入,完成规定的学习内容。
3、作业计划、阶段测试计划、期末考试完成情况如何
顺利完成预定的作业计划及阶段测试计划。顺利完成期末考试。
4、总评成绩结果分析
因学生素质较高,在课堂表现、课程作品和答辩中整体表现良好,因此总评成绩整体较高,85分以上人数占24%,无不及格学生。
5、对本课程教学及存在问题有何改进意见和设想
在今后的教学过程中应该加强“项目导向,任务驱动”的教学手段的运用,同时应采取各种方法加强与学生的互动。在本课程中,我采用了多媒体网络教室、MindMapper、飞秋等软件辅助教学,以学生为主体,以项目为主线,学生的参与性非常高,效果很好,在今后的课程中我会继续加以实践和总结。
淮
学
院
JAVA 课程设计报告
题
目: 《ATM柜员机》课程设计
学
院:
信 息 工 程 学 院
专
业:
计算机科学与技术
指导老师:
二0一三年六月
目录 课程设计过程概述.......................................................................................3 2 课程设计题目描述和基本设计要求...........................................................3 3 系统需求分析...............................................................................................3 3.1 功能需求分析···················································································· 3 3.2 其他需求分析···················································································· 4 4 系统设计........................................................................................................4 4.1 总体设计 ··························································································· 4 4.2 ATM柜员机界面设计 ········································································· 5 4.3 各功能模块设计 ················································································ 7
4.3.1 登陆页面模块设计 ····························································· 7 4.3.2 选择服务模块设计 ····························································· 8 4.3.3 取款模块设计 ····································································· 9 4.3.4 修改密码模块设计 ····························································· 9 4.3.5 退卡模块设计 ··································································· 10
4.4 异常处理情况说明 ·········································································· 10 5 系统实现与测试.........................................................................................11 6 课程设计总结.............................................................................................13 6.1 遇到的问题及解决办法 ·································································· 13 6.2 心得体会 ························································································· 14 参考文献..........................................................................................................15 附录..................................................................................................................15
ATM初始账号:000000
初始密码:123456
ATM柜员机 课程设计过程概述
2013年6月,JAVA课程设计在1#楼六楼机房进行,持续时间为两周。这次课程设计的主要目的是结合面向对象程序设计课程,培养我们面向对象软件开发的思维,初步了解软件开发的一般流程,提高用JAVA编程的实际动手能力并增强大家对面向对象的了解。这次课程设计的主要内容是独立用JAVA语言开发一个小的应用程序。我们开发了一个ATM柜员机。课程设计题目描述和基本设计要求
我设计的ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。3 系统需求分析 3.1 功能需求分析
本ATM柜员机的主要功能如下所述:
要求使用图形用户界面。当输入给定的卡号和密码(初始卡号为000000和密码为123456)时,系统能登录ATM柜员机系统,用户可
以按照以下规则进行:
查询余额:初始余额为50000元
ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。 ATM存款:不能出现负存款。
修改密码:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
3.2 其他需求分析(1)性能描述
实时性好、灵活性强、易于不同年龄阶段的人操作。(2)设计约束 开发工具:MyEclipse 运行环境:Windows XP、Window 7 能实现用户所定义的各项需求。(3)界面要求
以Windows窗口形式显示,标题栏为ATM柜员机名称,右上角有最小化按钮、最大化按钮、关闭按钮,不同的窗口中有不同的按钮和选择菜单。4 系统设计 4.1 总体设计
我所设计的ATM柜员机主要是由登录页面模块还由选择服务模块组
成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。其功能结构图如下所示:
图1 ATM功能结构示意图 4.2 ATM柜员机界面设计
我们觉得一个系统的界面应该要简单明了,当然样式美观就更好了。我设计的界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。
一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。我设计的界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。(1)窗体的设计
窗体整个框架使用Frame类构造,Frame有自己的外边框和自己的标题,创建Frame时可以指定其窗口标题,我创建的窗口标题是各个不
同功能的模块的名字,比如说查询余额,还有取款等。相应源代码为: 向Frame窗口中添加组件使用add()。例如:button1 = new Button(“存款”);p1.add(button1);this.add(p1);每个Frame在其右上角都有三个控制图标,分别代表将窗口最小化、窗口最大化和关闭的操作,其中最小化和最大化操作Frame可自动完成,而关闭窗口操作实现需要书写有关的代码,在我的程序中我采用的是对WINDOWS_CLOSING事件做出响应,调用dispose()方法关闭窗口。Frame也可以引发WindowsEvent类代表的窗口事件。相应源代码为:
addWindowListener(new WindowAdapter()//窗口侦听器,以从此窗口接收窗口事件
{public void windowClosing(WindowEvent e)//处理窗口关闭事件 { System.exit(0);} });}(2)窗体的主要结构的设计
我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。所以整个设计就趋向简单化了。
为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvent e)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。4.3 各功能模块设计 4.3.1 登陆页面模块设计
与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。我定义了文本框类的对象tf1,tf2。是用于输入单行的文本;文本区调用public String getPassword()方法,获取用户想要的字符串。用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。此模块相应的部分源代码为:
public void actionPerformed(ActionEvent e){ Account act;act=new Account(“000000”,“HuangHuai”,“123456”,50000);//初始化
/*选择各种服务*/ if(e.getSource()== button1){ String number1,number2;//输入的两个卡号和密码的变量
number1=tf1.getText().toString();number2 = new String(tf2.getPassword());
/*判断两次输入的卡号和密码是否正确*/
if((act.getCode().equals(number1))&&(act.getPassword().equals(number2))){
dispose();
new Selection(“选择服务”,act);}else{
JOptionPane.showMessageDialog(this, “密码或帐号错误!”,“账户提
示信息”,JOptionPane.ERROR_MESSAGE);
dispose();
new WindowBox(“ATM”);
} }
if(e.getSource()==button2){
System.exit(0);
dispose();//退出
} } 4.3.2 选择服务模块设计
在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法public void actionPerformed(ActionEvent e)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。其中的部分源代码为:
p.add(new Label(“请选择你要的服务”));
this.add(p);/*各种服务功能*/
buttonCUN = new Button(“ 存 款 ”);
p1.add(buttonCUN);
this.add(p1);
buttonQU = new Button(“ 取 款 ”);
p2.add(buttonQU);
this.add(p2);
buttonCHA = new Button(“ 查询余额 ”);
p3.add(buttonCHA);
this.add(p3);
buttonTUI = new Button(“ 退 出 ”);
p4.add(buttonTUI);
this.add(p4);
buttonGAI = new Button(“ 修改密码 ”);
4.3.3 取款模块设计
在取款模块中,和其他的界面也是同样的结构。也是有一个文本框和一个按钮还有标签组成的。用户在文本框中输入他想取的数额,但是必须是100的倍数,而且每一次最多只能取5000块。当然了取款的时候也不能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。其方法为:
public String withdrawMoney(double money){
String str = null;
if(money<=0){
str = “取款数目须是正数!”;}else{
if(getMoney()<0){//判断余额是否为负
str=“余额为负数!”;
}else if(money<=getMoney()){
if((money%100!=0)||(money>=5000)){//取钱数为100的倍数或不大于5000
str= “取款数目须是一百的整数倍!”;
}else{
setBalance(money);
str = “取款成功:余额为”+getMoney();
}
}else{
str = “余额不足!”;
}
} return str;} 4.3.4 修改密码模块设计
在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面。在修改密码时用到的方法为:
/*判断旧密码是是否正确*/ if(pwd2.equals(pwd1)){
if(pwd3.equals(pwd4)){//判断两次输入的新密码是个匹配
act.changePassword(pwd3);//启用新的密码
dispose();
JOptionPane.showMessageDialog(this, “修改密码成功!”);
new Selection(“选择”,act);//返回选择服务窗口
}else{
this.setVisible(true);
dispose();
JOptionPane.showMessageDialog(this, “两次输入要修改的密码不同,更新密码失败!”);
new Selection(“选择”,act);
} }else{
this.setVisible(false);
dispose();
JOptionPane.showMessageDialog(this, “输入密码错误,更新密码失败!”);
new Selection(“选择”,act);} } 4.3.5 退卡模块设计
在退卡模块设计中,这个方法就更加的简单了,它只是用了if(e.getSource()==buttonTUI){//退出
System.exit(0);
dispose();
} 这个方法就可以实现了,这里就不再多说了。4.4 异常处理情况说明
(1)打开、保存文件时的异常处理 需要处理的异常:IOException(2)数据库访问时的异常处理 需要处理的异常:SQLException
(3)加载类时的异常处理
需要处理的异常:ClassNotFindException,当应用程序试图使用Class类中的forName方法通过字符串名加载类时,但是没有找到具有指定名称的类的定义。(4)加载URL时的异常
需要处理的异常:MalformedURLException,抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串。5 系统实现与测试
(1)打开MyEclipse,编译运行程序后,将会看到如下的界面,如图2所示。如果输入的密码或卡号不正确的话就会报下图的错误。
图2 主界面—登陆页面
(2)选择服务界面效果
当输入的密码和卡号正确,单击确定后就会进入到选择服务的界面,如图3所示。然后就可以选择所需要的服务了。
图3 选择服务界面
(3)取款界面,如图4所示。
图4 取款界面
当输入的钱数不是100的倍数或每一次大于5000时就会报图5的错误。
图5 输入错误
当取款时如果超过卡里的余额的话就会报图6的错误。
图6 输入错误2(4)查询余额界面,如图7所示。
图7 查询余额界面
(5)修改密码界面,如下图所示。
经过测试,所有的功能基本上都实现了,而且运行正常。6 课程设计总结
6.1 遇到的问题及解决办法
在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比
较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作,才能有大的进步。6.2 心得体会
在这次的学课程设计中,我主要运用了Java语言的界面设计、异常处理、、Awt控件、Swing控件,输入输出流等,综合运用了Java语言。我深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。
通过这两个礼拜的课程设计我真的学到了很多的东西,当然这也和我的同学的帮助是离不开的。好了,下面就谈一下我在这些天的体会吧: 在这次的课程设计中,主要是运用JAVA语言来编写一个小的应用程序,当然还可以用其他的技术来辅助了。在这个小应用程序当中,我用了Java外还用了Swing控件。输入输出流等技术。由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。此外,我还
感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象语言奠定了基础。通过将近两周的努力,这次课程设计终于结束了,在这个过程当中,我学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。参考文献
[1] 王萌,刘婧,来宾著.JAVA程序设计[M]北京 冶金工业出版社,2004 [2] 黄聪明 精通 JAVA2程序设计[M]北京:清华大学出版社,2004.4 [3] 王文涛,袁海燕 JAVA实用程序设计100例[M]北京:人民邮电出版社,2005.5 [4] 雍俊海 JAVA程序设计[M]北京:清华大学出版社,2006.8 [5] 刘宝林 JAVA程序设计与案例[M]北京:高等教育出版社,2006.11 附录
Account类:
package cn.com.account;/** * 帐户
* 该类为实现客户信息及部分功能 */
public class Account {
private String code = null;//信用卡号 private String name = null;//客户姓名 private String password= null;//客户密码 private double money = 0.0;//卡里金额
public Account(){
}
public Account(String code,String name,String password,double money){
} public String getCode(){//取得卡号
return code;} public String getName(){//取得名字
return name;} /**
* 取得密码 * @return */
public String getPassword(){ } /**
* 重置秘密的方法 */
public void changePassword(String pwd){ }
public double getMoney(){//取得余额
return money;} /**
* 得到剩余的钱的数目 */
private void setBalance(double mon){ } money-= mon;password = pwd;return password;this.code=code;this.name=name;this.password=password;this.money=money;this.code = “123456”;this.password = “123456”;
} /** * 取款设置 * 若成功显示余额 * 不成功显示提示信息 */
public String withdrawMoney(double money){ String str = null;if(money<=0){ str = “取款数目须是正数!”;}else{
if(getMoney()<0){//判断余额是否为负
str=“余额为负数!”;}else if(money<=getMoney()){
if((money%100!=0)||(money>=5000)){//取钱数为100的倍数 str= “取款数目须是一百的整数倍!”;}else{
setBalance(money);str = “取款成功:余额为”+getMoney();} 或不大于5000
}else{
str = “余额不足!”;}
} return str;} /** * 存款设置 * 若成功显示余额 * 不成功显示提示信息 */
public String depositMoney(double money){
} String str = null;
if(money<0){ str =“存款数目须是正数!”;}else{ setBalance(-money);str = “存款成功:余额为”+getMoney();} return str;ChangePassword类:
package cn.com.frameui;import cn.com.account.Account;import javax.swing.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(“serial”)public class ChangePassword extends Frame implements ActionListener{
Panel panel1 = new Panel();Panel panel2 = new Panel();Panel panel3 = new Panel();Panel panel = new Panel();//TextField tf4,tf5,tf6;JPasswordField tf4,tf5,tf6;Button button;Account act;ChangePassword(String s,Account act){
super(s);this.act=act;
tf4 = new JPasswordField(6);tf5 = new JPasswordField(6);tf6 = new JPasswordField(6);button = new Button(“确定”);button.addActionListener(this);/*建立新密码*/
panel1.add(new Label(“请输入你的旧密码:”));panel1.add(tf4);panel2.add(new Label(“请输入你的新密码:”));panel2.add(tf5);panel3.add(new Label(“请再次输入新密码:”));panel3.add(tf6);panel.add(button);this.add(panel1);this.add(panel2);this.add(panel3);this.add(panel);setLayout(new GridLayout(4,1));setBounds(200,200,300,200);this.setVisible(true);/**
* 窗口事件, 判断窗口是否关闭 */
this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);
}
}
} });/**
* 判断事件源,看条件是否成立再修改密码 */
public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ String pwd2,pwd3,pwd4,pwd1;char [] p2,p3,p4;pwd1 = act.getPassword();p2=tf4.getPassword();p3=tf5.getPassword();p4=tf6.getPassword();
pwd2 = new String(p2);pwd3 = new String(p3);pwd4 = new String(p4);
if(pwd2.equals(pwd1)){
if(pwd3.equals(pwd4)){//判断两次输入的新密码是个匹配
act.changePassword(pwd3);//启用新的密码 dispose();JOptionPane.showMessageDialog(this, “修改密码成功!”);new Selection(“选择”,act);//返回选择服务窗口 }else{ this.setVisible(true);dispose();JOptionPane.showMessageDialog(this, “两次输入要修改的密码不同, new Selection(”选择“,act);}
this.setVisible(false);dispose();JOptionPane.showMessageDialog(this, ”输入密码错误,更新密码失更新密码失败!“);}else{ 败!”);
new Selection(“选择”,act);} } }
GetBalance类:
package cn.com.frameui;import cn.com.account.*;import javax.swing.*;
import java.awt.*;import java.awt.event.*;@SuppressWarnings(“serial”)public class GetBalance extends Frame implements ActionListener{
Box baseBox, box1,box2;Button button;TextField tf;Account act;public GetBalance(String s,Account act){//构造函数
super(s);
}
public void actionPerformed(ActionEvent e){
double money;String str = null;/*
* 取款判定 */ this.act=act;button=new Button(“确定”);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2,1));panel1.add(new Label(“请输入你想取钱的数目”));panel1.add(tf);panel.add(button);this.add(panel1);this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ }
System.exit(0);});setBounds(200,200,300,200);this.setVisible(true);
if(tf.getText().toString().equals(“")){ str = ”取款数目不能为空!“;}else{
} money = Double.parseDouble(tf.getText().toString());str = act.withdrawMoney(money);
JOptionPane.showMessageDialog(this, str,”取款提示信息“,JOptionPane.PLAIN_MESSAGE);
} this.setVisible(false);new Selection(”选择服务“,act);}
Query类:
package cn.com.frameui;import cn.com.account.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(”serial“)public class Query extends Frame implements ActionListener{
Button button;Account act;public Query(String s,Account act){//构造函数
super(s);
this.act = act;
button=new Button(”确定“);
Panel panel1 = new Panel();Panel panel = new Panel();panel1.add(new Label(”你的余额为: “ + act.getMoney()));//查询余额的方法
this.add(panel1);this.add(panel);
button.addActionListener(this);panel.add(button);
this.setLayout(new GridLayout(2,1));this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
}
}
}
System.exit(0);});setBounds(200,200,200,150);setVisible(true);public void actionPerformed(ActionEvent e){
} if(e.getSource()==button){ dispose();new Selection(”选择服务“,act);//返回选择服务窗口
} Selection类:
package cn.com.frameui;import cn.com.account.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(”serial“)public class Selection extends Frame implements ActionListener{
Button buttonCUN,buttonQU,buttonCHA,buttonTUI,buttonGAI;Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();Panel p4 = new Panel();Panel p5 = new Panel();Panel p = new Panel();Account act;
public Selection(){} public Selection(String s,Account act){
super(s);this.act=act;this.setLayout(null);this.setLayout(new GridLayout(6,1));p.add(new Label(”请选择你要的服务“));this.add(p);buttonCUN = new Button(” 存 款 “);p1.add(buttonCUN);this.add(p1);buttonQU = new Button(” 取 款 “);p2.add(buttonQU);/*各种服务功能*/
} this.add(p2);buttonCHA = new Button(” 查询余额 “);p3.add(buttonCHA);this.add(p3);buttonTUI = new Button(” 退 出 “);p4.add(buttonTUI);this.add(p4);buttonGAI = new Button(” 修改密码 “);p5.add(buttonGAI);this.add(p5);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ System.exit(0);} });buttonCUN.addActionListener(this);buttonQU.addActionListener(this);buttonCHA.addActionListener(this);buttonTUI.addActionListener(this);buttonGAI.addActionListener(this);setBounds(150,150,300,200);setVisible(true);validate();public void actionPerformed(ActionEvent e){
if(e.getSource()==buttonCUN){//存款
dispose();new SetBalance(”存款款“,act);
}else if(e.getSource()==buttonQU){//取款
dispose();new GetBalance(”取款“,act);
}else if(e.getSource()==buttonCHA){//查询余额
dispose();new Query(”查询余额“,act);
}else if(e.getSource()==buttonTUI){//退出
System.exit(0);dispose();
}
} }else if(e.getSource()==buttonGAI){//修改密码
dispose();new ChangePassword(”修改密码“,act);
} SetBalance类:
package cn.com.frameui;import cn.com.account.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(”serial“)public class SetBalance extends Frame implements ActionListener{
Box baseBox, box1,box2;Button button;TextField tf;Account act;public SetBalance(String s,Account act){//构造函数
super(s);
}
public void actionPerformed(ActionEvent e){ this.act=act;button=new Button(”确定“);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2,1));panel1.add(new Label(”请输入你想存款的数目“));panel1.add(tf);panel.add(button);this.add(panel1);this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ }
System.exit(0);});setBounds(200,200,300,200);this.setVisible(true);
double money;String str = null;if(tf.getText().toString().equals(”“)){ str = ”存款数目不能为空!“;}else{
} money = Double.parseDouble(tf.getText().toString());str = act.depositMoney(money);
JOptionPane.showMessageDialog(this, str,”存款提示信息“,JOptionPane.INFORMATION_MESSAGE);
} dispose();this.setVisible(false);new Selection(”选择服务“,act);} WindowBox类:
package cn.com.frameui;import cn.com.account.Account;import javax.swing.*;
import java.awt.*;import java.awt.event.*;/**
* 登陆页面首窗口 */
@SuppressWarnings(”serial“)public class WindowBox extends Frame implements ActionListener{
box1= Box.createVerticalBox();box1.add(new Label(”请输入您的卡号“));//输入卡号 box1.add(Box.createVerticalStrut(8));box1.add(new Label(”请输入您的密码“));//输入密码 box2=Box.createVerticalBox();Box baseBox,box1,box2;TextField tf1;JPasswordField tf2;Button button1;Button button2;public WindowBox(String s){//构造方法
super(s);tf1 = new TextField(6);tf2 = new JPasswordField(6);
} box2.add(tf1);
box2.add(Box.createVerticalStrut(8));box2.add(tf2);
baseBox=Box.createHorizontalBox();baseBox.add(box1);baseBox.add(Box.createHorizontalStrut(10));baseBox.add(box2);add(baseBox);button1= new Button(”确定“);//加入按钮 button1.addActionListener(this);add(button1);
button2 = new Button(”退卡“);//退卡按钮 button2.addActionListener(this);add(button2);setLayout(new FlowLayout());/*监听器*/
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ System.exit(0);} });setBounds(120,125,300,200);setVisible(true);public void actionPerformed(ActionEvent e){ Account act;act=new Account(”000000“,”HuangHuai“,”123456“,50000);//初始化
/*选择各种服务*/
if(e.getSource()== button1){ String number1,number2;//输入的两个卡号和密码的变量 number1=tf1.getText().toString();number2 = new String(tf2.getPassword());
/*判断两次输入的卡号和密码是否正确*/
if((act.getCode().equals(number1))&&(act.getPassword().equals(num dispose();ber2))){ new Selection(”选择服务“,act);}else{
JOptionPane.showMessageDialog(this, ”密码或帐号错误!“,”账户提示信息“,JOptionPane.ERROR_MESSAGE);dispose();
new WindowBox(”ATM“);} }
if(e.getSource()==button2){
System.exit(0);
dispose();//退出
} } }
package cn.com.test;import cn.com.frameui.*;public class ATM { /**
* 主测试程序
* @param args
*/
public static void main(String[] args){
【java课程设计记忆游戏】推荐阅读:
java课程设计题目03-24
java程序设计课程06-17
java的课程设计报告02-24
五子棋JAVA语言课程设计报告03-19
心理健康教育课课程设计教案(记忆)09-17
拔河游戏机课程设计实验报告09-08
课程设计设计感想09-30
《数字电路与单片机课程设计》课程设计报告11-01
植物设计课程设计方案09-28
机械设计课程设计204-30