大一课程设计:基于数据库的学生信息系统

来源:互联网 发布:易语言mysql多线程 编辑:程序博客网 时间:2024/04/30 13:41

我大一上学期的课程设计。

水平比较低。对别人来说或许是些废话。

不过老师说这些对以后的学习会有用。不知道真的假的。

先稀里糊涂的写下来再说吧。。

 

 

题目要求:利用数据库实现学生信息管理系统,完成学生的各种管理。

      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了。都有点看不懂了、(*^__^*) 。