2021-03-03


1.学生类和用户类

内容概述:
1.定义一个学生类,在学生类中定义学生的姓名,学号,专业,成绩等属性。
2.在学生类为每个属性定义一个可以设置和返回该属性的方法。
3.定义一个用户类,在学生类中定义用户的姓名,密码等属性。
4.在用户类为每个属性定义一个可以设置和返回该属性的方法
代码如下 :


public class Student implements java.io.Serializable{
    private String Student_number;
    private String name;
    private String specialized;
    private double One_subject;
    private double Two_subject;
    private double Three_subject;
    private double Four_subject;
    private double Score_sum;
    private int position;

    public Student(String Student_number, String name, String specialized, double One_subject, double Two_subject, double Three_subject, double Four_subject) {
        this.Student_number = Student_number;
        this.name = name;
        this.specialized = specialized;
        this.One_subject = One_subject;
        this.Two_subject= Two_subject;
        this.Three_subject= Three_subject;
        this.Four_subject = Four_subject;
        this.Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
    }

    public String getname() {
        return this.name;
    }

    public void setname(String name) {
        this.name =name ;
    }

    public double getOne_subject() {
        return this.One_subject;
    }

    public void setOne_subject(double One_subject) {
        this.One_subject =One_subject;
        Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
    }

    public double getTwo_subject() {
        return this.Two_subject;
    }

    public void setTwo_subject(double Three_subject) {
        this.Two_subject = Two_subject;
        Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
    }

    public double getThree_subject() {
        return this.Three_subject;
    }

    public void setThree_subject(double Three_subject) {
        this.Three_subject = Three_subject;
        Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
    }

    public double getFour_subject() {
        return this.Four_subject;
    }

    public void setFour_subject(double Four_subject) {
        this.Four_subject = Four_subject;
        Score_sum=One_subject+Two_subject+Three_subject+Four_subject;
    }

    public double getScore_sum() {
        return this.Score_sum;
    }

    public String getSpecialized() {
        return this.specialized;
    }

    public void setSpecialized(String specialized) {
        this.specialized = specialized;
    }

    public void setScore_sum(double Score_sum) {
        this.Score_sum = Score_sum;
    }

    public int  getposition() {
        return this.position ;
    }
    public void setPosition(int position) {
        this.position=position;
    }

    public String getStudent_number() {
        return this.Student_number ;
    }
    public void setPosition(String Student_number) {
        this.Student_number=Student_number;
    }
}
public class User implements java.io.Serializable {
    private String userName;
    private String passWord;

