简单的学生管理系统详解(附源码)

学生管理系统主要功能是对学生信息的添加、查询、删除、修改
在这里插入图片描述

1、创建项目

2、创建一个具体操作信息的包【bean】并创建用来保存学生信息的java类【Student】

2.1创建用来保存学生学号、姓名、年龄、地址信息的变量

  这些变量不允许被其他访问,需要被定义成私有的。

		//学生学号
		private int stuid;
		//学生姓名
		private String stuname;
		//学生年龄
		private int stuage;
		//学生地址
		private String stuaddress;
2.2创建访问这些私有变量可被访问的公共方法

  由于上面定义保存的学生信息变量都是私有的,就需要为这些私有变量提供可被访问的公共方法。我们对这些变量的操作是设置和获取。setXXXX(参数)—设置变量值,getXXXX()—获取变量值【获取变量不需要参数】
  直接右键 —> Source【AIt+Shift+S】 —> Generate Getters and Setters… —> Select All【全选】—> Generate

		public int getStuid() {
			return stuid;
		}
		public void setStuid(int stuid) {
			this.stuid=stuid;
		}
		
		public String getStuname() {
			return stuname;
		}
		public void setStuname(String stuname) {
			this.stuname=stuname;
		}
		
		public int getStuage() {
			return stuage;
		}
		public void setStuage(int stuage) {
			this.stuage=stuage;
		}
		
		public String getStuaddress() {
			return stuaddress;
		}
		public void setStuaddress(String stuaddress) {
			this.stuaddress=stuaddress;
		}

3、创建service包并创建学生信息业务访问类【StudentService】

  该类主要是对学生信息的操作【什么时候去添加、查询、修改、删除】,利用Switch语句

3.1创建具体业务操作方法
public void service(int setvice_code) {
		switch(setvice_code) {
		case 1:System.out.println("添加学生信息");
			break;
		case 2:System.out.println("查询所有学生信息");
			break;
		case 3:System.out.println("根据学号查询学生信息");
			break;
		case 4:System.out.println("根据学号修改学生信息");
			break;
		case 5:System.out.println("根据学号删除学生信息");
			break;
		case 6:System.out.println("删除所有学生信息");
			break;
		case 0:System.out.println("退出系统");
			break;
		}
	}

  参数【int setvice_code】是键盘输入的具体操作编号
  通过键盘输入的值就会执行相应的操作

输入是业务处理过程中的辅助操作,就需要把输入操作分离出来在具体访问类直接调用

4、创建util包并创建学生信息处理辅助类【StudentHelper】类

4.1得到从键盘输入int型整数值

  为了方便调用,将方法设静态的
  利用Scanner类实现从控制台输入的值

public static int getIntValue(String tipinfo) {
		System.out.println(tipinfo);
		Scanner input=new Scanner(System.in);
		int code=input.nextInt();//保存得到一个int值的变量
		return code;
	}
方法里的参数是String类型,是为了得到int值给用户一个提示信息,声明当前要干什么
4.2给用户提供一个操作菜单方法

  用户不知道输入的值要执行什么样的操作,所以给用户提供一个操作菜单方法。

public static void getMenu() {
		System.out.println("---简单的学生管理系统---");
		System.out.println("1=添加学生信息,2=查询所有学生信息,3=根据学号查询学生信息,4=根据学号修改学生信息5=根据学号删除学生信息,6=删除所有学生信息,0=退出学生系统");
	}

5、创建运行类包【main】并创建主方法的java类【StudentMain】

5.1调用为用户提供的操作菜单方法
StudentHelper.getMenu();
5.2调用具体业务处理【service】方法

  (1)定义setvice_code的int型变量将getIntValue(“请输入对应的编号”)从键盘获取的值保存
  (2)调用service方法将setvice_code作为参数
  但此时代码只能运行一遍

