实体类Student用来封装客户信息。
控制类StudentController用来操控实体对象。
View类用来显示信息与用户交互。
Text类用来测试系统。
运行效果:
Student.java
/**
* 描述:
* @date 2018年8月16日 下午6:59:03
* @version v1.0
*/
public class Student implements Comparable<Student> {
/**
* @ 学生信息类
*
*/
private Integer id; // ID学号
private String name; // 姓名
private String sex; // 性别
private Integer age; // 年龄
private String phone;// 联系方式
// 不允许创建空对象
// public Customer() {
// }
// 允许地址、联系方式为空构建对象
public Student(Integer id, String name, String sex, int age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public Student(Integer id, String name, String sex, int age, String phone) {
this(id, name, sex, age);
this.phone = phone;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = 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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return String.format("学号:%s姓名:%s,性别:%s,年龄:%d,电话:%s", id, name, sex, age,
phone);
}
@Override
public int compareTo(Student student) {
int l = this.id - student.id;
return l == 0 ? this.name.compareTo(student.name) : l;
}
}
StudentController.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class StudentController {
// key存储学号,value存储学生信息
Map<Integer, Student> map = null;
public StudentController() {
map = new HashMap<>();
}
/**
* 添加保存一个学生对象
* @param student 需要添加的学生对象
* @return false 已经存在
* @return true 添加成功
*/
public boolean add(Student student) {
Integer id = student.getId();
if (map.containsKey(id)) {
return false;// 已经存在
} else {
map.put(id, student);
return true;
}
}
/**
* 删除一个学生对象
* @param id 要删除学生学习的id
* @return 删除成功返回删除的对象
* 删除失败返回null
*/
public Student remove(Integer id) {
return map.remove(id);
}
/**
* 删除一个学生对象
* @param student 要删除学生对象
* @return 删除成功返回删除的对象
* 删除失败返回null
*/
public Student remove(Student student) {
return map.remove(student.getId());
}
/**
* 修改学生信息,如若修改id,推荐使用此方法
* @param id 原学生对象的id信息
* @param student 修改后的学生对象信息
*/
public void update(Integer id, Student student) {
// 删除原ID对象
map.remove(id);
// 放入新对象信息
map.put(student.getId(), student);
}
/**
* 修改学生信息,不修改id得情况下使用此方法
* @param student 修改后的学生对象信息
*/
public void update(Student student) {
map.put(student.getId(), student);
}
/**
* 查找一条学生信息
* @param id 要查询学生对象的id
* @return 查询到的学生对象,无此对象返回null
*/
public Student query(Integer id) {
if (map.containsKey(id)) {
return map.get(id);
} else {
return null;
}
}
/**
* 得到保存的所有信息
* @return 一个存有所有信息list
*/
public List<Student> getAll() {
List<Student> list = new ArrayList<>();
Set<Integer> set = map.keySet();
for (Integer integer : set) {
list.add(map.get(integer));
}
return list;
}
}
View.java
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class View {
private Scanner input;
private StudentController cc;
private static final View view = new View();
private View() {
input = new Scanner(System.in);
cc = new StudentController();
}
public static View getInstance() {
return view;
}
/**
* 系统初始化,让系统运行前就有一部分数据,方便测试用.
*/
public void init() {
cc.add(new Student(151164414, "小华", "男", 18, "1234567"));
cc.add(new Student(151164415, "小李", "男", 20, "6789231"));
cc.add(new Student(151164416, "王二", "男", 19, "6735244"));
Student c4 = new Student(151164413, "小名", "女", 17, "8913496");
cc.add(c4);
cc.add(c4);
System.out.println("学生信息列表:");
showAll();
System.out.println("以上为初始化学生信息列表,方便测试用.\n\n");
}
/**
* 启动系统
*/
public void run() {
boolean flag = true;
exit: while (flag) {
menu();
int i = input.nextInt();
input.nextLine();
switch (i) {
case 1:
addAcc();
break;
case 2:
delAcc();
break;
case 3:
reviseAcc();
break;
case 4:
quaryAcc();
break;
case 5:
showAll();
break;
case 6:
break exit;
default:
break;
}
} // while
input.close();
System.out.println("系统退出");
}// run
/**
* 显示菜单界面
*/
public void menu() {
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(" 6. 退出系统");
System.out.println("==========================");
System.out.print(" 请选择1~6: ");
}
/**
* 构建一个完整学生对象
* @param student 需要添加数据的学生对象
* @param flag 需要添加的数据
*/
public void newAcc(Student student, int flag) {
String string = "";
boolean ok = false;
do {
if (flag == 0 || flag == 1) {
System.out.print("\t学号: ");
string = input.nextLine();
if (string.matches("[\\d]{9}")) {
student.setId(Integer.valueOf(string));
ok = true;
} else {
System.out.println("error:学号必须为9位数字\n请重新输入:");
}
}
if (flag == 0 || flag == 2) {
System.out.print("\t姓名: ");
string = input.nextLine();
student.setName(string);
ok = true;
}
if (flag == 0 || flag == 3) {
System.out.print("\t性别: ");
string = input.nextLine();
student.setSex(string);
ok = true;
}
if (flag == 0 || flag == 4) {
System.out.print("\t年龄: ");
String ageStr = input.nextLine();
if (ageStr.matches("[\\d]{1,3}")) {
student.setAge(Integer.parseInt(ageStr));
ok = true;
} else {
System.out.println("error:年龄必须为1~3位数字\n请重新输入:");
}
}
if (flag == 0 || flag == 5) {
System.out.print("\t电话: ");
string = input.nextLine();
if (string.matches("[\\d]{7,11}")) {
student.setPhone(string);
ok = true;
} else {
System.out.println("error:手机号必须为7~11位数字\n请重新输入:");
}
}
} while (!ok);
}
/**
* 添加一条学生信息
*/
public void addAcc() {
System.out.println("请输入要添加学生的信息:");
Student student = new Student(151164461, "", "", 0);
newAcc(student, 0);
if (cc.add(student)) {
System.out.println("添加成功!");
System.out.println(student);
} else {
System.out.println("添加失败!");
}
}
/**
* 删除一条学生信息
*/
public void delAcc() {
System.out.print("请输入要删除的学号:");
String id = input.nextLine();
Student student = cc.remove(Integer.valueOf(id));
if (student == null) {
System.out.println("不存在该联系人!");
} else {
System.out.println(student);
System.out.println("学生删除成功!");
}
showAll();
}
/**
* 修改学生信息
*/
public void reviseAcc() {
System.out.print("请输入要修改学号:");
String str = input.nextLine();
int id = Integer.parseInt(str);
Student student = cc.query(id);
if (student == null) {
System.out.println("不存在该学生~");
return;
}
System.out.println(student);
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(" 6. 结束修改");
System.out.println("==========================");
System.out.print(" 请选择1~6: ");
int i = Integer.parseInt(input.nextLine());
if (i == 6) {
break;
}
newAcc(student, i);
} // while
cc.update(id, student);
System.out.println("修改成功!");
System.out.println(student);
}
/**
* 查看一条学生信息
*/
public void quaryAcc() {
System.out.print("请输入要查看学生的学号:");
String str = input.nextLine();
Student c1 = cc.query(Integer.parseInt(str));
if (c1 == null) {
System.out.println("不存在该学生");
} else {
System.out.println(c1);
}
}
/**
* 显示所有学生信息,默认升序排序
*/
public void showAll() {
List<Student> list = cc.getAll();
Collections.sort(list);
System.out.println("==========================");
System.out.println("总共" + list.size() + "条信息:");
for (Student student : list) {
System.out.println(student);
}
System.out.println();
}
}
Test.java
public class Test {
public static void main(String[] args) {
View view = View.getInstance();
view.init();
view.run();
}
}
其他类似源码:JAVA练习:客户管理系统(数组)
代码不难,有问题留言。