java课程心得体会(共8篇)
1.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发布,标志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课程,它是一门实践性较强的课程,对于学生就业非常有用,包括知名IT软件企业,高新技术企业、国有企业、银行、私企等企业,还有高校、科研院所和事业单位都招聘精通Java人才,Java程序员待遇好,吸引着众多学生选择了该课程,但是高校Java教学面临着尴尬的境界,一方面教学理念落后,理念依然是教师讲授,学生被动听课,教师出题考试,学生答完忘完,完成教学要求。这些只是完成了学历教育,缺乏工程项目教育,不能适应新型软件人才的需求。在此理念下,造成教学内容不够丰富,教学模式和考核方式单一,缺乏实战环境,实践环节薄弱,学生学习动力不足,兴趣不高,最终导致教学质量不高;另一方面学生付高昂学费积极参加Java培训班,参加培训班的学生在就业时,优势显现,因为多了项目实战经验,更贴近企业需求。因此,必须对高校Java课程教学进行改革,摆脱这种尴尬的局面。 随着新一代信息技术的到来,企业对于软件人才要求越来越高,不但要懂技术,还要面临着跨行业、跨学科的新要求,专业技术人员的岗位已经单纯从技术、技术应用方向向技术管理、服务管理等方向转变[1],因此Java培养目标也在发生着极大变化,如何提高教学水平,改变教学模式,培养工程型、实用型、复合型软件人才和创新型人才,又成为高校Java课程教育面临的新任务。 Java教学涉及学校、教师、学生、企业等多方,因此必须更新教学理念,树立合作共赢的新理念。合作共赢就是通过双方合作,资源共享,互惠互利,在实现各自利益目标的同时达到了整体利益的最大化,实现了双赢[2,3]。在Java教学环节中处处体现着合作共赢的理念,下面将从师资队伍建设、教学内容、教学方法和教学方式、构建信息化教学资源共享平台、实践环节和考核环节等进行优化改革,来提高学生的积极性和主动性,激发学生学习兴趣,提高Java教学质量,培养学生综合素质,为软件行业培养更多优秀Java人才。 1 优化师资队伍,提高教学业务素质 1.1 校企合作,培养“双师型”师资人才 教师是提升教学质量的关键,Java课程的实践教学很重要,需要教师具有项目工程经验,以便在讲课时,能够引导学生将理论和实践紧密结合。因此必须建立一支“双师型”师资人才队伍,提高教学业务素质。开展校企合作,培养“双师型”师资人才,首先学校定期派一些教师走进企业,参与企业工程项目,积累工程项目经验。其次,聘请或引进企业业务精英为专兼职教师[4]。 1.2 学科合作,优化教学团队学科结构 复合型软件人才和创新型人才的培养要求使得Java授课不只是技术知识,还要培养学生的综合素质,注重思维能力和人文素质的培养。因此需要学科合作,优化教师的学科结构,提高教师的综合素质,首先调整教学团队成员,讲授Java课程的教师不一定是科班出身,可以是相近学科或交叉学科人才,这样拓宽教师讲授计算机的应用领域,让学生理解语言是一种工具,感受到Java语言在生活中的广泛应用,拓宽学生的视野。其次通过“内培”和“外引”,提高教师的学历层次,特别是博士人才的培养,拓宽教师的深度和广度,培养一批又博又专的高级师资队伍。 2 优化教学内容,提高学生的理论水平和实践水平 2.1 多方交流,明确教学切入点 目前Java课程教学内容空泛,纯粹的语法教学,索然无味,缺乏活力,课时有限,讲授内容少,因此要通过采用调研问卷、座谈形式与同事、学生深入交流,找到目前该课程教学效果差、学生成绩不佳的原因,走访知名IT企业,及时了解新信息技术下软件公司、大型企业对人才的需求情况,找到教学的切入点。 2.2 优化、丰富教学内容 Java课程教学内容应包括两部分:1)理论部分,不仅仅是语法知识,还应包括软件工程思想理论和软件设计理论、数学逻辑和算法设计理论等,提高学生的综合理论水平。2)实践部分,教学内容应凸显Java的应用,特别是经典案例和短小精悍的项目的穿插。通过了解企业需求,学生兴趣所在,多方合作,对于该课程的内容进行重新编排优化,丰富教学内容,使得教学内容能够多姿多彩,趣味十足,吸引学生认真听课,并能够使得内容在最短的时间内展现最大的信息量。 3 采用多模式教学,创新教学方法或手段 3.1 多模式教学,培养学生的综合能力 采用多模式教学,培养学生的综合能力。首先,课堂上,例如采用启发式教学,能够启迪学生思维,培养学生的想象能力和探究问题的能力,进而引导学生去思考,去创新;采用经典案例法,去培养学生独立分析问题、转化问题、自主学习和解决实际问题的能力等[5]。其次,实践上,例如采用项目驱动教学法,贴近实战,培养学生领导能力、团队协作能力、知识迁移能力、系统分析能力、学习创新能力等[6]。采用不同模式教学,让学生各方面能力都能得到锻炼,特别是要把各种程序设计思想和思维贯穿于Java课程中,培养学生的思维品质和综合能力,全面提高学生的综合素质。 在教学中,教学方法采取合作互动,将各种教学法等优化组合,创新新型教学方法,发挥各种教学方法的优势。课堂上让学生思维活跃起来,注重改善学生思维品质,提高学生的思维能力,包括理解力、分析力、综合力、比较力、概括力、抽象力、推理力、论证力、判断力等,教学中鼓励学生勇于提出问题,促使教师的教学水平和业务素质不断提高,使得教师真正在主导,学生真正是主体,双方互动交流,教学相长,达到双赢。 3.2 创新教学手段,提高教学效率 目前Java课程教学中,有的教师依然采用传统教学手段,例如板书,有的教师引入多媒体技术,教师念PPT,学生被动听着,感觉不到所讲Java程序的魅力变化,同时PPT不能一屏多页显示,由于PPT信息量大,翻页较快,学生来不及消化刚才讲的内容,又迅速进入下一页,影响后续内容讲解,导致学习兴趣下降,学生学习的积极性不高。有的教师为和学生互动,不断地在PPT和JAVA集成开发环境切换,造成学生眼花缭乱,浪费宝贵的教学时间,造成教学效果不是很好。所以可以创新一种教学手段,开发教学系统演示程序,将演示程序和PPT整合在一个窗口内显示,PPT本身也能在一个窗口分页显示,保证前后知识的连贯性。同时也可以引进在线网络授课等教学手段,增加学生方便,提高教学效率[7]。 4 多方参与,优化实践环节,构建信息化教学资源共享平台 目前,许多高校不重视实践教学,例如上机实验课,教师随便出几个题目,放任学生自行去做,由于管理松懈,实验课成了学生的上网休闲课,为了应付完成任务,结果造成剽窃横行,尤其作业环节更是抄袭严重。同时缺乏工程项目的锻炼,导致学生分析问题和解决实际应用问题能力下降。另外,缺乏教学资源共享,学生找不到学习Java的相关资料和平台,教师如若不引导学生去自主学习,很容易造成学生惰性,缺乏主动性学习、探索式学习能力等,因此要想提高教学质量,必须重视实践环节和教学资源的共享。 由于Java课程应用型较强的特点,因此必须重视实践教学,实践教学可以采用不同的途径让学生得到锻炼:1)在学校机房,通过教师指导项目,让学生分组,采用项目或任务驱动教学法,让学生实现项目,严格按照企业的要求,采用工程项目的做法,从需求分析、设计、实现、测试和维护等环节让学生得到真实锻炼。2)通过校企合作,走进企业实习基地,让学生贴近实战进行锻炼机会。3)自我锻炼,提供学生题目,让学生能够自我开发项目,培养学生的自主学习能力、独立分析问题和解决问题的能力。 实践教学环节包括实验的准备、项目的确立、项目分组、项目指导、项目的运作、实现项目的途径、项目的结题,项目报告的书写等环节,因此项目实践环节较多,必须进行优化,例如项目题目的选取,难易程度;项目分组的合理性划分,项目是否需要指导,项目组实现环境和方式等。通过教师、学生或者企业的参与,讨论项目方案,对实践环节优化,使得项目的实施最有效。 同时,构建信息化教学资源共享平台,在该平台上,教师可以把PPT和Java相关资料共享,可以搭建Java论坛,教师、学生相互之间都可以在平台上交流学习Java心得、项目经验等,通过论坛合作可以获得最新的Java技术、Java的最新研究和发展方向等,促使学生自我学习,不断提高自己的Java编程水平[8]。 5 优化考核环节,发挥评价的正能量 考核是对学生的一个综合评价,是对学生阶段性学习的认可,通过考核,发现学生的优点和不足,对教师而言,可以对教学的每个环节分析,调整、优化教学过程,改变教学策略,提高自己的业务素质,对学生而言,发现自己的强项和不足,为下一步学习瞄准了目标,积极引导“考核”发挥的正能量,激发学生学习兴趣,提高学习动力。 考核环节要保证评价的客观、公正。由于考核时评价主体可以多元化,例如评价主体可以有教师、管理人员、项目组组长、学生自我评价等和考核的指标可以多样化,例如考核指标可以为德育、考勤、笔试、上机、项目、实验报告、课程论文等,为了考核的客观和公正,评价主体的选定和考核指标的选取,可以通过多方合作交流确定,对于每个评价主体和评价指标赋予不同的权重,进行优化考核环节,建立一个客观和公正的考核体系,发挥评价的正能量作用。 6 结论 树立合作共赢新理念,对Java课程教学环节进行改革,优化师资队伍、优化教学内容、改进教学方法和教学方式、构建信息化教学资源共享平台、优化实践环节、优化考核环节等改革措施,经多年实践证明,这些措施有利于提高Java教学质量和培养更多优秀人才,促进教学相长。 参考文献 [1]国务院.国务院关于加快培育和发展战略性新兴产业的决定[Z].2010-10-10. [2]马红梅.校企双主体参与教育建立校企合作“共赢”机制[J].教育教学论坛,2012(22):277-278. [3]谢海琼,邬国盛.欠发达地区高职校企深度合作共赢机制研究[J].高等职教,2012(7):69-72. [4]胡昌荣.高职“校企合作”人才培养的教学模式比较研究[J].长江师范学院学报,2008,24(4):160-164. [5]刘嵘.案例教学法与启发式教学法在思想政治理论课教学中的运用[J].内蒙古师范大学学报:教育科学版,2007,20(3):122-124. [6]徐南.基于项目驱动的Java课程教学改革研究[J].教育与职业,2011(4):140-141. [7]王润云.计算机基础课程教学改革与实践[J].教育发展研究,2003(2):90-91 关键词:Java;对象;程序设计;教学方法 Java语言是近十年产生的新兴计算机程序设计语言,在许多高等院校都把Java课程作为计算机相关专业课程体系中的一门基础课程,它注重理论与实践紧密结合的同时,又要在实践中完成知识检验,是实践性极强的一门专业基础课程。学生只学理论知识,不用到实践中很难掌握知识点,不会代码编写也很难具备实践操作能力和排错能力,也很难能毕业后以程序员的身份到软件公司就业。因此,如何能让学生学会Java基本内容、如何培养学生的Java面向对象的思想及面向对象的开发模式并能具备一定的代码编写、调试能力、自主创新能力等是教师在授课过程中面临的重大问题。通过对课堂及实训教学方法的改革来改变局面,确保提高学生的能力。 一、教学中存在的问题 1.对学生实践能力培养侧重不够 《Java程序设计》逻辑性较强、概念较多、结构相对复杂,有些知识点不通过编码调试很难理解,同时也较易混淆,不易记忆,对基础知识还没完全熟练掌握的学生来说,综合项目开发就更难以展开、编码寸步难行。有些教师用实践课讲授理论知识,学生的实践时间减少了。 2.部分学生忽略了实践操作能力的重要性 部分学生知识衔接不上时,不能正确认识自己所处的困境,而是排斥实践课,旷课逃课、打游戏等。对待实训任务,学生复制修改,不经任何主观思考、练习,敷衍了事。 3.部分学生在任务开发时目标不明确,规范性差 在任务开发过程中,大多数同学不经过对知识进行筛选、提 炼,就上手编码或者摘取书中代码,并进行修改或重组,对任务需哪些知识能实现,需如何完成、需完成什么等不认真思考。 二、教法改革探索 1.增加学生动手锻炼的机会 培养学生动手的实践能力是学生能够巩固和掌握知识、灵活运用知识的必要条件。只有提供给学生更多的实践机会,才能使他们发挥其个性特点,进一步培养其自主创新的能力。教师布置的任務学生可以增加上机课时形式达成,或将项目在学期末单独利用一到两周时间完成。 2.明确学习目标 Java程序设计课程坚持“以就业为导向”“以企业所需为目标”“以学生为本位”“以实践能力为主位”,培养学生面向对象的思 想及编程模式,锻炼学生的团队协作精神及表达能力。 3.教学方法改革 (1)层级性教学法(阶段性) 层级式教学方法是指,学生教学按照阶段式的推进,由浅入深地讲解,具体可分为较易、中度、较难、附加题几个阶段。学生通过较易代码学习知识点,通过较难和中度题巩固知识的应用,通过附加题对知识灵活应用并能锻炼和提升学生的动手能力、团队合作能力和创新能力。较易题型由教师讲解,并给学生留下相类似的题目让他们自己读、调程序。中度或较难题型由教师给出提示,学生自己编、调程序,需学生在动手前独立思考、独立建立逻辑关系、独立排错。附加题则留给前两个阶段能独立完成的同学,给出关键技术提示,学生课后自行解决。这样可以提升他们的创新能力,展示自己的个性,提升自主解决问题的能力。 (2)竞赛激励教学法 举行一年一度的学生技能大赛,展示学生素质,推动学生对专业知识的学习。学生通过比赛的展示自己,用行动代替语言推销自己,这样可更进一步增加学生的学习意识,增强学生学习的信心。 (3)学生演示法 教师授课前要准备好案例程序,并演示给学生看。在演示时,教师给同学讲解,然后与他们进行共同分析,学生对程序主动分析和思考的会很少。教师可以讲解一个案例后,把类似的案例分配给学生,让学生边编写边思考,并做好程序解释说明,然后给大家演示1~2个类似案例,也可以在学生易犯错的地方用陷阱法,任由学生犯错,通过对错误程序代码的分析加深学生对错误的深刻印象,加强记忆和知识的巩固,促进知识的积累。 (4)现场讨论法 国内的计算机教学方面许多学校提倡以学生为主导的思想,即教师安排一项具有一定难度的工程,题目开放,同学们共同思考,教师给予一定的指导和引导,主要由学生课下实现。下次课中由学生对自己的实现过程进行公开讨论和对比。这种方式可以给学生充分的思考时间,对培养其个性化思考能力和自主创新能力非常有益。 (5)类比法 Java语言自身有一些知识容易混淆。例如Java中的throw与throws都是异常中遇到的,哪个是抛出,哪个是抛弃。再有,Java中comparable与comparator都是对象比较的类,这两个类在使用时有什么区别与注意事项等。 (6)案例法 案例教学将知识点融于精心设计的案例之中,比如在Java语言的教学中设计一个显示文件夹的打开操作程序,在讲到GUI设计、I/O操作等相关章节时便实现相应的知识点学习。 在Java面向对象的教学过程中,需强化学生学习面向对象 语言的目的,学习Java不是仅仅学习软件开发的方式,也不是学习某种开发工具的综合使用,更重要的是树立一种全新的开发模式。 本文对课程教学方法进行了初步探讨,提出了几点建议,对教学方法进行完善和创新,以期能调动学生的学习积极性,逐步提高学生的动手能力,达到学以致用的目的,并能发挥学生的个性化、锻炼学生的创新能力,更进一步提升学生的综合能力,促进学生就业率的提升。 参考文献: [1]邹国霞,唐建清.Java语言教学方法初探[J].福建电脑,2007(9). [2]周宇.Java语言教学方法研究与实践[J].电脑知识与技术,2008(19). [3]张红英.浅析面向对象程序设计[J].河北能源职业技术学院,2003(3). (作者单位 黑龙江省牡丹江农业经济职业学院) 学效果分析教学改进报告 本学期本人担任了软件日语091班的《Java程序设计》课程的教学工作,通过一学期的教学,本人的总结如下: 情况分析:《Java程序设计》课程讲述的内容是Java程序设计。课程以Java为蓝本进行教学,注重操作和程序设计,是一门实用性很强的课程,我比较喜欢,因此从起初就下定决心要教好这门课程了。针对这这个学期的教学工作现在总结如下。 1、采用多媒体教学。用生动形象的教学课件帮助学生理解。一些学生比较难理解的章节内容,我都作成动态的画面,将每一步操作都动态的表示出来,学生有兴趣看,也有兴趣学习。使学生能理解难点内容,掌握重点内容,巩固学习效果。 2、案例教学法和任务驱动法的实施和应用。在教学活动中我采用订单管理系统为教学案例,开展教学。从基本概念到最后的类以及最终项目的完成,都采用这一案例进行。所有实例都可以运行,可以查找结果。在机房,学生可以边操作边运行实例,上课是由于任务驱动,学生操作的积极性很高。 3、在课堂上开展竞赛,学生参与,谁首先完成任务,谁先检查,并且每次检查都有分数记录,因此学生的积极性大大提高,教学效果好,听课认真。 4、项目引领课程,要求学生完成在线考试系统,这是一个由数据库SQL做后台,Java做前台的系统。虽然和真正的软件还是有差距的,但是通过本课程学生可以理解使用Java调用SQL的过程和编写大的数据库软件的方法。在这个案例中,我全程辅导,指导学生完成数据库、表、每个界面和各个代码的编写、讲解、录入。由于这个环节被学校抽到听课和资料检查学生格外认真,我也感到了学生对我的教学工作的支持,我非常满意。尽管他们是大二的学生,但是他们的热情和认真不逊色与其他班级。因此,通过一个学期一门课程和一个实训环节的相处我和这个班级的学生的感情很深。 5、认真作好教案和备课笔记,这是自己最为重要的教学资源,是经验和知识的积累。 一、性质、目的和任务 本课程设计是在《Java Web开发》课程上设置的,是巩固学生所学理论知识、培养学生动手能力并使理论与实际相结合的重要实践环节。本课程设计的目的和任务,是使学生综合应用所学知识完成软件的分析、设计、调试和总结,提高学生对Java Web开发的综合应用能力和解决问题的能力。 二、参考设计内容与指标要求(允许选择其它内容,要求可参此) 1、参考题目: 新闻发布系统、网上书店系统、制造业(或零售业)客户关系管理系统、企业进销存管理系统、制造企业门户网站、班级网站、网上辅助教学系统 也可自己设计其它题目(难度要相当,且经过老师同意),完成系统的可行性研究、需求分析、总体设计、详细设计、编码、测试。 2、总体要求 ①采用面向对象的方法对系统进行分析和设计,要求掌握建模工具的使用如Rational rose、visio,用powerDesigner进行数据库设计。 ②系统设计要实用(模块设计、界面设计、数据库设计) ③编程简练,可用,功能全面,具有较好的健壮性 ④在项目开发过程中,应该按要求编写好各种软件文档 可行性研究报告:说明该软件开发项目的实现在技术上、经济上和社会因素上的可行性,评述为了合理地达到开发目标可供选择的各种可能实施方案,说明并论证所选定实施方案的理由。 项目开发计划:为软件项目实施方案制订出具体计划,应该包括各部分工作的负责人员、开发的进度、开发经费的预算、所需的硬件及软件资源等。 软件需求说明书(软件规格说明书):对所开发软件的功能、性能、用户界面及运行环境等作出详细的说明。 概要设计说明书:该说明书是概要设计阶段的工作成果,它应说明功能分配、模块划分、程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。 详细设计说明书:着重描述每一模块是怎样实现的,包括实现算法、逻辑流程等。用户操作手册:本手册详细描述软件的功能、性能和用户界面,使用户对如何使用该软件得到具体的了解,为操作人员提供该软件各种运行情况的有关知识,特别是操作方法的具体细节。 测试计划:为做好集成测试和验收测试,需为如何组织测试制订实施计划。计划应包括测试的内容、进度、条件、人员、测试用例的选取原则、测试结果允许的偏差范围等。 测试分析报告:测试工作完成以后,应提交测试计划执行情况的说明,对测试结果加以分析,并提出测试的结论意见。 开发进度月报:该月报系软件人员按月向管理部门提交的项目进展情况报告,报告应包括进度计划与实际执行情况的比较、阶段成果、遇到的问题和解决的办法以及下个月的打算等。 项目开发总结报告:软件项目开发完成以后,应与项目实施计划对照,总结实际执行的情况,如进度、成果、资源利用、成本和投入的人力,此外,还需对开发工作做出评价,总结出经验和教训。 软件维护手册:主要包括软件系统说明、程序模块说明、操作环境、支持软件的说明、维护过程的说明,便于软件的维护。 软件问题报告:指出软件问题的登记情况,如日期、发现人、状态、问题所属模块等,为软件修改提供准备文档。 软件修改报告:软件产品投入运行以后,发现了需对其进行修正、更改等问题,应将存在的问题、修改的考虑以及修改的影响作出详细的描述,提交审批。 三、计划与学时安排 1、教师介绍本课程设计的目的、内容、要求、方法和安排。 2、学生完成可行性研究、开发计划、需求分析。 3、教师审查,然后调整确定实施方案。 4、学生完成课程设计的系统设计、编码等环节,指导老师作必要的现场指导。 5、验收。 6、撰写总结报告。 7、答辩与考核 指导教师选择部分学生进行当面提问答辩,答辩既可以以语言表达的方式,也可以直接在机房中进行实际操作与调试。指导教师将综合每一学生的表现及能力进行综合评分。 四、考核评估 结合学生的动手能力,独立分析解决问题的能力和创新精神,总结报告和答辩水平以及学习态度综合考评。成绩分优、良、中、及格和不及格五等。 1、设计与报告 20% 2、软件编程能力 30% 3、综合解决问题能力 20% 4、创新能力 10% 5、学生答辩 10% 2011 ~ 2012 学年 第 一 学期 学 号 20104053020 姓 名 胡勇昌 院 系 信息工程与技术 专 业 计算机工程系 课 程 名 称 JAVA程序设计 课程设计名称 局域网内的多功能聊天室 学 时 学 分 1 指 导 教 师 许烁娜 2011年 12 月 25 日 目录 课程设计报告..........................................................................................................................................1 第1章 引言............................................................................................................................................3 1.1 背景...............................................................................................................................................3 1.2 相关技术.......................................................................................................................................3 1.2.1 JAVA概述...............................................................................................................................3 1.2.2 Socket......................................................................................................................................3 1.2.3 TCP 三次握手.....................................................................................................................4 1.3 术语...............................................................................................................................................4 第2章 需求分析与系统设计................................................................................................................5 2.1 需求分析.......................................................................................................................................5 2.2 系统设计.......................................................................................................................................6 2.2.1多用户在线方案.....................................................................................................................6 2.2.2 系统功能................................................................................................................................6 第3章 系统实施....................................................................................................................................6 3.1聊天室窗口....................................................................................................................................6 3.2 建立客户端窗口...........................................................................................................................8 3.3 内嵌“私聊”窗口.......................................................................................................................9 3.4客服端类继承客户端窗口类,并内嵌私聊程序......................................................................10 第4章 测试..........................................................................................................................................15 4.1 测试环境与使用方法.................................................................................................................15 4.2 功能测试.....................................................................................................................................15 4.2.1聊天室窗口...........................................................................................................................15 4.2.2 客户端窗口..........................................................................................................................16 4.2.3 内嵌“私聊”窗口..........................................................................................................................16 参考文献................................................................................................................................................16 第1章 引言 1.1 背景 网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过广播消息进行实时交谈。聊天室可以建立在即时通讯软件(如MSN Messenger、QQ)、P2P软件、万维网(如 Halapo,Meebo)等基础上,万维网方式更为普通和种类繁多,交谈的手段不局限于文本,更包括语音、视频。通常聊天室是按照房间或频道为单位的,在同一房间或频道的网人可以实时地广播和阅读公开消息。一般情况下,与其它网络论坛、即时通讯不同的是,聊天室不保存聊天记录。 1.2 相关技术 1.2.1 JAVA概述 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 1.2.2 Socket Socket是java中需一要编写较低层次的网络通信程序(例如Cljent/server应用程序)时提供的一种通讯机制。Socket是两个程序进行双向数据传输的网络通信的端点,一般 由一个地址加上一个端口号来标一识。每个服务程序都在一个众所周知的端口上提供服 务,而想使用服务的客户端程序则需要连接该端口。通过Socket的数据是原始字节流信 息,通信双方必须根据约定的协议对数据进行处理与解释。 Socket通信机制提供了两种通信.方式:有连接方式(TCP)和无连接方式(UDP数 据报)。有连接方式中,通信双方在开始时必须进行一次连接过程,建立一条通信链路。通信链路提供了可靠的,全双工的字节流服务。无连接力一式中,通信双方不存在一个连 接过程,一次网络I/O以一个数据报形式进行,而每次网络I /O可以和不同.主机的不 同进程进行。无连接方式开销小于有连接方式,但是所提供的数据传输服务不可靠,不 能保证数据报一定到达目的地”」·。 JAVA的有连接通信采用流式I/O模式。Socket是两个进程间通信链的端点,每个 Sockct有两个流:一个输入流和一个输出流。只要向Sockct的输出流写,一个进程就可 以通过网络连接向其他进程发送数据;同样,通过读Sockt的输入流,就可以读取传输 来的数据。 有连接通信一般要经历以下四个基本步骤ii (1)创建Sockct,建立连接; (2)打开连接到Sockct的输入/输出流; (3)按照一定的一脚议对Socket进行读/写操作; (4)关闭Socket。 第(3)步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种 程序中基本相同。 1.2.3 TCP 三次握手 TCP协议通过三个报文段完成连接的建立,这个过程称为三次握手(three-way handshake),过程如下图所示。 1.3 术语 暂无 第2章 需求分析与系统设计 2.1 需求分析 从技术发面来看,Java语言的优点一要表现在:简.单、面向对象、多线程、安全性 等方面。1.简单性 Java与C++语言灰常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对 必要的功能,如头文件、顶处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集,简化了内存管理的一作。这使程序一设计更加简便,同时减少了出错的可能。2.面向对象 Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的一方法,从而既实现了代码的复用,又提供了一种动态的解决方案。 Java是一种完全面向对象的程序设计语一言,它除了数组、布尔和字符二个基本数据类型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。 Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的 单重继承,即每个类只能从一个类中继承。 Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。3.多线程 多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容.易实现网络上的实时交互操作。 Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线 程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。4.安全性 Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。2.2 系统设计 2.2.1多用户在线方案 2.2.2 系统功能 聊天室程序通常需要完成以下一些基本功能: (I)登录聊天室; (2)启动服务器; (3)关闭服务器; (4)用户之间的聊天; (5)退出聊天室。 本系统其体功能需求如下: (1)聊天室管理员经登录界面登录到管理界而,即系统的服务器端。用户经登录界而 都进入聊天大厅。 (2)不论是管理员还是用户都需一要在登录界面输入正确的用户名和密码后才可以登录 到各自的界面中去。 (3)系统的两个主要界面都是为方便管理员和用户操作的。首先,管理员进入到管理 界而后可以方便的启动/停止服务器,看到在线用户的信息和聊人信息、。用户进入到聊天 大厅中可以聊天,查看服务器状态。 (4)一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有的用户都失去与服务器的连接。 (5)用户的聊天信息录入,重写,发送,接收方便,快捷。 (6)服务器状态,聊天信息和在线用户人数及时刷新。 (7)聊天室系统运行稳定、安全性高、性能可靠。 第3章 系统实施 3.1聊天室窗口 建立服务端窗口类:窗口程序如下 import java.awt.Button;import java.awt.Color;import java.awt.FlowLayout;import java.awt.List;import java.awt.TextArea; import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JTextField; public class chatroomW { JFrame f=new JFrame(“局域网聊天室”);JLabel label1=new JLabel(“端口”);JLabel label2=new JLabel(“发送”);Button button1=new Button(“启动服务”);Button button2=new Button(“发送”);Button button3=new Button(“刷新用户列表”);JTextField text1=new JTextField(5);JTextField text2=new JTextField(25);TextArea area1=new TextArea(26,84);List userList=new List(27);JScrollPane scro1,scro2;public chatroomW(){ chat();} public void chat(){ area1.setBackground(new Color(204,255,255)); area1.setForeground(Color.black); userList.setBackground(Color.gray); userList.setForeground(Color.white); f.setLayout(new FlowLayout());f.add(area1);f.add(userList);f.add(label1);f.add(text1);f.add(button1);f.add(text2);f.add(button2);f.add(button3); f.setBounds(300,200,750,485); f.setResizable(false); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); area1.setEditable(false);text1.setText(“10000”); myEvent(); } public static void main(String args[]){ new chatroomW();} public void myEvent(){} } 3.2 建立客户端窗口 import java.awt.Color;import java.awt.FlowLayout;import java.awt.TextArea; import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JTextField; public class ClientW { JFrame f=new JFrame(“聊天室”);JScrollPane js;TextArea area=new TextArea(19,67);JTextField text1=new JTextField(12);JTextField text2=new JTextField(5);JTextField text3=new JTextField(5);JTextField text4=new JTextField(20);JButton button1=new JButton(“连接”);JButton button2=new JButton(“发送”);JButton button3=new JButton(“私聊”);JLabel label1=new JLabel(“服务器地址”);JLabel label2=new JLabel(“服务器端口”);JLabel label3=new JLabel(“昵称”);public ClientW(){ } public void chat(){ area.setBackground(new Color(204,255,255));area.setForeground(Color.black);f.setLayout(new FlowLayout());f.setBounds(300,200,500,410);f.add(label1);f.add(text1);f.add(label2);chat();// } } f.add(text2);f.add(button1);f.add(area);f.add(label3);f.add(text3);f.add(text4);f.add(button2);f.add(button3);f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setResizable(false);area.setEditable(false);text2.setText(“10000”);text4.setText(null);myEvent();public void myEvent(){} public static void main(String args[]){ } new ClientW(); 3.3 内嵌“私聊”窗口 class netchat{ JFrame f=new JFrame(“私聊”);JLabel label1,label2,label3;Button button1,button2;JTextField text1,text2,text3,text4;TextArea textarea; f.setLayout(new FlowLayout());f.setBounds(300,200,400,310);//设置窗口大小和位置; label1=new JLabel(“对方主机”);label2=new JLabel(“本地端口”);label3=new JLabel(“对方端口”);button1=new Button(“连接”);button2=new Button(“发送”);text1=new JTextField(7);text2=new JTextField(3);text3=new JTextField(3);public netchat(){ f.setResizable(false);//让窗口大小固定; // 闭; } text4=new JTextField(20);textarea=new TextArea(13,53);textarea.setEditable(false);textarea.setBackground(new Color(204,250,255));f.add(label1);f.add(text1);f.add(label2);f.add(text2);f.add(label3);f.add(text3);f.add(button1);f.add(textarea);f.add(text4);f.add(button2);f.setVisible(true);f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);//关闭窗口程序同时关myEvent(); 3.4客服端类继承客户端窗口类,并内嵌私聊程序 import java.awt.Button;import java.awt.Color;import java.awt.FlowLayout;import java.awt.TextArea;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.Socket; import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField; public class Client extends ClientW{ Socket s=null;public Client(){} public void myEvent(){ button1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ s=new Socket(text1.getText().toString(),Integer.parseInt(text2.getText())); new Thread(new LinkC()).start(); area.append(“[系统消息]:连接成功n”); }catch(Exception ex){area.append(“[系统消息]:连接失败n”);} } }); button2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ new SentC(); } }); button3.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ new netchat(); } });} public static void main(String args[]){ new Client();} class LinkC implements Runnable{ public void run(){ try{ BufferedReader bufIn= new BufferedReader(new InputStreamReader(s.getInputStream())); String msg=null; PrintStream ps=new PrintStream(s.getOutputStream()); ps.println(text3.getText()); while(true){ try{ while((msg=bufIn.readLine())!=null){ area.append(msg+“n”); } }catch(Exception ex){break;} } }catch(Exception e){} } } class SentC { public SentC(){ try{ PrintStream ps=new PrintStream(s.getOutputStream()); if(!text4.getText().equals(“")){ ps.println(text4.getText());// area.append(text4.getText());//服务器自动会返回 text4.setText(”“); } }catch(Exception e){} } } //私聊类 class netchat{ JFrame f=new JFrame(”私聊“); JLabel label1,label2,label3; Button button1,button2; JTextField text1,text2,text3,text4; TextArea textarea; public netchat(){ f.setLayout(new FlowLayout()); f.setBounds(300,200,400,310); //设置窗口大小和位置; f.setResizable(false); //让窗口大小固定; label1=new JLabel(”对方主机“); label2=new JLabel(”本地端口“); label3=new JLabel(”对方端口“); button1=new Button(”连接“); button2=new Button(”发送“); text1=new JTextField(7); text2=new JTextField(3); text3=new JTextField(3); text4=new JTextField(20); textarea=new TextArea(13,53); textarea.setEditable(false); textarea.setBackground(new Color(204,250,255)); text2.setText(”10000“); text3.setText(”10000“); f.add(label1); f.add(text1); f.add(label2); f.add(text2); f.add(label3); f.add(text3); f.add(button1); f.add(textarea); f.add(text4); f.add(button2); f.setVisible(true);// f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);//关闭窗口程序同时关闭; myEvent(); } public void myEvent(){ f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ try{ DatagramSocket ds=new DatagramSocket(); byte[] buf=”对方已下线“.getBytes(); DatagramPacket dp= new DatagramPacket(buf,buf.length,InetAddress.getByName(text1.getText()),Integer.parseInt(text3.getText())); ds.send(dp); ds.close(); }catch(Exception ex){} } }); button2.addActionListener(new ActionListener()//事件源是button2 { public void actionPerformed(ActionEvent e) { if(!text4.getText().equals(”“)) new Thread(new Send()).start(); } }); button1.addActionListener(new ActionListener()//事件源是button1 { public void actionPerformed(ActionEvent e) { new Thread(new Rece()).start(); } }); } class Send implements Runnable{ public void run(){ try{UdpSend();}catch(Exception e){textarea.append(”[系统消息]:发送失败n“);}} public void UdpSend()throws Exception{ DatagramSocket ds=new DatagramSocket(); byte[] buf=text4.getText().getBytes(); DatagramPacket dp= new DatagramPacket(buf,buf.length,InetAddress.getByName(text1.getText()),Integer.parseInt(text3.getText())); textarea.append(”[我]: “+text4.getText()+”n“); text4.setText(”“); ds.send(dp); ds.close(); } } class Rece implements Runnable{ int index=0; public void run(){ try{ UdpRece(); }catch(Exception e){ textarea.append(”[系统消息]:连接失败n“); } } public void UdpRece()throws Exception{ while(true){ DatagramSocket ds=new DatagramSocket(Integer.parseInt(text2.getText())); if(index==0){textarea.append(”[系统消息]:连接成功n“);} byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf,buf.length); ds.receive(dp); String data=new String(dp.getData(),0,dp.getLength()); textarea.append(dp.getAddress()+” “+data+”n"); index++; ds.close(); } } } } } 第4章 测试 4.1 测试环境与使用方法 测试环境:测试环境:电脑安装Java JDK 服务器端使用方法:打开服务启动,点击“启动服务”,提示“启动服务成功”表示正常启动。否则,先关闭服务端,再重新打开,启动服务。客户端使用方法:打开客户端,输入“服务器地址”,点击“连接”,如成功连接系统提示“成功连接”,并收到服务端返回的“欢迎”信息,否则关闭并重新启动。 私聊功能使用方法:点击面板上的“私聊”按钮,输入对方的IP地址,点击连接,如连接成功系统会提示“连接成功”。当对方断开时会收到“对方已下线”提示。如果要同时跟多人私聊,则要改变本地端口值,并告知对方。 4.2 功能测试 4.2.1聊天室窗口 4.2.2 客户端窗口 4.2.3 内嵌“私聊”窗口 参考文献 用JAVA程序实现参考文献的录入与生成 刘玮玮 2009 《福建电脑》 基于Java移动Agent系统的安全参考模型 周屹 2007 《黑龙江工程学院学报》 “Java程序设计”是计算机相关专业教学体系中的一门重要课程, 重点培养学生Java技术体系中的基础知识。目前的“Java程序设计”课程在实际教学中主要存在以下几个方面的问题: (1) 学生普遍反映对Java程序设计有兴趣, 但同时也畏难。学生的兴趣来源于实际就业需要, Java的广泛应用是学生们想学习Java的主要原因。学生们通常对编程没有足够的了解, 在初学编程时, 很少会有学生真的因为爱好编程而学习Ja va。 由于程序设计不仅要求设计者具有很强的逻辑思维能力, 思路清晰, 也要求设计者能不断自我学习, 适应现代编程技术的变化。这对一些学生造成了学习压力, 进而导致这些学生畏难, 害怕编程。 (2) 希望获得更多实用技能和动手能力的培养。“Java程序设计”在课程改革以前, 主要通过传统的语言教学方法来进行, 在内容上从了解语言特征入手, 重点强调基础Java语法。尽管在实践教学中逐步引入了案例教学, 不过仍缺乏如何运用Java完成实际项目的内容。另外, 教学内容中也欠缺一些与编程相关的能力培养。包括使用参考文档的能力、使用开发工具的能力、debug的能力和项目部署的能力等。虽然这些内容均不属于传统教学范围, 但都是学生在实际动手环节中必须用到的能力。因此有必要在“Java程序设计”教学内容和方法上做一些调整, 以促进学生实用技能的提高。 2“Java程序设计”教学改革 2.1 课堂教学改革 为提高教学质量, 提高学生学习兴趣, 目前在“Java程序设计”的课堂教学中, 教学内容按难易程度被重新组织, 简化了难度较大但实用性不大的内容, 然后将与程序设计相关的一些技能如项目配置、部署和测试等引入到课堂教学内容中来。 (1) 合理安排教学内容, 引入项目教学法。目前的“Java程序设计”教学内容定位于Java SE知识范围之内, 而通用的教材中所包含的内容往往只是Java SE的一部分。如果完全按照教材上的知识点组织以及顺序讲解, 那么一方面学生将难于借助阶段性的学习内容完成小型项目, 其次某些知识点如流控语句等, 可能和其它语言的教学内容发生重复, 会导致学生感到乏味。因此为提高教学质量, 在实践中我们从教学内容和教学方法两方面入手进行了改革。 首先, 在内容上对全部Java SE知识点按类别以及难易程度加以区分。然后依据项目实践需要和学生能力水平, 精心选择具体的教学范围, 安排知识点的教学次序。实践中我们将“Java程序设计”的教学内容分成了基础部分、高级部分和扩展部分3类。其中基础部分注重Java语言的核心语法, 采取初期了解, 后期通过项目强化记忆的方法进行教学。高级部分与项目实践有紧密联系, 在课堂上借助小型项目重点讲解。扩展部分包括项目实践相关技能, 穿插到课堂、实验和练习中以帮助学生提高项目实践能力。 其次, 在实践教学中引入项目教学法。项目教学法是指在一个教学过程的某一个阶段, 借助项目来完成教学目标的活动。项目教学法通常将学生分成不同的小组, 完成一个具体项目的开发工作。在“Java程序设计”教学实践中, 选取了“数独”、“二维魔方”等常见的小型游戏程序作为项目教学的主要内容, 串联全部基础以及部分高级知识点, 按由易到难的次序进行讲解。然后以学生为主体, 参考老师讲解的内容分组完成目标项目。通过这种形式全面培养了学生分析问题和解决问题的能力。 (2) 通过小型案例讲解独立知识点, 以案例模仿的形式促进学生动手能力。在“Java程序设计”课堂教学中采用了案例教学方法对每一个单一知识点进行教学。选取的案例都尽可能小而精, 针对特定问题。例如讲解循环和条件时, 通过一个猜数字的游戏程序说明循环和条件在Java程序中的使用。在讲解类和对象时, 通过一个骑车程序来讲解类、对象、属性和行为之间的关系。为了达到更好的案例教学效果, 我们不仅要求学生读懂课上的案例, 还要求学生在练习和实验中以教学案例为模板, 通过模仿、修改、完善模板等形式来锻炼读写程序的能力。这样不仅能帮助学生巩固已学的知识, 同时也能帮助学生提高自学能力和设计能力, 强化案例教学的效果。 2.2 实验教学的改革 实验课是“Java程序设计”课程的重要组成部分, 是通过实际的上机操作来巩固和强化课堂上的理论知识的重要手段。目前的实验课内容往往全部来源于实验教材, 并且多数实验的类型属于独立完成的验证型实验。实践中我们借鉴国外大学的实验课的组织, 通过如下手段改进了实验教学过程。 (1) 增加综合性、设计性实验促进学生动手能力。首先将“Java程序设计”实验内容按难度分成基础复习、前后综合和提高3部分内容, 并按照一定比例组织, 如3:6:1。在基础复习部分, 主要以最近的课堂教学内容为基础, 在提供必要的参考资料、实验工具和实验方法后, 以验证型实验为主, 要求学生熟悉课堂教学内容。在前后综合部分, 以综合和设计型实验为主, 要求学生将以前所学的全部知识综合运用, 通过查阅参考资料, 设计出合乎目标要求的程序, 最终达到复习以前知识、提高动手能力的目的。在提高阶段, 以综合型实验为主, 要求学生提前了解一部分课堂上涉及较少的知识, 以提高学生的自学和研究能力。这样的实验安排表面上只花了少量的时间对基础内容进行复习, 但实际上每次综合阶段的实验都是对以前所学的一次强化。学生可以对以前所学的知识做到融会贯通。另外综合和设计型实验也迫使学生必须参与思考、研究和自主学习。因此这样一种安排可以显著提高学生学习能力。 (2) 采用分组实验组织形式。在实验的组织形式上, 除了采用独立实验对知识点进行强化熟悉之外, 我们在实践教学中也仿照国外大学补充了少数分组实验, 以完成小型任务为目标, 锻炼学生合作和设计能力。在分组实验中, 学生以3个人左右的小规模进行分组, 这样一方面可以保证每个学生都有动手实践的机会, 同时也能充分参与合作。学生个人的最终成绩取决于团队的最终成绩、个人在团队中的贡献以及教师对个人表现的评价。分组实验中通过竞争机制和团队成员的交流可以促进学生学习兴趣和提高团队合作能力。 3 实践效果与总结 在07至08年的实践教学过程中, 以上的系列改革措施在个别班级的实践教学中采用, 并同其它同年级没有采用改革措施的班级进行了跟踪比较。通过一段时间对学生上课情况的观察以及学习成绩的反馈, 发现在采用了改革措施的班级中, 学生的学习兴趣有明显提高, 学习成绩普遍比没有采用改革措施的班级提高5%~10%。另外在采用了新措施的班级中, 学生不仅积极完成课内任务, 同时也开始主动自学, 共同讨论和研究一些知识点, 学习气氛浓厚。特别是设计型实验以及Greenfoot等工具的引入, 激发了学生的学习兴趣和设计热情, 起到了非常理想的实践教学效果。事实证明, 这些改革措施不仅可以帮助学生对Java编程基础知识全面学习, 同时也能锻炼实际动手能力, 激发学习兴趣, 提高实践教学质量。 参考文献 [1]全成斌, 杨士强, 赵有健.计算机工程实践教学的改革与探索[J].计算机教育, 2008 (4) . 摘要:目前,很多高校的软件学院都开设有《Java程序设计》这门课程,但都存在重理论,轻实践的问题。本文在深入分析该门课程目前存在问题的基础上,提出了相应的解决办法,并且通过一个学期的课程改革试验,证明了建议解决办法的可行性及有效性。 关键字:Java教学改革;应用型人才;软件学院 Abstract: At present, many university software schools have“Java programming” course, but there are pay attention to theory, light practice problems. Based on in-depth analysis of the course at present on the basis of existing problems, and puts forward the corresponding solutions, and through a semester course reform experiment, proved that the proposed solution is feasible and effective. Keyword:Java teaching, Application type talents, School of software 一、Java课程概述 《Java程序设计》课程是软件学院学生的核心专业课程,它的内容是介绍J2SE相关知识,包括Java语法基础、面向对象理论知识、基本类库、图形用户界面及事件处理机制、异常处理机制、多线程程序设计、数据库的连接访问、输入输出流和网络编程等。本课程学习的效果不仅关系到后续课程的学习和毕业设计的效果,而且直接关系到学生程序设计水平的提高和专业素质的培养。 二、问题分析及建议 以下结合本人多年的Java开发及教学经历,对一些存在的问题进行分析并提出相应的建议。 1.加强实践训练及实践管理 问题分析:Java语言是一门实践性很强的计算机语言,但目前成了单一为考试而设置的一门课程,其结果是有的学生连最基本的实践操作也不会做。有的实践教学学生只是将书上的程序输入电脑运行一下,并没有去思考为什么会是这样的结果。学生只是机械地完成了程序的运行,过后就忘了,没有达到练习的目的,更不能做到学以致用。 建议:在条件许可的情况下,教师上课均应采用多媒体教学。在讲授Java理论的同时,在课堂上给学生进行使用演示,这样不仅使学生对所学的理论知识有直观的认识,而且能提高学生的学习兴趣,引发其好奇心,促使课后实际动手练习。另外,教师在讲授该门课程时,除了教材上既有的实例外,还应多找一些典型的实例,在课堂上给学生讲解和演示,加深学生的理解。 2.选择合适的教材 问题分析:传统的教学方法都是注重教学的系统性和完整性.按照一般教科书的编排顺序组织教学,想把Java语言讲透,至少得100课时以上。这样的教材内容,必然有大量的语法结构生涩且难以理解,使学生望而生畏,学习效果较差。 建议:尽量选择有较多实际例子的教材,或者选择有配套实验手册的教材,方便学生实践练习。 3.注重双师型教师的培养 问题分析:在指导学生使用Java程序设计实践教学方面,由于目前双师型教师的匮乏,师资队伍存在着知识结构、能力结构不合理问题,难以完成应用型人才Java程序设计的实践教学要求。 建议:教师在上课之余,应该多学习Java领域的最新技术,并且利用假期时间多去企业参观,学习企业用的最多的开发技术,才能教出符合企业需求的信息技术专业人才。 三、课程改革及成效 在对Java程序设计课程目前存在的问题深入分析后,本人上学期对第2部分中提到的各个建议解决办法进行了试验,以下简单予以介绍: (1)关于加强实践方面。在讲述理论的同时,教材90%的代码均在上课时现场输入、现场演示、现场评讲。另外,除了教材上的实例,还通过查阅搜寻一些典型的实例,在相应的章节进行演示。 (2)关于教材选择方面。经过仔细对比研究后,上学期选用了机械工业出版社的《Java语言程序设计教程》一书作为上课的教材。本书由叶乃文主编,于2010年第一次出版,所讲Java技术和业界最新技术基本同步,而且综合性实例较多,非常方便学生进行课后练习。 (3)关于双师型教师培养方面。2010年暑期,去北京中关村一些知名IT企业进行学习参观,历时20余天。通过学习参观,了解到目前企业最新的Java应用人才需求,也学到了不少企业的开发经验,返回学校后对学生进行了相应的指导,学生反响强烈。 上学期,经过以上3点措施的实施,Java程序设计课程的教学效果相比以前明显改善,学生们普遍反映良好。具体表现为:因为实践动手多了,学生对学习Java的兴趣提升,实践动手能力快速提升,上机作业质量明显提升,教学效果持续改善。 四、小结 针对应用型高等学校人才的特点,作者依据多年从事Java技術开发的实际工作经验与理论教学实践经验,分析了企业对Java技术人才的需求及现今Java程序设计课程体系中存在的问题,提出了一些建议解决办法,并进行了相应的课程改革实践。实践结果证明了提出的建议解决办法的可行性和有效性。 【参考文献】 [1]朱剑锋,王冬,熊志斌,尹成国.《项目教学法在Java程序设计课程教学中的应用》[J].琼洲学院学报.2011,(2):82-84. [2]张建东.《Java程序设计教学探讨》[J].科技信息.2009,(24):700. 【java课程心得体会】推荐阅读: JAVA课程设计员工信息管理系统10-12 学习课程改革及课程标准心得10-15 中国茶艺课程心得体会感想心得09-08 《人文课程》学习心得06-25 《课程标准》读书心得08-11 课程标准学习心得08-13 mba课程心得01-19 《课程标准》学习心得02-07 油画课程的心得体会08-10 学习廉政课程心得体会08-312.java课程心得体会 篇二
3.Java课程教法改革初探 篇三
4.Java课程教学小结 篇四
5.Java Web开发课程设计 篇五
6.java聊天室课程设计报告 篇六
7.java课程心得体会 篇七
8.java课程心得体会 篇八