java學生管理系統(IO流和檔案實現)
利用IO流和檔案的儲存和讀取來實現學生管理系統,核心在於使用集合ArrayList<E>和IO流讀取和寫入,需要掌握以下知識點:
(1)ArrayList<E>介面實現可變陣列的大小,E代表陣列型別,E為什麼,定義的物件即為什麼型別,常用的功能是增刪查改功能,呼叫方法如下,
新增元素 void add(int index,E element) 在指定位置新增元素,bealoon add(E element)在列表尾部新增元素
刪除元素 E remove(int index)刪除指定位置的元素
檢視元素 E get(int index)檢視指定位置的元素
修改元素 E set(int index)修改指定位置的元素
清除全部元素 void clear() 清除列表中所有元素
(2)檔案的讀取和寫入
讀取:構造方法:FileReader(Reader in)傳入的物件是要讀取的檔案(必須存在,不存在會報錯),讀資料的方法 int read() 讀取一個字元 int read(char[] ch,int off, int len )從陣列指定位置開始讀取一定長度,讀取結束一定要關閉資源 void close()
寫入:構造方法:FileWriter(Writer in)傳入的物件是要寫入的檔案(若不存在,會自動建立),寫資料方法 int Writer()根據傳入的引數不同,寫入形式不同。用完也要關閉資源。
為了高效寫入和讀出,用到BufferedFileReader()和BufferedFileWriter(),和上述的區別在於構造方法中傳入的引數型別不對,這裡需要傳入的是FileReader和FileWriter物件,其他類同,可以參照。
學生管理系統分4個部分(1)檢視所有學生資訊,先從檔案中讀取資料,傳到集合中,通過集合的長度來看是否有學生資訊,有的話,順序輸出。
(2)新增學生,先從檔案中讀取資料,傳到集合中,輸入新增學生的學號,進行判斷,存在的話,提示重新輸入,不存在的話,依次輸入資訊,新增到集合中,再寫入檔案中
(3)刪除學生 先從檔案中讀取資料,傳到集合中,輸入刪除學生的學號,進行判斷,不存在的話,提示重新輸入,存在的話,從集合中刪除該元素,再寫入檔案中
(4)修改資訊 先從檔案中讀取資料,傳到集合中,輸入修改學生的學號,進行判斷,不存在的話,提示重新輸入,存在的話,依次輸入資訊,在集合中修改元素,再寫入檔案中
具體程式碼如下:
學生類
package com.holiday.test.student;
public class Student {
private String name;
private String age;
private String id;
private String place;
public Student(){
}
public Student(String name,String age,String id,String place) {
this.name=name;
this.age=age;
this.id=id;
this.place=place;
}
public void setName(String name) {
this.name=name;
}
public void setAge(String age) {
this.age=age;
}
public void setId(String id){
this.id=id;
}
public void setPlace(String place){
this.place=place;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
public String getId() {
return id;
}
public String getPlace() {
return place;
}
主類 ArrayDemo類
package com.holiday.test.student;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayDemo {
public static void main(String[] args) throws IOException {
ArrayList<Student> students=new ArrayList<Student>();
while(true){
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 number=sc.nextInt();
switch(number) {
case 1: //檢視所有學生
ReaderStudent(students,"students.txt");
students.clear();break;
case 2:// 新增學生
addStudent(students,"students.txt");
students.clear();break;
case 3:// 刪除學生
deleteStudent(students,"students.txt");
students.clear();break;
case 4: //修改學生
updataStudent(students,"students.txt");
students.clear();break;
case 5: System.out.println("歡迎使用學生管理系統");
System.exit(0);
break;
}
}
}
public static void Writer(ArrayList<Student> students,String filename) throws IOException{
BufferedWriter bw=new BufferedWriter(new FileWriter(filename));
for(int i=0;i<students.size();i++) {
Student s1=students.get(i);
StringBuilder sb=new StringBuilder();
sb.append(s1.getId()).append(",").append(s1.getAge()).append(",").append(s1.getName()).append(",").append(s1.getPlace());
bw.write(sb.toString());
bw.newLine();
bw.flush();
}
bw.close();
}
public static void Reader(ArrayList<Student> students,String filename) throws IOException {
BufferedReader br=new BufferedReader(new FileReader(filename));
String ch;
while((ch=br.readLine())!=null){
String[] studentData=ch.split(",");
Student s=new Student();
s.setId(studentData[0]);
s.setAge(studentData[1]);
s.setName(studentData[2]);
s.setPlace(studentData[3]);
students.add(s);
}
br.close();
}
public static void ReaderStudent(ArrayList<Student> students, String string) throws IOException {
// TODO Auto-generated method stub
Reader(students,"students.txt");
if(students.size()==0)
System.out.println("對不起,沒有學生資訊");
else{
for(int i=0;i<students.size();i++) {
Student s=students.get(i);
System.out.println("學號:"+s.getId()+" 年齡:"+s.getAge()+" 姓名:"+s.getName()+" 住址:"+s.getPlace());
}
}
}
public static void addStudent(ArrayList<Student> students, String filename) throws IOException {
// TODO Auto-generated method stub
Reader(students,"students.txt");
Scanner sc=new Scanner(System.in);
String id;
while(true){
System.out.println("請輸入學生的學號:");
id=sc.nextLine();
boolean flag=true;
for(int i=0;i<students.size();i++) {
Student s=students.get(i);
if(id.equals(s.getId())){
flag=false;
break;
}
}
if(flag)
break;
else
System.out.println("對不起,你輸入的學號有誤,請重新輸入");
}
System.out.println("請輸入學生的姓名:");
String name=sc.nextLine();
System.out.println("請輸入學生的年齡:");
String age=sc.nextLine();
System.out.println("請輸入學生的地址:");
String place=sc.nextLine();
Student s=new Student();
s.setName(name);
s.setAge(age);
s.setId(id);
s.setPlace(place);
students.add(s);
Writer(students,"students.txt");
System.out.println("新增學生成功");
}
public static void deleteStudent(ArrayList<Student> students,String filename) throws IOException {
// TODO Auto-generated method stub
Reader(students,"students.txt");
Scanner sc=new Scanner(System.in);
System.out.println("請輸入你要刪除的學生的學號:");
String deleteId=sc.nextLine();
//boolean flag=false;
int index=-1;
for(int i=0;i<students.size();i++) {
Student s=students.get(i);
if(s.getId().equals(deleteId)){
index=i;
//flag=true;
break;
}
}
if(index!=-1){
students.remove(index);
Writer(students,"students.txt");
System.out.println("刪除成功");
}
else
System.out.println("沒有你想要刪除的學生,請重新輸入:");
}
public static void updataStudent(ArrayList<Student> students, String filename) throws IOException {
// TODO Auto-generated method stub
String newName,newAge,newId,newPlace;
Reader(students,"students.txt");
System.out.println("輸入你要修改的學生學號:");
Scanner sc=new Scanner(System.in);
int index=-1;
String upId=sc.nextLine();
for(int i=0;i<students.size();i++) {
Student s=students.get(i);
if(upId.equals(s.getId())) {
index=i;
break;
}
}
if(index==-1)
System.out.println("對不起,你所修改的學生資訊不存在");
else{
System.out.println("請輸入新的學生名字:");
newName=sc.nextLine();
System.out.println("請輸入新的學生年齡:");
newAge=sc.nextLine();
System.out.println("請輸入新的學生學號:");
newId=sc.nextLine();
System.out.println("請輸入新的學生地址:");
newPlace=sc.nextLine();
Student s=new Student();
s.setName(newName);
s.setAge(newAge);
s.setId(newId);
s.setPlace(newPlace);
students.set(index, s);
System.out.println("恭喜你,修改成功");
Writer(students,"students.txt");
}
}
}
自己學習記錄,有錯誤,歡迎指正