1. 程式人生 > >java學生管理系統(IO流和檔案實現)

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");
		}
	

	}
}
自己學習記錄,有錯誤,歡迎指正微笑