学生管理系统(文件流)
来源:互联网 发布:u3d 粒子特效优化 编辑:程序博客网 时间:2024/06/04 01:16
import java.io.Serializable;public class Student implements Comparable<Student>,Serializable{ private int sno; private String name; private int age; private char sex; private String address; @Override public boolean equals(Object obj) { } @Override public String toString() { return "Student [sno=" + sno + ", name=" + name + ", age=" + age + ", sex=" + sex + ", address=" + address + "]"; } public Student(int sno, String name, int age, char sex, String address) { }@Overridepublic int compareTo(Student o) { if (sno>o.getSno()) return 1; else return -2;} }
import java.io.EOFException;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.Scanner;/** * 这是一个简易的学生管理系统,通过io文件流以及对象输入输出流的运用 * 实现数据的文件永久储存。编写代码中遇到过以下问题,大部分已解决: * 1.下次使用时,储存文件数据导入失败(ObjectOutputStream(false) 声明时自动将文件清空) * 2.对象输入输出流在 static代码块中不能正常运行??; * 3.如果使用ObjectOutputStream(true)会导致每次运行追加输入(header),从而读取失败 * 解决方法: * 1.定义MyObjectOutputStream(true),实现判断文件是否为空,若不是则不追加header * 2.使用ObjectOutputStream(false)不追加输入。 两种思路: * 1.直接一次将学生数组写入文件(Arraylist)、普通数组会报错(实现接口)?? * 2.多次将学生一个个写入文件 * **3.每次读对象之前,read跳过四个字节** * */public class StudentManagementSystem { public static FileOutputStream os; public static ObjectOutputStream oos; public static FileInputStream is; public static ObjectInputStream ois; /*static { try { } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }*/ public static int size=5; public static int times=0;//登陆次数 static Student[] studentList=new Student[size] ; public static int length=0;//数组下标 public static void addStudent(Student stu) throws IOException { if(length==0) { studentList[length++]=stu; } else { if(length>=size) {//数组扩容 size=2*size; Student[] studentList2=new Student[size]; for(int i=0;i<length;i++) { studentList2[i]=studentList[i]; } studentList=studentList2; } for(int i=0;i<length;i++) { if(studentList[i].getSno()==stu.getSno()) { System.out.println("学号不能重复,增加失败"); return; } } studentList[length++]=stu; } } public static void changeStudent(int sno,int age,String address) { } //查询 public static void seeStudent(int sno) { } public static void deleteStudent(int sno) { } public static void showStudent() { } public static void sortStudent() { } public static void main(String []args) throws IOException, ClassNotFoundException { is=new FileInputStream("c:\\jdk\\c.txt"); ois=new ObjectInputStream(is); //**oos若在此声明,会导致上一次写入文件的数据清空 /* os=new FileOutputStream("c:\\jdk\\c.txt"); oos=new ObjectOutputStream(os);*/ //想直接输入数组,一次搞定,但数据要是实现Serializable接口(不知道格式)/* Student s3=new Student(3, "jack", 12, '男', "杭州"); Student s2=new Student(2, "jack", 12, '男', "杭州"); Student s5=new Student(5, "jack", 12, '男', "杭州"); Student s4=new Student(4, "jack", 12, '男', "杭州"); addStudent(s1); addStudent(s2); oos.writeObject(studentList); try { studentList=(Student[]) ois.readObject(); } catch(EOFException e) { System.out.println("还未添加任何学生"); }*///以下方法由于多次追加写入文件(开关多次会使下次输入带header)导致 //每次重新打开oos 会输入一个header()//下次读出错(invalid type code: AC)静态代码块实现oos/* while(true){ try { s=(Student)ois.readObject(); System.out.println(s); studentList[length++]=s; } catch (EOFException e) { // TODO Auto-generated catch block break; } } */ Student s; while(true){ try { s=(Student)ois.readObject(); System.out.println(s); studentList[length++]=s; } catch (EOFException e) { // TODO Auto-generated catch block System.out.println("导入结束"); ois.close(); break; } } Scanner sc=new Scanner(System.in); while(true) {log: while(true) { System.out.println("1--登陆——————————2--注册"); int a=sc.nextInt(); switch (a) { case 1: if(LogIn.login.size()==0) System.out.println("还未有账户,请先注册"); else { System.out.println("请输入账号:"); String id=sc.next(); System.out.println("请输入密码"); String password=sc.next(); if(LogIn.hasLog(id, password)) { System.out.println("登陆成功"); times++; break log; }else System.out.println("账户不对"); } break; case 2: while(true) { System.out.println("请输入账号:"); String id=sc.next(); System.out.println("请输入密码"); String password=sc.next(); if(LogIn.hasId(id)) { System.out.println("该账号已存在"); } else { new LogIn(id,password); System.out.println("注册成功"); break ; } } break; default: System.out.println("输入有误"); break; } } in: while(true) { System.out.println("--------欢迎进入学生管理系统--------"); System.out.println("1.增加学生 2.删除学生 3.修改学生 4.查询学生 5.输出名单 6.排序输出 7.返回 8.退出 "); System.out.println("请输入序号:"); int a=sc.nextInt(); switch (a) { case 1: System.out.println("请输入学号:"); int sno=sc.nextInt(); System.out.println("请输入姓名:"); String name=sc.next(); System.out.println("请输入性别:"); char sex=sc.next().charAt(0); System.out.println("请输入年龄:"); int age=sc.nextInt(); System.out.println("请输入地址:"); String address=sc.next(); addStudent(new Student(sno, name, age, sex, address)); break; case 2: System.out.println("请输入学号:"); int sno2=sc.nextInt(); deleteStudent(sno2); break; case 3: System.out.println("请输入学号:"); int sno3=sc.nextInt(); System.out.println("请输入年龄:"); int age3=sc.nextInt(); System.out.println("请输入地址:"); String address3=sc.next(); changeStudent(sno3, age3, address3); break; case 4: System.out.println("请输入学号:"); int sno4=sc.nextInt(); seeStudent(sno4); break; case 5: showStudent(); break; case 8: os=new FileOutputStream("c:\\jdk\\c.txt");//*** oos=new ObjectOutputStream(os); System.out.println("使用次数:"+times); System.out.println("欢迎下次使用"); for(int i=0;i<length;i++) { oos.writeObject(studentList[i]); } oos.close(); return; case 7: break in; case 6: sortStudent(); showStudent(); break; default: System.out.println("输入有误"); break; } }} }
阅读全文
0 0
- 学生管理系统(文件流)
- 学生管理系统(文件)
- 【单链表实现】学生管理系统(缺少文件输入输出流)
- 简易学生管理系统(IO流、文件、)
- 学生管理系统(C++,控制台,文件读取,姓名排序)
- 用链表编写学生管理系统(涵盖文件的输入输出)
- 学生管理系统中的文件操作
- 学生管理系统(图)
- 学生管理系统(三)
- 学生管理系统(四)
- 学生管理系统(五)
- 学生管理系统(未完)
- 学生管理系统(JAVA)
- 学生管理系统(1)
- 学生管理系统(通讯录)
- 学生管理系统学习()二)
- 学生管理系统之Bug(1)
- 学生管理系统之BUG(3)
- ES6之Object.assign()详解
- 浏览器渲染页面原理
- SGISTL源码探究-list容器(上)
- 7. Reverse Integer
- GitChat · 人工智能 | 用语音和自然语言控制智能家居——实例分享
- 学生管理系统(文件流)
- butterknife----黄油刀
- Java 空字符串“”和null区别
- 优秀工程师必备的十大能力!
- Group Anagrams LeetCode 解题报告
- 本地存储webstorage-如何监测本地数据是否改变
- 合并流
- bitset
- Unity 状态机实例 学习之用