文章目录
- 一、程序功能
- 功能概述
- 二、程序包括的学生信息
- 三、编程实现
- 1.建立学生实体类
- 2.学生实体类代码编写
- (1)无参构造方法
- (2)有参构造方法
- (3)完整的代码
- 2.建立学生信息管理
- 3.建立学生数组列表对象
- 4.登录方法
- 5.学生信息管理方法
- (1)一级菜单
- (2)二级菜单
- (3)完整学生管理方法代码
- 6.添加学生信息方法
- 7.将学生信息保存到文件
- (1)文件名
- (2)完整代码
- (3)调用学生信息保存方法
- 8.读取学生信息并保存到学生数组列表
- (1)读取源
- (2)读取学生信息完整代码
- (3)调用读取学生信息方法
- 9.查询学生信息
- (1)判断按哪种查询
- (2)按学生姓名查询
- (3)按学生学号查询
- (4)按学生学号和姓名一起查询
- (5)三种查询情况的完整代码
- (6)调用查询学生信息方法
- 10.修改学生信息
- (1)判断学生是否找到
- (2)修改学习学习的完整代码
- (3)调用学生信息修改方法
- 11.删除学生信息
- (1)删除学生信息的完整代码
- (2)调用删除学生信息方法
- 四、编程实现完整代码
- 五、测试程序
- 1.运行程序,登录系统
- 2.添加学生信息
- 3.保存学生信息到文件
- (1)保存学生信息
- (2)查看文件
- 4.查询学生信息
- (1)按学生学号查询
- (2)按学生姓名查询
- (3)同时按学号和姓名查询
- 5.修改学生信息
- (1)将王明改成张心怡
- (2)将楚梦瑶的班级改为学前五班
- 6.删除学生信息(删除学号为202203)
- 7.读取学生信息
- 8.退出程序
- 六.实训总结
- 1.实训项目存在不足的地方
- 2.实训项目的有点
- 3.实训个人感悟
一、程序功能
功能概述
- 利用Java完成一个学生信息程序的简单改动。
- 添加学生信息
- 修改学生信息
- 查询学生信息
- 删除学生信息
二、程序包括的学生信息
1.学号
2.姓名
3.班级
4.专业
5.电话号码
- 当然,这只是简单的包括几个信息,其他的信息,如果也想要可以自己加入
三、编程实现
1.建立学生实体类
- 在test包里建立student(学生实体类)
2.学生实体类代码编写
(1)无参构造方法
(2)有参构造方法
- 我采用的是有参构造方法
(3)完整的代码
/**
* 功能:学生实体类
* 作者:孤梦
* 日期:2022年05月26日
*/
public class Student {
private String id;
private String name;
private String classes;
private String major;
private String telephone;
/**
* 无参构造方法
*/
public Student() {
}
/**
* 有参构造方法
* @param id
* @param name
* @param classes
* @param major
* @param telephone
*/
public Student(String id, String name, String classes, String major, String telephone) {
this.id = id;
this.name = name;
this.classes = classes;
this.major = major;
this.telephone = telephone;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
@Override
public String toString() {
return "Card{" +
"id='" + id + ''' +
", name='" + name + ''' +
", classes='" + classes + ''' +
", major='" + major + ''' +
", telephone='" + telephone + ''' +
'}';
}
}
2.建立学生信息管理
- 继续在test包里创建----StudentManagement(学生信息管理)
3.建立学生数组列表对象
private static ArrayList<Student> students = new ArrayList<>();
public static void main(String[] args) {
// 声明部分
int mc1;
Scanner sc = new Scanner(System.in);
boolean isRunning = true; // 循环控制变量
while (isRunning) {
// 绘制一级菜单
System.out.println(" 学生信息管理系统");
System.out.println("================");
System.out.println(" 1. 登录");
System.out.println(" 0. 退出");
System.out.println("================");
System.out.print("输入菜单编号[1,0]:");
mc1 = sc.nextInt();
// 根据用户选择进行相应的操作
switch (mc1) {
case 1:
// 调用登录方法
login();
break;
case 0:
System.out.println("谢谢使用~再见~");
isRunning = false; // 结束循环
break;
default:
System.out.println("输入的菜单编号有误!");
}
}
}
-创建好了列表,下面就该解决如何登录了
4.登录方法
/**
* 登录方法
*/
private static void login() {
String username, password;
Scanner sc = new Scanner(System.in);
System.out.print("用户名:");
username = sc.next();
System.out.print("密 码:");
password = sc.next();
if (username.equals("gumeng") && password.equals("1314520")) {
System.out.println("登录成功~");
// 调用学生信息管理方法
studentManagement();
} else {
System.out.println("用户名或密码有误,登录失败~");
}
}
- 这里的登录账号是:gumneg ,登录密码是:1314520
- 登录账号和密码随自己的喜好设置
5.学生信息管理方法
(1)一级菜单
- 在上面我们已经建立了一级菜单
(2)二级菜单
- 下面我们绘制二级菜单,二级菜单是我们成功登录进去后的功能面板
- 总共有七个功能面板
1、添加学生信息
2、修改学生信息
3、查询学生信息
4、删除学生信息
5、读取学生信息
6、保存学生信息
7、返回上级菜单
- 分别对每个功能面板进行编写
(3)完整学生管理方法代码
/**
* 学生信息管理方法
*/
private static void studentManagement() {
int mc2;
Scanner sc = new Scanner(System.in);
boolean isRunning = true; // 循环控制变量
while (isRunning) {
// 绘制二级菜单
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(" 7. 返回上级");
System.out.println("=======================");
System.out.print("输入菜单编号[1,2,3,4,5,6,7]:");
mc2 = sc.nextInt();
switch (mc2) {
case 1:
System.out.println("执行添学生信息功能~");
break;
case 2:
System.out.println("执行修改学生信息功能~");
break;
case 3:
System.out.println("执行查询学生信息功能~");
break;
case 4:
System.out.println("执行删除学生信息功能~");
break;
case 5:
System.out.println("读取学生信息文件到学生数组列表~");
break;
case 6:
System.out.println("将学生信息数组列表写入名片文件~");
break;
case 7:
isRunning = false; // 结束二级菜单循环
break;
default:
System.out.println("输入的菜单编号有误!");
}
}
}
6.添加学生信息方法
/**
* 添加学生信息方法
*/
private static void addStudent() {
// 声明变量
String id;
String name;
String classes;
String major;
String telephone;
Scanner sc = new Scanner(System.in);
// 输入学生信息
System.out.print("学号:");
id = sc.next();
System.out.print("姓名:");
name = sc.next();
System.out.print("班级:");
classes = sc.next();
System.out.print("专业:");
major = sc.next();
System.out.print("手机号码:");
telephone = sc.next();
// 创建学生对象
Student student = new Student(id, name, classes, major,telephone);
// 将学生信息添加到学生数组列表
students.add(student);
}
- 将学生添加到学生数组列表
- 添加学生总不能不保存,所以下面我们要将学生信息保存到文件
7.将学生信息保存到文件
(1)文件名
这是学生信息将要保存的文件名,当然文件可以随便自己设置
(2)完整代码
/**
* 保存学生信息到文件
*/
private static void saveStudents() {
try {
// 创建文件字符输出流
FileWriter fw = new FileWriter("students.txt");
// 创建学生容器字符串缓冲对象
StringBuffer cardsBuffer = new StringBuffer();
// 用增强for循坏遍历学生数组列表
for (Student student : students) {
// 输出学生对象
System.out.println(student);
// 创建学生字符串缓冲对象
StringBuffer buffer = new StringBuffer();
// 添加学生字段信息(空格作为分隔符)
buffer.append(student.getId() + " ");
buffer.append(student.getName() + " ");
buffer.append(student.getClasses() + " ");
buffer.append(student.getMajor() + " ");
buffer.append(student.getTelephone());
// 将学生信息写入名片容器字符串缓冲对象
cardsBuffer.append(buffer.toString() + "n");
}
// 将学生容器字符串缓冲对象的数据写入文件
fw.write(students.toString());
// 关闭文件字符输出流
fw.close();
// 提示用户写入成功
System.out.println("恭喜,学生信息数据写入文件成功~");
} catch (IOException e) {
e.printStackTrace();
}
}
(3)调用学生信息保存方法
- 写好了要在保存学生信息功能面板上调用
8.读取学生信息并保存到学生数组列表
(1)读取源
- 你是从哪个文件读取的学生信息,这里读取名和上面的保存名要一致,不然读取不到学生信息
(2)读取学生信息完整代码
- 在这里还有一个问题,如果文件名没有问题,但是你要读取的学生不存在的话程序要出错,所以我们正在这里要把好关
/**
* 读取学生信息文件,保存到学生数组列表
*/
private static void readStudentFile() {
// 创建文件字符输入流
try {
FileReader fr = new FileReader("students.txt");
// 创建缓冲字符输入流
BufferedReader br = new BufferedReader(fr);
// 定义行变量
String nextLine = " ";
// 通过循坏读取名片文件
while ((nextLine = br.readLine()) != null) {
// 拆分行字符串得到字段数值
String[] fields = nextLine.split(" ");
// 创建学生对象
Student student = new Student();
// 用字段数值设置对象属性
student.setId(fields[0]);
student.setName(fields[1]);
student.setClasses(fields[2]);
student.setMajor(fields[3]);
student.setTelephone(fields[4]);
// 输出学生对象
System.out.println("添加" + student + "到学生数组列表");
// 将学生对象添加到学生数组列表
students.add(student);
}
// 关闭缓冲字符输入流
br.close();
// 关闭文件字符输入流
fr.close();
} catch (FileNotFoundException e) {
System.out.println("温馨提示:学生文件不存在~");
} catch (IOException e) {
e.printStackTrace();
}
}
(3)调用读取学生信息方法
9.查询学生信息
(1)判断按哪种查询
- 怎样查询学生信息呢?是按学号查询还是按姓名查询呢?还是一起查询?
// 判断用户按哪种方式查询学生信息
if (id.equals("")) {
if (name.equals("")) { // 查询全部学生
// 遍历名片数组列表
for (Student student : students) {
System.out.println(student.getId() + " "
+ student.getName() + " " + student.getClasses() + " "
+ student.getMajor() + " " + student.getTelephone());
}
(2)按学生姓名查询
System.out.println("~按姓名查询学生信息~");
boolean found = false;
// 遍历学生数组列表,按姓名来找
for (Student student : students) {
if (student.getName().equals(name)) {
found = true; // 找到了
break;
}
}
- 当查询的时候遇到同名情况怎么办,所以我们要解决这个问题
if (found) {
// 针对可能存在的同名情况
for (Student student : students) {
if (student.getName().equals(name)) {
System.out.println(student.getId() + " "
+ student.getName() + " " + student.getClasses() + " "