java课程最新faq
第一篇:java课程最新faq
聚划算流程+FAQ(最新版)
聚划算流程+FAQ(2013最新版)
厦门绿度电器有限公司
FAQ
商品团 Q1:能告诉我审核不通过的原因么?不通过后我可以再报名么?!
A:审核人员会写上相对应的不通过理由或建议,您可以在原来报名基础上做出修改重新提交以达到我们审核要求,或选择更有竞争优势的商品继续报名。
Q2:为什么聚划算规则中的销售记录是10条,但商品宝贝的页面展示却不足10条销售记录呢?
A: 聚划算规则中的销售记录审核时取自商品发布之日到报名聚划算之日的销售记录。而买家购买时看到的商品宝贝页面展示的销售记录是该宝贝一个月内的销售记录。所以请大家不要误解哦!
Q3:960*640的图片有什么标准或要求吗?一定要白底吗?
A:没有强质性要求白底,以淡色背景为准,图片上不能体现任何促销文字。图片的宗旨也是清爽,大方,漂亮,直接体现产品本身。具体的可以参考我们的报名填写规范
Q4:样品己寄出,聚划算什么时候可以收到?后台已经显示“己收货”了,但是小二还是没有来联系我,样品也没有寄回。怎么回事!
A: 样品收到后聚划算后台的报名信息会显示己收货。同样,请理解聚划算每天的快递量是非常大的,有专门的小邮局帮团长整理快递,不是签收日就是团长看到样品的日期,小邮局会整理出相关类目的快件,然后放在相关团长的样品库里,整理是需要时间的,所以请耐心等待。
Q5:审核主要审核什么?
A: 我们所有的审核,大体是围绕聚划算招商准则来的。(快速通过审核请点击下载) 当然,综合竞争力包括商品图片、页面,也包括这款商品的款式以及是否适合聚划算买家,还有您店铺的运营能力等多方面。所以希望商家在决定报名之前请先练好内功哦。
Q6:审核通过了,现在聚划算后台是什么状态呢?
A:当商品审核通过后,系统后台可以看到“终审通过待竞价”的状态。
Q7:哪些卖家可以参与竞拍?竞拍的标的是什么?
A:为了让消费者有机会高效、精准的购置到物美价廉的商品,聚划算将结合系统技术服务以及商品质检等服务,通过不断优化的商品性价比筛选系统,确定合格的可参与竞拍的商家。商家竞拍的是某款商品在某一天参加聚划算团购服务的排期。
Q8:竞拍成功后是否就一定能上聚划算?
A:竞拍成功后,在开团之前如发现卖家或商品不符合聚划算规则,则聚划算有权取消商品开团。
Q9:竞价排期采用什么竞拍方式?
A:所有参与竞拍的卖家都只能在当前最高价的基础上进行加价,竞拍结束时以入围成交的所有卖家中最低出价作为实际成交价(即排期技术服务费)。
Q10:请问竞价排期的疲劳期是多久?
A:同一商家一个月(商品团、品牌团、聚名品、聚新品、聚设计、聚家装)最多只能参团8次聚划算,同一商家聚划算开团商品的间隔疲劳期不低于1天(自然日)。
Q11:可竞拍排期的时间是多少天?
A:在商品审核通过次日起,商家可在未来30天内参加竞拍。竞拍当日可竞拍14天之后的排期。
举例:某款商品终审通过时间为2012年6月1日,商家可参与竞拍时间为6月2日—7月1日;6月2日商家可竞拍的排期日为6月16日; 如6月2日商家放弃竞拍或者流拍后, 6月3日商家可竞拍的排期日为6月17日,依此类推,直至竞拍成功或超过竞拍有效期7月1日。(说明: 上述案例中尚未考虑商家疲劳期控制的因素,在疲劳期控制期间无法参与竞拍)
Q12:保证金要怎么样冻结?
A: 参与聚划算竞拍的卖家在进入 竞拍日历 后,点击即将开始或立即竞拍时,会提示冻结竞拍保证金。
Q13:同个商家每天可参与竞拍的商品数量是多少?
A:在竞拍过程时,一个商家只能选择一个商品参与排期竞拍。
Q14:对于竞拍成功后的排期是否可以修改?
A:对于竞拍成功后的商品,其排期数据不能修改。
Q15:竞拍成功后如果要取消活动,会接受什么样的处罚?
A:商家竞拍成功后,由于商家原因,而放弃参加聚划算活动,聚划算将依照竞拍规则扣除保证金或不退还排期服务费,同时根据聚划算相关规则执行处罚。
Q16保证金是拿来干嘛的??要怎么交?多少钱?
A: 保证金的意义是为了保证消费者的权益。把相对应的保证金充入活动店铺绑定的支付宝里即可。
关于保证金的缴纳请看保证金规则,保证金能否及时到位会直接影响您最终能否参与活动,所以请提早准备!
Q17:发了上线通知单就是一定能上活动吗?
A:按常理来说是的,但是我们的上线通知单是以“商品及商家符合活动要求和规则“的前提下才发出的。若在活动前发现商品评分下降,好评率下降,被处罚还在处罚期等等不合规则的事情发生,则上线通知单作废!所以请商家在接到上线通知单后,不要松懈态度,也不要做任何违反规则的事情。
Q18:明天就活动了,今天还没有资料员联系我冻结保证金,怎么回事??
A:保证金的冻结已经开始使用新的流程,并且需要在自己活动店铺绑定的支付宝账户里才能冻结。活动前的1-2个工作日我们会发出系统信息,系统信息一般发送到店铺主旺旺号,请注意查收。
保证金冻结教程
Q19:保证金冻好了,明天要活动上线了,还要做些什么? A:活动前一天请编辑好您的页面,以及线上库存量,库存量需要和活动报名数量一致,不可多!切记!商品开卖前一个小时锁定,不支持任何修改行为,所以请在活动前确保商品信息一切无误。否则后果自负。
Q20:活动效果非常好,可以加量吗?
A:不可以! 活动当天不加量不换款,所以请商家在报名的时候就确认最终的活动数量。不要随意更改!
Q21:活动效果不好,能否换个主图?
A:请商家在报名的时候就确定活动主图是您最为满意的。活动上线后不支持主图的更换!谢谢您的支持!
Q22:店铺想配合聚划算活动,做一些满多少送,或者送IPAD之类的促销,能否在主图或聚划算文字链上体现?
A:不好意思,主图的标准是无任何促销性文字,包括文字链上也是一样的,我们有专业的编辑组小二,他们会根据图片,产品描述等信息来编辑标题。若文字和图片有较为严重的错误,请联系相关负责人,或聚划算招商页面的在线咨询。感谢您对聚划算工作的支持。
Q23:我明明在报名的时候写明的限购数量为x件,为什么系统后面显示的是限购一件? A:如果您在自己后台对店铺设定了秒杀,我们的限购数量只能设定为1件,所以在初审通过后您需要注意您店铺宝贝的设置。如果是您自己的原因导致,我们概不负责,并不支持修改。
Q24:我半年前上过活动的,为什么现在后台还是报不了名啊?
A:我们的规则是同一店铺同一宝贝ID只能上一次活动。上过活动的产品不能再报名。
Q25:我活动已经结束很久了,保证金为什么还没有解冻?
A:8月15日以前的活动,保证金的解冻流程是一样的,个人账户活动结束后15天自动解冻,商城账户需要发送邮件,具体的邮件地址咨询聚划算招商页面的在线咨询。8月15号以后的保证金走的是新系统流程,会在活动结束后15天自动解冻,需要延长的类目除外。具体延长类目在保证金规则帖子中有标明。
Q26:我报名的时候老是提示填写标题,可我已经填写好了啊,到底要填写怎样的标题? A:如果您的标题中出现了%,*,(),[],&,#等符号标志,请去掉,这些符号会被判定为非法字符,所以不能报名。
Q27:我的商品需不需要质检,需要去哪儿质检? A:为了让消费者在聚划算上买到高品质、高性价比、安全可靠的产品,我们启动了质检工作。有部分类目开始执行全类目质检(男装、女装/女士精品、女士内衣/男士内衣/家居服、童装/童鞋/亲子装(不含童鞋)家装家纺),还有些材质是真丝、桑蚕丝、羽绒、羊毛、羊绒、100%纯棉、猪、牛、羊皮产品进行质检,具体的地址以及注意事项可详看以下链接:http://bangpai.taobao.com/group/thread/613552-264119526.htm
Q28: 聚划算商品不允许拼款销售?
A: 版式或者材质不同视作拼款,不能一起报名聚划算。
同版式不同花色的情况下,如果花色的印染工艺或拼接材质不同,也视作拼款,不能一起报名。
Q29:竞拍过程中,如果距结束时间30秒内有人出价,则系统自动恢复为剩余30秒(也就意昧着只要该商品的竞拍时间就会自动延长30秒),这是不是变相的不限时竞拍?
A:这其实是想咨询整个竞拍过程到底何时结束的。聚划算为了避免出现机会主义,尤其是秒杀行为的发生。根据现有的竞拍规则,竞拍的结束时间有两种情况:
1、是到了12点,最后30秒无人出价,竞拍活动自然结束;
2、是最后30秒内有人出价,时间会顺延,但到中午12点10分时会自动终止,结束竞拍。
Q30:竞拍结束后,入围成交的所有卖家中最低出价作为实际成交价,很多卖家都不能理解,实际成交价为什么是入围的最低成交价呢?
A: 如果您竞拍的排期日仅有一个坑位时,实际成交价格就是竞拍结束后您入围的价格;当您竞拍的排期日有多个坑位时,按照最后一名入围的卖家的竞拍价格为实际成交价格,这时的竞拍价格就是此坑位的最低成交价。
品牌团
Q1:品牌团可以报名的商家有哪些?
A:目前仅开放给天猫品牌特卖平台的商家。
Q2:品牌团如何报名?
A:商品需要先入天猫特卖仓(详情请查看),方可报名聚划算品牌团。
Q3:报名品牌团的商品数量有要求吗?
A:必须大于6款方可报名,上限数量不限。
Q4:报名品牌团的商品有疲劳期吗? A:品牌团的卖家一个月仅排期一次
Q5:品牌团收费模式是怎么样?
A:聚划算品牌团只需要交纳技术服务费,除此之外无其它费用;
Q6:商品保证金的金额是多少呢? A:品牌团的保证金计算方式与聚划算商品团保证金规则一致,封顶50万元。
Q7:品牌团是否需要10条销售记录? A:不需要。
聚名品
Q1:如何报名聚名品?
A:符合平台要求方可报名,详情请见:http://bangpai.taobao.com/group/thread/613552-266358192.htm?tracelog=zsymlbt
2Q2:聚名品的疲劳期是多久?
A:同一卖家每个月最多只能参加三次聚划算,每次间隔五天及以上。
Q3:聚名品是否只是对全球购商家开放?
A:不是。除全球购商家外,还包括:化妆品类目的金牌卖家和天猫商家。
Q4:保证金是如何冻结?
A:集市商家是按照保证金规则双倍来冻结,100W封顶; 天猫商家不需要按照双倍保证金冻结。保证金详情请见:http://bangpai.taobao.com/group/thread/613552-263102422.htm
Q5:食品类目是否可以报名? A:此类目暂时不招商。
Q6:聚名品是否是销售记录有要求? A:不需要10件销售记录要求。
出口优品
Q1:出口优品可以的报名商家有哪些?
A:目前仅对良无限卖家开放,并且是国际品牌代工的外销型工厂的优质商品。
Q2:供应商需要具备什么资质?
A:出口资质、验厂报告(深度验厂分数要达70分以上)。
Q3:供货工厂是否也有疲劳期?
A:供货工厂需要遵守聚划算的基础疲劳期的标准,每月三次(间隔期5天以上)。
Q4:上线商品是否需要收取基础佣金?
A:需要收取基础佣金标准与聚划算商品团相同。
聚新品
Q1:聚新品的报名入口在哪里? A:请填写好活动申报材料,包含:(营销详情方案PPT+活动的minisite页面+新品营销方案申请表)
报名至聚新品邮箱:juxinpin@service.taobao.com
Q2:哪些店铺可以报名聚新品?
A:目前仅对具有企业资质的店铺开放。
Q3:聚新品是否必须要预热?
A:预热流程及时间是由商家根据活动需要自由选择的。
Q4:聚新品是否需要10条销售记录? A:首发新品不需要最低10条销售记录。
Q5:聚新品是否需要竞价排期? A:暂不需要参与竞价排期。
Q6:聚新品是否有疲劳期?与商品团报名的商品间是否有疲劳期?
A:聚新品活动每个品牌每个月只能做一次活动 ,与商品团跨平台间隔疲劳期为前后5天。
Q7:聚新品的报名时间需要提前多久啊?
A:方案提报工作建议提前至少60天,聚划算提前45天排期 举例1:7月1日提报的方案,聚划算确认排期时间为7月16日 活动可排期时间为:9月1日起;
Q8:聚新品的发布费用可以抵扣吗?什么样的资源投入费用可以抵扣?可以抵扣多少额度?
A:聚划算将根据该活动在淘宝网硬广投入的费用,经过协议审核后1:1进行折抵,上限可抵扣聚划算新品发布会费用的50%(具体的优惠幅度最终以双方签约协议为准)。
Q9:什么样的商品不属于新品范畴
A: a、淘宝店铺及其它销售渠道(包含但不限于其它网购平台、商场、专卖店、超市等实体店铺)已有销售记录的商品。
b、报名商品与已上市商品品名相同,或款式、型号、成分等主要属性也相同的商品。
c、报名商品与已上市商品相比,仅改变了外包装或单个包装中的商品数量变化的商品。
d、同品牌商品 且名称相同,但规格不同或售价不同的商品。
Q10: 如果审核过程中发现商家未按新品招商规则提报新品,需要承担的违约责任有哪些呢?
A:如发现卖家有以下情形,则聚划算将根据聚划算规则、天猫规则或淘宝网规则及卖家签署的相关协议给予停止活动、中止合作、扣分等处罚;
(1)卖家报名商品在淘宝网(含天猫)已有销售记录。
(2)卖家报名商品与已上市商品不仅品牌相同,并且款式、型号、成分等主要属性也相同。
(3)卖家报名商品与已上市商品相比,仅改变了外包装或单个包装中的商品数量。 (4)卖家报名商品被国家机关、司法机构、仲裁机构判定并非新品。
(5)卖家报名后,因自身原因无法按时参加聚划算新品首发活动。商家自身原因包括但不限于:甲方自行放弃、商品质量或权利问题、备货不足、未及时支付技术服务费、未及时冻结商品保证金、因违反淘宝网(包括天猫、聚划算)规则或协议而被处罚等。
Q11. 新品什么时候可以上架?
A:新品因不允许提前售卖,因此需设置定时上架,一般在开团前1-5分钟设置上架即可。
Q12. 新品minisite页面上的商品要求全部是要新品吗?
A: 是的,页面上所有商品必须是新品,末在任何渠道(含线上线下)进行销售的,不能有任何店铺销售记录的商品。
Q13. Minisite页面上的商品数量有什么要求?
A: 页面上的商品数量可依活动由品牌自选决定(举例:可以为1款或2款或10款),上限设置数量为10款,10款商品必须全都是新品且开团时才可售卖(包含主团1-3款)。
Q14. Minisite页面上的活动链接有什么要求?
A:活动页面上的链接必须链至聚划算开团当天的detail页面,不允许有任何外链。
第二篇:JAVA课程设计
JAVA程序设计课程设计报告
目 录
一、 项目背景及意义: ............................................... 2
二、 系统描述 ............................................................... 2
三、 分析与设计 ........................................................... 3 1. 分析 ....................................................................... 3 2. 功能模块划分 ....................................................... 3 3. 功能模块流程图 ................................................... 5 4. 各模块的关键代码 ............................................... 5
四、 系统测试 ............................................................... 5
五、 课程设计进度 ..................................................... 13
六、 心得体会 ............................................................. 13
七、 参考文献 ............................................................. 14
八、 附录 ..................................................................... 14
一、 项目背景及意义:
记事本千百年来都在人类的工作生活中起到重要的作用,计算机革命电子产品未出现之前,人们的记事都是基于纸质加笔两者的简单记事,也即单纯的文本记录。直到计算机的出现和更新换代,高科技电子产品大行其道,人们日益将在纸质上的记事转移到将事件记录在个人电子设备如PC上,现在基于电子移动设备如手机和平板等的记事本app开发更是迅猛,功能更加丰富多彩,能记录的不单纯是文本了,人们能将声音和图片甚至视频结合起来,将一件事“有声有色”地记录下来,保存在个人电子设备产品中。近年来产生的采用云存储技术的“云笔记”,更是能让人们随时随地将集文本、语音、图像和视频于一体的事件记录保存在所谓的“云端”,能同步到个人其他设备中,解决了个人资料和信息跨平台跨地点的管理问题。
现在我们以有限的资源以及智慧力量,用Java语言编写一个可以在装有jar模拟器的个人电子移动设备上使用的简单记事本软件,没视频记录功能和基于网络功能但却能集文本、声音和图像于一起记录的功能的记事本,我们将轻便和简洁走向极致!所以此记事本软件操作起来简单易上手,能给带来同学简单便捷的记事体验。另外,这不单纯是个人人都可以打开的记事本,使用时需要账号密码登陆,因此能较好地保障个人隐私。
二、 系统描述
Java的前身是Oak,它一开始只是被应用于消费性电子产品中。后来它的开发者们发现它还可以被用于更大范围的Internet上。1995年,Java语言的名字从Oak编程了Java。1997年J2SE1.1发布。1998年J2SE1.2发布,
2 标志Java2的诞生。十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。Java的体系结构由Java语言、Java class、Java API、Java虚拟机组成。它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。Java的平台标准有Java ME,Java SE和Java EE。Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit 简称JDK是大多开发工具的基础。以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。
在本程序设计中,因为需要开发的是记事本程序,规模较小,内容较少,所以选择了适合初学者使用的eclipse开发工具。
三、 分析与设计
1. 分析
现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed, xint 。功能也是应有尽有,有能改变字体的,有能改变文字颜色的。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的笔记本程序。 2. 功能模块划分
程序构建的记事本程序具有Windows系统记事本工具基本功能,并且能够创
3 建多个不同的用户和保存图片功能。以下是具体说明: 第一部 登陆界面
(1) 用户名和密码输入文本框,供已注册的用户输入用户名和密码。 (2) 登陆控件,在用户名和密码正确的前提下,进入软件主界面。
(3) 注册控件,点击此按钮,将进入用户创建,创建之后用户名和密码会自动保存在电脑的相应文件中。 第一部分 菜单栏
(1)菜单中有“新健”,“删除”,“显示”,“菜单”,“帮助”五个主菜单。 (2)“新建”有“新建笔记”“新建笔记本”二个子菜单:分别用于创建新的笔记和新的笔记本。
(3)“删除”中有“删除笔记”和“删除笔记本”二个子菜单,和“新建”相对应。
(4)“显示”中可以选择界面的风格,有Metal风格、Windows风格、Motif风格、Nimbus风格;还有界面排版的选择,可以选择水平显示或垂直显示。 (5)“帮助”菜单中有关于笔记本程序的说明,作者等信息。 第二部分 笔记本排列区
显示用户创建的所有笔记本。 第三部分 笔记显示排列区
此处主要显示选中笔记本中的所有笔记,并且可以在此区右击来创建、删除笔记、查看笔记,当然也可以在菜单栏中的“新建”和“删除”菜单中创建和删除笔记。
第四部分 笔记编辑区
此部分为用户设计选择操作和右键操作,可以在笔记中插入图片、更改字体颜色、和插入时间;方便用户进行一系列的编辑操作,增强本记笔记本的用户体验性能。
4 3. 功能模块流程图
4. 各模块的关键代码
1构造函数创建窗口界面 主菜单,子菜单
public MainFrame(String name) {
this.name=name;
this.setUser_path("Users/"+name);
this.setBook_Path(this.getUser_path()+"/默认笔记本");
this.setNote_Path(this.getBook_Path()+"/默认笔记"); //
一、菜单界面
menu=new Menu(this);
/**
二、 创建三个JPanel *1.l笔记正文 TextPanel
*2.笔记名目录及查找方式 DirectoryPanel *3.笔记类型目录及排序方式选择 NoteTypePane */
/*笔记正文部分*******/ TextPanel=new JPanel(); rightPanel=new RightPanel(TextPanel,this);
} /*文件名目录部分******/
DirectoryPanel=new JPanel(); midPanel =new MidPanel(DirectoryPanel,this); /*笔记类型目录部分*****/
NoteTypePanel =new JPanel(); leftPanel=new LeftPanle(NoteTypePanel,this); leftPanel.update_Left_view();
//
三、处理拆分窗格
splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true); splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M);
//
四、设置标题等
this.setTitle(name+" 的笔记本"); this.setLocation(200,100); this.setSize(1000,600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); 2 添加右键菜单并为其添加监听器
public RightPanel(JPanel panel,MainFrame mainFrame)
{ this.mainFrame=mainFrame; this.panel=panel;
//创建一个 文本域存放文字 JTextArea textPane =new JTextPane(); //设置自动换行
textPane.setFont(new Font("", 1, 12)); jsp_Pane=new JScrollPane(textPane);//滚轮
//设置鼠标右击弹框效果
//cut
cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png"));
cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x"
cutItem.addActionListener(this);
//copy
copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png"));
copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置
6 快捷键 "ctrl O"
copyItem.addActionListener(this);
//paste
pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png"));
pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v"
pasteItem.addActionListener(this);
saveItem=new JMenuItem("Save",new ImageIcon("image/save.png"));
saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s"));
saveItem.addActionListener(this);
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="Cut"){//剪切
textPane.cut(); }else if(e.getActionCommand()=="Copy"){//复制
textPane.copy(); }else if(e.getActionCommand()=="Paste"){//粘贴
textPane.paste(); }else if(e.getActionCommand()=="Save"){//保存
this.book_Save(); }else if(e.getSource()==image_Button){//插入图片
String temp=Tools.open_Choose(); if(!temp.equals("not")){
textPane.insertIcon(new ImageIcon(temp)); }
}else if(e.getSource()==font_Button){//修改字体颜色
Color c=JColorChooser.showDialog(this, "Color", Color.black); textPane.setForeground(c); }else if(e.getSource()==timeButton){//插入时间
Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式
String hehe = dateFormat.format( now );
textPane.replaceSelection(hehe);
}
3 设为Document类型
public static void setDocument(File file) {
try {
} JTextPane tempPane=new JTextPane(); FileOutputStream outputStream=new FileOutputStream(file); ObjectOutputStream oos=new ObjectOutputStream(outputStream); oos.writeObject(tempPane.getDocument());
oos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block
e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace(); } 系统测试
1、笔记本登陆
2 、用户注册
3、菜单栏 a.总菜单
b.新建菜单
8
c.删除菜单
d.显示菜单
e.“菜单”菜单
f.帮助
10 4.导入笔记、导出笔记、及插入图片选择
5.字体颜色选择
6.插入时间
7、插入图片
四、 课程设计进度
我们进行了若干阶段的部署,令课题研究可以在每个阶段有条不紊地进行。具体如下:
(一)理论学习和开题论证
1.浏览相关网站,查阅与课题研究的相关理论、研究方法; 2.运用文献研究法,深入学习java理论,对要有关课题研究的知识进行理论上的研究和探讨。 3,制订研究计划和方案 。
(二)第一阶段
1.以调查法为主开展研究。(1)对有关java的课题设计进行调查,查阅网络上java应用的设计案例,并分析和总结,寻找思路。(2)对更新频率快的java应用进行追踪,采取观察,评价、讨论的方式分析和总结。
2.制订第二阶段实验方案,为下阶段实验做准备。
(三)第二阶段
1.按计划在继续第一阶段实验的基础上,进一步加强java应用的实施和研究。采用实验法对上一阶段的总结的结论进行验证和拓展。
2.让同学体验一下我们初步完成的作品,根据他们用完之后的感受,进一步修正作品存在的问题,完善作品。
(四),总结阶段
1.收集和整理研究资料,参照相关书籍分析和研究实验情况 2.制订总结阶段计划 3.总结和提炼研究成果 4.全面总结实验工作 5.解题论证
6.成果展示(课题报告) (五) 总结阶段(2013.12) 整理材料,撰写课题报告。
五、 心得体会
此次课程设计由我们小组一起共同合作完成,花费了差不多两个月的时间。在这期间我们共同协作,互帮互助取得了很好的效率,也为我们构建友好的同学关系,学习气氛良好做出了一定的贡献。在这期间我领略到了团队协作的重要性, 13 也看到了团队合作的高效率性。还有通过这次试验我们领悟到了团队的力量是巨大的,也学习到的一些学习方法,比如追查API,如何在短时间内学习一个自己不懂的东西那就是利用好所有的搜索引擎,多去图书馆找资料。总之此次课程设计我们不仅长了学科知识,在生活上我也长了见识。
六、 参考文献
a.黄晓东 等编著 Java课程设计案例精编(第二版)[M].北京:中国水利水电出版社,2007 b.李兴华 等编著 Java开发实战经典Java开发实战经典 北京:清华大学出版社,2009 C.李尊朝 苏军 Java程序设计(第二版) 图形用户界面设计、Swing组件 中国铁道出版社,2007
七、 附录
1.程序结构
14 2.程序
(1)Tools.java package common;
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream;
import javax.swing.*;
public class Tools {
/**打开选择框 返回详细地址*/ public static String open_Choose() {
JFileChooser jfc1=new JFileChooser();
jfc1.setDialogTitle("请选择...");
int judge=jfc1.showOpenDialog(null);
jfc1.setVisible(true);
//得到文件的完全路径
if(judge==JFileChooser.APPROVE_OPTION)
return (jfc1.getSelectedFile().getAbsolutePath());
else
return "not"; } /**保存选择框 返回详细地址*/ public static String save_Choose() {
JFileChooser jfc1=new JFileChooser();
jfc1.setDialogTitle("请选择...");
int judge=jfc1.showSaveDialog(null);
jfc1.setVisible(true);
//得到文件的完全路径
if(judge==JFileChooser.APPROVE_OPTION)
return (jfc1.getSelectedFile().getAbsolutePath());
else
return "not";
}
/**显示对话框,需要传递 标题和显示内容*/ public static void showMessage(String text,String title)
15 {
JOptionPane.showMessageDialog(null,text,title,
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); } /**新建笔记时将笔记设为Document类型,方便存储图片,在本地不能打开*/ public static void setDocument(File file) {
try {
JTextPane tempPane=new JTextPane();
FileOutputStream outputStream=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(outputStream);
oos.writeObject(tempPane.getDocument());
oos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /**删除文件 传一个文件地址 返回一个boolean 为了方便删除文件夹才将此方法提取出来*/ public static boolean deleteFile(String path) {
File file=new File(path);
return (file.delete()); }
/**删除文件 传一个文件地址
返回一个boolean 先删除里面的文件再删除文件夹*/ public static boolean deleteFolder(String path) {
File folder=new File(path);
File[] list=folder.listFiles();
for(int i=0;i<list.length;i++)
deleteFile(path+"/"+list[i].getName());
return (folder.delete()); } }
(2)User.java package common; /**
16 * 处理用户属性
* 为用户创建自己的专有途径
* 如果有了则不创建
*/ import java.io.*;
import javax.swing.JTextPane; import javax.swing.text.Document;
import view.MainFrame;
public class User {
public User(String name)
{
//如果第一次登录的话,为用户新建一个专属区
File file=new File("Users/"+name);
if(!file.exists())
{
try {
file.mkdir();
} catch (Exception e1) {
e1.printStackTrace();
}
//第一次登录创建默认笔记本
File book=new File("Users/"+name+"/默认笔记本");
try {
book.mkdir();
} catch (Exception e1) {
e1.printStackTrace();
}
//第一次登录创建默认笔记
File note=new File("Users/"+name+"/默认笔记本"+"/默认笔记.ser");
try {
note.createNewFile();
Tools.setDocument(note);
} catch (Exception e1) {
e1.printStackTrace();
}
}
//构造完毕
正式进入笔记本
new MainFrame(name);
}
}
(3)login_zhuce.java package login;
import java.awt.*; import java.awt.event.*; import java.io.*;
import javax.swing.*;
import common.User; import view.MainFrame;
public class login_zhuce extends JFrame implements ActionListener {
JPanel jp0; JPanel jp1,jp2,jp3,jp4,jp5; JTextField jtf; JPasswordField jpf; JLabel jl1,jl2,jl3; JButton jb1,jb2,jb3; ImageIcon bg;
public static void main(String[] args) {
// TODO Auto-generated method stub
login_zhuce lz = new login_zhuce(); }
public login_zhuce(){
try {//默认 NImbus风格
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); }
jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jp1.setOpaque(false); jp2.setOpaque(false); jp3.setOpaque(false); jp4.setOpaque(false);
//no.1 jl1 = new JLabel("用户名"); jtf = new JTextField(10); jp1.add(jl1); jp1.add(jtf);
//no.2 jl2 = new JLabel("密
码"); jpf = new JPasswordField(10); jp2.add(jl2); jp2.add(jpf); //3 jb1 = new JButton("登陆"); jb1.addActionListener(this); jb1.setActionCommand("denglu"); jb2 = new JButton("取消"); jb2.addActionListener(this); jb2.setActionCommand("quxiao"); jb3 = new JButton("注册"); jb3.addActionListener(this); jb3.setActionCommand("zhuce");
jp3.add(jb1);
jp3.add(jb2);
jp3.add(jb3);
this.setLayout(new GridLayout(4,1));
this.add(jp4);
this.add(jp1);
this.add(jp2);
this.add(jp3);
bg = new ImageIcon("image//huashi.jpg");
jl3 = new JLabel(bg);
jl3.setBounds(0, 0, 300, 200);
this.getLayeredPane().add(jl3,new Integer(Integer.MIN_VALUE));
jp5 = (JPanel)this.getContentPane();
jp5.setOpaque(false); //设置透明
this.setTitle("笔记本登陆");
this.setSize(300,200);
// 获取屏幕分辨率,以此设置程序出现在屏幕中央
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension testSize = getSize();
this.setLocation((screenSize.widthtestSize.width) / 2, (screenSize.height - testSize.height) / 2); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
24
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("queding")){
String st1 = "ff";
String st2 = ".txt";
String st3 = this.jtf1.getText();
String st4 = st1 + st3 +st2 ;
System.out.println(st4);
File f = new File(st4);
if(!f.exists()){
String password1=new String(jtf2.getPassword());
String password2=new String(jtf3.getPassword());
System.out.println(password1);
System.out.println(password2);
if (!(password1.equals(password2))){
JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
this.jtf2.setText(null);
this.jtf3.setText(null);
}
else {
try {
f.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(st4,true);
bw = new BufferedWriter(fw);
bw.write(st3+"");
bw.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally{
try {
fw.close();
} catch (IOException e1) {
25
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
try {
fw = new FileWriter(st4,true);
bw = new BufferedWriter(fw);
bw.write(this.jtf2.getPassword());
bw.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally{
try {
fw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
JOptionPane.showMessageDialog(null, "创建账户成功", "恭喜你",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
this.dispose();
login_zhuce lz = new login_zhuce();
}
}
else {
JOptionPane.showMessageDialog(null,"该用户名已被占用,请重新输入用户名","错误提示",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
System.out.println("该用户名已被占用,请重新输入用户名");
this.jtf1.setText(null);
} //
if (this.jpf1.getText()!=this.jpf2.getText()){ //
JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示", //
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); //
this.jpf1.setText(null); //
this.jpf2.setText(null); //
}
}
26
else if(e.getActionCommand().equals("quxiao")){
this.dispose();
System.exit(0);
} } }
(5)LefgPanle.java package view; /** * 将卡片布局修改 修改成仅有两片
* 第一片 所有笔记 按钮
* 第二片 所有笔记 目录
*/ import java.awt.*; import java.awt.event.*; import java.io.*;
import javax.swing.*;
public class LeftPanle extends JPanel implements ActionListener,MouseListener{
/**************笔记本类型部分声明*****************/ CardLayout cardLayout;//卡片布局的方式
JPanel firstPanel,secondPanel;//分别存储两片
//第一片声明
JPanel allBookPanel,firstTempPanel;//所有笔记
JButton allBook;//所以笔记,排序,回收站的按钮
JScrollPane allBookjsp; //第二片声明
JPanel secondTempPanel,timePaenl_o; JButton allBook_o;//所以笔记,排序,回收站的按钮
JScrollPane timePaenljsp_o;
//处理文件部分内容
File book; String [] book_name; JLabel[] member;
JPanel panel; MainFrame mainFrame; public final int TOTAL=20;
/**************笔记本类型部分声明结束*****************/
27
public LeftPanle(JPanel panel,MainFrame mainFrame) { this.mainFrame=mainFrame; this.panel=panel; //处理第一片11111111111111111111111111 //设置初始界面 显示 所以笔记,排序,回收站的按钮
//ImageIcon imageIcon=new ImageIcon("image/note.png"); allBook=new JButton("所有笔记",new ImageIcon("image/expand.png")); allBook.addActionListener(this);//点击按时间排序时显示第二片
allBookPanel=new JPanel(new GridLayout(TOTAL,1,1,4)); member=new JLabel[TOTAL]; for(int i=0;i<TOTAL;i++) {
member[i]=new JLabel("");
member[i].addMouseListener(this); }
allBookjsp=new JScrollPane(allBookPanel);//滚动
firstPanel=new JPanel(new BorderLayout());//将第一片设置为边界布局
firstPanel.add(allBook,"North"); firstPanel.add(allBookjsp);
//处理第二片222222222222222222222 //仅有一个按钮
allBook_o=new JButton("所有笔记",new ImageIcon("image/collapse.png")); allBook_o.addActionListener(this);//点击所有笔记时 显示第一片
secondPanel=new JPanel(new BorderLayout());//将第二片设为 边界布局
secondPanel.add(allBook_o,"North");
//进行卡片布局
cardLayout=new CardLayout(); panel.setLayout(cardLayout); panel.add(firstPanel,"1"); panel.add(secondPanel,"2");
} //更新leftPanel中的笔记本,在新建或删除笔记本是需要刷新
并附带刷新右边两个
28 Panel public void update_Left_view() {
book=new File(mainFrame.getUser_path());
book_name=book.list();
if(book.exists())
{
for(int i=0;i<TOTAL;i++)
{
member[i].setText("");
member[i].setIcon(null);
member[i].removeMouseListener(this);
}
for(int i=0;i<book_name.length;i++)
{
//为每个好友设置头像和名字,每一个好友用 JLabel组件 存放
ImageIcon imageIcon=new ImageIcon("image/note.png");
member[i].setText(book_name[i]);
member[i].setIcon(imageIcon);
member[i].addMouseListener(this);//为每一种笔记的排序方式注册监听
allBookPanel.add(member[i],i);//将笔记添加到所有笔记面板
}
mainFrame.setBook_Path(mainFrame.getUser_path()+"/"+book_name[0]);
mainFrame.midPanel.update_Mid_View();
} }
@Override public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
//将选中部分字体设为红色
JLabel jl = null;
for(int i=0;i<book_name.length;i++)
{
if(e.getComponent().equals(member[i]))
{
jl=(JLabel)e.getSource();
jl.setForeground(Color.red);
}
else
{
member[i].setForeground(Color.black);
29
// //
// //
}
} //保存当前笔记本的路径 如 ... mainFrame.setBook_Path(book.getAbsolutePath()+""+jl.getText()); //点击打开一个笔记本
刷新中间的目录
mainFrame.midPanel.update_Mid_View();
} @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub
} @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub
} @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.red); //jl.setFont(new Font("",1,30)); //在笔记本界面操作 允许删除笔记本 不允许删除笔记
mainFrame.menu.delete_item[0].setEnabled(false);//不允许删除笔记
mainFrame.menu.delete_item[1].setEnabled(true);//允许删除笔记本 } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.black); //jl.setFont(new Font("",1,12)); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==allBook) {
//cardLayout.show(this.getContentPane(), "2");
cardLayout.next(panel); }else if(e.getSource()==allBook_o){
30
//cardLayout.show(this.getContentPane(), "1");
cardLayout.next(panel);
} }
}
(6)MainFrame.java package view; /** * 笔记本 java版
*
1、将主界面分为四块 北边的菜单 以及左中右的笔记本目录,笔记目录和笔记内容
*
2、左边目录为卡片布局,实现点了"所有笔记"弹出所有笔记的效果
*
3、中间显示笔记目录 采用网格布局 每个网格用了JMenuItem *
4、右边是一个JTextArea可能会改成JTextPane *
5、实现了新建删除笔记(本),但界面刷新有点问题 (会重叠)
*
6、采用MVC的思想实现时事刷新界面的效果
*
7、鼠标右击删除新建 测试成功(鼠标右击是笔记本的新建与删除没有)
*
8、注册登录系统 已测试成功 在包login里面
*
9、图片的问题已成功解决
*
10、可以更改字体颜色(大小没有写),以及插入时间等
*
11、显示处添加实现多种版本的切换(如可切换成windows)
*/
import java.awt.*; import java.awt.event.*; import javax.swing.*;
import common.User;
public class MainFrame extends JFrame implements ActionListener{
Menu menu;//连接菜单栏
JPanel NoteTypePanel,DirectoryPanel,TextPanel;//三个大Panel JSplitPane splitM_R,splitL_M;
LeftPanle leftPanel;//左边第一个Panel MidPanel midPanel;//连接中间Panel RightPanel rightPanel;//连接右边Panel
//存放路径
31 public String name=null; public String user_path=null; public String book_Path=null; public String note_Path=null;
public MainFrame(String name) {
this.name=name;
this.setUser_path("Users/"+name);
this.setBook_Path(this.getUser_path()+"/默认笔记本");
this.setNote_Path(this.getBook_Path()+"/默认笔记");
//
一、菜单界面
menu=new Menu(this);
/**
二、 创建三个JPanel
*1.l笔记正文 TextPanel
*2.笔记名目录及查找方式
DirectoryPanel
*3.笔记类型目录及排序方式选择
NoteTypePane
*/
/*笔记正文部分*******/
TextPanel=new JPanel();
rightPanel=new RightPanel(TextPanel,this);
/*文件名目录部分******/
DirectoryPanel=new JPanel();
midPanel =new MidPanel(DirectoryPanel,this);
/*笔记类型目录部分*****/
NoteTypePanel =new JPanel();
leftPanel=new LeftPanle(NoteTypePanel,this);
leftPanel.update_Left_view();
//
三、处理拆分窗格
splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel);
splitM_R.setOneTouchExpandable(true);
splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R);
splitL_M.setOneTouchExpandable(true);
this.add(splitL_M);
//
四、设置标题等
this.setTitle(name+" 的笔记本");
this.setLocation(200,100);
this.setSize(1000,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
32
} this.setVisible(true); } //为了方便后面的垂直和水平显示 public void showStyle(int show) { this.remove(splitL_M);//先把以前的去掉重新添加
splitM_R =new JSplitPane(show,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true);
splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M); this.setVisible(true); }
@Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub }
public String getUser_path() { return user_path; } public void setUser_path(String user_path) { this.user_path = user_path; } public String getBook_Path() { return book_Path; } public void setBook_Path(String book_Path) { this.book_Path = book_Path; } public String getNote_Path() { return note_Path; } public void setNote_Path(String note_Path) { this.note_Path = note_Path; }
33
(7) package view;
import java.awt.*; import java.awt.event.*; import java.io.*;
import javax.swing.*; import javax.swing.text.Document; import javax.swing.text.StyledDocument;
import common.Tools; import common.User; import login.login_zhuce;
public class Menu extends JFrame implements ActionListener{
//菜单部分声明
JMenuBar menuBar=null;//菜单主干
JMenu newNote_menu,deliteNote_menu,show_menu,menu_menu,help_menu;//菜单组件
树干
//处理新建笔记菜单 newNote_menu JMenuItem[] newNote_item={
new JMenuItem("新建笔记"),
new JMenuItem("新建笔记本")
}; //处理删除deliteNote_menu JMenuItem[] delete_item={
new JMenuItem("删除笔记"),
new JMenuItem("删除笔记本")
};
//处理显示
JMenuItem[] show_item={
new JMenuItem("Metal风格"),
new JMenuItem("Windows风格"),
new JMenuItem("Motif风格"),
new JMenuItem("Nimbus风格"),
new JMenuItem("水平显示"),
new JMenuItem("垂直显示")
};
//处理menu_menu JMenuItem[] menu_item={
new JMenuItem("丨账户"),
new JMenuItem("丨导入"),
34
new JMenuItem("丨导出"),
new JMenuItem("丨注销"),
new JMenuItem("丨退出")
};
//处理help_menu JMenuItem[] help_item={
new JMenuItem("关于作者"),
new JMenuItem("关于笔记本") };
MainFrame mainFrame;
public Menu(MainFrame mainFrame) { this.mainFrame=mainFrame; //
一、先处理菜单
menuBar=new JMenuBar(); //各菜单menu[0]menu[1]menu[2]menu[3]menu[4] newNote_menu=new JMenu("新建"); deliteNote_menu=new JMenu("删除"); deliteNote_menu.setToolTipText("选中笔记(本)时才可删除"); show_menu=new JMenu("显示"); help_menu=new JMenu("帮助"); menu_menu=new JMenu("菜单");
//将菜单项添加到各菜单
for(int i=0;i<newNote_item.length;i++)//新建笔记
菜单
newNote_menu.add(newNote_item[i]); for(int i=0;i<delete_item.length;i++)//删除笔记 菜单
deliteNote_menu.add(delete_item[i]); for(int i=0;i<show_item.length;i++)//显示菜单
show_menu.add(show_item[i]); for(int i=0;i<help_item.length;i++)//帮助菜单
help_menu.add(help_item[i]); for(int i=0;i<menu_item.length;i++)//菜单 菜单
{
menu_menu.add(menu_item[i]);
if(i==0||i==2)//添加分隔线 将导入和导出框起来
menu_menu.addSeparator(); }
35
//添加事件监听
for(int i=0;i<newNote_item.length;i++)//为新建笔记注册监听
newNote_item[i].addActionListener(this);
for(int i=0;i<delete_item.length;i++)//为删除笔记注册监听
delete_item[i].addActionListener(this);
for(int i=0;i<show_item.length;i++)//为帮助注册监听
show_item[i].addActionListener(this);
for(int i=0;i<help_item.length;i++)//为帮助注册监听
help_item[i].addActionListener(this);
for(int i=0;i<menu_item.length;i++)//为菜单注册监听
menu_item[i].addActionListener(this);
//将菜单 添加到主干中
menuBar.add(newNote_menu);
menuBar.add(deliteNote_menu);
menuBar.add(show_menu);
menuBar.add(menu_menu);
menuBar.add(help_menu);
mainFrame.add(menuBar,"North");
} //构造完毕
//实现风格转换
private void changeFlavor(int flavor)throws Exception
{
switch(flavor)
{
case 1:
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
case 2:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case 3:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
case 4:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
break;
36
}
SwingUtilities.updateComponentTreeUI(this.getContentPane());
SwingUtilities.updateComponentTreeUI(mainFrame);
} //实现监听后的动作
@Override public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String str=e.getActionCommand();
if(str.equals("新建笔记")){
String note_name=null;
note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记",
JOptionPane.INFORMATION_MESSAGE |JOptionPane.OK_OPTION);
//如果用户点取消 或没有输入文件名
则不用新建
if(note_name!=null){
File file=new File(mainFrame.book_Path+"/"+note_name+".ser");
if(!file.exists())
{
try {
file.createNewFile();
//将新建的笔记格式设为Document对象
Tools.setDocument(file);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//刷新中间和左边的Panel
mainFrame.midPanel.update_Mid_View();
}
}
}else if(str.equals("新建笔记本")){
String book_name=null;
book_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
if(book_name!=null){
File file=new File(mainFrame.getUser_path()+"/"+book_name);
//System.out.println("User_path:"+mainFrame.getUser_path());
if(!file.exists())
{
try {
file.mkdir();
//将笔记本路径设为新建笔记本的路径
37 mainFrame.setBook_Path(mainFrame.getUser_path()+"/"+book_name);
mainFrame.leftPanel.update_Left_view();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//改变的笔记本总数
刷新左边Panel
mainFrame.leftPanel.update_Left_view();
}
}
}else if(str.equals("删除笔记")){
Tools.deleteFile(mainFrame.getNote_Path());
//删除笔记之后需要刷新右边的两个Panel
mainFrame.midPanel.update_Mid_View();
}else if(str.equals("删除笔记本")){
Tools.deleteFolder(mainFrame.book_Path);
//笔记本目录发生改变
mainFrame.leftPanel.update_Left_view();
}else if(str.equals("关于作者")){
Tools.showMessage("邓伟杰、苏俊钦、陈通、陈盛锋、林健祺、尹国瑜、温天宇、赵潮顺", "帮助");
}else if(str.equals("关于笔记本")){
Tools.showMessage("还存在许多BUG,望老师指正", "呵呵");
}else if(str.equals("丨账户")){
Tools.showMessage("姓名:"+mainFrame.name, "用户信息");
}else if(str.equals("丨导入")){//即打开一个笔记
String temp=Tools.open_Choose();
if(!temp.equals("not"))
{
FileInputStream inputStream=null;
ObjectInputStream ois=null;
try {
inputStream=new FileInputStream(Tools.open_Choose());
ois=new ObjectInputStream(inputStream);
mainFrame.rightPanel.textPane.setDocument((Document) ois.readObject());
mainFrame.rightPanel.book_Save();
} catch (Exception e1) {
// TODO Auto-generated catch block
38
e1.printStackTrace();
}finally{
try {
ois.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} } }else if(str.equals("丨导出")){//即另存为一个笔记
String temp=Tools.open_Choose(); if(!temp.equals("not")) {
FileOutputStream outputStream=null;
ObjectOutputStream oos=null;
try {
outputStream=new FileOutputStream(Tools.save_Choose());
oos=new ObjectOutputStream(outputStream);
oos.writeObject(mainFrame.rightPanel.textPane.getDocument());
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
try {
oos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} } }else if(str.equals("丨注销")){ mainFrame.dispose(); new login_zhuce();//注销之后重新登录 }else if(str.equals("丨退出")){ System.exit(0); }else if(str.equals("垂直显示")){ mainFrame.showStyle(0);//重新调用一下拆分窗格 }else if(str.equals("水平显示")){ mainFrame.showStyle(1); }else {
39
try{
if(str.equals("Metal风格")){
this.changeFlavor(1);
}else if(str.equals("Windows风格")){
this.changeFlavor(2);
}else if(str.equals("Motif风格")){
this.changeFlavor(3);
}else if(str.equals("Nimbus风格")){
this.changeFlavor(4);
}
}catch(Exception e1){
e1.printStackTrace();
}
}
}
}
(8)Midpanel.java package view;
import java.awt.*;
import javax.swing.*; import javax.swing.text.Document;
import common.Tools;
import java.awt.event.*; import java.io.*;
public class MidPanel extends JPanel
implements ActionListener,MouseListener{
JPanel panel; MainFrame mainFrame; /// JScrollPane jscroll2;
JMenuItem[] items; File lists[];
JPanel jp1;
40
//鼠标右击部分
JPopupMenu right_Click;
JMenuItem delete_book,properties_book,new_book;
public final int TOTAL=20; public String filename; public String temp_path=null;//右击时记录选中笔记的途径
public MidPanel(JPanel panel, MainFrame main) {
this.panel=panel;
this.mainFrame=main;
jp1=new JPanel();
jp1.setLayout(new GridLayout(TOTAL,1,1,4));
//初始化20个MenuItem
items =new JMenuItem[TOTAL];
for(int j=0;j<TOTAL;j++){
items[j]=new JMenuItem("");
items[j].addMouseListener(this);
}
//处理鼠标右击问题
right_Click=new JPopupMenu();
new_book=new JMenuItem("New");//新建笔记
delete_book=new JMenuItem("Delete"); //删除笔记
properties_book=new JMenuItem("Properties");
delete_book.addActionListener(this);
properties_book.addActionListener(this);
new_book.addActionListener(this);
//right_Click.
right_Click.add(new_book);
right_Click.addSeparator();
right_Click.add(delete_book);
right_Click.add(properties_book);
JLabel label=new JLabel("All Note & Note All ");
label.setEnabled(false);
label.setBackground(Color.gray);
41
jscroll2 = new JScrollPane(jp1);//为Panel添加滚动条
panel.setLayout(new BorderLayout());
panel.add(label,"North");
panel.add(jscroll2);
} //在新建或删除是需要刷新,并附带刷新
RightPanel中的内容
public void update_Mid_View()
{
File file = new File(mainFrame.getBook_Path());
if(file.isDirectory())
{
lists = file.listFiles();
for(int j=0;j<TOTAL;j++){
items[j].setText("");
items[j].setArmed(false);
items[j].removeMouseListener(this);//避免某个笔记被删除之后还可以被点的情况
}
for(int i=0;i<lists.length;i++){
items[i].setText(lists[i].getName());//创建20个JLanel
items[i].addActionListener(this);
items[i].addMouseListener(this);
jp1.add(items[i],i );
//在该项上右击弹出一个选择框
items[i].setComponentPopupMenu(right_Click);
}
//更新右边的Panel 里面应该没有内容
mainFrame.rightPanel.update_Right_view();
}
}
public void showfile(int y) {
String filename1 = lists[y].getAbsolutePath();
FileInputStream inputStream=null;
ObjectInputStream ois = null;
try {
inputStream=new FileInputStream(filename1);
ois=new ObjectInputStream(inputStream);
42
mainFrame.rightPanel.textPane.setDocument((Document)ois.readObject());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("New")){
String note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
//如果用户点了取消 则不用新建笔记
if(!note_name.equals("null")){
File file=new File(mainFrame.book_Path+"/"+note_name+".ser");
if(!file.exists())
{
try {
file.createNewFile();
//为新建的笔记写入一个空白的对象 避免打开时报指针的错误
Tools.setDocument(file);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//刷新中间和左边的Panel
mainFrame.midPanel.update_Mid_View();
}
}else if(e.getActionCommand().equals("Delete")){
File file=new File(this.getTemp_path());
file.delete();
//删除笔记之后需要刷新右边的两个Panel
43
mainFrame.midPanel.update_Mid_View(); }else if(e.getActionCommand().equals("Properties")){
Tools.showMessage(this.getTemp_path(),"笔记"); }else
{
mainFrame.rightPanel.textPane.setEditable(true);
mainFrame.setNote_Path(mainFrame.getBook_Path()+"/"+e.getActionCommand());
for (int x=0;x<lists.length;x++){
if (e.getActionCommand().endsWith(lists[x].getName()))
this.showfile(x);
} } }
@Override public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub //设置选中部分的情况
JMenuItem jmtemp=null; for(int i=0;i<lists.length;i++) {
if(arg0.getComponent().equals(items[i]))
{
jmtemp=(JMenuItem)arg0.getSource();
jmtemp.setArmed(true);
}else{
items[i].setArmed(false);
} }
//记录被要在右边显示出内容的笔记途径
可以在菜单中删除该笔记
mainFrame.setNote_Path(mainFrame.getBook_Path()+"/"+jmtemp.getText());
mainFrame.menu.delete_item[0].setEnabled(true);//允许删除笔记
mainFrame.menu.delete_item[1].setEnabled(false);//不允许删除笔记本 } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub
JMenuItem jm=(JMenuItem)arg0.getSource(); //将当前笔记的途径
存到辅助路径中
44
this.setTemp_path(mainFrame.getBook_Path()+"/"+jm.getText()); } @Override public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
JMenuItem jm=(JMenuItem)arg0.getSource();
//jm.setBackground(new Color(238,238,238)); } @Override public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
} @Override public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub }
public String getTemp_path() {
return temp_path; } public void setTemp_path(String temp_path) {
this.temp_path = temp_path; } }
(9) RightPanel.java package view; /** * 改用JTextPane实现图片即单个文字更改字体或颜色的功能
*/ import java.awt.*; import java.awt.event.*; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date;
import javax.swing.*; import javax.swing.text.Document;
import common.Tools;
45 public class RightPanel extends JPanel implements ActionListener{
JPanel panel;
MainFrame mainFrame;
//文本域
JTextPane textPane; JScrollPane jsp_Pane; //鼠标右击部分
JPopupMenu right_Click; JMenuItem cutItem,copyItem,pasteItem,saveItem; //插入图片与更改字体
JToolBar toolBar; JButton image_Button,font_Button,timeButton;
public RightPanel(JPanel panel,MainFrame mainFrame) {
this.mainFrame=mainFrame;
this.panel=panel;
//创建一个 文本域存放文字
JTextArea
textPane =new JTextPane();
//设置自动换行
textPane.setFont(new Font("", 1, 12));
jsp_Pane=new JScrollPane(textPane);//滚轮
//设置鼠标右击弹框效果
//cut
cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png"));
cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x"
cutItem.addActionListener(this);
//copy
copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png"));
copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl O"
copyItem.addActionListener(this);
//paste
pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png"));
pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v"
pasteItem.addActionListener(this);
saveItem=new JMenuItem("Save",new ImageIcon("image/save.png"));
saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s"));
saveItem.addActionListener(this);
//将各菜单项添加到 右击菜单组中
right_Click=new JPopupMenu();
//right_Click.
right_Click.add(cutItem);
46
right_Click.add(copyItem);
right_Click.add(pasteItem);
right_Click.addSeparator();
right_Click.add(saveItem);
//为右击注册监听
textPane.setComponentPopupMenu(right_Click);
//可以懂工具条部分
toolBar=new JToolBar("工具");
image_Button=new JButton("插入图片");
image_Button.addActionListener(this);
font_Button=new JButton("更改字体颜色");
font_Button.addActionListener(this);
timeButton = new JButton("插入时间");
timeButton.setToolTipText("点击可以插入当前时间");
timeButton.addActionListener(this);
toolBar.add(image_Button);
toolBar.add(font_Button);
toolBar.add(timeButton);
//将工具条和textPane添加到panel
panel.setLayout(new BorderLayout());
panel.add(toolBar,"North"); panel.add(jsp_Pane); } //更新文本框
在新建或删除
笔记或笔记本
的时候需要刷新 public void update_Right_view() { textPane.setText(""); textPane.setEditable(false); } //保存当前笔记
public void book_Save() { FileOutputStream outputStream=null; ObjectOutputStream oos=null; try {
outputStream=new FileOutputStream(mainFrame.getNote_Path());
oos=new ObjectOutputStream(outputStream);
oos.writeObject(textPane.getDocument()); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
47
}finally{
try {
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
@Override public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="Cut"){//剪切
textPane.cut();
}else if(e.getActionCommand()=="Copy"){//复制
textPane.copy();
}else if(e.getActionCommand()=="Paste"){//粘贴
textPane.paste();
}else if(e.getActionCommand()=="Save"){//保存
this.book_Save();
}else if(e.getSource()==image_Button){//插入图片
String temp=Tools.open_Choose();
if(!temp.equals("not")){
textPane.insertIcon(new ImageIcon(temp));
}
}else if(e.getSource()==font_Button){//修改字体颜色
Color c=JColorChooser.showDialog(this, "Color", Color.black);
textPane.setForeground(c);
}else if(e.getSource()==timeButton){//插入时间
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式
String hehe = dateFormat.format( now );
textPane.replaceSelection(hehe);
} } }
48
第三篇: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课程设计题目
一、Java语言课程设计目的和要求 1.目的:
1)复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;
2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力;
3)培养学生在项目开发中团队合作精神、创新意识及能力。
2.要求:
1、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;
2、系统设计要实用,编程简练,可用,功能全面
3、说明书、流程图要清楚
4、记录设计情况(备查,也为编写设计说明书作好准备);
5、要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。
6、设计上交内容:设计报告一组一份(按格式书写);心得体会每人一份;源程序文件。
二、Java课程设计选题如下:
1、编写一个记事本程序 要求:
用图形用户界面实现。
能实现编辑、保存、另存为、查找替换、统计各个单词的频率、字数统计、撤消上次操作、重做上次操作、剪切、粘贴、字体设置等功能。 提示:使用文件输入输出流。
2、模拟龟兔赛跑 要求:
用图形用户界面实现。
能设置比赛时间,马匹的数量等等。 在任意时间段内马匹的速度是随机的。 开始比赛之后以动画显示赛马过程。 提示:使用多线程
3、学生信息管理系统 要求:
使用图形用户界面
用数据库建立1或2个学生信息表。(不限使用哪种数据库) 能连接数据库并实现查询、增、删、改等功能。
4、图书信息管理系统 要求:
使用图形用户界面
用数据库建立1或2个图书信息表。(不限使用哪种数据库) 能连接数据库并实现查询、增、删、改等功能并能模拟真实图书馆实现书超期时的罚款功能。
5、聊天小程序 要求:
使用图形用户界面。
能实现一个聊天室中多人聊天。 可以两人私聊。
提示:使用socket通信
6、ATM柜员机模拟程序
要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
1、查询余额:初始余额为10000元
2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
3、ATM存款:不能出现负存款,存款金额也为100的倍数,一次最多10000元。
4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
7、超市收银系统
要求:使用图形用户界面。
由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从数据库中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。 另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满200元,可为其发放一张会员卡,以后在该商场购物可享9折优惠。
若一年内购物次数小于2次,则会员卡失效,若一年内购物总金额多于1000元,以后购物可享受8.5折优惠。
8、万年历 要求: 使用图形用户界面。 实现日期与星期的查询
9、网络监听程序 要求:
使用图形用户界面。
有服务器和客户端,服务器监听客户端的登陆。即:如果A客户端登陆服务器,则服务器界面上的A字母对应的红灯变成绿色。 绿灯表示连接,红灯表示断线。 提示:socket的监听方法
10、全球通计费程序 要求:
使用图形用户界面。
使用真实的全球通资费标准,模拟统计一个特定号码的一个月的实时话费。 能根据输入实现各种用户的话费的计算并显示月实时帐单。
提示:使用接口和多个子类实现分别表示金卡、银卡等各种套餐的话费计算。 扩展:可根据实际话费要求得出其最优套餐选择。
11.日历记事本
要求:带有日程提醒功能的日历。
1、显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。
2、定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。
3、查询信息:用户可以查询到某个月的所有的提示信息。
12.电子英汉词典 要求:
能够编辑词典库中的信息 能够实现英译汉,汉译英。(要考虑一词多义)
13.加密与解密
要求:采用图形用户界面
1、给定任意一个文本文件,进行加密,生成另一个文件。
2、对加密后的文件还原。
14.小游戏 要求:。
程序随机产生20—50根火柴,由人与计算机轮流拿,每次拿的数量不超过3根,拿到最后一根为胜。(使用图形界面)
15.敏感词汇分析 要求: 任意选择一个文本文件,分析该文件,如果存在敏感词汇(这些词汇保存在sentive.txt文件中,每个词占一行),报告每个词出现的次数。
16、猜数字游戏
要求:计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间、次数和评语。
17、小学算术运算测试程序
要求:制作一个可供小学数学运算程序:10以内加减法,能根据输入题数出题,判断做题是否正确,最后计算分数。
18、模拟科学计算器
要求:界面模拟Windows中的计算器程序。
实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。 实现要点:添加相关组件并进行按钮事件处理。
19、模拟画图
要求:模拟Windows中的画图程序,实现图形图像的编辑、修改、保存、撤消等功能。
20、模拟时钟
要求:通过多线程技术,重绘界面,界面包括表盘和指针。并用数字表显示时间。 实现要点:多线程技术,图形的绘制。
21、打字训练测试软件
要求:设计一个英文打字测试软件。从文件中调入英文录入材料,最后可以给出错误率,平均录入速度。
22、ip地址、手机归属地查询 实现要点:数据库查询。
23、电话号码查询系统。
要求:有电话录入,修改,增加,删除,按姓名查询,按电话号码查询,按部门查询,按部门显示,显示所有电话号码信息,打印等功能。
24、标准化考试
功能要求:程序从文件系统(或数据库)中读入考试题目(主要为选择题)及答案,显示在GUI界面中,答题者按照题目内容进行答题,点击按钮提交后可以看到自己的答题结果。 界面要求:图形界面实现。
25、图形图像处理
功能要求:能够完成图形图像的变形的纠正,可使用opencv或其他类似图形库来完成。 界面要求:图形界面实现
26、语音朗读 功能要求:读入一段文本文件,将其用语音的方式朗读出来。 界面要求:图形界面实现
27、SVG显示程序
功能要求:使用Java完成SVG图形图像的显示,修改,保存功能。 界面要求:图形界面实现
三、设计时间
一周,具体安排如下: 第一阶段:
1.班级分组,选定课题,查阅相关资料
1周 2.划分模块、小组成员分工,编制源程序
1-2周
第二阶段:上机调试,修改、完善系统
一周 第三阶段:撰写、上交课程设计说明书(1份/人),上交课程设计作品源程序(每课题组一份),作品答辩。
1天
四、设计方式和安排
1.分组选题:最多5人为一组,每组一个课题(可根据课题工作量大小,合理分配人数),每组设组长一名,负责该组设计工作的协调、分工等。 2.设计过程:
1) 分析设计准备阶段(按组讨论、对系统功能进行分析,确定算法,并进行明确分工); 2) 编程调试阶段(绘制流程图,编制源程序;上机调试,修改程序) 3) 总结报告和书写说明书阶段(撰写上交相关资料)
3、考核过程
17周周五下午答辩。
五、考核内容和方式
1、在设计期间,学生要按时上机,设计结束根据记录的设计材料整理成设计说明书。设计说明书中应写下设计中的主要收获,要求对问题有一定的分析,文字简短明确流畅。
2、通过设计答辩方式,并结合学生的动手能力,独立分析解决问题的能力和创新精神,设计成绩由指导教师根据考勤、设计说明书质量、答辩表现以及学习态度按五级分制综合评定。 成绩分优、良、中、及格和不及格五等。
六、课程设计报告格式及要求
一、封面;
二、目录;
三、设计任务书;
四、本组课题及本人任务;
五、程序功能简介;
六、主体内容(简要说明总体情况,详细介绍本人任务部分): 1.设计分析;
2.程序结构(画流程图) 3.各模块的功能及程序说明; 4. 源程序;
5.操作方法(流程);(可省) 6.试验结果(包括输入数据和输出结果) 7.设计体会。(可省)
格式要求见山东交通学院毕业设计文件。
第五篇:Java语言课程设计
设计目的:
1、复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;
2、课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力;
3、培养学生在项目开发中团队合作精神、创新意识及能力。
设计要求:
1、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;
2、标识符命名遵循Java命名规范,代码多加注释;
3、注意各种可能遇到的异常处理,注重提高程序运行效率;
4、系统设计要实用,编程简练,可用,功能全面;
5、尽量使用图形界面实现,要符合日常软件使用规范来设计菜单和界面。
6、 说明书、流程图要清楚;
7、记录设计情况(备查,也为编写设计说明书作好准备);
8、 要求采用模块化程序设计方法,及锯齿型书写格式(缩进格式),要求上机调试通过和按设计报告格式;
9、上交课程设计软件代码、课程设计报告交老师保存。另外要用A4打印一份上交。
设计时间:
2012年-2013年第一学期 第10周
设计方式和安排:
设计方式:学院实验室上机
安排:布置题目;中期检查;验收
考核内容和方式: 课程设计结束时,要求学生写出课程设计报告(附源程序),可运行的软件系统;
课程设计成绩分两部分,设计报告占30%,设计作品占70%。按照优秀、良好、中、及格,不及格五级给予成绩。
设计题目:(要求每个学生在下面题目中选择一个适合自己且感兴趣的题目独立完成,若需新知识一定要去查资料,如果自己有另外的感兴趣的项目,可以自己设计,但一定不能是随便下载一个应付,否则将定为不及格,且不给补答机会,切记)
1、猜数游戏 功能要求:计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语。 界面要示:用字符界面实现、也可用图形界面实现。
2、学生成绩管理
功能要求:
1) 输入n个同学的学号,姓名,m门课程成绩。
2) 计算出平均成绩。以平均成绩降序输出成绩表。
3) 输出全组各科平均分,最高分和最低分。
4) 输入姓名查询成绩 界面要示:用字符界面实现、也可用图形界面实现。
5)能连接数据库并实现查询、增、删、改等功能(此项功能作为可选项,可以不要)。
3、高级计算器模拟程序
功能要求:该程序显示GUI用户界面,能实现整数的加、减、乘、除、乘方、立方、n次放、开平方、开n次方、倒数、三角函数、反三角函数运算。 界
面基本要求:用图形界面实现。
4、画随机的圆
功能要求:实现简单的动画。具体要求:自动出现由小到大变换的圆,位置与颜色随机,变到150直径时擦除,重新再出现圆;变换速度有HTML文件传入的参数控制(控制sleep时间)。 界面要求:用Java Applet实现。
5、用菜单和按钮来控制绘图
功能要求:实现简单绘图功能,具体要求:画直线,画空心或实心椭圆、画空心或实心矩形、画多边形(图形的位置和大小可在程序中设定)。 界面要求:用图形界面实现。可参考图
2、图3和图4。
6、聊天小程序
功能要求:使用图形用户界面,能实现一个聊天室中多人聊天,可以两人私聊,可以发送文件。 提示:使用socket通信
7、万年历带日程提醒功能
功能要求:使用图形用户界面,能显示月历,用户可以更改月份和年份,带有日程提醒功能。用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。查询信息:用户可以查询到某个月的所有的提示信息。能够显示系统时间。能够设置闹钟。能够查询若干国际大城市(分布在不同时区)的时间。
8、电子英汉词典
功能要求:能够编辑词典库中的信息,能够实现英译汉,汉译英(要考虑一词多义)。
9、加密与解密
功能要求:采用图形用户界面,给定任意一个文本文件,进行加密,生成另一个文件;对加密后的文件还原。
10、销售管理系统
功能要求:1)产品类别信息管理:对客户的基本信息进行添加、修改和删除。2)产品信息管理:对产品的基本信息进行添加、修改和删除。3)供应商信息管理:对供应商的基本信息进行添加、修改和删除。4)定单信息管理:对定单的基本信息进行添加、修改和删除。
11、计算带变量的数学表达式的程序
功能要求: 1)由用户输入一个表达式,求出其计算结果后显示。 2)允许在表达式中出现常用的数学函数,如绝对值、取整、三角函数、倒数、平方根、平方、立方等。 3)要能够判断出表达式中的变量名及其个数,按照变量名自动弹出/出现输入界面逐个让用户输入变量。 4)尽量使用图形界面实现,要符合日常软件使用规范来设计菜单和界面。5)如果无法实现图形界面,则在命令行方式下也需要提供菜单,方便用户操作。
12、学生基本信息管理
功能要求:1)需要管理的学生信息有:学号、姓名、性别、出生日期、政治面貌、家庭住址、电话、宿舍号。2)实现查询、增、删、改等功能。3)存文本本件或者使用数据库。
13、抽奖程序
功能要求:1)能够在电脑上抽奖,分别抽取4等奖、3等奖、2等奖、1等奖、特等奖,设定每种奖项的人数后分别一次抽取每个奖项。2)按给定的总人数以序号或电话号码为抽奖依据。3)要求屏幕上能够显示抽奖的号码滚动过程,按“停止”按钮给出抽奖结果。 4)要求漂亮的图形用户界面。
14、度量衡换算器
功能要求:1)网上去找几个度量衡换算器现成软件,综合其优点,编写出源代码,实现常见长度、面积、容积(体积)、温度(华氏/摄氏)的换算。2)要求漂亮的图形用户界面。
15、个人财务系统
功能要求:1)管理个人每月收支。包括资金来源、数目,各项平时主要支出款项和其它支出,月平均支出,支出将要超标提醒,交款提醒等等。2)要求用加密了的文本文件或数据库保存结果,每次启动时调入上次结果。3)图形界面。
16、学生学籍管理
主要描述: 调查学校学生处、教务处,设计一个学籍管理系统。要求: ①建立学生档案,设计学生入学、管理及查询界面; ②设计学生各学期、学年成绩输入及查询界面; ③根据各总成绩,查询、输出学生学籍管理方案(优秀、合格、试读、退学); ④毕业管理; ⑤系统维护:如数据安全管理(含备份与恢复)、操作员管理、权限设置等; 主要功能模块 实现学生基本情况的录入、修改、删除等基本操作。 对学生基本信息提供灵活的查询方式。 完成一个班级的学期选课功能。实现学生成绩的录入、修改、删除等基本操作。 能方便的对学生的个学期成绩进行查询。 具有成绩统计、排名等功能。 具有留级、休学等特殊情况的处理功能。
17、招聘求职管理系统
主要描述: 编程模拟招聘/求职,设计两个类:企业类(招聘);求职者类;职位需求类
包括下列功能模块: 1.发布招聘需求信息: 2.增加、修改删除求职简历; 3.删除过期招聘信息: 4.查询招聘/求职信息: 5.职位签约;
18、教务辅助管理系统
主要描述: 1. 主要的数据表 教师基本信息表,课程表,教室资源表等
2.功能模块 1) 对上课教师基本信息进行管理。 2) 对全院开设的课程进行管理。 3) 录入教师基本上课信息。 4) 实现自动排课功能。
注意:课程设计报告:(保存在word 文档中,文件名要求 按照"姓名-学号-课程设计报告"起名,如文件名为"张三-001-课程设计报告".doc )按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成;
其中包括:
a)需求分析:
在该部分中叙述,每个模块的功能要求
b)概要设计
在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。
c)详细设计
各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)
源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
d)调试分析
测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。
4. 课设总结: (保存在word 文档中)总结可以包括 : 课程设计 过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对java程序设计这门课程的思考、在课程设计过程中对本课程的认识等内容。