下面是学生管理系统的细节
学生信息管理系统
1, 定义一个Student学生类,拥有以下属性
编号id(随机生成0-1a-zA-Z,必须唯一,5位)
姓名name
性别sex
年龄age
2, 定义一个学生StudentDao操作类.有以下方法:
页面方法 ui()
添加学生信息 add()
删除学生信息 delete()
修改学生信息 update()
根据编号查询学生信息 selectById()
根据姓名查询学生信息 selectByName()
根据年龄范围查询学生信息 selectByAge()
查询学生信息 selectAll()
定义全局的学生信息集合:
Student[] students = new Student[10];
3, 效果 [ 无限循环进行 ]
*******************
学生信息管理系统
*******************
1- 添加学生信息
2- 修改学生信息
3- 删除学生信息
4- 根据编号查询学生信息
5- 根据姓名模糊查询学生信息
6- 根据年龄范围查询学生信息
7- 查询所有学生信息
8- 退出系统
*******************
请输入你的选择:
1 ---> add()--->控制台收集学生信息,把信息组成对象,放入到集合中 【学号要唯一】
2 ---> update() --> 根据编号来来重新从控制台中输入新的姓名,性别,年龄,进行修改
3 ---> delete() --> 从控制台输入你要删除的学生的编号,遍历集合把该编号的对应的学生信息从集合中删除
4 ---> selectById() --> 从控制台输入你要查询的学生编号,根据学号查询,存在则打印,反之则查无此人
5 ---> selectByName()() -->从控制台输入你要查询的学生姓名的关键字,根据姓名查询,存在则打印,反之则查无此人【contains()】
6 ---> selectByAge() -->从控制台输入你要查询的年龄的最小值和最大值,根据年龄范围查询,存在则打印,反之则查无此人
7 ---> select() -->遍历学生信息集合,打印信息
8 ---> 提示是否退出系统
...........
注意:
删除和修改前必须先根据编号查询进行数据的预览
删除前要提示信息【确定删除吗(Y/N)?】
退出前要提示信息【确定退出系统吗(Y/N)?】
Student类
import java.util.Random;
public class Student {
private String Id;
private String name;
private String sex;
private int age;
private static Random r=new Random();
public Student() {
}
public Student(String name, String sex, int age) {
this.Id=setId();
this.name = name;
this.sex = sex;
this.age = age;
}
public String getId() {
return Id;
}
private String setId() {
Id="";
int a=r.nextInt(3);
char b;
for (int i = 0; i < 5; i++) {
switch (a){
case 0:
b=(char)(r.nextInt(10)+48);
Id+=b;
break;
case 1:
b=(char)(r.nextInt(26)+65);
Id+=b;
break;
case 2:
b=(char)(r.nextInt(26)+97);
Id+=b;
break;
}
}
return Id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student{Id = " + Id + ", name = " + name + ", sex = " + sex + ", age = " + age + "}";
}
}
StudentDao操作类
import java.util.Scanner;
public class StudentDao {
private static int emptyIndex;
private static int indexs;
private StudentDao(){
}
private static Scanner sc=new Scanner(System.in);
//页面方法 ui()
public static void ui(){
System.out.println("*******************");
System.out.println("学生信息管理系统");
System.out.println("*******************");
System.out.println("1- 添加学生信息\n" +
"2- 修改学生信息\n" +
"3- 删除学生信息\n" +
"4- 根据编号查询学生信息\n" +
"5- 根据姓名模糊查询学生信息\n" +
"6- 根据年龄范围查询学生信息\n" +
"7- 查询所有学生信息\n" +
"8- 退出系统\n");
System.out.println("*******************");
System.out.print("请输入你的选择:");
}
//添加学生信息
//控制台收集学生信息,把信息组成对象,放入到集合中 【学号要唯一】
public static void add(Student[] students){
// 检查数组是否已满
emptyIndex=selectNull(students);
if (emptyIndex == -1) {
System.out.println("学生数组已满,无法添加新学生。");
return;
}
Student student=reStudent(students);
students[emptyIndex]=student;
}
//删除学生信息
//从控制台输入你要删除的学生的编号,遍历集合把该编号的对应的学生信息从集合中删除
public static void delete(Student[] students){
System.out.println("请输入要删除学生的编号ID");
String Id=sc.next();
//查找并返回下标
int index = judgeID(students, Id);
if(index==-1){
System.out.println("删除失败");
return;
}
System.out.println(students[index]);
while (true){
System.out.println("确定删除吗(Y/N)?");
String s=sc.next();
if(s.equals("Y")){
break;
} else if (s.equals("N")) {
return;
}else{
System.out.println("无效输入,请输入 Y 或 N");
}
}
//遍历到空字符串
indexs=selectIndex(students);
for (int i = index; i < indexs-1; i++) {
students[i]=students[i+1];
}
students[indexs-1]=null;
}
//修改学生信息
//根据编号来来重新从控制台中输入新的姓名,性别,年龄,进行修改
public static void update(Student[] students){
System.out.println("请输入要修改学生的编号ID");
String Id=sc.next();
int index = judgeID(students, Id);
if(index==-1){
System.out.println("修改失败");
return;
}
System.out.println(students[index]);
Student s=reStudent(students);
students[index].setName(s.getName());
students[index].setAge(s.getAge());
students[index].setSex(s.getSex());
}
//根据编号查询学生信息
//从控制台输入你要查询的学生编号,根据学号查询,存在则打印,反之则查无此人
public static void selectById(Student[] students){
System.out.println("请输入要查询学生的编号ID");
String Id=sc.next();
int index=judgeID(students,Id);
if(index==-1){
System.out.println("查询失败");
}else{
System.out.println(students[index]);
}
}
//根据姓名查询学生信息
//从控制台输入你要查询的学生姓名的关键字,根据姓名查询,存在则打印,反之则查无此人【contains()】
public static void selectByName(Student[] students){
System.out.println("请输入要查询学生姓名的关键字");
String name=sc.next();
indexs=selectIndex(students);
for (int i = 0; i < indexs; i++) {
if(students[i].getName().contains(name)){
System.out.println(students[i]);
}
}
}
//根据年龄范围查询学生信息
//从控制台输入你要查询的年龄的最小值和最大值,根据年龄范围查询,存在则打印,反之则查无此人
public static void selectByAge(Student[] students){
int min=ReturnInt("小");
int max= 0;
while (true) {
max = ReturnInt("大");
if(max>=min){
break;
}else {
System.out.println("请保证最大年龄大于等于最小年龄");
}
}
indexs=selectIndex(students);
for (int i = 0; i < indexs; i++) {
if(students[i].getAge()>=min&&students[i].getAge()<=max){
System.out.println(students[i]);
}
}
}
//查询学生信息
//遍历学生信息集合,打印信息
public static void selectAll(Student[] students) {
indexs=selectIndex(students);
if (indexs==0){
System.out.println("暂无学生信息,请录入学生信息");
return;
}
for (int i = 0; i < indexs; i++) {
System.out.println(students[i]);
}
}
//遍历数组找到空指针地址,如果找不到则为-1
private static int selectNull(Student[] students){
emptyIndex = -1;
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {
emptyIndex = i;
break;
}
}
return emptyIndex;
}
//查询专用长度
private static int selectIndex(Student[] students){
indexs=selectNull(students);
if(indexs==-1){
indexs=students.length;
}
return indexs;
}
//判断UUid是否一样,同时也可以查询uuid的学生下标
//返回-1意味着找不到
private static int judgeID(Student[] students,String Id){
indexs=selectIndex(students);
for (int i = 0; i < indexs; i++) {
if(students[i].getId().equals(Id)){
return i;
}
}
return -1;
}
//输入判断条件
private static Student reStudent(Student[] students){
System.out.print("请输入姓名");
String name=sc.next();
String sex;
int age;
while (true) {
System.out.print("请输入性别:(男/女)");
sex=sc.next();
if(sex.equals("男")||sex.equals("女")){
break;
}else{
System.out.println("请输入合法的性别:(男/女)");
}
}
while (true) {
try {
System.out.print("请输入年龄");
age=sc.nextInt();
if(age>0&&age<150){
break;
}else{
System.out.println("请输入合法的年龄:");
}
} catch (Exception e) {
System.out.println("输入无效字符");
sc.nextLine();
}
}
Student student=new Student(name,sex,age);
int i = judgeID(students, student.getId());
while(i!=-1){
student=new Student(name,sex,age);
i = judgeID(students, student.getId());
}
return student;
}
//判断年龄合法并防止键盘录入字符
private static int ReturnInt(String s){
int x;
while (true) {
try {
System.out.print("请输入要查询学生年龄的最"+s+"值:");
x=sc.nextInt();
if(x>=0&&x<=150){
break;
}else {
System.out.println("请输入合法年龄");
}
} catch (Exception e) {
System.out.println("输入无效字符");
sc.nextLine();
}
}
return x;
}
}
Test类
package Day0821;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Student[] students = new Student[10];
students[0]=new Student("小白","女",46);
students[1]=new Student("小率","女",11);
students[2]=new Student("红花白","女",15);
students[3]=new Student("版本白","女",16);
repeat(students);
}
//键盘录入对象
static Scanner sc=new Scanner(System.in);
//选择方法
private static boolean elect(int choice,Student[] students) {
switch (choice){
case 1:
StudentDao.add(students);
break;
case 2:
StudentDao.update(students);
break;
case 3:
StudentDao.delete(students);
break;
case 4:
StudentDao.selectById(students);
break;
case 5:
StudentDao.selectByName(students);
break;
case 6:
StudentDao.selectByAge(students);
break;
case 7:
StudentDao.selectAll(students);
break;
case 8:
while (true){
System.out.println("确定退出系统吗(Y/N)?");
String s=sc.next();
if(s.equals("Y")){
return false;
} else if (s.equals("N")) {
break;
}else{
System.out.println("无效输入,请输入 Y 或 N");
}
}
break;
default:
System.out.println("请输入正确的选择");
}
return true;
}
//循环整个结构
private static void repeat(Student[] students) {
boolean a=true;
int choice;
while(a){
StudentDao.ui();
try {
choice=sc.nextInt();
a=elect(choice,students);
} catch (Exception e) {
System.out.println("输入无效字符");
// 清除输入缓冲
sc.nextLine();
}
}
}
}