java课程设计报告小组

2023-06-30

报告是日常生活与学习的常见记录方式,报告有着明确的格式。在实际工作中,我们怎么样正确编写报告呢?以下是小编整理的关于《java课程设计报告小组》的相关内容,希望能给你带来帮助!

第一篇:java课程设计报告小组

Java课程设计报告

《Java课程实习》报告

题目 学号 学生姓名

音乐播放器

201011621335 201011621329 200811621320

朱剑峰 薛文博 刘彬

联系方式 13763009739 13726903356 15766274948 所在专业 所在班级 指导教师 成绩 教师签字

计算机科学与技术

1103 刘思凤

课程设计时间:2013年6月1日 至 2013年6月25日 评语:

广东海洋大学本科生课程设计报告

目 录

摘要 ...................................................................................................................................... 2 1 绪论 .............................................................................................................................. 3 1.1 1.2 1.3 1.4 2 2.1 2.2 3 3.1 3.2 课题背景 .............................................................................................................. 3 课程设计目的 ...................................................................................................... 3 课程设计实验环境.............................................................................................. 3 课程设计要求 ...................................................................................................... 4 程序界面布局设计.............................................................................................. 4 功能分析 .............................................................................................................. 4 系统功能结构图.................................................................................................. 5 模块功能设计 ...................................................................................................... 5 课程系统分析 .............................................................................................................. 4

系统设计与实现 .......................................................................................................... 5

3.2.1 “菜单栏”功能设计 ...................................................................................... 5 3.2.2 “动态音频播放进度显示”功能设计 .......................................................... 9 3.2.3 “歌曲搜索”功能实现 .................................................................................. 9 3.2.4 “歌曲播放/停止”功能实现 ...................................................................... 10 3.2.5 “列表展示”功能实现 ................................................................................ 11 4 系统优点与缺点 ........................................................................................................ 13 4.1 4.2 5 系统优点 ............................................................................................................... 13 系统缺点 ............................................................................................................... 13

系统开发过程 ............................................................................................................ 14 Myeclipse平台开发版本 ............................................................................................... 14 NetBeans开发平台版本 ................................................................................................ 15

6 设计总结 .................................................................................................................... 16

参考文献 ............................................................................................................................. 17 附

录 ................................................................................................................................. 18 关键代码 .......................................................................................................................... 18

1、 音乐解码函数(decodeMusic) ........................................................................ 18

2、 播放线程类(class PlayThread) ..................................................................... 20

3、 控制滚动条类(class RunSlider) ................................................................... 21

广东海洋大学本科生课程设计报告

摘要

JAVA是目前最流行的软件开发语言之一,称为网络上的“世界语”。JAVA适合开发基于多媒体、与平台无关、用面向对象的方法进行的基于Internet、Intranet、Extranet的Applet和应用程序。它具有简单高效、面向对象、不依赖于机器结构的特点,支持多线程、分布和并发机制。用JAVA开发的应用软件在可移植性、健壮性、安全性等方面大大优于已存在的其他编程语言。

JAVA是一门包含多种知识的学科,提供了丰富的类库,能最大限度地利用网络。JAVA可广泛用于面向对象的事件描述、处理面向对象的企业型的应用开发,还应用于Internet系统管理、Web页面设计、Internet可视化软件开发等方面。在学习的过程中我学到了许多以前没有学到的概念和新鲜资讯。运用这些知识可以完成老师交给我的课程设计任务。这次老师让我们自己拟订题目,给了我们很大的想象空间。我们自选了一个音乐播放器的课程设计题目。

本小组之所以选择做音乐播放器,全赖于本小组成员均对音乐有浓厚的兴趣,虽热衷于听音乐,但现在网上流传的音乐播放器还不能满足我们这些发烧友,像高清音乐等,这些高品质的作品若在现流行的播放器上运行,这只能做普通音乐文件“享用”。话说如此,因本小组开发能力有限,课程比较多,时间所限,以至暂且把音乐播放器开发到version0.9。主要功能还未能达到我们想要的境界。

小结一下,本小组的播放器所具备的功能有如下,添加音乐,删除音乐,搜索音乐,更换播放器皮肤,更改播放模式等。(详见2.2节)

本次设计的播放器在具备基本功能的基础上,还具有很强的扩展性,如歌词导入,可播放音乐类型的增加等等这些还未实现的地方我们都提供了许多接口,以便日后做修改或增加功能所用。

能够具备一个属于自己的播放器确实是一件非常高兴的事情,能够一边开发一边享受音乐的熏陶更是一件难得可贵的经历,愿此摘要能让读者感受得到笔者的兴奋与成功。

广东海洋大学本科生课程设计报告

音乐播放器

任务分工

系统设计与代码实现:朱剑峰 系统测试与维护:薛文博 需求与功能分析:刘彬 指导教师:刘思凤

1 绪论

1.1 课题背景

随着社会电子音乐文件的与日俱增,作为现在最流行的音乐文件*.mp3,*.wav文件的数量和规模也在比以往的任何时候要多,不论是电台DJ需要使用方便而有效地管理自己所使用的音乐文件,还是个人。在计算机日益普及的今天,若采用一套有效的音乐播放器。将自己所收藏的大量的音乐文件能随时随地的播放,这将方便于众用户听音乐的需求。通过使用本音乐播放器能为音乐爱好者带来意想不到的收获。

1.2 课程设计目的

《应用软件开发实习》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《应用软件开发实习》课程后,进行的一次全面的综合训练,程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

1.3 课程设计实验环境

程序运行在安装有windows操作系统的计算机上(台式机和笔记本),兼容windows 2K/XP/Vista/7/8 计算机硬件基本要求(仅供参考): 1. 2. 3. CPU:1G; 内存:512M. ; 显卡:256M显存;

文件播放:需要安装有声卡、要求安装有语音库。

JAVA程序设计语言及相应的集成开发环境,Myeclipse和Netbeans开发工具。

广东海洋大学本科生课程设计报告

1.4 课程设计要求

按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

2 课程系统分析

2.1 程序界面布局设计

(1) 创建一个JFrame类,类名为MyPlayer类。

(2) 向对话框中添加JSlider控件、JList控件、JLabel控件、JJToggleButton控件、MenuBar菜单、JPanel容器、JToolBar容器以及JScrolPanel容器。

(3) 设置所添加的控件的属性,以及使用Java的界面风格,本设计共使用了6种Java 的不同界面风格。

2.2 功能分析

MyPlayer播放器主要对常用Windows音频格式的文件实现播放控制:  主界面功能

 菜单栏功能

 添加音乐;

添加音乐文件(即导入一个或多个音乐文件至列表当中); 添加音乐目录(即导入文件夹中所有的音乐文件至列表当中);  控制;

随机播放; 顺序播放; 单曲循环;

设置歌词(有待开发);  更换皮肤;

默认、深海世界、迷人金属、香韵咖啡、骇客帝国、浪漫满屋(均为java的界面风格)

 关于;

广东海洋大学本科生课程设计报告

帮助(记录作者的相关信息以及软件开发的日期);

 动态音频播放进度显示;

 正在播放歌曲在顶层的显示

 播放歌曲的时间长度的显示以及正在播放时间的长度的显示  滚动条随播放状态改变显示  歌曲搜索功能;

 根据关键字搜索对应的歌曲;  歌曲播放/停止功能;

 上一首;(播放上一首歌曲并根据播放模式来选择)  下一首;(播放下一首歌曲并根据播放模式来选择)  播放/停止;(播放或停止歌曲)

 双击播放/双击停止;(在列表中对指定歌曲的操作)  列表展示功能;

 隐藏/显示列表;  移除单个音乐文件;  移除所有音乐文件;

 显示当前歌曲数目,播放模式,皮肤情况;

3 系统设计与实现

3.1 系统功能结构图

MyPlayer播放器的功能结构图如图3-1。

主界面功能菜单栏功能动态音频播放进度显示歌曲搜索功能歌曲播放/停止功能列表展示功能

图3-1 主界面功能图

3.2 模块功能设计 3.2.1 “菜单栏”功能设计

“菜单栏”功能结构图如图3-2-1。

广东海洋大学本科生课程设计报告

菜单栏功能添加音乐添加音乐文件添加音乐目录控制更换皮肤关于随机播放顺序播放单曲循环种皮肤图3-2-1菜单栏功能结构