5.3使这个程序持续跑

  加一个while循环就实现了这个程序持续跑

		while(true) {
			StudentHelper.getMenu();
			int setvice_code=StudentHelper.getIntValue("请输入对应的编号");
			StudentService studentService=new StudentService();
			studentService.service(setvice_code);					
		}
5.1实现退出方法
system.exit(int status);
system.exit(int status);是退出方法,将0作为参数

  因为当用户输入0时,退出程序。
  将此方法写入具体业务处理方法中。
如下:

		case 0:System.out.println("退出系统");
			System.exit(0);
			break;

  结构已经搭建完毕,接下来写相对应的操作。

6、完成具体操作动作 - 添加

6.1写添加学生信息方法
为了避免具体操作方法service方法代码过多,我们把具体操作动作分离出来,在service方法里对应的位置一调用即可。

  因为具体操作动作不允许其他方法,因此要设置为私有的

private void insertStudent(Student student) {
}

  我们需要一个学生对象作为参数,业务层要调用数据访问层。所以接下来要提供一个数据访问层。

6.2创建数据访问类

  创建dao包【data access Object】并创建StudentDao类

6.3添加学生信息数据访问方法

  添加就两种结果,成功或失败所以设置参数为boolean型

  要把学生信息添加到集合中

如下

	//保存信息的具体集合
	private static ArrayList studentList=new ArrayList();
	//添加学生信息的数据访问方法
	public boolean insert(Student student) {
		return studentList.add(student);
	}
6.4在StudentService调用insert方法

  insert方法表示添加成功或失败,利用if语句判断,if成功则输出成功;slse失败则输出失败

	//添加学生信息的具体业务处理方法
	private void insertStudent(Student student) {
		StudentDao studao=new StudentDao();
		boolean flag=studao.insert(student);
		if(flag) {
			System.out.println("学生信息添加成功");
		}else {
			System.out.println("学生信息添加失败");
		}
	}
6.5把添加写入具体处理方法相对应的编号下
	case 1:System.out.println("添加学生信息");
			insertStudent(Student student);
			break;
6.6需要一个学生信息
6.7在辅助类下得到一个学生信息
	//键盘输入一个学生信息
	public static Student getInputStudent() {
		Student student=null;//Student对象没有先给一个null
		//得到学生学号
		int stuid=getIntValue("--请输入学生学号--");
		//得到学生姓名此时没有这个方法,需要先创建一个,如下:
		String stuname=getStringValue("--请输入学生姓名--");
		//得到学生年龄
		int stuage=getIntValue("--请输入学生年龄--");
		//得到学生地址
		String stuaddress=getStringValue("--请输入学生地址--");
		//把这四个方法存储在学生对象里
		student=new Student();
		//调用学生set方法,将所需要的参数传入
		student.setStuid(stuid);
		student.setStuname(stuname);
		student.setStuage(stuage);
		student.setStuaddress(stuaddress);
		//返回学生对象
		return student;
	}

  学生姓名是String类型的,没有这个方法,此时把getIntValue整数值方法改为一个String【getStringValue】方法

	public static String getStringValue(String tipinfo) {
		String info=null;
		System.out.println(tipinfo);
		Scanner input=new Scanner(System.in);
		info=input.nextLine();
		info=info.trim();
		return info;
6.8在具体业务操作方法下调用
		case 1:System.out.println("添加学生信息");
			insertStudent(StudentHelper.getInputStudent());
			break;

  添加完成

7、查询所有学生信息具体业务方法

7.1在业务访问类添加查询所有方法
	//查询所有学生信息的具体业务处理方法
	private void selectAllStudent() {
		
	}
7.2调用数据访问层保存数据的集合
		StudentDao studao=new StudentDao();
		ArrayList studentList=studao.selectAll();
7.3遍历集合

  首先判断集合是否有元素,如果有,则遍历;没有则输出没有记录
  利用增强for循环遍历集合,因为数据应是学生对象,而现在有Object对象,要强制类型转换将Object转换成Student对象。

		if(studentList.size()>0) {
			System.out.println("--------------");
			for(Object obj:studentList) {
				Student stu=(Student)obj;
			System.out.println(" "+stu.getStuid()+" "+stu.getStuname()+" "+stu.getStuage()+" "+stu.getStuaddress());
				System.out.println("----------------");
			}
		}else {
			System.out.println("---没有记录---");
		}
7.4在数据访问层添加selectAll方法
	public ArrayList selectAll() {
		return studentList;
	}
7.5在case :2下调用selectAllStudent()方法
	selectAllStudent();

8、根据学号查询学生信息的具体业务处理方法

8.1在业务访问层添加根据学号查询学生信息方法
//根据学号查询学生信息的具体业务处理方法
	private void selectStudentByStuid(int stuid) {
		
	}
8.2调用数据访问层selectByStuid方法
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
8.3在数据访问层创建selectByStuid方法
//根据学号查询学生信息的数据方法
	public Student selectByStuid(int stuid) {
		Student student=null;
		for(Object obj:studentList) {
			Student stu=(Student)obj;
			if(stu.getStuid()==stuid) {
				student=stu;
				break;
			}
		}
		return student;
	}
需要一个学生id的参数
将student赋予null是为了对比学号
利用增强for循环遍历对比学号
将Objenc对象转为学生对象
如果学生id等于输入的id则成功
将stu交给student加上break然后return
8.4 完善selectStudentByStuid方法
//根据学号查询学生信息的具体业务处理方法
	private void selectStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			System.out.println(" "+student.getStuid()+" "+student.getStuname()+" "+student.getStuage()+" "+student.getStuaddress());
			System.out.println("----------------");
		}else {
			System.out.println("---没有记录---");
		}
	}
