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