课题3:通讯录管理系统
设计内容:
设计一个通讯录管理系统,以实现以下功能:信息添加、查询、修改、删除、排序等功能。
设计要求:
1) 每条信息至包含 :姓名、电话、工作单位等信息
2) 作为一个完整的系统,应具有友好的界面和较强的容错能力
预览:


代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define LEN sizeof(struct list)
#define DATA a[i].num,a[i].name,a[i].job,a[i].address
#define FORMAT "\t\t  ||    %-12d %-12s %-19s %-20s ||\n"
void in();
void menu();
void search();
void del();
void show();
void modify();
void insert();
void order();
void total();
struct list
{int num;       //号码char name[15];  //姓名char job[30];   //工作单位char address[30]; //地址
};
struct list a[50];void main()
{system("color 5e\n");menu();int n;scanf("%d", &n);while (n){switch (n){case 1:in();        break;case 2:search();  break;case 3:del();     break;case 4:modify();  break;case 5:insert();  break;case 6:order();       break;case 7:total();       break;case 8:show();        break;default:break;}getch();menu();//执行完后显示菜单 scanf("%d", &n);}}void menu()
{system("cls");printf("\n\n\n");printf("\t\t\t\t\t**************************************\n");printf("\t\t\t\t\t************通讯录管理系统************\n");printf("\t\t\t\t\t======================================\n");printf("\t\t\t\t\t*          1.录入联系人信息          *\n");printf("\t\t\t\t\t*          2.查找联系人信息          *\n");printf("\t\t\t\t\t*          3.删除联系人信息          *\n");printf("\t\t\t\t\t*          4.修改联系人信息          *\n");printf("\t\t\t\t\t*          5.插入联系人信息          *\n");printf("\t\t\t\t\t*          6.排序                    *\n");printf("\t\t\t\t\t*          7.统计联系人总数          *\n");printf("\t\t\t\t\t*          8.显示所有联系人          *\n");printf("\t\t\t\t\t*          0.退出系统                *\n");printf("\t\t\t\t\t======================================\n");printf("\t\t\t\t\t**************************************\n");printf("\t\t\t\t\t          请选择(0-8):");
}void in()
{int i, m = 0;char ch[2];FILE* fp;if ((fp = fopen("data.txt", "a+")) == NULL){printf("\t\t  文件不存在! \n");return;}while (!feof(fp)){if (fread(&a[m], LEN, 1, fp) == 1)m++;}fclose(fp);if (m == 0){printf("\t\t  文件中没有记录!\n");}else{show();}if ((fp = fopen("data.txt", "a+")) == NULL){printf("\t\t  文件不存在!\n");return;}printf("\t\t  是否输入联系人信息(y/n):");scanf("%s", ch);while (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0){printf("\t\t  电话:");scanf("%d", &a[m].num);for (i = 0; i < m; i++){if (a[i].num == a[m].num){printf("\t\t  此用户已经存在了,按任意键继续!");getch();fclose(fp);return;}}printf("\t\t  姓名:");scanf("%s", &a[m].name);printf("\t\t  工作单位:");scanf("%s", &a[m].job);printf("\t\t  地址:");scanf("%s", &a[m].address);if (fwrite(&a[m], LEN, 1, fp) != 1){printf("\t\t  不能保存");getch();}else{printf("\t\t  %s 已被保存!\n", a[m].name);m++;}printf("\t\t  继续?(y/n):");scanf("%s", ch);}fclose(fp);printf("\t\t  结束录入!\n");
}
void del()
{show();FILE* fp;int nmb, i, j, m = 0;int t = 1;      //判断是否正常结束 char ch[2];if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t  \n文件不存在\n");return;}while (!feof(fp)){if (fread(&a[m], LEN, 1, fp) == 1)m++;}fclose(fp);if (m == 0){printf("\t\t  \n文件没有记录!\n");return;}printf("\t\t  输入要删除的联系人的电话号码:");scanf("%d", &nmb);for (i = 0; i < m; i++)if (nmb == a[i].num){printf("\t\t  找到这条记录是否删除(y/n):");scanf("%s", &ch);if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0){for (j = i + 1; j < m; j++)a[j - 1] = a[j];m--;if ((fp = fopen("data.txt", "w+")) == NULL){printf("\t\t  文件不存在\n");return;}for (j = 0; j < m; j++){if (fwrite(&a[j], LEN, 1, fp) != 1){printf("\t\t  无法写入文件!删除失败!");getch();}}fclose(fp);printf("\t\t  删除成功");}else{fclose(fp);printf("\t\t  找到了记录选择不删除");}t = 0;   //标志找到该联系人 break;}if (t)printf("\t\t  没有找到该联系人!\n");
}void modify()
{show();FILE* fp;int i = 0, j = 0, m = 0, nmb;if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t  文件不存在\n");return;}while (!feof(fp))if (fread(&a[m], LEN, 1, fp) == 1)m++;if (m == 0){printf("\t\t  文件中没有记录");fclose(fp);return;}printf("\t\t  请输入要修改的联系人的电话号码:");scanf("%d", &nmb);for (i = 0; i < m; i++)if (nmb == a[i].num) //检索是否有要相应的联系人{printf("\t\t  找到该名联系人,将修改他的信息!\n");printf("\t\t  电话:");scanf("%d", &a[i].num);printf("\t\t  姓名:");scanf("%s", &a[i].name);printf("\t\t  工作单位:");scanf("%s", &a[i].job);printf("\t\t  住址:");scanf("%s", &a[i].address);printf("\t\t  修改成功!");if ((fp = fopen("data.txt", "w+")) == NULL){printf("\t\t  不能打开");return;}for (j = 0; j < m; j++)     //写入新的信息if (fwrite(&a[j], LEN, 1, fp) != 1){printf("\t\t  不能打开");getch();}fclose(fp);break;}if (i == m)printf("\t\t  没有找到该名联系人");
}
void search()
{show();FILE* fp;int nmb, i, m = 0;if ((fp = fopen("data.txt", "r+")) == NULL){fclose(fp);printf("\n\t\t  文件不存在!\n");return;}while (!feof(fp)){if (fread(&a[m], LEN, 1, fp) == 1)m++;}if (m == 0){fclose(fp);printf("\n\t\t  文件没有记录!\n");return;}printf("\n\t\t  请输入联系人的电话号码!:");scanf("%d", &nmb);for (i = 0; i < m; i++)if (nmb == a[i].num){printf("\t\t        电话         姓名         工作单位            住址                   \n");printf(FORMAT, DATA);break;}if (i == m)printf("\t\t  没有找到记录!\n");fclose(fp);
}
void show()
{FILE* fp;int i, m = 0;if ((fp = fopen("data.txt", "r+")) == NULL){printf("\n\t\t  文件不存在\n");return;}while (!feof(fp)){if (fread(&a[m], LEN, 1, fp) == 1)m++;}fclose(fp);printf("\t\t  ---------------------------------------------------------------------------\n");printf("\t\t  ||    电话         姓名         工作单位            住址                 ||\n");for (i = 0; i < m; i++){printf(FORMAT, DATA);}printf("\t\t  ---------------------------------------------------------------------------\n");
}
void insert()
{show();FILE* fp;int i, j, k, m = 0, nmb;if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t  文件不存在! \n");return;}while (!feof(fp))if (fread(&a[m], LEN, 1, fp) == 1)m++;if (m == 0){printf("\t\t  文件中没有记录!\n");fclose(fp);return;}printf("\t\t  请输入要插入哪个号码的位置之后:");scanf("%d", &nmb);for (i = 0; i < m; i++)if (nmb == a[i].num)break;if (m == i){printf("\t\t  没有找到改电话号码");fclose(fp);return;}for (j = m - 1; j > i; j--)a[j + 1] = a[j];printf("\t\t  请输入要插入的通讯录信息:\n");printf("\t\t  电话:");scanf("%d", &nmb);for (k = 0; k < m; k++)if (a[k].num == nmb){printf("\t\t  电话已经存在,请按任意键继续!");getch();fclose(fp);return;}a[i + 1].num = nmb;printf("\t\t  姓名:");scanf("%s", &a[i + 1].name);printf("\t\t  工作:");scanf("%s", &a[i + 1].job);printf("\t\t  地址:");scanf("%s", &a[i + 1].address);printf("\t\t  插入成功,请输入任意键返回主界面!");if ((fp = fopen("data.txt", "w+")) == NULL){printf("\t\t  不能打开!");return;}for (k = 0; k <= m; k++)if (fwrite(&a[k], LEN, 1, fp) != 1){printf("\t\t  不能保存!");getch();}fclose(fp);
}
void order()
{FILE* fp;struct list b;int i = 0, j = 0, m = 0;printf("\n");if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t  文件不存在\n");return;}while (!feof(fp))if (fread(&a[m], LEN, 1, fp) == 1)m++;fclose(fp);if (m == 0){printf("\t\t  文件中没有记录\n");return;}for (i = 0; i < m - 1; i++)for (j = i + 1; j < m; j++)if (a[i].num < a[j].num){b = a[i]; a[i] = a[j]; a[j] = b;}if ((fp = fopen("data.txt", "w+")) == NULL){printf("\t\t  文件不存在!\n");return;}for (i = 0; i < m; i++)if (fwrite(&a[i], LEN, 1, fp) != 1){printf("\t\t  不能保存文件!\n");getch();}fclose(fp);show();printf("\t\t  保存成功\n");
}
void total()
{FILE* fp;int m = 0;if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t  文件不存在!\n");return;}while (!feof(fp))if (fread(&a[m], LEN, 1, fp) == 1)m++;if (m == 0){printf("\n\t\t  没有联系人!\n");fclose(fp);return;}fclose(fp);show();printf("\t\t  您一共拥有 %d 位联系人", m);
}

C语言通讯录管理系统(含完整代码)相关推荐

  1. 基于B树的图书管理系统(C语言)(含完整代码)

    目录: 一.实现的设计要求 1.基本要求 2.额外选做要求 二.项目文件管理 三.完整代码 1.实现的接口 2.头文件 BTreeBook.h 全部代码 3.源文件 BTreeBook.cpp 全部代 ...

  2. c语言车票管理系统(附完整代码和文档)

    作业要求 1.能够录入班次信息,可不定时增加数据. 2.浏览信息,显示所有班次状态(如当前时间大于发车时间,显示"此班已发出"). 3.查询路线(1.班次号查询.2.终点站查询). ...

  3. C语言--学生管理系统--(完整代码)

    本系统分成了三个文件,main.c student.c student.h 功能: 实现对班级成员的增加.删除.修改.遍历.根据成绩排序. 增加 会检查,现在班级已有的人数,班级是否已满(没有学号重复 ...

  4. 校运动会c语言程序编写,校运动会管理系统报告C语言(含完整代码)

    <校运动会管理系统报告C语言(含完整代码)>由会员分享,可在线阅读,更多相关<校运动会管理系统报告C语言(含完整代码)(20页珍藏版)>请在人人文库网上搜索. 1.目 录陈一. ...

  5. 双向最大匹配算法(含完整代码实现,ui界面)正向最大匹配算法,逆向最大匹配算法

    双向最大匹配算法(含完整代码实现,ui界面)正向最大匹配算法,逆向最大匹配算法 一.理论描述 中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词 ...

  6. 模拟图书管理系统的完整代码

    模拟图书管理系统的完整代码: def readBook():with open(r"books.txt","r") as f:jsondata=f.read() ...

  7. c语言程序2000行代码,C语言教务管理系统2000行代码

    <C语言教务管理系统2000行代码>由会员分享,可在线阅读,更多相关<C语言教务管理系统2000行代码(56页珍藏版)>请在读根文库上搜索. 1.C语言教务管理系统一.程序结构 ...

  8. 软件工程c语言2000行代码,C语言教务管理系统(2000行代码)

    <C语言教务管理系统(2000行代码)>由会员分享,可在线阅读,更多相关<C语言教务管理系统(2000行代码)(56页珍藏版)>请在人人文库网上搜索. 1.C语言教务管理系统一 ...

  9. 机器学习图像分割——模型评价总结(含完整代码)

    机器学习&图像分割--模型评价总结(含完整代码) 模型评价的方法指标有很多,如:PR-curve,MAE,ROC,Precision,Recall,AUC,AP,mAP,DSI,VOE,RVD ...

最新文章

  1. 大数据技术之Hadoop3.1.2版本完全分布式部署搭建
  2. 读《scikiit-learn机器学习》黄永昌第五章
  3. 2020阿里云线上峰会预告 | 凌云时刻
  4. whisper客服源码_以太坊源码分析—Whisper
  5. 胡子决定编程语言运势[转载]
  6. 2020年拼多多校招面试题及答案-最全最新-持续更新中(2)
  7. java jdk安装失败_图文解答Java JDK9.0安装失败的原因,附带处理方法
  8. 嵌入式开发<串口调试工具>
  9. 如何使用WPS从正文开始页码为1,而不是从目录开始?
  10. DWD层 (业务数据 二)
  11. lqc_基于IP地址,端口的访问控制
  12. 7-2 公路村村通 迪杰斯特拉(dijkstra)算法
  13. shell脚本计时方法
  14. HTML5七夕情人节表白网页(流星雨3D旋转相册) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码
  15. usee2008免费网络电视最新版下载
  16. LeetCode-整数反转【解决Integer的OverFlow】
  17. 压力管道级别如何划分
  18. redux的使用教程
  19. linux机器的CPU过热
  20. L1-051. 打折 C++

热门文章

  1. java 算法之找出数组中第二大的数
  2. 互联网大厂Java岗考点(阿里+百度+腾讯+字节跳动+美团+京东)
  3. python怎么连接前端_前端调用Python后端API的小贴士
  4. 应对CC攻击的自动防御系统——原理与实现
  5. 2020年百度之星·程序设计大赛-初赛一
  6. Maven3 Archetype ArtifactId大全及简单说明
  7. 对接腾讯云及时通讯总结
  8. C语言判断素数的两种方法
  9. 三大框架-Spring
  10. 计算机是怎样运行的:从根儿上理解计算机