java学生管理系统

        大学java实验后面有学生管理系统、银行管理系统等多选一,主页有不同版本的银行管理系统,此程序针对学生管理系统,有简易的文件读写操作,而不是用一些固定的数据,每次打开都是一样的值,代码比较简单,相对容易读懂,看注释即可。

        首先是目录:

        

        txt文件格式:

        代码:

Student类:

package Stu;

/**
 * 简易学生管理系统
 * 属性:学号、姓名、性别、年龄、成绩
 * 功能:实现添加学生;根据学号查询;全部查询;根据学号删除
 * 没有数据库,涉及文件读写操作
 * */

import java.io.*;
import java.util.Scanner;
//创建实体类,本来有属性和get、set方法,后来感觉用不到 就删除了
public class Student {
    /*初始化字符流读、写、扫描器和文件路径,后面直接调用即可,不用再创建了
    这里直接public了 省的get*/
    BufferedReader reader;
    BufferedWriter writer;
    File file = new File("src/Stu/student.txt");
    //直接创建扫描器,后面循环结束再关闭,否则每个类里面都创建一遍会导致程序终止
    Scanner sc = new Scanner(System.in);
    //主方法,程序入口
    public static void main(String[] args){
        System.out.println("欢迎使用学生管理系统");
        new Start().start();
    }
}

Start:

package Stu;

import java.io.IOException;

public class Start {
    //创建对象,方便调用
    Student student = new Student();

    public void start(){
        //创建布尔类型变量,用于判断循环
        boolean b = true;
        while(b){
            System.out.println("--------请选择操作项");
            System.out.println("1、添加学生");
            System.out.println("2、查询学生信息");
            System.out.println("3、删除学生信息");
            System.out.println("4、查询所有学生");
            System.out.println("5、退出");
            int i = student.sc.nextInt();
            switch (i){
                case 1:
                    //添加
                    new Add().add();
                    break;
                case 2:
                    //根据学号查询
                    new SelectOne().selectOne();
                    break;
                case 3:
                    //删除
                    new Delete().check();
                    break;
                case 4:
                    //查询全部
                    new SelectAll().outPut();
                    break;
                case 5:
                    System.out.println("感谢使用");
                    b = false;
                    break;
                default:
                    System.out.println("输入有误,请重新输入");
                    start();
            }
        }
        student.sc.close();//占用资源,记得关闭
    }
}

SelectAll:

package Stu;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class SelectAll {

    Student student = new Student();
    //查询全部,这里方法用了返回值,方便后面的调用,不需要再写一遍读方法了
    public List<String> selectAll() {
        //创建集合接收文件中读出的数据
        List<String> slist = new ArrayList<>();
        String str = "";
        try {
            student.reader = new BufferedReader(new FileReader(student.file));
            //按行读
            while((str = student.reader.readLine())!=null){
                slist.add(str);
            }
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return slist;
    }
    //输出
    public void outPut(){
        List<String> list = new SelectAll().selectAll();
        //这里与SelectOne中体现的是两种遍历集合的方法
        for(String s:list){
            System.out.println(s);
        }
    }
}

 SelectOne:

package Stu;

import java.util.List;

public class SelectOne {

    Student student = new Student();
    //根据学号查询
    public void selectOne(){
        System.out.println("请输入要查询的学号");
        //直接调用Student类的扫描器
        String sid = student.sc.next();
        //创建集合,接收SelectAll中的list,不需要再读取一次文件了
        List<String> list = new SelectAll().selectAll();
        //创建个标签,如果查到了就是true,没查到就在下面输出
        boolean b = false;
        //遍历list,截取子串与输入的学号进行比对,如果有就输出信息
        for(int i=0;i<list.size();i++){
            if(list.get(i).substring(0,3).equals(sid)){
                System.out.println(list.get(i));
                b = true;
            }
        }
        //用标签的改变来判断查询结果,直接在循环里面else会导致死循环,感兴趣可以试试
        if(b==false){
            System.out.println("查无此人,请重新输入");
            selectOne();
        }
    }
}

Add:

package Stu;

import java.io.*;

public class Add {

    Student student = new Student();
    //添加
    public void add(){
        //扫描器接收键盘输入
        System.out.println("请输入学号");
        String id = student.sc.next();
        System.out.println("请输入姓名");
        String name = student.sc.next();
        System.out.println("请输入性别");
        String gender = student.sc.next();
        System.out.println("请输入年龄");
        int age = student.sc.nextInt();
        System.out.println("请输入成绩");
        double grade = student.sc.nextDouble();
        //把接收到的字符串和数字拼接成新的字符串,\t是tab,\n实现换行,直接另起一行写入文件
        String str = "\n"+id+"\t"+name+"\t"+gender+"\t"+age+"\t"+grade;
        try {
            //按行写入文件中,true代表append,接着前边的数据开始写,这样不会覆盖掉之前的数据
            FileWriter fw = new FileWriter(student.file,true);
            student.writer = new BufferedWriter(fw);
            student.writer.write(str);
            //数据是写在缓存中,要冲流
            student.writer.flush();
            student.writer.close();//记得关闭
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Delete:

package Stu;

import java.io.*;
import java.util.List;

public class Delete {

    Student student = new Student();
    //根据学号删除
    public void check() {
        System.out.println("请输入要删除学生的学号");
        //扫描器接收键盘输入
        String sid = student.sc.next();
        //创建集合接收SelectAll中的list
        boolean b = false;
        List<String> slist = new SelectAll().selectAll();
        //判断是否存在
        for (String str : slist) {
            if (str.substring(0, 3).equals(sid)) {
                b = true;
            }
        }
        if (b == false) {
            System.out.println("查无此人,请重新输入");
            check();
        }else{
            delete(sid);
        }
    }
    public void delete(String sid){
        List<String> slist = new SelectAll().selectAll();
        try {
            //字符流写入文件
            FileWriter fw = new FileWriter(student.file);
            student.writer = new BufferedWriter(fw);

            //遍历list截取子串,根据输入的学号对比,如果匹配就从集合中删掉该元素,下标前移
            for(int i=0;i<slist.size();i++){
                if(slist.get(i).substring(0,3).equals(sid)){
                    slist.remove(i);
                    i--;
                }
            }
            //把新的集合数据重新写入文件
            for(int j=0;j<slist.size();j++){
                //这里判断是否要换行,如果是最后一个元素则不需要换行
                if (j< slist.size()-1){
                    student.writer.write(slist.get(j)+"\n");
                }else{
                    student.writer.write(slist.get(j));
                }
            }
            //数据先是写到缓存中,要冲流
            student.writer.flush();
            student.writer.close();//记得关闭
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        最后附言:

        纸上得来终觉浅,绝知此事要躬行。若是真有需要实验代码的学弟学妹看到此文章,虽然附上了全部代码,但是最好作为一个参考,哪怕照着写一遍,把注释都看懂,再细化一下,你们肯定比我写得好!要想会,一定要自己敲!切记!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值