欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java——简单实现学生管理系统

程序员文章站 2023-10-28 22:24:58
import java.io.*;import java.util.ArrayList;import java.util.Scanner;class MyObjectOutputStream extends ObjectOutputStream{ public MyObjectOutputStrea ......

import java.io.*;
import java.util.arraylist;
import java.util.scanner;
class myobjectoutputstream extends objectoutputstream{
 public myobjectoutputstream() throws ioexception{
  super();
 }
 public myobjectoutputstream(outputstream out) throws ioexception {
  super(out);
 }
 public void writestreamheader() throws ioexception {
  return;
 }         //以上为解决对象流输入输出读写文件时的一些问题,重写库里的方法。
}
class student implements serializable {    //序列化这个类,只有成员变量无方法,作为结构体使用。
 long studentid = 1803050200;                  //学号,姓名,性别,年龄,备注。
 string studentname = "noname";
 string sexual = "unknow";
 int age = 18;
 string ps = "unknow";
}
public class demosystem {          
 public static void main (string args []) {
  boolean end = true;
  string c ;
  c = "请选择系统功能项:"+"\n"+"\t"+"a.从文件中读入学生的基本信息"+"\n"+"\t"+"b.添加新学生的基本信息"+"\n"+"\t"+"c.学生基本信息显示"+"\n"+"\t"+"d.学生信息保存至文件"+"\n"+"\t"+"e.学生基本信息删除"+"\n"+"\t"+"f.学生基本信息的修改"+"\n"+"\t"+"g.学生基本信息查询"+"\n"+"\t"+"\t"+"1.按学号查询"+"\n"+"\t"+"\t"+"2.按姓名查询"+"\n"+"\t"+"h.退出系统"+"\n";   //方便打印管理系统界面。
  student stu[] = new student[10];    //实例化“结构体”数组。
  arraylist<student> al = new arraylist<student>();   //泛型数组,方便保存。单纯的对象流输入输出,并不方便。
  for(int i = 0;i<10;i++) {       //初始化
   stu[i] = new student();
  }
  scanner sc = new scanner(system.in);    //用户输入
  file f = new file("d:\\javawork","stu1.txt");  //文件创建
  try {                 //因为文件读写可能出现异常,所以把语句放入try语句块内,方便捕捉异常
   while(end) {        //循环开始,end为前面设的布尔值,初始值为true
    system.out.println(c);   //打印管理系统菜单(界面)
    char d = sc.next().charat(0);   //等待用户输入对应的菜单项字母
    switch(d) {       //匹配相应的用户输入的菜单字母,以执行其功能
    case 'a':         //从文件读取学生信息
     fileinputstream filein = new fileinputstream(f);   //初始化对象流。
     objectinputstream objectin = new objectinputstream(filein);
     try {    //用try捕捉异常,可能出现找不到文件的现象
     arraylist<student> al1 =  (arraylist<student>)objectin.readobject();  //用对象流读取,并打印学生信息
     for(int i = 0;i<10;i++) {
      stu[i] = al1.get(i);
      system.out.println("name:"+stu[i].studentname+"  sexual:"+stu[i].sexual+"  age:"+stu[i].age+"  id:"+stu[i].studentid+"  ps:"+stu[i].ps);
     }
     }
     catch(classnotfoundexception e) {
      system.out.println(e);
     }
     objectin.close();  //关闭对象流
     filein.close();
     break;
    case 'b':    //添加新学生功能
       int q = 0;
       int flag = 0;
       boolean end0 = true;
       string name = "noname";
       while(end0&&flag<10) {  //运用flag,以防数组已满,不能添加
        if(stu[flag].studentname.compareto(name)==0) {
         q=flag;
         end0 = false;
        }
        flag++;
       }
     for(;q<10;q++) {
     if(stu[q].studentname.compareto(name)==0) {
      system.out.println("请输入新学生姓名:");
      stu[q].studentname = sc.next();
      system.out.println("请输入新学生学号:");
      stu[q].studentid = sc.nextlong();
      system.out.println("请输入新学生年龄:");
      stu[q].age = sc.nextint();
      system.out.println("请输入新学生性别:");
      stu[q].sexual = sc.next();
      system.out.println("请输入对新学生的备注:"+"\n");
      stu[q].ps = sc.next();
      system.out.println("添加新学生信息完毕!"+"\n");
     }
     system.out.println("是否继续?yes/no");
     string anwser = sc.next();
     if(anwser.compareto("yes")==0) {
      q=q;
     }
     if(anwser.compareto("no")==0) {
      q = 10;
     }
     }
     break;
    case 'c':      //显示基本学生信息
     string s;
     for(int i = 0;i<10;i++) {
      s= "姓名:"+stu[i].studentname+"  性别:"+stu[i].sexual+"  年龄:"+stu[i].age+"  学号:"+stu[i].studentid+"  备注:"+stu[i].ps;
      system.out.println(s);
     }
     break;
    case 'd':   //保存学生信息
     fileoutputstream fileout = new fileoutputstream(f);
     objectoutputstream objectout = new objectoutputstream(fileout);
     if(f.length()<1) {
      for(int i=0;i<10;i++) {
       al.add(stu[i]);
      }
      objectout.writeobject(al);
      objectout.flush();
     }
     else {
      myobjectoutputstream mos = new myobjectoutputstream(fileout);
      for(int i=0;i<10;i++) {
       al.add(stu[i]);
      }
      mos.writeobject(al);
      mos.flush();
     }
     objectout.close();
     fileout.close();
     break;
    case 'e':    //删除学生信息
     boolean start1= true;
     while(start1) {
     system.out.println("请输入你想操作的学号:");
     long si = sc.nextlong();
     for(int i = 0;i<10;i++) {
      if(stu[i].studentid==si) {
       string str1 = "姓名:"+stu[i].studentname+"  性别:"+stu[i].sexual+"  年龄:"+stu[i].age+"  学号:"+stu[i].studentid+"  备注:"+stu[i].ps;
       system.out.println(str1);
       system.out.println("\t"+"1.姓名"+"\n"+"2.性别"+"\n"+"3.年龄"+"\n"+"4.学号"+"\n"+"5.备注"+"\n");
       system.out.println("请输入您要操作的序号:");
       int l = sc.nextint();
       switch(l) {
       case 1:
        stu[i].studentname = "noname";
        break;
       case 2:
        stu[i].sexual="unknow";
        break;
       case 3:
        stu[i].age=18;
        break;
       case 4:
        stu[i].studentid = 1803050200;
        break;
       case 5:
        stu[i].ps="unknow";
        break;
       default :
        system.out.println("输入序号错误!"); 
       } 
      }
     }
     system.out.println("是否继续删除学生信息?yes/no");
     string me1 = sc.next();
     if(me1.compareto("yes")==0) {
      start1 = true;
     }
     if(me1.compareto("no")==0) {
      start1 = false;
     }
     }
     break;
    case 'f':   //更改学生信息
     boolean end2 = true;
     system.out.println("请输入你想操作的学号:");
     long si1 = sc.nextlong();
     for(int i = 0;i<10;i++) {
      if(stu[i].studentid==si1) {
       string str2 = "姓名:"+stu[i].studentname+"  性别:"+stu[i].sexual+"  年龄:"+stu[i].age+"  学号:"+stu[i].studentid+"  备注:"+stu[i].ps;
       system.out.println(str2);
       system.out.println("\t"+"1.姓名"+"\n"+"2.性别"+"\n"+"3.年龄"+"\n"+"4.学号"+"\n"+"5.备注"+"\n");
       system.out.println("请输入您要操作的序号:");
       int l1 = sc.nextint();
       while(end2) {
        switch(l1) {
        case 1:
         system.out.println("请输入你更改后的姓名:");
         stu[i].studentname = sc.next();
         break;
        case 2:
         system.out.println("请输入你更改后的性别:");
         stu[i].sexual = sc.next();
         break;
        case 3:
         system.out.println("请输入你更改后的年龄:");
         stu[i].age = sc.nextint();
         break;
        case 4:
         system.out.println("请输入你更改后的学号:");
         stu[i].studentid = sc.nextlong();
         break;
        case 5:
         system.out.println("请输入你更改后的备注::");
         stu[i].ps = sc.next();
         break;
        default :
         system.out.println("输入序号错误!");
        }
        system.out.println("是否继续修改?yes/no");
        string an1=sc.next();
        if(an1.compareto("yes")==0) {
         end2 = true;
        }
        if(an1.compareto("no")==0) {
         end2 = false;
        }
       }
      }
     }
     break;
    case 'g':  //查询某个学生信息
     boolean end4 = true;
     while(end4) {
     system.out.println("(1).按学号查询"+"\n"+"(2).按姓名查询"+"\n"+"输入操作序号,继续"+"\n");
     int l3 = sc.nextint();
     if(l3==1) {
      system.out.println("请输入查询学号:");
      long stid2=sc.nextlong();
      for(int i = 0;i<10;i++) {
       if(stu[i].studentid==stid2) {
       string str3 = "姓名:"+stu[i].studentname+"  性别:"+stu[i].sexual+"  年龄:"+stu[i].age+"  学号:"+stu[i].studentid+"  备注:"+stu[i].ps;
       system.out.println(str3);
       }
      }
     }
     if(l3==2) {
      system.out.println("请输入查询姓名:");
      string stna2 = sc.next();
      for(int i = 0;i<10;i++) {
       if(stna2.compareto(stu[i].studentname)==0) {
        string str4 = "姓名:"+stu[i].studentname+"  性别:"+stu[i].sexual+"  年龄:"+stu[i].age+"  学号:"+stu[i].studentid+"  备注:"+stu[i].ps;
        system.out.println(str4);
       }
      }
     }
     system.out.println("是否继续查询?yes/no");
     string an4 = sc.next();
     if(an4.compareto("yes")==0) {
      end4 =true;
     }
     if(an4.compareto("no")==0) {
      end4 =false;
     }
     }
     break;
    case 'h':
     system.out.println("退出系统!");
     end =false;
     break;
    default :
     system.out.println("输入的操作字母错误!");
     }
   }
  }
  catch(ioexception e) {
   system.out.println(e.tostring());
  }
 }
}