近期刚学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();
}
}
以上就是我写的一个很简单的学生管理系统,代码中免不了错误和不完善,还请读者指正!