大一課程設計:基於資料庫的學生資訊系統

drug_m發表於2009-07-30

我大一上學期的課程設計。

水平比較低。對別人來說或許是些廢話。

不過老師說這些對以後的學習會有用。不知道真的假的。

先稀裡糊塗的寫下來再說吧。。

 

 

題目要求:利用資料庫實現學生資訊管理系統,完成學生的各種管理。

      1)新增一個新學生(通過鍵盤或通過檔案向資料庫中新增學生:注意:一次可能要插入多個學生)

      2)從資料庫中刪除學生,注意要刪除學生應滿足的條件

     3)修改學生的資訊,注意要修改學生應滿足的條件

    4)查詢學生並輸出其有關資訊(要輸入查詢條件)

    5)顯示出所有學生的資訊(按表格格式顯示:由表頭,並且一個學生顯示一行)

    6)為了便於檢視,將資料庫中的資料儲存在檔案中。

分析:

(一)首先要建立學生資料庫、資料庫表(要注意:描述學生應該有哪些欄位)

       利用access資料庫,建立一個由: 學號,姓名,性別,出生日期,院系,5門成績,總成績的表。

1. 1建立過程:

     1)資料庫名:students_k (一定要記住:存放位置)

      (2) 資料表名: student_b

          表結構:  欄位名     資料型別     欄位的含義

                   xh         文字           學號

                   xm         文字           姓名

                   xb         文字           性別

                   rq         文字         出生日期

                   yx         文字          院系

                   cj1        整數          數學成績

                   cj2        整數          語文成績

                   cj3        整數          物理成績

                   cj4        整數          化學成績

                   cj5        整數          英語成績

                   cj6        整數          總成績

3)在資料庫的資料表中,輸入學生記錄(一個學生是一個記錄,要多輸入幾個) 

       4)儲存資料表。

12 建立資料來源:

      (1) 開始選單à設定à控制皮膚à管理工具à資料來源(ODBC)

      (2)(選擇系統DSN)新增à選擇Access Driver(*.mdb)à完成

      (3)資料來源名(N)”:輸入名字:XXX

            可以根據自己的便於記憶的輸入,必須記住以後要使用這個名字,

             最好與資料庫名student_k一樣

      (4)單擊選擇”,選擇已建立要使用的資料庫(students_k)

      (5)單擊確定”------完成.

  

(二)啟動JAVA語開發環境,設計應用程式

     2.1 學生類(student)的建立:

            該類的建立過程和思想請參考“基於檔案的管理系統”中的詳細說明。

另外,根據資料庫操作的特點,需要再補充如下方法。

修改記錄方法:(注意:引數的含義與應用)

     該方法主要用於,用一個學生物件,去替換資料庫結果集中的當前記錄,實現記錄的修改

     //用一個學生物件t,替換ResultSet中的物件rs中的一個記錄    

public void student_db(ResultSet rs)throws Exception{

        rs.updateString("xh",xh);

        rs.updateString("xm",xm);

        rs.updateString("xb",xb);

        rs.updateString("ri",csrq);

        rs.updateString("yx",yx);

        for(int i=;i<=6;++i){

             rs.updateInt("cj"+i,cj[i-1]);

        }  

        rs.updateRow();

    }

2.2   定義一個實現資料庫聯接等功能的類(AccessDb_Bean

           目的是為訪問資料庫提供基本的元件

 屬性: Statement stmt;   //建立語句物件

      Connection  con;

2.2.1)定義連線資料庫的方法,

注意:這個方法,是一個固定的格式,希望同學們記住   

    public AccessDb_Bean() throws Exception{//

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

        con=DriverManager.getConnection("jdbc:odbc:students_k");

        stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

                ResultSet.CONCUR_UPDATABLE);       

}

2.2.2)設計sql語句執行方法:

          注意:不同的sql語句,需要使用不同的執行語句,JAVA語言中提供了3中語句格式,希望同學們記住並理解,這裡給出了兩種格式。

public ResultSet executeselect(String sql )throws Exception{

        ResultSet rs=stmt.executeQuery(sql);

        return rs;     

}

public void executDML(String sql)throws Exception{

        stmt.executeUpdate(sql);}  

