9.30

今天完成软件设计的实验一。

 

[实验任务一]:UML复习

阅读教材第一章复习UML,回答下述问题:

面向对象程序设计中类与类的关系都有哪几种?分别用类图实例说明。

1、关联关系

      

 

①、单向关联

 

 

②、双向关联

 

 

③、多重性关联

 

 

④、聚合关联

 

⑤、组合关联

 

2、依赖关系

 

3、泛化关系

 

[实验任务二]:单一职责原则

登录模块在实际项目开发中很常见,请按照教材28页(PPT49页)利用单一职责原则重构后的类图实现这一模块。

 

Init方法用于初始化按钮、文本框等界面控件;display方法用于向界面容器中增加界面控件并显示窗口;validate方法供登录按钮的事件处理方法调用,用于调用与数据库相关的方法完成登录处理,成功则进入,否则提示错误;getConnection方法用于获取数据库连接对象Connection来连接数据库;findUser方法用于根据用户名和密码查询数据库中用户是否存在,存在为True,否则为false,需调用getConnectionmain为主函数,即系统的入口

 

按照功能拆分成四个类:

LoginForm负责界面显示,只包含与界面有关的方法和事件处理方法;

UserDAO负责用户表的增删改查操作,封装了对用户表的全部操作代码,登录本质上是一个查询用户表的操作。

DBUtil负责数据库的连接,可供多个数据库操作类重用;

MainClass负责启动系统。

源代码:

1、BDUtil

package wufa;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/login";
    private static final String USER = "root";
    private static final String PASSWORD = "123456789";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}

2、UserDAO

package wufa;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

public class UserDAO {

    public boolean findUser(String username, String password) {

        Connection conn = null;

        PreparedStatement pstmt = null;

        ResultSet rs = null;

        try {

            conn = DBUtil.getConnection();

            String sql = "SELECT * FROM users WHERE username=? AND password=?";

            pstmt = conn.prepareStatement(sql);

            pstmt.setString(1, username);

            pstmt.setString(2, password);

            rs = pstmt.executeQuery();

            return rs.next(); // 如果查询结果存在,则返回true

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            try {

                if (rs != null) rs.close();

                if (pstmt != null) pstmt.close();

                if (conn != null) conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        return false;

    }

}

3LoginForm

package wufa;

 

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

public class LoginForm extends JFrame {

    private JTextField usernameField;

    private JPasswordField passwordField;

    private JButton loginButton;

    private JLabel messageLabel;

 

    public LoginForm() {

        init();

    }

 

    private void init() {

        setTitle("Login Form");

        setSize(300, 200);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLocationRelativeTo(null);

 

        JPanel panel = new JPanel();

 

        JLabel usernameLabel = new JLabel("Username:");

        usernameField = new JTextField(20);

        JLabel passwordLabel = new JLabel("Password:");

        passwordField = new JPasswordField(20);

        loginButton = new JButton("Login");

        messageLabel = new JLabel("");

 

        loginButton.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                validate();

            }

        });

 

        panel.add(usernameLabel);

        panel.add(usernameField);

        panel.add(passwordLabel);

        panel.add(passwordField);

        panel.add(loginButton);

        panel.add(messageLabel);

 

        add(panel);

    }

 

    private void validate() {

        String username = usernameField.getText();

        String password = new String(passwordField.getPassword());

        UserDAO userDAO = new UserDAO();

        if (userDAO.findUser(username, password)) {

            messageLabel.setText("Login successful!");

            // 进行后续操作,比如打开新的窗口等

        } else {

            messageLabel.setText("Invalid username or password.");

        }

    }

 

    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> {

            LoginForm form = new LoginForm();

            form.setVisible(true);

        });

    }

}

3、MainClass

public class MainClass {

public static void main(String[] args) {

// 启动登录界面 SwingUtilities.invokeLater(() -> {

LoginForm form = new LoginForm();

form.setVisible(true);

 });

}

}

实验要求:

 

[实验任务三]:依赖倒转原则与合成复用原则

在一画图软件中提供了多种大小不同的画笔,并且可以给画笔指定不同的颜色,某设计人员对画笔进行了如上图所示的设计。通过分析,可以发现增加画笔的种类和颜色会使得系统中类的数目急剧增加,请根据合成复用原则和依赖倒转原则对上述设计进行重构。

实验要求:

1.提交源代码;

2.画出重构后的类图。

 

 

型号抽象类

public abstract class Size {

public abstract void sizePen();

}

具体型号类

public class SmallPen extends Size{

//小型

public void sizePen() {

System.out.println("小型");

}

public class MiddlePen extends Size{

//中型

public void sizePen() {

System.out.println("中型");

}

public class BigPen extends Size{ 

//大型

public void sizePen() {

System.out.println("大型");

}

}

颜色抽象类

public abstract class Color { 

public abstract void colorPen();

}

具体颜色类

public class GreenPen extends Color{

public void colorPen() {

System.out.println("绿色");

}

}

public class RedPen extends Color{

public void colorPen() {

System.out.println("红色");

}

}

钢笔

public class Pen {

//钢笔

private Size size;

private Color color;

public Size getSize() {

   return size;

}

public void setSize(Size size) {

   this.size = size;

}

public Color getColor() {

   return color;

}

public void setColor(Color color) {

 this.color = color;

}

}

 

聚合钢笔

public class MianClass {public static void main(String[] args) {//颜色大小随意组合

Pen pen=new Pen();//组合小型红色钢笔

pen.setSize(new SmallPen());

pen.setColor(new RedPen());//组合大型绿色钢笔

pen.setSize(new BigPen());

pen.setColor(new GreenPen());

}

}

 

posted @ 2024-10-01 00:52  七安。  阅读(8)  评论(0编辑  收藏  举报