JAVA課程設(shè)計學(xué)籍管理系統(tǒng)1
課程設(shè)計報告
課程設(shè)計(論文)任務(wù)書
軟件 學(xué) 院 軟件+信息 專 業(yè) 1班 班
一、課程設(shè)計(論文)題目 學(xué)籍管理系統(tǒng)
二、課程設(shè)計(論文)工作自 10 年 12 月 20 日起至 10 年 12 月 24 日止。
三、課程設(shè)計(論文) 地點: 軟件學(xué)院實訓(xùn)中心
四、課程設(shè)計(論文)內(nèi)容要求:
1.本課程設(shè)計的目的
(1)使學(xué)生鞏固和提高Java編程技術(shù)
(2)培養(yǎng)學(xué)生掌握程序設(shè)計的基本思路和方法;
(3)加強學(xué)生研發(fā)、調(diào)試程序的能力;
(4)培養(yǎng)學(xué)生分析、解決問題的能力;
(5)提高學(xué)生的科技論文寫作能力。
2.課程設(shè)計的任務(wù)及要求
1)任務(wù):
(1)錄入學(xué)生基本信息的功能;
(2)修改學(xué)生基本信息的功能
(3)查詢學(xué)生基本信息的功能
(4)刪除學(xué)生基本信息的功能
2)創(chuàng)新要求:
(5)顯示所有學(xué)生基本信息的功能
(6)在用戶進行相應(yīng)操作時應(yīng)彈出提示對話框
(7)采用數(shù)據(jù)庫存儲學(xué)生基本信息
3)課程設(shè)計論文編寫要求
(1)課程設(shè)計任務(wù)及要求
(2)設(shè)計思路--工作原理、功能規(guī)劃
(3)詳細設(shè)計---數(shù)據(jù)分析、算法思路、類設(shè)計、功能實現(xiàn)(含程序流程圖、主要代碼及注釋)、界面等。
(4)運行調(diào)試與分析討論---給出運行屏幕截圖,分析運行結(jié)果,有何改進想法等。
(5)設(shè)計體會與小結(jié)---設(shè)計遇到的問題及解決辦法,通過設(shè)計學(xué)到了哪些新知識,鞏固了哪些知識,有哪些提高。
(6)參考文獻(必須按標(biāo)準(zhǔn)格式列出,可參考教材后面的參考文獻格式)
(7) 報告按規(guī)定排版打印,要求裝訂平整,否則要求返工;
(8) 課設(shè)報告的裝訂順序如下:封面---任務(wù)書---中文摘要---目錄----正文---附錄(代碼及相關(guān)圖片)
(9)嚴(yán)禁抄襲,如有發(fā)現(xiàn),按不及格處理。
4)答辯與評分標(biāo)準(zhǔn):
(1)考勤:10分;
(2)程序檢查:30分;
(3)課設(shè)答辯:20分
(3)課程設(shè)計報告:40分;
5)參考文獻:
(1)丁振凡《Java語言使用教程》 北京郵電大學(xué)出版社
(2)張 .《 》 某出版社
(3)
6)課程設(shè)計進度安排
內(nèi)容 天數(shù) 地點
構(gòu)思及收集資料 7 圖書館
編碼與調(diào)試 5 實驗室
撰寫論文 3 圖書館、實驗室
學(xué)生簽名:
10年 12月 20 日
課程設(shè)計(論文)評審意見
(1)考勤(10分):優(yōu)( )、良(?。⒅校ā。?、一般( )、差( );
(2)程序檢查(30分):優(yōu)(?。⒘迹ā。⒅校ā。?、一般( )、差(?。?;
(3)課設(shè)答辯(20分):優(yōu)( )、良( )、中( )、一般( )、差(?。?;
(4)課設(shè)報告(40分):優(yōu)( )、良(?。⒅校ā。?、一般( )、差(?。?;
評閱人: 職稱: 講師
10 年 01 月 25 日
中文摘要
本程序用于用戶對少量學(xué)生信息進行簡單的管理,本程序針對于對安全系數(shù)要求不高,炒作不是很復(fù)雜的小型客戶開發(fā),如本程序不符合您的要求,請選擇其他大型程序。
本程序可以實現(xiàn)對學(xué)生信息的錄入、查詢、修改、刪除等操作,同時支持查看所有學(xué)生信息,功能完善,界面簡潔美觀,布局合理,操作簡便,簡單易用,任何人可輕松操作。
同時,本程序?qū)ο到y(tǒng)要求配置較低,運行速度快,而卻對數(shù)據(jù)庫管理要求較低。本程序數(shù)據(jù)庫采用office2007版本的access數(shù)據(jù)庫(.accdb)進行數(shù)據(jù)存儲,該數(shù)據(jù)庫可實現(xiàn)關(guān)系較為簡單的數(shù)據(jù)管理。如有需要,請與XXX公司聯(lián)系。
本程序版本為0.9公測版,使用完全免費,未經(jīng)允許,禁止用于商業(yè)用途,歡迎用戶使用,如在使用中出現(xiàn)問題,請及時將問題反饋給我們,一邊為您提供質(zhì)量更優(yōu)秀的軟件,我們再次深表感謝!
目 錄
一、課設(shè)任務(wù)及要求 1
二、需求分析 2
三、設(shè)計思路 3
四、詳細設(shè)計 4
五、運行調(diào)試與分析討論 19
六、設(shè)計體會與小結(jié) 22
七、參考文獻 23
一、課設(shè)任務(wù)及要求
題目 學(xué)籍管理系統(tǒng)
設(shè)計內(nèi)容
設(shè)計基于access數(shù)據(jù)庫的學(xué)籍管理系統(tǒng)。
學(xué)生基本信息應(yīng)包括對學(xué)生的相關(guān)屬性進行操作,如學(xué)號、姓名、性別、專業(yè)、年級、生日等信息,另外添加備注一欄存儲學(xué)生的附加信息。用戶可對學(xué)生基本信息進行錄入、查詢、修改、刪除、顯示所有學(xué)生信息等基本操作。
學(xué)生基本信息包括多項屬性,關(guān)系較為復(fù)雜,應(yīng)采用數(shù)據(jù)庫存儲學(xué)生基本信息,這樣各種信息之間的關(guān)系、區(qū)別以及聯(lián)系可以更好的存儲起來。
設(shè)計要求
1錄入學(xué)生基本信息的功能
1.1 用戶按照要求輸入信息進行注冊,成功之后要提示用戶注冊成功。
1.2 當(dāng)用戶注冊是輸入不當(dāng),如學(xué)號已存在,應(yīng)提示用戶學(xué)號已存在,并重新輸入。
2查詢學(xué)生基本信息的功能
2.1 用戶可通過學(xué)號查詢數(shù)據(jù)庫中學(xué)生的基本信息,并將該學(xué)
號的學(xué)生基本信息顯示在查詢窗口里。
2.2 當(dāng)用戶輸入有不當(dāng),如輸入學(xué)號不存在,應(yīng)提示用戶輸入的學(xué)號有誤,并重新輸入。
2.3 用戶不能對查詢窗口中顯示的學(xué)生基本信息進行編輯。
3修改學(xué)生基本信息的功能
3.1 用戶可通過學(xué)號在數(shù)據(jù)庫中搜索需要修改的學(xué)生的基本信息,并將該學(xué)號的學(xué)生基本信息顯示在修改窗口里。
3.2 用戶可通過各行的修改按鈕來改變學(xué)生信息的狀態(tài),并對學(xué)生基本信息進行修改。
3.3 用戶輸入新的學(xué)生信息后可將修改后的學(xué)生信息上傳至數(shù)據(jù)庫中。
4刪除學(xué)生基本信息的功能
4.1 用戶可通過學(xué)號在數(shù)據(jù)庫中搜索需要刪除的學(xué)生的基本信息,并將該學(xué)號的學(xué)生基本信息顯示在刪除窗口里。
4.2 用戶可將需要刪除的學(xué)生信息從數(shù)據(jù)庫中刪除。
4.3 當(dāng)用戶刪除成功之后應(yīng)提示用處該學(xué)號的同學(xué)已從數(shù)據(jù)庫中刪除。
5顯示所有學(xué)生基本信息的功能
5.1 可在窗口中顯示所有數(shù)據(jù)庫中的學(xué)生信息。
5.2 學(xué)生信息要按一定規(guī)則有序的顯示。
二、需求分析
系統(tǒng)目標(biāo):
軟件開發(fā)的意圖便于用戶對學(xué)生的管理,方便查看學(xué)生的情況。如用戶對學(xué)生基本信息進行錄入、查詢、修改、刪除等。
使用范圍:
本系統(tǒng)僅針對用戶對少量學(xué)生進行學(xué)籍管理。
功能要求:
1錄入學(xué)生基本信息的功能
2 查詢學(xué)生基本信息的功能
3修改學(xué)生基本信息的功能
4刪除學(xué)生基本信息的功能
5顯示所有學(xué)生信息的功能
信息采集與使用權(quán)限:
使用時由用戶錄入學(xué)生信息,安裝本系統(tǒng)的用戶皆可使用此軟件。
性能需求:
1、 程序運行流暢
程序占用內(nèi)存小,可在大多數(shù)電腦上流暢運行。
2、 數(shù)據(jù)的完整性,準(zhǔn)確性
錄入按格式錄入,同時只能錄入一名學(xué)生的基本信息。
輸出按格式輸出,輸出所有學(xué)生信息是要采用表格形式。
3、 界面適當(dāng)美觀,優(yōu)雅,通用性較強
三、設(shè)計思路
界面構(gòu)建:
1、為了便于各種操作,軟件采用多窗口的模式。用戶可在不同窗口進行相應(yīng)操作(錄入、查詢、修改、刪除、顯示所有學(xué)生省信息)。
2、主窗口是用戶進行各種操作的平臺,具體操作在各個獨立功能窗口中完成。
3、主窗口的主要功能位于菜單中,菜單為進入各個功能窗口的唯一通道。
4、各功能窗口(除顯示所有學(xué)生信息窗口)均由兩到三個模塊構(gòu)成。第一個模塊中主要包含學(xué)號以及相關(guān)操作的組件。第二個模塊由姓名、性別、專業(yè)、年級、生日等相關(guān)組件構(gòu)成。第三個模塊(錄入、修改、刪除窗口中包含)由相關(guān)操作的功能按鈕組件構(gòu)成。
5、當(dāng)用戶在進行個別錄入、刪除或錯誤輸入操作時,會彈出相應(yīng)對話框提示用戶。如當(dāng)錄入成功或刪除成功,彈出成功以及相應(yīng)的簡明信息提示當(dāng),當(dāng)錄入、刪除失敗以及輸入不當(dāng)是,彈出錯誤以及簡單的錯誤原因提示用戶重新操作。
6、界面布局盡量合理,各組件位置分布均勻美觀。
數(shù)據(jù)存儲
1、由于學(xué)生包含多項屬性,需對學(xué)生屬性進行錄入、修改、刪除等多項操作,操作過程較為復(fù)雜,故采用數(shù)據(jù)庫。本軟件針對小型用戶使用,故使用入門級的access數(shù)據(jù)庫。
2、由于存儲少量信息,數(shù)據(jù)庫中只包含一個表,表中有學(xué)號、姓名、性別、專業(yè)、年級、生日等關(guān)鍵字。
3、數(shù)據(jù)庫在用完之后即使關(guān)閉。
四、詳細設(shè)計
1、程序主體概述:
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
程序采用AWT包的相關(guān)組件設(shè)計,故包含awt包;
通過各種動作完成相關(guān)操作,故包含awt.event包;
學(xué)生信息用數(shù)據(jù)庫存儲,故包含sql包;
public class StudentManageSystem extends Frame implements WindowListener,ActionListener{。 。 。}
StudentManageSystem為主類,通過繼承類Frame以及借口,分別實現(xiàn)主窗口創(chuàng)建功能,動作、窗口都做監(jiān)聽的功能。
2、窗口監(jiān)聽:
windowClosingwei()為實現(xiàn)各窗口關(guān)閉的方法。
public void windowClosing(WindowEvent e){
try{
Frame frm=(Frame)(e.getSource());
if(e.getSource()==this){
try{
stmt.close();
con.close();
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
System.exit(0);
}
else{
frm.dispose();
}
}catch(Exception ex){
Dialog dig=(Dialog)(e.getSource());
dig.dispose();
}
}
文件中出現(xiàn)的窗體有兩種—Frame和Dialog。關(guān)閉方法采用異常處理機制,非異常情況需要關(guān)閉的窗口是Frame,如果需要關(guān)閉的窗體是Dialog,則進入異常處理機制。當(dāng)關(guān)閉Frame時先判斷是否為主窗體,主窗體則關(guān)閉所有窗體并退出窗體,同時與數(shù)據(jù)庫斷開,當(dāng)需要關(guān)閉的窗體為功能窗體時,只關(guān)閉該功能窗體。
3、公共組件:
Panel zt;//歡迎窗體中的重要容器
MenuBar mt;//主菜單
Frame zf;//功能窗體加載的平臺
Panel stuinf;//功能窗體中學(xué)生信息家在的容器
Font font1;
Label number,name,sex,profession,grade,birthday;//屬性標(biāo)簽
TextField numbers,names,professions,grades,birthdays;//屬性文本域
CheckboxGroup style=new CheckboxGroup();//性別
Checkbox f,m;
String url="jdbc:odbc:學(xué)生管理系統(tǒng)";//數(shù)據(jù)庫連接
String sql="SELECT *FROM 學(xué)生信息";
Connection con;
Statement stmt;
ResultSet rs;
Dialog wrongd;//錯誤對話框
Dialog confirmd;//成功對話框
String num0="";
4、構(gòu)造函數(shù)—主窗體:
public StudentManageSystem1(){
super("學(xué)籍管理系統(tǒng)");
this.setVisible(true);
。。。
mt=new MenuBar();
Menu menu=new Menu("菜單");
MenuItem ininformation=new MenuItem("錄入學(xué)生信息");
menu.add(ininformation);
ininformation.addActionListener(this);
。。。
mt.add(menu);
setMenuBar(mt);
zt=new Panel();
zt.add(new Label("\n"+"歡迎登陸學(xué)生管理系統(tǒng)"));
this.add(zt);
numbers=new TextField(20);
。。。
number=new Label("學(xué)好");
。。。
m=new Checkbox("男",true,style);
f=new Checkbox("女",false,style);
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e){
System.err.println(e.getMessage());
}
try{
con=DriverManager.getConnection(url, "", null);
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
System.out.println("連接成功");
}
catch(SQLException ex){
System.out.println("Message"+ex.getMessage());
}
}
通過構(gòu)造函數(shù),加載主窗體(包括家在菜單以及歡迎界面),對主窗體設(shè)置大小,添加動作監(jiān)聽器以及窗口監(jiān)聽器,初始化部分程序用到的公共組件(學(xué)生學(xué)號、姓名、性別、專業(yè)、年級、生日等相關(guān)組件),以及連接數(shù)據(jù)庫。
5、學(xué)生信息加載方法:
public Panel lodeinf(Panel stuinf){
。。。
}
該方法用于加載功能窗體中學(xué)生信息顯示組件的加載,包括學(xué)號、姓名、性別、專業(yè)、年級、生日的標(biāo)簽以及文本域組件。
6、錄入學(xué)生信息窗體
public void registzf(String s){
stuinf=new Panel();
zf=new Frame(s);
zf.doLayout();
zf.setLayout(new BorderLayout());
Panel ps=new Panel();
Label l=new Label("學(xué)號");
ps.setLayout(null);
。。。
l.setBounds(50, 5, 30, 20);
numbers.setBounds(100, 5, 220, 20);
Panel px=new Panel();
px.setLayout(null);
px.setBounds(0, 0, 0, 40);
Button sureb,cancelb;
sureb=new Button("錄入");
cancelb=new Button("取消");
sureb.setBounds(150, 5, 40, 30);
cancelb.setBounds(200, 5, 40, 30);
px.setBackground(Color.LIGHT_GRAY);
px.add(sureb);
px.add(cancelb);
sureb.addActionListener(this);
cancelb.addActionListener(this);
zf.setVisible(true);
。。。
zf.addWindowListener(this);
}
錄入窗體包含三個模塊。
通過容器ps加載學(xué)號的相關(guān)組件,成為第一模塊。
注冊窗體調(diào)用lodeinf(Panel stuinf)加載學(xué)生信息主體組件進行加載,成為第二模塊。
通過容器px加載錄入,取消按鈕,來實現(xiàn)成績錄入以及推出該窗體,成為第三模塊。
7、查詢學(xué)生信息窗體
public void inquirezf(String s){
stuinf=new Panel();
zf=new Frame(s);
。。。
Panel ps=new Panel();
Label l=new Label("請輸入要查詢的學(xué)號:");
Button b=new Button("查詢");
b.addActionListener(this);
ps.setLayout(null);
ps.setBounds(0, 0, 100, 30);
ps.setBackground(Color.LIGHT_GRAY);
ps.add(l);
。。。
l.setBounds(50, 5, 120, 20);
。。。
zf.add("North",ps);
zf.add("Center",lodeinf(stuinf));
zf.addWindowListener(this);
names.setEnabled(false);
。。。
}
查詢窗體包含兩個模塊。
通過容器ps加載學(xué)號的相關(guān)組件,以及查詢按鈕,成為第一模塊。
注冊窗體調(diào)用lodeinf(Panel stuinf)加載學(xué)生信息主體組件進行加載,成為第二模塊。
注意:該窗體中,用戶不能對除學(xué)號以外的信息進行操作。
8、修改學(xué)生信息窗體
public void modifyzf(String s){
stuinf=new Panel();
zf=new Frame(s);
。。。
Panel p=new Panel();
Panel ps=new Panel();
Label l=new Label("請輸入要修改的學(xué)號:");
Button b=new Button("搜索");
ps.setLayout(null);
ps.setBounds(0, 0, 400, 60);
ps.setBackground(Color.LIGHT_GRAY);
ps.add(l);
。。。
l.setBounds(25, 35, 120, 20);
。。。
b.addActionListener(this);
Panel px=new Panel();
px.setLayout(null);
px.setBounds(0, 250, 400, 50);
Button inquire,reinquire;
inquire=new Button("錄入修改");
reinquire=new Button("重置");
inquire.setBounds(130, 5, 60, 25);
reinquire.setBounds(210, 5, 40, 25);
px.add(inquire);
px.add(reinquire);
px.setBackground(Color.LIGHT_GRAY);
inquire.addActionListener(this);
reinquire.addActionListener(this);
Label wl1,wl2,wl3,wl4,wl5;
wl1=new Label("(新)");
。。。
wb1=new Button("修改");
。。。
wl1.setBackground(Color.LIGHT_GRAY);
。。。
zf.add(wl1);
。。。
zf.add(wb1);
。。。
wl1.setBounds(25, 76, 25, 20);
。。。
wb1.setBounds(330, 75, 40, 20);
。。。
wb1.addActionListener(this);
。。。
wb1.setEnabled(false);
。。。
p=lodeinf(stuinf);
p.setBounds(0,60,400,190);
zf.addWindowListener(this);
zf.add(ps);
。。。
names.setEnabled(false);
。。。
}
修改窗體包含三個模塊+部分輔助組件。
通過容器ps加載學(xué)號的相關(guān)組件,以及搜索按鈕,成為第一模塊。
注冊窗體調(diào)用lodeinf(Panel stuinf)加載學(xué)生信息主體組件進行加載,成為第二模塊。
通過容器px加載錄入修改,重置按鈕,來實現(xiàn)成績錄入以及推出該窗體,成為第三模塊。
還有部分顯示“新”的標(biāo)簽,以及修改的按鈕。
注意:沒有顯示學(xué)號之前其他組件均不能操作。
9、刪除學(xué)生信息窗體
public void deletezf(String s){
stuinf=new Panel();
zf=new Frame(s);
。。。
Panel ps=new Panel();
Label l=new Label("請輸入要刪除的學(xué)號:");
Button b=new Button("搜索");
ps.setLayout(null);
ps.setBounds(0, 0, 100, 30);
ps.setBackground(Color.LIGHT_GRAY);
ps.add(l);
。。。
l.setBounds(50, 5, 120, 20);
。。。
b.addActionListener(this);
Panel px=new Panel();
px.setLayout(null);
px.setBounds(0, 0, 0, 40);
Button sureb,cancelb;
sureb=new Button("刪除");
cancelb=new Button("取消");
sureb.setBounds(150, 5, 40, 30);
cancelb.setBounds(200, 5, 40, 30);
px.setBackground(Color.LIGHT_GRAY);
。。。
sureb.addActionListener(this);
cancelb.addActionListener(this);
zf.add("North",ps);
。。。
zf.addWindowListener(this);
names.setEnabled(false);
。。。
}
刪除窗體包含三個模塊。
通過容器ps加載學(xué)號的相關(guān)組件,以及搜索按鈕,成為第一模塊。
注冊窗體調(diào)用lodeinf(Panel stuinf)加載學(xué)生信息主體組件進行加載,成為第二模塊。
通過容器px加載刪除,取消按鈕,來實現(xiàn)成績錄入以及推出該窗體,成為第三模塊。
注意:沒有顯示學(xué)號之前其他組件均不能操作。
10、顯示所有學(xué)生信息窗體
public void allzf(String s){
String informations="學(xué)號 \t姓名 \t性別 \t專業(yè) \t年級 \t生日 \r\n";
TextArea text;
zf=new Frame(s);
。。。
Font font=new Font("宋體",12,14);
try{
sql="SELECT *FROM 學(xué)生信息";
rs=stmt.executeQuery(sql);
while(rs.next()){
String s0=rs.getString("學(xué)號");
。。。
informations+=s0+"\t"+s1+"\t"+s2+"\t"+s3+"\t"+s4+"\t"+s5+"\r\n";
}
}catch(Exception ex){}
text=new TextArea(informations);
text.setBounds(10,30,380,260);
text.setFont(font);
text.setBackground(Color.LIGHT_GRAY);
zf.add(text);
zf.addWindowListener(this);
}
該窗體由一個TextArea構(gòu)成,用于顯示全部學(xué)生的年基本信息。
注意:顯示要按一定規(guī)則輸出(表格形式)。
11、動作監(jiān)聽
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()=="錄入學(xué)生信息"){
{
if(zf!=null){
zf.dispose();
}
registzf("學(xué)生信息錄入");
}
}
if(e.getActionCommand()=="查詢學(xué)生信息"){。。。}
if(e.getActionCommand()=="修改學(xué)生信息"){。。。}
if(e.getActionCommand()=="刪除學(xué)生信息"){。。。}
if(e.getActionCommand()=="所有學(xué)生信息"){。。。}
if(e.getActionCommand()=="錄入"){...}
if(e.getActionCommand()=="查詢"){...}
if(e.getActionCommand()=="搜索"){...}
if(e.getActionCommand()=="修改"){
numbers.setText(num0);
if(e.getSource()==wb1)
names.setEnabled(true);
。。。
}
if(e.getActionCommand()=="錄入修改"){。。。}
if(e.getActionCommand()=="重置"){
。。
try{
sql="SELECT *FROM 學(xué)生信息";
rs=stmt.executeQuery(sql);
while(rs.next()){
String s0=rs.getString("學(xué)號");
。。。
if(num0.equals(s0)){
names.setText(s1);
if(s2.equals("男"))
m.setState(true);
。。。
}
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
if(e.getActionCommand()=="刪除"){
...
}
if(e.getActionCommand()=="取消"){
zf.dispose();
}
if(e.getActionCommand()=="退出"){
System.exit(0);
}
if(e.getActionCommand()=="確定"){
try{
confirmd.dispose();
}catch(Exception ex){}
try{
wrongd.dispose();
}catch(Exception ex){}
}
}
11、1 進入錄入、查詢、修改、刪除、顯示所有信息窗口
if(e.getActionCommand()=="錄入學(xué)生信息"){。。。}
if(e.getActionCommand()=="查詢學(xué)生信息"){。。。}
if(e.getActionCommand()=="修改學(xué)生信息"){。。。}
if(e.getActionCommand()=="刪除學(xué)生信息"){。。。}
if(e.getActionCommand()=="所有學(xué)生信息"){。。。}
11、2 錄入
if(e.getActionCommand()=="錄入"){
String num0="";
String s0=numbers.getText();
。。。
if(m.getState())
s2="男";
if(f.getState())
s2="女";
int count=0;
try{
sql="SELECT *FROM 學(xué)生信息";
rs=stmt.executeQuery(sql);
while(rs.next()){
num0=rs.getString("學(xué)號");
if(num0.equals(s0)){
count++;
}
}
if(count==0){
sql="insert into 學(xué)生信息(學(xué)號,姓名,性別,專業(yè),年級,生日,備注) values('"+s0+"','"+s1+"','"+s2+"','"+s3+"','"+s4+"','"+s5+"','"+""+"')";
stmt.executeUpdate(sql);
confirmd=new Dialog(zf,"恭喜你!");
confirmd.setVisible(true);
confirmd.setModal(true);
confirmd.setSize(300, 100);
confirmd.setBounds(20, 100, 220, 100);
confirmd.addWindowListener(this);
Label confirml=new Label("注冊成功!\n學(xué)號:"+s0+"\n姓名:"+s1+"\n性別:"+s2+"\n專業(yè):"+s3+"\n年級:"+s4+"\n生日:"+s5+"");
Button confirmb=new Button("確定");
confirmb.addActionListener(this);
confirmd.setLayout(new FlowLayout());
confirmd.add("North",confirml);
confirmd.add("Center",confirmb);
confirmd.pack();
}
else{
wrongd=new Dialog(zf,"錯誤");
。。。
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
錄入之前先檢查該學(xué)號是否存在,如果存在,彈出錯誤對話框,提示重新輸入,如果錄入成功,彈出成功窗口。
11、3 查詢/搜索
if(e.getActionCommand()=="查詢"){
num0=numbers.getText();
int count=0;
try{
sql="SELECT *FROM 學(xué)生信息";
rs=stmt.executeQuery(sql);
while(rs.next()){
String s0=rs.getString("學(xué)號");
。。。
if(num0.equals(s0)){
names.setText(s1);
if(s2.equals("男"))
m.setState(true);
。。。
count++;
}
}
if(count==0){
wrongd=new Dialog(zf,"錯誤");
。。。
Label wrongl=new Label("您輸入的學(xué)號"+num0+"不存在,請重新輸入!");
。。。
numbers.setText("");
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
查詢該學(xué)號是否存在,如果不存在,彈出錯誤對話框,提示重新輸入,如果存在,在查詢窗體中顯示該學(xué)生信息。
11、4 修改
if(e.getActionCommand()=="錄入修改"){
numbers.setText(num0);
String s0=num0;
String s1=names.getText();
。。。
if(m.getState())
s2="男";
。。。
System.out.println(s0+s1+s2+s3+s4+s5);
try{
sql="update 學(xué)生信息 set 姓名 = '"+s1+"' where 學(xué)號 ="+"'"+s0+"'";
stmt.executeUpdate(sql);
sql="update 學(xué)生信息 set 性別 = '"+s2+"' where 學(xué)號 ="+"'"+s0+"'";
。。。
confirmd=new Dialog(zf,"恭喜你!");
。。。
names.setText("");
。。。
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
錄入修改后該學(xué)生的信息,如果錄入成功,彈出成功窗口。
11、5刪除
if(e.getActionCommand()=="刪除"){
numbers.setText(num0);
。。。
try{
sql="SELECT *FROM 學(xué)生信息";
rs=stmt.executeQuery(sql);
while(rs.next()){
String s0=rs.getString("學(xué)號");
if(num0.equals(s0)){
sql="delete * from 學(xué)生信息 where 學(xué)號 = '"+num0+"'";
stmt.executeUpdate(sql);
confirmd=new Dialog(zf,"成功了!");
。。。
}
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
if(e.getActionCommand()=="取消"){
zf.dispose();
}
if(e.getActionCommand()=="退出"){
System.exit(0);
}
if(e.getActionCommand()=="確定"){
try{
confirmd.dispose();
}catch(Exception ex){}
try{
wrongd.dispose();
}catch(Exception ex){}
}
}
刪除選定學(xué)生的信息,如果刪除成功,彈出成功刪除窗口。
五、運行調(diào)試與分析討論
第 21 頁
六、設(shè)計體會與小結(jié)
做課設(shè)讓我對java有了新的認識,首先我接觸了很多上課見過見過但沒有實際用過的類和方法,讓我對編程有了許多新的思想。
大一學(xué)了C與C++,雖然當(dāng)時學(xué)的還不錯,由于學(xué)的都是入門知識,所以自己做的都是DOS下執(zhí)行的程序,雖然可以實現(xiàn)一定的功能,但和自己平時用的軟件相差很大。這學(xué)期剛開課學(xué)java感覺沒什么新鮮感,它的跨平臺特性也只是聽聽,根本沒有認識,知道學(xué)到第七章圖形界面用戶編程的時候,我發(fā)現(xiàn)學(xué)會之后自己可以做出來的軟件就更接近平時使用的軟件了,不過由于平時學(xué)士不刻苦,到時沒有時間靜下心來寫java代碼,知道結(jié)課做課設(shè),才靜下心來開始研究java,結(jié)合以前的編程知識,做起了自己的程序。
之所以會選學(xué)籍管理系統(tǒng),是因為上學(xué)期C++做的也是這個,做起來會比較熟練,同時想通過做課設(shè)學(xué)習(xí)一點數(shù)據(jù)庫的知識,感覺這些知識更貼近實際應(yīng)用,選好之后開始準(zhǔn)備課設(shè),先從最簡單的主窗體,到主窗體的菜單,組件添加,再到各個功能的獨立窗體的建立,再到最后的數(shù)據(jù)庫連接,功能的實現(xiàn),一步步走來,收獲頗多。其中獨立窗體中的組件排版是碰到的第一個問題,最簡單的方法是在建每個窗體時把所有需要的組件全部重新添加進去,但是這樣代碼會很長,而卻會多占很多內(nèi)存空間,于是我決定把個功能窗體中共同的組件在一個新方法中統(tǒng)一加載,為了減小占內(nèi)存空間,組建的在主類的構(gòu)造方法中生成,所有獨立功能窗口公用組件,這樣既減少了代碼額長度,又提高了程序的內(nèi)存利用率。還有很多問題,都在權(quán)衡之后得到了較優(yōu)的解決方法。它能夠使這次課設(shè)還讓我對java的跨平臺性有了進一步認識,當(dāng)我學(xué)好代碼興致勃勃的想把它做成exe可執(zhí)行文件時,在網(wǎng)上搜索之后發(fā)現(xiàn)它似乎很難實現(xiàn),就是應(yīng)為它的java語言的實現(xiàn)機制,通過jre來執(zhí)行執(zhí)行java代碼,而不是調(diào)用系統(tǒng)本地代碼。除此之外我還學(xué)到了新的編程技巧,比如對try,catch的運用。剛學(xué)的時候就是照書本上的打,很不情愿但是必須打的代碼,在做課設(shè)時,我發(fā)現(xiàn)他又很神奇的功能可以幫助我解決用其他辦法不好解決的問題,比如關(guān)閉窗口。剛開始程序只有主窗口時,關(guān)閉很好實現(xiàn),但隨著程序功能的完善,需要關(guān)閉的窗口越來越多,需要關(guān)閉的類型也便多了,到了關(guān)閉Dialog的時候,發(fā)現(xiàn)Dialog不能強制轉(zhuǎn)化為Frame,如果想用前面的方法管還得把多處代碼進行修改,不過我想到了用try來解決這個問題。
再次感謝老師一學(xué)期對我們的教學(xué)!
七、參考文獻
[1] 丁振凡 《Java語言使用教程》 北京郵電大學(xué)出版社
[2] 百度
[3] JavaEye
第 23 頁