利用Java设计一个简单的学生信息管理程序

利用Java设计一个简单的控制台学生信息管理程序

  • 此程序可作为课设的参考,其中信息存储于文件中。
  • 创建了学生类Student,用于存储学号等的信息。创建StudentFunction类,用于实现诸如学生信息添加,学生信息修改(包含了带各种参数的修改方法),删除,显示成绩排行等功能。
  • 把学生信息的实例放入集合list中实现操作。
  • 创建FileFunction类,用于把list中的学生信息写入文件,每次打开时读取到list中。
  • 每次输入一个“功能判断句”放入String型变量judge中,在主函数中判断用户输入了哪像功能以便执行相应的操作。
  • 创建一个自定义异常类IdNotFoundException,用于当用户输入的学号信息与文件中存在的信息不符时进行后续处理。
  • 学生类实现Comparable接口,并重写compareTo()函数实现排序功能。

全部代码如下:

import java.util.*;
import java.io.*;
public class helloworld {
	public static void main(String arg[])
	{
		System.out.println("###################");
	    System.out.println("欢迎进入学生管理系统!");
	    File file=new File("D:\\student.txt");
	    if(!file.exists())
	    {
	    	try 
	    	{
	    	file.createNewFile();
	    	}
	    	catch(Exception e)
	    	{
	    		e.printStackTrace();
	    	}
	    }
	    List<Student> list=new ArrayList<Student>();
	    StudentFunction studentfunction=new StudentFunction();
	    FileFunction filefunction=new FileFunction();
	    Scanner s=new Scanner(System.in);
	    String juge=" ";
	    System.out.println("--------------------");
	    try 
	    {
	    	if(filefunction.FileRead(file).isEmpty()==true)
	    	{
	    		System.out.println("学生信息为空!");
	    		list=studentfunction.StudentAdd(list);
	    	}
	    	else
	    	{
	    		list=filefunction.FileRead(file);
	    	}
	    }
	    catch(IOException e)
	    {
	    	e.printStackTrace();
	    }
	    System.out.println("功能可输入:\n添加学生信息\n"+"按学号查询学生信息\n"+"显示当前所有学生信息\n查看所有学生成绩排名\n查看学习情况分段统计\n"+"按学号修改学生全部信息\n删除所有学生信息\n通过学号删除此学生信息\n通过学生名删除此学生信息\n退出系统");
	    while(true)
	    {
	    	juge=s.nextLine();
	    	if(juge.equals("添加学生信息"))
	    	{
	    	try 
	    	{
	    	    list=studentfunction.StudentAdd(list);	
	    	}
	    	catch(Exception e)
	    	{
	    		e.printStackTrace();
	      	}
	    	}
	    	if(juge.equals("显示当前所有学生信息"))
	    	{
	    		try 
	    		{	
	    		    for(int i=0;i<list.size();i++)
	    		    {
	    		    	System.out.print(list.get(i).id+"   ");
	    		    	System.out.print(list.get(i).name+"   ");
	    		    	System.out.print(list.get(i).Class+"   ");
	    		    	System.out.print(list.get(i).homeadd+"   ");
	    		    	System.out.print(list.get(i).home+"   ");
	    		    	System.out.print(list.get(i).grade+"   ");
	    		    	System.out.print(list.get(i).major+"\n");
	    		    }
	    		}
	    		catch(Exception e)
	    		{
	    			e.printStackTrace();
	    		}
	    		System.out.println("--------------------");
		    	System.out.println("按任意键继续...");
		    	s.nextLine();
	    	}
	    	
	    	if(juge.equals("删除所有学生信息"))
	    	{
	    		list=studentfunction.DeletAll(list);
	    		file.delete();
	    		System.out.println("所有学生信息已删除!");
	    		System.out.println("--------------------");
		    	System.out.println("按任意键继续...");
		    	s.nextLine();
	    	}
	    	
	    	if(juge.equals("通过学号删除此学生信息"))
	    	{
	    		list=studentfunction.DeletById(list);
	    		System.out.println("操作成功!");
	    		System.out.println("--------------------");
		    	System.out.println("按任意键继续...");
		    	s.nextLine();
	    	}
	    	
	    	if(juge.equals("按学号查询学生信息"))
	    	{
	    		Student a=new Student();
	    		System.out.println("输入要查询学生的学号");
	    		a=studentfunction.IdGetStudentInfo(list);
	    		if(a.Class.equals("0")==true)
	    		{
	    			System.out.println("系统中没有此学生信息!");
	    		}
	    		System.out.println("--------------------");
		    	System.out.println("按任意键继续...");
		    	s.nextLine();
	    	}
	    	
	    	if(juge.equals("按学号修改学生全部信息"))
	    	{
	    		System.out.println("输入要修改学生的学号");
                String id=s.nextLine();
	    		list=studentfunction.StudentAllinfoChange(id, list);
	    		System.out.println("--------------------");
		    	System.out.println("按任意键继续...");
		    	s.nextLine();
	    	}
	    	
	    	if(juge.equals("查看学习情况分段统计"))
	    	{
	    		
	    		List<Student> list2=new ArrayList<Student>();
	    		for(int i=0;i<list.size();i++)
	    		{
	    			Student student=new Student();
	    			student.id=list.get(i).id;
	    			student.Class=list.get(i).Class;
	    			student.grade=list.get(i).grade;
	    			student.home=list.get(i).home;
	    			student.homeadd=list.get(i).homeadd;
	    			student.name=list.get(i).name;
	    			student.major=list.get(i).major;
	    			list2.add(student);
	    		}
	    		Collections.sort(list2);
	    		int section1=0;int section2=0;int section3=0;int section4=0;int section5=0;
	    		for(int i=0;i<list2.size();i++)
    		    {
	    				if(Integer.parseInt(list2.get(i).grade)>=90)
	    					section1++;
	    				if(Integer.parseInt(list2.get(i).grade)>=80&&Integer.parseInt(list2.get(i).grade)<90)
	    					section2++;
	    				if(Integer.parseInt(list2.get(i).grade)>=70&&Integer.parseInt(list2.get(i).grade)<80)
	    					section3++;
	    				if(Integer.parseInt(list2.get(i).grade)>=60&&Integer.parseInt(list2.get(i).grade)<70)
	    					section4++;
	    				if(Integer.parseInt(list2.get(i).grade)<60)
	    					section5++;
    		    }
	    		System.out.println("90-100分段: "+section1+"人");
	    		if(section1==0)
	    			System.out.println("无");
	    		for(int i=0;i<section1;i++)
	    		{
	    			System.out.print("第"+(i+1)+"名:   ");
    		    	studentfunction.PrintSingleStudentInfo(list2, i);
	    		}
	    		System.out.println("80-90分段: "+section2+"人");
	    		if(section2==0)
	    			System.out.println("无");
	    		for(int i=section1;i<(section1+section2);i++)
	    		{	
	    			System.out.print("第"+(i+1-section1)+"名:   ");
	    			studentfunction.PrintSingleStudentInfo(list2, i);
	    		}
	    		System.out.println("70-80分段: "+section3+"人");
	    		if(section3==0)
	    			System.out.println("无");
	    		for(int i=section1+section2;i<(section1+section2+section3);i++)
	    		{	
	    			System.out.print("第"+(i+1-section1-section2)+"名:   ");
	    			studentfunction.PrintSingleStudentInfo(list2, i);
	    		}
	    		System.out.println("60-70分段: "+section4+"人");
	    		if(section4==0)
	    			System.out.println("无");
	    		for(int i=section1+section2+section3;i<(section1+section2+section3+section4);i++)
	    		{	
	    			System.out.print("第"+(i+1-section1-section2-section3)+"名:   ");
	    			studentfunction.PrintSingleStudentInfo(list2, i);
	    		}
	    		System.out.println("0-60分段: "+section5+"人");
	    		if(section5==0)
	    			System.out.println("无");
	    		for(int i=section1+section2+section3+section4;i<(section5+section1+section2+section3+section4);i++)
	    		{
	    			System.out.print("第"+(i+1-section1-section2-section3-section4)+"名:   ");
	    			studentfunction.PrintSingleStudentInfo(list2, i);
	    		}
	    		System.out.println("--------------------");
		    	System.out.println("按任意键继续...");
		    	s.nextLine();
	    	}
	    	
	    	if(juge.equals("查看所有学生成绩排名"))
	    	{
	    		List<Student> list2=new ArrayList<Student>();
	    		for(int i=0;i<list.size();i++)
	    		{
	    			Student student=new Student();
	    			student.id=list.get(i).id;
	    			student.Class=list.get(i).Class;
	    			student.grade=list.get(i).grade;
	    			student.home=list.get(i).home;
	    			student.homeadd=list.get(i).homeadd;
	    			student.name=list.get(i).name;
	    			student.major=list.get(i).major;
	    			list2.add(student);
	    		}
	    		Collections.sort(list2);
	    		for(int i=0;i<list2.size();i++)
    		    {
    		    	System.out.print("第"+(i+1)+"名:   ");
    		    	studentfunction.PrintSingleStudentInfo(list2, i);
    		    }
	    		System.out.println("--------------------");
		    	System.out.println("按任意键继续...");
		    	s.nextLine();
	    	}
	    	
	    	if(juge.equals("退出系统"))
	    	{
	    		s.close();
	    		try {
	    		filefunction.FileWrite(file, list);
	    		}
	    		catch(IOException e)
	    		{
	    			e.printStackTrace();
	    		}
	    		break;
	    	}
	    	
		    System.out.println("##功能(输入#后的文字):\n#添加学生信息\n"+"#按学号查询学生信息\n"+"#显示当前所有学生信息\n#查看所有学生成绩排名\n#查看学习情况分段统计\n"+"#按学号修改学生全部信息\n#删除所有学生信息\n#通过学号删除此学生信息\n#通过学生名删除此学生信息\n");
	    }
	}
}