如果通过id获取到的对象不为空,则输出获取到的对象
8.5 在case :3中调用
selectStudentByStuid(StudentHelper.getIntValue("请输入要查询的学生学号"));

9、根据学号修改学生信息

9.1 在业务访问层添加根据学号修改学生信息方法
	//根据学号修改学生信息的具体业务处理方法
	private void updateStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			Student newStudent=StudentHelper.getInputStudent();
			boolean flag=studao.updateByStuid(student,newStudent);
			if(flag) {
			System.out.println("修改成功");
		}else {
			System.out.println("修改失败");
		}
	}else{
		System.out.println("----没有记录----");
	}
	}

  首先通过selectByStuid方法获取id,如果获取到的对象不为空则获取一个新对象
  在数据访问类写updateByStuid(student,newStudent);方法,这个方法用来替换学生对象
  如果替换成功,打印出修改成功。反之修改失败。

9.2 在数据访问类写updateByStuid(student,newStudent);方法
//根据学号修改学生信息数据访问数据方法
	public boolean updateByStuid(Student student,Student newStudent) {
		Object obj=studentList.set(studentList.indexOf(student), newStudent);
		if(obj!=null) {
			return true;
		}
		return false;
	}

  利用集合set方法用来替换,set方法第一个参数是指定位置的元素,第二个参数是指定的元素。如果替换成功即obj不为空,返回true,反之return false;

9.3 在case 4:中调用
updateStudentByStuid(StudentHelper.getIntValue("请输入要修改的学生学号"));

10、根据学号删除学生信息

10.1 在业务访问层添加根据学号删除学生信息方法
//根据学号删除学生信息的具体业务处理方法
	private void deleteStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			boolean flag=studao.deleteByStuid(student);
			if(flag) {
				System.out.println("删除成功");
			}else {
				System.out.println("删除失败");
			}
		}else {
			System.out.println("---没有记录---");
		}
	}

  首先通过id获取一个学生对象
  如果这个对象不为空,调用deleteByStuid方法删除这个对象
  有两种结果,删除成功或失败
  如果删除成功,返回true输出删除成功
  或者输出删除失败

