Java教程

2021-08-04晨奖笔记

本文主要是介绍2021-08-04晨奖笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

利用java基础知识实现下面要求:

创建一个用户类User,有属性name(用户名),username(用户名),type(用户类型值stu表示学生,tea表示老师)
password(密码),sex(性别)。
创建一个学生类Student,继承User类,有属性score(分数)
创建一个教师类Teacher,继承User类,有属性workAge(工龄)

1、创建一个Login类,
属性User loginUser用来记录登录用户的。
有方法 main()做菜单选择 1-注册,2-学生登录,3-老师登录,0-退出程序
a、方法register(),要求
①是学生注册,老师不用注册(固定一位老师:name:王老师,username:t01;password:123;type:tea[用来区分老师和学生(stu)])
②输入的登录名不能重复。否则提示“用户已存在,注册失败”,结束程序,
两次输入不一致,注册失败”,结束程序
③输入的密码(6位数字或字母组成,正则表达式验证),要求再次输入确认密码,而且要一致。否则提示“密码
④注册成功的,把用户信息通过对象流方式保存到本地user.txt(老师信息也要保pr存)

b、方法loign()用于登录
(一)、学生登录
从user.txt读取学生信息用于登录
①提示用户输入登录名,检测登录名是否存在,不存在提示“用户不存在,
登录失败”
②在用户正确后,提示输入密码,判断密码与输入的密码是否一致。如果不
一致,提示“密码错误,登录失败”,一致则提示“登录成功,欢迎某某的登录”
登录成功后显示系统首页菜单即提示
“学生登录成功首页(菜单1-显示用户信息,2-修改用户密码,3-去测试,4-查看成绩
0-退出系统)”
1、方法showUser()显示当前用户信息
2、方法updatePwd()修改当前用户密码
3、方法test(),实现随机显示10道选择题(从questions.txt读取),学生做题,得到成绩。
通过对象流保存到本地score.properties
4、方法lookScore(),查看成绩(从score.properties读取)
5、方法logout,注销当前用户,返回主菜单
(二)、老师登录
①提示用户输入登录名,检测登录名是否存在,不存在提示“用户不存在,
登录失败”
②在用户正确后,提示输入密码,判断密码与输入的密码是否一致。如果不
一致,提示“密码错误,登录失败”,一致则提示“登录成功,欢迎某某的登录”
登录成功后显示系统首页菜单即提示
“老师登录成功首页(菜单1-显示用户信息,2-修改用户密码,3-出题,4-查看题目及选项
0-退出系统)”
1、方法showUser()显示当前用户信息
2、方法updatePwd()修改当前用户密码
3、方法addQuestion(),实现显示选择题,录入选择题的资料,并通过对象流保存到本地question.txt
4、listQuestion查看所有的题目
5、方法listScore(),查看成绩
6、方法logout,注销当前用户,返回主菜单
最后用测试类Test,实现程序的开始

做题思路:

  • entity包:创建User类、学生类、教师类,学生类和教师类都继承User类。把它们都放在entity包中(被dao调用) -
  • entity的意思就是实体的意思,一些实体类就集中放这个包中,entity包中的类是必须和数据库相对应的。
package com.entor.entity;

import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = 6267574801492839029L;

    private String name;
    private String username;
    private String password;
    private String sex;
    /**
     * 学生stu,教师tea
     */
    private String type;

    public User() {
    }

    public User(String name, String username, String password, String sex, String type) {
        this.name = name;
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.type = type;
    }

    public String getName() {
        return name;
    }

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

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

  • console包:创建三个菜单类:WelcomMemu、StudentMenu类,TeaxherMenu类(调用service)
  • :WelcomMemu类中有方法menu()主要是做菜单选择 1-注册,2-学生登录,3-老师登录,0-退出程序
 public void menu(){
        System.out.println("1、注册");
        System.out.println("2、学生登录");
        System.out.println("3、教师登录");
        System.out.println("4、退出程序");
    }

    public void chooseMenu(){
        while (true){
            menu();
            Scanner s = new Scanner(System.in);
            System.out.println("请输入菜单选项:");
            int num = s.nextInt();
            switch (num){
                case 1:
                    register();
                    break;
                case 2:
                    login();
                    break;
                case 3:
                    login();
                    break;
                case 4:
                    return;
                default:
                    System.out.println("没有此选项");
                    break;
            }
        }
    }

  • StudentMenu类中有 :
    1、方法showUser()显示当前用户信息
    2、方法updatePwd()修改当前用户密码
    3、方法test(),实现随机显示10道选择题(从questions.txt读取),学生做题,得到成绩。
    通过对象流保存到本地score.properties
    4、方法lookScore(),查看成绩(从score.properties读取)
    5、方法logout,注销当前用户,返回主菜单

  • TeaxherMenu类中有:
    1、方法showUser()显示当前用户信息
    2、方法updatePwd()修改当前用户密码
    3、方法addQuestion(),实现显示选择题,录入选择题的资料,并通过对象流保存到本地question.txt
    4、listQuestion查看所有的题目
    5、方法listScore(),查看成绩
    6、方法logout,注销当前用户,返回主菜单