class Student implements Comparable<Student>
{
    String name;
    String id;
    String major;
    String Class;
    String homeadd;
    String home;
    String grade;
    Student()
    {
    	
    }
    Student(String name,String id,String major,String Class,String homeadd,String home,String grade)
    {
    	this.name=name;this.id=id;this.major=major;this.Class=Class;this.homeadd=homeadd;this.home=home;this.grade=grade;
    }
    public String GetGrade()
    {
    	return grade;
    }
    public String Getid()
    {
    	return id;
    }
    public String GetName()
    {
    	return name;
    }
    public void ChangeId(String id)
    {
    	this.id=id;
    }
    public void ChangeGrade(String grade)
    {
    	this.grade=grade;
    }
    public int compareTo(Student student)
    {
    	return (Integer.parseInt(student.grade)-Integer.parseInt(this.grade));
    }
    public String toString()
    {
    	return(id+"   "+name+"   "+Class+"   "+homeadd+"   "+home+"   "+grade+"   "+major);
    }
}

class StudentFunction
{
	
	StudentFunction()
	{
		
	}
	StudentFunction(List<Student> student)
	{
		
	}
	public void ShowGradeRank()
	{
		
	}
	public void ShowGradeLayout()
	{
		
	}
	public List<Student> DeletAll(List<Student> list)
	{
		list.clear();
		return list;
	}
	public List<Student> DeletById(List <Student> student)
	{
		String id2="";
		Scanner s=new Scanner(System.in);
		System.out.println("输入要删除学生的学号");
		id2=s.nextLine();
		int flag=0;
		for(int i=0;i<student.size();i++)
		{
			if(student.get(i).id.equals(id2))
			{
				student.remove(i);
				i--;
				flag++;
			}
		}
		if(flag==0)
		{
			try 
			{
			throw new IdNotFoundException();
			}
			catch(IdNotFoundException e)
			{
				e.PrintInfo();
				StudentFunction studentfunction=new StudentFunction();
				student=studentfunction.DeletById(student);
			}
		}
		return student;
	}
	public void DeletByName(String name,List <Student> student)
	{
		for(int i=0;i<student.size();i++)
		{
			if(student.get(i).name.equals(name))
			{
				student.remove(i);
				i--;
			}
		}
	}
	public Student IdGetStudentInfo(List <Student> student)
	{
		Scanner s=new Scanner(System.in);
		String id="";
		id=s.nextLine();
		Student a=new Student();
		a.Class="0";
		int flag=0;
		for(int i=0;i<student.size();i++)
		{
			if(student.get(i).id.equals(id)) 
			{
				a=student.get(i);
				System.out.println(a.id+"   "+a.name+"   "+a.Class+"   "+a.homeadd+"   "+a.home+"   "+a.grade+"   "+a.major);
				flag++;
			}
		}
		if(flag==0)
		{
			try 
			{
				throw new IdNotFoundException();
			}
			catch(IdNotFoundException e)
			{
				e.PrintInfo();
			}
		}
		return a;
	}
	public List<Student> StudentNameChange(String name,String newname,List<Student> student)
	{
		for(int i=0;i<student.size();i++)
		{
			if(student.get(i).name==name)
			{
				student.get(i).name=newname;
			}
		}
		return student;
	}
	public void StudentIdChange(String id,String newid,List<Student> student)
	{
		for(int i=0;i<student.size();i++)
		{
			if(student.get(i).id==id)
			{
			     student.get(i).id=newid;
			}
		}
	}
	public void StudentGradeChange(String grade,String newgrade,List<Student> student)
	{
		for(int i=0;i<student.size();i++)
		{
			if(student.get(i).grade==grade)
			{
				student.get(i).grade=newgrade;
			}
		}
		
	}
	public List<Student> StudentAllinfoChange(String id,List<Student> list)
	{
		Scanner s=new Scanner(System.in);
		int flag=0;
		for(int i=0;i<list.size();i++)
		{
			if(list.get(i).id.equals(id))
			{
				flag++;
				System.out.println("输入新学号");
				list.get(i).id=s.nextLine();
				System.out.println("输入新姓名");
				list.get(i).name=s.nextLine();
				System.out.println("输入新班级");
				list.get(i).Class=s.nextLine();
				System.out.println("输入新住址");
				list.get(i).homeadd=s.nextLine();
				System.out.println("输入新籍贯");
				list.get(i).home=s.nextLine();
				System.out.println("输入新成绩");
				list.get(i).grade=s.nextLine();
				System.out.println("输入新专业");
				list.get(i).major=s.nextLine();
			}
		}
		if(flag==0)
		{
			try
			{
				throw new IdNotFoundException();
			}
			catch(IdNotFoundException e)
			{
				e.PrintInfo();
			}
		}
		else
		{
			System.out.println("修改成功");
		}
		return list;
	}
	public List<Student> StudentAdd(List <Student> list)
	{
		System.out.println("请输入学生信息");
		Scanner s=new Scanner(System.in);
		Student a=new Student();
		String juge="";
		System.out.println("学号");
		a.id=s.nextLine();
		System.out.println("姓名");
		a.name=s.nextLine();
		System.out.println("班  级");
		a.Class=s.nextLine();
		System.out.println("住址");
		a.homeadd=s.nextLine();
		System.out.println("籍贯");
		a.home=s.nextLine();
		System.out.println("成绩");
		a.grade=s.nextLine();
		System.out.println("专业");
		a.major=s.nextLine();
		list.add(a);
		for(;;)
		{
		System.out.println("继续添加学生信息?  Y/N");
		juge=s.nextLine();
		if(juge.equals("Y"))
		{
			list=StudentAdd(list);
		}
		if(juge.equals("N"))
		{
			System.out.println("操作成功");
			break;
		}
		}
		return list;
	}
	public void PrintSingleStudentInfo(List<Student> list2,int i)
	{
		System.out.print(list2.get(i).id+"   ");
		System.out.print(list2.get(i).name+"   ");
    	System.out.print(list2.get(i).Class+"   ");
    	System.out.print(list2.get(i).homeadd+"   ");
    	System.out.print(list2.get(i).home+"   ");
    	System.out.print(list2.get(i).grade+"   ");
    	System.out.print(list2.get(i).major+"\n");
	}
}