10.2 在数据访问类写deleteByStuid(student);方法
	//根据学号删除学生信息数据访问方法
	public boolean deleteByStuid(Student student) {
		return studentList.remove(student);
	}

  通过remove(Object o)方法从列表中删除指定元素的第一个出现(如果存在)。
  是boolean类型,返回true/false

10.3 在case 5:中调用
		deleteStudentByStuid(StudentHelper.getIntValue("请输入要删除学生的学号"));

11、删除所有学生信息

11.1 在业务访问层添加删除所有学生信息方法
	//删除所有学生信息的具体业务处理方法
	private void deleteAll() {
		StudentDao studao=new StudentDao();
		boolean flag=studao.deleteAll();
		if(flag) {
			System.out.println("删除所有信息成功");
		}else {
			System.out.println("删除所有信息失败");
		}
	}

  调用deleteAll方法,此方法清空集合并返回true,如果没清空返回false

11.2 在数据访问类写deleteByStuid(student);方法
	//删除所有学生信息数据访问方法
	public boolean deleteAll() {
		studentList.clear();
		if(studentList.isEmpty()) {
			return true;
		}
		return false;
	}

  调用集合clear()方法清空集合就相当于把学生信息全部删除,学生信息保存在集合中。判断集合是否为空,利用isEmpty()方法判断。如果为空返回true,反之返回false。

11.3 在case 6:中调用
deleteAll();

12、对输入值进行异常处理

  如果用户不小心输入的值是错误的,例如需要一个整数值却不小心加了一个字符,或者输入一个7等等。我们就需要对输入的异常进行异常处理操作。
12.1 对整数值进行异常操作

  (1)将代码放入try{}语句块中
  (2)给catch语句块输出一条信息提示。
  (3)提示后就需要用户重新输入,直接调用getIntValue(tipinfo)方法。
  (4)此时无返回值,在try{}语句块外定义code并赋值为0;
  (5)将try{}语句块中定义code直接变为赋值。
  (6)然后将return code;放到异常处理外。

	//键盘输入得到一个整数值
	public static int getIntValue(String tipinfo) {
		int code=0;
		try {
			System.out.println(tipinfo);
			Scanner input=new Scanner(System.in);
			code=input.nextInt();
		}catch(Exception e) {
			System.out.println("输入有误,请重新输入");
			code=getIntValue(tipinfo);
		}
		return code;
	}
12.2 对从键盘得到一个String进行异常操作

  字符为空就为异常
  (1)定义info为null
  (2)此时如果输入的info值为null或者长度小于等于0
  (3)利用throw手动引发异常
  (4)进行try{}catch{}操作
  (5)将代码包裹在try{}语句块中
  (6)给catch语句块输出一条信息提示。
  (7)提示后就需要用户重新输入,直接调用getStringValue(tipinfo)方法。
  (8)在输入字符串后去除空格,利用trim()方法。

	//从键盘得到一个String
	public static String getStringValue(String tipinfo) {
		String info=null;
		try {
			System.out.println(tipinfo);
			Scanner input=new Scanner(System.in);
			info=input.nextLine();
			info=info.trim();
			if(info==null ||info.length()<=0) {
				throw new Exception("String不能为空");
			}
		}catch(Exception e) {
			System.out.println("不能为空,请重新输入");
			info=getStringValue(tipinfo);
		}
		return info;
	}
12.3 输入对应编号错误

  给switch语句后面加default语句

此学生信息管理系统缺点是利用集合保存数据,程序一关闭数据就会消失,不能保存。下面是第二版本的学生管理系统,利用IO流保存的数据

简单的学生管理系统优化版

源代码如下:

package com.jindi.bean;
/**
 * 保存学生信息的java类
 */
public class Student {
		//学生学号
		private int stuid;
		//学生姓名
		private String stuname;
		//学生年龄
		private int stuage;
		//学生地址
		private String stuaddress;
		//由于上面定义保存学生信息的变量是私有的
		//我们就需要为这些私有的变量提供可被访问的公共方法
		//setXXXX(参数)---设置变量值
		//getXXXX()---获取变量值
		public int getStuid() {
			return stuid;
		}
		public void setStuid(int stuid) {
			this.stuid=stuid;
		}
		
