学生管理系统需求文档:
需求文档:
采取控制台的方式去书写学生管理系统。
分析:
初始菜单:
"-------------欢迎来到黑马学生管理系统----------------" "1:添加学生" "2:删除学生" "3:修改学生" "4:查询学生" "5:退出" "请输入您的选择:"
学生类:
属性:id、姓名、年龄、家庭住址
添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
-
id唯一
删除功能:
键盘录入要删除的学生id,需要满足以下要求:
-
id存在删除
-
id不存在,需要提示不存在,并
-
回到初始菜单
修改功能:
键盘录入要修改的学生id,需要满足以下要求
-
id存在,继续录入其他信息
-
id不存在,需要提示不存在,并回到初始菜单
查询功能:
打印所有的学生信息,需要满足以下要求
-
如果没有学生信息,提示:当前无学生信息,请添加后再查询
-
如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id 姓名 年龄 家庭住址 heima001 张三 23 南京 heima002 李四 24 北京 heima003 王五 25 广州 heima004 赵六 26 深圳
===========================================================================================================================================================================================================================
代码:
package sms1;
public class pupil {
private String id;
private String name;
private int age;
private String address;
public pupil() {
}
public pupil(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
/**
* 获取
* @return id
*/
public String getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
/**
* 获取
* @return address
*/
public String getAddress() {
return address;
}
/**
* 设置
* @param address
*/
public void setAddress(String address) {
this.address = address;
}
}
package sms1;
import java.util.ArrayList;
import java.util.Scanner;
public class sms {
public static void main(String[] args) {
Scanner sr = new Scanner(System.in);
//创建引用集合接受储存数据
ArrayList<pupil> list = new ArrayList<>();
while (true) {
System.out.println("-------------欢迎来到黑马学生管理系统----------------");
System.out.println("1:添加学生" + "\n" + "2:删除学生" + "\n" + "3:修改学生" + "\n" + "4:查询对应id信息" +
"\n" + "5:查询学生" + "\n" + "6:退出" + "\n" + "请输入您的选择:");
String sj = sr.next();
//判断菜单选择是否合法
int j = menu(sj);
if (j != -1) {
//菜单输入6,使菜单退出
if (j == 6) {
System.out.println("=====================================已退出系统=======================================");
break;
} else {
//主页面菜单
switch (j) {
//添加功能
case 1: {
while (true) {
System.out.println("请输入需要添加几个学生");
String snum = sr.next();
//判断添加学生数量的键盘录入是否是数字
int num = number(snum);
if (num != -1) {
//判断id是否唯一的方法
list = appe(list, num);
//遍历输出的方法
//traversal(list);
break;
} else {
System.out.println("输入的添加数量不符合规定,请重新添加");
}
}
}
break;
case 2: {//删除
System.out.println("请输入需要删除学生的id");
String id = sr.next();
//判断id是否存在
if (judeg(list, id) != -1) {
//删除的方法
list = remove(list, id);
System.out.println("已删除");
//遍历方法
//traversal(list);
} else {
System.out.println("id不存在,返回初始菜单");
}
}
break;
case 3: {//修改
System.out.println("请输入需要修改的id");
String id = sr.next();
//判断id是否存在
if (judeg(list, id) != -1) {
//调用修改方法修改数据
list = alter(list, id);
System.out.println("修改成功");
//遍历输出
//traversal(list);
} else {
System.out.println("id不存在,返回初始菜单");
}
}
break;
case 4: {//查找对应id学生
System.out.println("请输入需要查找的id");
String id = sr.next();
//判断id是否存在,存在judge方法会返回所在索引,没有会返回-1
if (judeg(list, id) != -1) {
//非null判断
if (find(list, id) != null) {
System.out.println("已查询到该学生信息:");
System.out.println("id是: " + find(list, id).getId() + "\t" + "\t" + "姓名是: " + find(list, id).getName() +
"\t" + "\t" + "年龄是: " + find(list, id).getAge() + "\t" + "\t" + "家庭住址是: " + find(list, id).getAddress());
}
} else {
System.out.println("查无此人,返回初始菜单");
}
}
break;
case 5: {
traversal(list);
}
break;
default: {
System.out.println("输入错误,请重新输入选择");
}
}
}
} else {
System.out.println("输入的值不是菜单选择内的数字或者不符合规范,请重新输入:");
}
}
}
//添加==========================================================================
public static ArrayList<pupil> appe(ArrayList<pupil> list, int num) {
Scanner sr = new Scanner(System.in);
//控制循环次数1
for (int j = 0; j < num; j++) {
while (true) {
pupil p = new pupil();
System.out.println("请输入第" + (j + 1) + "个需要添加的学生id:");
String id = sr.next();
//使用judeg方法判断id是否唯一,唯一返回-1
if (judeg(list, id) == -1) {
p.setId(id);
System.out.println("请输入第" + (j + 1) + "个需要添加的学生姓名:");
String name = sr.next();
p.setName(name);
System.out.println("请输入第" + (j + 1) + "个需要添加的学生年龄:");
String year = sr.next();
int age = number(year);
if (age != -1) {
p.setAge(age);
System.out.println("请输入第" + (j + 1) + "个需要添加的学生住址:");
String address = sr.next();
p.setAddress(address);
list.add(p);
break;
} else {
System.out.println("输入的年龄不正确,请重新输入->");
}
} else {
System.out.println("输入的id重复,请重新输入->");
}
}
}
return list;
}
//删除=====================================================================================
public static ArrayList<pupil> remove(ArrayList<pupil> list, String id) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == null) {
} else {
if (list.get(i).getId().equals(id)) {
list.remove(i);
return list;
}
}
}
return list;
}
//修改===========================================================================================
public static ArrayList<pupil> alter(ArrayList<pupil> list, String id) {
Scanner sr = new Scanner(System.in);
//judge方法返回输入id所在索引
int x = judeg(list, id);
//调用方法判断需要修改的id是否存在
if (judeg(list, id) != -1) {
pupil p = new pupil();
System.out.println("请输入修改后的学生id:");
String id1 = sr.next();
p.setId(id1);
System.out.println("请输入修改后的学生姓名:");
String name = sr.next();
p.setName(name);
System.out.println("请输入修改后的学生年龄:");
int age = sr.nextInt();
p.setAge(age);
System.out.println("请输修改后的学生住址:");
String address = sr.next();
p.setAddress(address);
//将获取到的新内容对象地址替代需要修改的内容对象地址
list.set(x, p);
} else {
System.out.println("输入的id不存在,请重新输入->");
}
return list;
}
//查询==========================================================================================================
public static pupil find(ArrayList<pupil> list, String id) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == null) {
} else {
if (list.get(i).getId().equals(id)) {
return list.get(i);
}
}
}
return null;
}
//----------------------------------------------------------------------------------
//判断id是否唯一
//若输入的id重复就返回索引,全部没有重复返回-1
public static int judeg(ArrayList<pupil> list, String id) {
int i = 0;
for (; i < list.size(); i++) {
//非null判断
if (list.get(i) == null) {
} else {
if (list.get(i).getId().equals(id)) {
return i;
}
}
}
return -1;//返回索引
}
//判断需要输入的是否是数字
public static int number(String num) {
char[] arr = num.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (arr[i] <= '0' || arr[i] > '9') {
return -1;
}
}
int n = 0;
for (int i = 0; i < arr.length; i++) {
n = n * 10 + arr[i] - 48;
}
return n;
}
//---------------------------------------------------------------------
//判断输入的菜单是否正确
public static int menu(String num) {
char[] arr = num.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (arr[i] <= '0' || arr[i] > '6') {
return -1;
}
}
int n = 0;
for (int i = 0; i < arr.length; i++) {
n = n * 10 + arr[i] - 48;
}
return n;
}
//------------------------------------------------------------------------------
//遍历输出
public static void traversal(ArrayList<pupil> list) {
if (list.size() == 0) {
System.out.println("当前无学生信息,请添加后再查询");
} else {
System.out.println("正在打印学生数据");
System.out.println("id是:" + "\t" + "\t" + "姓名是" + "\t" + "\t" + "年龄是" + "\t" + "\t" + "家庭住址是");
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == null) {
} else {
System.out.println(list.get(i).getId() + "\t" + "\t" + list.get(i).getName() +
"\t" + "\t" + list.get(i).getAge() + "\t" + "\t" + list.get(i).getAddress());
}
}
}
}
}