课程设计《JAVA程序设计》任务书

2024-09-10

课程设计《JAVA程序设计》任务书(精选6篇)

课程设计《JAVA程序设计》任务书 第1篇

《 JA V A 程序设计》课程设计任务书 一.课程设计基本信息

课程名称:《JAVA 程序设计》课程设计 学时:1周 学分:1学分

二.课程设计目的与要求

1.教学目的:本课程是学习《 Java 程序设计》后的综合实践课,使学生能够比较深入的理解 Java 语言的特征及体系;熟练的掌握并会运用 Java 语言与面向对象程序设计的思想和方法设计应用程序解 决应用问题,积累程序设计的实践经验,为培养软件技术高技能人才奠定基础。

本课程是培养计划中综合性较强的实践教学环节之一, 帮助学生掌握教学内容、培养学生运用知识 解决应用问题的实际动手能力、提高学生综合素质有很重要的意义。

2.教学要求:本课程设计以设计一个或多个实际应用系统为目的,通过课程设计让学生较全面的 掌握 Java 语法基础知识、面向对象程序设计方法, 尤其是基于 Java 的应用程序设计的方法与技术, 能 够运用 J2SE平台,结合相应的数据库系统开发应用程序,理论联系实际,达到培养实践操作技能的目 的。

学生要了解 Java 程序开发的一般过程,特别掌握系统分析与设计的基本方法,写出系统分析与设 计报告,并能设计真实可用的应用系统。

三.课程设计内容与安排

根据老师提供的设计题目, 写出系统分析与设计报告, 并建立原型系统。题目可以由教师与学生根 据实际情况商定,可参考的题目:图书借阅管理系统、产品管理

系统、学生成绩管理、学生信息管理、人事管理、人力资源管理系统、物流信息管理系统等。