		public String getStuname() {
			return stuname;
		}
		public void setStuname(String stuname) {
			this.stuname=stuname;
		}
		
		public int getStuage() {
			return stuage;
		}
		public void setStuage(int stuage) {
			this.stuage=stuage;
		}
		
		public String getStuaddress() {
			return stuaddress;
		}
		public void setStuaddress(String stuaddress) {
			this.stuaddress=stuaddress;
		}
}

package com.jindi.dao;

import java.util.ArrayList;
import com.jindi.bean.Student;
	/**
	 * 提供学生信息的数据访问类
	 */
public class StudentDao {
	//保存信息的具体集合
	private static ArrayList studentList=new ArrayList();
	//添加学生信息的数据访问方法
	public boolean insert(Student student) {
		return studentList.add(student);
	}
	//查询所有学生信息的数据访问方法
	public ArrayList selectAll() {
		return studentList;
	}
	//根据学号查询学生信息的数据方法
	public Student selectByStuid(int stuid) {
		Student student=null;
		for(Object obj:studentList) {
			Student stu=(Student)obj;
			if(stu.getStuid()==stuid) {
				student=stu;
				break;
			}
		}
		return student;
	}
	//根据学号修改学生信息数据访问数据方法
	public boolean updateByStuid(Student student,Student newStudent) {
		Object obj=studentList.set(studentList.indexOf(student), newStudent);
		if(obj!=null) {
			return true;
		}
		return false;
	}
	//根据学号删除学生信息数据访问方法
	public boolean deleteByStuid(Student student) {
		return studentList.remove(student);
	}
	//删除所有学生信息数据访问方法
	public boolean deleteAll() {
		studentList.clear();
		if(studentList.isEmpty()) {
			return true;
		}
		return false;
	}
}

package com.jindi.service;

import java.util.ArrayList;

import com.jindi.bean.Student;
import com.jindi.dao.StudentDao;
import com.jindi.util.StudentHelper;
/**
 * 学生信息的业务访问类
 * @author wemme
 *
 */
public class StudentService {
	//添加学生信息的具体业务处理方法
	private void insertStudent(Student student) {
		StudentDao studao=new StudentDao();
		boolean flag=studao.insert(student);
		if(flag) {
			System.out.println("学生信息添加成功");
		}else {
			System.out.println("学生信息添加失败");
		}
	}
	//查询所有学生信息的具体业务处理方法
	private void selectAllStudent() {
		StudentDao studao=new StudentDao();
		ArrayList studentList=studao.selectAll();
		if(studentList.size()>0) {
			System.out.println("--------------");
			for(Object obj:studentList) {
				Student stu=(Student)obj;
				System.out.println(" "+stu.getStuid()+" "+
				stu.getStuname()+" "+stu.getStuage()+" "
						+stu.getStuaddress());
				System.out.println("----------------");
			}
		}else {
			System.out.println("---没有记录---");
		}
	}
	//根据学号查询学生信息的具体业务处理方法
	private void selectStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			System.out.println(" "+student.getStuid()+" "+student.getStuname()+" "+student.getStuage()+" "+student.getStuaddress());
			System.out.println("----------------");
		}else {
			System.out.println("---没有记录---");
		}
	}
	//根据学号修改学生信息的具体业务处理方法
	private void updateStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			Student newStudent=StudentHelper.getInputStudent();
			boolean flag=studao.updateByStuid(student,newStudent);
			if(flag) {
			System.out.println("修改成功");
		}else {
			System.out.println("修改失败");
		}
	}else{
		System.out.println("----没有记录----");
	}
	}
	//根据学号删除学生信息的具体业务处理方法
	private void deleteStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			boolean flag=studao.deleteByStuid(student);
			if(flag) {
				System.out.println("删除成功");
			}else {
				System.out.println("删除失败");
			}
		}else {
			System.out.println("---没有记录---");
		}
	}
	//删除所有学生信息的具体业务处理方法
	private void deleteAll() {
		StudentDao studao=new StudentDao();
		boolean flag=studao.deleteAll();
		if(flag) {
			System.out.println("删除所有信息成功");
		}else {
			System.out.println("删除所有信息失败");
		}
	}
	/**
	 * 具体业务处理方法
	 * 【根据键盘输入操作具体编号】
	 */
	public void service(int setvice_code) {
		switch(setvice_code) {
		case 1:System.out.println("添加学生信息");
			insertStudent(StudentHelper.getInputStudent());
			break;
		case 2:System.out.println("查询所有学生信息");
			selectAllStudent();
			break;
		case 3:System.out.println("根据学号查询学生信息");
			selectStudentByStuid(StudentHelper.getIntValue("请输入要查询的学生学号"));
			break;
		case 4:System.out.println("根据学号修改学生信息");
			updateStudentByStuid(StudentHelper.getIntValue("请输入要修改的学生学号"));
			break;
		case 5:System.out.println("根据学号删除学生信息");
			deleteStudentByStuid(StudentHelper.getIntValue("请输入要删除学生的学号"));
			break;
		case 6:System.out.println("删除所有学生信息");
			deleteAll();
			break;
		case 0:System.out.println("退出系统");
			System.exit(0);
			break;
		default:System.out.println("请输入正确编号");
			break;
		}
	}
}