6帮助 3.2.1.1 “添加音乐”功能实现

当点击“添加歌曲/文件夹”选择“添加本地歌曲”或“添加本地歌曲文件夹”的时候,这时候会触发这两个JMenuItem事件,调用了open()函数(opendir()函数),即将选中的音乐文件(或文件夹内所有音乐文件)的信息(名称与路径)放入nameVector 和 urlVector 当中。并修改listCount的值,显示歌曲的总数,最后将nameVector的所有内容放入list列表当中。如图3-2-1-1。

图3-2-1-1 (左上)选择操作,(左下)选择目录,(右下)列表显示

广东海洋大学本科生课程设计报告

3.2.1.2 “控制”功能实现

当选择“控制”功能的任意一项,则会使全局的chosenMethod整型变量的值根据选择的项赋对应的值,值域为1(随机播放)、2(顺序播放)、3(单曲循环)。因播放器的播放功能是一个while(true)的循环,每当播放歌曲时候,播放前会由函数chooseNextSong()根据chosenMethod的值来选择下一首歌是那一首。

如果值是1,则会由[0,listCount(列表歌曲总数)],获取随机数,再根据play()函数播放;如果值是2,则根据chosenIndex(当前播放歌曲号),直接加一,再根据play()函数播放;如果值是3,则chosenIndex(当前播放歌曲号)的值不再修改,再根据play()函数播放;如图3-2-1-2。

图3-2-1-2(左上)选择操作;(左下)随机播放后歌曲序号, (此处为后台显示),起始播放第1首歌,下一首歌为第295首歌曲; (右侧)为列表显示,指向对应歌曲,并且列表底下显示“随机播放”

3.2.1.3 “更换皮肤”功能实现

当选择“更换皮肤”功能的任意一项,则会触发对应事件的发生,调用函数loadskin1()或loadskin2()等等。此时会调用LookAndFeel的类,指定java包含的皮肤风格。Loadskin1()对应“默认”,loadskin2()对应“深海世界”等等。

选择皮肤后,主界面底下会显示对应的提示,如选择了“浪漫满屋”,地下就会显示 “皮肤:浪漫满屋”。如图3-2-1-3所示。

广东海洋大学本科生课程设计报告

图3-2-1-3

(左)选项显示,(右)换肤后主

界面情况。

3.2.1.4 “关于”功能实现

当选择“帮助”功能时,则弹出信息窗口,提示本软件的开发时间与开发人员相关信息。如图3-2-1-4所示。

图3-2-1-4

广东海洋大学本科生课程设计报告

3.2.2 “动态音频播放进度显示”功能设计

当歌曲播放正在播放时,则顶层“正在播放”处会显示歌曲的名称,当歌曲名称过长时候,超长部分会用省略号显示。

同时会根据歌曲的格式,得到歌曲的长度,并显示在歌曲的右侧的JLabel fileTime中;另外会另起一个线程RunSlider来控制计时功能,每1秒钟,滚动条左侧JLabel runningTime 会根据播放的时间来修改,滚动条PlayerSlider则会每秒钟根据runingTime的值来移动。如图3-2-2所示

图3-2-2

正在播放歌曲中的动态播放进度显示。

3.2.3 “歌曲搜索”功能实现

在搜索栏中输入关键字,在回车确认,系统就会调用seachMusic()来搜索与关键字吻合的歌曲,并将其放入临时的Vector tmpName当中,并显示其到list列表当中。如图3-2-3-1

在临时的列表中选择所需要播放的歌曲,双击播放,同时临时列表消失,回复原来的列表,即导入nameVector的数据到list当中。

当点击“X”按钮,若还在临时列表当中,则会清除临时列表并且恢复原来的列表;若已经恢复到临时列表,则搜索框中会返回提示“请输入搜索关键字...”。

图3-2-3-1(上)搜索“陈奕迅”的歌曲

(下)取消搜索后,搜索框的内容

广东海洋大学本科生课程设计报告

3.2.4 “歌曲播放/停止”功能实现

“歌曲播放/停止”功能结构图如图3-2-4。

歌曲播放/停止功能上一首下一首播放/停止双击播放/停止

图3-2-4 “歌曲播放/停止”功能结构

3.2.4.1 “上一首”“下一首”功能实现

当点击“上一首”的按钮时,会根据按钮事件,若chosenMethod(播放方式)的值为1(即随机播放)则系统会调用chooseNextSong()来随机选择歌曲号来播放下一首歌;若chosenMethod不为1,则会调用previousMusic(),对chosenIndex(当前播放歌曲号)减一,再调用play()函数播放上一首歌曲。

当点击“下一首”的按钮时,会根据按钮事件,若chosenMethod(播放方式)的值为1(即随机播放)则系统会调用chooseNextSong()来随机选择歌曲号来播放下一首歌;若chosenMethod不为1,则会调用nextMusic(),对chosenIndex(当前播放歌曲号)加1,再调用play()函数播放下一首歌曲。

3.2.4.2 “播放/停止”“双击播放/停止”功能实现

当点击“播放/停止”的按钮时候,若点击了“播放”,则会显示“停止”,同时会对列表正在选中的歌曲进行播放。同时会触发“动态音频播放进度显示”功能(3.2.2节所介绍),更改或增加播放信息;

若点击了“停止”,则会显示“播放”,同时会对当前播放的歌曲进行停止,同样会触发“动态音频播放进度显示”功能,清除对应的显示。如图3-2-4-2

广东海洋大学本科生课程设计报告

图3-2-4-2 (左)“播放”

(右)“停止”

3.2.5 “列表展示”功能实现

“列表展示”功能结构图如图3-2-5。

列表展示功能隐藏/显示列表移除音乐文件显示列表信息

图3-2-5 “列表展示”功能结构

3.2.5.1 “隐藏/显示列表”功能实现

当点击“显示列表/隐藏列表”的按钮时候,若点击了“显示列表”,则会显示“隐藏列表”,同时触发该事件,将原来的JFrame大框架的长度减少440个单位;

若点击了“隐藏列表”,则会显示“显示列表”,同时触发该事件,将原来的JFrame大框架的长度增加440个单位。

隐藏与显示列表这一功能虽然非常简单,但其重要性不可忽视,对于现在许多用户对音乐播放器的要求,就如自己的手机或着MP3一样,小巧、灵活、精致,至此这一项功能对于本小组一开始的设计就算是一个亮点。如图3-2-5-1所示。

广东海洋大学本科生课程设计报告

图3-2-5-1 (左)隐藏列表,(右)显示列表

3.2.5.2 “移除歌曲”功能文件实现

当用鼠标对着列表的音乐文件右键的时候,会弹出两个选项“移除歌曲/移除所有歌曲”。

当选择“移除歌曲”,则对所选择的音乐文件从列表中移除,即事件的触发调用了deleteSingle()函数,将对应的项从列表中移除,从nameVector中移除,从urlVector中移除;

同理当选择“移除所有歌曲”的时候,事件触发调用deleteAll()函数,将列表清空,将nameVector中的元素清除。

以上两者运行过后均会更新主界面底层“歌曲数目”,并且停止正在播放的歌曲。

图3-2-5-2右键列表后出现的选择项

广东海洋大学本科生课程设计报告

3.2.5.3 “显示列表信息”功能实现

由“添加音乐”功能(3.2.1.1节)调用的open()、opendir()函数,会将保存在nameVector中的内容导入列表当中。当双击列表中的歌曲的时候,如果歌曲正在播放则会停止,如果播放器没有进行播放,则双击后就进行播放。

当我们对着列表右键时,则会弹出列表,“移除歌曲/移除所有歌曲”,详见(3.2.5.2节)

4 系统优点与缺点

4.1 系统优点

1、windows界面风格可选择性,如上如所述,本音乐播放器具有6种皮肤可以更换。这大大满足了一个娱乐性的软件的需要,并且皮肤起名也符合用户的感官需求,像“深海世界”、“浪漫满屋”这些贴切而休闲的词汇更能吸引用户对播放器的使用。

2、播放方式可选择性,对于喜欢听音乐的用户,会根据自己的需要选择一定的顺序来听音乐。

3、列表隐藏的功能,符合大众播放器的功能,将播放器的界面弄得小巧而精致,即使隐藏了列表也不妨碍主要的播放器功能。