class FileFunction
{
	public void FileWrite(File file,List <Student> student) throws IOException
	{
	    FileWriter fw=new FileWriter(file);
	    BufferedWriter bw=new BufferedWriter(fw);
	    for(int i=0;i<student.size();i++)
	    {
	    		bw.write(student.get(i).id+",");
	    		bw.write(student.get(i).name+",");
	    		bw.write(student.get(i).Class+",");
	    		bw.write(student.get(i).homeadd+",");
	    		bw.write(student.get(i).home+",");
	    		bw.write(student.get(i).grade+",");
	    		bw.write(student.get(i).major);
	    		bw.write("\n");
	    }
	    bw.close();
	    fw.close();
	}
	public List<Student> FileRead(File file) throws IOException
	{
		List<Student> list=new ArrayList<Student>();
		FileInputStream fips=new FileInputStream(file);
		InputStreamReader ipsr=new InputStreamReader(fips);
		BufferedReader br=new BufferedReader(ipsr);
		String tempall;
		String temp[];
		int i=0;
		while((tempall=br.readLine())!=null)
		{
			Student student=new Student();
			temp=tempall.split(",");
			student.id=temp[0];
			student.name=temp[1];
			student.Class=temp[2];
			student.homeadd=temp[3];
			student.home=temp[4];
			student.grade=temp[5];
			student.major=temp[6];
			list.add(i,student);
			i++;
		}
		br.close();
		ipsr.close();
		return list;
	}
}

