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。

推薦閱讀: