C語言實現簡單通訊錄管理系統
C語言實現的通訊錄管理系統,供大傢參考,具體內容如下
設計一個學生通信錄,學生通迅錄數據信息構成內容可自行設計(如:學號、姓名、電話號碼、所在班級、寢室地址等),通信錄數據類型定義為結構體類型。
主要實現功能包括:
(1)創建學生通訊錄
(2)修改學生通訊錄
(3)增刪學生通訊錄
(4)能夠按多種方式進行查詢(如:①按學號查詢;②按所在班級查詢)
源代碼:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<windows.h> #include<time.h> typedef struct people { char name[10]; //姓名 char IDnumber[20];//學號 char phone[15]; // 手機號 int classNum; //班級 char roomID[10]; //寢室 }people; //定義別名people //函數模塊定義 void UI_show();//進入界面 UI 實現 void NEW_in(); //新學生信息添加 void OLD_adjust();//修改學生信息 void OLD_delete(); //刪除學生信息 void OLD_find(); //學生信息查找 void OLD_findByNum();//通過學號查找 void OLD_findByName();//通過姓名查找 //各種UI界面顯示 void UI_show1(); void UI_show2(); void UI_show3(); void UI_show4(); void UI_show5(); void UI_show6(); //======================================================================= //進入界面 UI 實現 void UI_show() { int i; //-------------------------------------------------------------------- printf("\n"); for (i = 0; i < 75; i++) //數字用來 控制 上方 = 數量 { printf("="); } printf("\n"); for (i = 0; i < 30; i++) { printf(" "); } printf("歡迎進入通訊錄管理系統"); for (i = 0; i < 30; i++) { printf(" "); } printf("\n"); for (i = 0; i < 75; i++) { printf("="); } //實現上方歡迎界面 //-------------------------------------------------------------------- printf("\n\n\n"); for (i = 0; i < 33; i++) //以下實現 菜單界面功能選擇 { printf(" "); } printf("請選擇以下功能:\n"); for (i = 0; i < 33; i++) { printf(" "); } printf("1、添加學生通訊錄\n"); for (i = 0; i < 33; i++) { printf(" "); } printf("2、修改學生通訊錄\n"); for (i = 0; i < 33; i++) { printf(" "); } printf("3、刪除學生通訊錄\n"); for (i = 0; i < 33; i++) { printf(" "); } printf("4、查找通訊錄信息\n"); for (i = 0; i < 33; i++) { printf(" "); } printf("5、退出系統"); printf("\n\n"); for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n\n"); for (i = 0; i < 33; i++) { printf(" "); } printf("請選擇:"); //實現界面UI } //======================================================================= //添加學生到通訊錄 void NEW_in() { FILE* fp = NULL; //定義文件指針 fp = fopen("output.txt", "a");//以追加的方式打開 文件 if (fp == NULL) { printf("\n出現未知錯誤!按任意鍵退出.....\n"); exit(0); } int classNum; //班級 char name[10]; //姓名 char IDnumber[20];//學號 char phone[15]; // 手機號 char roomID[10]; //寢室 char ch; //鍵盤輸入選擇 system("cls"); //清屏 UI_show1(); // 界面顯示1; while (1) //進入循環體,直到接收到信息 跳出循環 { printf("請輸入姓名:"); scanf("%s", name); printf("請輸入學號:"); scanf("%s", IDnumber); printf("請輸入聯系電話:"); scanf("%s", phone); printf("請輸入寢室:"); scanf("%s", roomID); printf("請輸入班級:"); scanf("%d", &classNum); //緩沖區保存到文件 fprintf(fp, "%s %s %s %s %d \n", name, IDnumber, phone, roomID, classNum); do // 接收字符 判斷是否 繼續錄入用戶信息 { printf("是否繼續錄入?請選擇(Y/N)"); getchar(); //接收 回車鍵 scanf("%c", &ch); } while ((ch != 'Y') && (ch != 'y') && (ch != 'n') && (ch != 'N')); if ((ch == 'n') || (ch == 'N')) { fclose(fp); //如果用戶 輸入N 則保存 並退出程序 break; } } } //========================================================================= //修改學生通訊錄信息 void OLD_adjust() // 先將硬盤文件中數據 保存到 內存緩沖區中,找到要修改的用戶信息,修改後 重新寫入文檔 { system("cls"); //清屏 people peopleI[100];//建立結構體 數組 int number = 0, sign = 0, i = 1, a, test; char name[10], ch; int classNum; //班級 char IDnumber[20];//學號 char phone[15]; // 手機號 char roomID[10]; //寢室 FILE* fp = NULL; //文件指針 UI_show2(); //UI調用 fp = fopen("output.txt", "r+"); //以讀寫的方式打開文件 if (fp == NULL) // 錯誤檢測 { printf("文件打開失敗!請先添加用戶信息!\n"); return; } printf("請輸入要修改的學生姓名:"); scanf("%s", name); while (!feof(fp)) //從文件中讀取 { fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum); i++; //記錄行的個數 } printf("\n"); i--; test = i; //保存 數據的行數 for ( ; i >= 0; i--) { a = strcmp(name, peopleI[i].name); //比較 輸入的用戶名 和文件中的用戶名 if (a == 0) { sign = 1; //判斷 賦值1 代表找到 該數據 printf("姓名%s,學號%s,聯系電話%s,寢室%s,班級%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum); do // 友情提示 選擇 { printf("你確定要修改該用戶的信息嗎?(Y/N):"); getchar(); scanf("%c", &ch); } while ((ch != 'Y') && (ch != 'y') && (ch != 'n') && (ch != 'N')); if ((ch == 'y') || (ch == 'Y')) //如果 選y則 錄入信息 { printf("請輸入姓名:"); scanf("%s", name); printf("請輸入學號:"); scanf("%s", IDnumber); printf("請輸入聯系電話:"); scanf("%s", phone); printf("請輸入寢室:"); scanf("%s", roomID); printf("請輸入班級:"); scanf("%d", &classNum); printf("修改成功!"); fclose(fp); //關閉文件 fp = fopen("output.txt", "w"); for (i = 1; i < test; i++) //將內存中 修改過的信息 重新寫入文件 { fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum); } fclose(fp); break; //跳出 for循環 } else //假如不修改信息 再次寫入文件 { fclose(fp); break; } } } if (sign == 0) { printf("沒找到該用戶!\n請按任意鍵繼續...."); getchar(); } } //=============================================================================== //刪除住戶信息的功能 void OLD_delete() { // 先將硬盤文件中數據 保存到 內存緩沖區中,找到要刪除的用戶信息,刪除後 重新寫入文檔 system("cls"); //清屏 people peopleI[10000];//建立結構體 數組 int number = 0, len = 0, sign = 0, i = 1, a, test, j; char name[10], ch; FILE* fp = NULL; //文件指針 UI_show3(); fp = fopen("output.txt", "r"); if (fp == NULL) { printf("未找到文件!"); return; //返回 main函數 } printf("請輸入要刪除的住戶姓名:"); scanf("%s", name); while (!feof(fp)) //從文件中讀取,文件中數據轉移到內存數組中區 { //!feof(fp)隻要文件不到末尾 就一直讀下去 fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum); i++; } ///------------------------------------ fclose(fp); //保存文件 printf("\n"); i--; test = i; //保存 行數 for (; i >= 0; i--) { a = strcmp(name, peopleI[i].name); //比較 輸入的用戶名 和文件中的用戶名 if (a == 0) //找到相應位置 { sign = 1; // 標志 是否找到 數據 printf("姓名%s,學號%s,聯系電話%s,寢室%s,班級%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum); //顯示出要修改的信息 do { printf("你確定要刪除該用戶的信息嗎?(Y/N):"); getchar(); scanf("%c", &ch); } while ((ch != 'Y') && (ch != 'y') && (ch != 'n') && (ch != 'N')); if ((ch == 'y') || (ch == 'Y')) //假如 確定 { printf("刪除成功!"); fp = fopen("output.txt", "w"); //以寫的方式打開,源文件被清除 for (j = 1; j < test; j++) //重新寫入文件 { if (j == i) // 不寫入 第i個數據 { //操作為空 } else //否則 寫入文件 fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum); } fclose(fp); //關閉 保存緩沖區 文件 } else //假如不修改信息 再次寫入文件 { fp = fopen("output.txt", "w"); //以寫的方式打開,源文件被清除 for (i = 1; i < test; i++) //將內存中 修改過的信息 重新寫入文件 { fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum); } fclose(fp); } } } if (sign == 0) //判斷為未找到用戶 { printf("沒找到該用戶!\n請按回車鍵返回菜單選項....."); getchar(); } } //======================================================================================== //查詢通訊錄信息; void OLD_find(){ system("cls"); int temp; UI_show5(); printf("1.按學號查詢通訊錄信息\t2.按姓名查詢通訊錄信息\n"); printf("請選擇……"); scanf("%d",&temp); switch(temp){ case 1: system("cls"); OLD_findByNum(); break; case 2: system("cls"); OLD_findByName(); break; default:printf("\n\t\t\t輸入錯誤! 按回車鍵返回重新選擇"); } _getch(); system("cls"); } //=================================================================================== //按照學號查詢通訊錄信息 void OLD_findByNum() // 先將硬盤文件中數據 保存到 內存緩沖區中,找到要用戶信息,修改後 重新寫入文檔 { system("cls"); //清屏 people peopleI[100];//建立結構體 數組 int number = 0, sign = 0, i = 1, test; int p; char IDnumber[20]; FILE* fp = NULL; //文件指針 void UI_show5(); //UI調用 fp = fopen("output.txt", "r"); //以讀寫的方式打開文件 if (fp == NULL) // 錯誤檢測 { printf("文件打開失敗!請先添加用戶信息!\n"); return; // exit(0); } printf("請輸入要查詢的學號:"); scanf("%s",IDnumber); while (!feof(fp)) //從文件中讀取 { fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum); i++; //記錄行的個數 } printf("\n"); i--; test = i; //保存 數據的行數 for (; i >= 0; i--) { //比較 輸入的學號 和文件中的學號 p=strcmp(IDnumber,peopleI[i].IDnumber); if (p==0) { sign = 1; //判斷 賦值1 代表找到 該數據 printf("姓名%s,學號%s,聯系電話%s,寢室%s,班級%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum); printf("\n"); fclose(fp); //關閉文件 } else //假如meiyou信息 再次寫入文件 { fclose(fp); } } if (sign == 0) { printf("沒找到該學生信息!\n請按任意鍵繼續...."); getchar(); } } //=================================================================================== //按照姓名查詢通訊錄信息 void OLD_findByName() // 先將硬盤文件中數據 保存到 內存緩沖區中,找到要用戶信息,修改後 重新寫入文檔 { system("cls"); //清屏 people peopleI[100];//建立結構體 數組 int number = 0, sign = 0, i = 1, test; int p; char name[10]; FILE* fp = NULL; //文件指針 void UI_show6(); //UI調用 fp = fopen("output.txt", "r"); //以讀寫的方式打開文件 if (fp == NULL) // 錯誤檢測 { printf("文件打開失敗!請先添加用戶信息!\n"); return; // exit(0); } printf("請輸入要查詢的姓名:"); scanf("%s",name); while (!feof(fp)) //從文件中讀取 { fscanf(fp, "%s %s %s %s %d", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum); i++; //記錄行的個數 } printf("\n"); i--; test = i; //保存 數據的行數 for (; i >= 0; i--) { //比較 輸入的姓名 和文件中的姓名 p=strcmp(name,peopleI[i].name); if (p==0) { sign = 1; //判斷 賦值1 代表找到 該數據 printf("姓名%s,學號%s,聯系電話%s,寢室%s,班級%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum); printf("\n"); fclose(fp); //關閉文件 } else //假如meiyou信息 再次寫入文件 { fclose(fp); } } if (sign == 0) { printf("沒找到該學生信息!\n請按任意鍵繼續...."); getchar(); } } //=================================================================================== //判斷文件是否為空 int NEW_oj() { FILE* fp; fp = fopen("output.txt", " r"); if (fp == NULL) { fp = fopen("output.txt", " w"); } if (fgetc(fp) == EOF) { fclose(fp); return 0; } else { return 1; fclose(fp); } } //=================================================================================== // 各種UI界面顯示 void UI_show1() { int i; for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); for (i = 0; i < 15; i++) { printf(" "); } printf("你正在添加通訊錄學生信息,請根據提示輸入信息。\n"); for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); } void UI_show2() { int i; for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); for (i = 0; i < 15; i++) { printf(" "); } printf("你正在修改通訊錄學生信息,請根據提示輸入信息。\n"); for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); } void UI_show3() { int i; for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); for (i = 0; i < 15; i++) { printf(" "); } printf("你正在刪除通訊錄學生信息,請根據提示輸入信息。\n"); for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); } void UI_show4() { int i; for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); for (i = 0; i < 15; i++) { printf(" "); } printf("你正在使用通訊錄查詢功能,請根據提示輸入信息。\n"); for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); } void UI_show5() { int i; for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); for (i = 0; i < 15; i++) { printf(" "); } printf("你正在使用按學號查找功能。\n"); for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); } void UI_show6() { int i; for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); for (i = 0; i < 15; i++) { printf(" "); } printf("你正在使用按姓名查找功能。\n"); for (i = 0; i < 75; i++) //數字 控制 上方 = 數量 { printf("="); } printf("\n"); } int main() { int pan, p; while (1) { p = NEW_oj();//判斷用戶文件是否為空 if (p == 0) { printf("\n\n查詢文件中未存在學生信息,請先進行信息錄入!!!"); printf("\n請按回車鍵,進入信息添加系統....."); getchar(); NEW_in(); } system("cls"); //清屏 UI_show(); //調用 界面UI 顯示 scanf("%d", &pan); switch (pan) { case 1:NEW_in(); break;//通訊錄學生信息添加 case 2:OLD_adjust(); break;//通訊錄學生信息修改 case 3:OLD_delete(); break;//通訊錄學生信息刪除 case 4:OLD_find(); break;//查詢通訊錄學生信息 case 5:exit(0); break;//退出系統 default:printf("\n\t\t\t輸入錯誤! 按回車鍵返回重新選擇");//按鍵錯誤反饋 } _getch(); system("cls");//清屏 } system("pause"); return 0; }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。