class IdNotFoundException extends Exception
{
	private static final long serialVersionUID = 1L;
	IdNotFoundException()
	{
		super("未找到此学号的学生");
	}
	public void PrintInfo()
	{
		System.out.println("未找到此学号的学生");
	}
}

部分运行效果如下:

###################
欢迎进入学生管理系统!
--------------------
功能可输入:
添加学生信息
按学号查询学生信息
显示当前所有学生信息
查看所有学生成绩排名
查看学习情况分段统计
按学号修改学生全部信息
删除所有学生信息
通过学号删除此学生信息
通过学生名删除此学生信息
退出系统
显示当前所有学生信息
2   spider   1702   meiguo   henan   90   cs
3   chaoji   wudi   beijing   china   90   cs
4   haha   hhu   hhhh   dddd   90   cd
1   lihaiwa   1702   beijing   liaoning   100   cs
5   waaau   1702   beijing   liaoning   65   cs
6   hahaha   1702   wahahagongsi   beijing   72   cs
7   lailailai   1702   meiguo   Shengdiyage   80   buzhidao
8   诸葛大力   不知道   爱情公寓   不知道   100   不知道
9   张伟   602   爱情公寓   不知道   73   律师
--------------------
按任意键继续...

##功能(输入#后的文字):
#添加学生信息
#按学号查询学生信息
#显示当前所有学生信息
#查看所有学生成绩排名
#查看学习情况分段统计
#按学号修改学生全部信息
#删除所有学生信息
#通过学号删除此学生信息
#通过学生名删除此学生信息

