学生管理系统的制作,可以很好的练习面向对象的知识点,非常适合初学者使用练习。
先上截图运行截图:
主界面:
添加学生:
删除学生:
修改学生:
查询学生:
主要功能就这些
直接上代码:
首先看一下目录结构:
main.java:
package com.yyy.main;
import java.lang.invoke.StringConcatFactory;
import java.util.Scanner;
import javax.print.attribute.standard.NumberOfInterveningJobs;
import com.yyy.pojo.Student;
import com.yyy.sms.impl.SMSImpl;
import com.yyy.util.StuInfoUtils;
public class main {
/**
* 学生管理系统
* 分析:将学生对象储存在数组中
* 实现增删查改功能(数组长度是固定的,需要扩容)
* 操作学生对象时,需要验证学生信息合法性(姓名2~8,性别-男或女,年龄 18~60
* 学号长度3)
*/
public static void main(String[] args) {
SMSImpl sms = new SMSImpl();
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎使用学生管理系统");
boolean flag = true;
while(flag) {
System.out.println("-----------------");
System.out.println("请选择功能");
System.out.println("1 - 添加学生");
System.out.println("2 - 删除学生");
System.out.println("3 - 修改学生");
System.out.println("4 - 查询学生");
System.out.println("5 - 打印所有学生");
System.out.println("886 - 退出系统");
int num = scanner.nextInt();
System.out.println("-----------------");
switch(num) {
case 1:
addMenu(sms, scanner);
break;
case 2:
deleteMenu(sms,scanner);
break;
case 3:
updateMenu(sms,scanner);
break;
case 4:
queryMenu(sms,scanner);
break;
case 5:
sms.printStuInfo();
break;
case 886:
flag = false;
System.out.println("正在退出系统");
break;
default:
System.out.println("输入有误,请重新输入!");
break;
}
}
}
private static void updateMenu(SMSImpl sms, Scanner scanner) {
System.out.println("请输入需要修改的条件:");
System.out.println("1--修改姓名");
System.out.println("2--修改性别");
System.out.println("3--修改年龄");
System.out.println("4--修改班级号");
System.out.println("5--修改学号");
int num = scanner.nextInt();
int update = 0;
if(num < 1 || num > 5) {
System.out.println("修改条件有误!");
return;
}
System.out.println("请输入班级号");
String classId = scanner.next();
System.out.println("请输入学号");
String id = scanner.next();
switch (num) {
case 1:
System.out.println("请输入要修改的姓名:");
String nameString = scanner.next();
update = sms.updateName(nameString, id, classId);
break;
case 2:
System.out.println("请输入要修改的性别:");
char sex = scanner.next().charAt(0);
update = sms.updateSex(sex, id, classId);
break;
case 3:
System.out.println("请输入要修改的年龄");
int age = scanner.nextInt();
update = sms.updateAge(age, id, classId);
break;
case 4:
System.out.println("请输入要修改的班级号");
String targetClassId = scanner.next();
update = sms.updateClassId(classId, id, targetClassId);
break;
case 5:
System.out.println("请输入要修改的学号");
String targetId = scanner.next();
update = sms.updateId(id, targetId, classId);
break;
default:
System.out.println("修改条件有误!");
break;
}
if(update == -1) {
System.out.println("修改失败--学生信息不合法");
}else if(update == -2) {
System.out.println("修改失败--没有该学生");
}else if(update == -3) {
System.out.println("修改后会导致学生重复");
}else if(update == 1) {
System.out.println("修改成功");
}
}
private static void queryMenu(SMSImpl sms, Scanner scanner) {
System.out.println("请输入需要查询的条件:");
System.out.println("1--通过姓名查询");
System.out.println("2--通过性别查询");
System.out.println("3--通过年龄段查询");
System.out.println("4--通过班级号查询");
System.out.println("5--通过班级号加学号查询");
int num = scanner.nextInt();
switch (num) {
case 1:
System.out.println("请输入姓名:");
String name = scanner.next();
Student[] queryByName = sms.queryByName(name);
if(!StuInfoUtils.isempty(queryByName)) {
sms.printStuInfo(queryByName);
}
break;
case 2:
System.out.println("请输入性别:");
char sex = scanner.next().charAt(0);
Student[] queryBySex = sms.queryBySex(sex);
if(!StuInfoUtils.isempty(queryBySex)) {
sms.printStuInfo(queryBySex);
}
break;
case 3:
System.out.println("请输入开始年龄:");
int startage = scanner.nextInt();
System.out.println("请输入结束年年龄:");
int stopage = scanner.nextInt();
Student[] queryByAge = sms.queryByAge(startage, stopage);
if(!StuInfoUtils.isempty(queryByAge)) {
sms.printStuInfo(queryByAge);
}
break;
case 4:
System.out.println("请输入班级号:");
String classId = scanner.next();
Student[] queryByClassId = sms.queryByClassId(classId);
if(!StuInfoUtils.isempty(queryByClassId)) {
sms.printStuInfo(queryByClassId);
}
break;
case 5:
System.out.println("请输入班级号:");
String c = scanner.next();
System.out.println("请输入学号:");
String i = scanner.next();
Student stu = sms.queryByClassIdAndId(c, i);
if(stu != null) {
System.out.println(stu);
}
break;
default:
break;
}
}
private static void deleteMenu(SMSImpl sms, Scanner scanner) {
System.out.println("请输入需要删除的条件");
System.out.println("1--通过班级号和学号删除");
System.out.println("2--通过年龄段来删除");
int num = scanner.nextInt();
switch (num) {
case 1:
System.out.println("请输入班级号:");
String classId = scanner.next();
System.out.println("请输入学号:");
String id = scanner.next();
int delete = sms.delete(classId, id);
if(delete == -1) {
System.out.println("删除失败--学生信息不完全");
}else if(delete == -2) {
System.out.println("删除失败--学生不存在");
}else if(delete == 1){
System.out.println("删除成功");
}
break;
case 2:
System.out.println("请输入开始的年龄:");
int startAge = scanner.nextInt();
System.out.println("请输入结束的年龄:");
int endAge = scanner.nextInt();
int deletebetweenage = sms.deletebetweenage(startAge, endAge);
if(deletebetweenage == -1) {
System.out.println("删除失败--输入年龄不合法");
}else if(deletebetweenage == -2) {
System.out.println("删除失败--没有该年龄段的学生");
}else if(deletebetweenage == 1){
System.out.println("删除成功");
}
break;
default:
System.out.println("输入的操作有误");
break;
}
}
private static void addMenu(SMSImpl sms, Scanner scanner) {
System.out.println("请输入姓名:");
String name = scanner.next();
System.out.println("请输入性别:");
char sex = scanner.next().charAt(0);
System.out.println("请输入年龄:");
int age = scanner.nextInt();
System.out.println("请输入班级号:");
String classId = scanner.next();
System.out.println("请输入学号:");
String id = scanner.next();
Student stu = new Student(name,sex,age,classId,id);
int add = sms.add(stu);
if(add == -1) {
System.out.println("添加失败--学生信息不合法");
}else if(add == -2) {
System.out.println("添加失败 -- 有重复学生");
}else if(add == 1) {
System.out.println("添加成功");
}
}
}
Student.java
package com.yyy.pojo;
public class Student {
private String name;
private char sex;
private int age;
private String classId;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Student(String name, char sex, int age, String classId, String id) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.classId = classId;
this.id = id;
}
public Student() {
super();
}
//判断两个学生是否相等(根据班级号加学号)
@Override
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(obj instanceof Student) {
Student student = (Student) obj;
if(this.classId.equals(student.classId) && this.id.equals(student.id)) {
return true;
}
}
return false;
}
@Override
public String toString() {
return name + "\t" + sex + "\t" + age + "\t" + classId + "\t" + id;
}
public Student(String classId, String id) {
super();
this.classId = classId;
this.id = id;
}
}
ISMS.java(这是一个接I口)
package com.yyy.sms;
import com.yyy.pojo.Student;
public interface ISMS {
//添加学生
public int add( Student stu);
//扩容
public void expansion();
//删除
public int delete(String classId,String id);
//根据年龄段删除学生
public int deletebetweenage(int startAge,int endAge);
//修改学生姓名
public int updateName(String name,String id,String classId);
//修改学生性别
public int updateSex(char sex,String id,String classId);
//修改学生年龄
public int updateAge(int age,String id,String classId);
//修改学生班级号
public int updateClassId(String classId,String id,String tarageClassId);
//修改学生学号
public int updateId(String id,String tarageId,String classId);
//查询学生
public int query(Student stu);
//查询学生在容器中的下标
public int query(String classId,String id);
//根据姓名查询
public Student[] queryByName(String name);
//根据性别查询
public Student[] queryBySex(char sex);
//根据年龄段查询
public Student[] queryByAge(int startAge,int stopAge);
//根据班级号查询
public Student[] queryByClassId(String classId);
//根据班级号加学号查询
public Student queryByClassIdAndId(String classId,String Id);
//打印所有学生信息
public void printStuInfo();
default void printStuInfo(Student[] stus) {
for (Student stu : stus) {
System.out.println(stu);
}
}
}
ISMSImpl.java
package com.yyy.sms.impl;
import java.util.Arrays;
import com.yyy.pojo.Student;
import com.yyy.sms.ISMS;
import com.yyy.util.StuInfoUtils;
public class SMSImpl implements ISMS{
//学生容器
private Student[] stus;
//默认容量
private static final int INIT_CAPACIT = 3;
//设置学生对象个数(指针)
private int size;
public SMSImpl() {
//初始化
stus = new Student[INIT_CAPACIT];
add(new Student("张三", '女', 20, "2201", "001"));
add(new Student("李四", '男', 21, "2201", "002"));
add(new Student("王五", '女', 22, "2201", "003"));
}
public SMSImpl(int capacity) {
//容量小于初始化容量
if(capacity <= INIT_CAPACIT) {
capacity = INIT_CAPACIT;
}
//初始化容器
stus = new Student[capacity];
}
@Override
public int add(Student stu) {
//1.验证学生合法性
if(!StuInfoUtils.isStu(stu)) {
return -1;
}
//2.判断是否有重复学生
if(query(stu) != -1) {
return -2;
}
//3.判断是否扩容
if(stus.length == size) {
expansion();
}
//4.添加学生
stus[size++] = stu;
return 1;
}
@Override
public void expansion() {
int oldCapacity = stus.length;
int newCapacity = oldCapacity + (oldCapacity>>1);//原来的1.5倍
Student[] newstusStudents = new Student[newCapacity];
stus = Arrays.copyOf(stus, newCapacity);
}
@Override
public int delete(String classId, String id) {
//1.学生信息是否合法
if(!StuInfoUtils.isClassId(classId) || !StuInfoUtils.isId(id)) {
return -1;
}
//2.判断是否有该学生
int index = query(classId, id);
if(index == -1) {
return -2;
}
//3.删除学生
for (int i = index; i < size-1; i++) {
stus[i] = stus[i+1];
}
size--;
return 1;
}
@Override
public int updateName(String name, String id, String classId) {
// 验证学生信息合法性
if(!StuInfoUtils.isClassId(classId) || !StuInfoUtils.isId(id) || !StuInfoUtils.isName(name)) {
return -1;
}
//2.判断是否有该学生
int index = query(classId,id);
if(index == -1) {
return -2;
}
//3.修改对应的数据
stus[index].setName(name);
return 1;
}
@Override
public int updateSex(char sex, String id, String classId) {
// 验证学生信息合法性
if(!StuInfoUtils.isClassId(classId) || !StuInfoUtils.isId(id) || !StuInfoUtils.isSex(sex)) {
return -1;
}
//2.判断是否有该学生
int index = query(classId,id);
if(index == -1) {
return -2;
}
//3.修改对应的数据
stus[index].setSex(sex);
return 1;
}
@Override
public int updateAge(int age, String id, String classId) {
// 验证学生信息合法性
if(!StuInfoUtils.isClassId(classId) || !StuInfoUtils.isId(id) || !StuInfoUtils.isAge(age)) {
return -1;
}
//2.判断是否有该学生
int index = query(classId,id);
if(index == -1) {
return -2;
}
//3.修改对应的数据
stus[index].setAge(age);
return 1;
}
@Override
public int updateClassId(String classId, String id, String tarageClassId) {
// 验证学生信息合法性
if(!StuInfoUtils.isClassId(classId) || !StuInfoUtils.isId(id) || !StuInfoUtils.isClassId(tarageClassId)) {
return -1;
}
//2.判断是否有该学生
int index = query(classId,id);
if(index == -1) {
return -2;
}
if(query(tarageClassId,id) != -1) {
return -3;
}
//3.修改对应的数据
stus[index].setClassId(tarageClassId);
return 1;
}
@Override
public int updateId(String id, String tarageId, String classId) {
// 验证学生信息合法性
if(!StuInfoUtils.isClassId(classId) || !StuInfoUtils.isId(id) || !StuInfoUtils.isId(tarageId)) {
return -1;
}
//2.判断是否有该学生
int index = query(classId,id);
if(index == -1) {
return -2;
}
if(query(classId,tarageId) != -1) {
return -3;
}
//3.修改对应的数据
stus[index].setId(tarageId);
return 1;
}
/**
* 返回学生在容器中的下标,如果没有就返回-1
*/
@Override
public int query(Student stu) {
for (int i = 0; i < size; i++) {
if(stus[i].equals(stu)) {
return i;
}
}
return -1;
}
@Override
public int query(String classId, String id) {
//临时学生对象,该对象只存入班级号和学号
Student stu = new Student(classId,id);
int index = query(stu);
return index;
}
@Override
public Student[] queryByName(String name) {
//1.判断学生信息合法性
if(!StuInfoUtils.isName(name)) {
return null;
}
//2.遍历容器,确定符合条件的学生的个数
int num = 0;
for(int i = 0; i<size; i++) {
if(stus[i].getName().equals(name)) {
num++;
}
}
if(num == 0) {
return null;
}
//3.创建新的数组
Student[] newStus = new Student[num];
//4.将符合条件的学生对象添加到新数组中
int index = 0;
for (int i = 0; i < size; i++) {
if(stus[i].getName().equals(name)) {
newStus[index++] = stus[i];
}
}
return newStus;
}
@Override
public Student[] queryBySex(char sex) {
//1.判断学生信息合法性
if(!StuInfoUtils.isSex(sex)) {
return null;
}
//2.遍历容器,确定符合条件的学生的个数
int num = 0;
for(int i = 0; i<size; i++) {
if(stus[i].getSex() == sex) {
num++;
}
}
if(num == 0) {
return null;
}
//3.创建新的数组
Student[] newStus = new Student[num];
//4.将符合条件的学生对象添加到新数组中
int index = 0;
for (int i = 0; i < size; i++) {
if(stus[i].getSex() == sex) {
newStus[index++] = stus[i];
}
}
return newStus;
}
@Override
public Student[] queryByAge(int startAge, int stopAge) {
//1.判断学生信息合法性
if(!StuInfoUtils.isAge(startAge) || !StuInfoUtils.isAge(stopAge)) {
return null;
}
//2.遍历容器,确定符合条件的学生的个数
int num = 0;
for(int i = 0; i<size; i++) {
int age = stus[i].getAge();
if(age>=startAge && age<=stopAge) {
num++;
}
}
if(num == 0) {
return null;
}
//3.创建新的数组
Student[] newStus = new Student[num];
//4.将符合条件的学生对象添加到新数组中
int index = 0;
for (int i = 0; i < size; i++) {
int age = stus[i].getAge();
if(age>=startAge && age<=stopAge) {
newStus[index++] = stus[i];
}
}
return newStus;
}
@Override
public Student[] queryByClassId(String classId) {
//1.判断学生信息合法性
if(!StuInfoUtils.isClassId(classId)) {
return null;
}
//2.遍历容器,确定符合条件的学生的个数
int num = 0;
for(int i = 0; i<size; i++) {
if(stus[i].getClassId().equals(classId)) {
num++;
}
}
if(num == 0) {
return null;
}
//3.创建新的数组
Student[] newStus = new Student[num];
//4.将符合条件的学生对象添加到新数组中
int index = 0;
for (int i = 0; i < size; i++) {
if(stus[i].getClassId().equals(classId)) {
newStus[index++] = stus[i];
}
}
return newStus;
}
@Override
public Student queryByClassIdAndId(String classId, String Id) {
int index = query(classId,Id);
if(index == -1) {
return null;
}
return stus[index];
}
@Override
public void printStuInfo() {
for (int i = 0; i < size; i++) {
System.out.println(stus[i]);
}
}
@Override
public int deletebetweenage(int startAge, int endAge) {
//验证学生信息
if(!StuInfoUtils.isAge(startAge) || !StuInfoUtils.isAge(endAge)) {
return -1;
}
//判断在这个年龄段内人数
int num = 0;
for(int i = 0; i<size; i++) {
if(stus[i].getAge() < startAge || stus[i].getAge() > endAge) {
num++;
}
}
if(num == 0) {
return -2;
}
//删除学生
Student[] newstus = new Student[num];
int index = 0;
for(int i = 0; i<size; i++) {
if(stus[i].getAge() < startAge || stus[i].getAge() > endAge) {
newstus[index++] = stus[i];
}
}
stus = newstus;
size -= (size-num);
return 1;
}
}
StuInfoUtil.java
package com.yyy.util;
import com.yyy.pojo.Student;
//验证学生工具类
public class StuInfoUtils {
public static boolean isStu(Student stu) {
String name = stu.getName();
char sex = stu.getSex();
int age = stu.getAge();
String classId = stu.getClassId();
String id = stu.getId();
if(isName(name) && isSex(sex) && isAge(age) && isClassId(classId) && isId(id)) {
return true;
}
return false;
}
public static boolean isName(String name) {
int len = name.length();
if(len < 2 || len > 8) {
return false;
}
return true;
}
public static boolean isSex(char sex) {
if(sex != '男' && sex != '女') {
return false;
}
return true;
}
public static boolean isAge(int age) {
if(age < 18 || age >60) {
return false;
}
return true;
}
public static boolean isClassId(String classId) {
int len = classId.length();
if(len != 4) {
return false;
}
return true;
}
public static boolean isId(String id) {
int len = id.length();
if(len != 3) {
return false;
}
return true;
}
public static boolean isempty(Student[] stu) {
if(stu.length == 0) {
return true;
}else {
return false;
}
}
}
最后附上下载地址:
https://download.youkuaiyun.com/download/yang_yi_yun/85224284