4、搜索功能,随着网络的发达,音乐歌曲随处下载,人均播放列表的歌曲数目数以百计,这时候搜索功能就显得十分重要。本播放器根据关键字可以对列表进行搜索,并可以显示搜索后的列表,同时临时的列表不会缩减播放器功能。

4.2 系统缺点

1、本系统主要代码均在一个文件当中MyPlayer.java当中,由于本小组是用netBeans7.2.1开发平台开发的,对开发平台尚未了解,故暂且没有将代码弄得更具有可读性。

2、本播放器还缺少暂停功能,在开发的最后版本(Music_Player0.9fornetBeans)还在改进当中。期待1.0版本对此功能的实现。

3、本播放器对音乐文件的选择,仅仅.mp3文件以及.wav文件可播放。针对decodeMusic()解码函数的改善,尚未能解决。

4、本播放器缺少歌词设置、显示功能。由于本小组对播放器的主界面还未想到一个满意的设计,所以歌词的实现暂且没有实现,待界面设计得灵活的时候,再添加歌词的功能。

广东海洋大学本科生课程设计报告

5 系统开发过程

Myeclipse平台开发版本

Version 0.1

1、菜单栏

*文件包括“打开文件”“打开目录”“退出程序” *控制 -随机播放-顺序播放-单曲循环-设置歌词 *更换皮肤

*帮助-关于

2、上一首、下一首、停止/播放、隐藏列表4个button

3、帮助显示-关于 消息框。

Version0.2

1、能打开文件,显示文件名称在下面的框内,多个文件显示在框内!

2、文件-退出程序

实现

3、能够显示列表与隐藏列表

Version0.3

1、双击能够播放

2、暂停 跟 继续

新增

1、双击整个title 换成为歌曲名称 问题

1、隐藏列表/显示列表 list 会缩水

2、filedialog 没有选择任何文件 直接关闭会出现错误!(verson0.4中已解决)

3、双击空的列表也可以开始(version 0.6for netBeans 已经解决)

Version0.31 (Version0.3崩溃)

Version0.4

1、上一首,下一首 能够在列表中显示

2、上一首 下一首播放功能 新增:

1、打开文件可以多选

2、打开目录 可以把整个目录里面的MP

3、wav文件导出在列表中。

问题:

1、双击 第一次 是开始,第二次 是停止(相对于同一首歌,相对于其它歌会停止,

也不播放)(version 0.6for netBeans 已经解决)

2、播放完一首歌后,不能自动往下播放。(version 0.5forneatBeans 已经解决)

歌曲不能删除(version 0.6for netBeans 已经解决) 修改:

1、“打开文件”“打开目录”分别换成 添加本地歌曲,添加本地歌曲文件夹

Version0.5

1、皮肤(简单的颜色或者图片)

2、更换皮肤-可供选择

修改:

1、项目已经转至netbeans平台上开发,并明明为Music_Player0.5forneatBeans 新增:

1、快捷键 添加歌曲/文件夹 添加了快捷键 和 关于 加了快捷键

广东海洋大学本科生课程设计报告

Version 0.6

1、播放模式

2、删除功能 问题:

1、播放列表可以拉出来,播放到名字比较长的歌曲,list会变宽!(已经完全解决,删

除正在播放的label)

2、播放按钮,双击 未解决(version0.6已经修复), 上一首

下一首 置顶时候,以及

随机播放时候 下一首上一首序号问题!(version0.6已经修复)。

3、菜单项 选中后,没有特别标志(解决办法

1、换另外一种菜单项

2、选中菜单项后 字

体等改变)

selected 方法!是改变修改字体的!(version0.7添加1中 解决)

4、删除 单首歌,序号不能改变(version0.7已经修复) NetBeans开发平台版本

Version0.7 for netbeans

1、添加底下: 歌曲数目、播放模式、皮肤的显示

2、歌曲名前面有序号

3、音乐时间,以及滚动条

4、”正在播放“显示的问题 Version0.8 for netbeans

1、添加搜索模块

2、添加搜索功能

3、搜索功能->搜索列表播放功能 Version0.9fornetbeans

1、修改播放器软件运行时的图标(将java的图标换成“射手”图标)

广东海洋大学本科生课程设计报告

6 设计总结

JAVA是目前最流行的软件开发语言之一,称为网络上的“世界语”。JAVA适合开发基于多媒体、与平台无关、用面向对象的方法进行的基于Internet、Intranet、Extranet的Applet和应用程序。它具有简单高效、面向对象、不依赖于机器结构的特点,支持多线程、分布和并发机制。用JAVA开发的应用软件在可移植性、健壮性、安全性等方面大大优于已存在的其他编程语言。

JAVA是一门包含多种知识的学科,提供了丰富的类库,能最大限度地利用网络。JAVA可广泛用于面向对象的事件描述、处理面向对象的企业型的应用开发,还应用于Internet系统管理、Web页面设计、Internet可视化软件开发等方面。在学习的过程中我学到了许多以前没有学到的概念和新鲜资讯。运用这些知识可以完成老师交给我的课程设计任务。这次老师让我们自己拟订题目,给了我们很大的想象空间。我们自选了一个音乐播放器的课程设计题目。

课程设计的过程虽然是艰难而辛苦的,但是我却从中感到了快乐与欣慰。快乐是因为我以前对于JAVA的知识可以说是孤陋寡闻,但是通过这次课程设计我使自己的知识更加的丰富了,加大了自己的知识面。让自己的实力扩大了。所以我感到非常的快乐。欣慰是因为看着自己做出的课程设计得到了老师的认同,取得了成功。这次课程设计的整体过程是充实而满足的。

广东海洋大学本科生课程设计报告

参考文献

[1] (美) 埃克尔(Eckel , B.)著,《Java编程思想》(第四版)陈昊鹏译. 一北京: 机械工业出版社,2007.6

[2] 刁成嘉 著,《UML系统建模与分析设计》,机械工业出版社,2007.6

[3] 朱喜福 著,《Java程序设计》(第2版),清华大学出版社, 2009.10

[4] 辛运帏 著,《Java语言程序设计》(第1版) ,人民邮电出版社, 2009.10

[5] 叶核亚 著,《Java程序设计实用教程》 (第3版) ,电子工业出版社,2010.2

[6] 耿祥义,张跃平 编著,《Java面向对象程序设计》.一北京:清华大学出版社,2010.1

广东海洋大学本科生课程设计报告

关键代码

1、音乐解码函数(decodeMusic)

解析:由于java applet播放声音,对应的格式只有一些原始格式如.au、.Wav 、.Midi、 .rfm格式,因此一下的解码函数就非常必要了,即将MP3等其它格式文件的音频等格式修改成系统能够实现的格式,并写入内存由此来实现播放功能。详细实现请阅读如下代码。

public void decodeMusic(AudioInputStream in) {// 开始解码 MP3

AudioFormat format = in.getFormat();

AudioFormat decodedFormat = new AudioFormat(

AudioFormat.Encoding.PCM_SIGNED,// 音频编码技术

format.getSampleRate(),// 每秒的样本数

16,// 每个样本中的位数

format.getChannels(),// 声道数(单声道 1 个,立体声 2 个,等等)

format.getChannels() * 2,// 每帧中的字节数

format.getSampleRate(), false);// 每秒的帧数和是否以 big-endian // 字节顺序存储单个样本中的数据

// 然后重新获取一个新的输入流,

AudioInputStream decodeIn = AudioSystem.getAudioInputStream(

decodedFormat, in); /**

* 源数据行是可以写入数据的数据行。它充当其混频器的源。 应用程序将音频字节写入源数据行,这样可处理字节缓冲并将它们传递给混频器。

* 混频器可以将这些样本与取自其他源的样本混合起来,然后将该混合物传递到输出端口之类的目标 (它可表示声卡上的音频输出设备)。

* */ SourceDataLine sdl = null; // 然后

DataLine.Info info = new DataLine.Info(SourceDataLine.class,

decodedFormat); try {

/**

* AudioSystem :类充当取样音频系统资源的入口点。 此类允许查询和访问安装在系统上的混频器

* **/

sdl = (SourceDataLine) AudioSystem.getLine(info);

sdl.open(decodedFormat);

} catch (Exception e) {

广东海洋大学本科生课程设计报告

e.printStackTrace(); } /** 指示该行是否支持特定类型的控件。 */ if (sdl.isControlSupported(FloatControl.Type.PAN)) {

// FloatControl 对象提供对浮点值范围的控制

FloatControl pan = (FloatControl) sdl

.getControl(FloatControl.Type.PAN);

if (curPosition == Position.RIGHT) {

pan.setValue(1.0f);

} else if (curPosition == Position.LEFT) {

pan.setValue(-1.0f);

} }

sdl.start(); int nBytesRead = 0; byte[] abData = new byte[EXTERANAL_BUFFER_SIZE]; try {

while (nBytesRead != -1) {

// 文件流的读写

nBytesRead = decodeIn.read(abData, 0, abData.length);

if (nBytesRead >= 0) {

sdl.write(abData, 0, nBytesRead);

}

} } catch (Exception e) {

e.printStackTrace();

return ; } finally {

// 通过在清空数据行的内部缓冲区之前继续数据 I/O,排空数据行中的列队数据。

sdl.drain();

sdl.close(); }

}

