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());
  }
 }
}

Java——简单实现学生管理系统的更多相关文章

  1. 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...

  2. 第82节:Java中的学生管理系统

    第82节:Java中的学生管理系统 学生管理系统的删除功能 删除,点击超链接,点击弹出对话框式是否进行删除,如果确定,就删除,超链接执行的是js方法,在js里访问,跳转servlet,,servlet ...

  3. Java实现功能简单的学生管理系统(附带源代码)

    这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...

  4. java课程设计 学生管理系统

    学生成绩管理系统 可实现功能 学生管理系统 查询学生信息:姓名.学号.性别.出生年月日.(学号自动生成且唯一) 查询学生成绩:每个人都有数学.Java与体育与选修课 查询学生课程 进行公选课选课 教师 ...

  5. java版本的学生管理系统

    import java.awt.BorderLayout; import java.awt.Color; import java.awt.Frame; import java.awt.event.Ac ...

  6. php实现简单的学生管理系统

    php实现学生管理系统 一.效果 二.代码框架 functions文件夹里面是封装的mysqli的数据库操作函数和一个跳转的函数 student文件夹里面就是学生管理系统的主界面 applicatio ...

  7. Java基础进阶:学生管理系统数组方式分包源码实现,教师管理系统集合和数组两种方式源码实现,图书馆管理系统源码实现,现附重难点,代码实现源码,课堂笔记,课后扩展及答案

    1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...

  8. java基础: ArrayList集合应用, ArrayList增删改查详解,综合java基础实现学生管理系统,

    1.ArrayList 集合和数组的区别 : 共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的 1.1 -ArrayList的构造方法和添加方法 public ArrayLi ...

  9. Java学习笔记-学生管理系统

    Java学习笔记 一个Student类 public class Student { private String sid; private String name; private String a ...

随机推荐

  1. npx 使用教程

    转自阮一峰http://www.ruanyifeng.com/blog/2019/02/npx.html npm 从5.2版开始,增加了 npx 命令.它有很多用处,本文介绍该命令的主要使用场景. N ...

  2. mysql优化查找执行慢的sql

    想要进行sql优化,肯定得先找出来需要优化的sql语句 一.mysql有一个自带的sql执行慢记录日志文件,所记录的日志取决于参数long_query_time控制,默认情况下long_query_t ...

  3. [Beta阶段]第二次Scrum Meeting

    Scrum Meeting博客目录 [Beta阶段]第二次Scrum Meeting 基本信息 名称 时间 地点 时长 第二次Scrum Meeting 19/05/03 大运村寝室6楼 40min ...

  4. Mysql:设置主键自动增长起始值

    比较郁闷昨天在家使用‘alter table `tablename` AUTO_INCREMENT=10000;’怎么也不起效,但是今天下班时间公司一同事尝试了一下就可以了.搞不明白自己当时是怎么操作 ...

  5. kaggle, gmail, 烟雨朦胧

    kaggle, gmail, 烟雨朦胧 刚才为了体验kaggle,用gmail重新登录,需要验证十几年前在桂林使用的手机号,竟然找到了,终于又可以上了. 那是一个在烟雨江南里努力奋斗而又迷失自我不堪回 ...

  6. 连接ftp服务器 JDK 1.7

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  7. .net framework msbuild环境搭建 (不装vs)

    1. 安装 .net framework sdk 小于等于 .net framework 4.5 版本的 .net framework sdk 通过 windows sdk 工具安装 从下面额链接找到 ...

  8. 在nginx环境下搭建基于ssl证书的websocket服务转发,wss

    1.证书准备 本地调试,可以安装自签名证书,安装方法参考https本地自签名证书添加到信任证书访问 2.修改配置文件 将上面的配置文件拷贝到conf目录,添加或者修改节点如下 # HTTPS serv ...

  9. xml 3 字节的 UTF-8 序列的字节 3 无效

    今天在eclipse中编写**.xml文件时,注释中的中文被eclipse识别到错误:3 字节的 UTF-8 序列的字节 3 无效,曾多次遇到该问题,问题的根源是: The cause of this ...

  10. Centos7根据yum源安装指定版本docker

    yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mi ...