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

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

击败不等于击倒,跌倒了,爬起来,想一想,为什么跌倒了,

C语言实现简单通讯录管理系统

相关文章:

你感兴趣的文章:

标签云: