跳到正文
XiaoGao 的个人博客

NO.17 · 项目实战

客户信息管理系统:C11 分层架构的控制台实战

基于 C11 的客户信息管理系统实战项目——把单文件示例重构为应用层、领域层和界面层的分层架构,加入动态数组、结果码、输入校验和内存管理。

发布 DATE
字数 WORDS
711
阅读 READ
2 分钟

学完 C 语言语法,最缺的就是一个”像样”的项目。这个客户信息管理系统把课程里的单文件示例重构为分层架构:应用层编排流程、领域层管理业务、界面层处理输入输出,并补齐了输入校验、动态数组、结果码和资源释放这些工程细节。

功能特性

  • 添加客户:录入姓名、性别、年龄、电话和邮箱;
  • 修改客户:按编号修改资料,直接回车保留原值,输入 -1 取消;
  • 删除客户:按编号删除,删除前要求 y/n 确认,删除后自动整理后续编号;
  • 客户列表:展示所有客户的编号和详细资料;
  • 输入校验:菜单、姓名、性别、年龄、电话、邮箱和确认输入全部校验;
  • 动态数组:容量不足时自动扩展。

分层架构

1
2
3
4
5
6
7
customer-management-system/
├── src/
│ ├── main.c # 程序入口
│ ├── app/ # 应用层:编排菜单流程和业务操作
│ ├── domain/ # 领域层:客户资料、目录和业务规则
│ └── ui/ # 界面层:控制台输入、校验和展示
└── docs/ # 原始需求文档
模块 职责
src/app/ 编排菜单流程和业务操作
src/domain/ 管理客户资料、目录和业务规则
src/ui/ 负责控制台输入、校验和展示

应用层连接领域层和控制台层,不直接管理客户数组。领域层负责增删改查、编号维护、资料校验和资源生命周期;控制台层只负责读取输入与展示结果。

校验规则

字段 规则
姓名 必填,最多 63 字节
性别 只接受 f/F 或 m/M
年龄 1 到 150
电话 允许数字、+、-、括号和空格,至少包含 3 位数字
邮箱 必须包含一个 @、域名分隔点且不能有空格

工程化设计要点

  • 头文件暴露模块接口,用 CustomerDirectory 封装客户集合,用 CustomerResult 表示业务结果;
  • 客户记录用动态数组保存,目录容量不足时自动扩展;
  • 退出前调用销毁函数释放动态内存,配合 -Wall -Wextra -Wpedantic 全程零警告。

编译运行

标准 C11,无第三方依赖:

1
2
3
4
5
gcc -std=c11 -Wall -Wextra -Wpedantic -Isrc \
src/main.c src/app/customer_app.c \
src/domain/customer_directory.c \
src/ui/console_input.c src/ui/console_view.c \
-o customer-management-system

可以继续做的事

客户数据目前只保存在进程内,后续可以增加文件或数据库持久化、客户查询、分组标签、导入导出、单元测试以及 CMake / Makefile 构建流程。

这个项目最大的价值在于展示了”课本代码”到”工程代码”的距离:同样的功能,加上分层、校验、错误处理和资源管理之后,才算真正能维护的程序。

仓库

    ↑↓ 选择↵ 打开>theme · >random · >top · >archive