<Java>实现学生信息管理系统,涉及简单IO流

首先,做一个项目,我们需要吧它分成不同小模块去完成它,可以参考:“MVC设计模式(经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。)”
1.先做Student对象

package Student;
/**
 * 
 * @author 汤
 *
 */
public class Student {
	private String number;
	private String name;
	private String sex;
	private int age;
	private int math;
	private int english;
	private int java;
	
	public Student() {
		super();
	}

	public Student(String number, String name, String sex, int age) {
		super();
		this.number = number;
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.math=0;
		this.english=0;
		this.java=0;
	}

	public Student(String number, String name, String sex, int age, int math, int english, int java) {
		super();
		this.number = number;
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.math = math;
		this.english = english;
		this.java = java;
	}

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}

	public int getEnglish() {
		return english;
	}

	public void setEnglish(int english) {
		this.english = english;
	}

	public int getJava() {
		return java;
	}

	public void setJava(int java) {
		this.java = java;
	}

	@Override
	public String toString() {
		return "Student [number=" + number + ", name=" + name + ", sex=" + sex + ", age=" + age + ", math=" + math
				+ ", english=" + english + ", java=" + java + "]";
	}
	
}

  1. 写出构造器
  2. 写出get、set方法
  3. 重写toString方法

2.写出View的用户界面

package View;

import Controller.Controller;

import Student.Student;
import Tools.Tools;
import saveInformation.saveTools;
import sortStudent.sortStudent;

/**
 * 
 * @author 汤
 *
 */
public class View {
	private Controller student = new Controller(40);

	public static void main(String[] args) {
		View v = new View();
		v.Menu();
	}

	public void Menu() {
		boolean boo = true;
		while (boo) {
			System.out.println("				欢迎使用学生信息管理系统——by 汤峻玮");
			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("					8.观看文件信息");
			System.out.println("					9.退出管理系统");
			System.out.print("                   请选择(1-9):");
			char n = Tools.readMenu();
			switch (n) {
			case '1':
				addNewStudent();// 增

				break;
			case '2':
				addStudentscore();// 增

				break;
			case '3':
				deleteInformation();// 删

				break;
			case '4':
				replaceInformation();// 改

				break;
			case '5':
				lookupInformation();// 查
				break;
			case '6':
				displayInformation();// 看
				break;
			case '7':
				Student[] stu = sortStudent.sortStudentInformation(student.getAllStudent());// 排序
				for (int i = 0; i < student.getTotal(); i++) {
					student.replaceStudent(i, stu[i]);
				}
				boolean bo4 = saveTools.saveInformation(student.getAllStudent(), false);
				if (bo4) {
					System.out.println("文件保存成功!");
				} else {
					System.out.println("文件保存失败!");
				}
				break;
			case '8':
				saveTools.readInformation();
				break;
			case '9':
				System.out.print("确认是否退出(Y/N):");
				char isExit = Tools.readSelection();
				if (isExit == 'Y') {
					boo = false;
				}
				break;
			}
		}
	}

	public void addNewStudent() {
		System.out.println("------学生信息添加------");
		System.out.print("请输入姓名:");
		String name = Tools.readString(10);
		System.out.print("请输入性别:");
		String sex = Tools.readString(3);
		System.out.print("请输入年龄:");
		int age = Tools.readInt();
		System.out.print("请输入学号:");
		String number = Tools.readString(30);
		Student stu = new Student(number, name, sex, age);
		boolean k = student.addStudent(stu);
		if (k) {
			System.out.println("------信息添加成功------");
			boolean bo = saveTools.saveInformation(student.getAllStudent(), true);
			if (bo) {
				System.out.println("文件保存成功!");
			} else {
				System.out.println("文件保存失败!");
			}
		} else {
			System.out.println("------信息添加失败------");
		}
	}

