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

用Java编写一个学生管理系统,第1张

用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 =new ArrayList();
	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 student2=student;
	Collections.sort(student2,new Comparator() {
		public int compare(student_base_data st1,student_base_data st2)
		{
			if(st1.getSocre()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 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=new ArrayList();
public void get(String name) throws IOException//由于要对文本进行 *** 作,所以要抛出异常,在测试类中处理了异常
{
	br=new BufferedReader(new FileReader(name));//创建一个字符缓冲流对象
}
public ArrayList 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) 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();
	}
	
	
}

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5119486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存