第一篇:java課程設計學生信息
大學JAVA課程設計——學生信息管理系統
沈陽理工大學課程設計
沈陽理工大學課程設計
摘要
Java語言是當前最為流行的程序設計語言之一,諸多優秀的的特性使其成為被業界廣泛認可和采用的工具。本設計可以幫助同學掌握和應運所學的面向對象程序設計學生學籍信息管理系統的編程內容,培養同學們建立對象模型,處理對象和對象集關系和對圖形用回界面設計編程以及文件和流的編程問題的能力,訓練同學為解決實際問題而創建較完整的簡單面向對象和管理系統編程應運程序的獨立編程能力.本設計是一個常見的學生學籍管理系統應運程序.
系統實現的功能: 界面操作實現學生學籍信息的添加、刪除、查詢、修改功能,在文本文件中的的信息的動態處理。
關鍵詞:
學生學籍管理系統;圖形用戶界面設計;文件和流;java
I
沈陽理工大學課程設計
目 錄
一、課程設計的目的與意義 .......................................................................................... 1
1.目的 .......................................................... 1 2.意義 .......................................................... 1
二、需求分析 .......................................................................................................................... 1
1. 學生學籍管理系統主界面模塊 ................................ 1 2. 錄入學生基本信息模塊 ...................................... 1 3. 修改學生基本信息模板 ...................................... 1 3. 查詢學生基本信息模板 ...................................... 1 4. 刪除學生基本信息模板 ...................................... 1
三、分案設計 .......................................................................................................................... 3
1. 定義四個Panel面板 ...................................... 3
四、方案的實施 ...................................................................................................... 3
五、心得體會 ......................................................................................................... 15
六、參考文獻 ......................................................................................................... 16
II
沈陽理工大學課程設計
一、課程設計的目的與意義
目的:深入理解java語言的語法規則及其優勢,掌握類與方法的構造方法,掌 握基于java的各種操作的實現方法,訓練對基礎知識和基本方法的綜合運用能力,增強對算法的理解能力,提高軟件設計能力。在實踐中培養獨立分析問題和解決問題的作風和能力。
意義:熟練運用java語言、基本構造方法和算法的基礎知識,獨立編制一個具有中等難度的、解決實際應用問題的應用程序。通過題意分析、選擇類結構、算法設計、編制程序、調試程序、軟件測試、結果分析、撰寫課程設計報告等環節完成軟件設計的全過程,不斷地完善程序以提高程序的性能。
二、需求分析
該學生學籍管理系統的所有功能均在一個Frame窗體中實現。 1.學生學籍管理系統主界面模塊:
采用Frame窗體來設置歡迎界面包括背景圖片及字幕(可以設計成滾動字幕效果),左上方的菜單條設計成下拉式。包括“錄入學生基本信息”、“修改學生基本信息”、“刪除學生基本信息”、“查詢學生基本信息”和“退出系統”五項菜單項。 2.錄入學生基本信息模塊:
采用Panel面板來設置該部分內容信息并采用方位布局(邊緣布局)和Box輕量級組件來設置“學號”、“姓名”、“性別”、“專業”、“年級”、“出生”,并在該面板中添加了“錄入”和“重置”兩個按鈕進行監聽,最后將該面板加入到Frame窗體中去。 3.修改學生基本信息模板:
采用Panel面板來設置該部分內容信息,同樣是采用方位布局及Box組件來設置相關信息,并在學號旁設置了“開始修改”按鈕。在面板南部方位添加了“確定修改”和“重置”兩按鈕進行監聽。 4.查詢學生基本信息模板:
采用Panel面板來設置該部分內容信息,并將該面板加入到主窗體中去,采用邊緣布局進行方位設置,在上方加入“查詢”按鈕進行監聽。
5.刪除學生基本信息模板:
也是采用Panel面板進行設置相關內容,并用邊緣布局進行布局,并在上方添加“確定”按鈕,在下方添加“確定刪除”按鈕實現監聽。
三、模塊設計
定義四個Panel面板
1.定義Reg(錄入學生基本信息)面板
采用BorderLayout(構造一個組件之間沒有間距的新邊界布)和Box輕量級組件進行布局,在面板的Nother方位添加一個“錄入學生基本信息”的標簽,并更改字體,顏色等。接著用JTextField輕量級組件來設置單行文本編輯,并將其加入到用
1
沈陽理工大學課程設計
createHorizontalBox()方法創建具有一個從左到右顯示其組件的Box和用createHorizontalStrut()創建一個不可見的、固定寬度的組件,使其在一個橫向 box 中,通常使用此方法強行使兩個組件之間具有某一空間量。然后Box與Box之間用createVerticalBox()創建一個從上到下顯示其組件的 Box,并用createVerticalStrut()方法創建一個不可見的、固定高度的組件,使其在一個縱向 box 中,通常使用此方法強行使兩個組件之間具有某一空間量。然后在面板的South方位設置“錄入”與“重置”兩按鈕。最后實現與數據庫的橋接,能夠將從文本框獲得的信息存儲到數據庫中去。
2.定義Search(查詢學生基本信息)面板
該部分同樣采用BorderLayout(構造一個組件之間沒有間距的新邊界布)和Box輕量級組件進行布局,在面板的Nother方位添加一個“查詢學生基本信息”的標簽,并更改字體,顏色等。接著用JTextField輕量級組件來設置單行文本編輯,在學號這一文本框后再添加一個“查詢”按鈕。并將其加入到用createHorizontalBox()方法創建具有一個從左到右顯示其組件的Box和用createHorizontalStrut()創建一個不可見的、固定寬度的組件,使其在一個橫向 box 中,通常使用此方法強行使兩個組件之間具有某一空間量。然后Box與Box之間用createVerticalBox()創建一個從上到下顯示其組件的 Box,并用createVerticalStrut()方法創建一個不可見的、固定高度的組件,使其在一個縱向 box 中,通常使用此方法強行使兩個組件之間具有某一空間量。最后實現與數據庫的橋接,能夠將從數據庫中獲取信息并顯示到文本框中去。
3.定義Modify(修改學生基本信息)面板
該部分同樣也是采用BorderLayout(構造一個組件之間沒有間距的新邊界布)和Box輕量級組件進行布局,在面板的Nother方位添加一個“修改學生基本信息”的標簽,并更改字體,顏色等。接著用JTextField輕量級組件來設置單行文本編輯,并將其加入到用createHorizontalBox()方法創建具有一個從左到右顯示其組件的Box和用createHorizontalStrut()創建一個不可見的、固定寬度的組件,使其在一個橫向 box 中,通常使用此方法強行使兩個組件之間具有某一空間量。并在 “學號”該文本框后添加一個“開始修改”按鈕用來監聽。然后Box與Box之間用createVerticalBox()創建一個從上到下顯示其組件的 Box,并用createVerticalStrut()方法創建一個不可見的、固定高度的組件,使其在一個縱向 box 中,通常使用此方法強行使兩個組件之間具有某一空間量。最后實現與數據庫的橋接,能夠將從數據庫中獲取信息并顯示到文本框中去,并將修改后的信息存儲到數據庫中去。
4.定義Delete(刪除學生基本信息)面板
該部分還是采用BorderLayout(構造一個組件之間沒有間距的新邊界布)和Box輕量級組件進行布局,在面板的Nother方位添加一個“修改學生基本信息”的標簽,并更改字體,顏色等。接著用JTextField輕量級組件來設置單行文本編輯,在學號這一文本框后再添加一“確定”按鈕實現監聽。并將其所有文本框和標簽加入到用createHorizontalBox()方法創建具有一個從左到右顯示其組件的Box和用createHorizontalStrut()創建一個不可見的、固定寬度的組件,使其在一個橫向 box 中,通常使用此方法強行使兩個組件之間
2
沈陽理工大學課程設計
具有某一空間量。并在 “學號”該文本框后添加一個“開始修改”按鈕用來監聽。然后Box與Box之間用createVerticalBox()創建一個從上到下顯示其組件的 Box,并用createVerticalStrut()方法創建一個不可見的、固定高度的組件,使其在一個縱向 box 中,通常使用此方法強行使兩個組件之間具有某一空間量,還在本面板的South方位添加“確定刪除”按鈕。最后實現與數據庫的橋接,能夠將從數據庫中獲取信息并顯示到文本框中去,刪除后同時在數據庫中也刪除該信息并保存該操作。
四、方案的實施
1、學生信息管理系統的登錄
學生信息管理系統可由管理員和學生兩種身份的人使用。管理員和學生身份登錄所能操作的功能有很大的區別。系統初始化一個系統管理員,登錄名:admin 密碼:admin 學生登錄系統的登錄名為學號,密碼也為學號(如:10001),登錄后可以修改密碼。
登錄界面
登錄系統后的界面
3
沈陽理工大學課程設計
注冊學生信息界面
4
沈陽理工大學課程設計
修改學生信息界面
查詢學生信息界面
5
沈陽理工大學課程設計
刪除學生信息界面
6
沈陽理工大學課程設計
1 程序類的設計
DeleteListener.java:刪除監聽 JTMouseListener.java:樹狀視圖 LoginListener.java:登陸監聽 ResetListener.java:重置監聽 SaveListener.java:保存監聽
SearchAllListener.java:搜索所有學生信息 SearchDListener.java:搜索一個學生信息 SearchListener.java:搜索一個學生信息 SearchRListener.java:搜索一個學生信息 SubmitListener.java:提交信息監聽
2 系統的使用說明及環境配置
學生信息管理系統提供了管理員和學生這兩個角色登錄系統,管理員通過用戶名:admin 密碼:admin 登錄系統后可以進行相應的操作。學生通過以自己的學號(如10001)作為用戶名和密碼登錄系統后進行相應的學生權限范圍內的操作。 數據庫:Mysql 連接數據庫的登錄名:root 密碼:zfz 代碼:
DeleteListener.java:刪除監聽 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JOptionPane;
import manager.dao.JdbcIcpCURD; import manager.ui.conponent.DeletePanel;
public class DeleteListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
DeletePanel dp=(DeletePanel) jb.getParent();
String xuehao=dp.xuehaoFd.getText();
String msg= "你確定要刪除學號為"+xuehao+"的學生信息么?";
int i=JOptionPane.showConfirmDialog(dp,msg,"提",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
if(i==0){
JdbcIcpCURD curd=new JdbcIcpCURD();
boolean b=curd.deleteByXuehao(Integer.parseInt(xuehao));
if(b){
dp.errorLb.setText("刪除成功");
}
else{
dp.errorLb.setText("刪除失敗");
}
}
return; }
7
示信息
沈陽理工大學課程設計
} JTMouseListener.java:樹狀視圖 package manager.ui.listener;
import java.awt.CardLayout; import java.awt.Component; import java.awt.event.MouseEvent; import java.awt.event.MouseListener;
import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath;
import manager.ui.conponent.MainFrame; import manager.ui.conponent.PLeft;
public class JTMouseListener implements MouseListener {
@Override public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub JTree jt=(JTree) e.getSource(); PLeft p=(PLeft) jt.getParent(); MainFrame f=(MainFrame) p.getParent().getParent().getParent().getParent(); TreePath path = jt.getPathForLocation(e.getX(), e.getY()); if(path==null){ return; } DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); String s=node.toString(); CardLayout cl=f.getPright().getLayout(); if(s.equals("注冊學生")){ cl.show(f.getPright(), "register"); } if(s.equals("修改學生信息")){ cl.show(f.getPright(), "modify"); } if(s.equals("查詢學生信息")){ cl.show(f.getPright(), "search"); } if(s.equals("刪除學生信息")){ cl.show(f.getPright(), "delete"); } if(s.equals("學生信息管理")){ cl.show(f.getPright(), "welcom"); } }
@Override public void mouseEntered(MouseEvent e) {
8
沈陽理工大學課程設計
} } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } // TODO Auto-generated method stub LoginListener.java:登陸監聽
package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JOptionPane;
import manager.ui.conponent.Login; import manager.ui.conponent.MainFrame;
public class LoginListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton bt=(JButton) e.getSource();
Login frame=(Login) bt.getParent().getParent().getParent().getParent();
String username=frame.usernameTa.getText().trim();
String password=frame.passwordTa.getText().trim();
if(username!=null||password!=null){
if("admin".equals(username)&&"123".equals(password)){
new MainFrame().setVisible(true);
frame.dispose();
}
else{
frame.messageLb.setText("用戶名或密碼錯誤");
}
}
9
沈陽理工大學課程設計
else{
frame.messageLb.setText("用戶名或密碼錯誤");
} } } ResetListener.java:重置監聽 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.ui.conponent.RegPanel;
public class ResetListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) { JButton jb=(JButton) e.getSource(); RegPanel jp=(RegPanel) jb.getParent(); jp.xuehaoFd.setText(""); jp.nameFd.setText(""); jp.addressFd.setText(""); } } SaveListener.java:保存監聽 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.ModifyPanel;
public class SaveListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
ModifyPanel mp=(ModifyPanel) jb.getParent();
String xuehao=mp.xuehaoTf.getText().trim();
String name=mp.nameTf.getText().trim();
String gender=mp.genderTf.getText().trim();
String address=mp.addressTf.getText().trim();
String oldXuehao=mp.xuehaoFd.getText().trim();
if(oldXuehao==null||xuehao.equals("")){
10
沈陽理工大學課程設計
}
} oldXuehao=xuehao; } if(xuehao==null||xuehao.equals("")){ mp.errorLb.setText("請輸入修改后的學號..."); return; } if(name==null||name.equals("")){ mp.errorLb.setText("請輸入修改后的姓名..."); return; } if(gender==null||gender.equals("")){ mp.errorLb.setText("請輸入修改后的性別..."); return; } if(address==null||address.equals("")){ mp.errorLb.setText("請輸入修改后的地址..."); return; } Student stu=new Student(); stu.setXuehao(Integer.parseInt(xuehao)); stu.setName(name); stu.setGender(gender); stu.setAddress(address); int old=Integer.parseInt(oldXuehao); JdbcIcpCURD curd=new JdbcIcpCURD(); if(curd.modify(stu, old)){ mp.errorLb.setText("修改成功..."); }
SearchAllListener.java:搜索所有學生信息 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector;
import javax.swing.JButton; import javax.swing.JTextArea;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.SearchPanel;
public class SearchAllListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
SearchPanel sp=(SearchPanel) jb.getParent();
11
沈陽理工大學課程設計
}
} JTextArea jt=sp.resultTa; JdbcIcpCURD curd=new JdbcIcpCURD(); Vector students=curd.getAllStudent(); StringBuilder sb=new StringBuilder(); for(Student s:students){ sb.append(" "); sb.append(s.getXuehao()); sb.append(" "); sb.append(s.getName()); sb.append(" "); sb.append(s.getGender()); sb.append(" "); sb.append(s.getAddress()); sb.append(" "); sb.append(s.getRegTime().toString()); sb.append(" "); } jt.setText(sb.toString()); SearchDListener.java:搜索一個學生信息 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.DeletePanel; import manager.ui.conponent.ModifyPanel; import manager.ui.conponent.SearchPanel;
public class SearchDListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
DeletePanel dp=(DeletePanel) jb.getParent();
JdbcIcpCURD curd=new JdbcIcpCURD();
String s=dp.xuehaoFd.getText().trim();
Student stu=curd.searchByXuehao(Integer.parseInt(s));
if(stu==null){
dp.errorLb.setText("沒有查詢到此學生");
return;
}
dp.xuehaoTf.setText(new Integer(stu.getXuehao()).toString());
dp.nameTf.setText(stu.getName());
dp.genderTf.setText(stu.getGender());
dp.addressTf.setText(stu.getAddress());
12
沈陽理工大學課程設計
} } SearchListener.java:搜索一個學生信息 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.ModifyPanel;
public class SearchListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
ModifyPanel mp=(ModifyPanel) jb.getParent();
String s=mp.xuehaoFd.getText().trim();
if(s==null||s.equals("")){
mp.errorLb.setText("請輸入學號..");
return;
}
JdbcIcpCURD curd=new JdbcIcpCURD();
Student stu=curd.searchByXuehao(Integer.parseInt(s));
mp.xuehaoTf.setText(new Integer(stu.getXuehao()).toString());
mp.nameTf.setText(stu.getName());
mp.genderTf.setText(stu.getGender());
mp.addressTf.setText(stu.getAddress()); } } SearchRListener.java:搜索一個學生信息 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.ModifyPanel; import manager.ui.conponent.SearchPanel;
public class SearchRListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
13
沈陽理工大學課程設計
}
} JButton jb=(JButton) e.getSource(); SearchPanel sp=(SearchPanel) jb.getParent(); JdbcIcpCURD curd=new JdbcIcpCURD(); String s=sp.xuehaoTf.getText().trim(); Student stu=curd.searchByXuehao(Integer.parseInt(s)); if(stu==null){ return; } StringBuilder sb=new StringBuilder(); sb.append(" "); sb.append(stu.getXuehao()); sb.append(" "); sb.append(stu.getName()); sb.append(" "); sb.append(stu.getGender()); sb.append(" "); sb.append(stu.getAddress()); sb.append(" "); sb.append(stu.getRegTime().toString()); sb.append(" "); sp.resultTa.setText(sb.toString());
SubmitListener.java:提交信息監聽 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date;
import javax.swing.JButton; import javax.swing.JLabel;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.RegPanel;
public class SubmitListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) { JButton jb=(JButton) e.getSource(); RegPanel jp=(RegPanel) jb.getParent(); String xuehao=jp.xuehaoFd.getText(); String name=jp.nameFd.getText(); String address=jp.addressFd.getText(); String gender=""; boolean b1=jp.maleRB.isSelected(); boolean b2=jp.femaleRB.isSelected();
14
沈陽理工大學課程設計
if(b1){ } JLabel errorLabel=jp.errorLabel; if(xuehao==null||xuehao.trim().equals("")){ errorLabel.setText("沒有填寫學號.."); return; } if(name==null||name.trim().equals("")){ errorLabel.setText("沒有填寫姓名.."); return; } if(address==null|address.trim().equals("")){ errorLabel.setText("沒有填寫地址.."); return; } if(!(b1||b2)){ errorLabel.setText("請選擇性別..."); return; } if(b1){ gender="男"; } if(b2){ gender="女"; } Student stu=new Student(Integer.parseInt(xuehao),name,gender,new Date(System.currentTimeMillis()),address); JdbcIcpCURD curd=new JdbcIcpCURD(); boolean b=curd.insert(stu); if(b){ errorLabel.setText("注冊成功!!"); jp.xuehaoFd.setText(""); jp.nameFd.setText(""); jp.addressFd.setText(""); } } }
五、心得體會
我們剛學習java這門課程,對專業的java編程知識并未有深入的學習和探索。但是當我們查找過一些書籍資料后,在不斷努力下我們還是把課程設計題目順利的完成了。通過此次學生學籍管理系統的設計,使我們對java編程語言有了更深層次的了解。不過在編寫的過程中也存在一些問題,例如在選擇適宜的方法實現修改和刪除功能的時候,由于對
15
沈陽理工大學課程設計
數組的理解還不能滿足當前的編程需要,并未選擇更加簡單的數組來處理數據,以至于當刪除指定內容后在文本文件中留有空行,從而導致了在接下來的查詢異常和再次修改和刪除功能無法正常實現,還需人工刪除掉文本文件中的空行以保證程序的正常運行。我們也可以選用其他的更加方便的處理方法使得程序更加優化和簡潔。
“書山有路勤為徑,學海無涯苦作舟”,我們現今所學的知識還遠遠不夠,在今后的學習過程中我們要進一步學習java的更多的知識,此次課程設計不僅鍛煉了我們獨立思考和團隊合作的能力,而且提高了我們動手的能力,我會繼續努力學習此課程的。
六、參考文獻
1 鄭阿奇 編著《Java實用教程(第二版)》電子工業出版社 2 良葛格 編著《Java學習筆記》清華大學出版
16
第二篇:人員信息管理系統 java課程設計
大學人員信息管理系統
1 / 29
目錄
目錄 ....................................................................................................................................... 1 設計任務書 ............................................................................................................................... 2 課程設計任務 ........................................................................................................................... 2 程序功能實現: ....................................................................................................................... 3 1.程序主體 ............................................................................................................................ 3 2.流程圖: ............................................................................................................................ 4 3.模塊說明 ............................................................................................................................ 4 3.1、主菜單四個選項 ...................................................................................................... 4 3.
2、教師功能菜單 .......................................................................................................... 5 3.3、學生功能菜單 .......................................................................................................... 5 3.
4、查找菜單 .................................................................................................................. 6 4.源代碼及說明 ................................................................................................................. 6 4.1、listStuTea 類 ............................................................................................................ 6 4.
2、Menu 類 ................................................................................................................ 10 4.3、StudnTeach 類 ....................................................................................................... 16 4.
4、Student 類 ............................................................................................................. 19 4.5、Teacher 類 ............................................................................................................. 19 4.
6、Person 類 ............................................................................................................... 20 4.7、lkExecption類 ........................................................................................................ 21 4.
8、MainStuTea類........................................................................................................ 23 5.操作方法和測試結果 ...................................................................................................... 24 5.1.1、教師信息顯示 ..................................................................................................... 24 5.1.
2、教師信息添加 ..................................................................................................... 24 5.1.3、教師信息刪除 ..................................................................................................... 25 5.1.
4、教師信息查找 ..................................................................................................... 26 5.2、學生菜單實現 ........................................................................................................ 28 6.設計體會 .......................................................................................................................... 28
Java程序設計 大學人員信息管理系統
2 / 29
設計任務書
問題描述:
編寫程序對大學里的人員進行管理。大學里的人員主要由學生、教師和在職進修教師(既是學生又是教師)組成,各類人員均有姓名、電話和住址等信息,學生另有所屬專業信息,教師另有所在系部、授課信息及工資信息,在職進修教師具備以上各類人員的信息。
要求:
1、設計Person類,保存各類人員均有的姓名、電話和住址等信息。
2、設計Student類或接口,繼承Person類,并添加所屬專業班級信息。
3、設計Teacher類接口,繼承Person類,并添加所在系部信息,授課信息及工資信息。
4、設計StudenTeacher類,繼承Student類接口和Teache類接口。其具備以上各類人員信息。
5、把創建的所有StudenTeacher對象按照其所屬系部依次組織在一個文件中方便查詢、修改、刪除及添加等操作。
6、對各類的對象進行信息輸入操作,輸入信息包括該類對象的所有信息。
7、對各類的對象進行輸出操作,顯示輸出該類對象的所有信息
課程設計任務及設計人
設計任務:
大學人員信息管理系統 課程目的:
1、復習、鞏固Java語言的基礎知識,進一步加深對Java語言的理解和掌握;
2、課程設計為學生提供了一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結合起來,鍛煉學生的分析解決實際問題的能力。提高學生適應實際,實踐編程的能力;
Java程序設計 大學人員信息管理系統
3 / 29
3、培養學生在項目開發中團隊合作精神、創新意識及能力。
課程要求:
1、對系統進行功能模塊分析、控制模塊分析正確,符合課題要求,實現相應功能;可以加以其他功能或修飾,使程序更加完善、合理;
2、系統設計要實用,編程簡練,可用,功能全面
3、說明書、流程圖要清楚
4、記錄設計情況(備查,也為編寫設計說明書作好準備);
5、要求采用模塊化程序設計方法,及鋸齒型書寫格式,要求上機調試通過和按設計報告格式。
6、本設計需要實現Java的面向對象開發運用到的有Java的接口,Java的繼承,Java的異常處理,Java類的封裝。能夠在異常輸入的情況下,能正確處理。最后得到正確結果。
程序功能實現:
一、
二、
三、
四、
五、
六、
按照課程的要求實現學生和教師的基本信息的錄入。 把輸入的教師和學生信息顯示出來。
有姓名和專業兩種查找方式去分別把老師和學生的信息查找并且顯示出來。 刪除選項可以刪除相應學生和老師信息。
用switch語句實現菜單功能,字符界面做到簡潔清晰
異常處理處理錯誤的輸入并且返回錯誤的提示,更正后填入正確數據。
1.程序主體
1、 設計分析:
1.1、 實體是實現程序思想的主要方式,首先應該分為學生和老師2個入口,分別做查詢和信息添加、顯示、刪除和查找的功能。
1.2、 學生和老師的信息輸入考慮要求多名信息考慮用對象數組去實現。但是對象數組的刪除不是本學期的內容。且排序麻煩??紤]用其他方式實現信息錄入,查閱相關信息發現可以使用list對象實現信息錄入和刪除。
1.3、 菜單使用switch語句實現菜單功能,菜單的相互調用實現功能的循環。
Java程序設計 大學人員信息管理系統
4 / 29
2.流程圖:
3.模塊說明
3.1、主菜單四個選項
學生入口:
Java程序設計 大學人員信息管理系統
5 / 29
這個模塊與學生功能模塊相連。
教師入口:
這個模塊與教師功能模塊相連
顯示全部信息:
這個模塊顯示所有的老師和學生信息
3.2、教師功能菜單
顯示教師信息:
這個模塊顯示輸入的教師信息,如果不存在提示輸入信息
添加教師信息:
這個模塊添加教師基本信息
刪除教師信息:
這個模塊按照序號刪除教師信息,如果不存在提示信息輸入
查找教師信息:
按照姓名和專業查找教師信息
返回上一級菜單: 返回主菜單
3.3、學生功能菜單
顯示學生信息:
這個模塊顯示輸入的教師信息,如果不存在提示輸入信息
添加學生信息:
這個模塊添加教師基本信息
刪除學生信息:
這個模塊按照序號刪除教師信息,如果不存在提示信息輸入
查找學生信息:
按照姓名和專業查找學生信息
返回上一級菜單: 返回主菜單
Java程序設計 大學人員信息管理系統
6 / 29
3.4、查找菜單
按照姓名查找:
查找模塊,按照姓名查找,如果不存在則提示輸入信息。 按照專業查找:
查找模塊,按照專業查找,如果不存在則提示輸入信息。
返回上一級菜單: 返回主菜單
4.源代碼及說明
4.1、listStuTea 類
用來實現學生和教師數據添加、刪除、查找的方法
import java.util.*; import lkExecption.LKExecption; public class listStuTea extends StudnTeach{
final int SIZE = 50;//最大學生和教師人數
listStuTea[] st = new listStuTea[SIZE];//學生和老師對象數組 Scanner into = new Scanner(System.in); List list1=new ArrayList(); List list2=new ArrayList(); public int getTeaNumber() //返回教師鏈表長度 { } public int getStuNumber() //返回學生鏈表長度 { } public int getNumber() { // TODO Auto-generated method stub return list2.size()+list1.size(); return list2.size(); return list1.size(); Java程序設計 大學人員信息管理系統
7 / 29
} public void FindStuName() {
} public void FindTeaName() {
String tpname; boolean zy = true; StudnTeach point; System.out.println("請輸入教師姓名:"); tpname = into.nextLine(); for(int i = 0;i
} point =list1.get(i); if(tpname.equals(point.name)) {
} //break; System.out.println("要查找的姓名存在"); { showTea(i,point); zy = false; //標志位 } String tpname; boolean zy = true; StudnTeach point; System.out.println("請輸入學生姓名:"); tpname = into.nextLine(); for(int i = 0;i
} if(zy) System.out.println("沒有該學生"); if(getStuNumber()==0) System.out.println("警告!!!學生數據為空請添加數據"); point =list2.get(i); if(tpname.equals(point.name)) {
} System.out.println("要查找的姓名存在"); showStu(i,point); zy = false; Java程序設計 大學人員信息管理系統
8 / 29
if(zy) System.out.println("沒有該老師"); if(getTeaNumber()==0) System.out.println("警告!!!老師數據為空請添加數據");
} {
public void FindteaSpec() String tpSpec; boolean zy = true; StudnTeach point; System.out.println("請輸入教師專業:"); tpSpec = into.nextLine(); for(int i = 0;i
} if(zy) System.out.println("沒有該專業的老師"); if(getTeaNumber()==0) System.out.println("警告!!!老師數據為空請添加數據"); point =list1.get(i); if(tpSpec.equals(point.getteaSpeciality())) { showTea(i,point); zy = false;//標志位 }
} {
public void FindstuSpec() String tpStu; boolean zy = true; StudnTeach point; System.out.println("請輸入學生專業:"); tpStu = into.nextLine(); for(int i = 0;i
} if(zy) System.out.println("沒有選修該專業的學生"); point =list2.get(i); if(tpStu.equals(point.getstuSpeciality())) { showStu(i,point); zy = false;//標志位 } Java程序設計 大學人員信息管理系統
9 / 29
if(getStuNumber()==0) System.out.println("警告!!!學生數據為空請添加數據"); } public void showStu(int n,StudnTeach point) { point=list2.get(n); System.out.println("學生編號:"+n);
System.out.println("姓名:"+point.name+" 性別:"+point.sex+" 年齡:"+point.age);
System.out.println("電話:"+point.phone); System.out.println("地址:"+point.address); System.out.println("專業:"+point.getstuSpeciality()); System.out.println("班級:"+point.getClassname()); }
public void showTea(int n,StudnTeach point) { point=list1.get(n); System.out.println("教師編號:"+n);
System.out.println("姓名:"+point.name+" 性別:"+point.sex+" 年齡:"+point.age);
System.out.println("電話:"+point.phone); System.out.println("地址:"+point.address); System.out.println("專業:"+point.getteaSpeciality()); System.out.println("工資:"+point.getPay()); }
public void addstu(int n) throws LKExecption {
st[n] = new listStuTea(); st[n].add(); st[n].setClassname(); st[n].setstuSpeciality(); list2.add(st[n]); if(list2.size()!=0) System.out.println("添加學生成功");
}
public void addtea(int n) throws LKExecption {
st[n] = new listStuTea(); st[n].add(); st[n].setteaSpeciality(); Java程序設計 大學人員信息管理系統
10 / 29
}
st[n].setPay(); list1.add(st[n]); if(list1.size()!=0) System.out.println("添加教師成功");
}
public void delTea() {
}
public void delStu() {
} System.out.println("請輸入被刪的學生編號"); int k =into.nextInt(); if(list2.size()<=k||k<0) System.out.println("刪除失敗!編號不存在請重新輸入!"); else { list2.remove(k); System.out.println("刪除成功"); } System.out.println("請輸入被刪的教師編號"); int k =into.nextInt(); if(list1.size()<=k||k<0) System.out.println("刪除失敗!編號不存在請重新輸入!"); else { list1.remove(k); System.out.println("刪除成功"); } 4.2、Menu 類
字符菜單的實現
import java.util.*; import lkExecption.LKExecption; public class Menu {
Scanner into = new Scanner(System.in); int num = 0; List list=new ArrayList(); Java程序設計 大學人員信息管理系統
11 / 29
StudnTeach point = new listStuTea();//遍歷指針 public Menu() throws LKExecption{ } public int setIn() {
} void MainMenu() throws LKExecption//主菜單 { System.out.println("================"); System.out.println("1.教師入口"); System.out.println("2.學生入口"); System.out.println("3.顯示全部信息"); System.out.println("4.退出管理"); switchMainMenu(); } void FindMenu()//查找菜單 {
} void MenuTea1_1() throws LKExecption//老師菜單 {
System.out.println("----------------"); System.out.println("1.顯示教師信息"); System.out.println("2.添加教師信息"); System.out.println("3.刪除教師信息"); System.out.println("4.查找教師信息"); System.out.println("5.返回上一級菜單"); System.out.println("----------------"); System.out.println("1.按照姓名查找"); System.out.println("2.按照專業查找"); System.out.println("3.返回上一級菜單"); //switchMainMenu(); int t; String tpNum = null; try{
} catch(NumberFormatException e) { } return t; t = new LKExecption().Num1Execption(tpNum); System.out.println("請輸入選項"); tpNum = into.nextLine(); t = Integer.parseInt(tpNum); MainMenu(); Java程序設計 大學人員信息管理系統
12 / 29
} switchMenuTea1_1(); void MenuStu1_1() throws LKExecption//學生菜單 {
} void switchFindStuMenu() throws LKExecption//查找學生菜單 {
} void switchFindTeaMenu() throws LKExecption//查找教師菜單 {
int t; t = setIn(); switch(t) { case 1: int t; t = setIn(); switch(t) { case 1:
} point.FindStuName(); FindMenu(); switchFindStuMenu(); break; point.FindstuSpec(); FindMenu(); switchFindStuMenu(); break; MenuStu1_1(); switchMenuStu1_1(); break; System.out.println("輸入錯誤請重新輸入"); switchFindStuMenu(); System.out.println("----------------"); System.out.println("1.顯示學生信息"); System.out.println("2.添加學生信息"); System.out.println("3.刪除學生信息"); System.out.println("4.查找學生信息"); System.out.println("5.返回上一級菜單"); switchMenuStu1_1(); case 2: case 3: default: Java程序設計 大學人員信息管理系統
13 / 29
} void switchMainMenu() throws LKExecption//主菜單 {
int t; t = setIn(); switch(t) { case 1:
MenuTea1_1();//老師顯示菜單
break; MenuStu1_1();//學生顯示菜單
break; if(point.getNumber()==0) System.out.println("警告!!!數據為空請添加數據"); else{
} for(int i = 0;i
point.showTea(i,point); point.showStu(i,point); for(int i = 0;i
} point.FindteaSpec(); FindMenu(); switchFindTeaMenu(); break; MenuTea1_1(); switchMenuTea1_1(); break; System.out.println("輸入錯誤請重新輸入"); switchFindTeaMenu();
point.FindTeaName(); FindMenu(); switchFindTeaMenu(); break; case 2: case 3: default: case 2: case 3: Java程序設計 大學人員信息管理系統
14 / 29
}
} MainMenu(); break; System.out.println("歡迎再次光臨!大學人員信息管理系統!!"); break; System.out.println("輸入錯誤請重新輸入"); switchMainMenu(); case 4: default: void switchMenuTea1_1() throws LKExecption {
System.out.println("----------------"); int t; t = setIn(); switch(t) { case 1:
if(point.getTeaNumber()==0) System.out.println("警告!!!教師數據為空請添加數據"); for(int i = 0;i
FindMenu(); switchFindTeaMenu(); break; MainMenu(); break; case 2: case 3: case 4: case 5: Java程序設計 大學人員信息管理系統
15 / 29
}
} default:
} System.out.println("輸入錯誤請重新輸入"); switchMenuTea1_1(); void switchMenuStu1_1() throws LKExecption {
} System.out.println("----------------"); int t; t = setIn(); switch(t) { case 1:
} if(point.getStuNumber()==0) System.out.println("警告!!!學生數據為空請添加數據"); for(int i = 0;i
Java程序設計 大學人員信息管理系統
16 / 29
4.3、StudnTeach 類
繼承于教師和學生接口實現它們抽象方法,且繼承人類屬性。
import java.util.*;
import lkExecption.LKExecption; class StudnTeach extends Person implements Student,Teacher{
Scanner into = new Scanner(System.in); float pay = 0;//工資
String classname = null;//班級 String stuSpec = null;//老師專業 String teaSpec = null;//學生專業
void add() throws LKExecption {
}
public void addstu(int n) throws LKExecption{
}
public void addtea(int n) throws LKExecption{
}
public void setPay() {
String tpNum = null; try{ //add();
//setteaSpeciality(); //setPay() ; //add();
//setClassname(); //setstuSpeciality(); setName(); setSex(); setAge(); setPhone (); System.out.println("請輸入地址"); address = into.nextLine();
Java程序設計 大學人員信息管理系統
17 / 29
}
} System.out.println("請輸入工資:"); tpNum = into.nextLine(); pay = Integer.parseInt(tpNum); catch(NumberFormatException e) { } pay = new LKExecption().Num1Execption(tpNum); public float getPay() {
}
public void setClassname() {
}
public String getClassname() {
}
public void setstuSpeciality() {
}
public String getstuSpeciality() {
}
return stuSpec;
System.out.println("請輸入專業:"); stuSpec = into.nextLine();
return classname;
System.out.println("請輸入班級:"); classname = into.nextLine();
return pay; Java程序設計 大學人員信息管理系統
public void setteaSpeciality() {
System.out.println("請輸入專業:");
teaSpec = into.nextLine();
}
public String getteaSpeciality() {
return teaSpec; }
public void show(boolean b, int num, StudnTeach point) {
}
public void showStu(int num, StudnTeach point) {
}
public void showTea(int num, StudnTeach point) {
}
public int getStuNumber() {
return 0; }
public int getTeaNumber() {
return 0; }
public int getNumber() {
return 0; }
public void delStu() {
} Java程序設計
18 / 29 大學人員信息管理系統
19 / 29
} public void FindteaSpec() { } public void FindTeaName() { } public void FindstuSpec() { } public void FindStuName() { } public void delTea() { }
4.4、Student 類
接口、學生的抽象方法
public interface Student {
} abstract void setstuSpeciality(); abstract String getstuSpeciality(); abstract void setClassname(); abstract String getClassname();
4.5、Teacher 類
接口、教師的抽象方法
public interface Teacher { Java程序設計 大學人員信息管理系統
20 / 29
} abstract void setteaSpeciality(); abstract String getteaSpeciality(); abstract void setPay(); abstract float getPay();
4.6、Person 類
定義人類的基本屬性
import java.util.*; import lkExecption.LKExecption; public class Person {
Scanner into = new Scanner(System.in); String name; int phone; String address; String sex; int age; public void setName() {
} public void setSex() throws LKExecption {
} public void setAge() { String tpAge = null; try{ System.out.println("請輸入性別:"); sex = into.nextLine(); if(sex.equals("man")||sex.equals("woman")) {} else
} catch(LKExecption lk) { } sex = new LKExecption().sexExecption(sex); throw new LKExecption(); System.out.println("請輸入姓名:"); name = into.nextLine(); Java程序設計 大學人員信息管理系統
21 / 29
}
} try{
} catch(NumberFormatException e) { } age = new LKExecption().NumExecption(tpAge); System.out.println("請輸入年齡:"); tpAge = into.nextLine(); age = Integer.parseInt(tpAge); public void setPhone () {
} String tpNum = null; try{
} catch(NumberFormatException e) { } phone = new LKExecption().Num1Execption(tpNum); System.out.println("請輸入電話號碼:"); tpNum = into.nextLine(); phone = Integer.parseInt(tpNum);
4.7、lkExecption類
自定義異常類
package lkExecption; import java.util.Scanner; public class LKExecption extends Exception {
Scanner into = new Scanner(System.in); public String sexExecption(String mg) {
String str; boolean pd = true; do{
System.out.println(mg+" 不是正確的性別,正確的性別為 man 或者 woman"); str = into.next(); Java程序設計 大學人員信息管理系統
22 / 29
} //System.out.println(mg+" 驗證");
if(str.equals("man")||str.equals("woman")) { } }while(pd); return str; pd = false; public int NumExecption(String mg) {
String num = null; int tpNum = 0; boolean pd = true; System.out.println(mg+" 請正確的數字或者不在范圍內!請重新輸入!!"); do{
try{
} catch(NumberFormatException e) { System.out.println(num+" 請正確的數字或者不在范圍內!請重新輸num = into.nextLine(); tpNum = Integer.parseInt(num); if(tpNum>120||tpNum<0) //范圍判斷 throw new NumberFormatException(); else pd = false; 入!!");
}
} public String charExecption(String mg) {
final String[] str={"null"};//這里指定 規定字段 boolean pd = true; do{ System.out.println(mg+" 不是正確字段,請輸入指定的字段"); mg = into.next(); for(int i =0;i
23 / 29
}
} } }while(pd); return mg; public int Num1Execption(String mg) {
} String num; int tpNum = 0; System.out.println(mg+" 不是數字!請輸入數字!!"); do{
try{
} catch(NumberFormatException e) { System.out.println(mg+" 不是數字!請輸入數字!!"); } num = into.nextLine(); tpNum = Integer.parseInt(num); break; }while(true); return tpNum; 4.8、MainStuTea類
主函數調用
import lkExecption.LKExecption; public class MainStuTea {
} public static void main(String[] args) throws LKExecption { Menu lk = new Menu(); }
Java程序設計 大學人員信息管理系統
24 / 29
5.操作方法和測試結果 5.1.1、教師信息顯示
選擇一進入教師信息入口
選擇一進入教師信息查看
因為我們沒有添加教師信息,所以他要求我們添加教師信息
5.1.2、教師信息添加
選擇二進入教師信息添加
Java程序設計 大學人員信息管理系統
25 / 29
教師信息添加成功,如果不是指定字段輸入,出現異常則重新輸入 如下為添加的信息輸入顯示
5.1.3、教師信息刪除
Java程序設計 大學人員信息管理系統
26 / 29
5.1.4、教師信息查找
專業查找
現在添加三個教師信息,如下顯示
首先使用專業查找,我們查找computer專業的
Java程序設計 大學人員信息管理系統
27 / 29
查找其他math專業
查找不存在的專業
姓名查找
再添加一個同名的教師
查找lisi Java程序設計 大學人員信息管理系統
28 / 29
5.2、學生菜單實現
學生信息采取同樣測試
6.設計體會
這個課程設計可以的設計心得,可謂十分波折。全部的源代碼都出自自己,其中的list排列我們還沒有學習。在這里要感謝google感謝baidu。沒有他們就沒有今天的代碼。當然網上只有相似的課題沒有相同的代碼,list排列經過自己一小時的摸索可以了解了部分的運用,首先寫了一個test類來測試這個用法
import java.util.ArrayList; import java.util.LinkedList; import java.util.Iterator; import java.util.List; import java.util.Scanner;
public class test { public static void main(String[] args) {
System.out.println("開始:"); String a = "A", b = "B", c = "C", d = "D", e = "E"; List list = new LinkedList(); list.add(a); list.add(e); list.add(d); Java程序設計 大學人員信息管理系統
29 / 29
list.set(1, b);// 將索引位置為1的對象e修改為對象b list.add(2, c);// 將對象c添加到索引位置為2的位置 list.add(e); list.remove(1); Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }
System.out.println("結束!"); } } 再想了一下把它添加進了listStuTea對象,全都的代碼完成用了一天的時間,在原來想起寫500多行的代碼幾乎是不可能的,但是在這個課程設計中實現了。這個課程設計真的使自己學到了很多的東西。在接口的使用還不是很好的和實際模型很多的結合起來,這是鍛煉較少的原因,前期的分析也幼稚的表現了自己在這方面的不足,在層次結構上浪費了較多的時間。 總之在這方面的鍛煉還是比較少,我想不管是在以后布置下來的課程設計才去編寫代碼,這是不可行的,得在平時多多鍛煉。
Java程序設計
第三篇:Java程序設計課程設計學生考勤系統
信息與電子工程學院
課程設計報告
課程名稱:
姓名: 學號: 班級: 指導老師: 完成時間:
2016年6月 Java程序設計課程設計
學生考勤系統
問題描述:
以班為單位,可以以日期為標識記錄每個學生的考勤情況(正常、曠課、請假、遲到、早退)、可以查看某個學生的考勤情況、可以查看全班的考勤情況.
1.需求分析(標題,黑體,小四,段前段后0.5行)
(1)用戶需求描述:
學生用戶:學生對本系統的主要需求是在線請假以及查看學期內的上課出勤信息。 在線請假中,學生可以隨時查看請假的進展情況。另外學生還可以修改本人的密碼。
教師用戶:任課老師對本系統的主要需求是查看班級信息,查看學生信息。并且在上課前進行點名,管理所教班級學生的上課出勤信息,查看學生上課出勤情況,對學生請假審請進行批準等。另外,教師還可以修改自己的密碼。 (2)系統功能劃分: 根據用戶需求的描述,該考勤管理系統應該具備:在線請假模塊,考勤管理模塊這兩大模塊。
在線請假模塊:
該模塊主要操作用戶是由學生,由學生登錄并進行請假操作??梢赃x擇請假開始時間,請假結束時間,請假的原因等,最后提交由教師和輔導員進行審核審批,審核通過后學生可以在請假記錄里面實時查看請假通過情況。若教師或輔導員不允許該請假,學生可以在請假失敗記錄里面查看具體原因。
考勤管理模塊:
該模塊主要由教師登錄并進行操作,自己操作界面中修改學生考勤。老師在上課時通過該模塊可以對本課程考勤情況進行網上考勤,考勤結果會保存在后臺,也可以通過選擇導出為E表格,最后方便統計整個學期本課程所有學生的考勤情況。
2.總體設計
功能結構圖;
ER圖:
數據庫設計: 1 數據庫需求分析
學生考勤管理系統要實現在線請假、隨堂考勤兩大子系統,需要了解學生用戶、教師用戶兩類用戶的功能模塊。然后,據此分析出數據需求。學生表:學生流水號、學生學號、學生名字、性別、宿舍號、聯系方式、密碼。請假表:請假開始時間、請假結束時間、請假原因、請假天數、審批時間??记诒恚嚎记诹魉?、考勤的學生ID、考勤的課程ID、考勤時間、考勤課次、考勤結果。
3.主要功能的實現
(1)設計的思路: 根據用戶需求的描述,該考勤管理系統應該具備:在線請假模塊,考勤管理模塊這三大模塊。
在線請假模塊:
該模塊主要操作用戶是由學生,由學生登錄并進行請假操作??梢赃x擇請假開始時間,請假結束時間,請假的原因等,最后提交由教師和輔導員進行審核審批,審核通過后學生可以在請假記錄里面實時查看請假通過情況。若教師或輔導員不允許該請假,學生可以在請假失敗記錄里面查看具體原因。
考勤管理模塊:
該模塊主要由教師登錄并進行操作,自己操作界面中修改學生考勤。老師在上課時通過該模塊可以對本課程考勤情況進行網上考勤,考勤結果會保存在后臺,也可以通過選擇導出為E表格,最后方便統計整個學期本課程所有學生的考勤情況。 用戶信息修改模塊: 該模塊主要操作用戶是由學生和老師,由用戶登錄并進行操作。選擇修改用戶密碼,驗證舊的用戶密碼,輸入新的用戶密碼,并且重復確認輸入,點擊確定之后,系統修改用戶信息并保存。
(2)算法流程圖:
(3)UML時序圖:
學生輸入用戶名和密碼,系統驗證用戶名和密碼是否正確,如果正確,顯示系統主頁面。 (4)活動圖:
學生登陸系統點擊請假申請,然后填寫假條信息,填寫完成后點擊提交,老師審批假條并返回信息給申請者。 (2)程序執行結果
4.小結
課程設計小結:該系統還有較多不完善之處,個人能力也有待進一步的提升。通過這次課程設計,重新掌握了一些以前掌握的不夠牢固的知識和一些不懂的方法實現的思路及想法,讓我們得到進一步的提高。
第四篇: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,如何在短時間內學習一個自己不懂的東西那就是利用好所有的搜索引擎,多去圖書館找資料??傊舜握n程設計我們不僅長了學科知識,在生活上我也長了見識。
六、 參考文獻
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語言》課程設計設計