cow427kk 发表于 2021-6-23 09:18:02

基于java和sql学生管理系统如何连接两个输出

本帖最后由 cow427kk 于 2021-6-23 11:17 编辑

一、创建数据库

利用MySQLWorkbench创建数据库School,在库中创建学生信息表(student),教师信息表(teacher)、班级信息表(class)
学生表记录: 学号(主键)、姓名、性别、出生日期、所属班级ID号(外键)、特长简介
教师表记录:教师ID(主键)、姓名、性别、出生日期、简介
班级表记录:班级ID(主键)、班级名、班主任ID(外键)

二、输入数据
利用MySQLWorkbench在数据库School的各个表中输入一定量的数据。
三、编写Java程序
编写Java程序,具体功能要求如下:
(1)程序运行后首先显示如下信息:

请输入您的操作:
1:查看学生信息
2:查看教师信息
3:查看班级信息”


(2)当用户输入1或2或3时,将逐行列出相应的信息,例如用户输入2后,输出信息效果如下所示:

教师信息:
   ID,姓名,性别,出生日期,简介
1,张三,男,1980.1.1,善于讲解Java
2,李四,女,1981.5.1,从教多年,经验丰富
……





Java数据库作业(二)
在作业一的基础上,增加新功能,具体要求如下所述:

(1)程序运行后首先显示如下信息(即增加了4号选项):

请输入您的操作:
1:查看学生信息
2:查看教师信息
3:查看班级信息”
4:查看某班级的所有学生


(2)当用户输入4后,继续输出

请输入班级ID


(3)当用户输入相应班级ID后,继续输出

**班级的学生信息:
学号,姓名,性别,出生日期、简介
201,王二,男,2001.2.3,体育好
202,王二,男,2001.2.3,数学好,人好
……

注意这个作业要求输出的是某一班级的学生信息,而不是全部学生信息!!!



Java数据库作业(三)
在作业一的基础上,增加新功能,具体要求如下所述:

(1)程序运行后首先显示如下信息(即增加了5号选项):

请输入您的操作:
1:查看学生信息
2:查看教师信息
3:查看班级信息”
4:查看某班级的所有学生
5:删除某个学生信息


(2)当用户输入5后,继续输出

请输入删除学生的学号


(3)当用户输入学号后,在学生信息表中删除该名学生,并给出是否删除成功的提示信息。



Java数据库作业(四)一、增加数据表
利用MySQLWorkbench,在School库中添加课程信息表(course)、教师授课表(teacher_course)、学生选课表(student_course)

课程表记录:课程ID(主键)、课程名、课程性质、简介
教师授课表:ID(主键)、教师ID(外键)、课程ID(外键)
学生选课表:ID(主键)、学号(外键)、课程ID(外键)

二、输入数据
利用MySQL Workbench在以上三个表中输入数据。

三、编写Java程序
在前面作业的基础上,编写Java程序,增加以下具体功能:
(1)程序运行后首先显示如下信息(即增加了6号功能):

请输入您的操作:
1:查看学生信息
2:查看教师信息
3:查看班级信息”
4:查看某班级的所有学生
5:删除某个学生信息
6:查看某门课程信息


(2)当用户输入6后,系统输出如下内容:

请输入课程ID


(3)当用户输入课程ID后(例如2后),系统输出类似如下内容:

课程信息:
ID:2,课名:java,课程性质:专业课,简介:比较难学
授课教师:
    教师ID:5, 顾鹏
    教师ID:7,王顺
选课学生
    学号:07,姓名:王特
    学号:11,姓名:赵特
    学号:15,姓名:李特
    学号:17,姓名:吴特
    学号:18,姓名:正特


连帅帅 发表于 2021-6-23 10:22:54

本帖最后由 连帅帅 于 2021-6-23 10:38 编辑

整体实现步骤如下:
1.用户输入4后,跳转到对应接口(我暂且称为接口1),在接口1中输出:请输入班级ID,并获取用户输入的班级ID;
2.然后跳转到3中,即输出班级的学生信息(我暂且称为接口2),在接口2中去数据库查询该班级的学生人数,注意sql记得用个where进行班级区分即可,把查出的结果封装成统一格式(集合里面装学生信息)逐层返回即可。

cow427kk 发表于 2021-6-23 10:34:01

连帅帅 发表于 2021-6-23 10:22
用户输入4后,跳转到对应接口(我暂且称为接口1),在接口1中输出:请输入班级ID,并获取用户输入的班级ID ...

你好我想请问一下这个是怎么跳转到3来出现一个接口2的呢?

连帅帅 发表于 2021-6-23 10:36:03

本帖最后由 连帅帅 于 2021-6-23 10:40 编辑

连帅帅 发表于 2021-6-23 10:22
用户输入4后,跳转到对应接口(我暂且称为接口1),在接口1中输出:请输入班级ID,并获取用户输入的班级ID ...

代码补充如下:只写了整体大概结构,其中List集合里面为学生类
package com.lian.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
* @author :LSS
* @description: 学生管理类功能4:查看某班级的所有学生
* @date :2021/6/23 10:25
*/
public class Student {
    private static Scanner scanner = new Scanner(System.in);

