用Java编写一个学生管理系统

近期刚学Java没有多久,就想着用Java来做一个简单的学生管理系统。同时这个代码目前只实现了一些简单的操作,代码的执行效率也不是很高,暂时还未编写图形界面(图形界面这一块后续有时间将会加上)。这是本人发表的第一篇文章。


我写的主要有五个类

studentdemo 测试类

student_base_data 基本数据类

student_opreat 操作类

fileread 文件读取类

filesave 文件保存类


具体实现代码如下

studentdemo 测试类

package student;

import java.io.IOException;
import java.util.Scanner;

public class studentdemo {
public static void main(String[] args) {
	
	student_opreat stu=new student_opreat();
	stu.load();//将学生的数据从文件中加载到定义的文本文档中
	while(true)
	{
		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("5-----修改学生信息");
		System.out.println("6-----将学生信息排序");
		System.out.println("7-----退出学生管理系统");
		System.out.println("-----------");
		System.out.println("请选择操作:");
		int n;
		Scanner scanner=new Scanner(System.in);
		n=scanner.nextInt();
		if(n==1)
			stu.add();
		else if(n==2)
			stu.remove();
		else if(n==3)
			stu.lookall();
		else if(n==4)
			stu.find();
		else if(n==5)
			stu.modify();
		else if(n==6)
			stu.sort();
		else if(n==7)
		{
			//因为涉及文件的操作,所以要处理一下异常
			try {
				filesave datasave=new filesave("学生管理数据.txt");//将数据保存在文件中
				datasave.story(stu.getarr());//保存学生数据
			} catch (IOException e) {
				e.printStackTrace();
			}
			System.out.println("正在退出管理系统.....");
			System.out.println("退出成功");
			break;
		}
			
	}
}
}

student_base_data 基本数据类

package student;

