C語言通訊錄管理系統完整代碼
本文實例為大傢分享瞭C語言實現通訊錄管理系統的具體代碼,供大傢參考,具體內容如下
設計內容:
設計一個通訊錄管理系統,以實現以下功能:信息添加、查詢、修改、刪除、排序等功能。
設計要求:
1) 每條信息至包含 :姓名、電話、工作單位等信息
2) 作為一個完整的系統,應具有友好的界面和較強的容錯能力
預覽:
代碼:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #define LEN sizeof(struct list) #define DATA a[i].num,a[i].name,a[i].job,a[i].address #define FORMAT "\t\t || %-12d %-12s %-19s %-20s ||\n" void in(); void menu(); void search(); void del(); void show(); void modify(); void insert(); void order(); void total(); struct list { int num; //號碼 char name[15]; //姓名 char job[30]; //工作單位 char address[30]; //地址 }; struct list a[50]; void main() { system("color 5e\n"); menu(); int n; scanf("%d", &n); while (n) { switch (n) { case 1:in(); break; case 2:search(); break; case 3:del(); break; case 4:modify(); break; case 5:insert(); break; case 6:order(); break; case 7:total(); break; case 8:show(); break; default:break; } getch(); menu();//執行完後顯示菜單 scanf("%d", &n); } } void menu() { system("cls"); printf("\n\n\n"); printf("\t\t\t\t\t**************************************\n"); printf("\t\t\t\t\t************通訊錄管理系統************\n"); printf("\t\t\t\t\t======================================\n"); printf("\t\t\t\t\t* 1.錄入聯系人信息 *\n"); printf("\t\t\t\t\t* 2.查找聯系人信息 *\n"); printf("\t\t\t\t\t* 3.刪除聯系人信息 *\n"); printf("\t\t\t\t\t* 4.修改聯系人信息 *\n"); printf("\t\t\t\t\t* 5.插入聯系人信息 *\n"); printf("\t\t\t\t\t* 6.排序 *\n"); printf("\t\t\t\t\t* 7.統計聯系人總數 *\n"); printf("\t\t\t\t\t* 8.顯示所有聯系人 *\n"); printf("\t\t\t\t\t* 0.退出系統 *\n"); printf("\t\t\t\t\t======================================\n"); printf("\t\t\t\t\t**************************************\n"); printf("\t\t\t\t\t 請選擇(0-8):"); } void in() { int i, m = 0; char ch[2]; FILE* fp; if ((fp = fopen("data.txt", "a+")) == NULL) { printf("\t\t 文件不存在! \n"); return; } while (!feof(fp)) { if (fread(&a[m], LEN, 1, fp) == 1) m++; } fclose(fp); if (m == 0) { printf("\t\t 文件中沒有記錄!\n"); } else { show(); } if ((fp = fopen("data.txt", "a+")) == NULL) { printf("\t\t 文件不存在!\n"); return; } printf("\t\t 是否輸入聯系人信息(y/n):"); scanf("%s", ch); while (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0) { printf("\t\t 電話:"); scanf("%d", &a[m].num); for (i = 0; i < m; i++) { if (a[i].num == a[m].num) { printf("\t\t 此用戶已經存在瞭,按任意鍵繼續!"); getch(); fclose(fp); return; } } printf("\t\t 姓名:"); scanf("%s", &a[m].name); printf("\t\t 工作單位:"); scanf("%s", &a[m].job); printf("\t\t 地址:"); scanf("%s", &a[m].address); if (fwrite(&a[m], LEN, 1, fp) != 1) { printf("\t\t 不能保存"); getch(); } else { printf("\t\t %s 已被保存!\n", a[m].name); m++; } printf("\t\t 繼續?(y/n):"); scanf("%s", ch); } fclose(fp); printf("\t\t 結束錄入!\n"); } void del() { show(); FILE* fp; int nmb, i, j, m = 0; int t = 1; //判斷是否正常結束 char ch[2]; if ((fp = fopen("data.txt", "r+")) == NULL) { printf("\t\t \n文件不存在\n"); return; } while (!feof(fp)) { if (fread(&a[m], LEN, 1, fp) == 1) m++; } fclose(fp); if (m == 0) { printf("\t\t \n文件沒有記錄!\n"); return; } printf("\t\t 輸入要刪除的聯系人的電話號碼:"); scanf("%d", &nmb); for (i = 0; i < m; i++) if (nmb == a[i].num) { printf("\t\t 找到這條記錄是否刪除(y/n):"); scanf("%s", &ch); if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0) { for (j = i + 1; j < m; j++) a[j - 1] = a[j]; m--; if ((fp = fopen("data.txt", "w+")) == NULL) { printf("\t\t 文件不存在\n"); return; } for (j = 0; j < m; j++) { if (fwrite(&a[j], LEN, 1, fp) != 1) { printf("\t\t 無法寫入文件!刪除失敗!"); getch(); } } fclose(fp); printf("\t\t 刪除成功"); } else { fclose(fp); printf("\t\t 找到瞭記錄選擇不刪除"); } t = 0; //標志找到該聯系人 break; } if (t) printf("\t\t 沒有找到該聯系人!\n"); } void modify() { show(); FILE* fp; int i = 0, j = 0, m = 0, nmb; if ((fp = fopen("data.txt", "r+")) == NULL) { printf("\t\t 文件不存在\n"); return; } while (!feof(fp)) if (fread(&a[m], LEN, 1, fp) == 1) m++; if (m == 0) { printf("\t\t 文件中沒有記錄"); fclose(fp); return; } printf("\t\t 請輸入要修改的聯系人的電話號碼:"); scanf("%d", &nmb); for (i = 0; i < m; i++) if (nmb == a[i].num) //檢索是否有要相應的聯系人 { printf("\t\t 找到該名聯系人,將修改他的信息!\n"); printf("\t\t 電話:"); scanf("%d", &a[i].num); printf("\t\t 姓名:"); scanf("%s", &a[i].name); printf("\t\t 工作單位:"); scanf("%s", &a[i].job); printf("\t\t 住址:"); scanf("%s", &a[i].address); printf("\t\t 修改成功!"); if ((fp = fopen("data.txt", "w+")) == NULL) { printf("\t\t 不能打開"); return; } for (j = 0; j < m; j++) //寫入新的信息 if (fwrite(&a[j], LEN, 1, fp) != 1) { printf("\t\t 不能打開"); getch(); } fclose(fp); break; } if (i == m) printf("\t\t 沒有找到該名聯系人"); } void search() { show(); FILE* fp; int nmb, i, m = 0; if ((fp = fopen("data.txt", "r+")) == NULL) { fclose(fp); printf("\n\t\t 文件不存在!\n"); return; } while (!feof(fp)) { if (fread(&a[m], LEN, 1, fp) == 1) m++; } if (m == 0) { fclose(fp); printf("\n\t\t 文件沒有記錄!\n"); return; } printf("\n\t\t 請輸入聯系人的電話號碼!:"); scanf("%d", &nmb); for (i = 0; i < m; i++) if (nmb == a[i].num) { printf("\t\t 電話 姓名 工作單位 住址 \n"); printf(FORMAT, DATA); break; } if (i == m) printf("\t\t 沒有找到記錄!\n"); fclose(fp); } void show() { FILE* fp; int i, m = 0; if ((fp = fopen("data.txt", "r+")) == NULL) { printf("\n\t\t 文件不存在\n"); return; } while (!feof(fp)) { if (fread(&a[m], LEN, 1, fp) == 1) m++; } fclose(fp); printf("\t\t ---------------------------------------------------------------------------\n"); printf("\t\t || 電話 姓名 工作單位 住址 ||\n"); for (i = 0; i < m; i++) { printf(FORMAT, DATA); } printf("\t\t ---------------------------------------------------------------------------\n"); } void insert() { show(); FILE* fp; int i, j, k, m = 0, nmb; if ((fp = fopen("data.txt", "r+")) == NULL) { printf("\t\t 文件不存在! \n"); return; } while (!feof(fp)) if (fread(&a[m], LEN, 1, fp) == 1) m++; if (m == 0) { printf("\t\t 文件中沒有記錄!\n"); fclose(fp); return; } printf("\t\t 請輸入要插入哪個號碼的位置之後:"); scanf("%d", &nmb); for (i = 0; i < m; i++) if (nmb == a[i].num) break; if (m == i) { printf("\t\t 沒有找到改電話號碼"); fclose(fp); return; } for (j = m - 1; j > i; j--) a[j + 1] = a[j]; printf("\t\t 請輸入要插入的通訊錄信息:\n"); printf("\t\t 電話:"); scanf("%d", &nmb); for (k = 0; k < m; k++) if (a[k].num == nmb) { printf("\t\t 電話已經存在,請按任意鍵繼續!"); getch(); fclose(fp); return; } a[i + 1].num = nmb; printf("\t\t 姓名:"); scanf("%s", &a[i + 1].name); printf("\t\t 工作:"); scanf("%s", &a[i + 1].job); printf("\t\t 地址:"); scanf("%s", &a[i + 1].address); printf("\t\t 插入成功,請輸入任意鍵返回主界面!"); if ((fp = fopen("data.txt", "w+")) == NULL) { printf("\t\t 不能打開!"); return; } for (k = 0; k <= m; k++) if (fwrite(&a[k], LEN, 1, fp) != 1) { printf("\t\t 不能保存!"); getch(); } fclose(fp); } void order() { FILE* fp; struct list b; int i = 0, j = 0, m = 0; printf("\n"); if ((fp = fopen("data.txt", "r+")) == NULL) { printf("\t\t 文件不存在\n"); return; } while (!feof(fp)) if (fread(&a[m], LEN, 1, fp) == 1) m++; fclose(fp); if (m == 0) { printf("\t\t 文件中沒有記錄\n"); return; } for (i = 0; i < m - 1; i++) for (j = i + 1; j < m; j++) if (a[i].num < a[j].num) { b = a[i]; a[i] = a[j]; a[j] = b; } if ((fp = fopen("data.txt", "w+")) == NULL) { printf("\t\t 文件不存在!\n"); return; } for (i = 0; i < m; i++) if (fwrite(&a[i], LEN, 1, fp) != 1) { printf("\t\t 不能保存文件!\n"); getch(); } fclose(fp); show(); printf("\t\t 保存成功\n"); } void total() { FILE* fp; int m = 0; if ((fp = fopen("data.txt", "r+")) == NULL) { printf("\t\t 文件不存在!\n"); return; } while (!feof(fp)) if (fread(&a[m], LEN, 1, fp) == 1) m++; if (m == 0) { printf("\n\t\t 沒有聯系人!\n"); fclose(fp); return; } fclose(fp); show(); printf("\t\t 您一共擁有 %d 位聯系人", m); }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。