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. 11月1号开学! 《jmeter性能测试实战》崭新亮相!

    课程介绍 第10期<jmeter性能测试实战>课程,11月2号开学!全新改版,和之前的课程框架完全不同 主讲老师:飞天小子 上课方式:每周六周日晚8点到10点,QQ群视频在线直播教学 本期 ...

  2. Python开发:OpenCV版本差异所引发的cv2.findContours()函数传参问题

    一.问题如下: cv2.findContours()这个方法是用来找出轮廓值的: # cv2.findContours找出轮廓值,cv2.RETR_EXTERNAL表示图像的外轮廓 binary, c ...

  3. 一口气讲完 LSA — PlSA —LDA在自然语言处理中的使用

    自然语言处理之LSA LSA(Latent Semantic Analysis), 潜在语义分析.试图利用文档中隐藏的潜在的概念来进行文档分析与检索,能够达到比直接的关键词匹配获得更好的效果. LSA ...

  4. 最长公共子序列长度(dp)

    /// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...

  5. 反射调用异常InvocationTargetException和代理类抛出异常

    反射调用方法,如果方法抛出异常,会被包装成InvocationTargetException. 如果反射对象被代理了,在代理类中抛出异常,不会被包装成InvocationTargetException ...

  6. Spring Cloud-新一代Web框架微服务

    序言 springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合.基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易. 通过一些简单的注解,我们就可以快速的 ...

  7. Centos 7.x卸载ibus黑屏修复及fcitx搜狗拼音安装方法

    ibus黑屏修复 百度出来的fcitx安装方法,都要卸载ibus,如果没有注意同时卸载掉的依赖包的话,gnome桌面中的一些关键库也没被卸载. 修复方法很简单,重新安装Gnome sudo yum - ...

  8. Hive的两种操作模式

    Hive的客户端操作 Hive的客户端操作 通过JDBC操作Hive 通过Thrift操作Hive 通过JDBC操作Hive 首先 Hive 启动远程服务 hive --service hiveser ...

  9. Intelij idea 中文字体渲染异常解决方法

    当 Font 选择的字体无法渲染时,则尝试使用该选项所选择的字体渲染.

  10. pipeline配置sonar和自动化

    1.sonar配置webhooks, 2.url填写jenkins的地址:http://jenkinsurl/sonarqube-webhook/ 3.前提:jenkins配置好sonar的scann ...