需求:
A:
欢迎使用学生信息管理系统
请选择要使用的功能:
1. 录入学生信息
请输入学号
请输入姓名
请输入成绩
调用 B 的方法添加学生数据
录入成功
2. 查看学生信息
调用 B 的方法获取所有学生数据
遍历展示:学号 姓名 成绩
3. 修改学生成绩
请输入要修改的学生学号
请输入修改后的成绩
调用 B 的方法根据学号修改成绩
修改成功
4. 删除学生信息
请输入要删除的学生学号
调用 B 的方法根据学号删除学生数据
删除成功
5. 退出程序
1,2,3,4 执行后可以重新选择功能
B:
拥有一个 ArrayList 属性,保存所有学生数据
添加学生数据
创建学生对象
加入到集合中
获取所有学生数据
返回集合
根据学号修改成绩
遍历集合
比较学号,找到学生对象
修改学生对象的成绩属性
根据学号删除学生数据
遍历集合
比较学号,找到索引
根据索引删除集合中的数据
先创建一个接口:
import java.util.ArrayList;
//Service 业务逻辑(功能)
//定义共嫩恶搞的接口通常以Service 结尾,表明接口中的方法都是程序的功能
public interface StudentService {
/**
* 添加学生信息
* @param student 学生信息
*/
void add(Student student);
/**
* 获取所有学生信息
* 一个Student 只包含一个学生信息
* 多个 学生的信息必须放入集合中
* @return 包含所有学生信息的集合
*/
ArrayList<Student> list();
/**
* 修改指定学号学生的成绩
* @param number 学号
* @param score 修改后的成绩
*/
void update(int number, double score);
/**
* 删除指定学号学生信息
* @param number 学号
*/
void delete(int number);
}
建立一个 Student 类:
//定义Student 类封装学生的信息
public class Student {
//定义属性的时候,使用包装类型代替基本属性
private Integer number;
private String name;
private Double score;
public Student() {
super();
}
public Student(Integer number, String name, Double score) {
super();
this.number = number;
this.name = name;
this.score = score;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "[学号:" + number + "\t姓名:" + name + "\t成绩:" + score + "]";
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
}
建一个 实现 接口 的类:
import java.util.ArrayList;
//通常实现了某个接口的类,命名的的时候会在接口名后面加上Impl
public class StudentServiceImpl implements StudentService {
//定义一个集合属性 保存所有学生的信息
private ArrayList<Student> students = new ArrayList<Student>();
@Override
public void add(Student student) {
//把新的学生信息保存到集合中
students.add(student);
}
@Override
public ArrayList<Student> list() {
//返回所有学生的集合
return students;
}
@Override
public void update(int number, double score) {
//便利比较学号,找到对应的学生
for (Student student : students) {
if(number == student.getNumber()) {
//修改成绩找到的学生成绩
student.setScore(score);
break;//后续学生不用再比较了
}
}
}
@Override
public void delete(int number) {
//便利比较学号,找到对应的学生
//在遍历集合或者数组的时候,不允许删除和添加数据,长度变化,或许会带来潜在风险
//在便利中记录需要删除的数据,在便利结束后,统一删除
Student deleteStudent = null;//需要删除的学生信息
for (Student student : students) {
if(number == student.getNumber()) {
//记录需要删除的学生信息
deleteStudent = student;
break;//后续学生不用再比较了
}
}
//删除指定学生信息
students.remove(deleteStudent);
}
}
建一个与用户交互的类:
import java.util.ArrayList;
import java.util.Scanner;
//通常 负责和用户交互的类叫做 Controller
public class StudentController {
//定义接口的属性 用来调用相关方法
//为属性生成getter && setter 方法
private StudentService studentService;
public StudentService getStudentService() {
return studentService;
}
public void setStudentService(StudentService studentService) {
this.studentService = studentService;
}
//程序从这里启动
public void start () {
//负责读取用户输入的数据
Scanner sc = new Scanner(System.in);
System.out.println("-=-=-=-=-=-=-=-=--=-=-=-=-=-=-");
System.out.println("| 欢迎使用学生成绩管理系统 |");
System.out.println("-=-=-=-=-=-=-=-=--=-=-=-=-=-=-");
while(true) {
System.out.println("—————————");
System.out.println("请选择要使用的功能");
System.out.println(" 输入对应的编号");
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("—————————");
//读取用户输入的编号
int systemNumber = sc.nextInt();
switch (systemNumber) {
case 1:{
//输入学生信息
System.out.println("请输入学生学号");
int number = sc.nextInt();
System.out.println("请输入学生姓名");
String name = sc.next();
System.out.println("请输入学生成绩");
double score = sc.nextDouble();
//把信息保存为Student对象
Student student = new Student(number, name, score);
//调用方法保存学生信息
studentService.add(student);
}
break;
case 2:{
//查看所有学生信息
//调用方法获取所有学生信息
ArrayList<Student> students = studentService.list();
//遍历所有学生信息
for (Student student : students) {
//更好的方案是,重写Student 的 toString()方法
System.out.println(student.toString());
}
}
break;
case 3:{
//修改学生成绩
System.out.println("请输入学号");
int number = sc.nextInt();
System.out.println("请输入修改后的成绩");
double score = sc.nextDouble();
//调用修改成绩得方法
studentService.update(number, score);
System.out.println("成绩修改成功...\n已修改为:" + score);
}
break;
case 4:{
//删除学生信息
System.out.println("请输入要删除的学生的学号");
int deleteNumber = sc.nextInt();
//调用删除方法
studentService.delete(deleteNumber);
System.out.println("学生[" + deleteNumber + "]信息已删除...");
}
break;
case 5:{
System.out.println("—————————");
System.out.println("| 欢迎下次使用 |");
System.out.println("—————————");
System.exit(0);//突出程序
}
break;
default: {
System.out.println("请输入正确的编号...\n");
}
}
}
}
}
建立一个程序运行类
public class Application {
public static void main(String[] args) {
StudentController controller = new StudentController();
StudentServiceImpl service = new StudentServiceImpl();
/*
* controller == 插座/电脑
* service == 插销/鼠标
* studentService 属性 == 插口/usb 接口
*/
//把A和B连接在一起
controller.setStudentService(service);
//启动程序
controller.start();
}
}