JAVA练习:学生管理系统(Map-HashMap)

实体类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练习:客户管理系统(数组)

 

 代码不难,有问题留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠诽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值