第一篇:java课程设计选题
JAVA课程设计
JAVA程序设计课程设计报告
目 录
一、 项目背景及意义: ............................................... 2
二、 系统描述 ............................................................... 2
三、 分析与设计 ........................................................... 3 1. 分析 ....................................................................... 3 2. 功能模块划分 ....................................................... 3 3. 功能模块流程图 ................................................... 5 4. 各模块的关键代码 ............................................... 5
四、 系统测试 ............................................................... 5
五、 课程设计进度 ..................................................... 13
六、 心得体会 ............................................................. 13
七、 参考文献 ............................................................. 14
八、 附录 ..................................................................... 14
一、 项目背景及意义:
记事本千百年来都在人类的工作生活中起到重要的作用,计算机革命电子产品未出现之前,人们的记事都是基于纸质加笔两者的简单记事,也即单纯的文本记录。直到计算机的出现和更新换代,高科技电子产品大行其道,人们日益将在纸质上的记事转移到将事件记录在个人电子设备如PC上,现在基于电子移动设备如手机和平板等的记事本app开发更是迅猛,功能更加丰富多彩,能记录的不单纯是文本了,人们能将声音和图片甚至视频结合起来,将一件事“有声有色”地记录下来,保存在个人电子设备产品中。近年来产生的采用云存储技术的“云笔记”,更是能让人们随时随地将集文本、语音、图像和视频于一体的事件记录保存在所谓的“云端”,能同步到个人其他设备中,解决了个人资料和信息跨平台跨地点的管理问题。
现在我们以有限的资源以及智慧力量,用Java语言编写一个可以在装有jar模拟器的个人电子移动设备上使用的简单记事本软件,没视频记录功能和基于网络功能但却能集文本、声音和图像于一起记录的功能的记事本,我们将轻便和简洁走向极致!所以此记事本软件操作起来简单易上手,能给带来同学简单便捷的记事体验。另外,这不单纯是个人人都可以打开的记事本,使用时需要账号密码登陆,因此能较好地保障个人隐私。
二、 系统描述
Java的前身是Oak,它一开始只是被应用于消费性电子产品中。后来它的开发者们发现它还可以被用于更大范围的Internet上。1995年,Java语言的名字从Oak编程了Java。1997年J2SE1.1发布。1998年J2SE1.2发布,
2 标志Java2的诞生。十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。Java的体系结构由Java语言、Java class、Java API、Java虚拟机组成。它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。Java的平台标准有Java ME,Java SE和Java EE。Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit 简称JDK是大多开发工具的基础。以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。
在本程序设计中,因为需要开发的是记事本程序,规模较小,内容较少,所以选择了适合初学者使用的eclipse开发工具。
三、 分析与设计
1. 分析
现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed, xint 。功能也是应有尽有,有能改变字体的,有能改变文字颜色的。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的笔记本程序。 2. 功能模块划分
程序构建的记事本程序具有Windows系统记事本工具基本功能,并且能够创
3 建多个不同的用户和保存图片功能。以下是具体说明: 第一部 登陆界面
(1) 用户名和密码输入文本框,供已注册的用户输入用户名和密码。 (2) 登陆控件,在用户名和密码正确的前提下,进入软件主界面。
(3) 注册控件,点击此按钮,将进入用户创建,创建之后用户名和密码会自动保存在电脑的相应文件中。 第一部分 菜单栏
(1)菜单中有“新健”,“删除”,“显示”,“菜单”,“帮助”五个主菜单。 (2)“新建”有“新建笔记”“新建笔记本”二个子菜单:分别用于创建新的笔记和新的笔记本。
(3)“删除”中有“删除笔记”和“删除笔记本”二个子菜单,和“新建”相对应。
(4)“显示”中可以选择界面的风格,有Metal风格、Windows风格、Motif风格、Nimbus风格;还有界面排版的选择,可以选择水平显示或垂直显示。 (5)“帮助”菜单中有关于笔记本程序的说明,作者等信息。 第二部分 笔记本排列区
显示用户创建的所有笔记本。 第三部分 笔记显示排列区
此处主要显示选中笔记本中的所有笔记,并且可以在此区右击来创建、删除笔记、查看笔记,当然也可以在菜单栏中的“新建”和“删除”菜单中创建和删除笔记。
第四部分 笔记编辑区
此部分为用户设计选择操作和右键操作,可以在笔记中插入图片、更改字体颜色、和插入时间;方便用户进行一系列的编辑操作,增强本记笔记本的用户体验性能。
4 3. 功能模块流程图
4. 各模块的关键代码
1构造函数创建窗口界面 主菜单,子菜单
public MainFrame(String name) {
this.name=name;
this.setUser_path("Users/"+name);
this.setBook_Path(this.getUser_path()+"/默认笔记本");
this.setNote_Path(this.getBook_Path()+"/默认笔记"); //
一、菜单界面
menu=new Menu(this);
/**
二、 创建三个JPanel *1.l笔记正文 TextPanel
*2.笔记名目录及查找方式 DirectoryPanel *3.笔记类型目录及排序方式选择 NoteTypePane */
/*笔记正文部分*******/ TextPanel=new JPanel(); rightPanel=new RightPanel(TextPanel,this);
} /*文件名目录部分******/
DirectoryPanel=new JPanel(); midPanel =new MidPanel(DirectoryPanel,this); /*笔记类型目录部分*****/
NoteTypePanel =new JPanel(); leftPanel=new LeftPanle(NoteTypePanel,this); leftPanel.update_Left_view();
//
三、处理拆分窗格
splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true); splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M);
//
四、设置标题等
this.setTitle(name+" 的笔记本"); this.setLocation(200,100); this.setSize(1000,600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); 2 添加右键菜单并为其添加监听器
public RightPanel(JPanel panel,MainFrame mainFrame)
{ this.mainFrame=mainFrame; this.panel=panel;
//创建一个 文本域存放文字 JTextArea textPane =new JTextPane(); //设置自动换行
textPane.setFont(new Font("", 1, 12)); jsp_Pane=new JScrollPane(textPane);//滚轮
//设置鼠标右击弹框效果
//cut
cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png"));
cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x"
cutItem.addActionListener(this);
//copy
copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png"));
copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置
6 快捷键 "ctrl O"
copyItem.addActionListener(this);
//paste
pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png"));
pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v"
pasteItem.addActionListener(this);
saveItem=new JMenuItem("Save",new ImageIcon("image/save.png"));
saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s"));
saveItem.addActionListener(this);
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="Cut"){//剪切
textPane.cut(); }else if(e.getActionCommand()=="Copy"){//复制
textPane.copy(); }else if(e.getActionCommand()=="Paste"){//粘贴
textPane.paste(); }else if(e.getActionCommand()=="Save"){//保存
this.book_Save(); }else if(e.getSource()==image_Button){//插入图片
String temp=Tools.open_Choose(); if(!temp.equals("not")){
textPane.insertIcon(new ImageIcon(temp)); }
}else if(e.getSource()==font_Button){//修改字体颜色
Color c=JColorChooser.showDialog(this, "Color", Color.black); textPane.setForeground(c); }else if(e.getSource()==timeButton){//插入时间
Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式
String hehe = dateFormat.format( now );
textPane.replaceSelection(hehe);
}
3 设为Document类型
public static void setDocument(File file) {
try {
} JTextPane tempPane=new JTextPane(); FileOutputStream outputStream=new FileOutputStream(file); ObjectOutputStream oos=new ObjectOutputStream(outputStream); oos.writeObject(tempPane.getDocument());
oos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block
e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace(); } 系统测试
1、笔记本登陆
2 、用户注册
3、菜单栏 a.总菜单
b.新建菜单
8
c.删除菜单
d.显示菜单
e.“菜单”菜单
f.帮助
10 4.导入笔记、导出笔记、及插入图片选择
5.字体颜色选择
6.插入时间
7、插入图片
四、 课程设计进度
我们进行了若干阶段的部署,令课题研究可以在每个阶段有条不紊地进行。具体如下:
(一)理论学习和开题论证
1.浏览相关网站,查阅与课题研究的相关理论、研究方法; 2.运用文献研究法,深入学习java理论,对要有关课题研究的知识进行理论上的研究和探讨。 3,制订研究计划和方案 。
(二)第一阶段
1.以调查法为主开展研究。(1)对有关java的课题设计进行调查,查阅网络上java应用的设计案例,并分析和总结,寻找思路。(2)对更新频率快的java应用进行追踪,采取观察,评价、讨论的方式分析和总结。
2.制订第二阶段实验方案,为下阶段实验做准备。
(三)第二阶段
1.按计划在继续第一阶段实验的基础上,进一步加强java应用的实施和研究。采用实验法对上一阶段的总结的结论进行验证和拓展。
2.让同学体验一下我们初步完成的作品,根据他们用完之后的感受,进一步修正作品存在的问题,完善作品。
(四),总结阶段
1.收集和整理研究资料,参照相关书籍分析和研究实验情况 2.制订总结阶段计划 3.总结和提炼研究成果 4.全面总结实验工作 5.解题论证
6.成果展示(课题报告) (五) 总结阶段(2013.12) 整理材料,撰写课题报告。
五、 心得体会
此次课程设计由我们小组一起共同合作完成,花费了差不多两个月的时间。在这期间我们共同协作,互帮互助取得了很好的效率,也为我们构建友好的同学关系,学习气氛良好做出了一定的贡献。在这期间我领略到了团队协作的重要性, 13 也看到了团队合作的高效率性。还有通过这次试验我们领悟到了团队的力量是巨大的,也学习到的一些学习方法,比如追查API,如何在短时间内学习一个自己不懂的东西那就是利用好所有的搜索引擎,多去图书馆找资料。总之此次课程设计我们不仅长了学科知识,在生活上我也长了见识。
六、 参考文献
a.黄晓东 等编著 Java课程设计案例精编(第二版)[M].北京:中国水利水电出版社,2007 b.李兴华 等编著 Java开发实战经典Java开发实战经典 北京:清华大学出版社,2009 C.李尊朝 苏军 Java程序设计(第二版) 图形用户界面设计、Swing组件 中国铁道出版社,2007
七、 附录
1.程序结构
14 2.程序
(1)Tools.java package common;
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream;
import javax.swing.*;
public class Tools {
/**打开选择框 返回详细地址*/ public static String open_Choose() {
JFileChooser jfc1=new JFileChooser();
jfc1.setDialogTitle("请选择...");
int judge=jfc1.showOpenDialog(null);
jfc1.setVisible(true);
//得到文件的完全路径
if(judge==JFileChooser.APPROVE_OPTION)
return (jfc1.getSelectedFile().getAbsolutePath());
else
return "not"; } /**保存选择框 返回详细地址*/ public static String save_Choose() {
JFileChooser jfc1=new JFileChooser();
jfc1.setDialogTitle("请选择...");
int judge=jfc1.showSaveDialog(null);
jfc1.setVisible(true);
//得到文件的完全路径
if(judge==JFileChooser.APPROVE_OPTION)
return (jfc1.getSelectedFile().getAbsolutePath());
else
return "not";
}
/**显示对话框,需要传递 标题和显示内容*/ public static void showMessage(String text,String title)
15 {
JOptionPane.showMessageDialog(null,text,title,
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); } /**新建笔记时将笔记设为Document类型,方便存储图片,在本地不能打开*/ public static void setDocument(File file) {
try {
JTextPane tempPane=new JTextPane();
FileOutputStream outputStream=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(outputStream);
oos.writeObject(tempPane.getDocument());
oos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /**删除文件 传一个文件地址 返回一个boolean 为了方便删除文件夹才将此方法提取出来*/ public static boolean deleteFile(String path) {
File file=new File(path);
return (file.delete()); }
/**删除文件 传一个文件地址
返回一个boolean 先删除里面的文件再删除文件夹*/ public static boolean deleteFolder(String path) {
File folder=new File(path);
File[] list=folder.listFiles();
for(int i=0;i deleteFile(path+"/"+list[i].getName()); return (folder.delete()); } } (2)User.java package common; /** 16 * 处理用户属性 * 为用户创建自己的专有途径 * 如果有了则不创建 */ import java.io.*; import javax.swing.JTextPane; import javax.swing.text.Document; import view.MainFrame; public class User { public User(String name) { //如果第一次登录的话,为用户新建一个专属区 File file=new File("Users/"+name); if(!file.exists()) { try { file.mkdir(); } catch (Exception e1) { e1.printStackTrace(); } //第一次登录创建默认笔记本 File book=new File("Users/"+name+"/默认笔记本"); try { book.mkdir(); } catch (Exception e1) { e1.printStackTrace(); } //第一次登录创建默认笔记 File note=new File("Users/"+name+"/默认笔记本"+"/默认笔记.ser"); try { note.createNewFile(); Tools.setDocument(note); } catch (Exception e1) { e1.printStackTrace(); } } //构造完毕 正式进入笔记本 new MainFrame(name); } } (3)login_zhuce.java package login; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import common.User; import view.MainFrame; public class login_zhuce extends JFrame implements ActionListener { JPanel jp0; JPanel jp1,jp2,jp3,jp4,jp5; JTextField jtf; JPasswordField jpf; JLabel jl1,jl2,jl3; JButton jb1,jb2,jb3; ImageIcon bg; public static void main(String[] args) { // TODO Auto-generated method stub login_zhuce lz = new login_zhuce(); } public login_zhuce(){ try {//默认 NImbus风格 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); } jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jp1.setOpaque(false); jp2.setOpaque(false); jp3.setOpaque(false); jp4.setOpaque(false); //no.1 jl1 = new JLabel("用户名"); jtf = new JTextField(10); jp1.add(jl1); jp1.add(jtf); //no.2 jl2 = new JLabel("密 码"); jpf = new JPasswordField(10); jp2.add(jl2); jp2.add(jpf); //3 jb1 = new JButton("登陆"); jb1.addActionListener(this); jb1.setActionCommand("denglu"); jb2 = new JButton("取消"); jb2.addActionListener(this); jb2.setActionCommand("quxiao"); jb3 = new JButton("注册"); jb3.addActionListener(this); jb3.setActionCommand("zhuce"); jp3.add(jb1); jp3.add(jb2); jp3.add(jb3); this.setLayout(new GridLayout(4,1)); this.add(jp4); this.add(jp1); this.add(jp2); this.add(jp3); bg = new ImageIcon("image//huashi.jpg"); jl3 = new JLabel(bg); jl3.setBounds(0, 0, 300, 200); this.getLayeredPane().add(jl3,new Integer(Integer.MIN_VALUE)); jp5 = (JPanel)this.getContentPane(); jp5.setOpaque(false); //设置透明 this.setTitle("笔记本登陆"); this.setSize(300,200); // 获取屏幕分辨率,以此设置程序出现在屏幕中央 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension testSize = getSize(); this.setLocation((screenSize.widthtestSize.width) / 2, (screenSize.height - testSize.height) / 2); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 24 public void actionPerformed(ActionEvent e){ if(e.getActionCommand().equals("queding")){ String st1 = "ff"; String st2 = ".txt"; String st3 = this.jtf1.getText(); String st4 = st1 + st3 +st2 ; System.out.println(st4); File f = new File(st4); if(!f.exists()){ String password1=new String(jtf2.getPassword()); String password2=new String(jtf3.getPassword()); System.out.println(password1); System.out.println(password2); if (!(password1.equals(password2))){ JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); this.jtf2.setText(null); this.jtf3.setText(null); } else { try { f.createNewFile(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } FileWriter fw = null; BufferedWriter bw = null; try { fw = new FileWriter(st4,true); bw = new BufferedWriter(fw); bw.write(st3+""); bw.close(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } finally{ try { fw.close(); } catch (IOException e1) { 25 // TODO Auto-generated catch block e1.printStackTrace(); } } try { fw = new FileWriter(st4,true); bw = new BufferedWriter(fw); bw.write(this.jtf2.getPassword()); bw.close(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } finally{ try { fw.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } JOptionPane.showMessageDialog(null, "创建账户成功", "恭喜你", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); this.dispose(); login_zhuce lz = new login_zhuce(); } } else { JOptionPane.showMessageDialog(null,"该用户名已被占用,请重新输入用户名","错误提示", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); System.out.println("该用户名已被占用,请重新输入用户名"); this.jtf1.setText(null); } // if (this.jpf1.getText()!=this.jpf2.getText()){ // JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示", // JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); // this.jpf1.setText(null); // this.jpf2.setText(null); // } } 26 else if(e.getActionCommand().equals("quxiao")){ this.dispose(); System.exit(0); } } } (5)LefgPanle.java package view; /** * 将卡片布局修改 修改成仅有两片 * 第一片 所有笔记 按钮 * 第二片 所有笔记 目录 */ import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; public class LeftPanle extends JPanel implements ActionListener,MouseListener{ /**************笔记本类型部分声明*****************/ CardLayout cardLayout;//卡片布局的方式 JPanel firstPanel,secondPanel;//分别存储两片 //第一片声明 JPanel allBookPanel,firstTempPanel;//所有笔记 JButton allBook;//所以笔记,排序,回收站的按钮 JScrollPane allBookjsp; //第二片声明 JPanel secondTempPanel,timePaenl_o; JButton allBook_o;//所以笔记,排序,回收站的按钮 JScrollPane timePaenljsp_o; //处理文件部分内容 File book; String [] book_name; JLabel[] member; JPanel panel; MainFrame mainFrame; public final int TOTAL=20; /**************笔记本类型部分声明结束*****************/ 27 public LeftPanle(JPanel panel,MainFrame mainFrame) { this.mainFrame=mainFrame; this.panel=panel; //处理第一片11111111111111111111111111 //设置初始界面 显示 所以笔记,排序,回收站的按钮 //ImageIcon imageIcon=new ImageIcon("image/note.png"); allBook=new JButton("所有笔记",new ImageIcon("image/expand.png")); allBook.addActionListener(this);//点击按时间排序时显示第二片 allBookPanel=new JPanel(new GridLayout(TOTAL,1,1,4)); member=new JLabel[TOTAL]; for(int i=0;i member[i]=new JLabel(""); member[i].addMouseListener(this); } allBookjsp=new JScrollPane(allBookPanel);//滚动 firstPanel=new JPanel(new BorderLayout());//将第一片设置为边界布局 firstPanel.add(allBook,"North"); firstPanel.add(allBookjsp); //处理第二片222222222222222222222 //仅有一个按钮 allBook_o=new JButton("所有笔记",new ImageIcon("image/collapse.png")); allBook_o.addActionListener(this);//点击所有笔记时 显示第一片 secondPanel=new JPanel(new BorderLayout());//将第二片设为 边界布局 secondPanel.add(allBook_o,"North"); //进行卡片布局 cardLayout=new CardLayout(); panel.setLayout(cardLayout); panel.add(firstPanel,"1"); panel.add(secondPanel,"2"); } //更新leftPanel中的笔记本,在新建或删除笔记本是需要刷新 并附带刷新右边两个 28 Panel public void update_Left_view() { book=new File(mainFrame.getUser_path()); book_name=book.list(); if(book.exists()) { for(int i=0;i { 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); 29 // // // // } } //保存当前笔记本的路径 如 ... mainFrame.setBook_Path(book.getAbsolutePath()+""+jl.getText()); //点击打开一个笔记本 刷新中间的目录 mainFrame.midPanel.update_Mid_View(); } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.red); //jl.setFont(new Font("",1,30)); //在笔记本界面操作 允许删除笔记本 不允许删除笔记 mainFrame.menu.delete_item[0].setEnabled(false);//不允许删除笔记 mainFrame.menu.delete_item[1].setEnabled(true);//允许删除笔记本 } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.black); //jl.setFont(new Font("",1,12)); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==allBook) { //cardLayout.show(this.getContentPane(), "2"); cardLayout.next(panel); }else if(e.getSource()==allBook_o){ 30 //cardLayout.show(this.getContentPane(), "1"); cardLayout.next(panel); } } } (6)MainFrame.java package view; /** * 笔记本 java版 * 1、将主界面分为四块 北边的菜单 以及左中右的笔记本目录,笔记目录和笔记内容 * 2、左边目录为卡片布局,实现点了"所有笔记"弹出所有笔记的效果 * 3、中间显示笔记目录 采用网格布局 每个网格用了JMenuItem * 4、右边是一个JTextArea可能会改成JTextPane * 5、实现了新建删除笔记(本),但界面刷新有点问题 (会重叠) * 6、采用MVC的思想实现时事刷新界面的效果 * 7、鼠标右击删除新建 测试成功(鼠标右击是笔记本的新建与删除没有) * 8、注册登录系统 已测试成功 在包login里面 * 9、图片的问题已成功解决 * 10、可以更改字体颜色(大小没有写),以及插入时间等 * 11、显示处添加实现多种版本的切换(如可切换成windows) */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import common.User; public class MainFrame extends JFrame implements ActionListener{ Menu menu;//连接菜单栏 JPanel NoteTypePanel,DirectoryPanel,TextPanel;//三个大Panel JSplitPane splitM_R,splitL_M; LeftPanle leftPanel;//左边第一个Panel MidPanel midPanel;//连接中间Panel RightPanel rightPanel;//连接右边Panel //存放路径 31 public String name=null; public String user_path=null; public String book_Path=null; public String note_Path=null; public MainFrame(String name) { this.name=name; this.setUser_path("Users/"+name); this.setBook_Path(this.getUser_path()+"/默认笔记本"); this.setNote_Path(this.getBook_Path()+"/默认笔记"); // 一、菜单界面 menu=new Menu(this); /** 二、 创建三个JPanel *1.l笔记正文 TextPanel *2.笔记名目录及查找方式 DirectoryPanel *3.笔记类型目录及排序方式选择 NoteTypePane */ /*笔记正文部分*******/ TextPanel=new JPanel(); rightPanel=new RightPanel(TextPanel,this); /*文件名目录部分******/ DirectoryPanel=new JPanel(); midPanel =new MidPanel(DirectoryPanel,this); /*笔记类型目录部分*****/ NoteTypePanel =new JPanel(); leftPanel=new LeftPanle(NoteTypePanel,this); leftPanel.update_Left_view(); // 三、处理拆分窗格 splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true); splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M); // 四、设置标题等 this.setTitle(name+" 的笔记本"); this.setLocation(200,100); this.setSize(1000,600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 32 } this.setVisible(true); } //为了方便后面的垂直和水平显示 public void showStyle(int show) { this.remove(splitL_M);//先把以前的去掉重新添加 splitM_R =new JSplitPane(show,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true); splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M); this.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub } public String getUser_path() { return user_path; } public void setUser_path(String user_path) { this.user_path = user_path; } public String getBook_Path() { return book_Path; } public void setBook_Path(String book_Path) { this.book_Path = book_Path; } public String getNote_Path() { return note_Path; } public void setNote_Path(String note_Path) { this.note_Path = note_Path; } 33 (7) package view; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.swing.text.Document; import javax.swing.text.StyledDocument; import common.Tools; import common.User; import login.login_zhuce; public class Menu extends JFrame implements ActionListener{ //菜单部分声明 JMenuBar menuBar=null;//菜单主干 JMenu newNote_menu,deliteNote_menu,show_menu,menu_menu,help_menu;//菜单组件 树干 //处理新建笔记菜单 newNote_menu JMenuItem[] newNote_item={ new JMenuItem("新建笔记"), new JMenuItem("新建笔记本") }; //处理删除deliteNote_menu JMenuItem[] delete_item={ new JMenuItem("删除笔记"), new JMenuItem("删除笔记本") }; //处理显示 JMenuItem[] show_item={ new JMenuItem("Metal风格"), new JMenuItem("Windows风格"), new JMenuItem("Motif风格"), new JMenuItem("Nimbus风格"), new JMenuItem("水平显示"), new JMenuItem("垂直显示") }; //处理menu_menu JMenuItem[] menu_item={ new JMenuItem("丨账户"), new JMenuItem("丨导入"), 34 new JMenuItem("丨导出"), new JMenuItem("丨注销"), new JMenuItem("丨退出") }; //处理help_menu JMenuItem[] help_item={ new JMenuItem("关于作者"), new JMenuItem("关于笔记本") }; MainFrame mainFrame; public Menu(MainFrame mainFrame) { this.mainFrame=mainFrame; // 一、先处理菜单 menuBar=new JMenuBar(); //各菜单menu[0]menu[1]menu[2]menu[3]menu[4] newNote_menu=new JMenu("新建"); deliteNote_menu=new JMenu("删除"); deliteNote_menu.setToolTipText("选中笔记(本)时才可删除"); show_menu=new JMenu("显示"); help_menu=new JMenu("帮助"); menu_menu=new JMenu("菜单"); //将菜单项添加到各菜单 for(int i=0;i 菜单 newNote_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(); } 35 //添加事件监听 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; 36 } SwingUtilities.updateComponentTreeUI(this.getContentPane()); SwingUtilities.updateComponentTreeUI(mainFrame); } //实现监听后的动作 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String str=e.getActionCommand(); if(str.equals("新建笔记")){ String note_name=null; note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记", JOptionPane.INFORMATION_MESSAGE |JOptionPane.OK_OPTION); //如果用户点取消 或没有输入文件名 则不用新建 if(note_name!=null){ File file=new File(mainFrame.book_Path+"/"+note_name+".ser"); if(!file.exists()) { try { file.createNewFile(); //将新建的笔记格式设为Document对象 Tools.setDocument(file); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //刷新中间和左边的Panel mainFrame.midPanel.update_Mid_View(); } } }else if(str.equals("新建笔记本")){ String book_name=null; book_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); if(book_name!=null){ File file=new File(mainFrame.getUser_path()+"/"+book_name); //System.out.println("User_path:"+mainFrame.getUser_path()); if(!file.exists()) { try { file.mkdir(); //将笔记本路径设为新建笔记本的路径 37 mainFrame.setBook_Path(mainFrame.getUser_path()+"/"+book_name); mainFrame.leftPanel.update_Left_view(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //改变的笔记本总数 刷新左边Panel mainFrame.leftPanel.update_Left_view(); } } }else if(str.equals("删除笔记")){ Tools.deleteFile(mainFrame.getNote_Path()); //删除笔记之后需要刷新右边的两个Panel mainFrame.midPanel.update_Mid_View(); }else if(str.equals("删除笔记本")){ Tools.deleteFolder(mainFrame.book_Path); //笔记本目录发生改变 mainFrame.leftPanel.update_Left_view(); }else if(str.equals("关于作者")){ Tools.showMessage("邓伟杰、苏俊钦、陈通、陈盛锋、林健祺、尹国瑜、温天宇、赵潮顺", "帮助"); }else if(str.equals("关于笔记本")){ Tools.showMessage("还存在许多BUG,望老师指正", "呵呵"); }else if(str.equals("丨账户")){ Tools.showMessage("姓名:"+mainFrame.name, "用户信息"); }else if(str.equals("丨导入")){//即打开一个笔记 String temp=Tools.open_Choose(); if(!temp.equals("not")) { FileInputStream inputStream=null; ObjectInputStream ois=null; try { inputStream=new FileInputStream(Tools.open_Choose()); ois=new ObjectInputStream(inputStream); mainFrame.rightPanel.textPane.setDocument((Document) ois.readObject()); mainFrame.rightPanel.book_Save(); } catch (Exception e1) { // TODO Auto-generated catch block 38 e1.printStackTrace(); }finally{ try { ois.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }else if(str.equals("丨导出")){//即另存为一个笔记 String temp=Tools.open_Choose(); if(!temp.equals("not")) { FileOutputStream outputStream=null; ObjectOutputStream oos=null; try { outputStream=new FileOutputStream(Tools.save_Choose()); oos=new ObjectOutputStream(outputStream); oos.writeObject(mainFrame.rightPanel.textPane.getDocument()); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); }finally{ try { oos.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }else if(str.equals("丨注销")){ mainFrame.dispose(); new login_zhuce();//注销之后重新登录 }else if(str.equals("丨退出")){ System.exit(0); }else if(str.equals("垂直显示")){ mainFrame.showStyle(0);//重新调用一下拆分窗格 }else if(str.equals("水平显示")){ mainFrame.showStyle(1); }else { 39 try{ if(str.equals("Metal风格")){ this.changeFlavor(1); }else if(str.equals("Windows风格")){ this.changeFlavor(2); }else if(str.equals("Motif风格")){ this.changeFlavor(3); }else if(str.equals("Nimbus风格")){ this.changeFlavor(4); } }catch(Exception e1){ e1.printStackTrace(); } } } } (8)Midpanel.java package view; import java.awt.*; import javax.swing.*; import javax.swing.text.Document; import common.Tools; import java.awt.event.*; import java.io.*; public class MidPanel extends JPanel implements ActionListener,MouseListener{ JPanel panel; MainFrame mainFrame; /// JScrollPane jscroll2; JMenuItem[] items; File lists[]; JPanel jp1; 40 //鼠标右击部分 JPopupMenu right_Click; JMenuItem delete_book,properties_book,new_book; public final int TOTAL=20; public String filename; public String temp_path=null;//右击时记录选中笔记的途径 public MidPanel(JPanel panel, MainFrame main) { this.panel=panel; this.mainFrame=main; jp1=new JPanel(); jp1.setLayout(new GridLayout(TOTAL,1,1,4)); //初始化20个MenuItem items =new JMenuItem[TOTAL]; for(int j=0;j items[j]=new JMenuItem(""); items[j].addMouseListener(this); } //处理鼠标右击问题 right_Click=new JPopupMenu(); new_book=new JMenuItem("New");//新建笔记 delete_book=new JMenuItem("Delete"); //删除笔记 properties_book=new JMenuItem("Properties"); delete_book.addActionListener(this); properties_book.addActionListener(this); new_book.addActionListener(this); //right_Click. right_Click.add(new_book); right_Click.addSeparator(); right_Click.add(delete_book); right_Click.add(properties_book); JLabel label=new JLabel("All Note & Note All "); label.setEnabled(false); label.setBackground(Color.gray); 41 jscroll2 = new JScrollPane(jp1);//为Panel添加滚动条 panel.setLayout(new BorderLayout()); panel.add(label,"North"); panel.add(jscroll2); } //在新建或删除是需要刷新,并附带刷新 RightPanel中的内容 public void update_Mid_View() { File file = new File(mainFrame.getBook_Path()); if(file.isDirectory()) { lists = file.listFiles(); for(int j=0;j 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); 42 mainFrame.rightPanel.textPane.setDocument((Document)ois.readObject()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { ois.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand().equals("New")){ String note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); //如果用户点了取消 则不用新建笔记 if(!note_name.equals("null")){ File file=new File(mainFrame.book_Path+"/"+note_name+".ser"); if(!file.exists()) { try { file.createNewFile(); //为新建的笔记写入一个空白的对象 避免打开时报指针的错误 Tools.setDocument(file); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } //刷新中间和左边的Panel mainFrame.midPanel.update_Mid_View(); } }else if(e.getActionCommand().equals("Delete")){ File file=new File(this.getTemp_path()); file.delete(); //删除笔记之后需要刷新右边的两个Panel 43 mainFrame.midPanel.update_Mid_View(); }else if(e.getActionCommand().equals("Properties")){ Tools.showMessage(this.getTemp_path(),"笔记"); }else { mainFrame.rightPanel.textPane.setEditable(true); mainFrame.setNote_Path(mainFrame.getBook_Path()+"/"+e.getActionCommand()); for (int x=0;x 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(); //将当前笔记的途径 存到辅助路径中 44 this.setTemp_path(mainFrame.getBook_Path()+"/"+jm.getText()); } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub JMenuItem jm=(JMenuItem)arg0.getSource(); //jm.setBackground(new Color(238,238,238)); } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } public String getTemp_path() { return temp_path; } public void setTemp_path(String temp_path) { this.temp_path = temp_path; } } (9) RightPanel.java package view; /** * 改用JTextPane实现图片即单个文字更改字体或颜色的功能 */ import java.awt.*; import java.awt.event.*; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.*; import javax.swing.text.Document; import common.Tools; 45 public class RightPanel extends JPanel implements ActionListener{ JPanel panel; MainFrame mainFrame; //文本域 JTextPane textPane; JScrollPane jsp_Pane; //鼠标右击部分 JPopupMenu right_Click; JMenuItem cutItem,copyItem,pasteItem,saveItem; //插入图片与更改字体 JToolBar toolBar; JButton image_Button,font_Button,timeButton; public RightPanel(JPanel panel,MainFrame mainFrame) { this.mainFrame=mainFrame; this.panel=panel; //创建一个 文本域存放文字 JTextArea textPane =new JTextPane(); //设置自动换行 textPane.setFont(new Font("", 1, 12)); jsp_Pane=new JScrollPane(textPane);//滚轮 //设置鼠标右击弹框效果 //cut cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png")); cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x" cutItem.addActionListener(this); //copy copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png")); copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl O" copyItem.addActionListener(this); //paste pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png")); pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v" pasteItem.addActionListener(this); saveItem=new JMenuItem("Save",new ImageIcon("image/save.png")); saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s")); saveItem.addActionListener(this); //将各菜单项添加到 右击菜单组中 right_Click=new JPopupMenu(); //right_Click. right_Click.add(cutItem); 46 right_Click.add(copyItem); right_Click.add(pasteItem); right_Click.addSeparator(); right_Click.add(saveItem); //为右击注册监听 textPane.setComponentPopupMenu(right_Click); //可以懂工具条部分 toolBar=new JToolBar("工具"); image_Button=new JButton("插入图片"); image_Button.addActionListener(this); font_Button=new JButton("更改字体颜色"); font_Button.addActionListener(this); timeButton = new JButton("插入时间"); timeButton.setToolTipText("点击可以插入当前时间"); timeButton.addActionListener(this); toolBar.add(image_Button); toolBar.add(font_Button); toolBar.add(timeButton); //将工具条和textPane添加到panel panel.setLayout(new BorderLayout()); panel.add(toolBar,"North"); panel.add(jsp_Pane); } //更新文本框 在新建或删除 笔记或笔记本 的时候需要刷新 public void update_Right_view() { textPane.setText(""); textPane.setEditable(false); } //保存当前笔记 public void book_Save() { FileOutputStream outputStream=null; ObjectOutputStream oos=null; try { outputStream=new FileOutputStream(mainFrame.getNote_Path()); oos=new ObjectOutputStream(outputStream); oos.writeObject(textPane.getDocument()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); 47 }finally{ try { oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand()=="Cut"){//剪切 textPane.cut(); }else if(e.getActionCommand()=="Copy"){//复制 textPane.copy(); }else if(e.getActionCommand()=="Paste"){//粘贴 textPane.paste(); }else if(e.getActionCommand()=="Save"){//保存 this.book_Save(); }else if(e.getSource()==image_Button){//插入图片 String temp=Tools.open_Choose(); if(!temp.equals("not")){ textPane.insertIcon(new ImageIcon(temp)); } }else if(e.getSource()==font_Button){//修改字体颜色 Color c=JColorChooser.showDialog(this, "Color", Color.black); textPane.setForeground(c); }else if(e.getSource()==timeButton){//插入时间 Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式 String hehe = dateFormat.format( now ); textPane.replaceSelection(hehe); } } } 48 《面向对象程序设计JAVA》课程设计大纲 课程名称:面向对象程序设计JAVA 适用专业:计算机及计算机相关专业 学时数:20(上机实验) 学 分: 1 配套教材:《JAVA语言与面向对象程序设计》印旻 编著 清华大学出版社 大纲编写者:周斌 编写日期:2008.2 一、课程设计目的 1、 课程设计的教学任务是让学生通过动手动脑解决实际问题,是学生学完课程后进行 的一次全面的综合训练,是一个非常重要的教学环节,通过课程设计,使学生经受一次综合动用所学知识,解决实际问题的方法。 2、 使学生掌握使用各种计算机资料和有关参考资料,提高学生的基本设计能力。 3、 培养学生理论联系实际和独立思考的能力,并激发学生的实际开发创造的意识和能力。 二、课程设计要求 1、 利用JAVA进行应用程序的设计。 2、 必须熟悉课程设计的各项内容和要求,明确课程设计的目的、方法和步骤; 3、 设计中必须独立地地完成每一阶段的设计任务,禁止抄袭他人的设计成果; 4、 所设计的程序必须满足实际使用要求,编译出可执行的程序。 5、 要求程序结构简单,功能齐全,使用方便。 三、课程设计内容 课程设计题目: 1、已知银行整存整取存款不同期限的年息利率分别为: 0.63% 期限一年 0.66% 期限二年 年息利率= 0.69% 期限三年 0.75% 期限五年 0.84% 期限八年 要求输入存钱的本金和期限,求到期时能从银行的到的利息与本金的合计。 程序如下: import java.io.*; public class myWork1 { public static void main(String args[]) { try { int m,n; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.print("请输入金额: "); m=Integer.parseInt(br.readLine()); System.out.print("请输入年限: "); n=Integer.parseInt(br.readLine()); System.out.println(); switch(n) { case 1: System.out.println("得到的总额为 "+m*(1+n*0.0063)); break; case 2: System.out.println("得到的总额为 "+m*(1+0.0066*n)); break; case 3: System.out.println("得到的总额为 "+m*(1+0.0069*n)); break; case 5: System.out.println("得到的总额为 "+m*(1+0.0075*n)); break; case 8: System.out.println("得到的总额为 "+m*(1+0.0084*n)); break; } } catch(IOException e) { System.out.println(e); } } } 截图如下: 2、输入n值,打印边长为n的空心正六边形,其边由“*”组成。 3、编写一个类,这个类同时求出n个学生成绩的最高分、最低分、平均分以及超过平均分的人数,并编写主类完成: (1) 输入n个学生的成绩; (2) 调用此类进行统计; (3) 输出统计结果。 4、编程实现实时动态运行的模拟时钟。 以下题目选做: 5、编程实现约瑟夫问题。8个人站成一圈,从第1个人开始报数,报到5的人出圈,第6个人再从1开始报。依次类推,求出圈的序列。 6、编程实现俄罗斯方块游戏。 说明:可以自行选择其他设计题目 四、编写课程设计报告书 课程设计报告书要求: 1、 文字叙述清楚,结构结构简洁明了,理论正确,程序功能完备。 2、 设计说明书要求文字工整,书写整齐。 3、 附参考资料名称说明。 4、 课程设计报告主要内容: 1) 题目 2) 问题需求分析 3) 总体设计 4) 详细设计 5) 测试数据和调试报告 6) 小结 五、成绩评定方式 根据平时设计完成质量和课程设计报告确定成绩。分优秀、良好、中等、及格、不及格五档。 一、Java语言课程设计目的和要求 1.目的: 1)复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握; 2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力; 3)培养学生在项目开发中团队合作精神、创新意识及能力。 2.要求: 1、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理; 2、系统设计要实用,编程简练,可用,功能全面 3、说明书、流程图要清楚 4、记录设计情况(备查,也为编写设计说明书作好准备); 5、要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。 6、设计上交内容:设计报告一组一份(按格式书写);心得体会每人一份;源程序文件。 二、Java课程设计选题如下: 1、四则运算测试 功能要求:该程序实现十道100以内四则运算数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数。 界面要求:图形界面实现,基于ArrayList、Vector等高级类。 2、文件加密、解密软件 功能要求:通过软件界面选择打开一个文本文件,使用移位密码对文件内容进行加密并保存,或者针对移位密码加密的文本文件进行解密操作并保存。 界面要示:图形界面实现。 3、学生成绩管理 功能要求: 1) 输入若干同学的学号,姓名,四科成绩(应用数学、大学英语、Java程序设计、计算机应用基础),存储入数据库中。 2) 计算出平均成绩。以平均成绩降序输出成绩表。 3) 输出全组各科平均分,最高分和最低分。 4) 输入姓名查询成绩 界面要示:无。 4、对对碰游戏 功能要求:该程序显示GUI用户界面,界面中随机安排10对图片,背面向上,当翻开的2张图片相同时就消失,不相同时重新翻回背面,最终显示用时和分数(=400-翻的次数)。 界面要示:图形界面实现。 5、画随机圆 功能要求:实现简单的动画。具体要求:自动出现由小到大变换的圆,位置与颜色随机,变到150直径时擦除,重新再出现圆;变换速度由HTML文件传入的参数控制(控制sleep时间)。 界面要求:用Java Applet实现。 6、绘图板 功能要求:实现简单绘图功能,具体要求:画直线,画空心或实心椭圆、画空心或实心矩形、画多边形(图形的位置和大小也可在界面中设定)。 界面要求:图形界面实现。可参考图 1、图2和图3。 图1 初始界面 图2 使用菜单绘图 图3 使用按钮绘图 7、标准化考试 功能要求:程序从文件系统(或数据库)中读入考试题目(主要为选择题)及答案,显示在GUI界面中,答题者按照题目内容进行答题,点击按钮提交后可以看到自己的答题结果。 界面要示:图形界面实现。 8、Socket文件传输 功能要求:基于Socket编程,实现服务器端向客户端发送文件的操作。 界面要示:无。 9、网络相册 功能要求:用户在网页上通过前进、退后按键或自动播放方式浏览相册,每张相片可以放大观看。 界面要示:Applet实现。 三、设计时间 一周,具体安排如下: 第一阶段: 1.班级分组,选定课题,查阅相关资料 1周 2.划分模块、小组成员分工,编制源程序 1-2周 第二阶段:上机调试,修改、完善系统 一周 第三阶段:撰写、上交课程设计说明书(1份/人),上交课程设计作品源程序(每课题组一份),作品答辩。 1天 四、设计方式和安排 1.分组选题:最多5人为一组,每组一个课题(可根据课题工作量大小,合理分配人数),每组设组长一名,负责该组设计工作的协调、分工等。 2.设计过程: 1) 分析设计准备阶段(按组讨论、对系统功能进行分析,确定算法,并进行明确分工); 2) 编程调试阶段(绘制流程图,编制源程序;上机调试,修改程序) 3) 总结报告和书写说明书阶段(撰写上交相关资料) 3、考核过程 17周周五下午答辩。 五、考核内容和方式 1、在设计期间,学生要按时上机,设计结束根据记录的设计材料整理成设计说明书。设计说明书中应写下设计中的主要收获,要求对问题有一定的分析,文字简短明确流畅。 2、通过设计答辩方式,并结合学生的动手能力,独立分析解决问题的能力和创新精神,设计成绩由指导教师根据考勤、设计说明书质量、答辩表现以及学习态度按五级分制综合评定。 成绩分优、良、中、及格和不及格五等。 六、课程设计报告格式及要求 一、封面; 二、目录; 三、设计任务书; 四、本组课题及本人任务; 五、程序功能简介; 六、主体内容(简要说明总体情况,详细介绍本人任务部分): 1.设计分析; 2.程序结构(画流程图) 3.各模块的功能及程序说明; 4. 源程序; 5.操作方法(流程);(可省) 6.试验结果(包括输入数据和输出结果) 7.设计体会。(可省) 一、课程设计的目的 为了进一步巩固java程序设计课程所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了一周的Java程序设计课程设计。 通过此次课程设计,巩固所学java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。 二、课程设计的基本要求 1、明确题目要求,进行需求分析; 2、进行功能设计,编写设计说明; 3、进行程序设计与调试; 4、对设计过程进行系统的总结; 5、界面美观大方; 6、完成设计报告 7、课程设计建议在Editplus +JDK、JCreator +JDK、myeclipse平台上开发、调试。 8、 Java源程序应加上详尽的注释语句,对所设计的类、属性、方法说明其用途,对方法的调用说明其用意和使用参数的原因。特别是有深刻理解、有独特见解的地方,用注释语句加以说明。 三、课程设计的主要内容 利用学到的编程知识和编程技巧,通过具体项目的分析、设计和开发,掌握开发Java大型软件项目过程中所需要的软件技术并熟悉软件。 可以以小组为单位,每组1至2名学生,在教师的指导下,每组完成一个题目。题目可由下面提供的选题中选择或学生自选经教师审核后方可。该组每个同学承担题目的不同部分,每位同学的课程设计报告必需独立完成。 题目类型大致分配如下: 1、 网络通讯类,编制网络聊天(Chat)程序,以下简称“网络”类。 2、 图形界面Application类,编制类似计算器、MP3播放器、围棋打谱,斗地主、潜艇大战、挖地雷、迷宫等功能单一的程序,以下简称“图形 ”类。 3、 通讯类,使用Socket通讯完成信息通讯,比如QQ 4、 数据处理类,编制考试系统、出题系统、查询系统、学生学籍、课程成绩、图书编目、仓库货物等数据录入查询程序,以下简称“数据”类。 5、 其它类型,自选题目,须经老师同意。 四、主要技术关键的分析、解决、方案比较 以下是可以参考的课程设计可能包含的相关知识: 1、Java核心编程J2SE: 面向对象技术 Java程序运行机制 开发环境的安装和配置 Java语言基础和重点API Java程序异常的处理 I/O、控制台程序开发 Swing程序开发 Socket通讯 2、数据库技术: 关系型数据库原理 SQL数据查询语言 MS SQL Server使用方法 数据库中对象的建立与使用 Java数据库编程(JDBC) 五、课程设计考核方式与标准 采用上机情况、程序质量、实习报告相结合的考核形式: 1、上机情况 包括出勤情况、调试程序时表现。 2、程序质量与创新能力 最终完成的程序设计的工作量、质量、难易程度。 3、课程设计报告 报告的格式与内容。 六、参考题目及要求: 1、多媒体播放器程序的设计与实现 目的:利用java开发一个支持mp 3、wma、wmv、avi、mpg等不同音频、视频格式的多媒体播放器。通过课程设计掌握多媒体编程的基本原理。 任务: 编程实现一个可支持多种音视频格式的多媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、停止以及歌曲信息的查询与添加等; 2、带格式的文本编辑器 功能参考word软件 3、学生信息(包括成绩)管理系统 要求: 使用图形用户界面 用数据库建立1或2个学生信息表。(不限使用哪种数据库) 能连接数据库并实现查询、增、删、改等功能。 4、期刊资料信息管理系统 要求: 使用图形用户界面 用数据库建立1或2个图书信息表。(不限使用哪种数据库) 能连接数据库并实现查询、增、删、改等功能。 借阅记录等信息 5、聊天小程序QQ 要求:使用图形用户界面。 能实现一个聊天室中多人聊天。 可以两人私聊。 提示:使用socket通信 6、ATM柜员机模拟程序 要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行: 1)查询余额:初始余额为10000元 2)ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。 3)ATM存款:不能出现负存款。 4)修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。 7、超市收银系统 要求:使用图形用户界面。 由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从数据库中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。 另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满200元,可为其发放一张会员卡,以后在该商场购物可向9折优惠。 8、网络监听程序 要求:使用图形用户界面。 有服务器和客户端,服务器监听客户端的登陆。即:如果A客户端登陆服务器,则服务器界面上的A字母对应的红灯变成绿色。 绿灯表示连接,红灯表示断线。 提示:socket的监听方法 9、全球通计费程序 要求:使用图形用户界面。 使用真实的全球通资费标准,模拟统计一个特定号码的一个月的实时话费。 能根据输入实现各种用户的话费的计算并显示月实时帐单。 提示:使用接口和多个子类实现分别表示金卡、银卡等各种套餐的话费计算。 10. 学生机房上网计费系统 要求: socket通讯 11.电子英汉词典 要求: 能够编辑词典库中的信息 能够实现英译汉,汉译英。(要考虑一词多义) 12.加密与解密 要求:采用图形用户界面 1)给定任意一个文本文件,进行加密,生成另一个文件。 2)对加密后的文件还原。 3)图像水印的添加以及还原 13.小游戏 要求:。 程序随机产生20—50根火柴,由人与计算机轮流拿,每次拿的数量不超过3根,拿到最后一根为胜。(使用图形界面) 14.敏感词汇分析 要求: 任意选择一个文本文件,分析该文件,如果存在敏感词汇(这些词汇保存在sentive.txt文件中,每个词占一行),报告每个词出现的次数。 15、猜数字游戏 要求:计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语。 要求提交Application和Applet两个版本的程序。 16、小学算术运算测试程序 要求:制作一个可供小学数学运算程序:10以内加减法,能根据输入题数出题,判断做题是否正确,最后计算分数。 要求提交Application和Applet两个版本的程序。 17、模拟画图 要求:模拟Windows中的画图程序,实现图形图像的编辑、修改、保存等功能。 模拟时钟 要求:通过多线程技术,重绘界面,界面包括表盘和指针。并用数字表显示时间。 实现要点:多线程技术,图形的绘制。 18、打字训练测试软件 要求:设计一个英文打字测试软件。从文件中调入英文录入材料,最后可以给出错误率, 平均录入速度。 19、用java开发一个小型数据库管理系统,比如Access 在界面中输入SQL语句,可以完成数据可的相关功能 20、学生宿舍管理系统 数据库 21、电话号码查询系统,ip地址、手机归属地查询 要求:有电话录入,修改,增加,删除,按姓名查询,按电话号码查询,按部门查询,按部门显示,显示所有电话号码信息,打印等功能。 22、同学录管理系统 () 要求信息的录入、查询、删除、修改等一列功能。 22、购物车子系统 要求:使用图形用户界面。当输入给定的顾客编号和密码(初始卡号和密码为123456)时,系统能进入购物车子系统,顾客可以按照以下规则进行: 查询自己购物车中商品信息; 修改 删除物品 数据库库存管理 23、火车票管理系统 要求: socket通讯,多线程 服务器端数据库存放火车票信息 客户端(窗口)卖票,退票 24、利用Socket通讯模拟学生食堂卖饭系统 账户的管理,充值管理,售饭管理 启动两个客户端(窗口),模拟售饭过程 25、为一个超市设计一个货物管理程序。 要求: 进货库:货号,货名,型号 ,进货量,进货价,经办人, 销售库:货号,销售量,售价,利润。 存库: 货号,库存量。 二 包含功能: 1)在程序中初始化库存库,销售库,及进货库. 2)可提供菜单,供随时添加,修改,删除,查找库中信息.(具体货物及编号等自编),在设计时应尽量考虑全面,比如查找就可以按照货名或者货号,经办人等来查找。 3)可自动计算利润等字段。可以统计总利润。 4)可随时根据进货库调整库存库。 5)可随时根据销售库调整库存库。 6.)可根据要求核对库中内容,如数量是否一致等。 7.)可根据销售情况统计出销售排行榜。 8.)自行设计的其他功能。 - 整体要求:建议使用NetBeans集成开发环境完成作业,界面友好,代码的可维护性好,有必要的注释和相应的文档。 java语言程序设计是高校计算机相关专业的一门重要课程,小编收集了java课程设计总结,欢迎阅读。 java课程设计总结【一】 在java课程设计中,要认清楚到底这在我们的生活中的作用是什么,我个人认为这在我们的今后生活中,这酒店的设计是一种在以后的工作中能起到很有用处的课程设计,这也许是老师这用做的为我们着想的一部分吧。在这次课程设计中,我们也能可以看出,学计算机的在以后找工作中的出处,让我们知道计算机技术的应用的广泛应用。在java课程的学习中,也使我明白了更多的以前没有没有见过的知识,学到了更多的知识,更完整的弄清楚计算机科学与技术这门学科。 在学java这门学科时,我开始还以为它跟c++差不多的,但随得学习的深入就弄明白了这两者的关系有得很大的差别,在写程序上就能看出来这其中的差别的不同处。在这最后两个星期的课程设计中,我开始还没怎么在意的,以为不过是件小事,能很快的搞定,但随的越来越深入的设计才明白我的想法是多么的可笑,在做程序写个代码就不是那么容易的事,还有好多的页面设计都需要用到不同的知识点这其中的不少问题都需要在课本中才能找出来进行解决,这也给我带来了许多的困难。在开始做这课程设计的时候,我开始的时候是不知道从什么地方开始的,在经过老师的不断指点中才能学到从什么地方开始做起的。在这次做课程设计中,我们是四人各做四个不同板块的,而我做的是那个基础的部分:菜品设计。在这部分设计中,我开始时也不知道打从何处开始的,但从以前的那个c++的课程设计中知道,一般的程序设计都是从代码开始的,在代码的基础上再来修做剩下的桌面设计部分。 在写代码中,对我来说这是种相当沉重的压力的,因为我的英语不好而导致我在许多的语句都不知道怎么写,好多的内容都需要查找书本才来写出来,这给写作代码带来了极大的困难,浪费了好多的时间来写代码。在那页面的设计中还好没要求,我在做这部分的时候,我看他们做的还不错就借签过来了做成了我自己的课程设计。这不由于自己开始做得比较晚,而老师又催得比较急,这就得夜里通宵来写了,没办法自己的水平有限就只能做这么多的了。 现在回想下真是不堪回首啊!这能做的就之能做这多了望老师能谅解。在次再次感想老师多日里来的指导,在您的指导下,我们能这么容易的完成了这项艰难的课程设计任务,看得这这么多天努力来的结果,心里还是感觉到是有点感动,,因为这也是这么多天来的付出的努力吧,在这样的付出终得到了个好的结果。同时也有点遗憾,在整个设计中,我没自己单独的完成整个任务,这也是自己要认真反思的地方。 而且,这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。 与队友的合作更是一件快乐的事情,只有彼此都付出,彼此都努力维护才能将作品做的更加完美。而团队合作也是当今社会最提倡的。 java课程设计总结【二】 随着计算机和internet的发展,传统的教学方式转变成了网络教学形式,通过计算机网络技术构建教学网站成为现代网络教育的一种趋势,以互联网为平台,构建网络教学系统,可以为更多的用户提供更多受教育的机会。本文详细的阐述了教学网站的整体开发过程,通过系统的需求分析,设计出系统的总体结构;通过总体设计,设计出了系统的功能模块和数据库结构;最后对教学网站的各个功能模块进行了具体的设计。 根据系统实际需要,本系统的开发采用了模块化设计思想,在windowsxp操作环境下,采用java技术进行系统开发,数据库管理系统采用microsft公司的sql serverXX,b/s体系结构设计,最终实现教学网站的主要功能,包括学生在前台浏览网站公告、浏览教学、下载课件、提交问题、提交作业等;教师完成上传教程课件、开设课程、发布作业、批改作业、回复问题等;管理员则在后台完成对教程信息的管理、课件信息的管理、学生信息的管理及教师信息的管理等功能。 java语言程序设计是高校计算机相关专业的一门重要课程,它是一门逻辑性较强、概念较多、结构相对复杂的课程,但高校开设的课时却相对较少。学生学习该课程时广泛存在缺乏兴趣、没恒心,态度不端正的现象。传统教学过程中忽视动手实践能力的培养,不利于学生实用技能的提高。针对这些问题,本研究对"java程序设计”的教学内容进行了wpbl模式的教学设计,并用计算机程序予以实现。在网络环境中,让学生通过相互协作应用java程序解决问题,教师或计算机程序引导和促进学生对问题进行深层次的理解,有利于学生沟通合作、解决问题和动手实践能力的提高,有利于激发学生对java程序设计的学习兴趣。网络教学可以使学生随时随地的学习,有效缓解了课程课时设置过少,学生学习时间有限的状况,对课堂教学是个良好的补充。 在此次课程设计中,我主要负责商品信息查询部分功能的实现和商品公告栏包括商城公告,销量排行,友情链接等功能的实现,这些功能都是有链接的,有的连接到本网站有关内容,有的是连接到以外的网站。在页面布局中,并没有遇到什么困难,主要是合理正确利用网页制作标记,实现准确定位。遇到的困难主要集中在页面的具体在浏览器的显示上,在一个页面中,实现一小部分的动态转换,另一部分静态的要在每一个网页中都要显示。这其中,不仅要准确利用网页的框架布置外,还要充分考虑到用代码实现另外的页面或窗口的布局和美化。在编写代码过程中,要充分考虑其他页面的有关情况,jsp有关功能的封装和转换,页面的交换,以及有关页面包含的所能实现具体功能的jsp代码等。 在编写实现功能的代码中,遇到困难是最多的了。点击商城公告里面的内容时,能弹出来一个详细信息的界面,这个界面就是需要在页面中插入jsp脚本,比如html语句。实现具体的功能,显示网页内容和有关信息。这之间的调用顺序和转换需要准确的定位,才能实现想要的功能。在商品查询页面里,包括电子产品,健康产品,家用电器,衣帽服饰等查询功能,下面还有具体的详细信息,包括是否加入购物车。显示有些商品内容只是简单地网页html语句实现的,但是如果要进行有关查询时,需要代用有关jsp。我们可以看到,只要点击就可以显示你所想要的页面。在这个功能实现中,由文字被点击时,调用有关jsp功能,在数据库里查询有关符合查询条件物品的信息,并通过页面的展现显示出来。这主要是在网页代码中插入jsp脚本或调用有关功能才能实现的,如webinf里面的各种jsp功能。但是在分页时,需要考虑的很清楚,搞清页与页之间的逻辑联系才能实现合理正常的分页功能。 在前期准备过程中,先策划好自己的网站及相关的各个网页所要表达的内容,主要实现哪些功能,如用户登录,商品查找,这些功能是由什么样的jsp或javabean实现的,在编写好这些功能后,又是怎么样在各个页面html中插入这些实现功能的代码,是用脚本呢还是用调用,这些都是我们事先要考虑的问题,只有这样我们考虑周到了,明白了,才能顺利实现更多的功能,达到事半功倍的效果。再一个主要任务是在网上搜集有关的信息和图片,并参考借鉴别人的网站布局和功能,来规划美化自己的网页页面的设置风格。 【java课程设计选题】相关文章: java课程设计题目09-21 java课程设计题目106-03 java课程设计学生信息06-19 java课程设计报告小组06-20 Java技术综合课程设计论文04-29 java课程设计管理系统06-19 java课程设计人事管理06-20 java课程设计带源代码06-20 ATM取款机java课程设计05-16 【Java程序设计】课程教学大纲04-20第二篇:《JAVA语言》课程设计设计
第三篇:Java课程设计题目
第四篇:Java课程设计题目
第五篇:java课程设计总结