1.主要设计内容如下:(1系统设计:包括系统需求分析、总体设计和功能设计,必要时使用图表说明。(2数据库设计与实现:包括数据库的需求分析、数据库的概念结构设计和数据库的逻辑设计。

(3系统各模块设计:包括用户界面及相应功能算法等程序设计。2.教学安排

总课时 30课时,其中需求分析与系统设计、数据库设计与实现、系统各模块实现所以及系统集成 调试运行用时间建议各占 15%,15%,40%,20%的课时, 学生可根据具体情况调整, 利用 10%的时间完成课 程设计报告。

四.课程设计教学建议及要求

1.要求学生有一定的程序设计和数据库基础知识,由老师指定或学生自行组织形成项目小组,必 要时由多人开发一个项目, 其中需要指定负责项目的小组长控制项目进度。每个小组的项目开发过程应 该遵从项目管理规范。

2.严格要求每个学生按照规定时间进行设计,禁止无故迟到和旷课。3.要求学生有自我学习的能力,遇到问题要学会自我解决。

4.要求设计的界面美观、合理、便于操作等,功能与实际应用系统紧密联系,系统结构合理构思 巧妙、模块化程度高等。

五.课程设计成绩评定

课程设计成绩由学生的出勤情况和程序设计情况各分别占 10%和 90%组成。程序的考核从界面、功 能实现、创新性、问题回答和课程设计报告等几方面进行。

考核内容和比重表(参考

考核内容 出勤 界面 功能实现 创新 问题回答 设计报告 比重 10%15%30%15%10%20% 六.课程设计报告撰写与提交

1.课程设计报告格式见本文后面所附 “课程设计报告模板” , 课程设计报告最终以电子稿形式提交, 如需打印另行通知。在课程设计正文中使用图表时, 所有的图必须有图号和图题, 所有的表必须有表的 名称和编号。

2.对课程设计报告正文内容的提示说明如下:(1摘要(100-150个字: 主要包括设计内容、方法和结果,最后列出报告中用到关键字。(2课程设计介绍(要求 400-600个字: 对课程设计内容做综述,介绍课程设计的目的和要求等内容。同时对课程设计小组成员构成 进行介绍,并说明自己在整个课程设计中将承担的任务。

(3系统设计(要求 600-800个字: 主要介绍完成系统需求分析、总体设计和功能设计。必要时利用图表说明。(4数据库设计与实现: 主要介绍数据库的需求分析、数据库的概念结构设计和数据库的逻辑设计。数据库设计应利 用图表说明。

(5系统各功能模块设计(字数根据实际情况而定 : 主要介绍系统各功能模块的界面设计及相应的功能程序设计。对于界面设计应的描述界面中所

使用的相应的组件列表,包括组件类别、组件 ID 值、组件作用等。同时应附相应界面设计状 态的界面截图和相应的运行界面截图。如果涉及多个功能模块,则应分别描

述。

(6课程设计总结和体会

主要对课程设计所做的工作进行总结, 同时描述课程设计后的体会, 包括专业技术方面的体会 和职业能力和职业意识方面的体会。另外对课程设计内容中存在的不足和改进意见进行阐述。(7致谢

在课程设计过程中,如果得到他人的帮助,则不要忘记致谢。(8参考文献

要列出在课程设计过程中用到的主要参考文献和站点。虽然看过, 但没有用到的文献或站点则 不必列出。参考文献要与报告正文关联,要不少于 4项。

(9附录:带注释的程序清单

源程序清单只写关键程序要有注释。注释是功能性的注释,而不须要对语句或命令本身进行 注释。

Java 课程设计参考题目

1、编写一个记事本程序 要求:

用图形用户界面实现。

能实现编辑、保存、另存为、查找替换等功能。提示:使用文件输入输出流。

2、模拟龟兔赛跑 要求: 用图形用户界面实现。

能设置比赛时间,马匹的数量等等。在任意时间段内马匹的速度是随机的。开始比赛之后以动画显示赛马过程。提示:使用多线程

3、学生信息管理系统 要求: 使用图形用户界面

用数据库建立 1或 2个学生信息表。(可以使用 txt 文件代替数据库 能连接数据库并实现查询、增、删、改等功能。

4、聊天小程序 要求: 使用图形用户界面。

能实现一个聊天室中多人聊天。

可以两人私聊。提示:使用 socket 通信

5、ATM 柜员机模拟程序

要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为 123456 时, 系统能登录 ATM 柜员机系统,用户可以按照以下规则进行:

1、查询余额:初始余额为 10000元

2、ATM 取款:每次取款金额为 100的倍数,总额不超过 5000元,支取金额不允许透支。

3、ATM 存款:不能出现负存款。

4、修改密码:新密码长度不小于 6位,不允许出现 6位完全相同的情况,只有旧密码正确,新密码符 合要求,且两次输入相同的情况下才可以成功修改密码。

6、实现数据结构中二叉树的遍历演示过程 要求:使用图形用户界面

实现二叉树的前序遍历、中序遍历、后续遍历、按层遍历的算法的演示过程。动画演示尽量与程序执行 同步,人机交互、适于教学。

7、超市收银系统 要求:使用图形用户界面。

由收银员输入顾客的会员卡卡号(若有卡、所购商品的货号等。从数据库中取出有关价格信息,再把

这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情 况交数据库存储以供查询。

另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满 200元,可为其发放一张会员卡,以后在该商场购物可向 9折优惠。

8、万年历

要求:使用图形用户界面。

实现日期与星期的查询,其他功能自定义。

9、五子棋游戏 要求:使用图形用户界面 实现两人游戏,能够判断输赢

有 “ 开始 ” 按钮,当选择完棋盘大小后,按此按钮进入对战状态。当有胜利者(垂直、水平、对角线连续 5子 ,显示对话框,提示谁(黑还是白胜利了。若当棋盘满了还无胜利者,显示平局对话框。界面 上还要有 “ 复盘 ” 按钮,可对完成的棋局进行复盘,例如每 3秒走一步。

10、日历记事本

要求:带有日程提醒功能的日历。

1、显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。

2、定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时 间相吻合时,给出具有提示信息的对话框。

3、查询信息:用户可以查询到某个月的所有的提示信息。

11、电子英汉词典

要求: 能够编辑词典库中的信息

能够实现英译汉,汉译英。(要考虑一词多义

12、计算器小程序 要求:使用图形用户界面

能在键盘或鼠标上读入数据,并完成加。减。乘。除计算。在屏幕上显示一个主菜单。提示用户输入 相应的数字键,分辨执行加。减。乘。除计算功能和结束程序的功能。

13、图的最小生成树算法过程演示 要求:使用图形用户界面

使用菜单显示普利姆和克鲁斯卡尔最小生成树的动画实现过程, 动画与算法的实现尽量同步实现, 便于 人机交互和教学。

14、加密与解密 要求:采用图形用户界面

1、给定任意一个文本文件,进行加密,生成另一个文件。

2、对加密后的文件还原。

15、小游戏 要求:。

程序随机产生 20— 50根火柴,由人与计算机轮流拿,每次拿的数量不超过 3根,拿到最后一根为胜。(使用图形界面

16、敏感词汇分析 要求: 任意选择一个文本文件,分析该文件,如果存在敏感词汇(这些词汇保存在 sentive.txt 文件中,每个词 占一行 ,报告每个词出现的次数。

17、基数排序过程动画演示 要求:使用图形用户界面

基数排序算法的实现过程参照《数据结构》教材,动画效果强。可以采用最高位优先算法实现,也可以 采用最低位优先算法实现,人机交互、便于教学。

课程设计时间安排 序 号

时 间 实习主要内容 实习地点 指导教师

1星期一 上午 概要设计:确定项目的实施方案、设 计程序模块连接图、完成模块功能描 述

实训室 刘延岭

2星期一 下午 总体设计:设计程序流程图,完成数 据库设计、方法设计

实训室 刘延岭 3星期二 上午 详细设计:实现系统功能 实训室 刘延岭 4星期二 下午 详细设计:实现系统功能 实训室 刘延岭 5星期三 上午 详细设计:实现系统功能

实训室 刘延岭 6星期三 下午 详细设计:实现系统功能 实训室 刘延岭 7星期四 上午 系统功能完善,整合测试 实训室 刘延岭 8星期四 下午 撰写设计文档 实训室 刘延岭 9星期五 上午 撰写设计文档 实训室 刘延岭 10星期五 下午 检查验收 实训室 刘延岭

计算机与信息工程系

《 JAVA 程序设计》课程设计(字为黑体四号粗 课程设计题目(黑体二号粗 专业 计算机 班级 1001班 学号 02 姓名;刘腾帅 E-Mail 电话 *** 时间

(字为黑体四号粗 承德石油高等专科学校(字为楷体四号粗

(报告正文为宋体,多倍行间距:1.25倍 摘要:(四号粗

内容(小四号字

关键字:(小四号粗 内容(小四号字 1.课程设计介绍(四号粗

对课程设计内容做综述,介绍课程设计的目的和要求等内容。同时对课程设计小组成 员构成进行介绍,并说明自己在整个课程设计中将承担的任务。2.系统设计(四号粗 内容(小四 2.1需求分析 2.2总体设计 2.3功能设计

3.系统各功能模块设计(四号粗(注:必要时应分模块(页面描述 内容(小四

4.1界面设计(必要时使用用户组件 4.2功能实现

4.课程设计总结和体会(小四号粗 内容(小四 5.致谢(四号粗 参考文献(四号粗

内容(小四内容如下例所示:

小四

([1]博彦科技.编程高手 J2EE.北京大学出版社,2000.94-97 [2]http:///learning/lesson/xinxi/20030401/lesson.asp 附录(注:另起一页

1.xx 功能模块(页面相关事件或方法程序清单(1 xx 事件或方法(2 xxxxxxxxxxxx 2.xx 功能模块(页面相关事件或方法程序清单(1xx 事件或方法(2 xxxxxxxxxxxx 成绩评定

出勤情况(10分 界面设计(15分 功能实现(30分 创新点(15分 答辩情况(10分 设计报告(20分 设计评语

指导教师

课程设计《JAVA程序设计》任务书 第2篇

目 录

一、项目背景及意义:...............................................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发布,标志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系统记事本工具基本功能,并且能够创 建多个不同的用户和保存图片功能。以下是具体说明: 第一部 登陆界面

(1)用户名和密码输入文本框,供已注册的用户输入用户名和密码。(2)登陆控件,在用户名和密码正确的前提下,进入软件主界面。

(3)注册控件,点击此按钮,将进入用户创建,创建之后用户名和密码会自动保存在电脑的相应文件中。第一部分 菜单栏

(1)菜单中有“新健”,“删除”,“显示”,“菜单”,“帮助”五个主菜单。(2)“新建”有“新建笔记”“新建笔记本”二个子菜单:分别用于创建新的笔记和新的笔记本。

(3)“删除”中有“删除笔记”和“删除笔记本”二个子菜单,和“新建”相对应。

(4)“显示”中可以选择界面的风格,有Metal风格、Windows风格、Motif风格、Nimbus风格;还有界面排版的选择,可以选择水平显示或垂直显示。(5)“帮助”菜单中有关于笔记本程序的说明,作者等信息。第二部分 笔记本排列区

显示用户创建的所有笔记本。第三部分 笔记显示排列区

此处主要显示选中笔记本中的所有笔记,并且可以在此区右击来创建、删除笔记、查看笔记,当然也可以在菜单栏中的“新建”和“删除”菜单中创建和删除笔记。

第四部分 笔记编辑区

此部分为用户设计选择操作和右键操作,可以在笔记中插入图片、更改字体颜色、和插入时间;方便用户进行一系列的编辑操作,增强本记笔记本的用户体验性能。

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“));//设置快捷键 ”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);

} 设为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、笔记本登陆、用户注册

3、菜单栏 a.总菜单

b.新建菜单

c.删除菜单

d.显示菜单

e.“菜单”菜单

f.帮助 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.程序结构 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){

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

deleteFile(path+”/“+list[i].getName());

return(folder.delete());} }

(2)User.java package common;/** * 处理用户属性

* 为用户创建自己的专有途径

* 如果有了则不创建

*/ 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);

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+”rn“);

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();

}

}

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);//

}

}

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;

/**************笔记本类型部分声明结束*****************/

public LeftPanle(JPanel panel,MainFrame mainFrame){ this.mainFrame=mainFrame;this.panel=panel;//处理第一片***11111111111 //设置初始界面 显示 所以笔记,排序,回收站的按钮

//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

member[i]=new JLabel(”“);

member[i].addMouseListener(this);}

allBookjsp=new JScrollPane(allBookPanel);//滚动

firstPanel=new JPanel(new BorderLayout());//将第一片设置为边界布局

firstPanel.add(allBook,”North“);firstPanel.add(allBookjsp);

//处理第二片***222222 //仅有一个按钮

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中的笔记本,在新建或删除笔记本是需要刷新

并附带刷新右边两个Panel public void update_Left_view(){

book=new File(mainFrame.getUser_path());

book_name=book.list();

if(book.exists())

{

for(int i=0;i

{

member[i].setText(”“);

member[i].setIcon(null);

member[i].removeMouseListener(this);

}

for(int i=0;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

{

if(e.getComponent().equals(member[i]))

{

jl=(JLabel)e.getSource();

jl.setForeground(Color.red);

}

else

{

member[i].setForeground(Color.black);

// //

// //

}

} //保存当前笔记本的路径 如...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){

//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

//存放路径

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);

} 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;}

(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_menu.add(newNote_item[i]);for(int i=0;i

deliteNote_menu.add(delete_item[i]);for(int i=0;i

show_menu.add(show_item[i]);for(int i=0;i

help_menu.add(help_item[i]);for(int i=0;i

{

menu_menu.add(menu_item[i]);

if(i==0||i==2)//添加分隔线 将导入和导出框起来

menu_menu.addSeparator();}

//添加事件监听

for(int i=0;i

newNote_item[i].addActionListener(this);

for(int i=0;i

delete_item[i].addActionListener(this);

for(int i=0;i

show_item[i].addActionListener(this);

for(int i=0;i

help_item[i].addActionListener(this);

for(int i=0;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;

}

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();

//将笔记本路径设为新建笔记本的路径

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

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 {

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;

//鼠标右击部分

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

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);

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

items[j].setText(”“);

items[j].setArmed(false);

items[j].removeMouseListener(this);//避免某个笔记被删除之后还可以被点的情况

}

for(int i=0;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);

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

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

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

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();//将当前笔记的途径

存到辅助路径中

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;

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);

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();

}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);

课程设计《JAVA程序设计》任务书 第3篇

Java语言作为当前程序设计的主流语言之一, 作为一个软件开发人员对Java语言的熟练使用是必备技能之一, 因此也是软件技术专业学生必须熟练掌握的核心语言之一。《Java语言程序设计》这门课程是学习Java语言的入门课程, 通过该课程的学习使学生掌握Java语言的基本语法及建立面向对象的程序设计思想, 并能够完成Java应用程序的开发。该课程是Java语言学习的基础, 较好地掌握该课程的知识点和技能点, 能够为今后学习Java程序的高级开发奠定良好的基础。现在教育界普遍认为, 高职高专的学生不适合传统的对知识点逐一讲解的教学方法, 这种教学方法让他们感觉很枯燥, 不能激发他们的学习欲望和学习激情。勉强学习, 也不能将知识点与实际相结合, 最终变成“读死书”, 学习效果差, 不能达到高职高专培养学生实践动手能力的目的。特别是计算机类的编程课程除了需要实际动手操作之外, 更需要逻辑思维能力, 传统教学方法的教学效果特别差。学生更多地只学会课堂的程序编写, 不能使用程序解决实际的问题, 不符合企业的用人需要。因此需要对现有的教学方法进行改进, 找到适合高职高专的学生的教学方式, 以提高教学效果, 达到专业培养目标。

二、教学方法适应性分析

任务驱动法是一种以学生为中心, 以完成工作任务为中心的理实一体教学方法, 易于激发学生学习和掌握技能并获得解决实际问题能力的欲望, 提高学习效果。根据高职高专学生的学习特点和培养目标定位, 更适合于通过实际操作理解抽象知识, 达到形象到抽象的思维的学习方式。因此任务驱动法被普遍认为是比较适合于高职高专学生的一种教学方法。在《Java语言程序设计》课程中使用任务驱动法, 通过完成特定的任务掌握相应的技能点, 掌握程序开发的方法, 建立程序设计的思想, 使学生能够提高学习兴趣, 主动学习;使学生能够理解面向对象的程序设计方式;使学生具备分析问题、解决问题的能力。最终使学生达到能够实际开发Java应用程序的培养目标。

三、具体实施

1. 任务设计。

(1) 企业调研, 获得典型工作技能。高职高专的软件技术专业是培养能够在企事单位和软件开发企业从事具体编程和应用程序的高等技术应用型专门人才, 强调的是能够完成用人单位相关岗位的具体业务操作, 因此首先应对相关企业实际工作岗位进行调研, 获得每个岗位的典型工作任务, 分析任务中所包含的典型专业技能。 (2) 分析典型工作技能, 获得必备技能点。根据企业调研中得到的典型工作技能, 找出属于本课程培养内容应包含的专业技能点, 并对它们进行分类归纳。与传统课程中的知识点相比, 实际工作技能在某些地方需要相对深入掌握, 某些地方相对要求较低。根据实际需求调整, 一定不能墨守成规。对一些不常用的知识或技术大胆舍弃。并且不试图覆盖所有的学科体系知识点, 可以留出部分引导一些学有余力的学生自学。 (3) 设计任务, 重组知识体系。根据调研结果, 设计五个与实际相关的小项目, 其中包含这些学生需要掌握的技能点。《Java语言程序设计》这门课程是程序设计的入门级课程, 学生接触程序设计时间不长, 重点在于培养学生的程序设计思想和应用程序设计能力。因此, 项目设计不宜过于复杂, 难度也不宜较高。过于理论化、脱离实际的问题, 不能激发学生的学习兴趣, 也不适宜。每个项目有若干个任务。每次教学均围绕着这个任务分析思考并完成该任务。这五个项目都是具有实用性并且具备形象载体的小型应用程序。学生在完成多个任务之后获得一个最终的成果, 可以使学生获得成就感, 从而更乐于去学习, 更愿意主动学习。这些项目中包含的技能点, 打破按照知识体系结构授课的方式, 不按照传统的知识体系结构逐章节逐个知识点进行讲授, 而是根据任务的需要去学习知识点和技能点。学生通过完成任务了解技能点, 同时也知道如何使用。先形象、后抽象的模式, 更适合高职高专学生的学习特点, 消除了传统教学方式中“读死书”的弊端。在项目设计的知识点和技能点采用“重复加深”的方式, 即重要的知识点和技能点不止在项目中出现一次, 而是多次出现, 并逐渐加深难度, 使学生能够更好地掌握这些重点的知识点和技能点。对一些学习难点尤其有效。传统的教学方式一次性对学习难点讲通讲透, 这是违反学习规律的。学生对知识点的理解应该是逐渐深入的, 一次使用便能掌握的就不能称为难点。使用“重复加深”的方式, 可以在重复中巩固学生的掌握, 逐渐加深又可以逐步提高学生的认识。

2. 教学实施。

(1) 提出任务, 分析任务。在教学中采用任务驱动法的第一步, 是提出任务, 对任务进行分析, 并且要促使学生主动去思考, 调动学生讨论, 使学生学会分析问题。 (2) 解决问题, 学习技能点。学习本课程的学生接触程序设计时间不长, 对于程序设计的思路和方法没有更多的认识。根据该阶段的学生的特点和知识储备, 适合于先模仿后拓展的模式。根据对任务的分析, 教师介绍相关的知识点和技能点, 或由学生自学, 带领学生解决问题, 共同完成任务。 (3) 模仿演练, 归纳吸收。学生根据之前的学习, 独立完成任务的程序编写。从“想”、“看”, 过渡到“做”。通过自己动手, 真正掌握这些技能点。在学生独立完成的过程中, 可能发生各种问题, 教师引导学生思考, 分析问题, 并帮助学生解决问题。当学生练习结束之后, 教师总结学生在“做”的过程中发生的普遍性的问题。学生总结本任务中所学习到的技能点及其应用。通过这样的方式, 巩固学生掌握任务中包含的技能。 (4) 扩展思考, 灵活应用。教师提出新问题, 拓展前期知识, 促使学生思考、分析, 并独立解决。学生动手解决问题, 让学生能够完全地将课堂所学转化为所得并能学会灵活应用技能点。

3. 考核评价。

对学生学习情况的考核采用过程性评价和终结性评价相结合的方式。对学生完成每个任务的过程进行评价是根据完成每个任务的完成过程及结果, 进行评分, 包括出勤情况、参与情况、最终结果等。积极参与分析问题, 提出有价值的解决方案给予相应加分, 鼓励学生主动思考, 参与到教学中, 使“教”与“学”双方都积极互动。每完成一个项目, 进行相应项目的展示及答辩, 由学生和教师共同评分。使同学之间产生比较, 相互学习, 相互切磋, 共同提高。软件开发注重团队合作。但是对于刚开始学习程序设计的学生来说, 前期应更注重于自身的能力水平的提高。使用前三个项目学生独立完成, 后两个项目分成小组共同完成。通过后两个项目培养学生的团队合作精神, 相互协作, 相互帮助。后两个项目的考核增加对小组成员之间的相互评价及组长的评价。期末仍保留原始知识点考试方式, 所占比例不超过总成绩的30%。促使学生回顾本课程的所学, 增强记忆, 巩固加深。

使用任务驱动法提高学生的学习积极性和主动性, 引导并促使学生逐步学习和掌握Java语言开发应用程序的方法, 也使学生学会分析问题、解决问题, 建立面向对象的编程思想和掌握程序设计的方法。通过以上步骤的教学实施, 使学生具备独立编写Java应用程序的能力, 达到课程教学的目标, 获得良好的学习效果。

摘要:《Java语言程序设计》课程是一门计算机程序设计类的核心基础课程, 使用任务驱动法进行教学符合高职高专学生的学习特点, 可以提高学生的积极性和学习效果, 并能较好地达到学习目标。为课程设计五个项目, 每个项目包含若干个任务, 每次教学为完成一个任务, 对每个任务的完成情况进行考核评价, 获得良好的教学效果。

课程设计《JAVA程序设计》任务书 第4篇

关键词: Java; 面向对象; 程序设计课程; 教学方法

中图分类号:G642 文献标志码:A 文章编号:1006-8228(2013)01-37-03

Pondering over teaching of “java programming designing”

Lan Wenfei, Li Zimao

(School of Computer Science, South-central University of Nationalities, Wuhan, Hubei 430074, China)

Abstract: Java is becoming one of the most popular object-oriented programming languages in developing areas based on Internet and one of the core programming curriculums for universities. In this paper, some Java teaching problems are discussed, such as the choice of teaching materials, the choice of developing environment, filtering of teaching content, using of teaching method, design of the teaching cases. The feasible ideas for above are given.

Key words: Java; object-oriented; programming curriculum; teaching method

0 引言

在Java面世短短的十来年间,Java以其简单易学、安全可靠、面向对象、多线程及平台独立性等许多特点[1-3],被越来越多地推广和使用,它已成为Internet上最受欢迎的开发语言之一。

目前,许多高校已将“Java程序设计”列为程序设计的核心课程之一,肯定了它在培养计算机开发类人才中的地位和作用。

本人已连续多年担任高校计算机专业Java程序设计课程的主讲教师,针对Java教学中存在的问题,积累了一些教学经验,希望能与同仁共同探讨。

本文就Java语言的教学,包括教学时数的安排、教材的选择、开发环境的选取、教学内容的筛选、教学方法的运用、教学实例的选用等方面[4,5],给出了一些自己的做法,实践证明,这些方法是可行的。

1 教学准备环节

首先讨论Java程序设计课程教学的准备工作。

1.1 合理安排教学时数

我们授课的对象是软件工程实验班本科学生,该课程安排在大一第二学期,鉴于学生在大一第一学期已具备基本的计算机原理及专业基础知识,这样来安排教学计划是比较合理的。考虑到学生在大一已具备C/C++高级语言程序设计的基础,而多数学生在国内修完本科课程后会选择到国外继续深造学习,所以Java语言程序设计课程的教学设计必须考虑全方位,此外Java语言衍生自C++,它的基本语法同C语言,而其面向对象的基本特征同C++。鉴于此,我们将Java程序设计课程的上课时数设置为48个授课学时,18个实践学时,这样设置是比较合适的。

1.2 精选教材

选择合适的教材,是保证有效教学的重要手段之一[6]。合适的Java教材, 应具有较好的知识覆盖面,难度适中,适合学生的具体情况[4]。由于我们讲授的对象是实验班学生,需要使用全英文教学,此外,他们已具备一定的面向对象程序设计基础,所以诸如《Thinking in Java》、《Objects First with Java》、 《The Java Programming Language》等经典书籍都适合作为该课程的教材。

选择国外经典教材,能保证我们的教学内容与国外接轨[7]。学生在阅读英文原版教材的同时,可同时参考对应的中文翻译本,能使学生加强对所学知识的理解。

1.3 选择合适的实验环境

由于JDK(Java Development Kit)是命令行的编程环境,需要用编辑器建立Java源程序。如果选用Windows自带的记事本notepad来编辑程序,首先程序中若出现语法错误是很不容易被发现的;其次每次必须打开cmd窗口并输入一大堆命令,如编译命令、运行命令等;再就是对于applet小程序还要自编html文件,非常麻烦。但是,如果选用超智能、傻瓜型的集成开发环境,如JBuilder、NetBeans,因其耗内存,所以速度慢,慢到不能忍受;更重要的是不利于入门级的学生掌握Java的基本语法。因为Java上机实践的一个重要训练内容就是熟练使用Java编译器(java.exe)去检查语法错误,并能修改错误,这样做的目的是使学生能较快地掌握Java语法。

本文简要介绍一种既简单又方便入门者使用的Java编辑器TextPad。TextPad作为Java编辑器需要做简单配置,首先把TextPad装上(先装JDK),安装完毕就可按下面的方法配置:在菜单的Configure中选择Preference,选择Tools,点add下拉菜单,选择Java SDK commands。之后Tools中多了3项:Compile Java、Run Java Application、Run Java Applet。从这一点来看它确实比其他的Java编辑器更容易配置,如EditPlus。

按上述方法配置TextPad Java编辑器后,还可适当优化TextPad Java IDE环境,使它更适合编写、执行Java程序。优化环境方法在此省略,有兴趣的作者可参见文献[2]。

2 教学内容

根据多年的Java程序设计课程教学经验,我们认为讲授该课程的内容主要包括三个方面:一是Java语言基础;二是Java语言的新特性;三是在讲授上述内容时穿插介绍JDK类库的常用类。

Java语言基础包括:数据类型、表达式、基本语句、类和对象、继承和多态、异常处理机制、小程序、图形用户界面设计、输入/输出、多线程、网络编程和数据库编程。考虑到我们面授的学生已经掌握了C++面向对象程序设计基础内容,而且Java教学内容偏多、教学时数较少[8],因此对于衍生自C++的Java语言,它和C++类似的部分,包括数据类型和表达式、基本语句、类和对象、继承和多态及异常处理机制等,应讲授较少的学时数;而对于Java语言特有的部分,如小程序、图形用户界面设计、输入/输出、多线程、网络编程和数据库编程,则应讲授较多的学时数。由于篇幅有限,在此省去对每个章节学时数的具体编排。

1996年Sun公司发布了JDK1.0,在短短的十年时间里,JDK从1.0版本升级到6.0版本。特别值得一提的是2004年发布的JDK5.0版本,它在旧版本的基础上增加了一些非常有意义的新特性,比如,泛型编程、增强的for循环、自动装包/拆包、类型安全的枚举、可变参数和静态导入等,使用这些特性有助于我们编写更加清晰、精悍、安全的Java代码。为了与时俱进,让学生掌握较新的Java特性,我们认为很有必要在课堂上向学生传授新技术,以拓宽学生的知识面。

一方面为了节约有限的学时数,另一方面为了鼓励学生在课余积极使用、查阅JDK帮助文档,我们不安排专门的章节介绍JDK类库的使用,而是在讲授Java程序例子时,将重点介绍一些重要类的使用,比如,在讲授图形用户界面这一章时,则会讲授一些重要包的使用,包括java.awt、java.awt.event、java.applet、javax.swing等,概述这些包的类层次结构。这样做既节约了时间,也使学生通过对例子的学习较好地掌握了一些常用类的使用。特别需要说明的是,容器类很重要,这些类在程序设计中会普遍使用到。

总之,在教学内容的选择上,我们推崇简化的原则,忽略一些不常用的知识点,如带标号的跳转语句、复杂的表达式运算规则、嵌套类等,这样做既节约了课时,也能充分引导学生编写简单、可读性好的程序代码[4]。

3 教学方法

充分利用多媒体教学设施,为上课讲述的例子做编译、运行演示。对于学生编程时常常出现的错误,在编辑程序时可设置类似的错误障碍,让学生修改错误,以杜决今后再出现此类错误,此外还能现场教会学生如何使用JDK TextPad开发环境。到了学期的中后期,鉴于学生们已基本掌握Java的语法,上课可适当减少演示例子的次数。

对于Java基本类库的授课,根据多年的Java开发经历和教学实践,我们认为学生应该对基本类库有个整体了解,要重点掌握 Java类库中的Java.lang和Java.util两个包,特别是容器类的应用是难点,需要结合实际例子阐述。这两个包提供的是Java编程要用到的基本类,学生需要清楚这些类或接口的继承关系、主要功能[5]。我们在授课时适当介绍JDK API文档的使用和阅读,提倡使用最新版本的英文API文档;在教学中注意总结相关类的联系和区别,如String和StringBuffer在使用上的区别,以及FileInputStream和RandomAccessFile在用于读文件时的区别。

在实施Java教学时,应注意Java和C++的区别。Java和C++都是面向对象的语言,而且Java衍生自C++,在基本语法及面向对象特征方面均有很多相同之处。比如,我们在讲授Java的数据类型、常量、变量、表达式、语句、类和对象、继承和多态等内容时,应着重指出它和C++的区别,简略细节知识。这样既能节约课时,也能使学生快速掌握Java的基本语法和面向对象特征。

在学生掌握了Java的基本语法及面向对象特征的基础上,我们会考虑将重点放在图形用户界面、多线程、网络编程和数据库编程上,以使学生能进行一般的Java应用编程。

如果课堂教学时数比较宽裕,则可介绍Java和UML、Java和设计模式相关的知识,强调软件开发新技术,特别是对于软件工程专业的学生,更应该这么做。

4 教学实例

可将程序例子分为非算法型和算法型两种类型。在介绍Java基本语法时,我们提倡用非算法型的例程,利于学生对例子程序的阅读和理解。而在讲授计算机典型问题,如排序、查找、递归时,则使用算法型的例程,以加强学生对一些典型问题的掌握。

在选择例程时,以例程中是否含有JDK类作为筛选原则,目的在于能让学生掌握更多的JDK类。

此外,在期中阶段,可选择一两个游戏项目作为综合的例程,如用于Java学习的Robocode游戏实验项目。Robocode是IBM的一位工程师MatNelson用Java语言所创造的机器战斗仿真引擎,是一款专门为程序员设计的游戏半成品。利用该引擎,只要编写几行简单的代码,就可以创造出一个在屏幕上四处疾驰的机器人坦克,参加游戏对战[4]。这样能增强例子的实用性和趣味性,调动学生学习Java的积极性。在此基础上,再布置一个游戏项目,作为学生在课余时间的练兵题。

5 结束语

衍生于C++的Java语言,作为一种面世较晚的语言,它集中体现和充分利用了若干当代软件技术新成果,如面向对象、多线程、平台无关等[9],使其拥有众多优秀的特性,从而成为面向对象软件开发的首选语言。

出于“Java程序设计”这门课的重要性和教学中存在的问题,本文提出了“Java程序设计”教学实施的诸多方面,并在作者施教的班级进行了多次实践,实践表明,上述教学思路是可行的,能在一定程度上提高教学效果。

下一步我们将在“Java程序设计”实践教学和后续课程改革方面进行实践探讨。

作者多年从事Java教学和Java软件开发工作,积累了一些教学经验,本文将它提练总结,希望能给Java同仁一些启示。

参考文献:

[1] 秦学礼,汪迎,郑淑红.Java程序设计实用教程[M].清华大学出版社,2012.

[2] 刘正林等.Java技术基础(第2版)[M].华中科技大学出版社,2004:30-40

[3] 印旻.Java语言与面向对象程序设计(第二版)[M].清华大学出版社,2007.

[4] 叶恒舟.Java程序设计教学探讨[J].科技信息,2007.1:23-25

[5] 李纯玉,胡丽娜.Java语言程序设计教学中的几点思考[J].科技信息,2007.2:10-13

[6] 张延军,乔德军,温炎耿等.构建Java教学体系[J].邯郸学院学报,2007.17(9):41-44

[7] 蓝雯飞,郑波尽.高级语言程序设计课程建设思路[J].计算机教育,2012.6:30-32

[8] 陆萍.浅议Java程序设计教学改革[J].电脑知识与技术,2007.27:32-35

Java课程设计 第5篇

设计成品(按难度自选一个到两个完成)

可分组或单独完成,每组最多两人,19周前交 1设计报告

(1)本程序的功能描述

(2)程序设计思想(数据结构和各功能的实现办法)(3)核心程序清单(应有必要说明)2结果分析

(1)本程序的局限性及改进方法

(2)应用本程序的设计方法可以编写哪些类似的程序 一:小型通讯管理系统

通讯录管理系统含有:输入 显示 查找 删除

要求

1通讯录的每一条信息包括姓名,单位,电话!(可用数组或数据库)2输入功能:可以一次完成若干条信息的输入.3显示功能:完成全部通讯录信息的显示(一屏最多显示10条,超过十条应能够自动分屏显示)4查找功能:完成按姓名查找通讯信息.5删除功能:完成按姓名删除通讯信息.6应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!

二:个人简历程序:(参照中华英才网http://的创建个人简历的选项)

通过文本框输入姓名,通过单选按钮设置性别,通过组合框选择籍贯(列出省、市),文化程度、出生日期、现居住地。以及填写教育经历、语言及方言等。

请按自行安排界面排版方式,注意美观性。

三:多小球运动程序:

请编写一个多小球运动的程序,要求可以设置每个小球的半径,初始书度,加速度。

当用户点击发射按钮时,程序按指定的弹出一个小球,当小球碰到边界线时,碰撞为完全碰撞。

要求每个小球为一个线程,不考虑小球之间的碰撞。

四:打字小程序。

从屏幕顶端随机落下不同的英文。如果在字符下落的过程中,用户正确输入对应字符,字符消失,加1分;到字符落到底端还没正确输入,扣一分。

给出最宗成绩。程序可设 重新开始,暂停,练习时间,字符出现的数量,速度等。

五:龟兔赛跑

龟兔在同一个圆赛跑,要求可以设置龟兔跑一周的时间,兔比龟快。龟兔同时其跑,当兔快龟一圈时,计算器加1,并显示在屏幕上。六:学生成绩管理系统。

完成一个班学生的成绩管理。为完成程序功能,至少要有两个这样的功能模块:

l 输入成绩 2 查询成绩

因为查询模块中又分为:

l 按学生查询 2 按课程查询

所以为它们分别编写函数。因为上述这些操作中要输入某位学生和某门课程,所以再编写两个函数来输出数组中的学生信息和课程信息并请用户从中选择:

1显示学生信息从中进行选择 2显示课程信息从中进行选择

系统管理员需要管理系统所有用户的信息,包括用户编号、名称、备注等,可以对其添加删除修改和启用停用等操作。

还需要为系统用户划分角色和权限,保证不同身份的用户进入后可以有不同的权限,如某科目的老师可以录入本科目的成绩,学生只可以有查询权限等。

七:使用ServerSocket和Socket实现服务器支持多客户机通信。当有多个客户向服务器提出时请求时,服务器一端会分别为每个客户从一个包含多行文字的文本文件中读取一行文字,发送给每个客户,直到文件读完文件中所有行,服务器一端发出“bye”并停止运行,客户端也都停止运行。

八:编写一个图形用户界面的应用程序,在窗口中,有一个图片循环地从窗口的左面移动到窗口的右边。当鼠标点击窗口时,图片停止运动,再次点击图片恢复运动。九:编写程序,在文件中输入若干个单词(每个单词可重复一次或多次)。编程实现统计每个单词重复次数,并对非重复的单词进行排序,将排序结果输出到文件中。十. JDBC技术的应用

——校园卡信息/学生信息/教师信息/图书信息/宿舍信息/学生会/成绩/课程/教室管理/公务员招考系统的设计实现

以校园卡信息管理、学生信息管理、教师信息管理、图书信息管理、宿舍信息管理、学生会活动管理、成绩管理、教室管理等为例,使用JDBC-ODBC数据库接口,完成对后台数据库的插入、删除、修改、查询等操作。数据库系统可采用Sql Server、Access等,要根据完成的不同功能在数据库系统中定义有关的各种信息表:如在教师信息管理系统中要设计教师基本信息表、教师学习进修情况表、教师奖惩情况表、教师上课情况表等。其他几个子系统中数据表的设计由同学们根据实际的需求自主完成设计。十一.文本编辑器的设计与实现

设计一个类似于Windows记事本(Notepad)的Java程序。可以打开、新建、保存一个文本文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等);在文本中能够插入对象。十二..计算器的设计与实现

设计一个能实现计算器功能的Java程序,可以进行加、减、乘、除(另外可适当加上阶乘、正弦、余弦和指数)运算。十三.图象浏览器的设计与实现

设计一个能实现图象浏览与编辑功能的Java程序,包括如下功能:

1)从已有的图象文件列表中选择某一个,即可显示该图象,并可做旋转等变换。2)在画布区域上可以进行各种规则图形的绘制(如:线段、矩形、多边形、圆等),还可通过鼠标的拖动自由绘图。

3)可以连续播放所选文件夹下的所有图象。十四: 媒体播放器的设计与实现

利用JMF(Java Media Framework)提供的API,实现图像浏览、音频播放、视频播放功能。

十五:局域网聊天程序的设计与实现

该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。服务器端程序:可将消息发送到客户端和接受客户端发送来的信息 十六:基于Web的应用

——网上超市/网上书店/网上花店/网上物流/网上招聘/同学录/网上选课/网上考试系统的设计

应用JSP技术,设计一个类似电子商务、电子政务类的简单应用系统,可以在网上动态展示各类信息,并根据相应的业务流程进行必要的逻辑处理,系统信息可以进行后台维护。需要动态显示的信息要存放数据库中,数据库可以用Sql Server、Access;后台管理要提供对数据库中信息进行动态维护(包括添加、删除、修改)的页面。十七:益智类小游戏的设计与实现

JAVA程序设计课程总结 第6篇

专业:计算机科学与技术 学号: 姓名:

JAVA程序设计课程总结

经过一学期的java学习,我在老师的上课讲解以及自己的课下学习中对java编程有了一定的了解,我深深喜欢上了这种语言。培养了我正确应用面向对象的思维方法分析问题和解决问题的能力。

学习的内容主要分为以下几个部分:(1)java程序的编辑,编译,运行环境

(2)java语言程序设计中最基本的问题,即标识符,关键字,数据类型,常量,变量,表达式,声明语句,赋值语句,数据的输入与输出等。(3)流程控制语句,即分支语句,循环语句,转移语句。

(4)控制研究对象复杂性的原则,即分类,抽象,封装和继承,多态等。(5)数组的定义。(6)高级GUI组件的应用。

其中我对类与继承了解较多。一.类

在Java中,类文件是以.java为后缀的代码文件,在每个类文件中最多只许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在public,泽类文件的名称可以为任意的名称,但不能是数字开头的名称。在类内部对于成员变量,如果在定义的时候没有进行显示的赋值初始化,则java会保证类的每个成员变量都得到恰当的初始化:

1)对于char、short、byte、int、long、float、double等基本数据类型的变量来说会默认初始化为0,bolean变量默认会被初始化为false; 2)对于引用类型的变量,会默认初始化为null。

3)如果没有显示地定义构造器,则编译器会自动创建一个无参构造器,注意:如果显示地定义了构造器,编译器就不会自动添加构造器,所有的构造器默认为static的。

初始化顺序为:当程序执行时,需要生成某个类的对象,Java执行引擎会先检查是否加载了这个类,如果没有加载,则先执行类的加载再生成对象,如果已经加载,则直接生成对象。在类的加载过程中,类的static成员变量会被初始化,另外,如果类中有static语句块,则会执行static语句块。static成员变量和static语句块的执行顺序同代码中的顺序一致。在Java中,类是按需加载,只有当需要用到这个类的时候,才会加载这个类,并且只会加载一次。例如:

运行这段代码就会发现“欧阳”只会被打印一次。在生成对象的过程中,会先初始化对象的成员变量,然后再执行构造器。也就是说类中的变量会在任何方法调用之前得到初始化,即使变量散步于方法定义之间。

二.继承

在java中使用extends关键字来表示继承关系,当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式的从根类Object进行继承。例如:

类Number继承于Student类,Student类称为父类(基类),Number类称为子类(导出类)。如果两个类存在继承关系,则子类会自动继承父类的方法和变量,在子类中可以调用父类的方法和变量。在java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类。但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类。1.子类继承父类的成员变量

当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下: 1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量; 2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承; 3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

2.子类继承父类的方法

子类也并不是完全继承父类的所有方法。1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法; 2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

注意:隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。

3.构造器

子类是不能够继承父类的构造器,如果父类的构造器都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。例如:

这样的代码是没有问题的,如果把父类的无参构造器去掉,则下面的代码必然会出错:

改成下面这样就行了:

4.Super super主要有两种用法: 1)2)super.成员变量/super.成员方法;super(parameter1,parameter2....)第一种用法主要用来在子类中调用父类的同名成员变量或者方法;第二种主要用在子类的构造器中显示地调用父类的构造器,要注意的是,如果是用在子类构造器中,则必须是子类构造器的第一个语句。

上一篇:岭南科技文化艺术节方案下一篇:党支部考察鉴定