查看学习情况分段统计
90-100分段: 5人
第1名:   1   lihaiwa   1702   beijing   liaoning   100   cs
第2名:   8   诸葛大力   不知道   爱情公寓   不知道   100   不知道
第3名:   2   spider   1702   meiguo   henan   90   cs
第4名:   3   chaoji   wudi   beijing   china   90   cs
第5名:   4   haha   hhu   hhhh   dddd   90   cd
80-90分段: 1人
第1名:   7   lailailai   1702   meiguo   Shengdiyage   80   buzhidao
70-80分段: 2人
第1名:   9   张伟   602   爱情公寓   不知道   73   律师
第2名:   6   hahaha   1702   wahahagongsi   beijing   72   cs
60-70分段: 1人
第1名:   5   waaau   1702   beijing   liaoning   65   cs
0-60分段: 0人
无
--------------------
按任意键继续...

##功能(输入#后的文字):
#添加学生信息
#按学号查询学生信息
#显示当前所有学生信息
#查看所有学生成绩排名
#查看学习情况分段统计
#按学号修改学生全部信息
#删除所有学生信息
#通过学号删除此学生信息
#通过学生名删除此学生信息

按学号查询学生信息
输入要查询学生的学号
10
未找到此学号的学生
系统中没有此学生信息!
--------------------
按任意键继续...

##功能(输入#后的文字):
#添加学生信息
#按学号查询学生信息
#显示当前所有学生信息
#查看所有学生成绩排名
#查看学习情况分段统计
#按学号修改学生全部信息
#删除所有学生信息
#通过学号删除此学生信息
#通过学生名删除此学生信息

添加学生信息
请输入学生信息
学号
10
姓名
懵懂的我
班  级
一个班
住址
一个神奇的地方
籍贯
一个叫家乡的地方
成绩
75
专业
入学即失业
继续添加学生信息?  Y/N
N
操作成功
##功能(输入#后的文字):
#添加学生信息
#按学号查询学生信息
#显示当前所有学生信息
#查看所有学生成绩排名
#查看学习情况分段统计
#按学号修改学生全部信息
#删除所有学生信息
#通过学号删除此学生信息
#通过学生名删除此学生信息

查看所有学生成绩排名
第1名:   1   lihaiwa   1702   beijing   liaoning   100   cs
第2名:   8   诸葛大力   不知道   爱情公寓   不知道   100   不知道
第3名:   2   spider   1702   meiguo   henan   90   cs
第4名:   3   chaoji   wudi   beijing   china   90   cs
第5名:   4   haha   hhu   hhhh   dddd   90   cd
第6名:   7   lailailai   1702   meiguo   Shengdiyage   80   buzhidao
第7名:   10   懵懂的我   一个班   一个神奇的地方   一个叫家乡的地方   75   入学即失业
第8名:   9   张伟   602   爱情公寓   不知道   73   律师
第9名:   6   hahaha   1702   wahahagongsi   beijing   72   cs
第10名:   5   waaau   1702   beijing   liaoning   65   cs
--------------------
按任意键继续...
posted @ 2020-03-31 16:40  Siuhamburger  阅读(688)  评论(0编辑  收藏  举报