学生信息管理-数据库版

前置条件

创建student表并添加示例数据
在这里插入图片描述



功能要求

在这里插入图片描述


代码实现

import java.sql.*;
import java.util.Scanner;

public class Main {
    // 加载驱动
    public final static String driver="com.mysql.cj.jdbc.Driver";   // 驱动类Driver在jar包中位置

    public final static String url="jdbc:mysql://localhost:3306/javasql";
    /*
        定义了一个公共的、最终的(即不能被重新赋值)、且是静态的字符串变量,名为'url'。
        它的值是"jdbc:mysql://localhost:3306/javasql",
        这通常是一个连接到MySQL数据库的JDBC(Java Database Connectivity)URL。
        这个URL指定了如何连接到位于本地主机(localhost)的MySQL数据库服务器(端口号为3306),
        以及要连接到的数据库名称为'javasql'。
    */
    public final static String user="root"; // 用户名
    public final static String password="654321"; 

    static Connection conn;
    static Scanner in;
    private static String[] regexS; // 正则表达式

    // 静态代码块
    static {
        try {
            // 设置连接对象
            Class.forName(driver);
            in=new Scanner(System.in);
            regexS=new String[]{
                    "^(?:[\\u4e00-\u9fa5·]{2,16})$",
                    "[1-9]\\d{10}",
                    "[男,女]"
            };
            /*
            * 0:验证姓名
            * 1:验证电话
            * 2:验证性别
            * */
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("加载失败");
        }
    }

