首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言結構體嵌套實戰:學生信息與日期結構體設計規範

     編輯:C 語言問答

需求建模

設計學生信息系統,包含學號、姓名、性別、出生日期(年/月/日)。

推薦結構體設計


// 日期結構體 - 獨立可復用
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 語言實現「組合優於繼承」的核心機制,良好的領域建模從合理的結構體拆分開始。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved