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