    public User(String userName, String passWord) {
        this.userName = userName;
        this.passWord = passWord;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}


2,学生的信息交互

内容概述
1.定义一个StudentDao类用于实现学生的成绩档案功能,具体包括根据学生的学号和姓名查询学生的信息:

List  <Student>   findByStudent_number(String Student_number) 
 public List<Student> findByname(String name) 

添加新学生:

public void addStudent(Student student) 

修改学生信息:

public void modify(String student_number, double One_subject, double Two_subject, double Three_subject, double Four_subj 

删除学生:

 public void delete(String student_number) 

利用快速排序,对学生的信息根据成绩从高到低进行排序输出:

 public void print() 
 public void Fastsort()

2.定义一个用户类实现管理员的登录和注册等功能
添加新用户:

public void AddUser(User user)

根据用户名查找用户:

 public User findByName(String Username)

代码如下:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class StudentDao {
    private StudentFile studentfile;
    private UserFile userFile;
    private Database database;
    public StudentDao(Database UserDatabases) {
        this.database = UserDatabases;
        studentfile=new StudentFile();
        userFile=new UserFile();
    }
    public Database getDatabase() {
        return database;
    }

    public List<Student> findByStudent_number(String Student_number) {
        List<Student> list = new ArrayList<>();
        String choice = Student_number;
        for (Student student : database.getStudentList()) {
            if (choice.equals(student.getStudent_number())) {
                list.add(student);
            }
        }
        return list;
    }
    public List<Student> findByname(String name) {
        List<Student> list = new ArrayList<>();
        String choice = name;
        for (Student student : database.getStudentList()) {
            if (choice.equals(student.getname())) {
                list.add(student);
            }
        }
        return list;
    }
    public void addStudent(Student student) {
        database.getStudentList().add(student);

    }
    public void modify(String student_number, double One_subject, double Two_subject, double Three_subject, double Four_subject) {
        for (Student student : database.getStudentList())
            if (student.getStudent_number().equals(student_number)) {
                student.setOne_subject(One_subject);
                student.setTwo_subject(Two_subject);
                student.setThree_subject(Three_subject);
                student.setFour_subject(Four_subject);
                Fastsort();
                System.out.println("修改后学生的信息:");
                System.out.println(student.getStudent_number() + "\t" + student.getname() + "\t" + student.getSpecialized() + "\t" + student.getOne_subject() + "\t" + student.getTwo_subject() + "\t" + student.getThree_subject() + "\t" + student.getFour_subject() + "\t" + student.getScore_sum() + "\t" + student.getposition());
                break;
            }
    }
    public void delete(String student_number) {
        for (Student student : database.getStudentList()) {
            if (student.getStudent_number().equals(student_number)) {
                database.getStudentList().remove(student);
                break;
            }
        }
    }
    public void Fastsort(){
    int ai1=database.getStudentList().size();
    int w1=0;
    int w2=1;
    Student [] quantity=new Student[ai1];
    for (Student student : database.getStudentList()){
            quantity[w1++]=student;
        }
    sort(quantity,0,(ai1-1));
    database.getStudentList().clear();
        for (int min=0,max=quantity.length-1;min<max;min++,max--){
            Student temp=quantity[min];
            quantity[min]=quantity[max];
            quantity[max]=temp;
        }
        for (Student student : quantity){
            student.setPosition(w2++);
            database.getStudentList().add(student);
        }


    }
    public void print() {
        Fastsort();
        List<Student> list = database.getStudentList();
        System.out.println("学号  姓名    专业    学科一 学科二 学科三 学科四 总分 排名");
        for (int i = 0; i < list.size(); i++) {
//            //获取集合中的每一个元素
            Student student = (Student) list.get(i);
            System.out.println(student.getStudent_number() + "  " + student.getname() + "  " + student.getSpecialized() + "  " + student.getOne_subject() + "  " + student.getTwo_subject() + "  " + student.getThree_subject() + "  " + student.getFour_subject() + "  " + student.getScore_sum() + "  " + student.getposition());
        }
    }
    public void Student_informationSave() throws IOException {
        studentfile.outPut(database.getStudentList());
        userFile.outPut(database.getUserlist());
    }
    public void Student_informationload() throws IOException {
        List<Student> sd = studentfile.inPut();
        database.getStudentList().clear();
        for (Student student : sd) {
            database.getStudentList().add(student);
            }
        List<User> sd1 = userFile.inPut();
        database.getUserlist().clear();
        for (User users : sd1) {
            database.getUserlist().add(users);
        }
        Fastsort();
        System.out.println("信息加载成功!!");
        }
    public void sort(Student arr[], int low, int high) {
        int l = low;
        int h = high;
        double baseNum = arr[low].getScore_sum();

        while (l < h) {
            //1.从右向左查找小于指定基数的数,找到之后跳出循环执行下面if循环,交换数据
            while (l < h && arr[h].getScore_sum() >= baseNum) {
                h--;
            }
            //交换数据
            if (l < h) {
                Student temp = arr[h];
                arr[h] = arr[l];
                arr[l] = temp;
                l++;
            }
            //2.从左向右查找大于指定基数的数,找到后跳出循环执行下面if循环,交换数据
            while (l < h && arr[l].getScore_sum() <= baseNum)
                l++;
            //交换数据
            if (l < h) {
                Student temp = arr[h];
                arr[h] = arr[l];
                arr[l] = temp;
                h--;
            }
        }
        if (l > low) {
            sort(arr, low, l - 1);
        }
        if (h < high) {
            sort(arr, l + 1, high);
        }
    }
}


public class UserDao {
    private Database UserDatabase ;

    public UserDao(Database UserDatabases) {
        this.UserDatabase = UserDatabases;
    }

    public User findByName(String Username){
        User user =null;
        for(User e:UserDatabase.getUserlist()){
            if(e.getUserName().equals(Username)){
                user=e;
                break;
            }
        }
        return user;
    }
    public void AddUser(User user){
        UserDatabase.getUserlist().add(user);
    }

}

3,数据类

内容概述:
1定义一个database类,用于存储学生的信息数据和用户信息,初始化管理员信息为:用户名;root,密码:12345678,
实现返回学生的信息数据

public List<Student> getStudentList()

实现返回管理员的信息数据

 public List<User> getUserlist()

代码如下:

import java.util.ArrayList;
import java.util.List;

public class Database {
    //用户数据
    private List<User> Userlist = new ArrayList<>();
    private List<Student> StudentList =new ArrayList<>();
    /**
     * 在构造方法中对集合的数据进行初始化
     */
    public Database() {
        //初始化用户数据
        User s= new User("root","12345678");
        //将用户添加至集合
        Userlist.add(s);
    }
    public List<Student> getStudentList() {
        return StudentList;
    }

    public List<User> getUserlist() {
        return Userlist;
    }
}

4,用户交互的主界面实现

内容概述:
mainSystem主要用于与用户进行信息交互的界面展示,实现用户的登录,注册和对学生信息修改的功能。
基础选项展示

 public void start(){
        System.out.println("1. 登录");
        System.out.println("2. 注册");
        System.out.println("3. 退出系统");
        System.out.println("请选择:");

注册和登录功能的函数

 public void login()
 public void regist() 

信息交互界面:

 public void showSera(){
        System.out.println("1.新增学生信息");
        System.out.println("2.浏览学生信息");
        System.out.println("3.删除学生信息");
        System.out.println("4.保存学生信息");
        System.out.println("5.加载学生信息");
        System.out.println("6.修改学生信息");
        System.out.println("输入0结束程序");

代码如下:

import java.util.List;
import java.util.Scanner;

import static java.lang.System.exit;

public class managerSystem {
    private Scanner scanner = new Scanner(System.in);
    private Scanner scanner1 = new Scanner(System.in);
    private Scanner scanner2 = new Scanner(System.in);
    //DAO数据层对象
    private StudentDao studentdao;
    private UserDao userdao;
    private Database database;
    public managerSystem(Database database) {
         this.userdao = new UserDao(database);
         this.studentdao = new StudentDao(database);
        this.database=database;
    }

    //项目执行函数
    public void start(){
        System.out.println("1. 登录");
        System.out.println("2. 注册");
        System.out.println("3. 退出系统");
        System.out.println("请选择:");
        String chooice = scanner.next();
        switch (chooice){
            case "1":
                //登录
                login();
                break;
            case "2":
                regist();
                break;
            //注册
            case "3":
                System.out.println("退出了系统!");
                break;
            default:
                System.out.println("无效的选项,请重新输入!");
                start();
        }
    }

    /**
     * 登录
     */
    public void login(){
        System.out.println("请输入用户名:");
        String userName = scanner.next();
        System.out.println("请输入密码:");
        String password = scanner.next();
        String words="";//获取4位数验证码
        for(int i=0;i<4;i++){
            words=((int)(Math.random()*10))+words;
        }
        System.out.println("获得的验证码为:"+words);
        System.out.println("请输入验证码");
        String yanzhen=scanner.next();
        if(yanzhen.equals(words)) {
            //通过DAO根据用户名查询数据库中对象
            User user = userdao.findByName(userName);
            //判断用户是否存在
            if ( user!= null) {
                //将数据库中找到的账户,再根据其密码和输入的密码比较
                if (user.getPassWord().equals(password)) {
                    System.out.println("登录成功!");
                    showSera();
                } else {
                    System.out.println("密码错误!");
                    login();
                }
            } else {
                System.out.println("用户名不存在!请重新输入");
                login();
            }
        }
        else{
            System.out.println("验证码错误,请重新登录!");
            login();
        }
    }

    /**
     * 注册
     */
    public void regist() {
        System.out.println("请输入注册的用户名:");
        String userName = scanner.next();
        System.out.println("请输入注册的密码:");
        String password = scanner.next();
        //判断用户名是否被注册
        User user = userdao.findByName(userName);
        System.out.println("清确认密码:");
        String str1 = scanner.next();
        if (str1.equals(password)) {
            String words = "";
            for (int i = 0; i < 4; i++) {
                words = ((int) (Math.random() * 10)) + words;
            }
            System.out.println("获得的验证码为:" + words);
            System.out.println("请输入验证码");
            String yanzhen = scanner.next();
            if (yanzhen.equals(words)) {
                if (user!= null) {
                    System.out.println("该用户名已被注册!输入0返回上一层菜单,其他任意键继续注册");
                    String result = scanner.next();
                    if (result.equals("0")) {
                        start();
                    } else {
                        regist();
                    }

                } else {
                    //根据注册的信息创建一个账户对象
                    User registuser = new User(userName,password);
                    //将注册的信息写入数据库
                    database.getUserlist().add(registuser);
                    //返回起始菜单
                    start();
                }
            } else {
                System.out.println("验证码输入错误,输入0返回上一层菜单,其他任意键继续注册");
                String result = scanner.next();
                if (result.equals("0")) {
                    start();
                } else {
                    regist();
                }
            }
        } else {
            System.out.println("用户两次输入密码不一致,注册失败。输入0返回上一层菜单,其他任意键继续注册。");
            String result = scanner.next();
            if (result.equals("0")) {
                start();
            } else {
                regist();
            }
        }
    }


    public void showSera(){
        System.out.println("1.新增学生信息");
        System.out.println("2.浏览学生信息");
        System.out.println("3.删除学生信息");
        System.out.println("4.保存学生信息");
        System.out.println("5.加载学生信息");
        System.out.println("6.修改学生信息");
        System.out.println("输入0结束程序");
        String choice1=scanner.next();
        switch (choice1){
            case "0":
                exit(0);
                break;
            case "1":
                System.out.println("请输入学生的学号");
                String student_number= scanner2.next();
                System.out.println("请输入学生的姓名");
                String name= scanner2.next();
                System.out.println("请输入学生的专业");
                String specialized= scanner1.next();
                System.out.println("请输入学科一的成绩");
                double One_subject=scanner.nextDouble();
                if(One_subject<=0){
                    System.out.println("输入错误,返回上一层。");

                }
                System.out.println("请输入学科二的成绩");
                double Two_subject=scanner2.nextDouble();
                if(Two_subject<=0){
                    System.out.println("输入错误,返回上一层。");

                }
                System.out.println("请输入学科三的成绩");
                double Three_subject=scanner.nextDouble();
                if(Three_subject<=0){
                    System.out.println("输入错误,返回上一层。");
                }
                System.out.println("请输入学科四的成绩");
                double Four_subject=scanner1.nextDouble();
                if(Four_subject<=0){
                    System.out.println("输入错误,返回上一层。");

                }
                studentdao.addStudent(new Student(student_number,name,specialized,One_subject,Two_subject,Three_subject,Four_subject));
                System.out.println("添加成功!!");
                System.out.println("输入0返回主菜单,其他键结束程序");
                String judge= scanner1.next();
                if(judge.equals("0")){
                    showSera();
                }else{
                    exit(0);
                }
                break;
            case "2":
               //实现浏览学生信息
                studentdao.print();
                System.out.println("1.学生信息查询");
                System.out.println("2返回上一级");
                String ee2= scanner.next();
                switch (ee2){
                    case "2":
                        showSera();
                        break;
                    case "1":
                        System.out.println("1.按学号查询");
                        System.out.println("2.按姓名查询");
                        System.out.println("3.返回主菜单");
                        String ee90= scanner.next();
                        switch (ee90) {
                            case "1":
                                System.out.println("请输入查询的学号:");
                                String er1= scanner.next();
                                List<Student> s3=studentdao.findByStudent_number(er1);
                                System.out.println("学号  姓名    专业    学科一 学科二 学科三 学科四 总分 排名");
                                for (Student student : s3) {
                                    System.out.println(student.getStudent_number() + "  " + student.getname() + "  " + student.getSpecialized() + "  " + student.getOne_subject() + "  " + student.getTwo_subject() + "  " + student.getThree_subject() + "  " + student.getFour_subject() + "  " + student.getScore_sum() + "  " + student.getposition());

                                }
                                break;
                            case "2":
                                System.out.println("请输入查询的姓名:");
                                String er2= scanner.next();
                                List<Student> s4=studentdao.findByname(er2);
                                System.out.println("学号    姓名    专业    学科一 学科二 学科三 学科四 总分 排名");
                                for (Student student : s4) {
                                    System.out.println(student.getStudent_number() + "  " + student.getname() + "  " + student.getSpecialized() + "  " + student.getOne_subject() + "  " + student.getTwo_subject() + "  " + student.getThree_subject() + "  " + student.getFour_subject() + "  " + student.getScore_sum() + "  " + student.getposition());

                                }
                                break;
                            case "3":
                                showSera();
                            default:
                                System.out.println("输入错误!!");

                        }
                        System.out.println("输入0返回主菜单,其他键结束程序");
                        String re1= scanner1.next();
                        if(re1.equals("0")){
                            showSera();
                        }else{
                            exit(0);
                        }
                        break;
                    default:
                        System.out.println("输入错误!!");
                        System.out.println("输入0返回主菜单,其他键结束程序");
                        String rr= scanner1.next();
                        if(rr.equals("0")){
                            showSera();
                        }else{
                            exit(0);
                        }
                }
                break;
            case "3":
                System.out.println("请输入学生的学号");
                String student_number1= scanner.next();
                studentdao.delete(student_number1);
                System.out.println("删除成功");
                System.out.println("输入0返回主菜单,其他键结束程序");
                String rr= scanner1.next();
                if(rr.equals("0")){
                    showSera();
                }else{
                    exit(0);
                }
                break;
            case "4":
                System.out.println("确认保存??");
                System.out.println("1.确定");
                System.out.println("2.取消");
                String ee1= scanner.next();
                switch (ee1){
                    case "2":
                        System.out.println("取消成功,已返回主菜单。");
                        showSera();
                        break;
                    case "1":
                        studentdao.Student_informationSave();
                        break;
                    default:
                        System.out.println("输入错误!!");
                }
                System.out.println("输入0返回主菜单,其他键结束程序");
                String rx= scanner1.next();
                if(rx.equals("0")){
                    showSera();
                }else{
                    exit(0);
                }
                break;
            case "5":
                studentdao.Student_informationload();
                System.out.println("输入0返回主菜单,其他键结束程序");
                String rx1= scanner1.next();
                if(rx1.equals("0")){
                    showSera();
                }else{
                    exit(0);
                }
                break;
            case"6" :
                System.out.println("请入需要修改的学生的学号:");
                String student_number2= scanner.next();
                System.out.println("请输入学科一的成绩");
                double One_subjects=scanner.nextDouble();

                System.out.println("请输入学科二的成绩");
                double Two_subjects=scanner2.nextDouble();

                System.out.println("请输入学科三的成绩");
                double Three_subjects=scanner.nextDouble();
                System.out.println("请输入学科四的成绩");
                double Four_subjects=scanner1.nextDouble();
                studentdao.modify(student_number2,One_subjects,Two_subjects,Three_subjects,Four_subjects);
                System.out.println("输入0返回主菜单,其他键结束程序");
                String ry1= scanner1.next();
                if(ry1.equals("0")){
                    showSera();
                }else{
                    exit(0);
                }
            default:
                System.out.println("输入错误,请重新输入:");
                showSera();
        }
    }
}

5,学生和管理员信息的文件保存和读取实现

内容概述:
学生文件类和用户文件类中均有

 public  void outPut(List<User> list)
 public List<User> inPut()

用于实现文件的改写和读取 。
代码如下:


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

public class StudentFile {
    public void outPut(List<Student> list) throws IOException {
        OutputStreamWriter ww = new OutputStreamWriter(new FileOutputStream("Student.txt"), "UTF-8");
        for (Student S : list) {
            ww.write(S.getStudent_number() + "  " + S.getname() + "  "+S.getSpecialized()+"  " + S.getOne_subject() + "  " + S.getTwo_subject() + "  " + S.getThree_subject() + "  " + S.getFour_subject() + "  " + "  " + S.getScore_sum() + "  " + S.getposition() + "\n");
            ww.flush();
        }
        ww.close();
    }

    public List<Student> inPut() throws IOException {

        String line = "";
        List<Student>  j1=new ArrayList<>();
        File f1 = new File("Student.txt");
        FileReader reader = new FileReader(f1);
        BufferedReader br = new BufferedReader(reader);
        while ((line = br.readLine()) != null) {
            String[] spString = line.split("\\s+");
            String [] sde=new String[8];
            int bg=0;
            int a=0;
            for (String ss : spString) {
                sde[a++]=ss;
                if(a==8){
                    break;
                }
            }

            double sr1=Double.valueOf(sde[3]);
            double sr2=Double.valueOf(sde[4]);
            double sr3=Double.valueOf(sde[5]);
            double sr4=Double.valueOf(sde[6]);
            double sr5=Double.valueOf(sde[7]);
            j1.add(new Student(sde[0],sde[1],sde[2],sr1,sr2,sr3,sr4));
        }
        br.close();
        return j1;
}
}
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class UserFile {
    public void outPut(List<User> list) throws IOException {
        OutputStreamWriter ww = new OutputStreamWriter(new FileOutputStream("User.txt"), "UTF-8");
        for (User S : list) {
            ww.write(S.getUserName() + "  " + S.getPassWord()+ "\n");
            ww.flush();
        }
        ww.close();
    }

    public  List<User> inPut() throws IOException {

        String line = "";
        List<User>  j1=new ArrayList<>();
        File f1 = new File("User.txt");
        FileReader reader = new FileReader(f1);
        BufferedReader br = new BufferedReader(reader);
        while ((line = br.readLine()) != null) {
            String[] spString = line.split("\\s+");
            String [] sde=new String[2];
            int bg=0;
            int a=0;
            for (String ss : spString) {
                sde[a++]=ss;
                if(a==2){
                    break;
                }
            }

            j1.add(new User(sde[0],sde[1]));
        }
        br.close();
        return j1;

    }
}

6.运行结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

该项目由于是对学生成绩档案进行管理和存储,为了提高系统的安全性我在系统中设置登录界面和管理员信息,在登陆和注册界面设置验证码提高系统的安全性,在对对该项目实现的过程中,我复习了IO文件的写入,读取等功能的实现,还了解了写入txt文件时乱码的处理方式,收获很大。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值