鱼C论坛

 找回密码
 立即注册
查看: 5390|回复: 18

[已解决]基于java和sql学生管理系统如何连接两个输出

[复制链接]
发表于 2021-6-23 09:18:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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后),系统输出类似如下内容:
  课程信息:
  ID2,课名:java,课程性质:专业课,简介:比较难学
  授课教师:
      教师ID5, 顾鹏
      教师ID7,王顺
  选课学生
      学号:07,姓名:王特
      学号:11,姓名:赵特
      学号:15,姓名:李特
      学号:17,姓名:吴特
      学号:18,姓名:正特
  

最佳答案
2021-6-23 10:36:03
本帖最后由 连帅帅 于 2021-6-23 10:40 编辑
连帅帅 发表于 2021-6-23 10:22
用户输入4后,跳转到对应接口(我暂且称为接口1),在接口1中输出:请输入班级ID,并获取用户输入的班级ID ...


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

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Scanner;

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

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

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

  22.     public static void main(String[] args) {
  23.         System.out.println("请输入您的操作:");
  24.         int i = scanner.nextInt();
  25.         if(i == 4){
  26.             List<Object> list = SearchClass(i);
  27.             System.out.println("班级的学生信息:");
  28.             //进行班级学生信息的遍历打印
  29.             for (int j = 0; j < list.size(); j++) {
  30.                 System.out.println(list.get(i));
  31.             }
  32.         }
  33.     }
  34. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-23 10:22:54 | 显示全部楼层
本帖最后由 连帅帅 于 2021-6-23 10:38 编辑

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

使用道具 举报

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

你好我想请问一下这个是怎么跳转到3来出现一个接口2的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-23 10:36:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 连帅帅 于 2021-6-23 10:40 编辑
连帅帅 发表于 2021-6-23 10:22
用户输入4后,跳转到对应接口(我暂且称为接口1),在接口1中输出:请输入班级ID,并获取用户输入的班级ID ...


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

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Scanner;

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

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

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

  22.     public static void main(String[] args) {
  23.         System.out.println("请输入您的操作:");
  24.         int i = scanner.nextInt();
  25.         if(i == 4){
  26.             List<Object> list = SearchClass(i);
  27.             System.out.println("班级的学生信息:");
  28.             //进行班级学生信息的遍历打印
  29.             for (int j = 0; j < list.size(); j++) {
  30.                 System.out.println(list.get(i));
  31.             }
  32.         }
  33.     }
  34. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

函数呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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();
                }
            }
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-23 10:49:07 | 显示全部楼层

我是照老师的格式在一个大框架里分成了四个小的,如果这样的话我也可以这样封装运行吗?有点不太懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-23 10:56:11 | 显示全部楼层
cow427kk 发表于 2021-6-23 10:47
else if (n == 4){
                Connection conn = null;
            Statement stmt = null;

你这样把所有代码都写在一起,应该功能没问题,可以正常输出吧?问题是啥?就是结构有点乱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你这个SQL也有问题吧?都没有限定班级,这查出来的是所有的学生信息呀,SQL是不是应该改为:select * from class where 班级字段 = 班级ID,这样呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

请输入您的操作:
1: 查看学生信息
2: 查看教师信息
3: 查看班级信息
4: 查看某班级的所有学生
5: 删除某个学生信息
6: 查看某门课程信息
4
请输入班级ID
Goodbye!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我在sql里创建了class teacher student三个表,我的select是不是得from student 但是这个班级字段和班级ID是输入的什么呢?
被自己蠢哭
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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条件给干死了,
这段代码我给你改了改:
  1. // 执行查询
  2. System.out.println("请输入班级ID");
  3. int i1 = scanner.nextInt();
  4. stmt = conn.createStatement();
  5. String sql;
  6. sql = "SELECT * FROM student WHERE ID="+i1;
  7. ResultSet rs = stmt.executeQuery(sql);
  8. System.out.println("班级的学生信息:");
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-26 22:45:17 | 显示全部楼层
连帅帅 发表于 2021-6-23 11:37
你这直接把where条件给干死了,
这段代码我给你改了改:

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

  33.                     // 输出数据
  34.                     System.out.print("学号: " + number);
  35.                     System.out.print(", 姓名: " + name);
  36.                     System.out.print(", 性别: " + sex);
  37.                     System.out.print(", 出生日期: " + birth);
  38.                     System.out.print(", 所属班级ID号: " + ID);
  39.                     System.out.print(", 特长简介: " + speciality);
  40.                     
  41.         
  42.                     System.out.print("\n");
  43.                     
  44.                 }
  45.                 // 完成后关闭
  46.                 rs.close();
  47.                 stmt.close();
  48.                 conn.close();
  49.             }catch(SQLException se){
  50.                 // 处理 JDBC 错误
  51.                 se.printStackTrace();
  52.             }catch(Exception e){
  53.                 // 处理 Class.forName 错误
  54.                 e.printStackTrace();
  55.             }finally{
  56.                 // 关闭资源
  57.                 try{
  58.                     if(stmt!=null) stmt.close();
  59.                 }catch(SQLException se2){
  60.                 }// 什么都不做
  61.                 try{
  62.                     if(conn!=null) conn.close();
  63.                 }catch(SQLException se){
  64.                     se.printStackTrace();
  65.                 }
  66.             }
  67.         }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-26 22:46:14 | 显示全部楼层
连帅帅 发表于 2021-6-23 11:37
你这直接把where条件给干死了,
这段代码我给你改了改:

我最开始是在执行查询后面照着你那个试了一下 ,但是那个时候开始冒红 我又改了几个但还是有点问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

指出以下错误:
1.第三行,第四行,变量i1重复使用;
2.第20行的SQL格式错误,应该为:sql = "SELECT * FROM student WHERE ID="+i1;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-1 10:37:35 | 显示全部楼层
连帅帅 发表于 2021-6-28 09:15
指出以下错误:
1.第三行,第四行,变量i1重复使用;
2.第20行的SQL格式错误,应该为:sql = "SELECT * ...

后来交作业的时候看了一下同学的,大概了解了一点,等期末结束后再重新巩固。谢谢你的帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

加油,一定要多看多练,自己实操
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-1 14:19:34 | 显示全部楼层
连帅帅 发表于 2021-7-1 11:08
加油,一定要多看多练,自己实操

学的东西太多了,这几天又在学flask了还不会读取csv到网页中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 11:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表