概述
一、学生管理系统
分析
1.1学生类
package com.qf.pojo;
public class Student {
private String name;
private char sex;
private int age;
private String classId;
private String id;
public Student() {
}
public Student(String classId, String id) {
this.classId = classId;
this.id = id;
}
public Student(String name, char sex, int age, String classId, String id) {
this.name = name;
this.sex = sex;
this.age = age;
this.classId = classId;
this.id = 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;
}
//判断两个学生对象是否一致根据:班级号+学号
@Override
public boolean equals(Object obj) {
if(this == obj){
return true;
}
if(obj instanceof Student){
Student stu = (Student) obj;
if(this.classId.equals(stu.classId) && this.id.equals(stu.id)){
return true;
}
}
return false;
}
@Override
public String toString() {
return name + "t" + sex + "t" + age + "t" + classId + "t" + id;
}
}
1.2接口类
package com.qf.sms;
import com.qf.pojo.Student;
//学生管理系统的接口
public interface SMS {
int NAME = 1;
int SEX = 2;
int AGE = 3;
int CLASS_ID = 4;
int ID = 5;
/**
* 添加学生
* @param stu 目标学生
* @return 状态码
*/
public int add(Student stu);
/**
* 学生容器的扩容
*/
public void expansion();
/**
* 删除学生
* @param classId 班级号
* @param id 学号
* @return 状态码
*/
public int delete(String classId,String id);
/**
* 修改学生信息
* @param classId 班级号
* @param id 学号
* @param type 修改的类型(1-姓名 2-性别 3-年龄 4-班级号 5-学号)
* @param val 要修改的值
* @return 修改是否成功
*/
public boolean update(String classId,String id,int type,Object val);
/**
* 修改学生姓名
* @param classId 班级号
* @param id 学号
* @param name 要修改的值
* @return 修改是否成功
*/
public boolean updateName(String classId,String id,String name);
/**
* 修改学生性别
* @param classId 班级号
* @param id 学号
* @param sex 要修改的值
* @return 修改是否成功
*/
public boolean updateSex(String classId,String id,char sex);
/**
* 修改学生年龄
* @param classId 班级号
* @param id 学号
* @param age 要修改的值
* @return 修改是否成功
*/
public boolean updateAge(String classId,String id,int age);
/**
* 修改学生班级号
* @param classId 班级号
* @param id 学号
* @param targetClassId 要修改的值
* @return 修改是否成功
*/
public boolean updateClassId(String classId,String id,String targetClassId);
/**
* 修改学生学号
* @param classId 班级号
* @param id 学号
* @param targetId 要修改的值
* @return 修改是否成功
*/
public boolean updateId(String classId,String id,String targetId);
/**
* 查询学生
* @param classId 班级号
* @param id 学号
* @return 在容器中的下标
*/
public int query(String classId,String id);
/**
* 查询学生
* @param stu 目标学生
* @return 在容器中的下标
*/
public int query(Student stu);
/**
* 查询学生
* @param name 姓名
* @return 学生数组
*/
public Student[] queryByName(String name);
/**
* 查询学生
* @param sex 性别
* @return 学生数组
*/
public Student[] queryBySex(char sex);
/**
* 查询学生
* @param startAge 开始年龄(包含)
* @param endAge 结束年龄(不包含)
* @return 学生数组
*/
public Student[] queryByAge(int startAge,int endAge);
/**
* 查询学生
* @param classId 班级号
* @return 学生数组
*/
public Student[] queryByClassId(String classId);
/**
* 查询学生
* @param classId 班级号
* @param id 学生号
* @return 学生对象
*/
public Student queryByClassIdAndId(String classId, String id);
/**
* 打印容器内的所有学生对象
*/
public void printStuInfo();
/**
* 传入数组打印学生
* @param stus 学生数组
*/
default void printStuInfo(Student[] stus){
for (Student stu : stus) {
System.out.println(stu);
}
}
}
1.3实现类
package com.qf.sms.impl;
import java.util.Arrays;
import com.qf.pojo.Student;
import com.qf.sms.SMS;
import com.qf.util.StuInfoUtils;
//学生管理系统的实现类
public class SMSImpl implements SMS{
//学生容器
private Student[] stus;
//初始化容量
private static final int INIT_CAPACITY = 3;
//数据长度(指针,指针指到哪就从哪开始添加数据)
private int size;
public SMSImpl() {
//初始化容器
stus = new Student[INIT_CAPACITY];
//做假数据
add(new Student("麻生希", '女', 20, "2204", "001"));
add(new Student("椎名空", '女', 21, "2204", "002"));
add(new Student("樱井步", '女', 22, "2204", "003"));
add(new Student("水菜丽", '女', 23, "2204", "004"));
add(new Student("松岛枫", '女', 24, "2204", "005"));
add(new Student("朝桐光", '女', 25, "2204", "006"));
add(new Student("水野朝阳", '女', 26, "2204", "007"));
add(new Student("爱田奈奈", '女', 27, "2204", "008"));
add(new Student("三上悠亚", '女', 28, "2204", "009"));
add(new Student("吉泽明步", '女', 28, "2204", "010"));
add(new Student("明日花绮罗", '女', 28, "2205", "001"));
add(new Student("邻原爱密莉", '女', 28, "2205", "002"));
add(new Student("小西满里惠", '女', 28, "2205", "003"));
add(new Student("桃谷绘里香", '女', 28, "2205", "004"));
add(new Student("波多野结衣", '女', 28, "2205", "005"));
add(new Student("小泽玛利亚", '女', 28, "2205", "006"));
}
@Override
public int add(Student stu) {
//1.判断学生信息是否合法
if(!StuInfoUtils.isStu(stu)){
return -1;
}
//2.判断是否有重复学生
if(query(stu) != -1){
return -2;
}
//3.判断是否扩容
if(size == stus.length){
expansion();
}
//4.添加学生
stus[size] = stu;
size++;
return 1;
}
@Override
public void expansion() {
//扩容机制:原数组长度的1.5倍
int oldCapacity = stus.length;
int newCapacity = oldCapacity + (oldCapacity>>1);
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 boolean update(String classId, String id, int type, Object val) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean updateName(String classId, String id, String name) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean updateSex(String classId, String id, char sex) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean updateAge(String classId, String id, int age) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean updateClassId(String classId, String id, String targetClassId) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean updateId(String classId, String id, String targetId) {
// TODO Auto-generated method stub
return false;
}
@Override
public int query(String classId, String id) {
//创建临时学生对象
Student stu = new Student(classId, id);
int index = query(stu);
return index;
}
@Override
public int query(Student stu) {
for (int i = 0; i < size; i++) {
if(stus[i].equals(stu)){
return i;
}
}
return -1;
}
@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];
index++;
}
}
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];
index++;
}
}
return newStus;
}
@Override
public Student[] queryByAge(int startAge, int endAge) {
//1.判断学生合法性
if(startAge > endAge || !StuInfoUtils.isAge(startAge) || !StuInfoUtils.isAge(endAge)){
return null;
}
//2.确定符合条件的学生人数
int num = 0;
for (int i = 0; i < size; i++) {
int age = stus[i].getAge();
if(age >= startAge && age <= endAge){
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 <= endAge){
newStus[index] = stus[i];
index++;
}
}
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];
index++;
}
}
return newStus;
}
@Override
public Student queryByClassIdAndId(String classId, String id) {
//1.判断学生信息合法性
if(!StuInfoUtils.isClassId(classId) || !StuInfoUtils.isId(id)){
return null;
}
//2.查询是否有该学生
int index = query(classId, id);
if(index == -1){
return null;
}
//3.获取容器中的学生对象
Student stu = stus[index];
return stu;
}
@Override
public void printStuInfo() {
for (int i = 0; i < size; i++) {
System.out.println(stus[i]);
}
}
}
14工具类
package com.qf.util;
import com.qf.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;
}
//姓名合法性:2~8位
public static boolean isName(String name) {
//获取字符串的字符长度
int len = name.length();
if(len >= 2 && len <= 8){
return true;
}
return false;
}
//性别合法性:男和女
public static boolean isSex(char sex) {
if(sex == '男' || sex == '女'){
return true;
}
return false;
}
//年龄合法性:18~60
public static boolean isAge(int age) {
if(age >= 18 && age <= 60){
return true;
}
return false;
}
//班级号合法性:4位
public static boolean isClassId(String classId) {
//获取字符串的字符长度
int len = classId.length();
if(len == 4){
return true;
}
return false;
}
//学号合法性:3位
public static boolean isId(String id) {
//获取字符串的字符长度
int len = id.length();
if(len == 3){
return true;
}
return false;
}
}
1.5测试类
package com.qf.main;
import java.util.Scanner;
import com.qf.pojo.Student;
import com.qf.sms.impl.SMSImpl;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
SMSImpl sms = new SMSImpl();
System.out.println("欢迎进入**学生管理系统...");
boolean flag = true;
while(flag){
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 = scan.nextInt();
switch (num) {
case 1:
addMenu(scan, sms);
break;
case 2:
deleteMenu(scan, sms);
break;
case 3:
break;
case 4:
queryMenu(scan, sms);
break;
case 5:
sms.printStuInfo();
break;
case 886:
flag = false;
System.out.println("正在退出**学生管理系统,欢迎下次再来...");
break;
default:
System.out.println("输入错误,请重新输入...");
break;
}
System.out.println("----------------------");
}
scan.close();
}
private static void queryMenu(Scanner scan, SMSImpl sms) {
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 = scan.nextInt();
String classId = null;
switch (num) {
case 1:
System.out.println("请输入姓名:");
String name = scan.next();
Student[] queryByName = sms.queryByName(name);
if(queryByName != null){
sms.printStuInfo(queryByName);
}else{
System.out.println("没有查询到该学生信息");
}
break;
case 2:
System.out.println("请输入性别:");
char sex = scan.next().charAt(0);
Student[] queryBySex = sms.queryBySex(sex);
if(queryBySex != null){
sms.printStuInfo(queryBySex);
}else{
System.out.println("没有查询到该学生信息");
}
break;
case 3:
System.out.println("请输入开始年龄:");
int startAge = scan.nextInt();
System.out.println("请输入结束年龄:");
int endAge = scan.nextInt();
Student[] queryByAge = sms.queryByAge(startAge, endAge);
if(queryByAge != null){
sms.printStuInfo(queryByAge);
}else{
System.out.println("没有查询到该学生信息");
}
break;
case 4:
System.out.println("请输入班级号:");
classId = scan.next();
Student[] queryByClassId = sms.queryByClassId(classId);
if(queryByClassId != null){
sms.printStuInfo(queryByClassId);
}else{
System.out.println("没有查询到该学生信息");
}
break;
case 5:
System.out.println("请输入班级号:");
classId = scan.next();
System.out.println("请输入学号:");
String id = scan.next();
Student queryByClassIdAndId = sms.queryByClassIdAndId(classId, id);
if(queryByClassIdAndId != null){
System.out.println(queryByClassIdAndId);
}else{
System.out.println("没有查询到该学生信息");
}
break;
default:
System.out.println("输入错误...");
break;
}
}
private static void deleteMenu(Scanner scan, SMSImpl sms) {
System.out.println("请输入班级号:");
String classId = scan.next();
System.out.println("请输入学号:");
String id = scan.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("删除成功");
}
}
//添加功能的菜单
private static void addMenu(Scanner scan, SMSImpl sms) {
System.out.println("请输入姓名:");
String name = scan.next();
System.out.println("请输入性别:");
String str = scan.next();//"男"
char sex = str.charAt(0);//获取下标为0上的字符 -- '男'
System.out.println("请输入年龄:");
int age = scan.nextInt();
System.out.println("请输入班级号:");
String classId = scan.next();
System.out.println("请输入学号");
String id = scan.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("添加成功");
}
}
}
最后
以上就是追寻鞋子为你收集整理的Java 学生管理系统--------13一、学生管理系统分析的全部内容,希望文章能够帮你解决Java 学生管理系统--------13一、学生管理系统分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复