首页 > 编程语言 > C语言实现简单通讯录管理系统
2021
11-19

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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。

编程技巧