开-闭原则(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公司的广告语;
}
}
完成一个int[] getNo(String[] strs)方法:参数strs为一个字符串数组,strs中的每个字符串的长度大于2且字符串的最后两位是数字。方法的功能:将strs中所有字符串的最后两位数字升序保存在整型数组内并输出,该整型数组即为方法的返回值。
提示:
Arrays.sort(arr);可对数组进行排序;
str.substring(beginindex,endindex)该方法可以截取字符串str的子字符串
示例:
给定参数(数组):{"ghj23","bdbc65"}
函数的返回值(数组):{23,65}完成如下图所示界面(登录与注册界面),然后使用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+" 正在注册");
}
};
}