C语言通讯录实例
利用C語言簡單寫的一個通訊錄實例,因為要交的原因,所以在編寫的時候也是寥寥收場。主要實現的就是添加、刪除、修改聯系人,然后把數據寫入存儲文件。編寫環(huán)境VS2013,測試環(huán)境DEVC++。在VC++中是不能編譯的,VC會報錯的原因是在編寫的時候在循環(huán)中添加局部變量,正好VC不支持這樣的局部變量,如果有需要的同學可以把變量的聲明提到函數主體前,這樣VC是可以正常編譯的。
代碼:
/* **通訊錄 **ASorb time:201807 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #define max_list 99 //聯系人最高條目 #define max_notes 45 //記事本條目 #define data_file "addresslist.dat" //數據文件 #define notes_file "notes_data.txt" //記事本數據 #define address_n address_num() //統計函數 //定義全局結構體變量 typedef struct address{char name[20];char phone[12];char birthday[9]; }address; //定義記事本結構體 typedef struct notes{char title[40];char content[200]; }notes; //歡迎頁面 void welcome(){system("color 4F");printf("歡迎使用通訊錄!\n\n\n\n");printf("\t\t\t╭────────────────────────────────────────────╮\n");printf("\t\t\t│名稱:通訊錄實例 ┃\n");printf("\t\t\t│數信學院 計科2班 王/// 201742010// ┃\n");printf("\t\t\t╰━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╯\n");printf("\n\n回車鍵進入......");fflush(stdin); //強制清除緩存流getchar(); } //主界面 char interphase(){int address_num(); //聲明統計函數char home;system("color 9F");printf("通訊錄(數據文件:%s)\t容量:%d條\t已用:%d條\n\n\n",data_file, max_list, address_n);printf("\t\t\tA.查看聯系人\t\tB.修改聯系人\n\n");printf("\t\t\tC.刪除聯系人\t\tD.新建聯系人\n\n");printf("\t\t\tQ.退出通訊錄\n\n\t\t附加功能:\n\t\t\tT.備忘錄\n\n\n");printf("--------------\n鍵入序號:");fflush(stdin);home = getchar();if ((home<'A' || home>'D') && home != 'Q'&&home != 'T') {system("cls");printf("提示:選擇有誤,重新選擇!\n");interphase();}elsereturn home; } //檢查文件 void file_true(){address arr[2] = { { "test1", "18212296321", "19980202" }, { "test2", "18212296320", "19980302" }}; //定義兩條測試數據FILE *data = fopen(data_file, "rb");if (data == NULL){data = fopen(data_file, "wb");fwrite(arr, sizeof(address),2, data); //寫入測試數據}fclose(data); //關閉文件 } //讀取文件 void file_read(address *p){FILE *data = fopen(data_file, "rb");fread(p, sizeof(address), max_list, data);fclose(data); } //寫入文件 void file_write(address *p){int count = 0;while (((p + count)->name[0]) != NULL){count++;}FILE *data = fopen(data_file, "wb");fwrite(p, sizeof(address), count, data);fclose(data); } //查看聯系人 void address_list(){int address_num();address list[max_list] = {0};static int num = 0;char h_1;file_read(list);printf("查看聯系人:\n\n\n");int i = 0;printf("\t\t\t┌────────────────────┬─────────────┬──────────┐\n");printf("\t\t\t│ 姓 名 │ 手 機 號 碼 │ 出生日期│\n");for (int i = 0; (i < max_list) && (list[i].name[0] != NULL); i++){printf("\t\t\t├────────────────────┼─────────────┼──────────┤\n");printf("\t\t\t│%-20s│%13s│%10s│\n", list[i].name, list[i].phone, list[i].birthday);}printf("\t\t\t└────────────────────┴─────────────┴──────────┘\n");printf("\t\t\t$$$共有%d位聯系人\n", address_num());printf("\n\n-----------\nR.刷新聯系人\t其它鍵返回主菜單\n");fflush(stdin);h_1 = getchar();if (h_1 == 'R'){system("cls");printf("第%d次刷新!", ++num);address_list();} } //修改聯系人 void address_edit(){address user;address list[max_list] = { 0 };char h_1 = NULL;file_read(list);printf("\n-------------\n輸入姓名:");fflush(stdin);gets(user.name);for (int i = 0; (i < max_list) && list[i].name[0] != NULL; i++){if (strcmp(list[i].name, user.name) == 0){printf("輸入新名字(為空不做修改):");fflush(stdin);gets(user.name);printf("輸入新號碼(為空不做修改):");fflush(stdin);gets(user.phone);printf("輸入出生日期(為空不做修改):");fflush(stdin);gets(user.birthday);if (strlen(user.name) > 0){strcpy(list[i].name, user.name);h_1 = 'Y';}if (strlen(user.phone) > 0){strcpy(list[i].phone, user.phone);h_1 = 'Y';}if (strlen(user.birthday) > 0){strcpy(list[i].birthday, user.birthday);h_1 = 'Y';}break;}}if (h_1 == 'Y'){file_write(list);system("cls");printf("聯系人修改成功!");address_list();}else{printf("修改失敗,任意鍵返回!\n");fflush(stdin);getchar();} } //刪除聯系人 void address_del(){int address_num();address user;address list[max_list] = { NULL };char h_1 = NULL;file_read(list);printf("\n-----------------\n輸入姓名:");fflush(stdin);gets(user.name);for (int i = 0; (i < max_list) && list[i].name[0] != NULL; i++){if (strcmp(list[i].name, user.name) == 0) {for (i; (i < max_list - 1) && list[i + 1].name[0] != NULL; i++){list[i] = list[i + 1];}list[i].name[0] = NULL;h_1 = 'Y';break;}}if (h_1 == 'Y'){file_write(list);system("cls");printf("聯系人刪除成功!");address_list();}else{printf("刪除失敗,任意鍵返回!\n");fflush(stdin);getchar();} } //新建聯系人 void address_new(){int address_num();int address_num_1 = address_num();address user;address list[max_list] = { NULL };char h_1 = NULL;printf("\n----------------\n輸入姓名(20字符內):");fflush(stdin);gets(user.name);printf("輸入手機號碼(11位):");fflush(stdin);gets(user.phone);printf("輸入出生日期(如:19980202):");fflush(stdin);gets(user.birthday);if (strlen(user.name) <= 0 || strlen(user.name) > 20)printf("錯誤1:姓名不符合規(guī)定!");else if (strlen(user.phone) != 11)printf("錯誤2:手機號不正確!");else if (strlen(user.birthday) != 8)printf("錯誤3:出生日期格式錯誤!");else{file_read(list);//重排聯系人for (int i = 0; i < address_num_1; i++){if (strcmp(user.name, list[i].name)<0){for (int ii = address_num_1; ii > i; ii--)list[ii] = list[ii - 1];list[i] = user;h_1 = 'Y';break;}else if (i == address_num_1 - 1){list[address_num_1] = user;h_1 = 'Y';}}}if (h_1 == 'Y'){file_write(list);system("cls");printf("新建聯系人成功!");address_list();}else{printf("新建失敗,任意鍵返回!\n");fflush(stdin);getchar();} } //統計條目 int address_num(){int num = 0;address list[max_list] = { NULL };file_read(list);for (num; (num < max_list) && list[num].name[0] != NULL; num++);return num; } //附加記事本功能&界面 void notes_interphase(){int notes_num();void add_notes();void view_notes();char h_1;while (1){printf("記事本(數據文件%s)\t容量:%d\t已用:%d\n",notes_file, max_notes, notes_num());printf("\n\n\t\t\tA.記事\t\tB.查看\n\n\t\t\tQ.返回上一級\n\n");printf("\n----------------\n鍵入序號:");fflush(stdin);h_1 = getchar();if (h_1 == 'A')add_notes();else if (h_1 == 'B')view_notes();else if (h_1 == 'Q')break;else{system("cls");printf("提示:選擇有誤,重新選擇!\n");notes_interphase();}} } //記事文件讀取 void notes_read(notes *p){FILE *data = fopen(notes_file,"rb");if (data == NULL) //文件不存在data = fopen(notes_file, "wb+");fread(p, sizeof(notes), max_notes, data);fclose(data); } //記事本文件存儲 void notes_save(notes *p){int count = 0;FILE *data = fopen(notes_file, "wb");while ((p + count)->title[0] != NULL)count++;fwrite(p, sizeof(notes), count, data);fclose(data); } //記事 void add_notes(){int notes_num();notes new_notes;notes list[max_notes] = { NULL };printf("\n--------------\n題目:");fflush(stdin);gets(new_notes.title);printf("正文:");fflush(stdin);gets(new_notes.content);if ((strlen(new_notes.title) > 0) && (strlen(new_notes.content) > 0)){notes_read(list);list[notes_num()] = new_notes;notes_save(list);system("cls");printf("提示:保存成功!\n");}else{system("cls");printf("提示:內容有誤,保存失敗!\n");} } //查看記事本 void view_notes(){int notes_num(),i,link;char view, h_1 = NULL;notes list[max_notes] = { NULL };notes_read(list);system("cls");printf("查看記事本\n\n");printf("\t\t\t\t%5s\t%-40s", "序號", "題目\n");for (int i = notes_num(), ii = 0; i > 0; i--, ii++)printf("%d \t% -40s\n", ii, list[ii].title);printf("\n總數目:%d\tD.刪除\tR.閱讀\n",notes_num());printf("\n--------------\n鍵入操作:");fflush(stdin);view = getchar();printf("輸入序號:");scanf("%d", &link);if (view == 'D'){if (link >= 0 && link < notes_num()){for (i = link; (i < max_list - 1) && list[i + 1].title[0] != NULL; i++){list[i] = list[i + 1];}list[i].title[0] = NULL;h_1 = 'Y';}if (h_1 == 'Y'){notes_save(list);system("cls");printf("提示:刪除成功!\n");}else{system("cls");printf("提示:操作有誤,返回上級!\n");}}else if (view == 'R'){printf("------------\n正在閱讀《%s》\n", list[link].title);printf("正文:%s", list[link].content);printf("\n\n$$2018 任意鍵返回!");fflush(stdin);getchar();system("cls");}else{system("cls");printf("提示:操作有誤,返回上級!\n");} } //記事本統計函數 int notes_num(){int num = 0;notes list[max_notes] = { NULL };notes_read(list);for (num; (num < max_notes) && list[num].title[0] != NULL; num++);return num; } int main(){system("mode con cols=93 lines=28"); //初始化窗口大小file_true();char h_1;welcome();while (1){system("cls");h_1 = interphase();if (h_1 == 'Q')break;else{switch (h_1){case 'A':system("cls"); address_list(); break;case 'B':address_edit(); break;case 'C':address_del(); break;case 'D':address_new(); break;case 'T':system("cls"); notes_interphase(); break;}}} return 0; }下面提供一些效果圖:
?
?DEVC++運行源代碼下載:
https://download.csdn.net/download/qq_42304721/10592956
總結
- 上一篇: PHP读取Excel数据
- 下一篇: C语言 通讯录项目完整代码