广东海洋大学本科生课程设计报告

2、播放线程类(class PlayThread)

解析:本播放器只使用一个线程来实现歌曲播放的功能,若用户要更换歌曲或者停止音乐,则对线程重建,即杀死原线程再建立新的线程,其实现的效果还是跟原来线程一样。同时此线程包含了许多子功能,如更改播放模式,对“上一首”“下一首”显示“正在播放”等功能均在此线程上实现。详细内容请阅读如下代码。

class PlayThread extends Thread{

public void run() {

while(true){

try {

setInitShowing();//初始化滚动条以及计时label 的值

isStop = true;//标志状态,说明是停止了

filename = (String) nameVector.get(chosenIndex).toString();//取chosenIndex对应的歌曲名称

filepath = (String) urlVector.get(chosenIndex).toString();////取chosenIndex对应的歌曲路径

System.out.println("我在播放:"+chosenIndex+" "+filename); //后台输出检测

/*设置“正在播放”的值,只输出前23个字符,以免超出长度,后面补...*/

String showName = null;

if(filename.length()>23){

showName = filename.substring(0, 23) + "..";

}else{

showName = filename;

}

showTileOfMusic.setText("正在播放:"+showName);

File file = new File(filepath);

setTitle(filename);

list.setSelectedValue(nameVector.get(chosenIndex), true);

listIndex = chosenIndex;

stporplySongButton.setText("停止");//修改 停止/播放button的状态值

AudioInputStream in = AudioSystem.getAudioInputStream(file);//去音乐文件

AudioFileFormat aff = AudioSystem.getAudioFileFormat(file);//去音乐文件的格式(为了得到歌曲长度)

musicLength = aff.getFrameLength()/aff.getFormat().getFrameRate();//取音乐文件的长度

System.out.println("我有那么长:"+musicLength);//后台显示,用于检测

setShowingTime(musicLength,fileTime);//显示总长度到fileTime label中

PlayerSlider.setMaximum((int)musicLength);//并且设置滚动条的最大值

isStop = false;//设置正在播放状态

hasStop = false;//设置正在播放状态

decodeMusic(in);//解码并播放

isStop = true;//播放完毕后设置回非播放状态

hasStop = true;

广东海洋大学本科生课程设计报告

chooseNextSong();//选择下一首歌返回while

} catch (Exception e) {

//e.printStackTrace();

System.out.println("刚才那首歌出错了!");//如果出现错误,则显示直接跳至下一首歌

nextMusic();

}

}

}

}

3、控制滚动条类(class RunSlider)

解析:此类虽然简短,但其能动态实现滚动条以及播放时间的运动。其中setShowingTime()方法提供的接口十分灵活,能够对不同空间进行时间的控制,本播放器只对播放时间的两个JLabel实现了此功能,这大大提高了本播放器的可扩展性。详细内容请阅读如下代码。

class RunSlider extends Thread{

public void run() {

try {

musicCouter = 0;

while(true){

Thread.sleep(1000);//每秒钟滚动一次

musicCouter++;

PlayerSlider.setValue((int)musicCouter);

setShowingTime(musicCouter, runingTime);//转换时间并显示回去runingTime label

}

} catch (InterruptedException ex) {

Logger.getLogger(MyPlayer.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

21

第二篇: Java期中课程设计报告

报告题目:ATM模拟程序

姓名:

学号:2009118246 学院:信息科学与技术学院

专业:计算机科学与技术

一、课程设计目的和内容

目的:课程设计的主要目的是结合面向对象程序设计课程,培养面向对象软件开发的思维,初步了解软件开发的一般流程,提高用JAVA编程的实际动手能力并增强大家对面向对象的了解。

内容:设计ATM取款机主要包括登录页面、选择服务、存款、取款、查询余额、修改密码和退出等功能。注:各种按钮的事件和功能简单模拟ATM取款机的要求。

二、系统需求分析

1、功能需求分析 (1)模拟ATM柜员机程序;

(2)修改密码。当用户需要修改密码时,可以用这个功能,新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。 (3)取款。用户根据自己需要取多少钱,输入要取的金额,每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。 (4)查询余额。用户需要知道自己帐户还剩多少钱时,可以查询自己帐户的余额。

(5)存款。用户可以存款,金额为100的倍数,不能出现负存款。 (6)锁机。当用户3次输入密码错误时,停止操作。

2、设计需求分析

A界面设计简洁、友好、美观大方。 B操作简单、快捷方便。

1

C信息分类清晰、准确。 3.ATM功能模块图

4、约束条件 (1)设计工具

开发工具:NetBeans 运行环境:Windows 7 (2)界面要求

以Windows窗口形式显示,标题栏为ATM自动取款机不同的窗口中有不同的按钮和选择菜单。

三、系统设计

1、功能结构模块图

2

我们所设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。其功能结构图如下所示:

2、业务流程图

3

四、详细设计

1、界面设计概述

我设计的ATM机,主要应用java图形用户界面开发的知识,在netbeans上根据要求来创建窗体,窗体整个框架使用JFrame类构造,JFrame有自己的外边框和自己的标题,创建JFrame时可以指定其窗口标题,在创建窗口时,好多代码是自动生成,我只是在其基础上添加一些约束条件的代码,比如说每次输入的取款金额必须为100的整数,当密码输入三次错误,便锁卡等代码需要自己编写,这里我会主要说明自己编写的那部分代码,也是程序中比较重要的部分,其中有许多Swing组件重复应用,代码相同,在报告中不重复说明,比如说数字“0-9”的代码,“退卡”按钮的代码等。

1、各模块界面设计与程序设计

4

主模块设计:

主函数中定义了6个静态变量:密码(thePassword ),余额(balance),新密码1(password1),新密码2(password2),其中密码为String类型,余额是double型,计数器(counter),用来记密码的输入次数,整型,初始化为0,dataStr是String类型,初始化为空字符串,还定义了FileWriter()和FileReader()方法分别用来写和读ATM在交易中的余额和密码也就是dataStr,使用户的余额和密码变成变化后的值。在主方法中首先要调用一次FileReader()方法,获取余额和密码。 程序代码如下:

import java.io.*; public class Atm {

/**

* @param args the command line arguments

*/

static String thePassword ;

static double balance ;

static int counter = 0;

static String password1;

static String password2;

static String filePath = "./temp.txt";

static File file = new File(filePath); static String dataStr = ""; //写文件

static void FileWriter() {

String dataStr;

try{

if(!file.exists())

file.createNewFile();

dataStr = balance + "," + thePassword + ",";

byte[] data = dataStr.getBytes();

FileOutputStream fos = new FileOutputStream(file);

fos.write(data);

fos.close();

}

5

catch(Exception e){

e.printStackTrace();

}

}

//读文件

static void FileReader(){

try{

if(!file.exists())

file.createNewFile();

byte[] data = new byte[64];

FileInputStream fis = new FileInputStream(file);

int rs = 0;

while((rs = fis.read(data)) > 0){

dataStr += new String(data,0,rs);

}

if(!dataStr.isEmpty()){

String[] sets = dataStr.split(",");

balance = Double.parseDouble(sets[0]);

thePassword = sets[1];

}

fis.close();

}

catch(Exception e){

e.printStackTrace();

}

}

public static void main(String args[]) {

FileReader();//调用读文件

try {

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

}

} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(AtmWelcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

6

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(AtmWelcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(AtmWelcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(AtmWelcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} AtmWelcome aw=new AtmWelcome(); aw.setSize(390,290);

aw.setVisible(true);

} }

1)待机界面

这个界面可以说是一个待机界面,点击“插卡”按钮,进入登陆界面,其过程相当于ATM读取磁卡信息的过程,利用了Swing控件中的标签和按钮,在“插卡”按钮添加鼠标点击事件代码如下:

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

7

new AtmEnter().setVisible(true);//进入登陆界面

this.setVisible(false); }

2)登陆界面

这个登陆界面,用户名和账号在插卡时相当于系统已经读取,所以下面这个界面只是密码验证,输入正确的密码,若正确,则进入主交易界面,若错误则进入密码错误,重新输入,若输入3次错误,则进入锁卡界面,具体界面和程序代码如下所示:

“确定”按钮的鼠标点击事件代码(用户三次输入错误判断程序):

private void jButton11MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

int l=jPasswordField1.getText().length();

if( l==6&&jPasswordField1.getText().equals(Atm.thePassword ))

{

new AtmEnterSuccess().setVisible(true);

this.setVisible(false);}

else if(Atm.counter<2)

{new AtmPasswordError().setVisible(true);

this.setVisible(false);

Atm.counter++;

}

8

else{new AtmLock().setVisible(true);

this.setVisible(false);

}

}

“数字0-9”按钮的鼠标点击事件代码:

public void setNumber(String c){

jPasswordField1.setText(jPasswordField1.getText()+c);

} private void jButton4MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

setNumber("1");

}

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

setNumber("2"); }

private void jButton5MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

setNumber("3"); }

private void jButton3MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

setNumber("4"); }

private void jButton2MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

setNumber("5"); }

private void jButton6MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here:

setNumber("6"); }

private void jButton7MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

setNumber("7"); }

private void jButton8MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

setNumber("8"); }

private void jButton9MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

setNumber("9"); }

private void jButton12MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

setNumber("0"); }

“退卡”按钮的鼠标点击事件代码:

private void jButton10MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmWelcome().setVisible(true);//返回到待机界面

this.setVisible(false); }

“更正”按钮的鼠标点击事件代码:

private void jButton14MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

int l = jPasswordField1.getText().length();

if(l != 0)

jPasswordField1.setText(jPasswordField1.getText().substring(0,l-1)); }

3)主交易界面

10

这个界面分别设计了“查询余额”按钮,“取款”按钮,“修改密码”按钮等,点击时分别进入相应的功能界面,具体代码如下所示:“查询余额”按钮的鼠标点击事件代码:

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmAccountBalance().setVisible(true);//进入显示余额界面

this.setVisible(false); }

“取款”按钮的鼠标点击事件代码:

private void jButton4MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmWithdrawl().setVisible(true);//进入取款界面

this.setVisible(false); }

“存款”的鼠标点击事件代码:

private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmDeposit().setVisible(true);//进入存款界面

this.setVisible(false); }

“修改密码”的鼠标点击事件代码:

private void jButton6MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

11

new AtmPasswordChange().setVisible(true);//进入密码修改界面

this.setVisible(false); }

4)密码错误界面

当在登录界面登陆时,若密码错误则出现密码错误界面,这个界面上点击“继续” 按钮则返回到登陆界面重新输入密码,具体代码如下: “继续”按钮的鼠标点击事件代码:

private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmEnter().setVisible(true);//返回到登陆界面

this.setVisible(false); }

5)锁卡界面

12

密码输错3次,卡锁,代码见登陆界面的“确定”按钮点击事件代码。 6)余额查询界面

点击“继续”则返回到主交易界面,具体的代码如下: 显示余额的代码:

public AtmAccountBalance() {

initComponents();

java.awt.EventQueue.invokeLater(new Runnable() {

13

public void run() {

setVisible(true);

}

});

jLabel1.setText("当前余额:"+ Atm.balance);

Atm.FileWriter(); } “继续”按钮的鼠标点击代码如下:

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmEnterSuccess().setVisible(true);//进入主交易界面

this.setVisible(false); }

7)取款界面

取款界面规定单次最多取款5000元,若所取金额在界面上有,则直接点击相应按钮,若没有,则点击“其他面额”按钮,然后输入自己想取得面额,具体事件代码如下:

100,300,500,1000,2000按钮的鼠标点击事件代码如下:

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

if(Atm.balance>=Double.valueOf(jButton1.getText()))

{

14

new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面

this.setVisible(false);

Atm.balance=Atm.balance-Double.valueOf(jButton1.getText());

Atm.FileWriter();}

else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面

this.setVisible(false);

} }

private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

if(Atm.balance>=Double.valueOf(jButton3.getText()))

{

new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面

this.setVisible(false);

Atm.balance=Atm.balance-Double.valueOf(jButton3.getText());

Atm.FileWriter();}

else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面

this.setVisible(false);

} }

private void jButton5MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here

if(Atm.balance>=Double.valueOf(jButton5.getText()))

{

new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面

this.setVisible(false);

Atm.balance=Atm.balance-Double.valueOf(jButton5.getText());

Atm.FileWriter();}

else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面

this.setVisible(false);

} }

private void jButton4MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

if(Atm.balance>=Double.valueOf(jButton4.getText()))

{

new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面

this.setVisible(false);

Atm.balance=Atm.balance-Double.valueOf(jButton4.getText());

Atm.FileWriter();}

else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面

15

this.setVisible(false);

} }

private void jButton6MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

if(Atm.balance>=Double.valueOf(jButton6.getText()))

{

new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面

this.setVisible(false);

Atm.balance=Atm.balance-Double.valueOf(jButton6.getText());

Atm.FileWriter();}

else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面

this.setVisible(false);

} }

“其他面额”按钮鼠标点击事件代码:

private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmWithdrawlInput().setVisible(true);//输入取款金额界面

this.setVisible(false); }

“返回”按钮的鼠标点击事件代码:

private void jButton7MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmEnterSuccess().setVisible(true);//返回主交易界面

this.setVisible(false); }

8)取款金额输入界面

16

这个界面是当用户所想取得金额在界面上没有的时候,便需要用户自己输入,规定输入的金额必须是100的倍数,且不大于5000元,具体事件代码如下所示:(其中按钮0-9的代码,“退卡”按钮等的代码和前面相同)

“确定”按钮的鼠标事件代码:

private void jButton11MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

double a=Double.valueOf(jTextField1.getText());

if(Atm.balance>=a&&a%100==0&&a<=5000.0){

new AtmWithdrawlSuccess().setVisible(true);//取款成功界面

this.setVisible(false);

Atm.balance=Atm.balance-Double.valueOf(jTextFiled1.getText());

Atm.FileWriter();

}

if(a%100!=0||a>5000){

new AtmWithdrawlInputError().setVisible(true);//取款金额输入错误界面

this.setVisible(false);

}

else{

17

new AtmBalanceNotEnough().setVisible(true);//余额不足

this.setVisible(false);

}

}

“取消”按钮的鼠标事件代码:

private void jButton13MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmEnterSuccess().setVisible(true);//返回到主交易界面

this.setVisible(false); }

9)存款界面

和取款界面类似,具体的代码如下所示: 100,300,500,1000,2000按钮的鼠标事件代码:

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmDepositSuccess().setVisible(true);//存款成功界面

this.setVisible(false);

Atm.balance=Atm.balance+Double.valueOf(jButton1.getText());

Atm.FileWriter(); }

private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {

18

// TODO add your handling code here:

new AtmDepositSuccess().setVisible(true);

this.setVisible(false);

Atm.balance=Atm.balance+Double.valueOf(jButton3.getText());

Atm.FileWriter(); }

private void jButton5MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmDepositSuccess().setVisible(true);

this.setVisible(false);

Atm.balance=Atm.balance+Double.valueOf(jButton5.getText());

Atm.FileWriter(); }

private void jButton4MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmDepositSuccess().setVisible(true);

this.setVisible(false);

Atm.balance=Atm.balance+Double.valueOf(jButton4.getText());

Atm.FileWriter(); }

private void jButton6MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmDepositSuccess().setVisible(true);

this.setVisible(false);

