(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. 新录入的成绩和原来的成绩必须正确插入数据库。 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. 若学生没有选修任何课程,则输出相应提示。 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!"); } }
SignOn.java
PrintStudent.java