实验八 数据持久化

(1.实现学生信息和课程信息的添加。

要求:

1. 创建数据库名字为scores。

2. 创建学生表(student),包括学号,姓名,性别,出生日期。学号作为自增主键,姓名不可为空。

3. 创建课程表(course),包括课程编号,课程名称,学分。课程编号作为自增主键,课程名称和学分均不可为空。   程序首先要求输入多少个学生信息,然后依次输入学生信息。

5. 编写程序实现课程信息的添加。程序询问需要输入多少门课程,然后依次输入课程信息。

提示:

1. 课程的学分可以为0。

2. 要规定出生日期的格式。

3. 数据要正确插入数据库中。

运行结果
数据库
数据库
工程截图


MySQLDemo.java

package shiyan8_1;

import java.sql.*;

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Locale;

import java.util.Scanner;

public class MySQLDemo {

    //JDBC 驱动名及数据库 URL

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 

    static final String DB_URL = "jdbc:mysql://localhost:3306/scores?useSSL=false&serverTimezone=UTC";


    //数据库的用户名与密码,需要根据自己的设置

    static final String USER = "root";

    static final String PASS = "123456";


    public static void main(String[] args) {

     Scannerinput = new Scanner(System.in);

        Connectionconn = null;

        Statementstmt = null;

        try{

            // 注册 JDBC 驱动

            Class.forName("com.mysql.jdbc.Driver");

            // 打开链接

            conn=DriverManager.getConnection(DB_URL,USER,PASS);

            System.out.println("连接数据库 成功...");


            stmt = conn.createStatement();//获取一个可以执行sql语句的对象。


            Stringsql;

            System.out.println("输入多少个学生信息?");

            int num = input.nextInt();

            System.out.println("依次输入:学号-姓名-性别-出生日期:(如:2016110 张三 男 1999-12-12");

           for(int i=0;i

               int xuehao = input.nextInt();

               Stringxingming = input.next();

               Stringxingbie = input.next();

               Stringriqi = input.next();

               Timestampt=string2Time(riqi);

               //System.out.println(xuehao+""+xingming+" "+xingbie+" "+riqi);

               sql="insert

into student values('"+xuehao +"','"+xingming +"','"+xingbie+"','"+t+"')";//'"+xuehao+"'双引号里面套变量

               //System.out.println(sql);

              stmt.executeUpdate(sql); 

              System.out.println("第"+(i+1)+"条插入成功!");

            }     

            sql = "SELECT * from student";

            ResultSetrs = stmt.executeQuery(sql);

            // 展开结果集数据库

            while(rs.next()){

                // 通过字段检索

                int id  =rs.getInt("学号");

                Stringxm = rs.getString("姓名");

                Stringxb = rs.getString("性别");

                // 输出数据

                System.out.print("学号: " + id);

                System.out.print("  姓名: " + xm);

                System.out.print("  性别: " + xb);

                System.out.println("");

            }

            System.out.println("输入多少个课程信息?");

            num = input.nextInt();

            System.out.println("依次输入:课程编号-课程名称-课程学分:(如:001 Java5");

            for(int i=0;i

               int id = input.nextInt();

               Stringmingcheng = input.next();

               int xuefen = input.nextInt();

               sql="insert into course values('"+id +"','"+mingcheng +"','"+xuefen+"')";

              stmt.executeUpdate(sql); 

              System.out.println("第"+(i+1)+"条插入成功!");

            }

            sql = "SELECT * from course";

            rs = stmt.executeQuery(sql);

            while(rs.next()){

              // 通过字段检索

              int id  =rs.getInt("课程编号");

              Stringmc = rs.getString("课程名称");

              int xf = rs.getInt("学分");

              // 输出数据

              System.out.print("课程编号: " + id);

              System.out.print("  课程名称: " + mc);

             System.out.print("  课程学分: " + xf);

              System.out.println("");

          }

            // 完成后关闭

            rs.close();

            stmt.close();

            conn.close();

            input.close();

        }catch(SQLExceptionse){

           // 处理 JDBC 错误

            se.printStackTrace();

        }catch(Exceptione){

            // 处理 Class.forName 错误

            e.printStackTrace();

        }finally{

            // 关闭资源

            try{

                if(stmt!=null) stmt.close();

            }catch(SQLExceptionse2){

            }// 什么都不做

            try{

                if(conn!=null) conn.close();

            }catch(SQLExceptionse){

                se.printStackTrace();

            }

        }

        System.out.println("Goodbye!");

    }

    public static Timestamp string2Time(String dateString) throws ParseException { //字符串转换成固定格式

      DateFormatdateFormat;

      dateFormat = newSimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); //固定格式

      dateFormat.setLenient(false);

      java.util.DatetimeDate = dateFormat.parse(dateString);//util类型

      TimestampdateTime = new Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型

      return dateTime;

  }

}

