实验八 数据持久化

(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<num;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<num;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!");

       }

       }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 本文内容 1.什么是JDBC以及为什么要使用JDBC 2.JDBC核心API的讲解 3.使用JDBC核心API进行...
    Vincilovfang阅读 1,191评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • 滴答,滴答 钟,依然一圈一圈的走着 它永远是那么不紧不慢,就这样走着 记忆不可轻触 未来不能计划 不若,抓紧现在 ...
    苑尧阅读 173评论 0 7
  • 不甘做咸鱼 却被自己腌制成了咸鱼 还想翻身吗? 想 那不可能 哭 来一条会飞的咸鱼 滚蛋+大白眼
    棒棒唐阅读 250评论 0 0
  • Intellij IDEA and eclipse mapping manual made by shuai.pa...
    潘帅次元阅读 318评论 0 0