    // 获取连接对象
    public static Connection getConn(){
        try{
            // 返回连接对象
            return DriverManager.getConnection(url,user,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /*
    *   校验函数
    *   形参:
    *       target:只开辟一个空间的数组,用于将需要校验的信息传入,并将校验成功后的结果带回
    *       distinguish:区分当前正在校验的信息类型
    *   返回值:表示信息输入是否完成 true为完成 false为未完成
    * */
    public static boolean verify(String[] target,String distinguish){
        int index=0;        // 需要使用到的正则表达式
        String hint=null;
        // 根据形参来区分不同的提示信息
        switch (distinguish){
            case "姓名" : index=0; hint="输入的学生姓名有误,请符合规则输入!规则:至少为两个字且长度不超过16位的汉字"; break;
            case "电话" : index=1; hint="输入的学生电话号码有误,请符合规则输入!规则:不能以0开头且长度为11位纯数字手机号码"; break;
            case "性别" : index=2; hint="输入的学生性别有误,请符合规则输入!规则:男/女 "; break;
        }

        // 判断当前数据是否符合相应得正则表达式
        while( !target[0].matches(regexS[index]) ){
            System.out.printf("\n%s\n",hint);
            System.out.print("\n是否继续输入?(yes/no):");
            if(!"yes".equals(in.next())) { System.out.println("\n已退出添加"); return false; }
            System.out.printf("\n请正确输入%s:",distinguish);
            target[0]=in.next();
        }
        return true;
    }
    // 添加数据
    public static void insert() throws SQLException {
        System.out.println("\n\n-------插入数据-----------");
        String sql="insert into student values(null,?,?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);

        System.out.print("请输入需要添加的学生个数(0退出):");
        int cnt=in.nextInt();
        while(cnt-- > 0){
            System.out.println("\n\n开始添加\n\n");
            String[] val=new String[1]; // 用于信息的传入与结果的带回

            // 姓名模块
            System.out.print("请输入学生姓名:");
            val[0]=in.next();
            if( !verify(val,"姓名") ){ break; }   // 验证学生姓名是否正确输入
            ps.setString(1,val[0]);

            // 电话模块
            System.out.print("请输入学生电话号码:");
            val[0]=in.next();
            if( !verify(val,"电话")){ break; }    // 验证学生电话是否正确输入
            ps.setString(2,val[0]);

            // 性别模块
            System.out.print("请输入学生性别:");
            val[0]=in.next();
            if( !verify(val,"性别") ) { break; }  // 验证学生电话是否正确输入
            ps.setString(3,val[0]);

            ps.executeLargeUpdate();    // 执行sql语句
            System.out.println("添加成功");
        }
        ps.close();
        return;
    }
    // 查询数据
    public static void inquire() throws SQLException {
        System.out.println("\n\n-------查询数据-----------");
        System.out.println("1、根据姓名查询 \t\t\t\t 2、根据性别查询");
        System.out.println("3、根据电话查询 \t\t\t\t 4、根据电话前缀查询");
        System.out.println("5、查询所有数据");
        System.out.println("其他输入:退出");
        System.out.print("\n请输入你的选择:");

        String sql=null;
        String choose=in.next();
        switch (choose){
            case "1" : {
                System.out.print("请输入需要查询的学生姓名:");
                sql = "select * from student where name = ?";   // sql语句
                break;
            } case "2" : {
                System.out.print("请输入需要查询的性别:");
                sql = "select * from student where sex = ?";   // sql语句
                break;
            } case "3" : {
                System.out.print("请输入需要查询的电话号码:");
                sql = "select * from student where tel = ?";   // sql语句
                break;
            } case "4" : {
                System.out.print("请输入需要查询的电话号码前缀(注意需要以%为结尾):");
                sql = "select * from student where tel  like ? ";   // sql语句
                break;
            } case "5" : {
                sql="select * from student";
                break;
            }
            default:
                System.out.println("退出查询!");
                return;
        }
        PreparedStatement ps=conn.prepareStatement(sql);    // 生成预编译sql语句的对象
        if(!"5".equals(choose)) ps.setString(1, in.next());

        byte flag=0;
        ResultSet res = ps.executeQuery();  // 返回查询后的结果
        while(res.next()){
            flag=0x01;
            System.out.print("学号:"+res.getInt(1)+"\t");
            System.out.print("姓名:"+res.getString(2)+"\t");
            System.out.print("电话:"+res.getString(3)+"\t");
            System.out.println("性别:"+res.getString(4));
        }
        if(0 == flag){
            System.out.println("查无此记录");
        }else {
            System.out.println("查询成功!");
        }
        res.close();
        ps.close();
        return;
    }
    // 删除数据
    public static void delete() throws SQLException{
        System.out.println("\n-------删除数据---------");
        System.out.println("1、根据id删除 \t\t\t\t 2、根据表中位置删除");
        System.out.println("3、根据姓名删除 \t\t\t\t 4、清空所有学生数据");
        System.out.println("6、退出操作");

        String sql=null;
        PreparedStatement ps=null;
        System.out.print("请输入你的选择:");
        String choose=in.next();
        switch (choose){
            case "1" : {
                System.out.print("请输入需要删除学生的id:");
                sql="delete from student where id = ? ";
                break;
            } case "2" : {
                // 连续执行两次语句
                System.out.print("请输入需要删除第表中第几条数据:");
                sql="set @tmp=(select id from student limit ?,1); ";
                ps = conn.prepareStatement(sql);
                ps.setInt(1,(in.nextInt()-1));
                ps.executeLargeUpdate();
                sql="delete from student where id=@tmp ";
                break;
            } case "3" : {
                System.out.print("请输入需要删除学生的姓名:");
                sql="delete from student where name = ? ";
                break;
            } case "4" : {
                sql="delete from student";
            }
            default:{
                System.out.println("退出成功");
                return;
            }
        }
        ps=conn.prepareStatement(sql);
        if(!"4".equals(choose) && !"2".equals(choose)) { ps.setString(1,in.next()); }
        ps.executeLargeUpdate();    //执行语句
        System.out.println("删除成功");
        ps.close();
        return;
    }
    // 修改数据
    public static void amend() throws SQLException{
        System.out.println("------修改数据--------");
        System.out.println("1、修改表中某一位学生的姓名 \t\t\t\t 2、修改表中某一位学生的电话");
        System.out.println("其他:退出");

        String sql=null;
        PreparedStatement ps=null;
        System.out.print("\n请输入你的选择:");
        String choose=in.next();

        if(!("1".equals(choose) || "2".equals(choose))) { System.out.println("退出成功!"); return; }

        sql="set @tmp=(select id from student limit ? , 1) ";
        System.out.print("请输入修改的第几条数据:");
        ps=conn.prepareStatement(sql);
        ps.setInt(1,(in.nextInt()-1));
        ps.executeLargeUpdate();

        switch (choose){
            case "1" : {
                System.out.print("请输入修改后的姓名:");
                sql="update student set name= ? where id=@tmp";
                break;
            } case "2" : {
                System.out.print("请输入修改后的电话:");
                sql="update student set tel= ? where id=@tmp";
                break;
            }
        }

        ps=conn.prepareStatement(sql);
        ps.setString(1,in.next());
        ps.executeLargeUpdate();
        ps.close();
        System.out.println("操作成功!");
        return;
    }

    public static void main(String[] args) throws SQLException {
        conn=getConn();
        boolean flag=true;
        while(flag){
            System.out.println("\n----------学生信息管理--------------\n");
            System.out.println("1、添加操作 \t\t\t\t 2、查询操作");
            System.out.println("3、删除操作 \t\t\t\t 4、修改操作");
            System.out.println("5、退出");
            System.out.print("\n请输入你的选择:");
            switch (in.next()){
                case "1" : insert(); break; // 添加
                case "2" : inquire();break; // 查询
                case "3" : delete();break;  // 删除
                case "4" : amend();break;   // 修改
                case "5" : flag=false; break;
                default: System.out.println("请重新输入!"); break;
            }
        }
        System.out.println("\n退出成功!");
        in.close();
        conn.close();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值