精华内容
下载资源
问答
  • java 学生选课管理系统 源代码

    热门讨论 2010-11-18 14:46:38
    java 学生选课管理系统 课程信息 学生选课
  • java学生选课管理系统源码.rar.rar
  • java 学生选课管理系统 课程设计 自己做的
  • 需求分析写一个较为严谨的学生选课系统实现学生可以选择多门选课课程并将有效选课结果保存到数据库学生需要登录后才能选课让学生可以在选课系统通过多种方式查询到要选的课程信息 //选课规则1每个学生可以选多门课程...
  • 系统所要实现的功能分析,对于现在网络方便的管理,系统要实现学生可以直接在平台上进行查看自己...所以学生选课管理系统的设计 的开发不仅仅是能满足学生的需求,还能提高管理员的工作效率,减少原有不必要的工作量。
  • Java学生选课管理系统 MySql_MVC_JAVAfx_可视化

    千次阅读 多人点赞 2020-12-18 22:28:54
    Java课程设计_学生选课管理系统 一、需求分析 本数据库的用户主要是学生,通过对用户需求的收集和分析,获得用户对数据库的如下要求。 1.信息需求 学生信息:学号,姓名,性别,专业 登陆信息:账号,密码 课程信息:...

    Java 学生选课管理系统

    一、需求分析

    😐 本数据库的用户主要是学生,通过对用户需求的收集和分析,获得用户对数据库的如下要求。

    1.信息需求

    1. 😐 学生信息:学号,姓名,性别,专业
    2. 😐 登陆信息:账号,密码
    3. 😐 课程信息:课程号,课程名,选课人数,选课容量,任课老师
    4. 😐 选课信息:课程号,学生学号
    5. 😐 登录信息:账号、密码

    2.功能需求

    1. 😐 系统为学生建立登陆信息,学生进入系统前需要身份验证,用户名、密码输入正确后方可进入系统,账号不存在时用户也可注册账号。
    2. 😐 在系统中,用户可以在界面中看到本人的基本信息,也可以对课程信息表和个人选课信息表进行查看、以及选课。
    3. 😐 使用数据库存储读取数据内容

    3.系统需求

    学生信息管理系统采用的编译环境是IntelliJ IDEA,编程语言是Java,使用用MySQL数据库,有以下功能:
    😐 (1)有较好的权限管理。
    😐 (2)原始数据修改简单方便,支持多条件修改。
    😐 (3)方便的数据查询,支持多条件查询。
    😐 (4)Java提供JavaFX包可制作界面视觉效果较好的交互式平台,满足用户审美需求。

    二、定义数据库

    😐 创建数据库

    CREATE DATABASE Couse ON PRIMARY(NAME = Couse,
    FILENAME = 'D:\JAVA\courseDesign_2020JAVA' ,
    SIZE = 2MB, FILEGROWTH = 10%,FILERROWHT=4MB) 
    

    😐 创建数据表

    CREATE TABLE user (
    	id char(25) IDENTITY  NOT NULL PRIMARY KEY,
    	name char(25)  NOT NULL ,
    	sex char(2) CHECK (性别 IN(’男’,’女’)) ,
    profess char(30)  NULL ,
    )
    CREATE TABLE subject (
    	subjectId varchar(20)  NOT NULL PRIMARY KEY ,
    	name varchar(25)  NOT NULL ,
    	Noss int  NOT NULL ,
    capacity int   NULL ,
    teacher varchar(25)   NULL ,
    )
    CREATE TABLE PickCouse (
    	stuId char(25),
    	couseId char(25)  NOT NULL ,
    ) 
    CREATE TABLE login (
    	Id char(25)  NOT NULL PRIMARY KEY,
    	pwd char(25)  NOT NULL ,

    UML类图

    在这里插入图片描述

    三、运行效果展示

    1 . 😐 用户登录

    在这里插入图片描述

    2. 😐 用户注册

    在这里插入图片描述

    3. 😐 功能主界面

    在这里插入图片描述

    4. 😐 查看全部课程信息

    在这里插入图片描述

    5. 😐 查看个人选课信息

    在这里插入图片描述

    6. 😐 学生选课

    在这里插入图片描述

    7.😐 登录样板

    在这里插入图片描述

    8.😐 功能实现

    在这里插入图片描述

    四、😐 开放源代码

    在这里插入图片描述

    1. 😐 学生信息类:

    package StuPickCouse_MVC.Modul.PickCouse;
    
    public class User {
        String id;
        String pwd;
        String name;
        String sex;
        String pross;//专业
    
        public User(String id,String pwd){
            this.id=id;
            this.pwd=pwd;
        }
        public User(String id, String name, String sex, String pross) {
            this.id = id;
            this.name = name;
            this.sex = sex;
            this.pross = pross;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        public User(){}
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getPross() {
            return pross;
        }
    
        public void setPross(String pross) {
            this.pross = pross;
        }
    
        @Override
        public String toString() {
            return "id='" + id + '\'' +", name='" + name + '\'' +", sex='" + sex + '\'' +", pross='" + pross;
        }
    }
    
    

    2.😐 课程信息类:

    package StuPickCouse_MVC.Modul.PickCouse;
    
    public class Couse {
        String id;
        String name;
        String num;//选课人数
        String capacity;//容量
        String teacher;
        public void setTab(int tab) {
            this.tab = tab;
        }
        public void setCanChiose(String canChiose) {
            this.canChiose = canChiose;
        }
        int tab=20;
        String canChiose;
        public String getTeacher() {
            return teacher;
        }
    
        public Couse(String id, String name, String num, String capacity, String teacher) {
            this.id = id;
            this.name = name;
            this.num = num;
            this.capacity = capacity;
            this.teacher = teacher;
        }
    
        public Couse(String id){this.id=id;}
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getNum() {
            return num;
        }
    
        public String getCapacity() {
            return capacity;
        }
    
        public String toString() {
            if(NO==null) {
                return "    "+id+"         "+ name+"           "+( num + "/" + capacity)+"         " + teacher;
            }
            else
                return setCell(String.valueOf(NO))+setCell(id) + setCell(name) + setCell(capacity==null?num:num+ "/" + capacity) +setCell(teacher)+setCell(canChiose);
        }
        public void setNo(int no) {
            this.NO = String.valueOf(no);
        }
    
        String setCell(String item){
            String type=item;
            int len=0;
            char[] chars=item.toCharArray();
            for (char s:chars){
                len=(String.valueOf(s).matches("[\u4e00-\u9fa5]"))?len+4:len+2;
            }
            for (int i=0;i<tab-len;i++){
                type=type+" ";
            }
            return type;
        }
        String NO;
        public Couse(String NO,String id, String name, String num, String teacher, String canChiose) {
            this.id = setCell(id);
            this.name = setCell(name);
            this.num = setCell(num);
            this.teacher = setCell(teacher);
            this.canChiose = setCell(canChiose);
            this.NO= NO;
        }
    }
    
    

    3.😐 学生数据库操作类:

    package StuPickCouse_MVC.Modul.PickMysql;
    
    import StuPickCouse_MVC.Modul.PickCouse.User;
    import javax.swing.*;
    import java.sql.*;
    
    public class UserSql {
        Connection con=null;
        Statement sql;
        ResultSet rs;
        public UserSql(){}
        void star(){
            String url="jdbc:mysql://localhost:3306/couse?user=root&password=&useSSL=true&useUnicode=true&characterEncoding=utf-8";
            String user="root";
            String passKey="";
            try {
                Class.forName("com.mysql.jdbc.Driver");
                con= DriverManager.getConnection(url,user,passKey);
            }
            catch(SQLException e){
            }catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        public boolean addUser(User user) throws Exception {
            if(findUser(user.getId()) != null)
                return false;
            star();
            sql = con.createStatement();
    
            String sqlLine="INSERT INTO login VALUES (\""+user.getId()+"\",\""+user.getPwd()+"\")";
            sql.executeUpdate(sqlLine);
    
            sqlLine="INSERT INTO User VALUES (\""+user.getId()+"\",\""+user.getName()+"\",\""+user.getSex()+"\",\""+user.getPross()+"\")";
            sql.executeUpdate(sqlLine);
            con.close();
            return true;
        }
    
        public User getUser(String id){
            User user=new User();
            star();
            try {
                sql=con.createStatement();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                rs=sql.executeQuery("select * from User where id="+id);
                while(rs.next()){
                    user.setId(id);
                    user.setName(rs.getString(2));
                    user.setSex(rs.getString(3));
                    user.setPross(rs.getString(4));
                }
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return user;
        }
        public String findUser(String id){
            String user="";
            star();
            try {
                sql=con.createStatement();
            } catch (SQLException throwables) {
                JOptionPane.showMessageDialog(null,
                        "数据库无法连接!",
                        "登录失败",
                        JOptionPane.ERROR_MESSAGE);
            }
            try {
                rs=sql.executeQuery("select pwd from Login where id="+id);
                while(rs.next())
                    user=rs.getString(1);
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return user.equals("")?null:user;
        }
    }
    
    

    4.😐 课程数据库操作类:

    package StuPickCouse_MVC.Modul.PickMysql;
    
    import StuPickCouse_MVC.Modul.PickCouse.Couse;
    import StuPickCouse_MVC.Modul.PickCouse.User;
    
    import java.sql.*;
    import java.util.ArrayList;
    
    public class CouseSql {
        User user;
        public CouseSql(User user){
            this.user=user;
        }
        Connection con=null;
        Statement sql;
        ResultSet rs;
        void star(){
            String url="jdbc:mysql://localhost:3306/couse?user=root&password=&useSSL=true&useUnicode=true&characterEncoding=utf-8";
            String user="root";
            String passKey="";
            try {
                Class.forName("com.mysql.jdbc.Driver");
    
                con= DriverManager.getConnection(url,user,passKey);
            }
            catch(SQLException e){
                System.out.println(e);
            }catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        public ArrayList<Couse> findCouse(String sqlLine){
            ArrayList<Couse> couses=new ArrayList<>();
            star();
            try {
                sql=con.createStatement();//
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                rs = sql.executeQuery(sqlLine);
                while (rs.next()) {
                    couses.add(new Couse(rs.getString(1),
                            rs.getString(2),
                            rs.getString(3),
                            rs.getString(4),
                            rs.getString(5)
                    ));
                }
                con.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return couses;
        }
        public boolean isMyCouse(String sqlLine){
            boolean couses=false;
            star();
            try {
                sql=con.createStatement();//
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                rs = sql.executeQuery(sqlLine);
                while (rs.next())
                    couses=true;
                con.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return couses;
        }
        public boolean chioseCouse(Couse couse) {
            boolean item=false;
            star();
            try {
                sql=con.createStatement();//
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                sql.executeUpdate("update Subject set Noss=Noss+1 where subjectId="+couse.getId());
                sql.executeUpdate("INSERT INTO PickCouse VALUES ('"+this.user.getId()+"','"+couse.getId()+"')");
                con.close();
                item=true;
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return item;
        }
        public void addCouse(String id,String name,int x1,int x2,String tec) throws Exception{
            star();
            sql=con.createStatement();
            sql.executeUpdate("INSERT INTO Subject VALUES (\""+id+"\",\""+name+"\","+x1+","+x2+",\""+tec+"\")");
            con.close();
        }
    }
    
    

    5.😐 登录注册操作实现类:

    package StuPickCouse_MVC.Contral;
    
    import StuPickCouse_MVC.Modul.PickCouse.User;
    import StuPickCouse_MVC.Modul.PickMysql.CouseSql;
    import StuPickCouse_MVC.Modul.PickMysql.UserSql;
    import javafx.animation.FadeTransition;
    import javafx.animation.PathTransition;
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.control.*;
    import javafx.scene.input.MouseEvent;
    import javafx.scene.layout.AnchorPane;
    import javafx.scene.shape.LineTo;
    import javafx.scene.shape.MoveTo;
    import javafx.scene.shape.Path;
    import javafx.stage.Stage;
    import javafx.util.Duration;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Optional;
    
    public class Login {
        @FXML
        public TextField registName;
        @FXML
        public TextField registP;
        @FXML
        public TextField registId;
        @FXML
        public Button registSure;
        @FXML
        public ProgressBar registPro;
        @FXML
        public PasswordField registPwdAgain;
        @FXML
        public PasswordField registPwd;
        User user;
        @FXML
        public AnchorPane registPanel;
        @FXML
        public Button login,other;
        @FXML
        public Button regist;
        @FXML
        public PasswordField pwd;
        @FXML
        public TextField id;
        @FXML
        public CheckBox man,woman;
        @FXML
        AnchorPane loginPanel;
        int inputTimes=2;
        public Stage stage;
        public void login_Click(ActionEvent actionEvent) throws IOException {
            user= new User();
            UserSql userSql=new UserSql();
            CouseSql couseSql=new CouseSql(user);
    
            if(id.getText().matches("[0-9]{9}" ) && inputTimes>=0) {
                boolean judgeId= (userSql.findUser(id.getText().trim()) == null);
    
                if(pwd.getText().equals("")){
                    moveCon(login,"密码输入不能为空!","登录失败!", Alert.AlertType.ERROR);
                    return;
                }
    
                if(judgeId) {
                    if(id.getText().trim().matches("[0-9]{9}")) {
                        Alert alert = new Alert(Alert.AlertType.ERROR);
                        alert.setTitle("登录失败");
                        alert.setHeaderText(null);
                        alert.setContentText("账号[" + id.getText() + "]不存在!\n    是否注册一个?");
                        Optional<ButtonType> result = alert.showAndWait();
                        if (result.get() == ButtonType.OK) {
                            setRegistPanel(id.getText());
                            regist_Click(actionEvent);
                        }
                    }
                    else
                        moveCon(login,"账号[" + id.getText() + "]不存在!","输入错误", Alert.AlertType.ERROR);
                }
                else if(userSql.findUser(id.getText().trim()).equals(pwd.getText().trim())) {
                    user=userSql.getUser(id.getText().trim());
    
                    Alert alert = new Alert(Alert.AlertType.INFORMATION);
                    alert.setTitle("提示");
                    alert.setHeaderText(null);
                    alert.setContentText("√"+user.getId()+","+user.getName()+",登录成功!");
                    Optional<ButtonType> result=alert.showAndWait();
                    if(result.get() == ButtonType.OK) {
                        FXMLLoader loader = new FXMLLoader(getClass().getResource("../View/MasOS.fxml"));
                        Parent root = loader.load();
    
                        MasOS masOS = loader.getController();
                        masOS.userName.setText(user.getName());
                        masOS.userId.setText(user.getId());
                        masOS.userSex.setText(user.getSex());
                        masOS.userPre.setText(user.getPross());
                        masOS.timeNow.setText(String.format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));
                        masOS.user = user;
    
                        stage = Demo_2.primaryStage;
                        stage.setResizable(false);
                        stage.setScene(new Scene(root, 1920, 1080));
                        stage.show();
                    }
                }
                else
                    moveCon(login,"密码输入错误!累计输入"+(3-inputTimes)+"次,剩余输入机会"+(inputTimes--)+"次!","登录失败",Alert.AlertType.ERROR);
            }
            else//输入不完整!
                moveCon(login, ! pwd.getText().matches("[0-9]{9}")? "账号格式不正确!账号为九位数字组成的学号!":"剩余输入机会不足,无法登陆!",
                        "输入有误",Alert.AlertType.ERROR);
        }
        void moveCon(Control con,String text,String title,Alert.AlertType type) {
                moveCon(con);
                Alert alert = new Alert(type);
                alert.setTitle(title);
                alert.setHeaderText(null);
                alert.setContentText(text);
                alert.showAndWait();
        }
        void moveCon(Control con){
            Path path = new Path();
            double x = con.getScaleX() + con.getWidth() / 2;
            double y = con.getScaleY() + con.getHeight() / 2;
            path.getElements().add(new MoveTo(x, y));
            path.getElements().add(new LineTo(x - 20, y));
            path.getElements().add(new LineTo(x + 20, y));
            path.getElements().add(new LineTo(x + 20, y));
            path.getElements().add(new LineTo(x - 20, y));
            path.getElements().add(new LineTo(x - 20, y));
            path.getElements().add(new LineTo(x + 20, y));
            path.getElements().add(new LineTo(x, y));
    
            PathTransition pathTransition = new PathTransition();
            pathTransition.setDuration(Duration.seconds(0.3));
            pathTransition.setPath(path);
            pathTransition.setNode(con);
            pathTransition.setCycleCount(1);
            pathTransition.play();
    
        }
        public void movePanel(AnchorPane con,double starOpacity,double endOpacity,int time,int playtimes){
            FadeTransition ft = new FadeTransition(Duration.millis(time), con);
            ft.setFromValue(starOpacity);
            ft.setToValue(endOpacity);
            ft.setCycleCount(playtimes);//Timeline.INDEFINITE
            ft.setAutoReverse(true);
            ft.play();
        }
        void movePanel(AnchorPane con,double starX,double starY,double endX,double endY,double time,double step){
            Path path = new Path();
            path.getElements().add(new MoveTo(starX,starY));
            path.getElements().add(new LineTo(starX,starY+step));
            path.getElements().add(new LineTo(endX,endY-step));
            path.getElements().add(new LineTo(endX,endY));
            PathTransition pathTransition = new PathTransition();
            pathTransition.setDuration(Duration.seconds(time));
            pathTransition.setPath(path);
            pathTransition.setNode(con);
            pathTransition.setCycleCount(1);
            pathTransition.play();
        }
        public void regist_Click(ActionEvent actionEvent) {
            if(registPanel.isVisible()){
                movePanel(registPanel,0.0,1.0,100,5);
            }
            else {
                cleanLoginPanel();
                registPanel.setVisible(true);
                loginPanel.setVisible(false);
                movePanel(registPanel, 256, -770, 256, 391, 0.5, 0);
            }
        }
    
        public void close_Click(ActionEvent actionEvent) {
            Demo_2.primaryStage.close();
        }
    
        boolean Isboy=true;
        public void sexMan_click(ActionEvent actionEvent) {
            if(man.isSelected()) {
                Isboy = true;
                woman.setSelected(false);
            }
        }
        public void sexWoman_click(ActionEvent actionEvent) {
            if (woman.isSelected()) {
                Isboy = false;
                man.setSelected(false);
            }
        }
        public void registSure_Click(ActionEvent actionEvent) {
    
                if(!registId.getText().trim().matches("[0-9]{9}")){
                    moveCon(registId,"账号输入不正确!\n    tip:账号为你的学号!","提交失败", Alert.AlertType.ERROR);
                    registId.setText("");
                    return;
                }
                if(registName.getText().trim().length()>10||registName.getText().trim().length()<=0){
                    moveCon(registName,"姓名输入不符合实际!\n    tip:请输入您的真实姓名!","提交失败", Alert.AlertType.ERROR);
                    registName.setText("");
                    return;
                }
                if(registP.getText().trim().length()>20||registP.getText().trim().length()<=0){
                    moveCon(registP,"专业名称输入不符合实际!\n    tip:请正确输入您的专业名称!","提交失败", Alert.AlertType.ERROR);
                    registP.setText("");
                    return;
                }
                if(!registPwd.getText().matches("[a-z|A-Z|0-9]+")){
                    moveCon(registPwd,"密码输入不正确!\n    tip:密码格式为字母或数字组合!","提交失败", Alert.AlertType.ERROR);
                    registP.setText("");
                    registPwdAgain.setText("");
                    return;
                }
                if(!registPwd.getText().equals(registPwdAgain.getText())){
                    moveCon(registPwdAgain);
                    moveCon(registPwd,"前后密码输入不正确!\n    tip:请重新校准你的密码!","提交失败", Alert.AlertType.ERROR);
                    registPwd.setText("");
                    registPwdAgain.setText("");
                    return;
                }
    
                UserSql userSql=new UserSql();
                User newUser=new User(registId.getText().trim(), registName.getText().trim(),Isboy?"男":"女", registP.getText().trim());
                newUser.setPwd(registPwd.getText());
                try {
                    boolean registSucced=userSql.addUser(newUser);
                    Alert alert = new Alert(Alert.AlertType.INFORMATION);
                    alert.setTitle("提示");
                    alert.setHeaderText(null);
                    alert.setContentText(registSucced?"√"+newUser.getId()+","+newUser.getName()+",注册成功!\n      去登录?":"注册失败!此账号已存在!");
                    Optional<ButtonType> result = alert.showAndWait();
                    if (result.get() == ButtonType.OK&&registSucced) {
                        setLoginPanel(registId.getText().trim());
                        LOGIN_Click(actionEvent);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
        }
    
        public void other_Click(ActionEvent actionEvent) {
            moveCon(other,"没有更多功能,抱歉!","错误", Alert.AlertType.INFORMATION);
        }
    
        public void LOGIN_Click(ActionEvent actionEvent) {
            if(loginPanel.isVisible()){
                movePanel(loginPanel,0.0,1.0,100,5);
            }
            else {
                cleanRegistPanel();
                registPanel.setVisible(false);
                loginPanel.setVisible(true);
                movePanel(loginPanel, 256, -770, 256, 391, 0.5, 0);
            }
        }
        void setLoginPanel(String str){
            cleanLoginPanel();
            id.setText(str);
        }
        void cleanLoginPanel(){
            id.setText("");
            pwd.setText("");
        }
        void cleanRegistPanel(){
            registId.setText("");
            registName.setText("");
            registP.setText("");
            registPwd.setText("");
            man.setSelected(true);
            woman.setSelected(false);
            Isboy=true;
            registPwdAgain.setText("");
        }
        void setRegistPanel(String str){
            cleanRegistPanel();
            registId.setText(str);
        }
    
        public void forgetPwd_Click(MouseEvent mouseEvent) {
        }
    }
    
    

    6.😐 学生选课查看功能实现类

    package StuPickCouse_MVC.Contral;
    
    import StuPickCouse_MVC.Modul.PickCouse.Couse;
    import StuPickCouse_MVC.Modul.PickCouse.User;
    import StuPickCouse_MVC.Modul.PickMysql.CouseSql;
    import javafx.animation.PathTransition;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.scene.control.*;
    import javafx.scene.image.ImageView;
    import javafx.scene.layout.Pane;
    import javafx.scene.shape.LineTo;
    import javafx.scene.shape.MoveTo;
    import javafx.scene.shape.Path;
    import javafx.util.Duration;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.Optional;
    
    public class MasOS{
        @FXML
        public ImageView image;
        @FXML
        public Label userName;
        @FXML
        public Label userId;
        @FXML
        public Label userSex;
        @FXML
        public Label userPre;
        @FXML
        public Label school;
        @FXML
        public Label timeNow;
        @FXML
        public ListView couseList;
        @FXML
        public ChoiceBox waitChose;
        @FXML
        public Button chose;
        @FXML
        public Button newMsg;
        @FXML
        public Button showAll;
        @FXML
        public Button showMy;
        @FXML
        public Button chioseCouse;
        @FXML
        public Label allMsg;
        @FXML
        public Label chioseLabel;
        @FXML
        public Pane listbox;
        @FXML
        public Button closed;
        @FXML
        public Button heid;
        @FXML
        public Label msg;
        @FXML
        public Label stuMsg;
        @FXML
        public Pane titlePanel;
        @FXML
        public Label title;
        @FXML
        public Button el;
        User user;
        ArrayList<Couse> allCouses, myCouse;
        ArrayList<String> canChoseCouseId;
    
        public void getData(ActionEvent event){
            userName.setText(user.getName());
            userId.setText(user.getId());
            userSex.setText(user.getSex());
            userPre.setText(user.getPross());
            timeNow.setText(String.format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) ));
        }
    
        public void chose_Click(ActionEvent actionEvent) {
            if(waitChose.getValue()==null){
                showMessage("错误", "请选择对应课程编号!", Alert.AlertType.ERROR,0);
                return;
            }
            String Couse_id = String.valueOf(waitChose.getValue());
            CouseSql couseSql = new CouseSql(user);
            ArrayList<Couse> chioseCouse = couseSql.findCouse("select * from Subject where subjectId=" + Couse_id);
            if (chioseCouse.size() > 0) {
                Couse couse = chioseCouse.get(0);
                boolean chiose=false;
                if((chiose=showMessage(
                        "提示","\n(1)你选择了课程编号为: " + Couse_id + " 的课程!\n\n(2)具体信息有:\n     [a]课程名称:" +couse.getName()+
                                "\n     [b]授课老师:" +couse.getTeacher()+ "\n     [c]班级人数:"+couse.getNum()
                        , Alert.AlertType.INFORMATION,1))){
                    couseSql.chioseCouse(couse);
                    flash();//刷新数据
                }
                showMessage("提示", chiose?"选课成功!":"已取消!", Alert.AlertType.INFORMATION,0);
            }
        }
    
        public void setListViewItems(ArrayList<Couse> arrayList, ListView control){
            control.setFixedCellSize(60);
            CouseSql couseSql=new CouseSql(user);
            Couse item=new Couse("序号","课程编号","课程名称","选修情况","教师","选择");
            item.setTab(35);
            ObservableList<Couse> head= FXCollections.observableArrayList(item);
            control.setItems(head);
            for (int i=0;i<arrayList.size();i++){
                arrayList.get(i).setNo(i+1);
                arrayList.get(i).setTab(35);
                boolean flage=couseSql.isMyCouse("select * from PickCouse where stuId="+user.getId()+" and couseId="+arrayList.get(i).getId());
                boolean flage2=Integer.parseInt( arrayList.get(i).getCapacity() ) >= Integer.parseInt( arrayList.get(i).getNum());
                arrayList.get(i).setCanChiose( ! flage && flage2?"可选": flage?"已选":"人员已满");
            }
            ObservableList<Couse> list= FXCollections.observableArrayList(arrayList);
            control.getItems().addAll(list);
        }
        public void setListViewItems(ArrayList arrayList, ChoiceBox control){
            ObservableList<String> list= FXCollections.observableArrayList(arrayList);
            control.setItems(list);
        }
        public void newMsg_Click(ActionEvent actionEvent) {
            getData(actionEvent);
        }
        public void flash(){
            CouseSql couseSql=new CouseSql(user);
            allCouses=couseSql.findCouse("select * from Subject");
            String sqlLine="select * from Subject where subjectId in (select couseId from PickCouse where stuId="+user.getId()+")";
            myCouse=couseSql.findCouse(sqlLine);
            canChoseCouseId=new ArrayList<>();
    
            for (int i = 0; i < allCouses.size(); i++){
                boolean tag= (  !(couseSql.isMyCouse("select * from PickCouse where stuId="+user.getId()+" and couseId="+allCouses.get(i).getId() )
                && Integer.parseInt( allCouses.get(i).getCapacity() )
                        > Integer.parseInt( allCouses.get(i).getNum() ) ) ) ;
                if(tag)
                    canChoseCouseId.add(allCouses.get(i).getId());
            }
            setListViewItems(allCouses,couseList);
            setListViewItems(canChoseCouseId,waitChose);
        }
    
        void setVisable(){
            couseList.setVisible(true);
            allMsg.setVisible(false);
            chose.setVisible(false);
            waitChose.setVisible(false);
            chioseLabel.setVisible(false);
            close=true;
        }
        public void All_Click(ActionEvent actionEvent) {
            flash();
            setVisable();
            setListViewItems(allCouses,couseList);
            allMsg.setText("1、全部课程信息如下表:");
            allMsg.setVisible(true);
            couseList.setVisible(true);
            moveList(couseList,1550.0,400,-950,380);
        }
    
        public void myCouse_Click(ActionEvent actionEvent) {
            flash();
            setVisable();
            setListViewItems(myCouse,couseList);
            allMsg.setText("1、我选修的课程信息如下表:");
            allMsg.setVisible(true);
            couseList.setVisible(true);
            moveList(couseList,-950.0,1200.0,-950,380);
        }
    
        public void ChioseCouse_Click(ActionEvent actionEvent) {
            flash();
            setVisable();
            setListViewItems(canChoseCouseId,waitChose);
            setListViewItems(allCouses,couseList);
            allMsg.setText("1、全部课程信息如下表:");
            allMsg.setVisible(true);
            couseList.setVisible(true);
            chose.setVisible(true);
            waitChose.setVisible(true);
            chioseLabel.setVisible(true);
            moveList(couseList,1550.0,920.0,-950,380);
        }
        void moveList(Control con,double starX,double starY,double endX,double endY){
            con.setLayoutX(endX==-950?1550.0:0);
            Path path = new Path();
    
            path.getElements().add(new MoveTo(starX, starY));
            path.getElements().add(new LineTo(endX-50, endY));
            path.getElements().add(new LineTo(endX, endY));
    
            PathTransition pathTransition = new PathTransition();
            pathTransition.setDuration(Duration.seconds(endX==-950?0.8:1));
            pathTransition.setPath(path);
            pathTransition.setNode(con);
            pathTransition.setCycleCount(1);
            pathTransition.play();
        }
        @FXML
        boolean close=false;
        public void other_Click(ActionEvent actionEvent) {
            if(close) {
                moveList(couseList, -950, 380, -950, 1900);
                close=true;
                setVisable();
            }
        }
        boolean showMessage(String title, String text, Alert.AlertType type,int I){
            boolean boo=false;
            Alert alert = new Alert(type);
            alert.setTitle(title);
            alert.setHeaderText(null);
            alert.setContentText(text);
            if(I==1) {
                Optional<ButtonType> result=alert.showAndWait();
                alert.setContentText("确认这样选择吗?");
                boo=(result.get() == ButtonType.OK);
            }
            else
                alert.showAndWait();
            return boo;
        }
    
        public void close_Click(ActionEvent actionEvent) {
            Demo_2.primaryStage.close();
        }
    
        public void heid_Click(ActionEvent actionEvent) {
        }
    }
    
    

    7.😐 登录注册界面设计:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import javafx.scene.Cursor?>
    <?import javafx.scene.control.Button?>
    <?import javafx.scene.control.CheckBox?>
    <?import javafx.scene.control.Label?>
    <?import javafx.scene.control.PasswordField?>
    <?import javafx.scene.control.Separator?>
    <?import javafx.scene.control.TextField?>
    <?import javafx.scene.effect.Reflection?>
    <?import javafx.scene.image.Image?>
    <?import javafx.scene.image.ImageView?>
    <?import javafx.scene.layout.AnchorPane?>
    <?import javafx.scene.layout.BorderPane?>
    <?import javafx.scene.text.Font?>
    
    <AnchorPane prefHeight="1080.0" prefWidth="1920.0" stylesheets="@../View/Css/Login.css" xmlns="http://javafx.com/javafx/8.0.91" xmlns:fx="http://javafx.com/fxml/1" fx:controller="StuPickCouse_MVC.Contral.Login">
       <children>
          <BorderPane layoutY="-14.0" prefHeight="1080.0" prefWidth="1920.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
             <bottom>
                <AnchorPane fx:id="min" prefHeight="1081.0" prefWidth="1920.0" BorderPane.alignment="CENTER">
                   <children>
                      <AnchorPane fx:id="loginPanel" layoutX="1215.0" layoutY="250.0" prefHeight="780.0" prefWidth="510.0">
                         <children>
                            <Label fx:id="label" alignment="CENTER" blendMode="DARKEN" cache="true" layoutX="3.0" mnemonicParsing="true" opacity="0.69" prefHeight="178.0" prefWidth="510.0" text="login" textAlignment="CENTER" AnchorPane.leftAnchor="3.0" AnchorPane.rightAnchor="-3.0" AnchorPane.topAnchor="0.0">
                               <font>
                                  <Font name="Consolas Bold" size="96.0" />
                               </font>
                            </Label>
                            <Button fx:id="login" layoutX="140.0" layoutY="533.0" mnemonicParsing="false" onAction="#login_Click" prefHeight="53.0" prefWidth="237.0" text="确     定" />
                            <PasswordField fx:id="pwd" alignment="CENTER" layoutX="47.0" layoutY="424.0" prefHeight="47.0" prefWidth="414.0" text="" />
                            <TextField fx:id="id" alignment="CENTER" layoutX="47.0" layoutY="283.0" prefHeight="47.0" prefWidth="422.0" text="" />
                            <Label layoutX="48.0" layoutY="236.0" prefHeight="24.0" prefWidth="72.0" text="账 号:">
                               <font>
                                  <Font size="20.0" />
                               </font>
                            </Label>
                            <Label layoutX="48.0" layoutY="382.0" prefHeight="24.0" prefWidth="72.0" text="密 码:">
                               <font>
                                  <Font size="20.0" />
                               </font>
                            </Label>
                            <Label alignment="CENTER" layoutX="64.0" layoutY="347.0" prefHeight="14.0" prefWidth="141.0" text="Tip:账号为对于学号" textFill="#282323cc" underline="true">
                               <font>
                                  <Font name="Consolas Italic" size="12.0" />
                               </font>
                            </Label>
                            <Label fx:id="forgetPwd" alignment="CENTER" layoutX="187.0" layoutY="742.0" onDragDetected="#forgetPwd_Click" prefHeight="32.0" prefWidth="144.0" text="找回密码" textAlignment="CENTER" textFill="#130fd0" underline="true" AnchorPane.bottomAnchor="0.0">
                               <font>
                                  <Font size="19.0" />
                               </font>
                            </Label>
                         </children>
                      </AnchorPane>
                      <ImageView fitHeight="780.0" fitWidth="960.0" layoutX="70.0" layoutY="250.0" pickOnBounds="true" preserveRatio="true">
                      <image>
                         <Image url="@../../login.jpg" />
                      </image>
                      </ImageView>
                      <Label alignment="CENTER" blendMode="GREEN" layoutX="72.0" layoutY="94.0" mnemonicParsing="true" text="学生选课功能一体化交互式平台" underline="true">
                         <font>
                            <Font name="Arial Italic" size="64.0" />
                         </font>
                         <effect>
                            <Reflection />
                         </effect>
                      </Label>
                      <Label alignment="CENTER" layoutX="736.0" layoutY="1042.0" opacity="0.77" prefHeight="23.0" prefWidth="481.0" text="2020_Java课程设计专业程序:学生选课系统">
                         <font>
                            <Font size="17.0" />
                         </font>
                      </Label>
                      <AnchorPane fx:id="registPanel" layoutX="1215.0" layoutY="250.0" prefHeight="780.0" prefWidth="510.0" visible="false">
                         <children>
                            <TextField fx:id="registName" layoutX="180.0" layoutY="338.0" prefHeight="36.0" prefWidth="286.0" promptText="你的真实姓名" />
                            <Label layoutX="92.0" layoutY="348.0" text="姓名" />
                            <TextField fx:id="registP" layoutX="182.0" layoutY="402.0" prefHeight="36.0" prefWidth="285.0" promptText="你的专业" />
                            <Label layoutX="92.0" layoutY="408.0" text="专业" />
                            <Label layoutX="30.0" layoutY="557.0" text="请设置登录密码:" />
                            <Label layoutX="30.0" layoutY="633.0" text="再次确认密码:" />
                            <TextField fx:id="registId" layoutX="180.0" layoutY="241.0" prefHeight="36.0" prefWidth="286.0" promptText="学号为9位阿拉伯数字" />
                            <Label layoutX="89.0" layoutY="297.0" text="性别" />
                            <Label layoutX="88.0" layoutY="247.0" text="学号" />
                            <CheckBox id="sex" fx:id="man" layoutX="181.0" layoutY="295.0" mnemonicParsing="false" onAction="#sexMan_click" selected="true" text="" />
                            <CheckBox id="sex" fx:id="woman" layoutX="290.0" layoutY="295.0" mnemonicParsing="false" onAction="#sexWoman_click" text="" />
                            <Button fx:id="registSure" layoutX="176.0" layoutY="738.0" mnemonicParsing="false" onAction="#registSure_Click" prefHeight="42.0" prefWidth="187.0" text="" textAlignment="CENTER" AnchorPane.bottomAnchor="0.0">
                               <font>
                                  <Font size="20.0" />
                               </font>
                            </Button>
                            <PasswordField fx:id="registPwdAgain" layoutX="182.0" layoutY="627.0" prefHeight="36.0" prefWidth="287.0" />
                            <PasswordField fx:id="registPwd" layoutX="182.0" layoutY="551.0" prefHeight="36.0" prefWidth="286.0" />
                            <Label alignment="CENTER" blendMode="DARKEN" cache="true" layoutX="14.0" layoutY="14.0" mnemonicParsing="true" prefHeight="77.0" prefWidth="279.0" text="用户注册" textAlignment="CENTER" underline="true" wrapText="true" AnchorPane.leftAnchor="0.0" AnchorPane.topAnchor="0.0">
                               <font>
                                  <Font name="KaiTi" size="61.0" />
                               </font>
                               <cursor>
                                  <Cursor fx:constant="TEXT" />
                               </cursor>
                               <effect>
                                  <Reflection />
                               </effect>
                            </Label>
                            <Separator layoutX="143.0" layoutY="476.0" prefHeight="22.0" prefWidth="381.0" AnchorPane.rightAnchor="0.0" />
                            <Label layoutX="14.0" layoutY="185.0" text="[1]设置基础信息" AnchorPane.leftAnchor="0.0" />
                            <Label layoutX="14.0" layoutY="475.0" text="[2]设置登录信息" AnchorPane.leftAnchor="0.0" />
                            <Separator layoutX="146.0" layoutY="186.0" prefHeight="24.0" prefWidth="378.0" AnchorPane.rightAnchor="0.0" />
                         </children>
                      </AnchorPane>
                      <Button fx:id="close" layoutX="1788.0" layoutY="400.0" mnemonicParsing="false" onAction="#close_Click" prefHeight="50.0" prefWidth="160.0" text="关  闭" AnchorPane.rightAnchor="0.0" />
                      <Button fx:id="regist" layoutX="1758.0" layoutY="300.0" mnemonicParsing="false" onAction="#regist_Click" prefHeight="50.0" prefWidth="160.0" text=" 注  册" AnchorPane.rightAnchor="0.0" />
                      <Button fx:id="LOGIN" layoutX="1215.0" layoutY="250.0" mnemonicParsing="false" onAction="#LOGIN_Click" prefHeight="50.0" prefWidth="160.0" text="登  录" AnchorPane.rightAnchor="0.0" />
                      <Button fx:id="other" layoutX="1860.0" layoutY="350.0" mnemonicParsing="false" onAction="#other_Click" prefHeight="50.0" prefWidth="160.0" text="关  于" AnchorPane.rightAnchor="0.0">
                         <font>
                            <Font size="20.0" />
                         </font>
                      </Button>
                   </children>
                </AnchorPane>
             </bottom>
          </BorderPane>
       </children>
    </AnchorPane>
    
    

    8.😐 选课查看界面设计:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import javafx.geometry.Insets?>
    <?import javafx.scene.control.Accordion?>
    <?import javafx.scene.control.Button?>
    <?import javafx.scene.control.ChoiceBox?>
    <?import javafx.scene.control.Label?>
    <?import javafx.scene.control.ListView?>
    <?import javafx.scene.effect.DropShadow?>
    <?import javafx.scene.image.Image?>
    <?import javafx.scene.image.ImageView?>
    <?import javafx.scene.layout.AnchorPane?>
    <?import javafx.scene.layout.BorderPane?>
    <?import javafx.scene.layout.Pane?>
    <?import javafx.scene.text.Font?>
    
    <AnchorPane prefHeight="1080.0" prefWidth="1920.0" stylesheets="@../View/Css/MasOS.css" xmlns="http://javafx.com/javafx/8.0.91" xmlns:fx="http://javafx.com/fxml/1" fx:controller="StuPickCouse_MVC.Contral.MasOS">
       <children>
          <Accordion layoutY="8.0" />
          <BorderPane layoutX="381.0" layoutY="235.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
             <left>
                <Pane prefHeight="1080.0" prefWidth="370.0" BorderPane.alignment="CENTER">
                   <children>
                      <Button fx:id="newMsg" layoutX="296.0" layoutY="819.0" mnemonicParsing="false" onAction="#newMsg_Click" prefHeight="60.0" prefWidth="60.0" text="刷新" />
                      <ImageView fx:id="image" fitHeight="150.0" fitWidth="200.0" layoutX="30.0" layoutY="30.0" pickOnBounds="true" preserveRatio="true">
                         <effect>
                            <DropShadow color="#4169E1" height="100" radius="20" width="100" />
                         </effect>
                         <image>
                            <Image url="@../../backimage.jpg" />
                         </image>
                      </ImageView>
                      <Label id="msgLabel" fx:id="userName" alignment="CENTER" layoutY="341.0" prefHeight="40.0" prefWidth="370.0" text="Label" />
                      <Label id="msgLabel" fx:id="userId" alignment="CENTER" layoutY="237.0" prefHeight="35.0" prefWidth="370.0" text="Label" />
                      <Label id="msgLabel" fx:id="userSex" alignment="CENTER" layoutY="449.0" prefHeight="40.0" prefWidth="370.0" text="Label" />
                      <Label id="msgLabel" fx:id="userPre" alignment="CENTER" layoutY="560.0" prefHeight="40.0" prefWidth="370.0" text="Label" />
                      <Label id="msgLabel" fx:id="school" alignment="CENTER" layoutY="673.0" prefHeight="40.0" prefWidth="370.0" text="信息电子学部" />
                      <Label id="msgLabel" fx:id="timeNow" alignment="CENTER" layoutY="769.0" prefHeight="40.0" prefWidth="370.0" text="Label" />
                      <Label fx:id="msg" alignment="CENTER" layoutX="207.0" layoutY="127.0" prefHeight="51.0" prefWidth="152.0" text="个人信息栏">
                         <font>
                            <Font name="System Bold" size="24.0" />
                         </font></Label>
                      <Label fx:id="stuMsg" layoutX="2.0" layoutY="194.0" text="1)学号:" />
                      <Label layoutX="6.0" layoutY="300.0" text="2)姓名:" />
                      <Label layoutX="2.0" layoutY="406.0" text="3)性别:" />
                      <Label layoutX="6.0" layoutY="516.0" text="4)专业:" />
                      <Label layoutX="6.0" layoutY="632.0" text="5)院系:" />
                      <Label layoutX="6.0" layoutY="730.0" text="6)更新时间:" />
                   </children>
                </Pane>
             </left>
             <center>
                <BorderPane prefHeight="1080.0" prefWidth="1920.0" BorderPane.alignment="CENTER">
                   <center>
                      <Pane fx:id="listbox" prefHeight="920.0" prefWidth="1550.0" BorderPane.alignment="CENTER">
                         <children>
                            <Label fx:id="allMsg" layoutX="70.0" layoutY="40.0" text="1、全部课程信息如下表所示:" visible="false" />
                            <ListView fx:id="couseList" layoutX="80.0" layoutY="90.0" prefHeight="725.0" prefWidth="1120.0" visible="false" />
                            <Button fx:id="chose" layoutX="1010.0" layoutY="35.0" mnemonicParsing="false" onAction="#chose_Click" prefHeight="40.0" prefWidth="140.0" text="确认选择" visible="false" />
                            <ChoiceBox fx:id="waitChose" layoutX="760.0" layoutY="35.0" prefHeight="40.0" prefWidth="250.0" visible="false" />
                            <Label fx:id="chioseLabel" layoutX="595.0" layoutY="40.0" prefHeight="24.0" prefWidth="150.0" text="2、可选课程:" visible="false" />
                         </children>
                         <BorderPane.margin>
                            <Insets />
                         </BorderPane.margin>
                      </Pane>
                   </center>
                   <top>
                      <Pane fx:id="titlePanel" prefHeight="146.0" prefWidth="1537.0" BorderPane.alignment="CENTER">
                         <children>
                            <Label fx:id="title" layoutX="14.0" layoutY="4.0" prefHeight="76.0" prefWidth="275.0" text="学生选课中心">
                               <font>
                                  <Font name="Yu Gothic UI Semilight" size="43.0" />
                               </font></Label>
                            <Button fx:id="showAll" layoutX="20.0" layoutY="85.0" mnemonicParsing="false" onAction="#All_Click" prefHeight="40.0" prefWidth="150.0" text="全部课程" />
                            <Button fx:id="showMy" layoutX="170.0" layoutY="85.0" mnemonicParsing="false" onAction="#myCouse_Click" prefHeight="40.0" prefWidth="150.0" text="我的课程" />
                            <Button fx:id="chioseCouse" layoutX="320.0" layoutY="85.0" mnemonicParsing="false" onAction="#ChioseCouse_Click" prefHeight="40.0" prefWidth="150.0" text="选课" />
                            <Button fx:id="el" layoutX="470.0" layoutY="85.0" mnemonicParsing="false" onAction="#other_Click" prefHeight="40.0" prefWidth="150.0" text="关闭" />
                            <Label alignment="CENTER" layoutX="627.0" layoutY="115.0" prefHeight="25.0" prefWidth="399.0" text="2020_JAVA课程设计专用程序 2020/12/16" textFill="#a18a8a">
                               <font>
                                  <Font name="System Italic" size="19.0" />
                               </font>
                            </Label>
                            <Button fx:id="closed" layoutX="1507.0" mnemonicParsing="false" onAction="#close_Click" text="×">
                               <font>
                                  <Font size="20.0" />
                               </font>
                            </Button>
                            <Button fx:id="heid" layoutX="1464.0" mnemonicParsing="false" onAction="#heid_Click" prefHeight="41.0" prefWidth="43.0" text="">
                               <font>
                                  <Font size="20.0" />
                               </font>
                            </Button>
                         </children>
                      </Pane>
                   </top>
                </BorderPane>
             </center>
          </BorderPane>
       </children>
    </AnchorPane>
    
    

    9.😐 登录界面CSS渲染:

    
        #min{
              -fx-background-color: linear-gradient(to left,#00fffc,#fff600);
        }
        #loginPanel{
              -fx-background-color:#FAFAD2;
              -fx-border-radius:10;
              -fx-background-radius:10;
        }
        #registPanel{
                  -fx-background-color:#FAFAD2;
                  -fx-border-radius:10;
                  -fx-background-radius:10;
            }
        #label{
    
        }
        #login{
            -fx-background-radius: 25;
            -fx-border-radius: 25;
            -fx-background-color: linear-gradient(to right, #00fffc , #fff600 );
            -fx-text-alignment: center;
            -fx-text-fill: #fff;
            -fx-font-weight: bolder;
        }
        #login:hover{
            -fx-font-size: 20px;
           -fx-cursor: hand;
           -fx-effect: innershadow( three-pass-box , rgba(0,0,0,1) , 6, 0.5, 0 , 2 );
        }
    
        #close{
            -fx-background-radius:25 0 0 25;
            -fx-border-radius: 25 0 0 25;
            -fx-background-color: #CD5C5C;
            -fx-text-alignment: center;
            -fx-text-fill: #fff;
        }
        #close:hover{
            -fx-font-size: 20px;
           -fx-cursor: hand;
           -fx-effect:dropshadow(three-pass-box, #FF4500,15.0,0.1,0,0);
        }
    
        #other{
        -fx-text-fill:#fff;
            -fx-background-radius:25 0 0 25;
            -fx-border-radius: 25 0 0 25;
            -fx-background-color: #1a83e1;
            -fx-background-position: 20 12;
            -fx-background-size: 15px;
            -fx-background-repeat: no-repeat;
            -fx-background-insets: 100%;
        }
        #other:hover{
                   -fx-background-color:#7B68EE;
                   -fx-effect:dropshadow(three-pass-box, #7B68EE,15.0,0.1,0,0);
        }
    
        #regist{
            -fx-text-fill:#fff;
            -fx-background-radius:25 0 0 25;
            -fx-border-radius: 25 0 0 25;
            -fx-background-color: #1a83e1;
            -fx-background-position: 20 12;
            -fx-background-size: 15px;
            -fx-background-repeat: no-repeat;
            -fx-background-insets: 100%;
        }
        #regist:hover{
                   -fx-background-color:#7B68EE;
                   -fx-effect:dropshadow(three-pass-box, #7B68EE,15.0,0.1,0,0);
        }
        #LOGIN{
            -fx-text-fill:#fff;
            -fx-background-radius:25 0 0 25;
            -fx-border-radius: 25 0 0 25;
            -fx-background-color: #1a83e1;
            -fx-background-position: 20 12;
            -fx-background-size: 15px;
            -fx-background-repeat: no-repeat;
            -fx-background-insets: 100%;
        }
        #LOGIN:hover{
               -fx-cursor: hand;
                      -fx-background-color:#7B68EE;
                      -fx-effect:dropshadow(three-pass-box, #7B68EE,15.0,0.1,0,0);
        }
        #regist:selected{
            -fx-font-size: 16px;
        }
    
        #id{
            -fx-background-radius: 25;
            -fx-border-radius: 25;
        }
        #id:hover{
            -fx-color : #1a83e1;
            -fx-effect: innershadow( three-pass-box , #fff600 , 10, 0.2 , 0 , 0 );
        }
        #id:selected{
            -fx-color : #1a83e1;
        }
    
        #pwd{
            -fx-background-radius: 25;
            -fx-border-radius: 25;
        }
    
        #pwd:hover{
            -fx-color : #1a83e1;
            -fx-effect: innershadow( three-pass-box , #00fffc , 10, 0.2 , 0 , 0 );
        }
    
        #pwd:selected{
            -fx-background-color : #FF0000;
        }
        #registSure{
            -fx-text-fill:#fff;
            -fx-background-radius:0 0 0 0;
            -fx-border-radius: 0 0 0 0;
            -fx-background-color: #1a83e1;
        }
        #registSure:hover{
            -fx-text-fill:#fff;
            -fx-effect: dropshadow( three-pass-box , #1a83e1 , 10, 0.5 , 0 , 0 );
        }
    
    
    
    
    
    
    

    10.😐 选课查看界面渲染:

    #showAll{
           -fx-background-radius: 20 0 0 20;
           -fx-border-radius: 20 0 0 20;
           -fx-text-fill: #fff;
           -fx-background-color: #708090;
    }
    #showAll:hover{
            -fx-background-color: #7B68EE;
            -fx-effect:dropshadow(three-pass-box, #7B68EE,20.0,0.5,0,0);
    }
    
    #showMy{
            -fx-background-radius: 0;
            -fx-border-radius: 0;
            -fx-text-fill: #fff;
            -fx-background-color: #708090;
    }
    #showMy:hover{
            -fx-background-color: #7B68EE;
            -fx-effect:dropshadow(three-pass-box, #7B68EE,20.0,0.2,0,0);
    }
    
    #chioseCouse{
            -fx-background-radius: 0;
            -fx-border-radius: 0;
            -fx-text-fill: #fff;
            -fx-background-color: #708090;
    }
    #chioseCouse:hover{
            -fx-background-color: #7B68EE;
            -fx-effect:dropshadow(three-pass-box, #7B68EE,20.0,0.2,0,0);
    }
    
    #el{
            -fx-background-radius: 0 20 20 0;
             -fx-border-radius: 0 20 20 0;
            -fx-text-fill: #fff;
            -fx-background-color: #708090;
    }
    #el:hover{
            -fx-background-color: #F08080;
            -fx-effect:dropshadow(three-pass-box, #F08080,20.0,0.2,0,0);
    }
    .list-cell{
            -fx-text-fill: #292e34;
            -fx-background-color: #F5F5DC;
            -fx-background-radius: 10;
            -fx-border-radius: 10;
    }
    #couseList{
            -fx-background-color: #F5F5DC;
            -fx-background-radius: 10;
            -fx-border-radius: 10;
            -fx-effect: dropshadow(three-pass-box, #8FBC8F,20.0,0.5,0,0);
    }
    .list-cell:hover{
            -fx-text-fill: #fff;
            -fx-background-color:#3CB371;
            -fx-background-radius: 10;
            -fx-border-radius: 10;
            -fx-effect: dropshadow(three-pass-box, #3CB371,20.0,0.2,0,0);
    }
    #newMsg{
            -fx-text-fill: #fff;
            -fx-background-color:#3CB371;
            -fx-background-radius: 100;
            -fx-border-radius: 100;
    }
    #newMsg:hover{
            -fx-effect:dropshadow(three-pass-box, #1E90FF,30.0,0.1,0,0);
            -fx-background-color: #4682B4;
    }
    #waitChose{
        -fx-background-color: #708090;
        -fx-mark-color: #CD5C5C;
        -fx-text-fill: #fff;
        -fx-background-radius: 20 0 0 0;
        -fx-border-radius: 20 0 0 0;
    }
    #waitChose:hover{
         -fx-background-color: #F08080;
         -fx-mark-color: #708090;
         -fx-text-fill: #fff;
         -fx-effect:dropshadow(three-pass-box, #F08080,20.0,0.1,0,0);
    }
    #waitChose .context-menu{
         -fx-min-width: 250px;
         -fx-background-color: #FFFAFA;
         -fx-background-radius: 0 0 20 20;
         -fx-border-radius: 0 0 20 20;
    }
    #waitChose .menu-item:focused{
        -fx-background-color: #3CB371;
        -fx-text-fill: #fff;
        -fx-effect:dropshadow(three-pass-box, #3CB371,20.0,0.1,0,0);
    }
    
    #chose{
        -fx-background-color: #708090;
        -fx-background-radius: 0 20 0 0;
        -fx-border-radius: 0 20 0 0;
    }
    #chose:hover{
        -fx-background-color: #7B68EE;
        -fx-effect:dropshadow(three-pass-box, #7B68EE,20.0,0.1,0,0);
        -fx-text-fill: #fff;
    }
    #titlePanel{
        -fx-background-color: #F0FFFF;
        -fx-effect: dropshadow(three-pass-box, #7B68EE,20.0,0.1,0,0);
    }
    #listbox{
         -fx-background-radius: 20;
         -fx-border-radius: 20;
        -fx-background-color: linear-gradient(to left, #F5F5DC , #FFDEAD);
        -fx-effect: dropshadow(three-pass-box, #EEE8AA,20.0,0.1,0,0);
    }
    #msgLabel{
        -fx-background-color: #D4F2E7;
    }
    #msgLabel:hover{
        -fx-background-color: #B0E0E6;
        -fx-effect:dropshadow(three-pass-box, #B0E0E6,20.0,0.5,0,0);
        -fx-font-size: 25px;
    }
    #allMsg{
        -fx-background-color: #B0E0E6;
        -fx-effect:dropshadow(three-pass-box, #B0E0E6,20.0,0.5,0,0);
    }
    #chioseLabel{
        -fx-background-color: #B0E0E6;
        -fx-effect:dropshadow(three-pass-box, #B0E0E6,20.0,0.5,0,0);
    }
    #closed{
         -fx-background-color: #fff;
         -fx-text-fill: #CD5C5C;
         -fx-background-radius:0;
         -fx-border-radius: 0;
    }
    #closed:hover{
        -fx-background-color: #CD5C5C;
        -fx-text-fill: #fff;
        -fx-effect:dropshadow(three-pass-box, #CD5C5C,5.0,0.5,0,0);
    }
    
    #heid{
         -fx-background-color: #fff;
         -fx-text-fill: #000;
         -fx-background-radius: 0;
         -fx-border-radius: 0;
    }
    #heid:hover{
        -fx-background-color: #B0C4DE;
        -fx-text-fill: #000;
        -fx-effect:dropshadow(three-pass-box, #B0C4DE,5.0,0.5,0,0);
    }
    
    

    11.😐 程序入口:

    package StuPickCouse_MVC.Contral;
    
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    import javafx.stage.StageStyle;
    
    public class Demo_2 extends Application {
    
        public static void main(String[] args) {
            launch(args);
        }
    
        public static Stage primaryStage;
        double X=0,Y=0;
        @Override
        public void start(Stage s) throws Exception{
            primaryStage=new Stage();
    //        Parent root = FXMLLoader.load(getClass().getResource());
            FXMLLoader loader=new FXMLLoader(getClass().getResource("../View/Login.fxml"));
            Parent root =loader.load();
            primaryStage.setScene(new Scene(root, 500, 600));
            primaryStage.setTitle("");
            primaryStage.setResizable(false);
            primaryStage.initStyle(StageStyle.UNDECORATED);
            Demo_2.primaryStage.setMaximized(true);
    
            Login Loginos=loader.getController();
    
            primaryStage.show();
    
            root.setOnMousePressed(event -> { X=event.getX();Y=event.getY(); });
            root.setOnMouseDragged(event -> {
                primaryStage.setX(event.getScreenX()-X);
                primaryStage.setY(event.getScreenY()-Y);
            });
        }
    }
    
    

    😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐
    喜欢就点个赞呗
    😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐 😐
    下载此工程项目:学生选课管理系统

    展开全文
  • 总结 大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前...

    前言

    其实前几篇文章已经写了好多有关于Spring源码的文章,事实上,很多同学虽然一直在跟着阅读、学习这些Spring的源码教程,但是一直都很迷茫,这些Spring的源码学习,似乎只是为了面试吹逼用,我大概问过一些同学,很多同学看了很长时间的Spring但是依旧不知道如何将这些学到的知识运用到实际的案例上!
    其实这个问题很好解决,如果你在开发中很少能够遇见需要Spring扩展时,不妨把目光放到一些依托于Spring的项目,看看它们是如何运用Spring的扩展点的。对于Spring的学习,我认为最终真正学会的一定是在某一天,Spring本身功能不够,其他框架解决不了,你能够使用自身所学,扩展Spring的实现,从而完成一些特定的功能,我愿称之为牛逼!

    目录

    • 1.Mysql
    • 2.CHAR 与 VARCHAR 的区别?
    • 3.能说下myisam 和 innodb的区别吗?
    • 4.你能说下事务的基本特性和隔离级别吗?
    • 5.并发问题 – 脏读、不可重复读、幻读?
    • 6.事务的隔离级别?
    • 7.说说自增主键、UUID?
    • 8.mysql 的约束分类?
    • 9.drop、delete 与 truncate 的区别:
    • 10.隐式事务、显式事务?
    • 11.存储过程
    • 12.你们数据量级多大?分库分表怎么做的?
    • 13.那分表后的ID怎么保证唯一性的呢?
    • 14.那分表后的ID怎么保证唯一性的呢?
    • 15.分表后非sharding_key的查询怎么处理呢?
    • 16.说说mysql主从同步怎么做的吧?
    • 总结

    在这里插入图片描述

    1.Mysql 中有哪几种锁?

    (1)表级锁:开销小,加锁快。不会出现死锁,锁定粒度大,发生锁冲突的概率高,并发度低。

    (2)行级锁:开销大,加锁慢。会出现死锁,锁定粒度小,发生锁冲突的概率低,并发度高。

    (3)页面锁:开销时间、加锁时间、锁定粒度在 表级锁 与 行级锁 之间,会出现死锁,并发度中等。

    2.CHAR 与 VARCHAR 的区别?

    (1)CHAR 长度不可变,范围 1~255。若存储长度未达到定义的长度,则以 空格 填充。存取速度快,但容易浪费空间。

    (2)VARCHAR 长度可变,范围 1~65535。若存储长度未达到定义的长度,则存实际长度数据。存取速度稍慢,但节约空间。

    3.能说下myisam 和 innodb的区别吗?

    myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用,而且myisam不支持外键,并且索引和数据是分开存储的。

    innodb是基于聚簇索引建立的,和myisam相反它支持事务、外键,并且通过MVCC来支持高并发,索引和数据存储在一起。

    4.你能说下事务的基本特性和隔离级别吗?

    事务:数据库中,对数据的一系列操作可以看成一个整体,称为事务。这个整体要么全部执行、要么全部不执行。
    ACID 属性的存在确保了 事务的可靠。
    (1)Actomicity(原子性):原子性要求 事务中的操作要么全部完成,要么回退成之前未操作的状态。即事务中某个操作失败后,会相当于什么都没发生,不会出现改了部分数据的情况。

    (2)Consistency(一致性):一致性要求 事务执行前后,数据库的状态一致,即从一个一致性状态切换到另一个一致性的状态。

    (3)Isolation(隔离性):隔离性要求 并发的事务相互隔离、不可见。即一个事务看不见另一个事务内部的操作以及操作的数据。

    (4)Durability(持久性):持久性要求 事务对数据库数据的修改是永久的。即数据一旦修改提交后,其状态将永久不变。

    5.并发问题 – 脏读、不可重复读、幻读?

    对于同时运行的多个事务,若这些事务访问同一数据时,没有采用必要的隔离机制,则会造成如下的并发问题。
    (1)脏读:脏读 指的是当一个事务正在访问某数据,并对这个数据进行的修改,且这条数据还未提交到数据库中,此时若另一个事务也访问到这条数据,获取到的是这条被修改的数据,此时得到的数据不对,即脏读。
    比如:tom 年龄为 22,事务 A 修改 tom 年龄为 30,此时还未提交到数据库,此时事务 B 获取 tom 年龄,得到的是 30,事务 A 回滚数据,数据库的数据依旧是 22,但事务 B 拿到的数据是 30,这就是脏读,读错了数据。

    (2)不可重复读:指一个事务,多次读取同一条数据,在这个事务还未结束时,另一个事务也访问该数据并对其修改,那么可能造成事务多次读取的数据不一致,即不可重复读。
    比如:tom 年龄为 22,事务 A 读取 tom 年龄为 22,事务未结束。此时事务 B 修改 tom 年龄为 30,并提交到数据库,当事务 A 再次读取 tom 年龄为 30,事务 A 两次读取的数据不一致,即不可重复读。

    (3)幻读:指事务并不是独立执行时产生的现象。一个事务修改某个表,涉及表的所有行,同时另一个事务也修改表,比如增加或删除一条数据。此时第一个事务发现多出或者少了一条数据。这种情况就是幻读。
    比如:事务 A 查询当前表的数据总数为 11, 此时事务 B 向表中插入一条数据,事务 A 再次查询当前表数据总数为 12,即幻读。

    注:
        不可重复读、幻读理解起来有些类似。
        不可重复读是对一条数据操作,重点在于修改某条数据。
        幻读是对表进行操作,重点在于新增或删除某条数据。

    6.事务的隔离级别?

    数据库系统必须具有隔离并发运行的事务的能力,使各事务间不会相互影响,避免并发问题。
      隔离级别:指的是一个事务与其他事务的隔离程度。隔离级别越高,则并发能力越弱。
    (1)Read Uncommitted(读未提交):即读取到 未提交的内容。
      一般不使用。此隔离级别下,查询不会加锁,即可能存在两个事务操作同一个表的情况。可能会导致 “脏读”、“不可重复读”、“幻读”。

    (2)Read Committed(读提交):即只能读取到 已提交的内容。
      常用(oracle、SQL Server 默认隔离级别)。此隔离级别下,查询采用 快照读 的机制,即不会读取到未提交的数据,从而避免 “脏读”,但是仍可能导致 “不可重复读”、“幻读”。

    (3)Repeatable Read(可重复读)
      常用(mysql 默认隔离级别)。此隔离级别下,查询采用 快照读 的机制,且事务启动后,当前数据不能被修改,从而可以避免 “不可重复读”,但是仍可能导致 “幻读”(新增或删除某条数据)。

    (4)Serializable(串行化)
      一般不使用。此隔离级别下,事务会串行化执行(排队执行),执行效率差、开销大。可以避免 “脏读”、“不可重复读”、“幻读“。

    【举例:】
    select @@transaction_isolation; -- 用于查看当前数据库的隔离级别(8.0版本)
     set session transaction isolation level read committed; --用于设置隔离级别为 read committed
    
    

    7.说说自增主键、UUID?

    (1)自增主键,数据在物理结构上是顺序存储,性能好,占用空间小。可以是 int 和 bigint 类型。int 4字节,bigint 8 字节,项目中理论不应出现 自增主键达到最大值的情况,因为数据太大,效率会大大降低,当出现一定的数据量后,应进行分库分表操作。

    (2)UUID,数据在物理结构上是随机存储,性能较差,占用空间大。唯一ID,绝不冲突。

    8.mysql 的约束分类?

    (1)约束的作用:是一种限制,用于限制表中的数据,为了保证数据的准确性以及可靠性。
    (2)约束分类:
      NOT NULL,非空,用于保证某个字段不为空。支持列级约束。
      DEFAULT,默认,用于保证某个字段具有默认值。支持列级约束。
      PRIMARY KEY,主键,用于保证某个字段具有唯一性且非空。支持列级约束以及表级约束。
      UNIQUE,唯一,用于保证某个字段具有唯一性。支持列级约束以及表级约束。
      FORGIEN KEY,外键,用于限制两个表间的关系。支持表级约束。
    注:
      列级约束:指的是定义列的同时指定的约束。
      表级约束:指的是列定义之后指定的约束。

    外键常用于一对多的关系。即表的某条数据,对应另外一张表的多条数据。
        将 “一” 的一方称为 :主表。将 “多” 的一方称为 :从表。
        通常将 外键 置于从表上,即 从表上增加一列作为外键,并依赖于主表的某列。

    总结

    大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

    需要免费领取这份Kafka源码笔记的铁汁们,麻烦帮忙转发一下这篇文章+关注我,然后戳这里免费获取!

    络展示在读者面前,帮助读者更好地研读Kafka代码。

    需要免费领取这份Kafka源码笔记的铁汁们,麻烦帮忙转发一下这篇文章+关注我,然后戳这里免费获取!

    就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

    展开全文
  • Java开发的知识点进行深入的学习,并打算做成系列,先从基础常用的重点**(面试点)**知识开始,后续会陆续扩展,加油! 涉及到底层的可能代码块会多点,但要学习底层不看代码看啥?代码说明一切!!!放心,基本上...

    前言

    对Java开发的知识点进行深入的学习,并打算做成系列,先从基础常用的重点**(面试点)**知识开始,后续会陆续扩展,加油!
    涉及到底层的可能代码块会多点,但要学习底层不看代码看啥?代码说明一切!!!放心,基本上每句代码都会写上注释。若有不对请指出!

    最新蚂蚁4面(Java):CAP+数据强一致性+Lock锁+CMS+Tomcat+Redis

    一面

    1 自我介绍和项目

    2 Java的内存分区

    3 Java对象的回收方式,回收算法。

    4 CMS和G1了解么,CMS解决什么问题,说一下回收的过程。

    5 CMS回收停顿了几次,为什么要停顿两次。

    6 Java栈什么时候会发生内存溢出,Java堆呢,说一种场景,我说集合类持有对象。

    7 那集合类如何解决这个问题呢,我说用软引用和弱引用,那你讲一下这两个引用的区别吧。

    8 Java里的锁了解哪些,说了Lock和synchronized

    9 它们的使用方式和实现原理有什么区别呢?

    10 synchronized锁升级的过程,说了偏向锁到轻量级锁再到重量级锁,然后问我它们分别是怎么实现的,解决的是哪些问题,什么时候会发生锁升级。

    11Tomcat了解么,说一下类加载器结构吧。

    12 说了Spring,问我Spring中如何让A和B两个bean按顺序加载?

    13 10亿个数去重,我说用hash分片做,他说可能不均匀,然后我说了bitmap,他说那数字量更多怎么办,我说那就两个bitmap把。他说下一题吧。

    二面:技术面

    1.讲一下项目

    2.做的主要是Java对吧,讲一下多线程把,用到哪些写一下

    3.写了thread和runnable,然后写了线程池,又问了线程池由哪些组件组成,有哪些线程池,分别怎么使用,以及拒绝策略有哪些。

    4.什么时候多线程会发生死锁,写一个例子吧,然后我写了一个两个线程,两个锁,分别持有一个,请求另一个的死锁实例。

    5.集合类熟悉吧,写一个题目,一个字符串集合,找出pdd并且删除。

    6.然后说一下Redis吧,是单线程还是多线程,Redis的分布式怎么做?

    7.RPC了解么,我说了主要是协议栈+数据格式+序列化方式,然后需要有服务注册中心管理生产者和消费者。

    9.TCP三次握手的过程,如果没有第三次握手有什么问题。

    三面:技术面

    1. 自我介绍
    2. cap了解么,分别指什么,base呢,强一致性和弱一致性有什么方法来做,2pc了解么,说一下大概过程。
    3. 负载均衡怎么做的呢,为什么这么做?
    4. 了解过集群雪崩么?
    5. MySQL的主从复制怎么做的,具体原理是什么,有什么优缺点。
    6. Redis有哪些集群模式,各自的区别?
    7. 项目用到了多线程,如果线程数很多会怎么样?
    8. 分布式了解哪些东西,消息队列了解么,用在什么场景,说了削峰,限流和异步。说了kafka,问我怎么保证数据不丢失,以及确保消息不会被重复消费。还问了消息送达确认是怎么做的。
    9. 讲一下项目的主要架构,你在里面做了什么
    10. 有什么比较复杂的业务逻辑讲一下。
    11. 最大的难点是什么,收获是什么。

    HR面:

    1.工作中遇到的最大挑战是什么,你如何克服的?

    2.你最大的优点和最大的缺点,各自说一个?

    3.未来的职业发展,短期和长期的规划是什么?


    以上就是蚂蚁技术三面和HR面试题目,以下最新2021阿里集团高级Java必考题和答案,用于参考~

    最新蚂蚁4面(Java):CAP+数据强一致性+Lock锁+CMS+Tomcat+Redis

    最后

    关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。当然,这些内容我也全部整理在一份pdf文档内,分成了以下几大专题:

    • Java基础部分

    • 算法与编程

    • 数据库部分

    • 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)

    这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。

    作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。

    最后提醒一下哦,如果你想要学习,却无奈于没有干货学习资料,以上所有的资料内容都可以免费分享给你,只需你多多支持一下即可

    点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。**

    最后提醒一下哦,如果你想要学习,却无奈于没有干货学习资料,以上所有的资料内容都可以免费分享给你,只需你多多支持一下即可

    “点赞文章,关注我,然后戳戳戳戳这里获取免费下载方式”

    展开全文
  • JAVA实现的一个连接MySQL数据库的学生选课管理系统,使用tomcat服务,包含前后端。功能包括:学生选课等功能、教师选择教课等功能,管理员管理课程、学生、教师等信息功能。压缩文件中包含数据库文件!
  • java 学生选课信息管理系统 装了Java虚拟机的,可以直接运行 系统管理员的账号 用户名:admin 密 码:zhang
  • Java Swing课程设计,带mysql数据库、课程设计报告、源码
  • java swing开发学生选课系统 数据库使用MySQL 该系统主要包括学生和管理员两个用户角色 以学生角色登陆进去 学生可以查看自己的选修课情况 修改自己的个人信息 以管理员的角色登陆进去,管理员可以查看选修课的选修...

    java swing开发学生选课系统 数据库使用MySQL
    该系统主要包括学生和管理员两个用户角色 以学生角色登陆进去 学生可以查看自己的选修课情况 修改自己的个人信息
    以管理员的角色登陆进去,管理员可以查看选修课的选修情况 增加选修课,查看学生的个人情况

     

    数据库创建代码:

    /*
     Navicat Premium Data Transfer
    
     Source Server         : localhost
     Source Server Type    : MySQL
     Source Server Version : 50527
     Source Host           : localhost:3306
     Source Schema         : chenji
    
     Target Server Type    : MySQL
     Target Server Version : 50527
     File Encoding         : 65001
    
     Date: 13/10/2019 11:34:33
    */
    
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for stu
    -- ----------------------------
    DROP TABLE IF EXISTS `stu`;
    CREATE TABLE `stu`  (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `Chinese` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `Math` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `English` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 789457 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
    
    -- ----------------------------
    -- Records of stu
    -- ----------------------------
    INSERT INTO `stu` VALUES (123456, '清明', '80', '90', '100', '1203班');
    INSERT INTO `stu` VALUES (789456, '史蒂夫', '100', '100', '80', '1203班');
    
    -- ----------------------------
    -- Table structure for teacher
    -- ----------------------------
    DROP TABLE IF EXISTS `teacher`;
    CREATE TABLE `teacher`  (
      `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `course` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `time` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `age` int(11) NULL DEFAULT NULL
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
    
    -- ----------------------------
    -- Records of teacher
    -- ----------------------------
    INSERT INTO `teacher` VALUES ('天明', '语文', '1203班', '8', 18);
    INSERT INTO `teacher` VALUES ('王老师', '数学', '123456班', '60', 30);
    
    SET FOREIGN_KEY_CHECKS = 1;
    

     

    展开全文
  • java学生选课系统

    2014-12-20 23:42:50
    java swing版本的学生管理系统,内含MySql数据库脚本。实现学生,管理员不同身份登录,学生信息管理,课程信息管理,选课等功能
  • 项目类型:JAVA WEB项目...教师用户进行学生信息的管理,而学生则主要进行在线选课。通过连接MySQL实现了对学生、课程、选课的增删改查的操作。 如果觉得项目可以用于自己的课程设计可以私信我 或者查看专栏介绍 ...
  • 基于Java ssm 学生选课管理系统一、系统介绍二、功能展示1.课程列表(学生)2.已选课程(学生)3.已修课程(学生)4.我的课程(老师)5.课程打分(老师)6.课程管理、学生管理、教师管理(系统管理员)四、其它1.其他系统...
  • Java Web 学生选课管理系统 页面使用jsp动态生成,使用Tomcat中间件提供服务,后台数据使用Sql Server 2008存储。 系统设置的角色有: 1、管理员 2、学生 包含的功能: 角色登录系统、课程信息的增删改查、学生信息...
  • 本数据库的用户主要是学生,通过对用户需求的收集和分析,获得用户对... 在系统中,用户可以在界面中看到本人的基本信息,也可以对课程信息表和个人选课信息表进行查看、以及选课。 2. 使用数据库存储读取数据内容
  • Java+Swing+Mysql学生选课管理系统,系统经多次测试,运行无误,大家放心下载。
  • 该资源是我《论文-基于JAVA学生选课后台管理系统》的配套源代码,采用MyEclipse开发,可直接导入工程,由于附近大小限制,所需jar包没有打到压缩包中,请自行配备。 如需要论文,请下载我的资源:论文-基于JAVA的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,440
精华内容 1,376
关键字:

java学生选课管理系统

java 订阅