(2.2.3) 關閉方法:

   在這裡要關閉兩個物件:con stmt

public void close()throws Exception {

        con.close();

         stmt.close()}

 2.3)資料庫操作類(data_op)的定義

            該類是資料庫操作的主要類,所有的對資料庫的操作方法,應該全部定義在該類中。

注意:該類與“基於檔案管理系統中”學生集合類的區別。

2.3.1)屬性:

            只有一個,描述所連線的資料庫類的一個物件mydata;

AccessDb_Bean  mydata;

2.3.2)構造方法:

        通過呼叫構造方法,實現資料庫的連線和建立語句物件,形成可以直接使用的資料庫物件

        public data_op() throws Exception{      

         mydata=new AccessDb_Bean();       

      }

2.3.3)關閉方法:

          呼叫物件mydata,關閉資料庫的連線和建立語句

    public void close() throws Exception{

        mydata.close();

     }

2.3.4)在螢幕上顯示學生的方法

          sql串中,執行查詢,獲取資訊, 通過呼叫student類的構造方法,形成一個學生物件,再使用student類的顯示方法

       public void show(String sql) throws Exception{       

        ResultSet rs=mydata.executeselect(sql);

        student s;

        student.show_biaotou();

        while(rs.next()){

            s=new student(rs);

            s.show();  

        }      

    }

2.3.5)插入學生記錄方法:

      從鍵盤中輸入學生資訊,可以重複輸入,直到不再輸入為止。

     public void insert()throws Exception{      

        Scanner f=new Scanner(System.in);

        System.out.println("從鍵盤中輸入資料,現在開始輸入:");

        while(true){

            System.out.println("輸入:學號,姓名,性別、出生日期,院系,5門成績(整數):");

            String xh=f.next();

            String xm=f.next();

            String xb=f.next();

            String csrq=f.next();

            String yx=f.next();

            int cj0=f.nextInt();

            int cj1=f.nextInt();

            int cj2=f.nextInt();

            int cj3=f.nextInt();

            int cj4=f.nextInt();

            int cj5=cj0+cj1+cj2+cj3+cj4;           

            String ss1="('"+xh+"','"+xm+"','"+xb+"','"+csrq+"','"+yx+"',";

            String ss2=""+cj0+","+cj1+","+cj2+","+cj3+","+cj4+","+cj5+")";

            String sql="insert into students_b  values"+ss1+ss2;

            mydata.executDML(sql); 

            System.out.println("繼續下一個學生嗎?(0-/1-是)");

            if(f.nextInt()==0) break;           

          }

      }

2.3.6//將檔案f中的學生資訊匯入資料庫中,引數f是要讀的檔名(包含路徑)

    public void insert(String f) throws Exception{  

        File ff=new File(f);       

        Scanner sc=new Scanner(ff);

        while(sc.hasNext()){

            String xh=sc.next();

            String xm=sc.next();

            String xb=sc.next();

            String csrq=sc.next();

            String yx=sc.next();

            int cj0=sc.nextInt();

            int cj1=sc.nextInt();

            int cj2=sc.nextInt();

            int cj3=sc.nextInt();

            int cj4=sc.nextInt();

            int cj5=cj0+cj1+cj2+cj3+cj4;           

            String ss1="('"+xh+"','"+xm+"','"+xb+"','"+csrq+"','"+yx+"',";

            String ss2=""+cj0+","+cj1+","+cj2+","+cj3+","+cj4+","+cj5+")";

            String sql="insert into students_b  values"+ss1+ss2;

            mydata.executDML(sql);                       

          }

        System.out.println("由檔案中,將資料匯入資料庫完成!!!!");       

    }

2.3.7)刪除學生記錄的方法:

     /引數t是要刪除記錄的條件,在呼叫時,傳遞實際條件,但要注意輸入條件串的格式

     public void delete(String t) throws Exception{ 

          String sql1="delete from students_b  ";

        String sql=sql1+t;

        mydata.executDML(sql);         

    }

 

  