public class student_base_data {
private int age;//学生年龄
//这里我学号定义的是int型,如果学号较大,可以定义为String
private int num;//学生学号
private  String name;//学生姓名
private int socre;//学生成绩	
public student_base_data()
{
	
}
//下面这个构造方法可以不写,但是我自己嫌输入数据时操作太麻烦,所以写了这个构造方法
public student_base_data(int age,int num,int socre,String name)
{
	this.age=age;
	this.num=num;
	this.socre=socre;
	this.name=name;
}

//下面的构造方法可通过快捷键来自动生成
//按下shift+alt+s,然后点击"generate getters and setters",然后点击想要设置的变量
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public int getNum() {
	return num;
}
public void setNum(int num) {
	this.num = num;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getSocre() {
	return socre;
}
public void setSocre(int socre) {
	this.socre = socre;
}

}

student_opreat 操作类

在实现这个类时,我使用的方法都是for遍历,因此效率可能偏低;而且我是将所有的数据全部从文本中读取出来后才进行的操作,因此,执行的时间比直接对文本操作长。

下面的代码不太完美,将就着看一下吧,应该能看懂;

package student;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;


public class student_opreat extends student_base_data {
	//创建student_base_data对象集合
	ArrayList<student_base_data> student =new ArrayList<student_base_data>();
	Scanner scanner=new Scanner(System.in);
	int age,num,socre;//定义全局变量,方便进行操作
	String name;
public void load()//将数据加载从文本中读取出来
{
	//处理异常
	try {
		fileread fread=new fileread();
		fread.get("学生管理数据.txt");
		student=fread.read();
	} catch (Exception e) {
		
	}
	
}
public void add()//添加学生信息
{
	System.out.println("请输入姓名:");
	name=scanner.next();//这里尽量不要使用scanner.nextLine(),因为有可能读取的字符串可能会被换行吃掉
	System.out.println("请输入学号:");
	num=scanner.nextInt();
	System.out.println("请输入年龄:");
	age=scanner.nextInt();
	System.out.println("请输入成绩:");
	socre=scanner.nextInt();
	student_base_data st1=new student_base_data();//创建学生数据类对象
	st1.setAge(age);
	st1.setName(name);
	st1.setNum(num);
	st1.setSocre(socre);
	student.add(st1);
	System.out.println("添加成功");
}
public  void remove()//删除学生
{
	if(student.size()==0)
	{
		System.out.println("学生管理系统为空,请先添加学生信息!!!");
		return ;
	}
	System.out.println("请输入你要删除的学生学号或姓名");
	System.out.println("请输入学号:");
	num=scanner.nextInt();
	System.out.println("请输入姓名:");
	name=scanner.next();
	
	int i;
	for(i=0;i<student.size();i++)
	{
		student_base_data st1=student.get(i);
		if(st1.getNum()==num||st1.getName().equals(name))
		{
			System.out.println("删除的学生信息如下");
			System.out.println("姓名:"+st1.getName()+"\t"+"学号:"+st1.getNum()+"\t"+"年龄: "+st1.getAge()+"\t"+"成绩:"+st1.getSocre());
			System.out.println("是否确定删除Y/N");
			char ch;
			ch=scanner.next().charAt(0);
			if(ch=='Y')
			{
				student.remove(i);
				System.out.println("删除成功");
			}
			else {
				System.out.println("删除失败");
			}
		}
			
	}
}
public  void lookall()
{
	if(student.size()==0)
	{
		System.out.println("学生管理系统为空,请先添加学生信息!!!");
		return ;
	}
	
	int i;
	for(i=0;i<student.size();i++)
	{
			student_base_data st1=student.get(i);
			System.out.println("姓名:"+st1.getName()+"\t"+"学号:"+st1.getNum()+"\t"+"年龄: "+st1.getAge()+"\t"+"成绩:"+st1.getSocre());	
	}
}
public  void find()
{
	if(student.size()==0)
	{
		System.out.println("学生管理系统为空,请先添加学生信息!!!");
		return ;
	}
	System.out.println("请输入你要查找的学生学号或姓名");
	System.out.println("请输入学号:");
	num=scanner.nextInt();
	System.out.println("请输入姓名:");
	name=scanner.next();
	int i;
	for(i=0;i<student.size();i++)
	{
		student_base_data st1=student.get(i);
		if(st1.getNum()==num||st1.getName().equals(name))
		{
			System.out.println("查找的学生信息如下");
			System.out.println("姓名:"+st1.getName()+"\t"+"学号:"+st1.getNum()+"\t"+"年龄: "+st1.getAge()+"\t"+"成绩:"+st1.getSocre());
			return ;
		}
			
	}
	System.out.println("未找到该学生的相关信息");
}
public void modify()
{
	if(student.size()==0)
	{
		System.out.println("学生管理系统为空,请先添加学生信息!!!");
		return ;
	}
	System.out.println("请输入你要删除的学生学号或姓名");
	System.out.println("请输入学号:");
	num=scanner.nextInt();
	System.out.println("请输入姓名:");
	name=scanner.next();
	int i;
	for(i=0;i<student.size();i++)
	{
		student_base_data st1=student.get(i);
		if(st1.getNum()==num||st1.getName().equals(name))
		{
			System.out.println("请输入修改后的学生信息");
			student_base_data st2=new student_base_data(scanner.nextInt(),scanner.nextInt(),scanner.nextInt(),scanner.nextLine());
			student.set(i,st2);
			System.out.println("修改成功");
			return ;
		}
	}
	System.out.println("未找到该学生");
}
public  void sort()//实现排序功能
{
	ArrayList<student_base_data> student2=student;
	Collections.sort(student2,new Comparator<student_base_data>() {
		public int compare(student_base_data st1,student_base_data st2)
		{
			if(st1.getSocre()<st2.getSocre())
				return -1;
			else if(st1.getSocre()==st2.getSocre())
				if(st1.getNum()>st2.getNum())
					return 1;
			return -1;
		}
	});
	System.out.println("排序后的结果");
	for(student_base_data s :student2)
	{
		System.out.println("姓名:"+s.getName()+"\t"+"学号:"+s.getNum()+"\t"+"年龄: "+s.getAge()+"\t"+"成绩:"+s.getSocre());
	}
}
public ArrayList<student_base_data> getarr()
{
	return student;//返回到studentdemo中,并在studentdemo中将数据保存到文本中
}
}

fileread 文件读取类

下面的代码是将数据从文本中读取出来

package student;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import org.w3c.dom.ls.LSOutput;

public class fileread {
BufferedReader br;
//创建一个学生数据类的集合用于存储从文本中读取的数据
ArrayList<student_base_data> student=new ArrayList<student_base_data>();
public void get(String name) throws IOException//由于要对文本进行操作,所以要抛出异常,在测试类中处理了异常
{
	br=new BufferedReader(new FileReader(name));//创建一个字符缓冲流对象
}
public ArrayList<student_base_data> read() throws IOException
{
	String line;
	while((line=br.readLine())!=null)//一次读取一行数据
	{
		System.out.println(line);
		String[] s=line.split(",");//将所有的数据按“,”分割,并存到一个字符串数组中
		student_base_data st1=new student_base_data();
		//将字符串数组中的数据存到学生数据类的集合中
		st1.setName(s[1]);
		st1.setNum(Integer.parseInt(s[3]));//由于从文本中读取出来的数据时字符串,所以需要转换为Integer
		st1.setAge(Integer.parseInt(s[5]));
		st1.setSocre(Integer.parseInt(s[7]));
		student.add(st1);
	}
	br.close();
	return student;//将数据返回到操作类中
}
}

filesave 文件保存类

package student;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

public class filesave {
	private OutputStreamWriter out;
	public filesave(String name) throws IOException{
		out=new OutputStreamWriter(new FileOutputStream("学生管理数据.txt"));
	}
	public void story(ArrayList<student_base_data> student) throws IOException//异常抛给测试类
	{
		//下面这个for是foreach,也可以使用for循环来实现
		for(student_base_data st1 :student)
		{
			//将数据写入到文本中,并且每次写完一行数据再写入换行
			out.write("姓名:"+st1.getName()+","+"学号:"+st1.getNum()+","+"年龄:"+st1.getAge()+","+"成绩:"+st1.getSocre());
			out.write("\n");
		}
		out.close();
	}
	
	
}

以上就是我写的一个很简单的学生管理系统,代码中免不了错误和不完善,还请读者指正!

上一篇:数据结构与算法st1:稀疏数组的学习(五子棋的存盘与续盘)


下一篇:浮点指令系统