Atm.balance=Atm.balance+Double.valueOf(jButton6.getText());

Atm.FileWriter(); }

“其他面额”按钮的鼠标事件代码:

private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmDepositInput().setVisible(true);//输入存款金额界面

this.setVisible(false); }

10)输入存款金额界面

19

和存款界面2类似,具体的事件代码如下: “确定”按钮的鼠标事件点击代码:

private void jButton11MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

String cs=jTextField1.getText();

if(Double.valueOf(cs)%100==0&&Double.valueOf(cs)>0){

new AtmDepositSuccess().setVisible(true);

this.setVisible(false);

Atm.balance=Atm.balance+Double.valueOf(cs);

Atm.FileWriter();}

else{new AtmDepositInputError().setVisible(true);//存款金额输入错误界面

this.setVisible(false);

} }

11)密码修改界面

本来修改密码是要输入原密码的,但我们在使用ATM时,一开始就输入了密码,否则也不能进入修改密码界面,所以在这里直接输入新密码,连续两次输入,且两次输入的密码相同,且6位密码不完全相同,则修改密码成功,否则失败,具体代码如下: “确定”按钮的鼠标事件代码:

private void jButton11MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

String a=jPasswordField1.getText();

Atm.password1=a;

new AtmPasswordInAgain().setVisible(true);//进入密码确认界面

this.setVisible(false); }

“返回”按钮的鼠标事件代码:

private void jButton10MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmEnterSuccess().setVisible(true);

this.setVisible(false); }

12)密码修改确认界面

21

第二次输入新密码,具体代码如下: “确定”按钮的鼠标事件代码:

private boolean Samechars(String str) //若6位密码相同,则返回false {

if(str.equals("000000") ==true || str.equals("111111") ==true || str.equals("222222") ==true || str.equals("333333") ==true || str.equals("444444") ==true || str.equals("555555") ==true || str.equals("666666") ==true || str.equals("777777") ==true || str.equals("888888") ==true || str.equals("999999") ==true)

return true;

else

return false; }

private void jButton11MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

String b= jPasswordField1.getText();

Atm.password2=b;

int i = jPasswordField1.getText().length();

if(i== 6 && Atm.password1.equals(b)&& Samechars(b)==false)

{

Atm.thePassword = b;

Atm.FileWriter();

new AtmPasswordChangeSuccess().setVisible(true);//进入修改成功界面

this.setVisible(false);

22

}

else

{ new AtmPasswordUnsucc().setVisible(true);//进入失败界面

this.setVisible(false);}

} 13)密码修改成功界面

当两次输入的密码相同,则弹出密码修改成功界面,点击“继续”按钮返回到主交易界面,退出系统则点击“退卡”按钮。代码略。 14)密码修改失败界面

23

点击“确定”按钮,则返回到修改密码界面,若放弃修改点击“退卡”按钮,若还想进行其他交易,则点击“确定”后,再点击修改密码界面的“返回”按钮。

“确定”按钮的鼠标点击事件代码:

private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

new AtmPasswordChange().setVisible(true);//返回到密码修改界面

this.setVisible(false); }

15)存款成功界面

24

点击“继续”则返回到主交易界面,“退出”则退出交易。 16)存款失败界面

当所存金额不是100的整数时,则存款失败,同样点击“返回”按钮则返回到主交易界面,点击“退卡”则退出交易。 17)取款成功界面

25

当索取金额不大于5000,且是100的整数,当前余额不小于索取金额时,则取款成功。

18)取款失败界面(余额不足)

当输入的金额大于当前余额,输入的金额不大于5000且是100的倍数,则弹出余额不足界面。 19)取款失败界面(输入金额错误)

26

当输入的金额不是100的倍数且大于5000时,出现此界面。

五、参考文献

《Java应用案例教程》张红梅,姜晓刚等著

清华大学出版社

六、心得体会

在这次的期中课程设计中,我主要运用了Java语言的图形用户界面设计、异常处理、Swing控件,输入输出流等,综合运用了Java语言。我深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,在完成设计的同时培养了自己的编程思维,为以后做别的设计打下基础。

刚开始做ATM机课程设计的时候,我简直一点头绪也没有,我想着自己编程一直都那么差,怎么可能完成这么难的设计,但是这是期中考试设计,肯定得交啊,所以我不得不图书馆借书看,边看边做,在做的过程中,我才知道java不只是写代码,还有许多其他的功能,我发现我对专业课不像以前那么的排斥了,还有感觉通过自己查询相关书籍去实践以及和同学交流获取的知识更巩固,我不再那么讨厌编程了,我觉得无论什么事情,只要自己愿意去尝试,并且尽自己最大努力去做,总会有所收获的。本来一直认为这门专业对女生来说学起来很吃力,很困难,但是现在又有了信心,差的人可以付出更多的努

27

力去弥补自己的不足,这样就可以不被落下了。在以后的学习中,我会更加努力,我觉得java学习一定要理论与实践相结合,才能更好地掌握知识。

28

第三篇:人事管理系统Java课程设计报告

湖南科技大学计算机科学与工程学院

数据库课程设计报告

题目:人事管理管理系统

学 号:1005030221 姓 名:艾向兵 指导教师:张黎

完成时间:2012年1月4日 组员:苏勇,成佳裕,艾向兵

企业人事管理系统主要用于员工个人资料的录入,职务变动的记录和管理。使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配 1.1系统功能需求分析

人事管理系统主要有以下几项功能要求: .新员工资料的输入。

.自动分配员工编号,并且设置初始的用户密码: .人事变动的记载,包括岗位和部门的调整。 .员工信息的查询和修改,包括员工个人信息和密码 1.2 系统功能模块设计

根据系统功能要求,可以将系统分解成几个模块来分别设计应用程序界面,如图,

人事资源管理 包括:新员工档案输入,人事变更,员工档案查询

1.3 与其它系统的关系

本关系是公司管理信息系统的基础部分,为其他子系统,如考勤管理系统,工资管理系统和员工培训系统,提供员工的基本信息。同时为其他系统提供了员工登录的密码认证和权限分配。 1.4数据库设计 数据库需求分析:

员工信息:员工号,密码,权限,姓名,性别,生日,专业,通讯地址,电话,Email,当前状态,其他。

人事变动:记录号,员工,变动,详细描述

部门设置:部门编号,名称

员工变动代号表

员工信息表

员工职位代码表

管理员登陆界面

信息查询,修改,删除主界面

查询单个员工的界面

总 结

这次的课程设计,是在学习了Java以后通过阅读课本及在图书馆借阅相关书籍同严景、孟珍三人共同完成的。在开发这个系统的过程中,碰到很多或大或小的问题,我们一起思考,一起努力,最后大部分都解决了,得到了现在的这个简单的人事管理系统。

在编制过程中,我们首先考虑到了界面的友好性,并在界面设计时不采用烦琐的细节,使界面简单、清晰,便于操作。一开始我们是想做个登录界面,实现用户的登录权限管理,但试了几次都没有达到预期的效果,最后不得不放弃。

通过这次课程设计,我知道了什么事情都不那么简单,只有努力去做了,你才会有收获,不管收获大小,付出的过程总是有的。有些事情只有亲身感受,你才知道它的价值有多大。同时在遇到困难的时候要沉着冷静,首先要冷静分析问题,对于很难解决的问题要学会请教他人,还可以与别人合作。

在这次数据库系统课程设计中,我主要进行的是界面的设计,以及进行进行整合操作,界面是我学习Java以来第一次做,以前不怎么用的JTabel等,现在都已经熟练的应用了,特别是这次的弹出窗口,我在做这个的时候可谓是一窍不通,因为把按钮JButton定义为了局部变量而在时间响应中而得不到另一个窗口的弹出。

还有就是在整个过程中的ID传递让我不知怎么办,一个简单的参数传递才得以搞定,基础知识还是不够牢靠。在得到修改表的数据库内容后未把值传给表格。

虽然这次课程设计付出了大量的时间,但是我知道我得到的收获远远不是这些时间可以衡量的,它将给我今后的学习和工作带来更多的收益。通过对此课题的开发,使我对用Java开发系统有了一个比较清楚的认识,体会到理论和实践的重要性。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如没有设置登录界面,没有考虑到异常等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。

弹出登录程序的界面程序

