项目必备流程图,类图,E-R图实例速通

发布于:2025-09-08 ⋅ 阅读:(26) ⋅ 点赞:(0)

一、流程图:用 ATM 取款流程示例

流程图用于描述算法或业务的执行步骤和分支逻辑,我们以 ATM 取款流程为例,结合代码逻辑来画流程图。

代码逻辑(简化版)

// ATM取款流程伪代码
bool withdrawMoney(double amount) {
    // 1. 验证银行卡
    if (!validateCard()) {
        showMessage("卡片无效");
        return false;
    }
    
    // 2. 验证密码
    if (!validatePin()) {
        showMessage("密码错误");
        return false;
    }
    
    // 3. 检查余额
    if (getBalance() < amount) {
        showMessage("余额不足");
        return false;
    }
    
    // 4. 检查取款金额是否符合规定
    if (amount > MAX_WITHDRAW || amount % 100 != 0) {
        showMessage("金额不符合要求");
        return false;
    }
    
    // 5. 执行取款操作
    deductBalance(amount);
    dispenseCash(amount);
    printReceipt();
    showMessage("取款成功");
    return true;
}

对应的流程图

流程图绘制要点

  1. 从左到右或从上到下布局,保持流程清晰
  2. 用箭头明确指示流程走向,避免交叉
  3. 判断节点(菱形)必须有两个或以上出口
  4. 每个流程都应有明确的开始和结束点
  5. 复杂流程可拆分多个子流程

二、类图:用 C++ 图书管理系统类为例

类图用于描述类的结构和类之间的关系,我们以一个简单的图书管理系统为例,根据 C++ 类代码来绘制类图。

C++ 类代码

#include <string>
#include <vector>

// 图书类
class Book {
private:
    std::string isbn;       // 图书ISBN
    std::string title;      // 书名
    std::string author;     // 作者
    int publishYear;        // 出版年份
    bool isBorrowed;        // 是否被借出
    
public:
    Book(std::string isbn, std::string title, std::string author, int year);
    std::string getISBN() const;
    std::string getTitle() const;
    bool borrowBook();      // 借阅图书
    bool returnBook();      // 归还图书
    bool isAvailable() const; // 检查是否可借
};

// 读者类
class Reader {
private:
    std::string readerId;   // 读者ID
    std::string name;       // 姓名
    std::vector<std::string> borrowedBooks; // 已借图书ISBN列表
    
public:
    Reader(std::string id, std::string name);
    std::string getReaderId() const;
    bool borrowBook(Book& book);  // 借阅图书
    bool returnBook(Book& book);  // 归还图书
    int getBorrowedCount() const; // 获取已借数量
};

// 图书馆类
class Library {
private:
    std::vector<Book> books;     // 馆藏图书
    std::vector<Reader> readers; // 读者列表
    
public:
    bool addBook(const Book& book);        // 添加图书
    bool removeBook(const std::string& isbn); // 移除图书
    Book* findBook(const std::string& isbn);  // 查找图书
    bool registerReader(const Reader& reader); // 注册读者
    Reader* findReader(const std::string& id); // 查找读者
};

对应的类图

类图绘制要点

  1. 类名、属性和方法分三行展示
  2. 访问修饰符表示:+ public,- private,# protected
  3. 明确标注类之间的关系类型:
    • 关联(实线):表示对象之间的联系
    • 聚合 / 组合:表示整体与部分的关系
    • 继承(空心三角箭头):表示类的继承关系
  4. 在关系线上标注 multiplicity(数量关系):1*(多个)、0..1(0 或 1 个)等

三、E-R 图:用电商订单系统为例

E-R 图用于数据库设计,描述实体、属性及实体间关系。我们以电商订单系统为例,结合数据库表结构来绘制 E-R 图。

数据库表结构(简化版)

-- 用户表
CREATE TABLE users (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    phone VARCHAR(20),
    register_time DATETIME NOT NULL
);

-- 商品表
CREATE TABLE products (
    product_id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    stock INT NOT NULL,
    category VARCHAR(50),
    description TEXT
);

-- 订单表
CREATE TABLE orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    order_time DATETIME NOT NULL,
    total_amount DECIMAL(10,2) NOT NULL,
    status VARCHAR(20) NOT NULL,
    address VARCHAR(200) NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

-- 订单项表
CREATE TABLE order_items (
    item_id INT PRIMARY KEY AUTO_INCREMENT,
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    unit_price DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (order_id) REFERENCES orders(order_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

对应的 E-R 图

E-R 图绘制要点

  1. 实体用矩形表示,属性用椭圆表示
  2. 主键(PK)用下划线标注,外键(FK)标注清楚
  3. 关系用菱形表示,并用动词描述关系
  4. 明确标注关系的基数:
    • 1:1 表示一对一
    • 1:N 表示一对多
    • N:M 表示多对多(通常需要中间表)
  5. 对于复杂属性可以进一步细分,如用户的地址可以拆分为省、市、街道等

网站公告

今日签到

点亮在社区的每一天
去签到