package com.jindi.util;

import java.util.Scanner;

import com.jindi.bean.Student;
/**
 * 学生信息处理帮助类
 * @author wemme
 *
 */
public class StudentHelper {
	public static void getMenu() {
		System.out.println("---简单的学生管理系统---");
		System.out.println("1=添加学生信息,2=查询所有学生信息,3=根据学号查询学生信息,4=根据学号修改学生信息5=根据学号删除学生信息,6=删除所有学生信息,0=退出学生系统");
	}
	//键盘输入得到一个整数值
	public static int getIntValue(String tipinfo) {
		int code=0;
		try {
			System.out.println(tipinfo);
			Scanner input=new Scanner(System.in);
			code=input.nextInt();
		}catch(Exception e) {
			System.out.println("输入有误,请重新输入");
			code=getIntValue(tipinfo);
		}
		return code;
	}
	//从键盘得到一个String
	public static String getStringValue(String tipinfo) {
		String info=null;
		try {
			System.out.println(tipinfo);
			Scanner input=new Scanner(System.in);
			info=input.nextLine();
			info=info.trim();
			if(info==null ||info.length()<=0) {
				throw new Exception("String不能为空");
			}
		}catch(Exception e) {
			System.out.println("不能为空,请重新输入");
			info=getStringValue(tipinfo);
		}
		return info;
	}
	//键盘输入一个学生信息
	public static Student getInputStudent() {
		Student student=null;
		//得到学生学号
		int stuid=getIntValue("--请输入学生学号--");
		//得到学生姓名
		String stuname=getStringValue("--请输入学生姓名--");
		//得到学生年龄
		int stuage=getIntValue("--请输入学生年龄--");
		//得到学生地址
		String stuaddress=getStringValue("--请输入学生地址--");
		student=new Student();
		student.setStuid(stuid);
		student.setStuname(stuname);
		student.setStuage(stuage);
		student.setStuaddress(stuaddress);
		return student;
	}
}

package com.jindi.main;

import com.jindi.service.StudentService;
import com.jindi.util.StudentHelper;

public class StudentMain {
	public static void main(String[] args) {
		while(true) {
			StudentHelper.getMenu();
			int setvice_code=StudentHelper.getIntValue("请输入对应的编号");
			StudentService studentService=new StudentService();
			studentService.service(setvice_code);					
		}
	}
}

运行结果:

在这里插入图片描述
在这里插入图片描述

  • 18
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值