    public static List<Object> SearchClass2(int i){
      //注意,这里写查询数据库的操作,查询出该班级的所有人数,然后封装在list集合中返回
      List<Object> list = new ArrayList<>();
      return list;
    }

    public static List<Object> SearchClass(int i){
      System.out.println("请输入班级ID");
      int i1 = scanner.nextInt();
      return SearchClass2(i1);
    }

    public static void main(String[] args) {
      System.out.println("请输入您的操作:");
      int i = scanner.nextInt();
      if(i == 4){
            List<Object> list = SearchClass(i);
            System.out.println("班级的学生信息:");
            //进行班级学生信息的遍历打印
            for (int j = 0; j < list.size(); j++) {
                System.out.println(list.get(i));
            }
      }
    }
}

连帅帅 发表于 2021-6-23 10:42:55

cow427kk 发表于 2021-6-23 10:34
你好我想请问一下这个是怎么跳转到3来出现一个接口2的呢?

函数呀{:10_278:}

cow427kk 发表于 2021-6-23 10:47:03

连帅帅 发表于 2021-6-23 10:36
代码补充如下:只写了整体大概结构,其中List集合里面为学生类

else if (n == 4){
              Connection conn = null;
            Statement stmt = null;
            try{
                // 注册 JDBC 驱动
                Class.forName(JDBC_DRIVER);
            
                // 打开链接
               
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
            
                // 执行查询
                System.out.println(" 请输入班级ID");
                stmt = conn.createStatement();
                String sql;
                sql = "SELECT ID FROM class";
                ResultSet rs = stmt.executeQuery(sql);
            
                // 展开结果集数据库
                while(rs.next()){
                  // 通过字段检索
                        int number= rs.getInt("number");
                  String name = rs.getString("name");
                  String sex = rs.getString("sex");
                  Date birth = rs.getDate("birth");
                  int ID = rs.getInt("ID");
                  String speciality = rs.getString("speciality");
                  

                  // 输出数据
                  System.out.print("学号: " + number);
                  System.out.print(", 姓名: " + name);
                  System.out.print(", 性别: " + sex);
                  System.out.print(", 出生日期: " + birth);
                  System.out.print(", 所属班级ID号: " + ID);
                  System.out.print(", 特长简介: " + speciality);
                  
      
                  System.out.print("\n");
                  
                }
                // 完成后关闭
                rs.close();
                stmt.close();
                conn.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();
                }
            }
      }

cow427kk 发表于 2021-6-23 10:49:07

连帅帅 发表于 2021-6-23 10:42
函数呀

我是照老师的格式在一个大框架里分成了四个小的,如果这样的话我也可以这样封装运行吗?有点不太懂{:10_250:}

连帅帅 发表于 2021-6-23 10:56:11

cow427kk 发表于 2021-6-23 10:47
else if (n == 4){
              Connection conn = null;
            Statement stmt = null;


你这样把所有代码都写在一起,应该功能没问题,可以正常输出吧?问题是啥?就是结构有点乱{:10_256:}

连帅帅 发表于 2021-6-23 11:01:32

连帅帅 发表于 2021-6-23 10:56
你这样把所有代码都写在一起,应该功能没问题,可以正常输出吧?问题是啥?就是结构有点乱

你这个SQL也有问题吧?都没有限定班级,这查出来的是所有的学生信息呀,SQL是不是应该改为:select * from class where 班级字段 = 班级ID,这样呀?

cow427kk 发表于 2021-6-23 11:02:31

连帅帅 发表于 2021-6-23 10:56
你这样把所有代码都写在一起,应该功能没问题,可以正常输出吧?问题是啥?就是结构有点乱

功能是没问题,可以正常运行,但是我跳转不到某某班级输出,第一次输出完之后它就结束了
它运行就是这样:

请输入您的操作:
1: 查看学生信息
2: 查看教师信息
3: 查看班级信息
4: 查看某班级的所有学生
5: 删除某个学生信息
6: 查看某门课程信息
4
请输入班级ID
Goodbye!

cow427kk 发表于 2021-6-23 11:07:03

连帅帅 发表于 2021-6-23 11:01
你这个SQL也有问题吧?都没有限定班级,这查出来的是所有的学生信息呀,SQL是不是应该改为:select * fro ...

我在sql里创建了class teacher student三个表,我的select是不是得from student 但是这个班级字段和班级ID是输入的什么呢?
被自己蠢哭{:10_266:}

cow427kk 发表于 2021-6-23 11:14:08

else if (n == 4){
             
              Connection conn = null;
            Statement stmt = null;
            try{
                // 注册 JDBC 驱动
                Class.forName(JDBC_DRIVER);
            
                // 打开链接
               
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
            
                // 执行查询
                System.out.println("请输入班级ID");
                stmt = conn.createStatement();
                String sql;
                sql = "SELECT * FROM student WHERE ID='1'";
                ResultSet rs = stmt.executeQuery(sql);
            
                // 展开结果集数据库
                while(rs.next()){
                  // 通过字段检索
                        int number= rs.getInt("number");
                  String name = rs.getString("name");
                  String sex = rs.getString("sex");
                  Date birth = rs.getDate("birth");
                  int ID = rs.getInt("ID");
                  String speciality = rs.getString("speciality");
                  

                  // 输出数据
                  System.out.print("学号: " + number);
                  System.out.print(", 姓名: " + name);
                  System.out.print(", 性别: " + sex);
                  System.out.print(", 出生日期: " + birth);
                  System.out.print(", 所属班级ID号: " + ID);
                  System.out.print(", 特长简介: " + speciality);
                  
      
                  System.out.print("\n");
                  
                }
                // 完成后关闭
                rs.close();
                stmt.close();
                conn.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();
                }
            }
      }

