第一篇:人事管理系統Java課程設計報告
湖南科技大學計算機科學與工程學院
數據庫課程設計報告
題目:人事管理管理系統
學 號:1005030221 姓 名:艾向兵 指導教師:張黎
完成時間:2012年1月4日 組員:蘇勇,成佳裕,艾向兵
企業人事管理系統主要用于員工個人資料的錄入,職務變動的記錄和管理。使用人事管理系統,便于公司領導掌握人員的動向,及時調整人才的分配 1.1系統功能需求分析
人事管理系統主要有以下幾項功能要求:.新員工資料的輸入。
.自動分配員工編號,并且設置初始的用戶密碼:.人事變動的記載,包括崗位和部門的調整。.員工信息的查詢和修改,包括員工個人信息和密碼 1.2 系統功能模塊設計
根據系統功能要求,可以將系統分解成幾個模塊來分別設計應用程序界面,如圖,人事資源管理 包括:新員工檔案輸入,人事變更,員工檔案查詢
1.3 與其它系統的關系
本關系是公司管理信息系統的基礎部分,為其他子系統,如考勤管理系統,工資管理系統和員工培訓系統,提供員工的基本信息。同時為其他系統提供了員工登錄的密碼認證和權限分配。1.4數據庫設計 數據庫需求分析:
員工信息:員工號,密碼,權限,姓名,性別,生日,專業,通訊地址,電話,Email,當前狀態,其他。
人事變動:記錄號,員工,變動,詳細描述
部門設置:部門編號,名稱
員工變動代號表
員工信息表
員工職位代碼表
管理員登陸界面
信息查詢,修改,刪除主界面
查詢單個員工的界面
總 結
這次的課程設計,是在學習了Java以后通過閱讀課本及在圖書館借閱相關書籍同嚴景、孟珍三人共同完成的。在開發這個系統的過程中,碰到很多或大或小的問題,我們一起思考,一起努力,最后大部分都解決了,得到了現在的這個簡單的人事管理系統。
在編制過程中,我們首先考慮到了界面的友好性,并在界面設計時不采用煩瑣的細節,使界面簡單、清晰,便于操作。一開始我們是想做個登錄界面,實現用戶的登錄權限管理,但試了幾次都沒有達到預期的效果,最后不得不放棄。
通過這次課程設計,我知道了什么事情都不那么簡單,只有努力去做了,你才會有收獲,不管收獲大小,付出的過程總是有的。有些事情只有親身感受,你才知道它的價值有多大。同時在遇到困難的時候要沉著冷靜,首先要冷靜分析問題,對于很難解決的問題要學會請教他人,還可以與別人合作。
在這次數據庫系統課程設計中,我主要進行的是界面的設計,以及進行進行整合操作,界面是我學習Java以來第一次做,以前不怎么用的JTabel等,現在都已經熟練的應用了,特別是這次的彈出窗口,我在做這個的時候可謂是一竅不通,因為把按鈕JButton定義為了局部變量而在時間響應中而得不到另一個窗口的彈出。
還有就是在整個過程中的ID傳遞讓我不知怎么辦,一個簡單的參數傳遞才得以搞定,基礎知識還是不夠牢靠。在得到修改表的數據庫內容后未把值傳給表格。
雖然這次課程設計付出了大量的時間,但是我知道我得到的收獲遠遠不是這些時間可以衡量的,它將給我今后的學習和工作帶來更多的收益。通過對此課題的開發,使我對用Java開發系統有了一個比較清楚的認識,體會到理論和實踐的重要性。由于自己的分析設計和程序經驗不足,該系統設計和實現過程中,還有許多沒有完善的地方,比如沒有設置登錄界面,沒有考慮到異常等多方面問題,這些都有待進一步完善和提高。對于文中出現的不足和系統中出現的問題敬請老師指導。
彈出登錄程序的界面程序
public void actionPerformed(ActionEvent e){
if(e.getSource()==okButton){
String userID=text.getText();String passWD=String.valueOf(passwd.getPassword());if(userID.equals(“1”)&&passWD.equals(“1”)){
JOptionPane.showMessageDialog(null, “登陸成功!”, “消息”, JOptionPane.INFORMATION_MESSAGE);
new UserWindow2().userWindow2();//彈出第二個窗體
} else{
JOptionPane.showMessageDialog(null, “對不起您的用戶名或密碼錯誤!”, “錯誤”,JOptionPane.ERROR_MESSAGE);
text.setText(“");passwd.setText(”“);} } if(e.getSource()==deleButton){
text.setText(”“);passwd.setText(”“);}
} 進行信息查詢,修改,刪除的程序響應代碼:
public void actionPerformed(ActionEvent e){
if(e.getSource()==button1){
new UserWindow3();
} if(e.getSource()==button2){
UserWindow7 u= new UserWindow7();u.userWindow7();} if(e.getSource()==button3){ UserWindow5 u=new UserWindow5();
u.userWindow5();}
public void actionPerformed(ActionEvent e){
if(e.getSource()==button){ int id= Integer.parseInt(text0.getText());//得到用戶編號
String name=text1.getText();//得到用戶姓名
String sex=text2.getText();//得到性別
String birthDay=text3.getText();//得到生日 String department=text4.getText();//得到所在部門 String job =text5.getText();//得到職位
String education=text6.getText();//得到教育程度 String spcialty=text7.getText();//專業技能 String address=text8.getText();//得到地址 String tel=text9.getText();//得到電話
String email=text10.getText();//得到電子郵箱 String state=text11.getText();//得到員工狀態 String remark=text12.getText();//得到備注 Insert in=new Insert();//
boolean b;
b=in.insert(id,name,sex,birthDay,department,job,education,spcialty,address,tel,email,state,remark);if(b){ JOptionPane.showMessageDialog(null, ”數據保存成功!“, ”消息“, JOptionPane.INFORMATION_MESSAGE);}
} }
public void actionPerformed(ActionEvent e){
// TODO Auto-generated method stub
id = Integer.parseInt(text.getText());
if(e.getSource()==button){ UserWindow8 us = new UserWindow8();us.userWindow8(id);
}
Container container=this.getContentPane();container.setLayout(new BorderLayout());
JPanel pan =new JPanel();JLabel lab = new JLabel(”請輸入工號:“);JTextField text=new JTextField(10);JButton button =new JButton(”查詢“);JButton button1=new JButton(”刪除“);pan.add(lab);pan.add(text);pan.add(button);pan.add(button1);container.add(pan);
String []titles={”員工編號“,”姓名“,”性別“,”生日“,”部門“,”職務“,”教育程度“,”專業技能“,”家庭住址“,”聯系電話“,”電子郵箱"};
String [][]userInfo={};
JTable table =new JTable(userInfo,titles);table.isCellEditable(2,2);JScrollPane scrollpane
=new
JScrollPane(taboooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................le);
container.add(scrollpane,BorderLayout.SOUTH);
第二篇:JAVA課程設計報告ATM存取款系統
目 錄
1課程設計題目描述和基本設計要求...............................................................2 系統需求分析..................................................................................................2.1 功能需求分析 ······················································································
2.2 其他需求分析 ······················································································
3系統設計...........................................................................................................3.1 總體設計 ······························································································
3.2 ATM柜員機界面設計 ·········································································
3.3 各功能模塊設計 ··················································································
3.3.1 登陸頁面模塊設計 ································································
3.3.2 選擇服務模塊設計 ································································
3.3.3 取款模塊設計 ·······································································
3.3.4 退卡模塊設計 ······································································· 3.4 異常處理情況說明 ·································································· 系統實現與測試..............................................................................................5總程序...............................................................................................................6 課程設計總結..................................................................................................6.1 遇到的問題及解決辦法 ······································································
6.2 心得體會 ······························································································
ATM柜員機 課程設計題目描述和基本設計要求
ATM柜員機主要是由各個Windows窗口組成,它是由登錄頁面、選擇服務、取款、查詢余額、修改密碼和退卡等功能。它的各種按鈕的事件和功能可以簡單的模擬ATM柜員機的要求。系統需求分析 2.1 功能需求分析
主要功能如下所述:
要求使用圖形用戶界面。當輸入給定的卡號和密碼(初始卡號為000000和密碼為123456)時,系統能登錄ATM柜員機系統,用戶可以按照以下規則進行:
? 查詢余額:初始余額為50000元
? ATM取款:每次取款金額為100的倍數,總額不超過5000元,支取金額不允許透支。
? ATM存款:不能出現負存款。
? 修改密碼:只有舊密碼正確,新密碼符合要求,且兩次輸入相同的情況下才可以成功修改密碼。
2.2 其他需求分析
(1)性能描述
實時性好、靈活性強、易于不同年齡階段的人操作。(2)設計約束
開發工具:JCrator ProV3.5.0 運行環境:Windows 2000以上 能實現用戶所定義的各項需求。(3)界面要求
以Windows窗口形式顯示,標題欄為ATM柜員機名稱,右上角有最小化按鈕、最大化按鈕、關閉按鈕,不同的窗口中有不同的按鈕和選擇菜單。系統設計 3.1 總體設計
我所設計的ATM柜員機主要是由登錄頁面模塊還由選擇服務模塊組成,其中選擇服務模塊又由取款模塊、查詢余額模塊、修改密碼模塊、退卡模塊組成。其功能結構圖如下所示:
圖1
ATM功能結構示意圖
3.2 ATM柜員機界面設計
一個系統界面的好壞直接影響到用戶的操作,界面設計要求樣式美觀、簡單明了、方便易操作。界面主要分為窗體、菜單、按鈕和文本輸入框幾個部分,分別執行相應的操作。
(1)窗體的設計
窗體整個框架使用Frame類構造,Frame有自己的外邊框和自己的標題,創建Frame時可以指定其窗口標題,我創建的窗口標題是各個不同功能的模塊的名字,比如說查詢余額,還有取款等。相應源代碼為:WindowBox(String s,Account act){super(“ATM柜員機”);}、Selection(String s,Account act){ } super(s);向Frame窗口中添加組件使用add()。例如:button1 = new Button(“存款”);
p1.add(button1);this.add(p1);每個Frame在其右上角都有三個控制圖標,分別代表將窗口最小化、窗口最大化和關閉的操作,其中最小化和最大化操作Frame可自動完成,而關閉窗口操作實現需要書寫有關的代碼,在我的程序中我采用的是對WINDOWS_CLOSING事件做出響應,調用dispose()方法關閉窗口。Frame也可以引發WindowsEvent類代表的窗口事件。相應源代碼為:
addWindowListener(new WindowAdapter()//窗口偵聽器,以從此窗口接收窗口事件 {public void windowClosing(WindowEvent e)//處理窗口關閉事件
{ System.exit(0);} });}(2)窗體的主要結構的設計
我所設計的窗口的主要結構的特點就是每個窗口都對應著一個特定的功能。比如說報各種各樣的錯,還有各種查詢余額、取款、選擇服務等,所以它們都是由各種按鈕和文本框,標簽組成的,而聯系各個窗體成為一個整體的就是各個按鈕的監聽事件。所以整個設計就趨向簡單化了。
為了定義各個按鈕所對應的命令和操作,首先需要將各個按鈕注冊給實現了動作事件的監聽接口ActionListener的監聽者,然后為監聽者定義actionPerformed(ActionEvent e)方法,在這個方法中調用e.getSource()或e.getActionCommand()來判斷用戶點擊的菜單子項,并完成這個菜單子項定義的操作。
3.3 各功能模塊設計 3.3.1 登陸頁面模塊設計
與ATM柜員機打交道比較多的,也是大家對安全比較關心的問題:密碼。所以第一個界面就是要輸入密碼和卡號才能繼續服務。
我定義了文本框累的對象tf1,tf2。抓藥是用于輸入單行的文本;文本區調用public String getText()方法,獲取用戶想要的字符串。用來判斷輸入的密碼和卡號是否正確,如果不正確的話,則彈出密碼或卡號錯誤的警告框,并用dispose()關掉窗口。
3.3.2 選擇服務模塊設計
在選擇服務模塊中,有各種ATM的服務功能,只要用戶在該界面中選擇按鈕,它就會彈出各個相應的界面。每一個按鈕都有監聽器,在選擇了按鈕后,java.awt.event中的ActionEvent類創建一個事件對象,并將它傳遞給方法public void actionPerformed(ActionEvent e)中的參數e,監視器就會知道所發生的事件,對此事件進行處理。
3.3.3 取款模塊設計
在取款模塊中,和其他的界面也是同樣的結構。也是有一個文本框和一個按鈕還有標簽組成的。用戶在文本框中輸入他想取的數額,但是必須是100的倍數,而且每一次最多只能取5000塊。當然了取款的時候也不能超過卡里的余額,再就是卡里的余額不可以為負,否則就會彈出報錯的窗口。3.3.4 退卡模塊設計
在退卡模塊設計中,這個方法就更加的簡單了,它只是用了if(e.getSource()==button4){//退出
} System.exit(0);dispose();這個方法就可以實現了,這里就不再多說了。
3.4 異常處理情況說明
(1)打開、保存文件時的異常處理 需要處理的異常:IOException(2)數據庫訪問時的異常處理 需要處理的異常:SQLException(3)加載類時的異常處理
需要處理的異常:ClassNotFindException,當應用程序試圖使用Class類中的forName方法通過字符串名加載類時,但是沒有找到具有指定名稱的類的定義。
(4)加載URL時的異常
需要處理的異常:MalformedURLException,拋出這一異常指示出現了錯誤的 URL?;蛘咴谝幏蹲址姓也坏饺魏魏戏▍f議,或者無法分析字符串。系統實現與測試
(1)編譯運行程序后,將會看到如下的界面,如圖2所示。如果輸入的密碼或卡號不正確的話就會報右下圖的錯誤。
圖2 主界面—登陸頁面
(2)選擇服務界面效果
當輸入的密碼和卡號正確,單擊確定后就會進入到選擇服務的界面,如圖3所示。然后就可以選擇所需要的服務了。
圖3 選擇服務界面
(3)取款界面,如圖4所示。
圖4 取款界面
(4)查詢余額界面,如圖7所示。
圖7 查詢余額界面
圖8 存款界面
圖9 轉賬界面
經過測試,所有的功能基本上都實現了,而且運行正常。.總程序
package ZDC;//主菜單
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel1 extends JPanel{ JLabel label1,label2;
Panel1(){
setLayout(new GridLayout(4,1));
label1=new JLabel(“
”+“銀行存取款系統”);label2=new JLabel(“
”+“歡迎你成為本行用戶,你可以選擇中文或英文方式”);
add(new JLabel());add(label1);add(label2);add(new JLabel());
} } class Panel2 extends JPanel{
JButton button1,button2;
Panel2(){
setLayout(new GridLayout(3,6));
button1=new JButton(“中文”);button2=new JButton(“英文”);
add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(button1);add(new JLabel());add(new JLabel());
add(button2);add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(new JLabel());
} } class Client extends JFrame implements ActionListener{
Panel1 panel1;Panel2 panel2;JFrame frame;
Client(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel1();panel2=new Panel2();
con.add(panel1);con.add(panel2);
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()==“中文”){
this.setVisible(false);
new Client00(“輸入密碼”);
}
else if(e.getActionCommand()==“英文”){String inputValue = JOptionPane.showInputDialog(“Please input a value”);}
} } public class menu{
public static void main(String []args){
new Client(“用戶取款系統”);
}} package ZDC;
// 輸入密碼界面
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel01 extends JPanel{
JLabel label1,label2,label3,label4;JPasswordField textA;JTextField textC;
static JTextField textB;char t[]=new char[4];
Panel01(){
setLayout(new GridLayout(4,4));
for(int i=0;i<4;i++){t[i]=(char)(Math.random()*26+'a');}
String mm=new String(t);
label2=new JLabel(“請輸入卡號:”);label1=new JLabel(“請輸入密碼:”);
label3=new
JLabel();label4=new
JLabel(“
請
輸
入
驗
證”);label3.setBackground(Color.white);
碼
:
label3.setForeground(Color.red);
textC=new JTextField(10);textC.setForeground(Color.blue);
label3.setText(mm);
textA=new JPasswordField(6);textA.setEchoChar('*');textB=new JTextField(“");
for(int i=0;i<5;i++){add(new JLabel());}
add(label2);add(textB);add(new JLabel());add(new JLabel());
add(label1);add(textA);add(new JLabel());add(new JLabel());
add(label4);add(textC);add(label3);
} } class Panel02 extends JPanel{ JButton button1,button2;
Panel02(){
setLayout(new GridLayout(3,6));
button1=new JButton(”確定“);button2=new JButton(”取消“);
for(int i=0;i<7;i++){add(new
JLabel());}add(button1);add(new JLabel());
add(button2);for(int i=0;i<6;i++){add(new JLabel());}
} } class Client00 extends JFrame implements ActionListener{
Panel01 panel1;Panel02 panel2;JFrame frame;int i=0,j=0;
Client00(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel01();panel2=new Panel02();
con.add(panel1);con.add(panel2);
JLabel());add(new
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
char[] passwords=panel1.textA.getPassword();String password=new String(”000000“);
//設置賬號123456789的初始密碼為112626,每輸入一次都有提示,在連續輸入三次不正確后系統自動退出。
”);}
if(e.getActionCommand().equals(“確定”))
if(panel1.textC.getText().equals(panel1.label3.getText())){
heshi();
}
else{JOptionPane.showMessageDialog(frame,“你輸入的驗證碼有誤,請重新輸入。
else if(e.getActionCommand()==”取消“){this.setVisible(false);new Client08(”“);}
}
public void heshi(){
if(panel1.textA.getText().equals(”“)||panel1.textB.getText().equals(”“)){JOptionPane.showMessageDialog(frame,”
請輸入賬號、密碼!“);return;} try{ Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數據庫 Statement sql=con.createStatement();
String ql=panel1.textB.getText();
ResultSet rs=sql.executeQuery(”select cnima from card where cno=“+ql+”“);
if(rs.next()){
String qerycmima=panel1.textA.getText();
String s=rs.getString(1);
if(qerycmima.equals(s)){
JOptionPane.showMessageDialog(frame,”
連接成功!“);
this.setVisible(false);new Client01(”用戶取款系統“);
}else{ if(i!=2){i++;j=3-i;
JOptionPane.showMessageDialog(frame,”密碼有誤!你還有“+j+”次機會,請你再仔細想想.“);
panel1.textA.setText(”“);}
else {JOptionPane.showMessageDialog(frame,”對不起,你輸入的密碼次數達三次,下次再見?!?;System.exit(0);}
}
con.close();frame.repaint();
}
else{JOptionPane.showMessageDialog(null,”
該用戶不存在,重新輸入!“,”警告!“, JOptionPane.YES_NO_OPTION);
panel1.textA.setText(”“);panel1.textB.setText(”“);panel1.textC.setText(”“);return;}
}catch(SQLException g){ System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage());
} catch(Exception e){ e.printStackTrace();
}
} } class Inputpassword{
public static void main(String []args){
new Client00(”用戶取款系統“);
}} package ZDC;//選擇界面
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel03 extends JPanel{
”);
for(int i=0;i<7;i++){add(new
JLabel());}add(button1);add(new
JLabel());add(new
JButton button1,button2,button3,button4,button5;
Panel03(){
setLayout(new GridLayout(8,6));
button1=new JButton(“查詢”);button2=new JButton(“取款”);
button3=new JButton(“轉賬”);button4=new JButton(“退出”);button5=new JButton(“存款JLabel());
add(button2);for(int
i=0;i<8;i++){add(new
JLabel());}add(button3);add(new JLabel());add(new JLabel());add(button5);
for(int i=0;i<17;i++){add(new JLabel());}add(button4);for(int i=0;i<7;i++){add(new JLabel());}
} } class Client01 extends JFrame implements ActionListener{
Panel03 panel1;JFrame frame;
Client01(String s){
super(s);
Container con=this.getContentPane();
panel1=new Panel03();con.add(panel1);
panel1.button1.addActionListener(this);panel1.button2.addActionListener(this);
panel1.button3.addActionListener(this);panel1.button4.addActionListener(this);panel1.button5.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()==”取款“){
this.setVisible(false);
new Client02(”請選擇取款金額“);
}
else if(e.getActionCommand()==”查詢“){
this.setVisible(false);
new Client06(”查詢服務“);
}
else if(e.getActionCommand()==”存款“){
this.setVisible(false);
new Client05(”請選擇存款金額“);
}
else if(e.getActionCommand()==”轉賬“){
this.setVisible(false);
new Client04(”用戶轉賬服務“);
}
else if(e.getActionCommand()==”退出“){ this.setVisible(false);new Client08(”“);}
} } class Selectfunction{
public static void main(String []args){
new Client01(”用戶取款系統“);
new Client01(”用戶存款系統“);
} } package ZDC;//查詢功能
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;
import ZDC.Panel01;
import java.awt.event.*;class Panel06 extends JPanel{
JLabel label1,label2;JTextField textA;JFrame frame;
Panel06(){
setLayout(new GridLayout(4,4));label1=new JLabel(”你的余額為:“);
textA=new JTextField(6);
for(int i=0;i<5;i++){add(new JLabel());}
add(label1);add(textA);for(int i=0;i<9;i++){add(new JLabel());}
} } class Panel07 extends JPanel{
JButton button1,button2;
Panel07(){
setLayout(new GridLayout(3,6));
button1=new JButton(”繼續“);button2=new JButton(”查詢“);
for(int i=0;i<7;i++){add(new
JLabel());}add(button2);add(new JLabel());
add(button1);for(int i=0;i<7;i++){add(new JLabel());}
} } class Client03 extends JFrame implements ActionListener{
Panel06 panel1;Panel07 panel2;
Client03(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel06();panel2=new Panel07();
con.add(panel1);con.add(panel2);
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
JLabel());add(new
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals(”繼續“)){
this.setVisible(false);
new Client01(”選擇服務種類“);
}
else if(e.getActionCommand()==”查詢“)showcjine();
}
public void showcjine(){
//String
url
=
”jdbc:odbc:driver={Microsoft
Access
Driver(*.mdb)};DBQ=bankSystem.mdb“;//程序直接使用當前類目錄下的數據庫文件
try{
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數據庫 Statement sql=con.createStatement();String ql=Panel01.textB.getText();Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“);
if(rs.next()){
String ucjine=rs.getString(1);
panel1.textA.setText(ucjine);
}
else{JOptionPane.showMessageDialog(null,”
該用戶不存在“,”警告!“, JOptionPane.YES_NO_OPTION);}
con.close();
}catch(Exception ex){ ex.printStackTrace();
}
}
} class Searchfunction{
public static void main(String []args){
new Client03(”用戶查詢服務“);
}} package ZDC;
//查詢信息
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel11 extends JPanel{
JButton button1,button2;
Panel11(){
setLayout(new GridLayout(10,5));
button1=new JButton(”查詢余額“);
button2=new JButton(”查本卡信息“);
for(int i=0;i<=16;i++)add(new JLabel());
add(button1);
for(int i=0;i<=13;i++)add(new JLabel());
add(button2);
for(int i=0;i<=16;i++)add(new JLabel());} }
class Client06 extends JFrame implements ActionListener{
Panel11 panel11;JFrame frame;
Client06(String s){
super(s);
Container con=this.getContentPane();
panel11=new Panel11();
con.add(panel11);
panel11.button1.addActionListener(this);
panel11.button2.addActionListener(this);
this.setVisible(true);this.pack();}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()==”查詢余額“){
this.setVisible(false);
new Client03(”用戶查詢服務“);
}
else if(e.getActionCommand()==”查本卡信息“){ this.setVisible(false);
new Client07(”本卡信息“);
} } } class Searchinformation{
public static void main(String []args){
new Client06(”查詢服務“);
} } package ZDC;//轉賬功能
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;
import ZDC.Panel01;
import java.awt.event.*;class Panel08 extends JPanel{
JLabel label1,label2;JTextField textA,textB;
Panel08(){
setLayout(new GridLayout(4,4));
label1=new JLabel(”輸入預轉賬號:“);label2=new JLabel(”輸入預轉金額:“);
textA=new JTextField(6);textB=new JTextField(6);
for(int i=0;i<5;i++){add(new JLabel());}
add(label1);add(textA);for(int i=0;i<6;i++){add(new JLabel());}
add(label2);add(textB);add(new JLabel());
} } class Panel09 extends JPanel{
JButton button1,button2;
Panel09(){
setLayout(new GridLayout(3,6));
button1=new JButton(”確定“);button2=new JButton(”取消“);
add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(button1);add(new JLabel());add(new JLabel());
add(button2);add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(new JLabel());
} } class Client04 extends JFrame implements ActionListener{
Panel08 panel1;Panel09 panel2;JFrame frame;
Client04(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel08();panel2=new Panel09();
con.add(panel1);con.add(panel2);
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals(”確定“)){ zhuanzhang();//程序根據輸入賬號調用數據庫,修改對應金額數。
this.setVisible(false);
new Client01(”用戶取款系統“);
}
else if(e.getActionCommand()==”取消“){
this.setVisible(false);
new Client01(”用戶取款系統“);}
}
public void zhuanzhang(){
if(panel1.textA.getText().equals(”“)||panel1.textB.getText().equals(”“)){JOptionPane.showMessageDialog(frame,”
請輸入欲轉賬號、金額!“);return;} //String url = ”jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=bankSystem.mdb“;//程序直接使用當前類目錄下的數據庫文件
try{
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數據庫 Statement sql=con.createStatement();String cno=panel1.textA.getText();String ql=Panel01.textB.getText();
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
ResultSet ss=sql.executeQuery(”select cno from card where cno=“+cno+”“);String yjine=panel1.textB.getText();
int shjin=Integer.parseInt(yjine);
if(ss.next()){
ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“);if(rs.next()){ String queryjine=rs.getString(1);
int qyjine=Integer.parseInt(queryjine);
if(shjin String newjine=String.valueOf(newcjine);String newjine2=String.valueOf(newcjine2); sql.executeUpdate(”update card set cjine='“+newjine+”'where cno=“+ql+”“); sql.executeUpdate(”update card set cjine='“+newjine2+”'where cno=“+cno+”“);JOptionPane.showMessageDialog(frame,” 操作已成功,謝謝使用!“);this.setVisible(false);new Client01(”用戶取款系統“); } else{JOptionPane.showMessageDialog(null,” 請重新輸入金額!“,”警告!“, JOptionPane.YES_NO_OPTION); panel1.textB.setText(”“);return; } con.close();frame.repaint(); } con.close();frame.repaint(); } else{JOptionPane.showMessageDialog(null,” 警告!“, JOptionPane.YES_NO_OPTION);panel1.textA.setText(”“);} }catch(Exception ex){ ex.printStackTrace(); } } } class Transferfunction{ public static void main(String []args){ new Client04(”用戶轉賬服務“);}} package ZDC;//用戶取款 import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement; 該用戶不存在,請重新輸入。”,“ import javax.swing.*; import ZDC.Panel01; import java.awt.event.*;class Panel04 extends JPanel{ JButton button1,button2,button3,button4; Panel04(){ setLayout(new GridLayout(4,6)); button1=new JButton(”100“);button2=new JButton(”200“); button3=new JButton(”300“);button4=new JButton(”500“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<8;i++){add(new JLabel());}add(button3);add(new JLabel()); add(new JLabel());add(button4);add(new JLabel()); } } class Panel05 extends JPanel{ JButton button1,button2,button3,button4; Panel05(){ setLayout(new GridLayout(4,6)); button1=new JButton(”800“);button2=new JButton(”1000“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<13;i++){add(new JLabel());} } } class Client02 extends JFrame implements ActionListener{ Panel04 panel1;Panel05 panel2;JFrame frame; Client02(String s){ super(s); Container con=this.getContentPane(); con.setLayout(new GridLayout(2,1)); panel1=new Panel04();panel2=new Panel05(); con.add(panel1);con.add(panel2); panel1.button1.addActionListener(this);panel1.button2.addActionListener(this); panel1.button3.addActionListener(this);panel1.button4.addActionListener(this); panel2.button1.addActionListener(this);panel2.button2.addActionListener(this); this.setVisible(true);this.pack(); } public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”100“){ this.setVisible(false); qukuan();//程序根據輸入金額和輸入卡號,修改數據庫。 new Client01(”用戶取款系統“); } else if(e.getActionCommand()==”200“){ else if(e.getActionCommand()==”300“){ this.setVisible(false); qukuan(); new Client01(”用戶取款系統“);} this.setVisible(false); qukuan(); new Client01(”用戶取款系統“);} else if(e.getActionCommand()==”500“){ this.setVisible(false); qukuan(); new Client01(”用戶取款系統“);} else if(e.getActionCommand()==”800“){ this.setVisible(false); qukuan(); new Client01(”用戶取款系統“);} else if(e.getActionCommand()==”1000“){ } public void qukuan(){ try{ Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數據庫 Statement sql=con.createStatement();String ql=Panel01.textB.getText(); this.setVisible(false); qukuan(); new Client01(”用戶取款系統“);} ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“);if(rs.next()){ String mm=rs.getString(1);int nn= Integer.parseInt(mm); String qerycjine=panel1.button1.getActionCommand(); int queryjine=Integer.parseInt(qerycjine);if(queryjine if(updateMima==1){ JOptionPane.showMessageDialog(frame,” 操作已成功,謝謝使用!“);} this.setVisible(false); new Client01(”用戶取款系統“); } else{JOptionPane.showMessageDialog(null,” 你的卡余額已不足,請注意!“,”警告!“, JOptionPane.YES_NO_OPTION); } con.close(); frame.repaint(); } }catch(SQLException g){ System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage()); } catch(Exception e){ e.printStackTrace(); } } } class Withdraw{ public static void main(String []args){ new Client02(”請選擇取款金額“); } } this.setVisible(false);new Client01(”用戶取款系統“);package ZDC; //存款功能 import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*; import ZDC.Panel01; import java.awt.event.*;class Panel10 extends JPanel{ JButton button1,button2,button3,button4; Panel10(){ setLayout(new GridLayout(4,6)); button1=new JButton(”100“);button2=new JButton(”200“); button3=new JButton(”300“);button4=new JButton(”500“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<8;i++){add(new JLabel());}add(button3);add(new JLabel()); add(new JLabel());add(button4);add(new JLabel()); } } class Panel14 extends JPanel{ JButton button1,button2,button3,button4; Panel14(){ setLayout(new GridLayout(4,6)); button1=new JButton(”800“);button2=new JButton(”1000“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<13;i++){add(new JLabel());} } } class Client05 extends JFrame implements ActionListener{ Panel04 panel1;Panel05 panel2;JFrame frame; Client05(String s){ super(s); Container con=this.getContentPane(); con.setLayout(new GridLayout(2,1)); panel1=new Panel04();panel2=new Panel05(); con.add(panel1);con.add(panel2); panel1.button1.addActionListener(this);panel1.button2.addActionListener(this); panel1.button3.addActionListener(this);panel1.button4.addActionListener(this); panel2.button1.addActionListener(this);panel2.button2.addActionListener(this); this.setVisible(true);this.pack(); } public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”100“){ this.setVisible(false); cunkuan();//程序根據輸入金額和輸入卡號,修改數據庫。 new Client01(”用戶存款系統“); } else if(e.getActionCommand()==”200“){this.setVisible(false);new Client01(”用戶存款系統“);} //這里當點擊取款金額200時,程序返回上層操作界面。 } public void cunkuan(){ try{ Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數據庫 Statement sql=con.createStatement();String ql=Panel01.textB.getText();ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“); if(rs.next()){ String mm=rs.getString(1);int nn= Integer.parseInt(mm); String qerycjine=panel1.button1.getActionCommand(); int queryjine=Integer.parseInt(qerycjine);int newjine=nn+queryjine;String newjin=String.valueOf(newjine);int updateMima=sql.executeUpdate(”update card set cjine='“+newjin+”'where cno=“+ql+”“); if(updateMima==1){ JOptionPane.showMessageDialog(frame,” 操作已成功,謝謝使用!“);} this.setVisible(false); new Client01(”用戶存款系統“); } else{JOptionPane.showMessageDialog(null,” 請注意!“,”警告!“, JOptionPane.YES_NO_OPTION); this.setVisible(false);new Client01(”用戶取款系統“);} con.close(); frame.repaint(); }catch(SQLException g){ System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage()); } catch(Exception e){ e.printStackTrace(); } } } class Depositfunction{ public static void main(String []args){ new Client05(”請選擇存款金額“); } } package ZDC;//顯示用戶信息 import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*; import ZDC.Panel01; import java.awt.event.*; class Panel12 extends JPanel{ JLabel label1,label2,label3,label4; JButton button1,button2;JTextField text1,text2,text3,text4; Panel12(){ setLayout(new GridLayout(9,6)); label1=new JLabel(”顯示用戶名:“);label2=new JLabel(”顯示性別:“); label3=new JLabel(”顯示身份證:“);label4=new JLabel(”顯示卡號:“); button1=new JButton(”查詢“);text1=new JTextField(”“);text2=new JTextField(”“); button2=new JButton(”取消“);text3=new JTextField(”“);text4=new JTextField(”“); for(int i=0;i<8;i++)add(new JLabel());add(label1);add(text1); for(int i=0;i<4;i++)add(new JLabel());add(label2);add(text2); for(int i=0;i<4;i++)add(new JLabel());add(label3);add(text3); for(int i=0;i<4;i++)add(new JLabel());add(label4);add(text4); for(int i=0;i<15;i++)add(new JLabel());add(button1); add(new JLabel());add(new JLabel());add(button2); for(int i=0;i<7;i++)add(new JLabel());} } class Client07 extends JFrame implements ActionListener{ Panel12 panel12;JFrame frame; Client07(String s){ super(s); Container con=this.getContentPane(); panel12=new Panel12(); con.add(panel12); panel12.button1.addActionListener(this); panel12.button2.addActionListener(this); this.setVisible(true);this.pack();} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”查詢“)showCard(); else if(e.getActionCommand()==”取消“){ this.setVisible(false); new Client01(”用戶取款系統“); } } public void showCard(){ String url = ”jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=bankSystem.mdb“;//程序直接使用當前類目錄下的數據庫文件 try{ Connection con=DriverManager.getConnection(url);Statement sql=con.createStatement();String ql=Panel01.textB.getText();Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);ResultSet rs=sql.executeQuery(”select * from user where ucno=“+ql+”“); if(rs.next()){ String uname=rs.getString(1); String usex=rs.getString(2); String uid=rs.getString(3); String ucno=rs.getString(4); panel12.text1.setText(uname); panel12.text2.setText(usex); panel12.text3.setText(uid); panel12.text4.setText(ucno);} else{JOptionPane.showMessageDialog(null,” 該用戶不存在“,”警告!“, JOptionPane.YES_NO_OPTION);} con.close(); } catch(Exception ex){ ex.printStackTrace(); } } } class Dislayuserinformation{ public static void main(String []args){ new Client07(”本卡信息“); } } package ZDC;//退出功能 class Client08{ static Athread threadA; Client08(String s){ threadA=new Athread(); threadA.start(); } } class Athread extends Thread{ static int j=1;public void run(){ for(;j<2;){ new Client08(”提示退出對話框“);try{sleep(30000);j++;} catch(InterruptedException e){} } System.exit(0);} } public class Exit{ public static void main(String []args){ new Client08(”“); } } package ZDC;//退卡 import java.awt.*;import java.sql.Connection; import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*; import java.awt.event.*;class Panel13 extends JPanel{ JLabel label; Panel13(){ label=new JLabel(” 此卡! “); setLayout(new GridLayout(10,1));add(new JLabel()); add(label);for(int i=0;i<6;i++)add(new JLabel());} } class Client09 extends JFrame{ Panel13 panel13; Client09(String s){ super(s); Container con=this.getContentPane(); panel13=new Panel13(); con.add(panel13); this.setVisible(true);this.pack();} } class bankSystem09{ 謝謝使用,請在30秒內退出 JLabel());add(new JLabel());add(new public void main(String []args){ new Client08(”提示退出對話框"); } } 6課程設計總結 6.1 遇到的問題及解決辦法 在此次課程設計中,我遇到了一些問題,如:對于面向對象的方法了解不夠透徹,運用到實際的軟件開發中存在著困難;對于Java語言,只學習到了一些最基本的知識,這導致編寫程序時經常出現一些語法錯誤,而且要在短時間內用Java語言來設計一個具體的系統是一個較大的挑戰。對于以上的問題,自己有清楚的認識,解決辦法是需要大量閱讀相關的書籍,對于書上以及網站上下載的資料中的Java實例必須有清楚的理解。對于實際動手能力與系統開發的流程的適應,必須多進行實際的練習與操作,才能有大的進步。 6.2 心得體會 在這次的課程設計中,我主要運用了Java語言的界面設計、異常處理、、Awt控件、Swing控件,輸入輸出流等,綜合運用了Java語言。我深刻感受到了面向對象語言中類庫的強大功能,掌握了運用Java中的類實現某些基本功能,并學會了自己查詢使用類的方法,為以后的面向對象語言的自學奠定了基礎。在以后的學習當中,我會更加努力的學習好專業知識,并將所學的知識用于實踐當中去,以便牢固掌握知識。 C++程序設計實踐教學環節任務書 承接的項目額(10%)提成,業務經理既拿固定月薪(2000元)也領取提成,財務人員固定工資(2000元),文秘為固定工資(1500元)。 (4)可按姓名顯示、查找、增加、刪除、修改和保存各類人員的信息。 五、解決方案 一、題目: 公司人事管理系統 (1)分析系統中的各個實體之間的關系及其屬性和行為; (2)根據問題描述,設計系統的類層次; 二、目的與要求(3)完成類層次中各個類的描述(包括屬性和方法);(4)完成類中各個成員函數的定義; 1.目的:(5)完成系統的應用模塊;(1)基本掌握面向過程程序設計的基本思路和方法;(6)功能調試;(2)達到熟練掌握C語言的基本知識和技能;(7)完成系統總結報告以及系統使用說明書。(3)能夠利用所學的基本知識和技能,解決簡單的程序設計問題。 六、進度安排 2.要求此次課程設計時間為一周,分四個階段完成: 基本要求: 1.分析設計階段。指導教師應積極引導學生自主學習和鉆研問題,明確設計要 (1)要求利用C++語言面向對象的編程思想來完成系統的設計; 求,找出實現方法,按照需求分析、總體設計、詳細設計這幾個步驟進行。 (2)突出C++語言的類和對象的特征,以多個類實現對每一個子功能的封裝; 2.編碼調試階段:根據設計分析方案編寫C++代碼,然后調試該代碼,實現課 (3)進行簡單界面設計,能夠實現友好的交互; 題要求的功能。 (4)具有清晰的程序流程圖和類的詳細定義; 3.總結報告階段:總結設計工作,寫出課程設計說明書,要求學生寫出需求分析、(5)熟練掌握C++語言對文件的各種操作??傮w設計、詳細設計、編碼、測試的步驟和內容。4.考核階段。創新要求:在基本要求達到后,可進行創新設計,如系統用戶功能控制,對管理員級和一 七、撰寫課程設計報告或課程設計總結 般級別的用戶系統功能操作不同。課程設計報告要求: 三、信息描述 總結報告包括需求分析、總體設計、詳細設計、編碼(詳細寫出編程步驟)、測試 的步驟和內容、課程設計總結、參考資料等,不符合以上要求者,則本次設計以不及公司共有4格記。技術經理。現在,需要存儲這些人員的姓名、編號、級別、當月薪水,計算月薪總 額并顯示全部信息,并且老板可以對各種人員進行增加、查尋、修改、刪除。 八、參考資料 四、功能描述 1.《C++程序設計》.鄭莉.清華大學出版社2.《C++編程思想》.Bruce Eckel [劉宗田].機械工業出版社(1)其中,人員編號在生成人員信息時同時生成,每輸入一個人員信息編號順序3.《C++ Primer》中文版.Lippman[潘愛民].中國電力出版社出版 加1。4.《Effective C++中文版》Scott Meyers[侯捷].華中科技大學出版社(2)程序對所有人員有提升級別的功能。 (3)月薪的計算方法是:經理拿固定月薪(5000元),技術人員按完成的代碼量(1000元/每千行代碼)領取月薪,業務人員的報酬按該推銷員當月銷售額(15%)與 課 程 設 計 課程名稱 Java語言課程設計 題目名稱 人事管理系統的設計與實現 學生學院 應用數學學院 專業班級 學 號 學生姓名 指導教師 劉科峰 2014 年 10 月 29 日 一.設計內容 自學Swing圖形界面設計和數據庫程序設計。開發用于某單位的人事管理系統。該系統要求實現以下功能: 1.員工信息管理包括:員工信息一覽表、新員工的建立、修改 2.薪資福利管理:考勤與薪資的連動計算、薪資與福利的設置 3.考勤假期管理:考勤項目錄入, 實現考勤信息的查詢、統計、匯總 4.人事報表管理:按照員工性別,數目,薪酬自動生成相關報表, 可自定義統計分析條件并可對歷史報表進行管理。 設計亮點 1.null布局方式 Swing圖形界面設計中有很多布局方式,通過本次學習了解到了FlowLayout,BorderLayout,GridLayout以及null布局,就這四種布局方式而言,null布局的優點在于可以將組建的位置精準到坐標值,可以把組件放到任意想放置的位置,另外可以通過null去設置組件的大小,相較于其他布局方式來說是一個很大的優勢。但同時它的缺點在于不能根據Frame的大小變化而改變位置。 2.組件部分屬性的設計 Swing中有很多方法是用來實現組件屬性設置的,比如button.setVisible(false);按鈕通過調用這個方法實現不可見,這是我此次課程設計中的一個亮點,因為組件是沒有設置大小的方法的,只有依靠于相應的布局方式才能改變它的大小,通過設置多幾個按鈕設為不可見,將所要可見按鈕實現大小以及位置的控制是一種很好的方法。 二、設計方案 1主界面(只列出界面設計方面的代碼) JPanel panel=new JPanel();JTable table=null;JButton ibtn=new JButton(“員工信息”);JButton cbtn=new JButton(“考勤管理”);JButton mbtn=new JButton(“薪資管理”);JButton tbtn=new JButton(“人事報表”);ImageIcon rtou = new ImageIcon(“rentou.jpg”); JLabel imgLabel=new JLabel(rtou); //上面代碼定義了一個面板與四個標簽,并引入了一個圖片 panel.setLayout(new FlowLayout());//設置面板為流布局 panel.add(ibtn);panel.add(cbtn);panel.add(mbtn);panel.add(tbtn);panel.setBackground(Color.GRAY); //將按鈕加到面板中,設置面板為灰色 this.add(imgLabel,BorderLayout.CENTER);this.add(panel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*圖片標簽以邊框布局放置在中間,將面板也以邊框布局放置在下面,可見,灰色,點擊關閉程序*/ (2)查詢員工界面(只列出界面設計方面的代碼) Label idlabel = new JLabel(“ID”);JLabel namelabel = new JLabel(“姓名”);JLabel bumenlabel = new JLabel(“部門”);JLabel zhiweilabel = new JLabel(“職位”); JTextField idfiled = new JTextField(8);JTextField namefield = new JTextField(8);JComboBox bumenbox =new JComboBox();JComboBox zhiweubox = new JComboBox(); JButton btn=new JButton(“查詢”);JButton ibtn=new JButton(“添加”) JPanel spanel=new JPanel();JPanel vpanel=new JPanel(); /*定義和各個組件,4個標簽,兩個文本框,兩個復選框,兩個按鈕,兩個面板容器*/ spanel.setLayout(new FlowLayout()); vpanel.setLayout(new FlowLayout(FlowLayout.CENTER,45,25)); bumenbox.addItem(“"); bumenbox.addItem(”管理部“); bumenbox.addItem(”生產部“); bumenbox.addItem(”業務部“); zhiweubox.addItem(”“); zhiweubox.addItem(”部長“); zhiweubox.addItem(”副部長“); zhiweubox.addItem(”普工“); spanel.add(idlabel); spanel.add(idfiled); spanel.add(namelabel); spanel.add(namefield); spanel.add(bumenlabel); spanel.add(bumenbox); spanel.add(zhiweilabel); spanel.add(zhiweubox); spanel.add(btn); vpanel.add(ibtn); spanel.setBackground(Color.GRAY); vpanel.setBackground(Color.GRAY); //將各個組件放進對應面板,設置相關屬性 this.add(spanel,BorderLayout.NORTH); this.add(vpanel,BorderLayout.SOUTH); this.setBounds(300, 180, 600, 350); this.setVisible(true); this.getContentPane().setBackground(Color.GRAY); //將面板以邊框布局放入框架中,設置屬性(3)增加員工信息界面 JPanel panel=new JPanel(); JLabel timeLabel=new JLabel(”時間“);JLabel allnumLabel=new JLabel(”員工總數“); JLabel staffMoLabel=new JLabel(”考勤“);JLabel entryLabel=new JLabel(”全勤“); JLabel quitLabel=new JLabel(”缺勤“);JLabel mwLabel=new JLabel(”性別比例“); JLabel manLabel=new JLabel(”男“); JLabel womanLabel=new JLabel(”女“);JLabel proportionLabel=new JLabel(”男女比例“);JLabel distributionLabel=new JLabel(”人員部門分布“);JLabel mdpLabel=new JLabel(”管理部“); JLabel pdpLabel=new JLabel(”生產部“);JLabel bdpLabel=new JLabel(”業務部“);JLabel xmLabel=new JLabel(”項目“);JLabel xzLabel=new JLabel(”細則“);JLabel stLabel=new JLabel(”數據統計“); JTextField timeFiled = new JTextField(8); JTextField allnumFiled = new JTextField(8);JTextField entryFiled = new JTextField(8);JTextField quitFiled = new JTextField(8);JTextField manFiled = new JTextField(8);JTextField womanFiled = new JTextField(8);JTextField proportionFiled = new JTextField(8);JTextField mdpFiled = new JTextField(8);JTextField pdpFiled = new JTextField(8);JTextField bdpFiled = new JTextField(8);// 定義所需組件 public Selectrenshi(String tablename){ super(”人事管理“); panel.setLayout(null); panel.setBackground(Color.GRAY); panel.add(xmLabel); panel.add(xzLabel); panel.add(stLabel); panel.add(timeLabel); panel.add(timeFiled); panel.add(allnumLabel); panel.add(allnumFiled); panel.add(staffMoLabel); panel.add(entryLabel); panel.add(entryFiled); panel.add(quitLabel); panel.add(quitFiled); panel.add(mwLabel); panel.add(manLabel); panel.add(manFiled); panel.add(womanLabel); panel.add(womanFiled); panel.add(proportionLabel); panel.add(proportionFiled); panel.add(distributionLabel); panel.add(mdpLabel); panel.add(mdpFiled); panel.add(pdpLabel); panel.add(pdpFiled); panel.add(bdpLabel); panel.add(bdpFiled); //將組件加到相應面板中 xmLabel.setBounds(120,20,100,30); xzLabel.setBounds(240,20,100,30); stLabel.setBounds(360,20,100,30); timeLabel.setBounds(120,50,100,30); timeFiled.setBounds(360,50,100,30); allnumLabel.setBounds(120,100,100,30); allnumFiled.setBounds(360,100,100,30); staffMoLabel.setBounds(120,150,100,30); entryLabel.setBounds(240,150,100,30); entryFiled.setBounds(360,150,100,30); quitLabel.setBounds(240,200,100,30); quitFiled.setBounds(360,200,100,30); mwLabel.setBounds(120,250,100,30); manLabel.setBounds(240,250,100,30); manFiled.setBounds(360,250,100,30); womanLabel.setBounds(240,300,100,30); womanFiled.setBounds(360,300,100,30); proportionLabel.setBounds(240,350,100,30); proportionFiled.setBounds(360,350,100,30); distributionLabel.setBounds(120,400,100,30); mdpLabel.setBounds(240,400,100,30); mdpFiled.setBounds(360,400,100,30); pdpLabel.setBounds(240,450,100,30); pdpFiled.setBounds(360,450,100,30); bdpLabel.setBounds(240,500,100,30); bdpFiled.setBounds(360,500,100,30); //采用null布局,設置組建坐標值 this.add(panel,BorderLayout.CENTER); this.setBounds(300, 100, 600, 600); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.getContentPane().setBackground(Color.GRAY); //將面板放入框架,設置相應屬性(4)員工考勤界面 JLabel idlabel = new JLabel(”ID“);JComboBox idbox =new JComboBox();CheckTable model = null; JButton wbtn=new JButton(”修改“); JButton cbtn=new JButton(”查詢“);JButton mbtn=new JButton(”創建薪資表“);JButton rbtn=new JButton(”創建人事表“); JScrollPane scrollpane = null;JPanel spanel=new JPanel();JPanel vpanel=new JPanel();JTable table=null;spanel.add(idbox);panel.add(wbtn);spanel.add(cbtn);vpanel.add(mbtn);vpanel.add(rbtn);spanel.setBackground(Color.GRAY);vpanel.setBackground(Color.GRAY);this.add(spanel,BorderLayout.NORTH);this.add(vpanel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY); (5)選擇考勤表界面 JLabel checklabel = new JLabel(”選擇考勤表“);JLabel newlabel = new JLabel(”創建考勤表“);JComboBox timebox =new JComboBox();JTextField newfield = new JTextField();JButton btn=new JButton(”確認“);JButton nbtn=new JButton(”創建");JPanel spanel=new JPanel();spanel.add(checklabel); spanel.add(timebox); spanel.add(btn); spanel.add(newlabel); spanel.add(newfield); spanel.add(nbtn); checklabel.setBounds(30,90,100,30); timebox.setBounds(180,90,100,30); btn.setBounds(360,90,100,30); newlabel.setBounds(30,200,100,30); newfield.setBounds(180,200,100,30); nbtn.setBounds(360,200,100,30); this.add(spanel); this.setBounds(300, 180, 600, 350); this.setVisible(true); 三、結果和數據處理 四、結論 1.Swing圖形界面 圖形用戶界面(GUI)是程序不可或缺的一部分,它便于用戶和程序的交互。在Swing界面中是以Frame為框架,采用合理的布局方式(FlowLayout,BorderLayout,GridLayout,null),將Panel加入框架之中,而實現界面的各個組件將調用各種方法設置自身屬性實行可視化界面以及加入到面板之中。再通過事件監聽器實現事件的監聽預處理機制。 2.數據庫 在這次課程設計中哦我主要負責Swing圖像界面,對于數據庫只做了最簡單的了解。程序中采用了最流行的關系型數據庫mysql,雪化了mysql的建立,刪除,與修改以及使用sql語言對數據庫進行一些簡單的操作,將按鈕等設置的監聽事件與數據庫相連接。 五、問題與討論 1.組件的方法調用 在這次課程設計中,用到了很多的組件,例如Button,Jlabel,TextField,ComBox,等。Swing圖形界面也確實提供了很多方法去設置相關組件的屬性,例如label.setVisible(false);設置標簽不可見等很多方法,只要查看API文檔幾乎就能實現很多功能,但是對于按鈕等最常見的組件來說設置大小如果不依靠相關布局方式很難設置,我在程序中之所以運用了很多的bull布局方式就是為了實現組件大小的設置,如果說能有一個方法直接設置組件大小而不受其他組件或容器影響就能使代碼很簡潔了。2.相對布局 在編寫圖像界面的程序的時候,我用了很多的布局方式,有FlowLayout,BorderLayout,GrirLayout,null等,其中null布局用的最多。null布局的優點在于可以將組建的位置精準到坐標值,可以把組件放到任意想放置的位置,另外可以通過null去設置組件的大小,相較于其他布局方式來說是一個很大的優勢。但同時它的缺點在于不能根據Frame的大小變化而改變位置。其他三種布局方式雖然實現了歲Frame大小變動而改變組件大小及位置但是不容易控制,如果null布局能實現相對布局就是很好的一種布局方式了。 《Java課程實習》報告 題目 學號 學生姓名 音樂播放器 201011621335 201011621329 200811621320 朱劍峰 薛文博 劉彬 聯系方式 *** *** *** 所在專業 所在班級 指導教師 成績 教師簽字 計算機科學與技術 1103 劉思鳳 課程設計時間:2013年6月1日 至 2013年6月25日 評語: 廣東海洋大學本科生課程設計報告 目 錄 摘要......................................................................................................................................2 1 緒論..............................................................................................................................3 1.1 1.2 1.3 1.4 2 2.1 2.2 3 3.1 3.2 課題背景..............................................................................................................3 課程設計目的......................................................................................................3 課程設計實驗環境..............................................................................................3 課程設計要求......................................................................................................4 程序界面布局設計..............................................................................................4 功能分析..............................................................................................................4 系統功能結構圖..................................................................................................5 模塊功能設計......................................................................................................5 課程系統分析..............................................................................................................4 系統設計與實現..........................................................................................................5 3.2.1 “菜單欄”功能設計......................................................................................5 3.2.2 “動態音頻播放進度顯示”功能設計..........................................................9 3.2.3 “歌曲搜索”功能實現..................................................................................9 3.2.4 “歌曲播放/停止”功能實現......................................................................10 3.2.5 “列表展示”功能實現................................................................................11 4 系統優點與缺點........................................................................................................13 4.1 4.2 5 系統優點...............................................................................................................13 系統缺點...............................................................................................................13 系統開發過程............................................................................................................14 Myeclipse平臺開發版本...............................................................................................14 NetBeans開發平臺版本................................................................................................15 設計總結....................................................................................................................16 參考文獻.............................................................................................................................17 附 錄.................................................................................................................................18 關鍵代碼..........................................................................................................................18 1、音樂解碼函數(decodeMusic)........................................................................18 2、播放線程類(class PlayThread).....................................................................20 3、控制滾動條類(class RunSlider)...................................................................21 廣東海洋大學本科生課程設計報告 摘要 JAVA是目前最流行的軟件開發語言之一,稱為網絡上的“世界語”。JAVA適合開發基于多媒體、與平臺無關、用面向對象的方法進行的基于Internet、Intranet、Extranet的Applet和應用程序。它具有簡單高效、面向對象、不依賴于機器結構的特點,支持多線程、分布和并發機制。用JAVA開發的應用軟件在可移植性、健壯性、安全性等方面大大優于已存在的其他編程語言。 JAVA是一門包含多種知識的學科,提供了豐富的類庫,能最大限度地利用網絡。JAVA可廣泛用于面向對象的事件描述、處理面向對象的企業型的應用開發,還應用于Internet系統管理、Web頁面設計、Internet可視化軟件開發等方面。在學習的過程中我學到了許多以前沒有學到的概念和新鮮資訊。運用這些知識可以完成老師交給我的課程設計任務。這次老師讓我們自己擬訂題目,給了我們很大的想象空間。我們自選了一個音樂播放器的課程設計題目。 本小組之所以選擇做音樂播放器,全賴于本小組成員均對音樂有濃厚的興趣,雖熱衷于聽音樂,但現在網上流傳的音樂播放器還不能滿足我們這些發燒友,像高清音樂等,這些高品質的作品若在現流行的播放器上運行,這只能做普通音樂文件“享用”。話說如此,因本小組開發能力有限,課程比較多,時間所限,以至暫且把音樂播放器開發到version0.9。主要功能還未能達到我們想要的境界。 小結一下,本小組的播放器所具備的功能有如下,添加音樂,刪除音樂,搜索音樂,更換播放器皮膚,更改播放模式等。(詳見2.2節) 本次設計的播放器在具備基本功能的基礎上,還具有很強的擴展性,如歌詞導入,可播放音樂類型的增加等等這些還未實現的地方我們都提供了許多接口,以便日后做修改或增加功能所用。 能夠具備一個屬于自己的播放器確實是一件非常高興的事情,能夠一邊開發一邊享受音樂的熏陶更是一件難得可貴的經歷,愿此摘要能讓讀者感受得到筆者的興奮與成功。 廣東海洋大學本科生課程設計報告 音樂播放器 任務分工 系統設計與代碼實現:朱劍峰 系統測試與維護:薛文博 需求與功能分析:劉彬 指導教師:劉思鳳 緒論 1.1 課題背景 隨著社會電子音樂文件的與日俱增,作為現在最流行的音樂文件*.mp3,*.wav文件的數量和規模也在比以往的任何時候要多,不論是電臺DJ需要使用方便而有效地管理自己所使用的音樂文件,還是個人。在計算機日益普及的今天,若采用一套有效的音樂播放器。將自己所收藏的大量的音樂文件能隨時隨地的播放,這將方便于眾用戶聽音樂的需求。通過使用本音樂播放器能為音樂愛好者帶來意想不到的收獲。 1.2 課程設計目的 《應用軟件開發實習》是計算機相關專業的必修專業基礎課程,其實踐性、應用性很強。實踐教學環節是必不可少的一個重要環節。本課程的程序設計專題實際是計算機相關專業學生學習完《應用軟件開發實習》課程后,進行的一次全面的綜合訓練,程序設計的設計目的是加深對理論教學內容的理解和掌握,使學生較系統地掌握程序設計及其在網絡開發中的廣泛應用,基本方法及技巧,為學生綜合運用所學知識,利用軟件工程為基礎進行軟件開發、并在實踐應用方面打下一定基礎。 1.3 課程設計實驗環境 程序運行在安裝有windows操作系統的計算機上(臺式機和筆記本),兼容windows 2K/XP/Vista/7/8 計算機硬件基本要求(僅供參考): 1.2.3.CPU:1G; 內存:512M.; 顯卡:256M顯存; 文件播放:需要安裝有聲卡、要求安裝有語音庫。 JAVA程序設計語言及相應的集成開發環境,Myeclipse和Netbeans開發工具。 廣東海洋大學本科生課程設計報告 1.4 課程設計要求 按課程設計指導書提供的課題,要求學生在自行完成各個操作環節,并能實現且達到舉一反三的目的,完成一個項目解決一類問題。要求學生能夠全面、深入理解和熟練掌握所學內容,并能夠用其分析、設計和解答類似問題;對此能夠較好地理解和掌握,能夠進行簡單分析和判斷;能編寫出具有良好風格的程序;掌握JAVA程序設計的基本技能和面向對象的概念和方法;了解多線程、安全和網絡等編程技術。同時培養學生進行分析問題、解決問題的能力;培養學生進行設計分析、設計方法、設計操作與測試、設計過程的觀察、理解和歸納能力的提高。課程系統分析 2.1 程序界面布局設計 (1)創建一個JFrame類,類名為MyPlayer類。 (2)向對話框中添加JSlider控件、JList控件、JLabel控件、JJToggleButton控件、MenuBar菜單、JPanel容器、JToolBar容器以及JScrolPanel容器。 (3)設置所添加的控件的屬性,以及使用Java的界面風格,本設計共使用了6種Java 的不同界面風格。 2.2 功能分析 MyPlayer播放器主要對常用Windows音頻格式的文件實現播放控制: ? 主界面功能 ? 菜單欄功能 ? 添加音樂; ? 添加音樂文件(即導入一個或多個音樂文件至列表當中); ? 添加音樂目錄(即導入文件夾中所有的音樂文件至列表當中); ? 控制; ? 隨機播放; ? 順序播放; ? 單曲循環; ? 設置歌詞(有待開發); ? 更換皮膚; ? 默認、深海世界、迷人金屬、香韻咖啡、駭客帝國、浪漫滿屋(均為java的界面風格) ? 關于; 廣東海洋大學本科生課程設計報告 ? 幫助(記錄作者的相關信息以及軟件開發的日期); ? 動態音頻播放進度顯示; ? 正在播放歌曲在頂層的顯示 ? 播放歌曲的時間長度的顯示以及正在播放時間的長度的顯示 ? 滾動條隨播放狀態改變顯示 ? 歌曲搜索功能; ? 根據關鍵字搜索對應的歌曲; ? 歌曲播放/停止功能; ? 上一首;(播放上一首歌曲并根據播放模式來選擇)? 下一首;(播放下一首歌曲并根據播放模式來選擇)? 播放/停止;(播放或停止歌曲) ? 雙擊播放/雙擊停止;(在列表中對指定歌曲的操作)? 列表展示功能; ? 隱藏/顯示列表; ? 移除單個音樂文件; ? 移除所有音樂文件; ? 顯示當前歌曲數目,播放模式,皮膚情況; 系統設計與實現 3.1 系統功能結構圖 MyPlayer播放器的功能結構圖如圖3-1。 主界面功能菜單欄功能動態音頻播放進度顯示歌曲搜索功能歌曲播放/停止功能列表展示功能 圖3-1 主界面功能圖 3.2 模塊功能設計 3.2.1 “菜單欄”功能設計 “菜單欄”功能結構圖如圖3-2-1。 廣東海洋大學本科生課程設計報告 菜單欄功能添加音樂添加音樂文件添加音樂目錄控制更換皮膚關于隨機播放順序播放單曲循環種皮膚圖3-2-1菜單欄功能結構 6幫助 3.2.1.1 “添加音樂”功能實現 當點擊“添加歌曲/文件夾”選擇“添加本地歌曲”或“添加本地歌曲文件夾”的時候,這時候會觸發這兩個JMenuItem事件,調用了open()函數(opendir()函數),即將選中的音樂文件(或文件夾內所有音樂文件)的信息(名稱與路徑)放入nameVector 和 urlVector 當中。并修改listCount的值,顯示歌曲的總數,最后將nameVector的所有內容放入list列表當中。如圖3-2-1-1。 圖3-2-1-1(左上)選擇操作,(左下)選擇目錄,(右下)列表顯示 廣東海洋大學本科生課程設計報告 3.2.1.2 “控制”功能實現 當選擇“控制”功能的任意一項,則會使全局的chosenMethod整型變量的值根據選擇的項賦對應的值,值域為1(隨機播放)、2(順序播放)、3(單曲循環)。因播放器的播放功能是一個while(true)的循環,每當播放歌曲時候,播放前會由函數chooseNextSong()根據chosenMethod的值來選擇下一首歌是那一首。 如果值是1,則會由[0,listCount(列表歌曲總數)],獲取隨機數,再根據play()函數播放;如果值是2,則根據chosenIndex(當前播放歌曲號),直接加一,再根據play()函數播放;如果值是3,則chosenIndex(當前播放歌曲號)的值不再修改,再根據play()函數播放;如圖3-2-1-2。 圖3-2-1-2(左上)選擇操作;(左下)隨機播放后歌曲序號,(此處為后臺顯示),起始播放第1首歌,下一首歌為第295首歌曲;(右側)為列表顯示,指向對應歌曲,并且列表底下顯示“隨機播放” 3.2.1.3 “更換皮膚”功能實現 當選擇“更換皮膚”功能的任意一項,則會觸發對應事件的發生,調用函數loadskin1()或loadskin2()等等。此時會調用LookAndFeel的類,指定java包含的皮膚風格。Loadskin1()對應“默認”,loadskin2()對應“深海世界”等等。 選擇皮膚后,主界面底下會顯示對應的提示,如選擇了“浪漫滿屋”,地下就會顯示 “皮膚:浪漫滿屋”。如圖3-2-1-3所示。 廣東海洋大學本科生課程設計報告 圖3-2-1-3 (左)選項顯示,(右)換膚后主 界面情況。 3.2.1.4 “關于”功能實現 當選擇“幫助”功能時,則彈出信息窗口,提示本軟件的開發時間與開發人員相關信息。如圖3-2-1-4所示。 圖3-2-1-4 廣東海洋大學本科生課程設計報告 3.2.2 “動態音頻播放進度顯示”功能設計 當歌曲播放正在播放時,則頂層“正在播放”處會顯示歌曲的名稱,當歌曲名稱過長時候,超長部分會用省略號顯示。 同時會根據歌曲的格式,得到歌曲的長度,并顯示在歌曲的右側的JLabel fileTime中;另外會另起一個線程RunSlider來控制計時功能,每1秒鐘,滾動條左側JLabel runningTime 會根據播放的時間來修改,滾動條PlayerSlider則會每秒鐘根據runingTime的值來移動。如圖3-2-2所示 圖3-2-2 正在播放歌曲中的動態播放進度顯示。 3.2.3 “歌曲搜索”功能實現 在搜索欄中輸入關鍵字,在回車確認,系統就會調用seachMusic()來搜索與關鍵字吻合的歌曲,并將其放入臨時的Vector tmpName當中,并顯示其到list列表當中。如圖3-2-3-1 在臨時的列表中選擇所需要播放的歌曲,雙擊播放,同時臨時列表消失,回復原來的列表,即導入nameVector的數據到list當中。 當點擊“X”按鈕,若還在臨時列表當中,則會清除臨時列表并且恢復原來的列表;若已經恢復到臨時列表,則搜索框中會返回提示“請輸入搜索關鍵字...”。 圖3-2-3-1(上)搜索“陳奕迅”的歌曲 (下)取消搜索后,搜索框的內容 廣東海洋大學本科生課程設計報告 3.2.4 “歌曲播放/停止”功能實現 “歌曲播放/停止”功能結構圖如圖3-2-4。 歌曲播放/停止功能上一首下一首播放/停止雙擊播放/停止 圖3-2-4 “歌曲播放/停止”功能結構 3.2.4.1 “上一首”“下一首”功能實現 當點擊“上一首”的按鈕時,會根據按鈕事件,若chosenMethod(播放方式)的值為1(即隨機播放)則系統會調用chooseNextSong()來隨機選擇歌曲號來播放下一首歌;若chosenMethod不為1,則會調用previousMusic(),對chosenIndex(當前播放歌曲號)減一,再調用play()函數播放上一首歌曲。 當點擊“下一首”的按鈕時,會根據按鈕事件,若chosenMethod(播放方式)的值為1(即隨機播放)則系統會調用chooseNextSong()來隨機選擇歌曲號來播放下一首歌;若chosenMethod不為1,則會調用nextMusic(),對chosenIndex(當前播放歌曲號)加1,再調用play()函數播放下一首歌曲。 3.2.4.2 “播放/停止”“雙擊播放/停止”功能實現 當點擊“播放/停止”的按鈕時候,若點擊了“播放”,則會顯示“停止”,同時會對列表正在選中的歌曲進行播放。同時會觸發“動態音頻播放進度顯示”功能(3.2.2節所介紹),更改或增加播放信息; 若點擊了“停止”,則會顯示“播放”,同時會對當前播放的歌曲進行停止,同樣會觸發“動態音頻播放進度顯示”功能,清除對應的顯示。如圖3-2-4-2 廣東海洋大學本科生課程設計報告 圖3-2-4-2(左)“播放” (右)“停止” 3.2.5 “列表展示”功能實現 “列表展示”功能結構圖如圖3-2-5。 列表展示功能隱藏/顯示列表移除音樂文件顯示列表信息 圖3-2-5 “列表展示”功能結構 3.2.5.1 “隱藏/顯示列表”功能實現 當點擊“顯示列表/隱藏列表”的按鈕時候,若點擊了“顯示列表”,則會顯示“隱藏列表”,同時觸發該事件,將原來的JFrame大框架的長度減少440個單位; 若點擊了“隱藏列表”,則會顯示“顯示列表”,同時觸發該事件,將原來的JFrame大框架的長度增加440個單位。 隱藏與顯示列表這一功能雖然非常簡單,但其重要性不可忽視,對于現在許多用戶對音樂播放器的要求,就如自己的手機或著MP3一樣,小巧、靈活、精致,至此這一項功能對于本小組一開始的設計就算是一個亮點。如圖3-2-5-1所示。 廣東海洋大學本科生課程設計報告 圖3-2-5-1(左)隱藏列表,(右)顯示列表 3.2.5.2 “移除歌曲”功能文件實現 當用鼠標對著列表的音樂文件右鍵的時候,會彈出兩個選項“移除歌曲/移除所有歌曲”。 當選擇“移除歌曲”,則對所選擇的音樂文件從列表中移除,即事件的觸發調用了deleteSingle()函數,將對應的項從列表中移除,從nameVector中移除,從urlVector中移除; 同理當選擇“移除所有歌曲”的時候,事件觸發調用deleteAll()函數,將列表清空,將nameVector中的元素清除。 以上兩者運行過后均會更新主界面底層“歌曲數目”,并且停止正在播放的歌曲。 圖3-2-5-2右鍵列表后出現的選擇項 廣東海洋大學本科生課程設計報告 3.2.5.3 “顯示列表信息”功能實現 由“添加音樂”功能(3.2.1.1節)調用的open()、opendir()函數,會將保存在nameVector中的內容導入列表當中。當雙擊列表中的歌曲的時候,如果歌曲正在播放則會停止,如果播放器沒有進行播放,則雙擊后就進行播放。 當我們對著列表右鍵時,則會彈出列表,“移除歌曲/移除所有歌曲”,詳見(3.2.5.2節)系統優點與缺點 4.1 系統優點 1、windows界面風格可選擇性,如上如所述,本音樂播放器具有6種皮膚可以更換。這大大滿足了一個娛樂性的軟件的需要,并且皮膚起名也符合用戶的感官需求,像“深海世界”、“浪漫滿屋”這些貼切而休閑的詞匯更能吸引用戶對播放器的使用。 2、播放方式可選擇性,對于喜歡聽音樂的用戶,會根據自己的需要選擇一定的順序來聽音樂。 3、列表隱藏的功能,符合大眾播放器的功能,將播放器的界面弄得小巧而精致,即使隱藏了列表也不妨礙主要的播放器功能。 4、搜索功能,隨著網絡的發達,音樂歌曲隨處下載,人均播放列表的歌曲數目數以百計,這時候搜索功能就顯得十分重要。本播放器根據關鍵字可以對列表進行搜索,并可以顯示搜索后的列表,同時臨時的列表不會縮減播放器功能。 4.2 系統缺點 1、本系統主要代碼均在一個文件當中MyPlayer.java當中,由于本小組是用netBeans7.2.1開發平臺開發的,對開發平臺尚未了解,故暫且沒有將代碼弄得更具有可讀性。 2、本播放器還缺少暫停功能,在開發的最后版本(Music_Player0.9fornetBeans)還在改進當中。期待1.0版本對此功能的實現。 3、本播放器對音樂文件的選擇,僅僅.mp3文件以及.wav文件可播放。針對decodeMusic()解碼函數的改善,尚未能解決。 4、本播放器缺少歌詞設置、顯示功能。由于本小組對播放器的主界面還未想到一個滿意的設計,所以歌詞的實現暫且沒有實現,待界面設計得靈活的時候,再添加歌詞的功能。 廣東海洋大學本科生課程設計報告 系統開發過程 Myeclipse平臺開發版本 Version 0.1 1、菜單欄 *文件包括“打開文件”“打開目錄”“退出程序” *控制-隨機播放-順序播放-單曲循環-設置歌詞 *更換皮膚 *幫助-關于 2、上一首、下一首、停止/播放、隱藏列表4個button 3、幫助顯示-關于 消息框。 Version0.2 1、能打開文件,顯示文件名稱在下面的框內,多個文件顯示在框內! 2、文件-退出程序 實現 3、能夠顯示列表與隱藏列表 Version0.3 1、雙擊能夠播放 2、暫停 跟 繼續 新增 1、雙擊整個title 換成為歌曲名稱 問題 1、隱藏列表/顯示列表 list 會縮水 2、filedialog 沒有選擇任何文件 直接關閉會出現錯誤?。╲erson0.4中已解決) 3、雙擊空的列表也可以開始(version 0.6for netBeans 已經解決) Version0.31(Version0.3崩潰) Version0.4 1、上一首,下一首 能夠在列表中顯示 2、上一首 下一首播放功能 新增: 1、打開文件可以多選 2、打開目錄 可以把整個目錄里面的MP3、wav文件導出在列表中。 問題: 1、雙擊 第一次 是開始,第二次 是停止(相對于同一首歌,相對于其它歌會停止,也不播放)(version 0.6for netBeans 已經解決) 2、播放完一首歌后,不能自動往下播放。(version 0.5forneatBeans 已經解決) 歌曲不能刪除(version 0.6for netBeans 已經解決)修改: 1、“打開文件”“打開目錄”分別換成 添加本地歌曲,添加本地歌曲文件夾 Version0.5 1、皮膚(簡單的顏色或者圖片) 2、更換皮膚-可供選擇 修改: 1、項目已經轉至netbeans平臺上開發,并明明為Music_Player0.5forneatBeans 新增: 1、快捷鍵 添加歌曲/文件夾 添加了快捷鍵 和 關于 加了快捷鍵 廣東海洋大學本科生課程設計報告 Version 0.6 1、播放模式 2、刪除功能 問題: 1、播放列表可以拉出來,播放到名字比較長的歌曲,list會變寬!(已經完全解決,刪 除正在播放的label) 2、播放按鈕,雙擊 未解決(version0.6已經修復),上一首 下一首 置頂時候,以及 隨機播放時候 下一首上一首序號問題!(version0.6已經修復)。 3、菜單項 選中后,沒有特別標志(解決辦法 1、換另外一種菜單項 2、選中菜單項后 字 體等改變) selected 方法!是改變修改字體的?。╲ersion0.7添加1中 解決) 4、刪除 單首歌,序號不能改變(version0.7已經修復)NetBeans開發平臺版本 Version0.7 for netbeans 1、添加底下: 歌曲數目、播放模式、皮膚的顯示 2、歌曲名前面有序號 3、音樂時間,以及滾動條 4、”正在播放“顯示的問題 Version0.8 for netbeans 1、添加搜索模塊 2、添加搜索功能 3、搜索功能->搜索列表播放功能 Version0.9fornetbeans 1、修改播放器軟件運行時的圖標(將java的圖標換成“射手”圖標) 廣東海洋大學本科生課程設計報告 設計總結 JAVA是目前最流行的軟件開發語言之一,稱為網絡上的“世界語”。JAVA適合開發基于多媒體、與平臺無關、用面向對象的方法進行的基于Internet、Intranet、Extranet的Applet和應用程序。它具有簡單高效、面向對象、不依賴于機器結構的特點,支持多線程、分布和并發機制。用JAVA開發的應用軟件在可移植性、健壯性、安全性等方面大大優于已存在的其他編程語言。 JAVA是一門包含多種知識的學科,提供了豐富的類庫,能最大限度地利用網絡。JAVA可廣泛用于面向對象的事件描述、處理面向對象的企業型的應用開發,還應用于Internet系統管理、Web頁面設計、Internet可視化軟件開發等方面。在學習的過程中我學到了許多以前沒有學到的概念和新鮮資訊。運用這些知識可以完成老師交給我的課程設計任務。這次老師讓我們自己擬訂題目,給了我們很大的想象空間。我們自選了一個音樂播放器的課程設計題目。 課程設計的過程雖然是艱難而辛苦的,但是我卻從中感到了快樂與欣慰。快樂是因為我以前對于JAVA的知識可以說是孤陋寡聞,但是通過這次課程設計我使自己的知識更加的豐富了,加大了自己的知識面。讓自己的實力擴大了。所以我感到非常的快樂。欣慰是因為看著自己做出的課程設計得到了老師的認同,取得了成功。這次課程設計的整體過程是充實而滿足的。 廣東海洋大學本科生課程設計報告 參考文獻 [1](美)埃克爾(Eckel , B.)著,《Java編程思想》(第四版)陳昊鵬譯.一北京: 機械工業出版社,2007.6 [2] 刁成嘉 著,《UML系統建模與分析設計》,機械工業出版社,2007.6 [3] 朱喜福 著,《Java程序設計》(第2版),清華大學出版社, 2009.10 [4] 辛運幃 著,《Java語言程序設計》(第1版),人民郵電出版社, 2009.10 [5] 葉核亞 著,《Java程序設計實用教程》(第3版),電子工業出版社,2010.2 [6] 耿祥義,張躍平編著,《Java面向對象程序設計》.一北京:清華大學出版社,2010.1 廣東海洋大學本科生課程設計報告 附 錄 關鍵代碼 1、音樂解碼函數(decodeMusic) 解析:由于java applet播放聲音,對應的格式只有一些原始格式如.au、.Wav、.Midi、.rfm格式,因此一下的解碼函數就非常必要了,即將MP3等其它格式文件的音頻等格式修改成系統能夠實現的格式,并寫入內存由此來實現播放功能。詳細實現請閱讀如下代碼。 public void decodeMusic(AudioInputStream in){// 開始解碼 MP3 AudioFormat format = in.getFormat(); AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,// 音頻編碼技術 format.getSampleRate(),// 每秒的樣本數 16,// 每個樣本中的位數 format.getChannels(),// 聲道數(單聲道 1 個,立體聲 2 個,等等) format.getChannels()* 2,// 每幀中的字節數 format.getSampleRate(), false);// 每秒的幀數和是否以 big-endian // 字節順序存儲單個樣本中的數據 // 然后重新獲取一個新的輸入流,AudioInputStream decodeIn = AudioSystem.getAudioInputStream(decodedFormat, in);/** * 源數據行是可以寫入數據的數據行。它充當其混頻器的源。應用程序將音頻字節寫入源數據行,這樣可處理字節緩沖并將它們傳遞給混頻器。 * 混頻器可以將這些樣本與取自其他源的樣本混合起來,然后將該混合物傳遞到輸出端口之類的目標(它可表示聲卡上的音頻輸出設備)。 * */ SourceDataLine sdl = null;// 然后 DataLine.Info info = new DataLine.Info(SourceDataLine.class,decodedFormat);try { /** * AudioSystem :類充當取樣音頻系統資源的入口點。此類允許查詢和訪問安裝在系統上的混頻器 * **/ sdl =(SourceDataLine)AudioSystem.getLine(info); sdl.open(decodedFormat); } catch(Exception e){ 廣東海洋大學本科生課程設計報告 e.printStackTrace();} /** 指示該行是否支持特定類型的控件。*/ if(sdl.isControlSupported(FloatControl.Type.PAN)){ // FloatControl 對象提供對浮點值范圍的控制 FloatControl pan =(FloatControl)sdl .getControl(FloatControl.Type.PAN); if(curPosition == Position.RIGHT){ pan.setValue(1.0f); } else if(curPosition == Position.LEFT){ pan.setValue(-1.0f); } } sdl.start();int nBytesRead = 0;byte[] abData = new byte[EXTERANAL_BUFFER_SIZE];try { while(nBytesRead!=-1){ // 文件流的讀寫 nBytesRead = decodeIn.read(abData, 0, abData.length); if(nBytesRead >= 0){ sdl.write(abData, 0, nBytesRead); } } } catch(Exception e){ e.printStackTrace(); return;} finally { // 通過在清空數據行的內部緩沖區之前繼續數據 I/O,排空數據行中的列隊數據。 sdl.drain(); sdl.close();} } 廣東海洋大學本科生課程設計報告 2、播放線程類(class PlayThread) 解析:本播放器只使用一個線程來實現歌曲播放的功能,若用戶要更換歌曲或者停止音樂,則對線程重建,即殺死原線程再建立新的線程,其實現的效果還是跟原來線程一樣。同時此線程包含了許多子功能,如更改播放模式,對“上一首”“下一首”顯示“正在播放”等功能均在此線程上實現。詳細內容請閱讀如下代碼。 class PlayThread extends Thread{ public void run(){ while(true){ try { setInitShowing();//初始化滾動條以及計時label 的值 isStop = true;//標志狀態,說明是停止了 filename =(String)nameVector.get(chosenIndex).toString();//取chosenIndex對應的歌曲名稱 filepath =(String)urlVector.get(chosenIndex).toString();////取chosenIndex對應的歌曲路徑 System.out.println(“我在播放:”+chosenIndex+“ ”+filename);//后臺輸出檢測 /*設置“正在播放”的值,只輸出前23個字符,以免超出長度,后面補...*/ String showName = null; if(filename.length()>23){ showName = filename.substring(0, 23)+ “..”; }else{ showName = filename; } showTileOfMusic.setText(“正在播放:”+showName); File file = new File(filepath); setTitle(filename); list.setSelectedValue(nameVector.get(chosenIndex), true); listIndex = chosenIndex; stporplySongButton.setText(“停止”);//修改 停止/播放button的狀態值 AudioInputStream in = AudioSystem.getAudioInputStream(file);//去音樂文件 AudioFileFormat aff = AudioSystem.getAudioFileFormat(file);//去音樂文件的格式(為了得到歌曲長度) musicLength = aff.getFrameLength()/aff.getFormat().getFrameRate();//取音樂文件的長度 System.out.println(“我有那么長:”+musicLength);//后臺顯示,用于檢測 setShowingTime(musicLength,fileTime);//顯示總長度到fileTime label中 PlayerSlider.setMaximum((int)musicLength);//并且設置滾動條的最大值 isStop = false;//設置正在播放狀態 hasStop = false;//設置正在播放狀態 decodeMusic(in);//解碼并播放 isStop = true;//播放完畢后設置回非播放狀態 hasStop = true; 廣東海洋大學本科生課程設計報告 chooseNextSong();//選擇下一首歌返回while } catch(Exception e){ //e.printStackTrace(); System.out.println(“剛才那首歌出錯了!”);//如果出現錯誤,則顯示直接跳至下一首歌 nextMusic(); } } } } 3、控制滾動條類(class RunSlider) 解析:此類雖然簡短,但其能動態實現滾動條以及播放時間的運動。其中setShowingTime()方法提供的接口十分靈活,能夠對不同空間進行時間的控制,本播放器只對播放時間的兩個JLabel實現了此功能,這大大提高了本播放器的可擴展性。詳細內容請閱讀如下代碼。 class RunSlider extends Thread{ public void run(){ try { musicCouter = 0; while(true){ Thread.sleep(1000);//每秒鐘滾動一次 musicCouter++; PlayerSlider.setValue((int)musicCouter); setShowingTime(musicCouter, runingTime);//轉換時間并顯示回去runingTime label } } catch(InterruptedException ex){ Logger.getLogger(MyPlayer.class.getName()).log(Level.SEVERE, null, ex); } } }第三篇:C++課程設計公司人事管理系統
第四篇:Java課程設計報告
第五篇:Java課程設計報告