Java实现学生信息管理系统(使用数据库)

Java基础—学生信息管理系统(使用数据库)

  • 前一段时间写了学生信息管理系统(使用ArrayList),今天再来更新一下使用数据库的管理系统,总体上来说要比用ArrayList简便一些,同时输入的数据也能存储起来。

  • 这次程序是在上一篇的基础上进行修改的,所以结构上来看十分相似。

  • 在写程序之前,要先在MySQL上建立Student Info表。

create table Student (
	ID varchar(50) primary key not null,
	Name varchar(30) not null,
	Gender char(5) not null,
	Age int not null,
	Score int not null
);
  1. 就和上一篇博客一样,先将学生信息进行封装,这一步并不必要,只是修改起来方便些。
public class Student {
	
	private String stuName;
	
	private String stuNo;
	
	private String gender;
	
	private int age;
	
	private int score;

	public String getStuName() {
		return stuName;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public String getStuNo() {
		return stuNo;
	}

	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}
	
}

2.新建操作类,因为这次要使用MySql数据库,所以要使用JDBC将Java与数据库链接起来。

1> 先将mysql-connector-java.jar 加入到lib库中,之后右键Add path。

2> 然后在程序中要先开启JDBC,加载驱动器,如果驱动器不存在,会抛出异常,所以需要加上try-catch
//开启JDBC
	public void getDBconn(){
		String url = "jdbc:mysql://localhost:3306/homework";
		String user = "root";
		String password = "root";
		
		try {
			/**1.加载JDBC驱动器*/
			Class.forName("com.mysql.jdbc.Driver");
			
			/**2.获取连接*/
			conn = DriverManager.getConnection(url, user, password);
			stat = conn.createStatement();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
3>同样,在程序结束后一定要关闭连接,防止出问题。如果关闭异常,也要抛出异常。
//关闭JDBC
	public void closeRs(){
		try{
			if(rs != null){
				rs.close();
			}
			if(stat != null){
				stat.close();
			}
			if(conn != null){
				conn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

3.接下来就是程序的主体:增、删、改、查四个操作部分,这部分因为笔者偷懒,所以和上一篇使用ArrayList的结构很像,但是内容有较大的修改,每一个try-catch后都加上了finally,无论操作是否成功都要关闭连接

//增加学生信息
	public void addStu(Student stu){
		
		String sql = "insert into studentinfo values ( '" + stu.getStuNo()+ "', '" + stu.getStuName() + "', '"
				+ stu.getGender() + "', " + stu.getAge() + " , " + stu.getScore() + ")";
		
		try {
			int affectedRows = stat.executeUpdate(sql);
			if(affectedRows > 0){
				System.out.println("该学生信息已添加!");
			}else{
				System.out.println("操作有误,请重新添加!");
				append();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			closeRs();
		}
		
	}
	
	//输入学生信息
	public void append(){
		
		Student stu = new Student();
		
		/**
		 * 通过封装方法,将学生信息赋给stus
		 */
		stu.setStuName(name());
		
		stu.setStuNo(stuNum());
		
		stu.setGender(gender());
		
		stu.setAge(age());
		
		stu.setScore(score());
		
		//将stu中的信息增添到stus中
		addStu(stu);
		
	}
	
	
	//得到学生姓名
	public String name(){
		
		String name;
		
		System.out.println("请输入学生的姓名:");
		name = scanner.next();
		
		return name;
	}
	
	
	//得到学生学号
	public String stuNum(){
		
		String stuNum;
		
		System.out.println("请输入学生的学号:");
		stuNum = scanner.next();
		
		
		//如果学号不为11位,则重新输入,直到学号正确
		if(stuNum.length() != 11){
			System.out.println("您输入的学号有误!请重新输入!");
			stuNum();	
		}
				
		return stuNum;
	}
	
	//得到学生的性别
	public String gender(){
		
		String stuGender;
		
		System.out.println("请输入学生的性别:");
		stuGender = scanner.next();
		
		if(!stuGender.equals("男") && !stuGender.equals("女") ){
			System.out.println("您输入的学生性别有误!请重新输入!");
			gender();
		}
		
		return stuGender;
	}
	
	//得到学生的年龄
	public int age(){
		
		int stuAge;
		
		System.out.println("请输入学生的年龄:");
		stuAge = scanner.nextInt();
		
		if(stuAge < 0 || stuAge >=  80){
			System.out.println("您输入的年龄有误!请重新输入!");
			age();
		}
		
		return stuAge;
	}
	
	//得到学生的成绩
	public int score(){
		int stuScore;
		
		System.out.println("请输入学生的成绩:");
		stuScore = scanner.nextInt();
		
		if(stuScore < 0 || stuScore > 100){
			System.out.println("您输入的成绩有误!请重新输入!");
			score();
		}
		
		return stuScore;
	}
	
	
	/**
	 * 
	 * 删除学生信息
	 * 
	 * @param stuNo
	 */
	public void delStu(){
		
		System.out.println("请输入您想删除的学号:");
		String stuNo = scanner.next();
		

		String sql = "delete from studentinfo where ID = '" + stuNo + "' ";
		
		try {
			int affectedRows = stat.executeUpdate(sql);
			if(affectedRows > 0){
				System.out.println("该学生信息已删除!");
			}else{
				System.out.println("操作有误,请重新输入!");
				delStu();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			closeRs();
		}
	}
	
	
	/**
	 * 修改学生信息:
	 * 1.姓名
	 * 2.学号
	 * 3.性别
	 * 4.年龄
	 * 5.成绩
	 * @param stu
	 */
	public void updateStu(String stuNo){
		
		String sql = null;
	
		information();
		int choose = scanner.nextInt();
		
		switch(choose){
			case 1:
				System.out.println("请输入要更新的名字:");
				String Name = scanner.next();
				sql = "update studentinfo set Name = '" + Name +"' where ID = '" + stuNo + "'";
				break;
			case 2:
				System.out.println("请输入要更新的性别:");
				String Gender = scanner.next();
				sql = "update studentinfo set Gender = '" + Gender +"' where ID = '" + stuNo + "'";
				break;
			case 3:
				System.out.println("请输入要更新的年龄:");
				int Age = scanner.nextInt();
				sql = "update studentinfo set Age = " + Age +" where ID = '" + stuNo + "'";
				break;
			case 4:
				System.out.println("请输入要更新的成绩:");
				int Score = scanner.nextInt();
				sql = "update studentinfo set Score = " + Score +" where ID = '" + stuNo + "'";
				break;
			case 0:
				System.exit(0);
				break;
		}	
		
		try {
			int affectedRows = stat.executeUpdate(sql);
			if(affectedRows > 0){
				System.out.println("该学生信息已修改!");
			}else{
				System.out.println("操作有误!");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			closeRs();
		}
	}
	
	public void information(){
		System.out.println("请选择您要修改的信息:");
		System.out.println("1.姓名");
		System.out.println("2.性别");
		System.out.println("3.年龄");
		System.out.println("4.成绩");
		System.out.println("0.退出");
		System.out.println("请输入序号:");
	}
	/**
	 * 根据学号查询学生信息
	 * 如果存在,输出学生信息
	 * @param stuNo
	 */
	public void queryStuByStuNo(String stuNo){
		
		String sql = "select * from studentinfo where ID = '" + stuNo + "'";
		
		try {
			if(stuNo.equals("0")){
				
				sql = "select * from studentinfo";
				rs = stat.executeQuery(sql);
				
				while(rs.next()){
					System.out.print("学号:" + rs.getString("ID") + "\t");
					System.out.print("姓名:" + rs.getString("Name") + "\t");
					System.out.print("性别:" + rs.getString("Gender") + "\t");
					System.out.print("年龄:" + rs.getInt("Age") + "\t");
					System.out.println("成绩:" + rs.getInt("Score") + "\t");
				}
			}else{
				if(rs.next()){
					rs = stat.executeQuery(sql);
					System.out.print("学号:" + rs.getString("ID") + "\t");
					System.out.print("姓名:" + rs.getString("Name") + "\t");
					System.out.print("性别:" + rs.getString("Gender") + "\t");
					System.out.print("年龄:" + rs.getInt("Age") + "\t");
					System.out.println("成绩:" + rs.getInt("Score") + "\t");
				}
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			closeRs();
		}
		
	
	}

4.定义操作菜单,允许用户输入选择要操作的功能。

import java.util.Scanner;



public class SystemService {

	Scanner scanner = new Scanner(System.in);
	StudentSystem ss = new StudentSystem();
	
	public void serviceChoose(){
		
		System.out.println("-----欢迎使用学生信息管理系统-----");
		
		while(true){
			
			ss.getDBconn();
			
			System.out.println("1.添加学生信息");
			System.out.println("2.删除学生信息");
			System.out.println("3.修改学生信息");
			System.out.println("4.查询学生信息");
			System.out.println("0.退出系统");
			
			System.out.println("请输入序号:");
			switch(scanner.nextInt()){
				
				case 1:
					ss.append();
					System.out.println();
					break;
				case 2:
					ss.delStu();
					System.out.println();
					break;
				case 3:
					System.out.println("请输入要修改的学生的学号:");
					ss.updateStu(scanner.next());
					System.out.println();
					break;
				case 4:
					System.out.println("请输入要查询的学生的学号(若为0,则查询所有学生信息):");
					ss.queryStuByStuNo(scanner.next());
					System.out.println();
					break;
				case 0:
					System.exit(0);//退出系统
					ss.closeRs();
					break;
			}
		}
	}
}

5.定义主方法,使用该系统

public class Main {

	public static void main(String[] args) {
		
		SystemService ss = new SystemService();
		
		ss.serviceChoose();
	}
	
}

  • 37
    点赞
  • 325
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值