一、学生管理系统

分析

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;}//判断两个学生对象是否一致根据:班级号+学号@Overridepublic 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;}@Overridepublic 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"));}@Overridepublic 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;}@Overridepublic void expansion() {//扩容机制:原数组长度的1.5倍int oldCapacity = stus.length;int newCapacity = oldCapacity + (oldCapacity>>1);stus = Arrays.copyOf(stus, newCapacity);}@Overridepublic 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;}@Overridepublic boolean update(String classId, String id, int type, Object val) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean updateName(String classId, String id, String name) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean updateSex(String classId, String id, char sex) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean updateAge(String classId, String id, int age) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean updateClassId(String classId, String id, String targetClassId) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean updateId(String classId, String id, String targetId) {// TODO Auto-generated method stubreturn false;}@Overridepublic int query(String classId, String id) {//创建临时学生对象Student stu = new Student(classId, id);int index = query(stu);return index;}@Overridepublic int query(Student stu) {for (int i = 0; i < size; i++) {if(stus[i].equals(stu)){return i;}}return -1;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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~60public 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相关推荐

  1. java学生管理系统(简易)(三)---教师端的登录主页面

    教师端的登录界面就比较清晰了...可能就我自己认为,以为前面写的太乱了...蒙圈 // 学会了先布局,在完善部分代码,嘤嘤嘤...之前那个学生的感觉凉凉啊~ // 有些代码中可能有main函数,有些没 ...

  2. java考勤管理系统源码java学生考勤请假系统java学生考勤管理系统 java考勤系统java学生信息管理系统java学生管理系统

    java考勤管理系统源码java学生考勤请假系统java学生考勤管理系统 java考勤系统java学生信息管理系统java学生管理系统 public Swingtest002() {// 设置标题se ...

  3. 理想国Java学生管理系统实战教程+源码

    01.需求 使用所学知识制作一个学生管理系统,包含如下功能 查看所有学生 添加一个学生 删除一个学生 根据名字修改学生 根据名字查询学生 退出系统 说明 学生信息:姓名,性别,年龄 从控制台录入学生 ...

  4. 第一篇博客,java学生管理系统(挑战全网最全)

    java学生信息管理系统,(课设必备),附有源码和简版链接 博主虽然技术不高,但是系统写的真的是没话说,留着开学java课设用了. 直接转载链接了,查看系统入口 https://blog.csdn.n ...

  5. Java—学生管理系统使用文件永久存储

    学生管理系统 上一次使用的集合只能对学生信息进行临时存储,关闭程序时数据就会消失,这次新增了文件存储,达到对学生信息的永久记录,首先在上次代码的基础上,增加了两个方法,一个是从学生文件读取信息到集合中 ...

  6. java学生管理系统(swing) (没用数据库,附源码)

    如果有需要带数据库的,请小伙伴移步至:java+mysql学生管理系统(附源码,无套路) 事先声明: 程序简易,只是为了记录学习过程,大佬们勿喷,要实在忍不住,麻烦各位大佬轻点喷就是! 但是如果有任何 ...

  7. 基于IDEA的Java学生管理系统

    1.创建学生类 package studentManager;public class Student {//定义成员变量private String num;//学号private String n ...

  8. 【java项目学习笔记】Java学生管理系统(纯后端基础--增删改查)

    学生管理系统 在一所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写一个学生管理系统,实现对学生信息的添加.删除.修改和查询功能.每个功能的具体要求如下: 系统的首页 用于显示系统所有的操作,并 ...

  9. java学生管理系统代码_java学生信息管理系统(附源码)

    一:   介绍 1:实现登录界面 2:实现主界面 有两种操作 一种是按钮操作  另外一种是SQL语句. 3:连接SQL server 2008 数据库 用到的软件及环境SQLserver2008,ec ...

  10. Java 学生管理系统(详解)

    文章目录 学生类 main方法 首界面登录 功能选择界面 添加学生信息 删除学生信息 修改学生信息 查看学生信息 学号遍历 和 清空控制台方法 附:学生管理系统代码 Student .Java Mai ...

最新文章

  1. NIO这样理解才够深入!
  2. shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机...
  3. CentOS7安装PHP5.6.23
  4. Java 8 Friday Goodies:本地交易范围
  5. Nacos 计划发布v0.2版本,进一步融合Dubbo和SpringCloud生态
  6. des java c_这个des加密,到底是用的哪种类型?
  7. linux内核开启overlay,Linux-overlay启动挂载为只读或写文件异常
  8. Sybase数据库技术,数据库恢复---分享Sybase数据库知识(博客文章索引@51cto)
  9. 前端地图之色斑图渲染(数据为矢量数据)(二)——以leaflet为例
  10. JSONArray.fromObject(); 引入问题
  11. 多个安卓设备投屏到电脑_怎样将多个安卓手机投射到同一台电脑上
  12. 用大白话聊聊JavaSE
  13. Git的基础用法总结
  14. 整理的最新版的K8S安装教程,看完还不会,请你吃瓜
  15. 科学计数法 与 普通数字 转换
  16. python如何获取路径
  17. Ruby on Rails 新版本
  18. 夺命聘礼【三】- 原创中篇小说
  19. 头歌平台(EduCoder)—— Matplotlib接口和常用图形
  20. windows常用系统库

热门文章

  1. [转]IDEA 出现编译错误 Multi-catches are not supported a this language level 解决方法
  2. (1)地图的理解及地图的类型介绍
  3. Strick mode 和Trace View使用
  4. mysql命令创库创表_MySQL基础创库创表知识
  5. 【算法入坑】(一)双指针yyds,学完双指针刷题贼爽嘞
  6. 云台山风景美如画,四大网红打卡景点等你来!
  7. 差分数组:PIPI的区间操作Ⅰ
  8. Luogu 1606 [USACO07FEB]白银莲花池Lilypad Pond
  9. Audio-预训练模型(一):概述
  10. 割线法matlab实验报告,牛顿迭代割线法二分法算法实验报告.docx