1.学生类的建立
public class Student {
//学生属性的私有封装
private String id;
private String name;
private int age;
//学生类空参构造
public Student() {
//对父类进行空参初始化
super();
// TODO Auto-generated constructor stub
}
public Student(String id, String name, int age) {
//对父类进行空参初始化
super();
this.id = id;
this.name = name;
this.age = age;
}
// 可以通过外部访问学生类私有的属性方法
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
2.主函数的建立
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
//带主方法的测试类
public class IOStudentSystem {
public static void main(String[] args) throws IOException {
// 学生管理系统界面的创建
System.out.println("--------欢迎来到学生管理系统-----------");
System.out.println("1 显示所有学生信息:");
System.out.println("2 添加学生的信息:");
System.out.println("3 删除学生信息:");
System.out.println("4 修改学生信息:");
System.out.println("5 退出:");
// 新建键盘输入对象
Scanner input = new Scanner(System.in);
// 新建用于存储txt文档读入信息的集合对象
ArrayList<Student> list = new ArrayList<Student>();
read(list);// 讲txt内信息读入集合的方法
// 利用while循环多次运行系统
while(true) {
System.out.println("请选择需要的进程:");
int key = input.nextInt();
//根据输入的选项用switch语句进行相关程序的跳转
switch(key) {
case 1:show(list);// 显示集合内的信息的方法即学生系统的内容
break;
case 2:{
addStudent(list);//添加学生信息方法
write(list);//将更改后的集合写入txt文档
}
break;
case 3:{
delStudent(list);//删除学生信息方法
write(list);//将更改后的集合写入txt文档
}
break;
case 4:{
modifyStudent(list);//修改学生信息
write(list);//将更改后的集合写入txt文档
}
break;
case 5:
default :{
System.out.println("退出");
System.exit(0);
}
break;
}
}
}
//实现主函数上的方法
3.集合与txt文件的读写方法
3.1.txt文件数据读入集合
public static void read (ArrayList<Student> list) throws IOException {
//创建缓冲流输入对象
BufferedReader br = new BufferedReader(new FileReader("studentfile.txt"));
String str;//创建字符串变量用于在下面while语句临时存储txt每行读入的字符串
//利用while语句将txt文件每行字符串依次存入临时变量str,利用str作为临时媒介讲每行信息存入集合中
while((str = br.readLine()) != null) {
//利用String类中的split方法提取学生属性信息
String[] strlist = str.split(",");
//将字符串转化为数字(也可以用Integer 类中的 intValue()方法对字符串类数字向int类转换目前方 法由自己编写)
int age = StringToNum(strlist[2]);
将集合每个Student类数据对Student类对象进行初始化;
Student stu = new Student(strlist[0],strlist[1],age);
//将初始化的对象放入集合中
list.add(stu);
}
br.close();
}
3.2.集合数据写入txt文件
public static void write (ArrayList<Student> list) throws IOException {
//创建缓冲流输出对象
BufferedWriter bw = new BufferedWriter(new FileWriter("studentfile.txt"));
//利用for循环将集合内数据写到txt文件中
for(int i = 0; i < list.size(); i++) {
bw.write(list.get(i).getId()+","+list.get(i).getName()+","+list.get(i).getAge());
bw.newLine();
}
bw.flush();
bw.close();
}
4.学生管理系统的增删改方法
4.1.增
public static void addStudent(ArrayList<Student> list) {
Scanner input = new Scanner(System.in);
System.out.println("请输入添加的学生信息:");
//创建布尔类标记变量,用于条件的判断
boolean flag = false;
System.out.println("请输入添加的学生学号:");
String id = input.next();
while(true) {
// 便利集合寻找目标学号
for(int i = 0; i < list.size(); i++) {
//如找到跳出for循环,flag为true,如果未找到循环运行至结束flag仍为flase
if(id.equals(list.get(i).getId())) {
flag = true;
break;
}
}
if(flag) {
System.out.println("你输入的学号已被占用,请重新输入");
id = input.next();
} else {
break;
}
}
4.2删
public static void delStudent(ArrayList<Student> list) {
Scanner input = new Scanner(System.in);
System.out.println("请输入删除的学生学号:");
String id = input.next();
//遍历集合找到目标学号利用ArrayList<>集合类的remove方法删除集合中对象
for(int i = 0; i < list.size(); i++) {
if(id.equals(list.get(i).getId())) {
list.remove(i);
return;
}
}
System.out.println("你输入的学号不存在");
}
4.3改
public static void modifyStudent(ArrayList<Student> list) {
Scanner input = new Scanner(System.in);
System.out.println("请输入修改的学生学号:");
String id = input.next();
//遍历集合找到目标学号利用
for(int i = 0; i < list.size(); i++) {
if(id.equals(list.get(i).getId())) {
boolean flag = false;
System.out.println("请输入添加的学生学号:");
id = input.next();
// 利用while语句对学好进行查重检查
while(true) {
for(int j = 0; j < list.size(); j++) {
if(id.equals(list.get(i).getId()) && i != j) {
flag = true;
break;
}
}
if(flag) {
System.out.println("你输入的学号已被占用,请重新输入");
id = input.next();
} else {
break;
}
}
System.out.println("请输入添加修改后的学生姓名:");
String name = input.next();
System.out.println("请输入添加修改后的学生年龄:");
int age = input.nextInt();
list.get(i).setId(id);
list.get(i).setName(name);
list.get(i).setAge(age);
break;
}
}
}
5.将学生信息输出到控制台
public static void show(ArrayList<Student> list) {
if(list.size() == 0) {
System.out.println("系统中无学生");
}else {
System.out.println("学号\t\t姓名\t年龄");
for(int i = 0; i < list.size(); i++) { System.out.println(list.get(i).getId()+"\t\t"+
list.get(i).getName()+"\t"+list.get(i).getAge());
}
}
}
6.将数字字符串转化为整数
public static int StringToNum(String str) {
int num = 0;
char[] ch = str.toCharArray();
int j = 1;
for(int i = str.length() -1;i >= 0; i--) {
num += ch[i] * j;
j *= 10;
}
return num;
} |
|