java设计一个学生考试系统(观察者模式和模板模式)

package test;

import view.loginFrame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class test {
    public static void main(String[] args){
          new loginFrame();


    }

}
package test;

public class UserService {
    //设计一个方法用来登录的
    public String login(String account,String password){
         if (account.equals("201909601314")&&password.equals("010059"))
         return "登录成功";
         return "用户名或密码错误";
    }

}
package util;

import javax.swing.*;

public abstract class BaseFrame extends JFrame {
    /*
    * 模板模式
    * */
     //设计一个规则  这个窗体想要画出来 执行的流程都是一样的

    public BaseFrame(){}
    public BaseFrame(String title){
        super(title);
    }


    public void init(){
        this.setFontAndSoOn();//设置每一个组件的大小 位置 字体 布局等等的方法
        this.addElement();//将所有的组件添加在窗体上的方法
        this.addListener();//绑定事件监听的方法
        this.setJFrameSelf();//设置窗体自身的一些属性的方法
    }

    protected abstract void setJFrameSelf();


    //1.设置字体 颜色 大小 背景布局等
    protected abstract void setFontAndSoOn();

    //将属性添加到窗体里
    protected abstract void  addElement();

    //添加事件监听
    protected abstract void addListener();

    //设置窗体自身
    protected abstract void setFrameSelf();


}
package view;

import test.UserService;
import util.BaseFrame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class loginFrame extends BaseFrame {

    public loginFrame(){
        this.setFontAndSoOn();//设置每一个组件的大小 位置 字体 布局等等的方法
        this.addElement();//将所有的组件添加在窗体上的方法
        this.addListener();//绑定事件监听的方法
        this.JFrameSelf();//设置窗体自身的一些属性的方法

    }

    public loginFrame(String title){
        super(title);


    }

    @Override
    protected void setJFrameSelf() {

    }


    //创建一个窗体
    private JFrame frame=new JFrame("学生管理系统 作者:软件Q197 杨红福");
    /*创建一个面板*/
    private JPanel mainPanel=new JPanel();
    //写标题
    private JLabel titleLabel=new JLabel("学 生 管 理 系 统");
    //创建账号和密码的标题
    private JLabel accountLabel=new JLabel("账 户");
    private JLabel passwordLabel=new JLabel("密 码");
    //创建输入账号和密码的文本框/密码框
    private JTextField accountField=new JFormattedTextField();
    private JPasswordField passwordField=new JPasswordField();
    //创建两个按钮
    private JButton loginButton=new JButton("登 录");
    private JButton exitButton=new JButton("注 册");

    //设置每一个组件的大小 位置 字体 布局等等
    public void setFontAndSoOn() {


        /*设置组件的位置,布局管理
         * 边界式BorderLayout
         * 流式FlowLayout
         * 网格式 GridLayout
         * 自定义null
         * */

        //设置布局方式为自定义
        mainPanel.setLayout(null);
        mainPanel.setBackground(Color.gray);


        //设置每一个组件的位置

        /*设置标题组件的位置和大小*/
        titleLabel.setBounds(140, 40, 340, 35);
        titleLabel.setFont(new Font("黑体", Font.BOLD, 34));

        /*设置账户Label的位置和大小*/
        accountLabel.setBounds(94, 124, 90, 30);
        accountLabel.setFont(new Font("黑体", Font.BOLD, 24));
        /*设置账户Filed的位置和大小*/
        accountField.setBounds(204, 124, 260, 30);
        accountField.setFont(new Font("黑体", Font.BOLD, 24));

        /*设置密码Label的位置和大小*/
        passwordLabel.setBounds(94, 174, 90, 30);
        passwordLabel.setFont(new Font("黑体", Font.BOLD, 24));

        passwordField.setBounds(204, 174, 260, 30);
        passwordField.setFont(new Font("黑体", Font.BOLD, 24));

        /*设置登录按钮的位置和大小*/
        loginButton.setBounds(204, 232, 100, 30);
        loginButton.setFont(new Font("黑体", Font.BOLD, 22));

        /*设置退出按钮的位置和大小*/
        exitButton.setBounds(364, 232, 100, 30);
        exitButton.setFont(new Font("黑体", Font.BOLD, 22));
    }
         //将所有的组件添加在窗体上

        //将组件添加到面板上
        public void addElement(){
        mainPanel.add(titleLabel);
        mainPanel.add(accountLabel);
        mainPanel.add(accountField);
        mainPanel.add(passwordLabel);
        mainPanel.add(passwordField);
        mainPanel.add(loginButton);
        mainPanel.add(exitButton);
        frame.add(mainPanel);
    }

    //绑定事件监听
    public void addListener(){

        //将组件绑定事件监听器
        ActionListener listener=new ActionListener(){//这里用到的知识是匿名内部类
            public void actionPerformed(ActionEvent e) {
                //获取用户输入的账号和密码
                //从登录窗口的组件中获取 文本框和密码框
                String account=accountField.getText();
                char[] value=passwordField.getPassword();
                String password=new String(value);
                //调用UserService层的登录方法
                UserService userService=new UserService();
                //判断登录情况
                String result=userService.login(account,password);
                if(result.equals("登录成功")){
                    //弹出新的界面
                    new ExamFrame();
                    //System.out.println(result);
                }else{
                    //弹出警告框,登录失败啦
                    JOptionPane.showMessageDialog(loginFrame.this,result);//内名内部类
                    //登录失败,将账号和密码清除
                    accountField.setText("");
                    passwordField.setText("");
                }



            }

        };


        loginButton.addActionListener(listener);//观察者模式

    }

    @Override
    protected void setFrameSelf() {

    }


    //设置窗体自身的一些属性
    public void JFrameSelf(){
        //设置窗体的位置和大小
        frame.setBounds(400,200,560,340);
        //设置窗体使其点击关闭退出程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗体的大小拖拽不变
        frame.setResizable(false);
        //设置窗体使其显示
        frame.setVisible(true);

    }

}
到这里后,此后的界面创建,只要继承前面的模板,
往里面补充内容即可,而不用管流程,例如,我们要创建一个注册的界面:

package util;

public class userReigst extends BaseFrame {

    @Override
    protected void setJFrameSelf() {

    }

    @Override
    protected void setFontAndSoOn() {

    }

    @Override
    protected void addElement() {

    }

    @Override
    protected void addListener() {

    }

    @Override
    protected void setFrameSelf() {

    }


}
例如,我们要创建一个考试界面,继承模板:
package view;


import util.BaseFrame;

public class ExamFrame extends BaseFrame {
    @Override
    protected void setJFrameSelf() {

    }

    @Override
    protected void setFontAndSoOn() {

    }

    @Override
    protected void addElement() {

    }

    @Override
    protected void addListener() {

    }

    @Override
    protected void setFrameSelf() {

    }
    //1.添加好多属性 各种组件

    //2.方法-----属性设置 字体 大小 布局 等等

    //3.方法----相互添加在一起

    //4.事件监听

    //5.窗体自己的信息

}
模板模式,就是事先写好了大纲,每次往里面填自己需要的内容,
只要继承就可以,而不用重复写,提高了代码的复用性。
让我们真正专注于内容,减少流程对我们的干扰。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该系统主要实现了模拟在线考试功能,其使用方法如下 软件安装 1、 安装Oracle9.0.2 (1) 创建数据库: 操作方法:根据提示安装,一般的步骤点击下一步即可,在创建数据库时输入数据库名称,例如dbhouse; (2) 创建用户: 操作方法:安装结束后进入OEM,数据用户名system,使用安装时设定的密码登陆数据库,在安全设置节点建立用户,例如quiz,设定密码quiz,为本数据库的使用密码,在右边的选项页面中选择角色为resourse,connect,dba; (3) 导入数据: 操作方法:倒入数据库quiz\ databases\quiz.dmp:在cmd中数据imp,输入刚才数据库的登录身份,quiz/quiz@dbhouse,在忽略创建错误选项时输入yes,倒入成功; 2、 安装JDK1.4.0 (1) 安装软件: 操作方法:一路点击下一步直至安装结束; (2) 设置环境变量: 操作方法:在我的电脑属性中设置环境变量为:JAVA_HOME=C:\j2sdk1.4.0; 3、 安装Tomcat4.1.24 (1) 安装软件: 操作方法:一路点击下一步直至安装结束,在选择安装路径时推荐安装在根目录,例如C:\Tomcat 4.1; (2) 设置环境变量: 操作方法:在我的电脑属性中设置环境变量为:TOMCAT_HOME= C:\Tomcat 4.1; (3) 建立站点: 操作方法:修改C:\Tomcat 4.1\conf\server.xml,在</Host>上一行添加如下代码来建立站点: <Context path=”/quiz” docBase=”D:\ quiz\web” reloadable=”false” debug=”0”/> 此步骤应该对应程序安装的目录; 4、 部署源程序 (1) 解压源程序 操作方法:解压缩拷贝目录quiz到安装目录,例如D:\,解压后的目录应该满足D:\ quiz\ WEB-INF; 5、 访问系统 启动Oracle、Tomcat,输入地址http://localhost:[port]/quiz/即可访问,输入用户名admin,密码admin。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值