C语言实现简单通讯录管理系统
作者:晚安小点点
这篇文章主要为大家详细介绍了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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。