学习IO后的一个小实验项目:
项目要求:
1.录入学生的个人信息:姓名;年龄;性别;学号;
2.对信息进行:增加、删除、查看、更新操作
3.存储方式为:student.txt
Student类:
public class Student {
private String id;
private String name;
private int age;
private String sex;
public Student() {
// TODO Auto-generated constructor stub
}
public Student( String id,String name,int age ,String sex) {
this.age=age;
this.id=id;
this.name=name;
this.sex=sex;
// TODO Auto-generated constructor stub
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
StuOption类:封装了所有用于操作的方法
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.StringTokenizer;
public class StuOption {
public void instert() {
/**
*
* 插入学生信息的方法
*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入姓名:");
String name=sc.next();
System.out.println("请输入性别:");
String sex=sc.next();
System.out.println("输入错误,请重新输入");
sex=sc.next();
System.out.println("请输入学号:");
String id=sc.next();
System.out.println("请输入年龄:");
int age=sc.nextInt();
Student st=new Student(id,name,age,sex);
fileRw(st);
}
public void updat(List<Student> li) {
/**
*将list中的对象写回到新的文件夹中
*/
}
public List<Student> readAllStu() {
/**
* 读取文件里的所有数据,并将它以对象的形式存储在集合里
*/
List <Student> l_s= new ArrayList<Student >();
BufferedReader br=null;
try {
br=new BufferedReader(new FileReader("student.txt")) ;
try {
String sr=br.readLine();
while(sr!=null){
StringTokenizer st=new StringTokenizer(sr);
String sid=st.nextToken();
String sname=st.nextToken();
int sage=Integer.parseInt(st.nextToken());
String ssex=st.nextToken();
Student stu=new Student(sid,sname,sage,ssex);
l_s.add(stu);
sr=br.readLine();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("读取失败");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
try {
if(br!=null){
br.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("关闭失败");
}
}
return l_s;
}
public void fileRw(Student s){
/**
* 将录入的信息写入文件中
* 录入的格式为:____ ____ _____ _____
*/
File fi=new File("student.txt");
BufferedWriter bw = null;
try {
bw=new BufferedWriter(new FileWriter(fi,true));
String str=s.getId()+" "+s.getName()+" "+s.getAge()+" "+s.getSex()+"\r\n";
bw.write(str);
} catch (IOException e) {
e.printStackTrace();
}finally{
if(bw!=null){
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("信息录入失败");
}
}
}
}
public Student findById( String id,List<Student> allStudent) {
/**
* 将根据id查找学生对象的过程写到fidById这个函数里
*/
Student findsu=null;
for (Student stu : allStudent) {
if(stu.getId().equals(id)){
findsu=stu;
break;
}
}
if(findsu!=null){
System.out.println("姓名:"+findsu.getName()+" 年龄:"+findsu.getAge()+" 性别:"+findsu.getSex());
}else{
System.out.println("编号不存在");
}
return findsu;
}
public void list2File(List<Student> li) {
BufferedWriter rw=null;
try {
rw=new BufferedWriter(new FileWriter("student.txt")) ;
for (Student s : li) {
String str=s.getId()+" "+s.getName()+" "+s.getAge()+" "+s.getSex()+"\r\n";
try {
rw.write(str);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("写入失败");
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("文件未找到");
}finally {
try {
if(rw!=null){
rw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void updat_s(Student st) {
/**
* 用于数据的更新
*
*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入姓名:");
String name=sc.next();
System.out.println("请输入性别:");
String sex=sc.next();
System.out.println("请输入年龄:");
int age=sc.nextInt();
String sid=st.getId();
st.setName(name);st.setSex(sex);st.setAge(age);
}
/**
* 主菜单方法:
* 1.展示主菜单选项
* 2.输入选项
* 3.分支判断结构
* 4.函数调用
*/
public void showMain() {
// TODO Auto-generated method stub
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("请选择要进行的操作:");
Scanner sc=new Scanner(System.in);
int choice=sc.nextInt();
StuOption so=null;
switch(choice){
case 1:
System.out.println("添加");
so=new StuOption();
so.instert();
break;
case 2:
/**
* 1.首先输入一个id
* 2.分行读取,将对象信息保存到对象中去
* 3.将对象保存到 List readAllStu()方法将文件的内容以对象的形式封装到list中
* 4.循环遍历List如果相同则返回信息,不同则返回编号
*/
System.out.println("请输入要更新的学生的id:");
String s4=sc.next();
so= new StuOption();
List<Student>allLis4=so.readAllStu();
Student s2=so.findById(s4, allLis4);
System.out.println("请按要求输入要修改的信息");
so.updat_s(s2);
so.list2File(allLis4);
System.out.println("修改成功");
break;
case 3:
/**
* 0.请输入需要删除的人的姓名
* 1.根据查找方法,找到待删除的数据;
* 3.将其进行修改;
* 4.将其写入list对象中
*/
System.out.println("请输入要删除的学生的id:");
String s1=sc.next();
so= new StuOption();
List<Student>allLis2=so.readAllStu();
Student s3=so.findById(s1, allLis2);
allLis2.remove(s3);
so.list2File(allLis2);
System.out.println("删除成功");
break;
case 4:
/**
* 1.首先输入一个id
* 2.分行读取,将对象信息保存到对象中去
* 3.将对象保存到 List readAllStu()方法将文件的内容以对象的形式封装到list中
* 4.循环遍历List如果相同则返回信息,不同则返回编号
*/
//输入:
System.out.println("请输入要查询的学生的id");
String s=sc.next();
//读取
so= new StuOption();
List<Student>allLis1=so.readAllStu();
so.findById(s, allLis1);
break;
case 0:
System.exit(0);
break;
default:
System.out.println("输入有误请重新输入");
}
}
}
主函数:
public class StuMain {
public static void main(String[] args) {
//StuMain sm=new StuMain();
StuOption st=new StuOption();
while(true) {
st.showMain();
}
}
}
本次实验主要为了联系字符流以及文件保存信息的操作。