學生成績管理系統(三):系統設計
一、系統框架
1.使用圖形用戶界面登錄。
2.建立一個數據庫,再在該數據庫中建三張表STUDENT(學生信息表)、Teacher(教師賬號管理表)、zhanghao(學生賬號管理表)。
3.設計當以學生身份登錄時只能進行查詢,當以教師身份登錄時可以查詢,修改,刪除,添加操作。
二、系統涉及到的知識點
1.掌握創建一個新的窗口。
2.掌握在窗口中添加文本框、按鈕、容器。
3.對添加的文本框、按鈕添加事件監聽器。
4.掌握構造方法的調用。
5.掌握類的繼承。
6.掌握java與數據庫之間的連接語句。
Java語言程序設計:
布局管理器:BorderLayout、GridLayout
輸入輸出流:InputStream、OutputStream
數據庫原理:
結構化查詢語句:select、insert
數據庫表的設計:
定義一個二維數組用於存放查詢的數據,在窗體上設置一個表格以便可以用來輸出查詢的數據。
三、流程描述
( 1)首先在類Studentms創建一個新的窗體添加學生登錄和教師登錄兩個按鈕。
(2)用
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
來監聽事件當按關閉按鈕可以關閉窗口。
(3)創建一個新類RegistSystem1,並用new方法來實現新類的功能,分別新增兩個登錄窗口。
(4)在新類中創建構造方法RegistSystem1(),該類中有相應的按鈕,文本框等的窗體所需的控件,增加密碼和按鈕監聽,並用語句連接數據庫如下獲取密碼:
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=
DriverManager.getConnection("jdbc:odbc:SMS","Test","123");
//加載驅動器
stmt = con.createStatement(); ////創建STATEMENT對象
int i=0;
int j=0;
int a[][]=new int[10][10];
int b[][]=new int[10][10];
//int c[][]=new int[10][10];
//int d[][]=new int[10][10];
rs = stmt.executeQuery("select * from zhanghao");
number1=Integer.parseInt(t1.getText());
pwd1=Integer.parseInt(pwd); //從表中讀數據
while (rs.next())
{
//rs.next()讀的是一行的數據
a[i][j]=rs.getInt("ID"); //用二維數組來存放讀出來的數據,
b[i][j]=rs.getInt("密碼");
(5)設置密碼檢錯功能:
a.當賬號輸入為空時檢錯;
b.當密碼輸入為空時檢錯;
c.當賬號和密碼輸入有錯時檢錯。
(6)當以學生的身份登錄成功時,在以上述同樣的方法生成一個有查詢、退出和返回的窗口。
(7)點擊查詢,根據語句
String cmd =e.getActionCommand();
if(cmd.equals("查詢"))
{
//鏈接數據庫,從數據庫中輸出信息
Statement stmt = null;
ResultSet rs = null;
JFrame jf = new JFrame("學生信息查詢系統");
JPanel jpl = new JPanel();
final String[] colHeads = {"ID", "NAME", "DEPARTMENT", "C++","ENG","GAOSHU","ZUYUAN"};
Object[][] base = new Object[11][7]; //創建對象數組
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注意是JdbcOdbcDriver,而不是JdbcDriver!!!!!!!
Connection con=
DriverManager.getConnection("jdbc:odbc:SMS","Test","123");//加載驅動器
stmt = con.createStatement(); ////創建STATEMENT對象
int i = 0;
rs = stmt.executeQuery("select * from STUDENT"); //從表中讀數據
while (rs.next()) { //rs.next()讀的是一行的數據
base[i][0] = rs.getInt("ID"); //用二維數組來存放讀出來的數據,
base[i][1] = rs.getString("NAME");
base[i][2] = rs.getString("DEPARTMENT");
base[i][3] = rs.getString("C++");
base[i][4] = rs.getString("ENG");
base[i][5] = rs.getString("GAOSHU");
base[i][6] = rs.getString("ZUYUAN");
i++;
};//注意有一個分號!!!!!!
stmt.close();
con.close(); //關閉與數據庫的連接
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (SQLException e1) {
e1.printStackTrace();
(8)當以教師的身份登錄時產生一個新類,出現一個新的具有查詢,添加,刪除,退出功能的窗體。
(9)點擊查詢與上(7)一樣的語句類型輸出學生的成績信息圖
(10)點擊刪除跳出新的出口,根據提示輸入需要刪除的學生的信息。
(11)程序
else if(cmd.equals("退出")){
System.exit(0);
}
用來增加按鈕監聽當按下退出鍵時退出窗體。
四、設計中遇到的問題及解決方法
1、當點擊按鈕無法達到想要的需求,跳不出另一個窗口。
經過仔細的檢查和分析發現,是因為沒有設置監聽器,以及沒有設置相應的實現方法。找出問題的根本之后,最終成功的解決了這一問題。
2、無法把在文本框中輸入的數和數據庫中的數匹配已達到密碼的驗證功能:
通過代碼:
public void actionPerformed(ActionEvent e) {
String cmd =e.getActionCommand();
if(cmd.equals("退出")){
System.exit(0);
}
String number = t1.getText();
String pwd = String.valueOf(pwdPwd.getText());
int number1;
int pwd1;
if(number.equals("")){
JOptionPane.showMessageDialog(null,"賬號不能為空","錯誤",JOptionPane.ERROR_MESSAGE);
return;
}else if (pwd.equals("")){
//把String 類型轉換為整形
數據庫沒有和程序連接成功。
四、項目進展
本周呢,我們的項目還在如火如荼的進行中,我們按照我們設計好的總流程圖,一步一步,進行代碼設計、測試與實現。現在經過了幾周的努力,我們的項目分功能已經基本都實現了,但是我們目前的最大的問題是,還沒有完成數據庫連接的問題以及界面的設計不夠完善,在接下來的時間里,這兩個問題也是我們主要解決的問題,現在數據庫連接的問題正在解決中,因為這一部分的內容以及操作都比較復雜,不過現在我們已經有眉目了,所以相信不久之后這一問題也將會迎刃而解。至於界面設計這一部分,基本功能的界面已經能夠顯示出來了,就剩下數據庫連接這一部分,相信數據庫這一塊兒搞定之后,界面將不是問題。我們還會不斷地跟進調試、測試和改進代碼,以完善程序的不足。
五、成員貢獻
| 成員 | 貢獻 |
|---|---|
| 楊夢雲 | 負責數據庫連接這一部分,包括數據庫相關軟件的查詢和下載以及應用 |
| 馮佳 | 負責程序界面設計及其優化這一部分,以及數據庫聯機的查詢 |
| 張家明 | 負責程序的改進,包括程序的測試和調試。還有總結程序更新博客 |