(2.实现成绩登录功能。

要求:

1. 输入学生学号,如果学生存在,则开始登录学生成绩。否则重新输入学生学号。

2. 开始录入成绩时,列出所有可选课程,并让用户选择录入哪门课程。

3. 用户选择课程后,如果成绩已经存在,则提示用户已经存在的成绩,并提示是否输入新成绩(y/n)。如果用户选择n则退出。

4. 如果用户选择y,则重新录入成绩,并更新原来的成绩。

4. 如果用户选择的课程成绩不存在,则提示用户录入成绩。成绩必须在0~100分之间。

提示:

1. 数据库需要第三个表来管理学生、课程和成绩的关系。

2. 新录入的成绩和原来的成绩必须正确插入数据库。


数据库
结果1
结果2


SignOn.java

package shiyan8_2;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Scanner;


public class SignOn {

        // JDBC 驱动名及数据库 URL

  static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 

  static final String DB_URL = "jdbc:mysql://localhost:3306/scores?useSSL=false&serverTimezone=UTC";


  //数据库的用户名与密码,需要根据自己的设置

  static final String USER = "root";

  static final String PASS = "123456";

       public static void main(String[] args) {

              Scannerinput = new Scanner(System.in);

    Connectionconn = null;

    Statementstmt = null;

    try{

      //注册 JDBC 驱动

      Class.forName("com.mysql.jdbc.Driver");

      //打开链接

      conn= DriverManager.getConnection(DB_URL,USER,PASS);

      System.out.println("连接数据库成功...");

      stmt = conn.createStatement();//获取一个可以执行sql语句的对象。

      Stringsql;

      int num=0;

      System.out.println("输入登陆的学生学号。");

           while(true){

                  num = input.nextInt();

                  sql = "select

* from student where 学号 = '"+num+"'";

          ResultSetre = stmt.executeQuery(sql);

                  if(re.next()){

                         break;

                  }else{

                         System.out.println("没有该学生,请重新输入学生学号");

                  }

           }

           sql = "select

id,课程名称 from chengji where 学号 = '"+num+"'";

           ResultSetre = stmt.executeQuery(sql);

           while(re.next()){

                  System.out.println("ID:="+re.getInt("id")+" "+re.getString("课程名称"));

           }

           System.out.println("选择录入id为?的课程成绩~");

           num=input.nextInt();

           sql = "select成绩 from chengji where id =

'"+num+"'";

           re = stmt.executeQuery(sql);

           if(re.next()){

                  int c = re.getInt("成绩");//这里值为0和为空无法判断,要解决就用Integer

                  if(c==0){

                         System.out.println("该课程成绩不存在,请录入成绩:");

                         c = input.nextInt();

                         sql = "UPDATE

chengji SET 成绩= '"+c+"'

WHERE id='"+num+"'";

                         stmt.executeUpdate(sql);

                         System.out.println("录入成功!");

                  }else{

                         System.out.println("该课程成绩已经存在为:="+c+"是否更改成绩~y/n:");

                         char e = 'a';

            Stringstr1 = input.next();

            e =str1.charAt(0);

            if(e=='Y'||e=='y'){

               System.out.println("请输入更正的成绩:");

               c = input.nextInt();

               sql = "UPDATE

chengji SET 成绩= '"+c+"'

WHERE id='"+num+"'";

                        stmt.executeUpdate(sql);

                        System.out.println("更正成功!");

            }else{

               System.out.println("退出成功.");

            }

                  }

                  System.out.println(c);

           }else{

                  System.out.println("没有找到该课程,Id有误!!!");

           }

      stmt.close();

      conn.close();

      input.close();

  }catch(SQLException se){

      //处理 JDBC 错误

      se.printStackTrace();

  }catch(Exception e){

      //处理 Class.forName 错误

      e.printStackTrace();

  }finally{

      //关闭资源

      try{

         if(stmt!=null) stmt.close();

      }catch(SQLExceptionse2){

      }// 什么都不做

      try{

          if(conn!=null) conn.close();

      }catch(SQLExceptionse){

          se.printStackTrace();

      }

  }

  System.out.println("Goodbye!");

}

}

(3.实现计算加权平均分功能。

要求:输入学生的学号,列出学生所修课程的成绩和加权平均分。或者输入all,列出所有学生的加权平均分。

提示:

1. 学分为0的课程不计入加权平均分。

2. 输入的学号可能不存在。

3. 若学生没有选修任何课程,则输出相应提示。


三个数据表
1


2


PrintStudent.java

package shiyan8_2;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Scanner;

public class PrintStudent {

              static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 

         static final String DB_URL = "jdbc:mysql://localhost:3306/scores?useSSL=false&serverTimezone=UTC";

         // 数据库的用户名与密码,需要根据自己的设置

         static final String USER = "root";

         static final String PASS = "123456";

              public static void main(String[] args) {

                     Scannerinput = new Scanner(System.in);

          Connectionconn = null;

          Statementstmt = null;

          Statementstmt1 = null;

          Statementstmt2 = null;

          try{

            // 注册 JDBC 驱动

            Class.forName("com.mysql.jdbc.Driver");

            // 打开链接

            conn= DriverManager.getConnection(DB_URL,USER,PASS);

            System.out.println("连接数据库成功...");


            stmt = conn.createStatement();//获取一个可以执行sql语句的对象。

            stmt1 = conn.createStatement();//一个Statement对象最好对应一个ResultSet对象,否则可能会出现上述错误

            stmt2 = conn.createStatement();

            Stringsql;

            Stringstr1="";

            System.out.println("输入打印的学生学号或者all。");

                 while(true){

                        str1 = input.next();

                        if(str1.equals("all")){

                               System.out.println("打印所有学生的成绩和平均分");

                               sql = "select

* from student";

                               ResultSetr1 = stmt.executeQuery(sql);

                               while(r1.next()){

                                      int xuehao = r1.getInt("学号");

                                      System.out.print(xuehao);

                                      Stringxingming = r1.getString("姓名");

                                      System.out.println("  "+xingming);            

                                      sql = "select课程名称,成绩 from chengji where 学号 = '"+xuehao+"'";

                                      ResultSetr3 = stmt2.executeQuery(sql);

                                      if(!r3.next()){

                                             System.out.println("该学生未选修任何课程~~");

                                             continue;

                                      }

                                      double sum=0;

                                      int ant = 0;

                                      while(r3.next()){

                                             Stringke = r3.getString("课程名称");

                                             int cj = r3.getInt("成绩");

                                             System.out.println("->"+r3.getString("课程名称")+" "+r3.getInt("成绩"));

                                             sql = "select学分 from course where 课程名称 = '"+ke+"'";

                                             ResultSetr2 = stmt1.executeQuery(sql);

                                             int xuefen = 0;

                                             while(r2.next()){//使用rs.getstring();前一定要加上rs.next();

                                                    xuefen = r2.getInt("学分");

                                             }

                                             r2.close();

                                             sum+=(xuefen*cj*1.0);

                                             if(xuefen!=0)

                                             ant+=xuefen;

                                      }

                                      if(sum==0){

                                             System.out.println("加权平均分为:0");

                                      }else{

                                             System.out.println("加权平均分为:"+(double)Math.round(sum/ant*100.0)/100);

                                      }

                               r3.close();

                      }

                               r1.close();

                               break;

                        }

                        sql = "select

* from student where 学号 = '"+str1+"'";

                ResultSetre = stmt.executeQuery(sql);

                        if(re.next()){

                               int xuehao = re.getInt("学号");

                                System.out.print(xuehao);

                                Stringxingming = re.getString("姓名");

                                System.out.println("  "+xingming);            

                                sql = "select课程名称,成绩 from chengji where 学号 = '"+xuehao+"'";

                                ResultSetr3 = stmt2.executeQuery(sql);

                                if(!r3.next()){

                                       System.out.println("该学生未选修任何课程~~");

                                       continue;

                                }

                                double sum=0;

                                int ant = 0;

                                while(r3.next()){

                                       Stringke = r3.getString("课程名称");

                                       int cj = r3.getInt("成绩");

                                       System.out.println("->"+r3.getString("课程名称")+" "+r3.getInt("成绩"));

                                       sql = "select学分 from course where 课程名称 = '"+ke+"'";

                                       ResultSetr2 = stmt1.executeQuery(sql);

                                       int xuefen = 0;

                                       while(r2.next()){//使用rs.getstring();前一定要加上rs.next();

                                              xuefen = r2.getInt("学分");

                                       }

                                       r2.close();

                                       sum+=(xuefen*cj*1.0);

                                       if(xuefen!=0)

                                       ant+=xuefen;

                                }

                                if(sum==0){

                                       System.out.println("加权平均分为:0");

                                }else{

                                       System.out.println("加权平均分为:"+(double)Math.round(sum/ant*100.0)/100);

                                }

                         r3.close();

                               break;

                        }else{

                               System.out.println("没有该学生,请重新输入学生学号");

                        }

                 }


            stmt.close();

            conn.close();

            input.close();

         }catch(SQLException se){

            // 处理 JDBC 错误

            se.printStackTrace();

         }catch(Exception e){

            // 处理 Class.forName 错误

            e.printStackTrace();

         }finally{

            // 关闭资源

            try{

                if(stmt!=null) stmt.close();

            }catch(SQLException se2){

            }// 什么都不做

            try{

                if(conn!=null) conn.close();

            }catch(SQLException se){

                se.printStackTrace();

            }

         }

        System.out.println("Goodbye!");

       }

       }

你可能感兴趣的:(实验八 数据持久化)