public void actionPerformed(ActionEvent e){

if(e.getSource()==okButton){

String userID=text.getText(); String passWD=String.valueOf(passwd.getPassword()); if(userID.equals("1")&&passWD.equals("1")){

JOptionPane.showMessageDialog(null, "登陆成功!", "消息", JOptionPane.INFORMATION_MESSAGE);

new UserWindow2().userWindow2();//弹出第二个窗体

} else{

JOptionPane.showMessageDialog(null, "对不起您的用户名或密码错误!", "错误",JOptionPane.ERROR_MESSAGE);

text.setText(""); passwd.setText(""); } } if(e.getSource()==deleButton){

text.setText(""); passwd.setText(""); }

} 进行信息查询,修改,删除的程序响应代码:

public void actionPerformed(ActionEvent e){

if(e.getSource()==button1){

new UserWindow3();

} if(e.getSource()==button2){

UserWindow7 u= new UserWindow7(); u.userWindow7(); } if(e.getSource()==button3){ UserWindow5 u=new UserWindow5();

u.userWindow5(); }

public void actionPerformed(ActionEvent e){

if(e.getSource()==button){ int id= Integer.parseInt(text0.getText());//得到用户编号

String name=text1.getText();//得到用户姓名

String sex=text2.getText(); //得到性别

String birthDay=text3.getText(); //得到生日 String department=text4.getText();//得到所在部门 String job =text5.getText();//得到职位

String education=text6.getText();//得到教育程度 String spcialty=text7.getText();//专业技能 String address=text8.getText();//得到地址 String tel=text9.getText();//得到电话

String email=text10.getText();//得到电子邮箱 String state=text11.getText();//得到员工状态 String remark=text12.getText();//得到备注 Insert in=new Insert();//

boolean b;

b=in.insert(id,name,sex,birthDay,department,job,education,spcialty,address,tel,email,state,remark); if(b){ JOptionPane.showMessageDialog(null, "数据保存成功!", "消息", JOptionPane.INFORMATION_MESSAGE); }

} }

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

id = Integer.parseInt(text.getText());

if(e.getSource()==button){ UserWindow8 us = new UserWindow8(); us.userWindow8(id);

}

Container container=this.getContentPane(); container.setLayout(new BorderLayout());

JPanel pan =new JPanel(); JLabel lab = new JLabel("请输入工号:"); JTextField text=new JTextField(10); JButton button =new JButton("查询"); JButton button1=new JButton("删除"); pan.add(lab); pan.add(text); pan.add(button); pan.add(button1); container.add(pan);

String []titles={"员工编号","姓名","性别","生日","部门","职务","教育程度","专业技能","家庭住址","联系电话","电子邮箱"};

String [][]userInfo={};

JTable table =new JTable(userInfo,titles); table.isCellEditable(2,2); JScrollPane scrollpane

=new

JScrollPane(taboooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................le);

container.add(scrollpane,BorderLayout.SOUTH);

第四篇:Java web课程设计实训报告

我们进行了为期一周的Java web的课程实训。在这次实训中,我觉得我学到了很多东西。这次,老师给我们安排了一个项目,是关于商店购物的。首先,我们划分了几个小组,每组4-6人,每个人有每个人的工作,每个人的工作完成后整合到一起,这个项目就完成了。我在我们小组的工作是写一段删除商品的Java代码。因为我的基础比较差,所以我分担的工作比较少,下面是我做的一段代码:

public void deleteProduct(String id) {

Statement stmt = null;

connectTODB();

int tempid =

Integer.parseInt(id);

try {

stmt =

this.con.createStatement();

stmt.execute("delete from

shop_info where product_id=" + tempid);

} catch (Exception e) {

e.printStackTrace();

} finally {

close(this.con, stmt, null); }}

总而言之,这次实训对我的帮助很大,我工作会很有从中学到了什么是团队协作,正所谓团结就是力量,不仅如此,我还学到了很多的专业知识,积累了一些经验。我想,对于我以后的工作会很有帮助,希望还能有更多像这样的机会让我能够锻炼我自己。

第五篇:Java课程设计

Java及J2EE课程设计题目

1、文件档案管理

文件档案管理系统主要对外来文件、下发文件和需要抄送的文件进行统一管理。划分为以下三个模块:收文管理、发文管理、抄送文件。

1. 收文文件增加、删除和修改,其字段有:收文编号、收件日期、文件标题、内容、发文单位、签发人

2. 发文文件增加、删除和修改,其字段有:发文编号、发件日期、文件标题、内容、收文单位、发件人

3. 抄送文件增加、删除和修改,其字段有:文件编号、发件日期、文件标题、内容、抄送单位、发件人

4. 查询条件是发文类型(收文、发文还是抄送)、文件标题、内容进行模糊查询。

应用工具:jsp+struts+jdbc

题目等级:A

2、运动员档案管理

运动员档案管理系统是对运动员的基本信息及参加比赛的情况进行管理维护。分为两个模块:运动员建档、比赛记录。

5. 运动员建档增加、删除和修改,其字段有:学生编号、姓名、出生日期、性别、民族、政治面貌、主修项目、联系方式

6. 对运动员的档案进行模糊查询,查询条件有:学生编号、学生姓名、性别、主修项目

7. 对比赛记录进行增加、删除、修改,其字段有:学生编号、姓名、时间、地点、比赛名称、参加项目、成绩、名次

8. 对比赛记录进行模糊查询,查询条件有:学生编号、学生姓名、比赛名称、参加项目、成绩 应用工具:jsp+struts+jdbc

题目等级:A

3、信息发布系统

信息发布系统是将最新信息、以最快的方式展示给用户。提供信息的维护管理功能。信息主要字段:发布时间、标题、内容、有效期开始时间、结束时间、发布人、是否阅读,完成对信息的发布、修改、删除操作,对信息进行模糊查询,其查询条件为标题、内容、发布人

应用工具:jsp+struts+jdbc

题目等级:A

4、通讯录管理

通讯录管理系统是方便用户管理自己的联系人,查找相应的联系方式。根据类别的不同对联系人进行分类管理。联系人信息有:姓名、性别 、职务、办公电话、手机、宅电 、电子邮件、通讯地址,完成对联系人的增加、删除、修改操作,提供对通讯录进行模糊查询,其条件为姓名、性别、职务、通讯地址字段

应用工具:jsp+struts+jdbc

题目等级:A

5、备忘录管理

备忘录管理系统是记录每天需要做的事情,起到一个提醒的作用。提供对这些信息的维护功能。备忘录中的内容主要有:日期、标题、内容这三个数据项,完成对其的增加、删除、修改操作,并可以按日期和标题、内容进行模糊查询

应用工具:jsp+struts+jdbc

题目等级:A

6、会议管理

会议管理系统是记录会议的基本信息,开完会后记录会议的讨论结果,进行备案,供以后查询使用。会议的基本信息:会议主题、会议类型 (周会、报告会、考务会……)、会议状态 (准备中、进行中、已结束三种)、会议时间、会议地址 、参与者 、会议主要内容,完成对其会议基本信息的增加、删除、修改操作,并要记录会议结果,会议记录结果主要记录的是会议讨论结果 、领导签字两个数据项。 应用工具:jsp+struts+jdbc

题目等级:A

7、日程管理

日程管理要记录每天的工作日程安排,主要内容包括:记录时间、名称、内容、地点、日程的开始

和结束时间,完成对基本信息的增加、删除、修改操作,并对日程的信息进行查询,查询条件有:名称、内容

应用工具:jsp+struts+jdbc

题目等级:A

8、日志管理

日志管理要记录每一天完成工作的情况,记录的信息有时间、上午工作记录、下午工作记录、记录人,完成对这些信息的维护,并对日期进行查询

应用工具:jsp+struts+jdbc

题目等级:A

9、用户管理

为了方便网站管理者对用户进行身份确认,或者是用户购买以后进行配送等服务,必须要有用户管理系统。用户管理系统应该具有用户注册、用户登录、用户修改和用户注销等功能。

1. 用户注册(1)

2. 用户登录(1)

3. 用户信息修改(1)

4. 用户注销(1)

应用工具:jsp+struts+jdbc

题目等级:A

10、数据查询

网上购物的一个优势是可以在商品中进行查询。

1. 生成查询记录集(1)

2. 分页显示功能(1)

3. 查看商品详细信息(1)

应用工具:jsp+struts+jdbc

题目等级:A

11、购物车

1.添加到购物车(1)

2.查看购物车(1)

3.购物车操作(1)

4.结帐(1)

应用工具:jsp+struts+jdbc

题目等级:A

12.新闻管理系统

题目:当今社会是一个信息社会,人们通过信息了解社会情况,进行社会活动,而新闻作为企事业单位宣

传自己,发布信息的主要形式,而在网络新闻的宣传是一个新兴事务,并且发展很快,已经成为一个重要信息发布媒体。所以现要求你设计一个用于新闻管理的信息系统,实现新闻的编辑与发布。

功能要求:本系统要求可以完成新闻在线发布,在线编辑,新闻分类,图片新管理等功能,技术上要求

使用JSP技术。

题目等级:B

13.在线考试系统

题目:考试作为学员学习效果的检验的主要方式一直被采用,而且考试形式也有许多方式,如笔试,面

试等,在线测试作为一种新的考试形式,得到越来越快的发展。所以现要求你设计一个在线考试系统,实现在线测试。

功能能要求:实现在线测度,在线评测,随机出题,试题编辑等功能,技术上采用JSP+JavaBean实现。题目等级:A

14.网上书店系统

题目:图书是人们了解知识,掌握知识的主要手段,传统的书店都店面形式,人们需要去书店才能够购

买,花费大量的时间也不一定得到一本满意的书籍。而网上书店就是利用网络为人们提供一个足不出户就可以买到一本理想的书籍的方式。所以要求你设计一个网络书店系统,实现书籍的在线销售,在线阅读。

功能要求:实现图书在线阅览,在线选购,新书推荐等功能,技术上要求采用JSP +JavaBean实现。 题目等级:A

15.学生学籍系统

题目:学生学籍管理是一个学校管理的重要组成部分,学生学籍管理也是最麻烦的一项管理,所以实现

学生学籍管理的信息化是一种简化管理的主要途径。现要求你设计一个实现学生学籍管理的系统,实现学生学籍管理的信息化。

功能要求:学生学籍注册,查询,更新,学生奖惩,学籍变动等功能。技术上要求采用JSP技术实现。 题目等级:B

16.留言本

题目:留言本是网站中用于与管理员进行信息交流的主要方式,是网站中的一个重要功能之一,现要求

你设计一个留言本,实现在线留言。

功能要求:留言发布,留言回复,留言置顶,留言验证等功能,技术采用JSP实现。

题目等级:C

17.在线投票问卷管理系统

题目:在线调查是调查了解对某件事情人们反映的主要方式,是目前比要流行的一种调查方式。现要求

实现一个在线投票调查系统,并可以进行结果统计,结果评测等功能。

功能要求:在线投票,在线答卷,在线统计,在线评测等功能,技术上采用JSP实现。

题目等级:C

18.员工档案管理系统

题目:员工档案是一个企业人才建设管理的重要资源,好的员工档案管理,对提高员工工作积极性,

提高企业效益的重要方式。所以要求设计一个员工档案管理系统,实现员工档案管理的信息化管理。

功能要求:员工档案注册,员工考核,员工调动等功能,技术上采用JSP+JavaBean实现。

题目等级:A

19.文本编辑器

题目:参照Windows记事本程序设计一个文本编程器,可以进行文本的格式编辑。

功能要求:要求有菜单,工具栏,文本编辑功能所需要的功能,技术上采用Java图形窗口技术实现。题目等级:C

20.计算器

题目:参照Windows计算器程序设计一个计算器,可以实现数学计算。

功能要求:要求功能上要与Windows计算器功能类似。

题目等级:C

21. HANNOI-塔

题目:运用多线程与图形接口技术设计一个HANNOI-塔演示程序,要求增加简易图形界面。功能要求:能够至少演示5级HANNOI-塔。

题目等级:B

22.挖雷游戏

题目:运用多线程程序与图形接口技术设计一个挖雷游戏程序,要求有简易的图形界面。

功能要求:功能上与Windows扫雷游戏类似。

题目等级:A

23.动态时钟

题目:运用Applet和多线程技术设计钟表程序,以实现当前时钟的显示。

功能要求:要求有表盘,可以调整时间。

题目等级:B

24.音乐播放器

题目:运用Applet技术设计一个可以播放音乐的播放器。

功能要求:可以播放音乐,可以添加乐曲等功能。

题目等级:C

25.实验室网上签到系统

题目:要求实现一个实验在线签到系统,学生可以在上实验时完成签到。

功能要求:课程设置,新建签到,学生签到列表,学生在线签到等功能。技术上采用JSP+JavaBean技

术实现。

题目等级:B

26.用户管理系统

题目:要求实现用户管理系统,可以实现用户注册,用户权限管理等功能。

功能要求:用户注册,用户极限分配,用户登录等功能。技术采用JSP技术实现。、

题目等级:C

27.图书馆管理系统

题目:要求实现图书馆的在线管理,学生可以在线借书,在线阅览等功能。

功能要求:在线图书管理。在线阅读,在线借书,还书等功能。技术上采用JSP+JavaBean实现。题目等级:B

28.求职招聘系统

题目:网上求职是当今人才流动,人才引进的重要途径,但对于成百万的简历的管理,职位的发布的

管理如果采用人工的方式会花费大量的人力、物力,但如果实现计算机网络化 管理就显得容易一些,所以现要求你设计一个求职招聘管理系统,实现人才交流的信息化处理。。

功能要求:职位发布,在线投简,在线应聘等功能。技术上采用JSP+JavaBean技术实现。题目等级:B

29.仓库管理系统

题目:仓库管理是一个非常烦琐,但是很重要的工作。如果能够实现仓库管理的计算机处理,对于提

高工作效率,降低工作成本,能够起到非常重要的作用,所以现要求实现一个仓库管理系统,实现仓库的信息化管理。

功能要求:实现货物的出库,入库,库存统计,库存预警等功能。技术上采用JSP+JavaBean技术实现。题目等级:B

30企业网站管理系统

题目:网站对企业宣传工作的开展提供一个非常的好的效果,产生很好的效益,这就说明网站已经成

为企业宣传自己的重要手段,网站管理的好坏直接影响这个网站的应用,所以现要求为某企业网站设计一个管理系统,实现网站的后台管理。

功能要求:产品发布,用户管理,信息发布等功能。技术上采用JSP+JavaBean技术实现。题目等级:A

31.流量统计系统

题目:网络流量是反映一个网站受关注度情况的重要表现,是网站调整版面信息的参考,访问流量高

的网站证明其效益非常好,是一个非常理想的网站,但流量低的网站就需要进行信息的更新和版面的修改,以提高网站的访问量,这样网站流量的时时统计能够给网站管理员提供一个网站运行情况信息参考,为其更好的管理网站提供帮助。现要求你设计一个网站访问流量的统计系统,时时统计网站访问流量。

功能要求:显示在线人数,当前访问者IP,历史访问人数,最高流量时间等功能。技术上采用JSP技

术实现。

题目等级:C

其它可选题目

以上题目的等级全都为C,所选工具应为jsp+jdbc,都要完全相应的增、删、改、查等功能

(1) 酒店管理信息系统

(2) 客房管理信息系统

(3) 药品管理信息系统

(4) 学籍管理信息系统

(5) 成绩管理信息系统

(6) 宿舍管理信息系统

(7) 图书管理信息系统

(8) 财务处理信息系统

(9) 固定资产核算信息系统

(10) 工资管理信息系统

(11) 材料管理信息系统

(12) 成本管理信息系统

(13) 房地产产权产籍管理信息系统的开发

(14) 住宅小区物业管理信息系统的开发

(15) 建设工程报价管理信息系统的开发

(16) 建设工程预算系统的开发

(17) 项目材料管理信息系统的开发

(18) 工程材料采购管理信息系统的开发

(19) 工程成本管理信息系统的开发

(20) 机械设备租赁管理系统的开发

(21) 工程图档管理信息系统的开发

(22) 企业人力资源管理信息系统的开发

(23) 企业职工培训管理信息系统的开发

(24) 企业职工医疗保险信息系统的开发

(25) 商品销售管理信息系统的开发

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:读书笔记大全600字下一篇:h7n9禽流感的学习教案