项目必备流程图,类图,E-R图实例速通
一、流程图:用 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;
}
对应的流程图
流程图绘制要点
- 从左到右或从上到下布局,保持流程清晰
- 用箭头明确指示流程走向,避免交叉
- 判断节点(菱形)必须有两个或以上出口
- 每个流程都应有明确的开始和结束点
- 复杂流程可拆分多个子流程
二、类图:用 C++ 图书管理系统类为例
类图用于描述类的结构和类之间的关系,我们以一个简单的图书管理系统为例,根据 C++ 类代码来绘制类图。
C++ 类代码
#include <string>
#include <vector>// 图书类
class Book {
private:std::string isbn; // 图书ISBNstd::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; // 读者IDstd::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); // 查找读者
};
对应的类图
类图绘制要点
- 类名、属性和方法分三行展示
- 访问修饰符表示:
+
public,-
private,#
protected - 明确标注类之间的关系类型:
- 关联(实线):表示对象之间的联系
- 聚合 / 组合:表示整体与部分的关系
- 继承(空心三角箭头):表示类的继承关系
- 在关系线上标注 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 图绘制要点
- 实体用矩形表示,属性用椭圆表示
- 主键(PK)用下划线标注,外键(FK)标注清楚
- 关系用菱形表示,并用动词描述关系
- 明确标注关系的基数:
1:1
表示一对一1:N
表示一对多N:M
表示多对多(通常需要中间表)
- 对于复杂属性可以进一步细分,如用户的地址可以拆分为省、市、街道等