运行结果:
请输入您的操作:
1: 查看学生信息
2: 查看教师信息
3: 查看班级信息
4: 查看某班级的所有学生
5: 删除某个学生信息
6: 查看某门课程信息
4
请输入班级ID
学号: 201, 姓名: 王二, 性别: 男, 出生日期: 2001-02-03, 所属班级ID号: 1, 特长简介: 体育好
Goodbye!

连帅帅 发表于 2021-6-23 11:37:47

本帖最后由 连帅帅 于 2021-6-23 11:45 编辑

cow427kk 发表于 2021-6-23 11:14
else if (n == 4){
             
              Connection conn = null;


你这直接把where条件给干死了,{:10_258:}
这段代码我给你改了改:
// 执行查询
System.out.println("请输入班级ID");
int i1 = scanner.nextInt();
stmt = conn.createStatement();
String sql;
sql = "SELECT * FROM student WHERE ID="+i1;
ResultSet rs = stmt.executeQuery(sql);
System.out.println("班级的学生信息:");

cow427kk 发表于 2021-6-26 22:45:17

连帅帅 发表于 2021-6-23 11:37
你这直接把where条件给干死了,
这段代码我给你改了改:

超级感谢你帮我改代码,前两天忙于兼职,今天继续来看这个问题试了一下 你给的这个程序,但有部分出了错一直在冒红。这个是我改了还是冒红的
else if (n == 4){
              System.out.println("请输入班级ID");
              Scanner i1 = new Scanner(System.in);
                        int i1 = i1.nextInt();
             
              Connection conn = null;
            Statement stmt = null;
            try{
                // 注册 JDBC 驱动
                Class.forName(JDBC_DRIVER);
            
                // 打开链接
               
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
            
                // 执行查询
               
                stmt = conn.createStatement();
                String sql;
                sql = "SELECT * FROM student WHERE ID='+i1'";
                ResultSet rs = stmt.executeQuery(sql);
            
                // 展开结果集数据库
                while(rs.next()){
                  // 通过字段检索
                        int number= rs.getInt("number");
                  String name = rs.getString("name");
                  String sex = rs.getString("sex");
                  Date birth = rs.getDate("birth");
                  int ID = rs.getInt("ID");
                  String speciality = rs.getString("speciality");
                  

                  // 输出数据
                  System.out.print("学号: " + number);
                  System.out.print(", 姓名: " + name);
                  System.out.print(", 性别: " + sex);
                  System.out.print(", 出生日期: " + birth);
                  System.out.print(", 所属班级ID号: " + ID);
                  System.out.print(", 特长简介: " + speciality);
                  
      
                  System.out.print("\n");
                  
                }
                // 完成后关闭
                rs.close();
                stmt.close();
                conn.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();
                }
            }
      }

cow427kk 发表于 2021-6-26 22:46:14

连帅帅 发表于 2021-6-23 11:37
你这直接把where条件给干死了,
这段代码我给你改了改:

我最开始是在执行查询后面照着你那个试了一下 ,但是那个时候开始冒红 我又改了几个但还是有点问题

连帅帅 发表于 2021-6-28 09:15:20

cow427kk 发表于 2021-6-26 22:45
超级感谢你帮我改代码,前两天忙于兼职,今天继续来看这个问题试了一下 你给的这个程序,但有部分出了错 ...

指出以下错误:
1.第三行,第四行,变量i1重复使用;
2.第20行的SQL格式错误,应该为:sql = "SELECT * FROM student WHERE ID="+i1;

cow427kk 发表于 2021-7-1 10:37:35

连帅帅 发表于 2021-6-28 09:15
指出以下错误:
1.第三行,第四行,变量i1重复使用;
2.第20行的SQL格式错误,应该为:sql = "SELECT * ...

后来交作业的时候看了一下同学的,大概了解了一点,等期末结束后再重新巩固。谢谢你的帮助!{:10_303:}

连帅帅 发表于 2021-7-1 11:08:27

cow427kk 发表于 2021-7-1 10:37
后来交作业的时候看了一下同学的,大概了解了一点,等期末结束后再重新巩固。谢谢你的帮助!

加油,一定要多看多练,自己实操{:9_231:}

cow427kk 发表于 2021-7-1 14:19:34

连帅帅 发表于 2021-7-1 11:08
加油,一定要多看多练,自己实操

学的东西太多了,这几天又在学flask了{:10_266:}还不会读取csv到网页中
页: [1]
查看完整版本: 基于java和sql学生管理系统如何连接两个输出