2.3.8)修改學生記錄方法:

   引數t是要修改記錄的條件,在呼叫時,傳遞實際條件,但要注意輸入條件串的格式,

     public void update(String t) throws Exception{

        Scanner f=new Scanner(System.in);

        String sql1="select * from students_b  ";

        String sql=sql1+t;

        ResultSet rs=mydata.executeselect(sql);

        student s;

        while(rs.next()){

            student.show_biaotou();

            s=new student(rs);

            s.show();

            System.out.println("輸入新資訊:姓名,性別、出生日期,院系,5門成績(整數):");

            student t1=new student(f);

            t1.student_db(rs);                                 

           }

}

2.3.9)將資料庫中的資訊,寫入檔案f中的方法;

      首先,將資料庫中的資料讀出(一次讀一條記錄),形成學生物件,再呼叫student類的方法,寫檔案。

     public void writer(String f) throws Exception{         

        PrintWriter pw=new PrintWriter(f);     

        ResultSet rs=mydata.executeselect("select * from students_b"); 

        student s;

        student.show_biaotou(pw);

        while(rs.next()){

            s=new student(rs);

            s.show(pw);

        }

        pw.close();

    }

   

2.4 主類的定義:

   其基本思想與“基於檔案管理系統”的主類一樣,可參考“基於檔案管理系統”中對主類的分析。

 public class main_main {

    public static void caidan(){       

        System.out.println("/r/n/r/n");

        System.out.println("         學生資訊管理系統選單");

        System.out.println("---------------------------------------");

        System.out.println("    1 從檔案(st.txt)中學生資訊匯入到資料庫中");

        System.out.println("    2 從鍵盤輸入學生資訊,插入到資料庫中");

        System.out.println("    3 按提示輸入要刪除學生記錄的條件,刪除學生記錄");

        System.out.println("    4 按提示輸入要查詢學生記錄的條件,顯示學生資訊");

        System.out.println("    5 按提示輸入要修改學生的條件,完成學生資訊的變更");

        System.out.println("    6 將資料庫中學生資訊寫入一個新檔案(new_st.txt)");

        System.out.println("    7 在螢幕上顯示資料庫中的所有學生資訊");

        System.out.println("    8 退出系統");

        System.out.println("---------------------------------------");

        System.out.print("請選擇功能號1-8(一定要先執行1):");

    }  

   

    public static void main(String[] args)throws Exception {       

        data_op dd;

        Scanner sc=new Scanner(System.in);

        int d;     

        dd=new data_op();

        String  sql;

        String  tt;

        boolean t=true;

        while(t){

            caidan();

            d=sc.nextInt();

            switch(d){           

              case 1:

                     dd.insert("st.txt");

                     break;

              case 2:

                     dd.insert();

                     break;

              case 3:

                    Scanner sc3=new Scanner(System.in);

                    System.out.println("請輸入刪除條件,要注意條件的格式:");

                    tt=sc3.nextLine();     //在這裡要使用,讀一行的方法?

                    if(!tt.equals("")){

                        tt=" where "+tt;

                    }

                    sql="select * from students_b  "+tt;

                    System.out.println("要刪除的記錄如下:");

                    dd.show(sql);

                    System.out.println("真的要刪除嗎?(0-/1-)");

                    if (sc3.nextInt()==1)

                           dd.delete(tt);

                    break;

              case 4:

                    Scanner sc4=new Scanner(System.in);

                    System.out.println("請輸入查詢條件,要注意條件的格式:");

                    tt=sc4.nextLine();   //在這裡要使用,讀一行的方法?

                    if(!tt.equals("")){

                        tt=" where "+tt;

                    }

                    sql="select * from students_b "+tt;

                    dd.show(sql);

                    break;

              case 5:

                   Scanner sc5=new Scanner(System.in);

                    System.out.println("請輸入要修改學生的條件,要注意條件的格式:");

                    tt=sc5.nextLine();   //在這裡要使用,讀一行的方法?

                    if(!tt.equals("")){

                        tt=" where "+tt;

                    }

                    dd.update(tt);

                    break;

              case 6:

                    dd.writer("new_st.txt");                

                    break;

              case 7:

                    sql="select * from students_b";

                    dd.show(sql);

                    break;

              case 8:

                    t=false;

                    break;           

              }        

        }

        dd.close();

        System.out.println("執行結束!");

    }

}

又是本年沒學java了。都有點看不懂了、(*^__^*) 。

相關文章