這是一個經典的 C 語言入門專案,包含兩個獨立功能模組:通訊錄管理系統與簡易日曆顯示程式。程式碼展示了檔案操作、結構體應用、選單驅動介面、密碼驗證機制以及日期計算演算法等基礎概念,適合初學者研讀與修改練習。
struct info {
char name[15]; // 姓名
char phone[12]; // 電話
char sex[2]; // 性別
char age[4]; // 年齡
char address[20]; // 地址
};
使用結構體陣列儲存聯絡人資訊,透過 information.txt 二進位檔案持久化資料。
Initial())、讀取驗證(InitializationPassword()、EnterPassword())、修改密碼(ModifyPassword()),分為管理員與一般使用者兩種權限模式。New()):附加模式寫入檔案,支援連續輸入。Modify()):建立暫存檔 temp.txt,逐筆比對姓名後覆寫,最後替換原檔。Delet()):同樣採用暫存檔過濾法,排除指定姓名後重建檔案。Display()):格式化輸出所有記錄。Search()):支援姓名、電話、性別、年齡、地址五種欄位搜尋。AdministratorInterface() 與 NormalUserInterface() 分別提供完整與唯讀功能選單,透過 SelectOption()、ExecutiveFunction1/2() 分派執行。採用 蔡勒公式 變體計算星期:
EnterAndCheckDate() 輸入年月並驗證合法性(年≥1900,月 1-12)。February() 判斷閏年調整 2 月天數。TotalDays() 累計從 1900 年 1 月 1 日到目標年月首日的總天數。Calendar() 根據總天數模 7 計算起始空格數。Showing() 依序印出日期,每週換行。static int year, month, days;
static int moon[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; // 每月天數表
gets()、fflush(stdin) 等不安全/非標準函式,建議改用 fgets() 並自行移除換行符。fwrite/fread 存在跨平台相容性風險(記憶體對齊、位序),教學用途可接受,實務建議序列化為文字格式(如 CSV/JSON)。gcc contact_calendar.c -o contact_calendar
./contact_calendar
首次執行會提示設定初始密碼,之後依密碼正確性進入管理員或一般使用者介面;日曆功能獨立於通訊錄,可單獨編譯測試。