m0_60090116 2021-07-09 23:26 采纳率: 100%
浏览 44
已采纳

根据开-闭原则应该如何实现?主类应该作何修改?

开-闭原则(Open-Closed Principle):系统应该对扩展开放,对修改关闭。其本质是指当系统中增加新的模块时(扩展开放),不需要修改现有的模块(修改关闭)。如果系统的设计遵循了这一原则,那么这个系统一定是易维护的。以下是一个符合开-闭原则的面向抽象编程的例子,主类为AdBoard类,请你完成以下任务:
1)按照要求在划线处填写合适的代码,将程序补充完整。
2)扩展该系统支持贺州学院广告牌,广告语句为:“等你一起点亮活力贺院”。根据开-闭原则应该如何实现?主类应该作何修改?
程序的最终输出:


abstract class Advertisement { //抽象类
            //1.在此插入Advertisement类的一个抽象方法的声明;
}

class Baidu    {//2.Baidu类继承Advertisement类;
    public void show() {// 显示广告语
        System.out.println(getName() + " : " + "百度一下,你就知道");
    }
    public String getName() { // 获取公司名称
        return "百度";
    }
}

class Honor      {//3.Honor类继承Advertisement类;

    public void show() {// 显示广告语`
        System.out.println(getName() + " : " + "勇敢做自己,做自己最荣耀。");
    }
    public String getName() {
        return "荣耀";
    }
}

public class AdBoard {//广告牌类
    public void show(Advertisement ad) {
                   //4.调用对象ad的show方法;
    }

    public static void main(String[] args) {
        AdBoard board =            //5.构造一个广告牌类(AdBoard)的对象;
        board.show(             ); //6.代码功能:显示Baidu公司的广告语;
        board.show(             ); //7.代码功能:显示Honor公司的广告语;
    }
}


  1. 完成一个int[] getNo(String[] strs)方法:参数strs为一个字符串数组,strs中的每个字符串的长度大于2且字符串的最后两位是数字。方法的功能:将strs中所有字符串的最后两位数字升序保存在整型数组内并输出,该整型数组即为方法的返回值。
    提示:
    Arrays.sort(arr);可对数组进行排序;
    str.substring(beginindex,endindex)该方法可以截取字符串str的子字符串
    示例:
    给定参数(数组):{"ghj23","bdbc65"}
    函数的返回值(数组):{23,65}

  2. 完成如下图所示界面(登录与注册界面),然后使用MYSQL数据库,如果注册的用户名与密码插入数据库成功,则弹出提示框(恭喜你, 注册成功!),如果插入失败,则弹出提示框(sorry, 注册失败!)。在登录界面输入用户名与密码,查询数据库如果找到有相应的刚注册成功的用户名与密码,则弹出提示框(恭喜你, 登录成功!),如果查询数据库没有相应的记录,则弹出提示框(sorry, 登录失败!)。最后再制作一个管理界面,在界面上显示所有注册成功的用户名与密码,并实现删除与修改用户名与密码操作。

package com.hzxy.day0624;

import  javax.swing.JTabbedPane;//层叠式的面板
import javax.swing.JLabel;//标签
import javax.swing.JPanel;
import javax.swing.JTextField;//文本框 

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;//按钮 
import javax.swing.JFrame;


public class LoginFrame extends JFrame implements ActionListener{
    
    private JTabbedPane tabbedPane;
    private JLabel labelUserName;
    private JLabel labelPwd;
    
    private  JTextField  textFieldUserName;
    private JTextField textFieldPwd;
    
    private JButton buttonLogin;
    private JButton buttonRegister;

    public static void main(String[] args) {
        new LoginFrame().init();
    }
    
    private void init() {
        tabbedPane=new JTabbedPane();
        JPanel  panelRegister = new JPanel();
        JPanel  panelLogin= new JPanel();        
        tabbedPane.addTab("注册", panelRegister);       
        tabbedPane.addTab("登录", panelLogin);   
        
        
        //以下控件加载到注册面板panelRegister
        labelUserName=new JLabel("用户名:");
        labelPwd=new JLabel("密码:");        
        textFieldUserName=new JTextField();
        textFieldPwd=new JTextField();        
        buttonRegister=new JButton("注册"); //注册按钮,事件源  鼠标单击事件        
        //FLowLayout, BorderLayout, GridLayout        
        panelRegister.setLayout(new BorderLayout());
        
        JPanel panel=new JPanel();//这个小面板
        panel.setMaximumSize(new Dimension(300,300));;
        panel.setLayout(new GridLayout(2,2)); 
        panel.add(labelUserName);
        panel.add(textFieldUserName);
        panel.add(labelPwd);
        panel.add(textFieldPwd);        
        panelRegister.add(panel,BorderLayout.CENTER);        
        //panelRegister.add(null);
        panelRegister.add(buttonRegister,BorderLayout.SOUTH);
        
        buttonRegister.addActionListener(this);//关联  事件源 和 事件监听器(一旦有了事件,监听器负责应对/处理这个事件 )
        
        this.add(tabbedPane,BorderLayout.CENTER);
        setSize(600,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e) {//单击按钮时需要执行的操作,处理事件的代码
        if(e.getSource()==buttonRegister) {//单击了注册按钮
            
            String userName=textFieldUserName.getText().trim();//获取用户名,去掉两边的空格 
            String pwd=textFieldPwd.getText().trim();
            
            //注册操作
            System.out.println(userName+" : "+ pwd+"   正在注册");
            
        }
    };

}

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-07-10 03:32
    关注

    主类代码在哪里啊?你忘了贴出来了吧

     
    abstract class Advertisement { //抽象类
                abstract public void show();
    }
    class Baidu    {//2.Baidu类继承Advertisement类;
        public void show() {// 显示广告语
            System.out.println(getName() + " : " + "百度一下,你就知道");
        }
        public String getName() { // 获取公司名称
            return "百度";
        }
    }
    class Honor      {//3.Honor类继承Advertisement类;
        public void show() {// 显示广告语`
            System.out.println(getName() + " : " + "勇敢做自己,做自己最荣耀。");
        }
        public String getName() {
            return "荣耀";
        }
    }
    public class AdBoard {//广告牌类
        public void show(Advertisement ad) {
                       ad.show();
        }
        public static void main(String[] args) {
            AdBoard board =  new AdBoard;          //5.构造一个广告牌类(AdBoard)的对象;
            board.show(    new Baidu()         ); //6.代码功能:显示Baidu公司的广告语;
            board.show(    new Honor         ); //7.代码功能:显示Honor公司的广告语;
        }
    }
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月10日
  • 修改了问题 7月10日
  • 修改了问题 7月10日
  • 修改了问题 7月10日
  • 展开全部

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 虚心请教几个问题,小生先有礼了
  • ¥30 截图中的mathematics程序转换成matlab