控制台模拟学生登陆选课

本程序使用了ArrayList,HashMap,io流的序列化等知识。

package kgc.cn.sys;

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

/**
 * 1.首先需要读取已经注册的学生信息存储在Map集合中,方便后面注册时校验学生的学号是否已经被注册
 * 2.填写注册信息,校验学生序号是否已被注册,如果没有被注册,则将学生信息添加到Map集合中
 * 3.学生选课:选课时需要先校验课程是否已经被选了
 * 注意:序列化的时候需要注意所有的对象都必须实现序列化接口,JDK版本不能发生变化,否则反序列化将抛出异常
 */
public class Starter {

    private static Scanner sc =new Scanner(System.in);

    private static Map<String, Student> studentMap = new HashMap<>();

    private static final String STUDENT_PATH = "E:/student/stu.ser";

    private static final Course[] COURSES = {
            new Course("1", "Java"),
            new Course("2", "Html"),
            new Course("3", "Css"),
            new Course("4", "Js"),
            new Course("5", "数据库"),
            new Course("6", "JSP"),
            new Course("7", "Spring"),
            new Course("8", "Mybatis"),
    };

    private static String CURRENT_STUDENT_NUMBER = null;

    public static void main(String[] args) {
        readStudentFromFile();
        showLoginMenu();
    }

    private static void readStudentFromFile(){
        File file = new File(STUDENT_PATH);
        if(file.exists()){
            try(InputStream is = new FileInputStream(STUDENT_PATH);
                ObjectInputStream ois = new ObjectInputStream(is);){
                studentMap = (Map<String, Student>) ois.readObject();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private static void showLoginMenu(){
        System.out.println("1.登录");
        System.out.println("2.注册");
        System.out.println("3.退出");
        System.out.println("请选择菜单编号:");
        int number = sc.nextInt();
        if(number == 1){
            gotoLogin();
        } else if(number == 2){
            gotoRegister();
        } else {
            saveStudents();
            System.out.println("感谢使用");
        }
    }

    private static void saveStudents() {
        File parent = new File(STUDENT_PATH).getParentFile();
        if(!parent.exists())
            parent.mkdirs();
        try (OutputStream os = new FileOutputStream(STUDENT_PATH);
             ObjectOutputStream oos = new ObjectOutputStream(os);){
            oos.writeObject(studentMap);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void gotoLogin(){
        System.out.println("请输入学号:");
        String number = sc.next();
        System.out.println("请输入姓名:");
        String name = sc.next();
        if(studentMap.containsKey(number)){
            Student student = studentMap.get(number);
            if(name.equals(student.getName())){
                CURRENT_STUDENT_NUMBER = number;
                gotoChooseCourse();
            } else {
                System.err.println("学号或者姓名不匹配,请重新登录");
                gotoLogin();
            }
        } else {
            System.err.println("学号不存在,请先注册");
            showLoginMenu();
        }
    }

    private static void gotoRegister(){
        System.out.println("请输入学号:");
        String number = sc.next();
        System.out.println("请输入姓名:");
        String name = sc.next();
        if(studentMap.containsKey(number)){
            System.err.println("该学号已被注册");
            showLoginMenu();
        } else {
            studentMap.put(number, new Student(number, name));
            System.out.println("注册成功,是否前往登录?(Y/N)");
            String s = sc.next();
            if("Y".equalsIgnoreCase(s)){
                gotoLogin();
            } else {
                showLoginMenu();
            }
        }
    }

    private static void gotoChooseCourse(){
        for(Course c: COURSES){
            c.show();
        }
        System.out.println("请选择课程编号:");
        int number = sc.nextInt();
        Course c = COURSES[number-1];
        Student stu = studentMap.get(CURRENT_STUDENT_NUMBER);
        boolean success = stu.addCourse(c);
        if(success){
            System.out.println("选课成功,是否继续选课?(Y/N)");
            System.out.println("当前所选课程信息:");
            stu.showCourses();
            String s = sc.next();
            if("Y".equalsIgnoreCase(s)){
                gotoChooseCourse();
            } else {
                showLoginMenu();
            }
        } else {
            System.err.println("请勿重复选课");
            gotoChooseCourse();
        }
    }
}
package kgc.cn.sys;

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

public class Student implements Serializable {

    private String number;

    private String name;

    private List<Course> courses = new ArrayList<>();

    public Student(String number, String name) {
        this.number = number;
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

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

    /**
     * 返回值:true:添加成功,false:重复添加
     * @param c
     * @return
     */
    public boolean addCourse(Course c){
        boolean exists = false;
        for(Course course: courses){
            if(course.getNumber().equals(c.getNumber())){
                exists = true;
                break;
            }
        }
        if(!exists){
            courses.add(c);
            return true;
        }
        return false;
    }

    public void removeCourse(Course c){
//        for(Iterator<Course> iter=courses.iterator();iter.hasNext();){
//            Course course = iter.next();
//            if(course.getNumber().equals(c.getNumber())){
//                iter.remove();
//                break;
//            }
//        }
        for(int i=courses.size()-1;i>=0; i--){
            Course course = courses.get(i);
            if(course.getNumber().equals(c.getNumber())){
                courses.remove(i);
                break;
            }
        }
    }

    public void showCourses(){
        for(Course course: courses){
            course.show();
        }
    }
}

 

package kgc.cn.sys;

import java.io.Serializable;

public class Course implements Serializable {

    private String number;

    private String name;

    private int score;

    public Course(String number, String name) {
        this.number = number;
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

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

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public void show(){
        System.out.println(number + "." + name);
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,那我先给你介绍一下学生选课系统的功能设计。一般来说,学生选课系统需要包含以下功能: 1. 学生登录和注册:学生可以通过账号密码登录选课系统,也可以进行注册。 2. 选课和退课:学生可以在选课期间内选择自己想要的课程,也可以在一定时间内退选。 3. 课程管理:管理员可以添加、修改、删除课程信息,包括课程名称、课程编号、授课教师、上课时间等。 4. 学生管理:管理员可以添加、修改、删除学生信息,包括学生姓名、学号、所属班级等。 5. 成绩管理:管理员可以录入学生的成绩,并对学生成绩进行查询、统计和导出。 在实现这些功能的同时,我们需要使用到数据库。数据库的设计需要包括学生表、课程表和成绩表。学生表和课程表分别存储学生和课程的基本信息,成绩表则记录每个学生在每门课程中的成绩。 在控制台应用程序中实现学生选课系统,需要使用到 C# 的相关技术,比如 ADO.NET、LINQ to SQL 等。可以使用 ADO.NET 连接数据库,进行数据的增删改查操作。同时,也可以使用 LINQ to SQL 技术快速地实现数据库访问和操作。 除此之外,还需要设计合理的界面,使得用户能够方便地进行操作。可以使用 Console.ReadLine() 和 Console.Write() 等方法实现用户输入和输出。同时,也可以使用 Console.ForegroundColor 属性设置控制台文字的颜色,使得界面更加美观。 以上是关于 C# 基于数据库和控制台学生选课系统的简单介绍,希望能够帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值