	public void addStudentscore() {
		int i;
		System.out.println("------学生成绩录入------");
		System.out.println("现有信息");
		displayInformation();
		System.out.println("请选择添加成绩对象的学号:");
		String number = Tools.readString(30);
		for (i = 0; i < student.getTotal(); i++) {
			if (number.equals(student.getStudent(i).getNumber())) {
				System.out.println("已经找到对应学生");
				System.out.println("请输入添加的数学成绩:");
				int math = Tools.readInt();
				System.out.println("请输入添加的英语成绩:");
				int english = Tools.readInt();
				System.out.println("请输入添加的程序成绩:");
				int java = Tools.readInt();
				student.getStudent(i).setMath(math);
				student.getStudent(i).setEnglish(english);
				student.getStudent(i).setJava(java);
				System.out.println("------成绩添加成功------");
				boolean bo1 = saveTools.saveInformation(student.getAllStudent(), false);
				if (bo1) {
					System.out.println("文件保存成功!");
				} else {
					System.out.println("文件保存失败!");
				}
				break;
			}
		}
		if (i == student.getTotal()) {
			System.out.println("------成绩添加失败------");
		}
	}

	public void deleteInformation() {
		System.out.println("------学生信息删除------");
		System.out.println("现有信息");
		displayInformation();
		System.out.println("请选择删除对象学号:");
		String number = Tools.readString(30);
		for (int i = 0; i < student.getTotal(); i++) {
			if (number.equals(student.getStudent(i).getNumber())) {
				System.out.println("已找到对应学生");
				System.out.println("确认删除吗?(Y/N)");
				char isChoice = Tools.readSelection();
				if (isChoice == 'Y') {
					boolean k = student.deleteStudent(i);
					if (k) {
						System.out.println("------信息删除成功------");
						boolean bo2 = saveTools.saveInformation(student.getAllStudent(), false);
						if (bo2) {
							System.out.println("文件保存成功!");
						} else {
							System.out.println("文件保存失败!");
						}
					} else {
						System.out.println("------信息删除失败------");
					}
				} else {
					System.out.println("------退出成功------");
				}
			}
		}
	}

	public void replaceInformation() {
		System.out.println("------学生信息修改------");
		System.out.println("现有信息");
		displayInformation();
		System.out.println("请输入修改的学生学号:");
		String number = Tools.readString(30);
		for (int i = 0; i < student.getTotal(); i++) {
			if (number.equals(student.getStudent(i).getNumber())) {
				System.out.println("已经找到对应学生");
				System.out.println("请输入修改学生姓名(回车不修改):");
				String name = Tools.readString(10, student.getStudent(i).getName());
				System.out.println("请输入修改学生性别(回车不修改):");
				String sex = Tools.readString(3, student.getStudent(i).getSex());
				System.out.println("请输入修改学生年龄(回车不修改):");
				int age = Tools.readInt(student.getStudent(i).getAge());
				System.out.println("请输入修改学生学号(回车不修改):");
				String numbers = Tools.readString(30, student.getStudent(i).getNumber());
				System.out.println("是否继续修改成绩?(Y/N)");
				char isChoice = Tools.readSelection();
				if (isChoice == 'Y') {
					System.out.println("请输入修改的数学成绩(回车不修改)");
					int math = Tools.readInt(student.getStudent(i).getMath());
					System.out.println("请输入修改的英语成绩(回车不修改)");
					int english = Tools.readInt(student.getStudent(i).getEnglish());
					System.out.println("请输入修改的程序成绩(回车不修改)");
					int java = Tools.readInt(student.getStudent(i).getJava());
					Student stu2 = new Student(numbers, name, sex, age, math, english, java);
					boolean boo = student.replaceStudent(i, stu2);
					if (boo) {
						System.out.println("------信息更改成功------");
						boolean bo3 = saveTools.saveInformation(student.getAllStudent(), false);
						if (bo3) {
							System.out.println("文件保存成功!");
						} else {
							System.out.println("文件保存失败!");
						}
					} else {
						System.out.println("------信息更改失败------");
					}
				} else {
					Student stu3 = new Student(numbers, name, sex, age, student.getStudent(i).getMath(),
							student.getStudent(i).getEnglish(), student.getStudent(i).getJava());
					boolean bo = student.replaceStudent(i, stu3);
					if (bo) {
						System.out.println("------信息更改成功------");
					} else {
						System.out.println("------信息更改失败------");
					}
				}
			}
		}
	}

	public void lookupInformation() {
		boolean boo = true;
		while (boo) {
			System.out.println("------学生信息查询------");
			System.out.println("请输入查询指令:");
			System.out.println("1.查询姓名");
			System.out.println("2.查询学号");
			System.out.println("3.查询年龄");
			System.out.println("4.退出查询");
			System.out.println("请输入指令(1-4):");
			char c = Tools.readlittleMenu();
			switch (c) {
			case '1':
				int count = 0;
				System.out.println("请输入姓名:");
				String name = Tools.readString(10);
				for (int i = 0; i < student.getTotal(); i++) {
					if (name.equals(student.getStudent(i).getName())) {
						System.out.println("找到了!他的学号是:" + student.getStudent(i).getNumber());
						count++;
					}
				}
				System.out.println("查找结束,符合条件的有" + count + "人");
				break;
			case '2':
				int count2 = 0;
				System.out.println("请输入学号:");
				String number = Tools.readString(30);
				for (int i = 0; i < student.getTotal(); i++) {
					if (number.equals(student.getStudent(i).getNumber())) {
						System.out.println("找到了!他的姓名是:" + student.getStudent(i).getName());
						count2++;
					}
				}
				System.out.println("查找结束,符合条件的有" + count2 + "人");
				break;
			case '3':
				int count3 = 0;
				System.out.println("请输入年龄:");
				int age = Tools.readInt();
				for (int i = 0; i < student.getTotal(); i++) {
					if (age == student.getStudent(i).getAge()) {
						System.out.println("找到了!他的学号是:" + student.getStudent(i).getNumber());
						count3++;
					}
				}
				System.out.println("查找结束,符合条件的有" + count3 + "人");
				break;
			case '4':
				boo = false;
				break;
			}
		}
	}

	public void displayInformation() {
		Student[] stu = student.getAllStudent();
		for (int i = 0; i < stu.length; i++) {
			System.out.println("[ 姓名:" + stu[i].getName() + " ,学号:" + stu[i].getNumber() + " ,性别:" + stu[i].getSex()
					+ " ,年龄:" + stu[i].getAge() + " ,数学:" + stu[i].getMath() + " ,英语:" + stu[i].getEnglish() + " ,程序:"
					+ stu[i].getJava() + " ]");
		}
	
	}
}

要以给用户“贴心”的体验为原则,多写提示语句
框架搭建好了,那么就需要去实现用户需求的功能了

3.实现工具类Tools
工具类的用处就是读取并且判断从键盘输入的值是否符合条件

  • readKeyBoard(int、boolean)读键盘
  • readMenu()读菜单指令
  • readChar()读字符
  • readChar(defaultValue)读字符,回车就读默认值
  • readInt()读整数
  • readInt(defaultValue)读整数,回车就读默认值
  • readSelection()读判断Y or N
package Tools;

import java.util.Scanner;
/**
 * 
 * @author 汤JW2021.6.6
 *
 */
public class Tools {
	private static Scanner scan = new Scanner(System.in);
	//读键盘
	private static String readKeyBoard(int limit, boolean blankReturn) {
		String line = "";
		while (scan.hasNextLine()) {
			line = scan.nextLine();
			if (line.length() == 0) {
				if (blankReturn)
					return line;
				else
					continue;
			}
			if (line.length() < 1 || line.length() > limit) {
				System.out.print("输入长度(不大于" + limit + ")(并且不小于1)  错误,请重新输入:");
				continue;
			}
			break;
		}
		return line;
	}
	//读菜单
	public static char readMenu(){
		char c;
		while(true){
			String str=readKeyBoard(1,false);
			c=str.charAt(0);
			if(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6'&&c!='7'&&c!='8'&&c!='9'){
				System.out.println("指令未识别,请重新输入");
			}else{
				break;
			}
		}
		return c;
	}
	//读字符,并且返回
	public static char readChar() {
		String str=readKeyBoard(1,false);
		return str.charAt(0);
	}
	//读字符,并且返回,如果不输入那么直接输出默认的值
	public static char readChar(char defaultValue) {
		String str=readKeyBoard(1,true);
		return (str.length()==0)? defaultValue:str.charAt(0);
	}
	//读长度不超过两位的整数,并且返回。
	public static int readInt() {
		int n;
		while(true) {
			String str=readKeyBoard(3, false);
			try {
				n=(int)Integer.parseInt(str);
				break;
			} catch (NumberFormatException e) {
				System.out.println("数字输入错误,请重新输入:");
			}
		}
		return n;
	}
	//读长度不超过两位的整数,并且返回,如果不输入那么直接输出默认的值
	public static int readInt(int defaultValue) {
		int n;
		while(true) {
			String str=readKeyBoard(2, true);
			if(str.equals("")) {
				return defaultValue;
			}
			try {
				n=(int)Integer.parseInt(str);
				break;
			} catch (NumberFormatException e) {
				System.out.println("数字输入错误,请重新输入:");
				continue;//?
			}
		}
		return n;
	}
	//用于确认选择,读取‘Y’或者‘N’,并且返回
	public static char readSelection() {
		char c;
		while(true) {
			String str=readKeyBoard(1, false).toUpperCase();
			c=str.charAt(0);
			if(c=='Y'||c=='N') {
				break;
			}else {
				System.out.println("选择指令错误,请重新输入:~");
			}
		}
		return c;
	}
	//读取长度不超过limit的字符串,并且返回
	public static String readString(int limit) {
		String str=readKeyBoard(limit, false);
		return str;
	}
	//读取长度不超过limit的字符串,如果不输入那么直接输出默认的值,并且返回
	public static String readString(int limit,String defaultValue) {
		String str=readKeyBoard(limit, true);
		while(true) {
			if(str.equals("")) {
				return defaultValue;
			}else {
				break;
			}
		}
		return str;
	}
	public static char readlittleMenu(){
		char c;
		while(true){
			String str=readKeyBoard(1,false);
			c=str.charAt(0);
			if(c!='1'&&c!='2'&&c!='3'&&c!='4'){
				System.out.println("指令未识别,请重新输入");
			}else{
				break;
			}
		}
		return c;
	}
}

4.完成控制层面Controller:
用户---->控制---->对象

package Controller;

import Student.Student;

/**
 * 
 * @author 汤JW
 *
 */
public class Controller {
	private Student[] stu;
	private static int total;
	
	public Controller(int index) {
		stu=new Student[index];
	}
	//增加
	public boolean addStudent(Student student) {
		if(total<0||total>stu.length) {
			return false;
		}else {
			stu[total++]=student;
			return true;
		}
	}
	//删除
	public boolean deleteStudent(int index) {
		if (total < 0 || total > stu.length) {
			return false;
		} else {
			total--;
			stu[index]=null;
			for(int i=index;i<total;i++) {
				stu[i]=stu[i+1];
			}
			return true;
		}
	}
	//修改
	public boolean replaceStudent(int index,Student stu3) {
		if(total<0 || total>stu.length) {
			return false;
		}else {
			stu[index]=stu3;
			return true;
		}
	}
	//查所有
	public Student[] getAllStudent() {
		Student[] stu4=new Student[total];
		for(int i=0;i<stu4.length;i++) {
			stu4[i]=stu[i];
		}
		return stu4;
	}
	//查单个
	public  Student getStudent(int index) {
		if(index<0 ||index>total) {
			return null;
		}else {
			return stu[index];
		}
	}
	public static int getTotal() {
		return total;
	}
}

5.排序sortStudent
排序是重写比较器实现的排序,内容较多,所以不放在Controller中

package sortStudent;

import java.util.Arrays;
import java.util.Comparator;

import Controller.Controller;
import Student.Student;
import Tools.Tools;

