設計學生信息系統,包含學號、姓名、性別、出生日期(年/月/日)。
// 日期結構體 - 獨立可復用
typedef struct {
int year;
int month;
int date;
} BirthDate;
// 學生結構體 - 組合日期結構體
typedef struct {
char num[20]; // 學號,字符串保留前導零
char name[20]; // 姓名
char sex; // 性別 'M'/'F' 或枚舉更佳
BirthDate birthDay; // 嵌套日期結構體
} Student;
Student stu1 = {
.num = "20230001",
.name = "張三",
.sex = 'M',
.birthDay = {2000, 5, 15}
};
// 訪問嵌套成員
printf("出生年份: %d\n", stu1.birthDay.year);
printf("出生月份: %d\n", stu1.birthDay.month);
// 指針訪問
Student* p = &stu1;
printf("出生日期: %d-%02d-%02d\n",
p->birthDay.year, p->birthDay.month, p->birthDay.date);
| 原則 | 體現 |
|---|---|
| 高內聚 | 日期相關數據封裝在 BirthDate 中 |
| 低耦合 | Student 不關心日期內部實現 |
| 可復用 | BirthDate 可用於教師、課程等其他實體 |
| 易維護 | 修改日期格式只需改 BirthDate |
uint16_t、uint8_t 精確控制位寬typedef enum {MALE, FEMALE} Gender;bool is_valid_date(BirthDate d)結構體嵌套是 C 語言實現「組合優於繼承」的核心機制,良好的領域建模從合理的結構體拆分開始。