把这三个类都放在同一个包中(console),方便后面方法调用。

  • dao包:通过一种方式将这些相同代码进行一个封装,对外提供统一的接口,这样操作数据的接口统一命名为 DAO
  • DAO包主要的作用:
    其实就是完成对数据库的增删改查(CRUD)
    DAO(Data Access Object)(数据访问对象)
    DAO就是和数据完成数据交互的业务逻辑 。
  • 本题的dao包中是创建一个StudentDao接口和创建一个StudentDaoImpl类:
  • StudentDao接口 里面有这些方法:
    1、判断用户名是否存在
    2、查询所有的用户
    3、新增学生
    4、用户登录
    5、查询个人信息
    6、修改用户密码
    -创建 StudentDaoImpl类实现 StudentDao接口:
package com.entor.dao.impl;

import com.entor.dao.StudentDao;
import com.entor.entity.Student;
import com.entor.entity.User;
import com.entor.util.FileIOUtil;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 学生dao实现类
 * dao(data access object)
 */
public class StudentDaoImpl implements StudentDao {

    private final String PATH = "/com/entor/file/user.txt";
    @Override
    public Student isExist(String username) {
        List<User> list = listUsers();
        if(list!=null&&!list.isEmpty()){
            for(User user:list){
                if(user.getUsername().equals(username)){
                    return (Student) user;
                }
            }
        }
        return null;
    }

    @Override
    public List<User> listUsers() {
        List<User> list = new ArrayList<>();
        //打开输入流
        ObjectInputStream ois = FileIOUtil.getObjectInputStream(StudentDaoImpl.class.getResource(PATH).getPath());
        if(ois==null){
            return list;
        }
        try {
            return (List<User>) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally{
            //关闭流
            FileIOUtil.close(ois,null);
        }
        return list;
    }

    @Override
    public void add(Student student) {
        List<User> list = listUsers();
        if(list!=null){
            list.add(student);
        }
        //打开输出流
        ObjectOutputStream oos = FileIOUtil.getObjectOutputStream(StudentDaoImpl.class.getResource(PATH).getPath());
        try {
            oos.writeObject(list);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            FileIOUtil.close(null,oos);
        }
    }

    @Override
    public Student login(String username, String password) {
        return null;
    }

    @Override
    public Student getByUsername(String username) {
        return null;
    }

    @Override
    public void updatePwd(Student student) {

    }
}

  • service包:该包放置业务操作类,例如用户服务类,一般情况将该用户操作类提取一个接口,然后在service包下生成一个impl包,在impl包中才放置用户操作接口的 实现类。该用户接口实现类中调用DAO接口对数据库进行操作。
  • 本题目是在service包下创建一个StudentService接口,在impl包中创建一个学生业务实现类 StudentServiceImpl类,它实现StudentService这个接口。
  • util包(工具包):在util包下创建FileIOutil类用于实现获取文件对象输入流、获取文件对象输出流,最后关闭文件的输入输出流
package com.entor.util;

import java.io.*;

public class FileIOUtil {

    /**
     * 获取文件对象输入流
     * @param path
     * @return
     */
    public static ObjectInputStream getObjectInputStream(String path){

        try {
            path = path.substring(1);
            File file = new File(path);
            if(file.length()!=0){
                return new ObjectInputStream(new FileInputStream(path));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取文件对象输出流
     * @param path
     * @return
     */
    public static ObjectOutputStream getObjectOutputStream(String path){

        try {
            path = path.substring(1);
            return new ObjectOutputStream(new FileOutputStream(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 关闭文件输入输出流
     * @param ois
     * @param oos
     */
    public static void close(ObjectInputStream ois,ObjectOutputStream oos){
        if(ois!=null){
            try {
                ois.close();
                ois = null;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if(oos!=null){
            try {
                oos.close();
                oos = null;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

这篇关于2021-08-04晨奖笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!