//专门用来排序
public class sortStudent {
	public static Student[] sortStudentInformation(Student[] stu) {
			System.out.println("------学生成绩排序------");
			System.out.println("1.按照数学成绩排序:");
			System.out.println("2.按照程序成绩排序:");
			System.out.println("3.按照英语成绩排序:");
			System.out.println("4.按照年龄大小排序:");

			System.out.println("请选择指令(1-4):");
			char c = Tools.readChar();
			switch (c) {
			case '1':
				Arrays.sort(stu, new Comparator() {
					@Override
					public int compare(Object o1, Object o2) {
						if (o1 instanceof Student && o2 instanceof Student) {
							Student stu1 = (Student) o1;
							Student stu2 = (Student) o2;
							if (stu1.getMath() == stu2.getMath()) {
								return Integer.compare(stu1.getAge(), stu2.getAge());
							} else {
								return -((Integer) stu1.getMath()).compareTo((Integer) stu2.getMath());
							}
						}
						return 0;
					}
				});
				return stu;
			case '2':
				Arrays.sort(stu, new Comparator() {
					@Override
					public int compare(Object o1, Object o2) {
						if (o1 instanceof Student && o2 instanceof Student) {
							Student stu1 = (Student) o1;
							Student stu2 = (Student) o2;
							if (stu1.getJava() == stu2.getJava()) {
								return Integer.compare(stu1.getAge(), stu2.getAge());
							} else {
								return -((Integer) stu1.getJava()).compareTo((Integer) stu2.getJava());
							}
						}
						return 0;
					}
				});
				return stu;
			case '3':
				Arrays.sort(stu, new Comparator() {
					@Override
					public int compare(Object o1, Object o2) {
						if (o1 instanceof Student && o2 instanceof Student) {
							Student stu1 = (Student) o1;
							Student stu2 = (Student) o2;
							if (stu1.getEnglish() == stu2.getEnglish()) {
								return Integer.compare(stu1.getAge(), stu2.getAge());
							} else {
								return -((Integer) stu1.getEnglish()).compareTo((Integer) stu2.getEnglish());
							}
						}
						return 0;
					}
				});
				return stu;
			case '4':
				Arrays.sort(stu, new Comparator() {
					@Override
					public int compare(Object o1, Object o2) {
						if (o1 instanceof Student && o2 instanceof Student) {
							Student stu1 = (Student) o1;
							Student stu2 = (Student) o2;
							if (stu1.getAge() == stu2.getAge()) {
								return stu1.getName().compareTo(stu2.getName());
							} else {
								return -((Integer) stu1.getAge()).compareTo((Integer) stu2.getAge());
							}
						}
						return 0;
					}
				});
				return stu;
			}
		
		return stu;
	}
}

6.使用字符流进行保存saveTools
因为字符流一般都是二进制,一般保存一些图片视频。所以我选择字符流

package saveInformation;

import java.io.*;

import Student.Student;
/*汤JW
*/
//保存信息
public class saveTools{
	private static File file=new File("D://stu.txt");
	public static boolean saveInformation(Student[] stu,boolean boo) {
		FileWriter fw=null;

		int i;
		try {
			
			fw = new FileWriter(file, boo);
			for(i=0;i<stu.length;i++) {
//				fw.write(stu[i].getName()+"/"+stu[i].getNumber()+"/"+stu[i].getAge()+"/"+stu[i].getSex()+"/"+stu[i].getMath()+"/"+stu[i].getEnglish()+"/"+stu[i].getJava()+"\n");
				fw.write(stu[i].toString()+"\n");
			}
			System.out.println("保存成功");
			return true;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}finally {
			try {
				if(fw!=null)
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	}
	public static void readInformation() {
		FileReader fr = null;
		try {
			File file = new File("D:/stu.txt");
			fr = new FileReader(file);
			char[] cbuf = new char[5];
			int len;
			while ((len = fr.read(cbuf)) != -1) {
				String str = new String(cbuf, 0, len);// 从0开始取到len
				System.out.print(str);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 资源关闭
		try {
			if (fr != null)
				fr.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

运行结果

以上就是我的期末课设作业。
本人大一,第一次发代码,我知道其中有许多不足,例如:在下一次打开这程序,文件又会重置;文件中的东西只能读取为String不能转化为Student型到内存中等等,并且用户界面尚不美观,还未用到Swing等知识,属实遗憾,希望随着学习的深入我会解决这些问题!
持续行动,不要自我感动!
7.13更新:
已对IO流做出优化:对于上次学生成绩管理系统IO流的改进

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值