/*
* 对通讯录进行插入、删除、排序、查找、单个显示功能
*/#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>int n;typedef struct _Address_List
{char name[30];            //名字char work[30];            //职业char handset[20];        //手机号码char email[30];            //电子邮件char address[30];        //地址struct _Address_List *next;
}address_List;
#define LEN sizeof(address_List)address_List *Release(address_List *head);//创建一个通讯录
address_List *Create(void)
{address_List *head,*p1,*p2;char name[30];n = 0;p1 = (address_List *)malloc(LEN);p2 = p1;printf("请输入通讯录的内容!\n姓名输入为0时表示创建完毕!\n");printf("请输入姓名:");gets(name);if(strcmp(name,"0")!=0){strcpy(p1->name,name);printf("请输入职业:");gets(p1->work);printf("请输入手机:");gets(p1->handset);printf("请输入电子邮件:");gets(p1->email);printf("请输入通讯地址:");gets(p1->address);head = NULL;while(1){n = n+1;if(n == 1){head = p1;}else{p2->next = p1;}p2 = p1;printf("请输入姓名:");gets(name);if(strcmp(name,"0") == 0){break;}else{p1 = (address_List *)malloc(LEN);strcpy(p1->name,name);printf("请输入职业:");gets(p1->work);printf("请输入手机:");gets(p1->handset);printf("请输入电子邮件:");gets(p1->email);printf("请输入通讯地址:");gets(p1->address);}}p2->next = NULL;return head;}else{return 0;}
}//打印整个通讯录
void print(address_List *head)
{address_List *p;if(head != NULL){p = head;printf("本通讯录现在共有%d人;\n",n);printf("---姓名---------职业----------手机--------Email-------------通讯地址\n");printf("====================================================================\n");do{printf("=%s\t\t",p->name);printf("=%s\t\t",p->work);printf("=%s\t\t",p->handset);printf("=%s\t\t",p->email);printf("=%s\n",p->address);p = p->next;}while(p != NULL);printf("==================================================================\n");}else{printf("通讯录为空,无法输出!\n");}
}//在通讯录插入
address_List *insert(address_List *head)
{address_List *p0,*p1,*p2;char name[20];p1 = head;printf("请输入增加的内容:\n");printf("请输入姓名:");gets(name);if(strcpy(name,"0") == 0){printf("姓名不能为0,增加失败!\n");return head;}else{p0 = (address_List *)malloc(LEN);strcpy(p0->name,name);printf("请输入职业:");gets(p1->work);printf("请输入手机:");gets(p1->handset);printf("请输入电子邮件:");gets(p1->email);printf("请输入通讯地址:");gets(p1->address);n = n+1;if(head == NULL){head = p0;p0->next = NULL;return head;}else{while(strcmp(p0->name,p1->name) > 0 && (p1->next != NULL)){p2 = p1;p1 = p1->next;}if(strcmp(p0->name,p1->name) <0 || strcmp(p0->name,p1->name) == 0){if(head == p1){head = p0;}else{p2->next = p0;}p0->next = p1;}else{p1->next = p0;p0->next = NULL;}return head;}}
}//删除通讯录中某个人
address_List *delete_txl(address_List *head)
{address_List *p,*q;char name[30];if(head == NULL){printf("通讯录为空,无法删除!\n");return head;}p = head;printf("请输入需要删除的人姓名:");gets(name);if(strcmp(head->name,name) == 0){head = head->next;free(p);printf("删除操作成功!\n");return head;}else{q = head;p = head->next;while(p != NULL){if(strcmp(p->name,name) == 0){q->next = p->next;free(p);printf("删除操作成功!\n");return head;}p = p->next;q = q->next;}}
}//显示通讯录中某个人
address_List *display(address_List *head)
{address_List *p1,*p2;char name[30];int m;if(head == NULL){printf("通讯录为空,无法显示!\n");return head;}p1 = head;m = 0;printf("请输入要显示人的姓名:");gets(name);while(p1 != NULL){while(strcmp(p1->name,name) != 0 && p1->next != NULL){p2 = p1;p1 = p1->next;}if(strcmp(p1->name,name) == 0){m++;printf("%s的通讯内容如下:\n",name);printf("---姓名---------职业----------手机--------Email-------------通讯地址\n");printf("====================================================================\n");printf("=%s=\t\t",p1->name);printf("=%s=\t\t",p1->work);printf("=%s=\t\t",p1->handset);printf("=%s=\t\t",p1->email);printf("=%s=\n",p1->address);printf("====================================================================\n");}p1 = p1->next;}if(m == 0){printf("此人不在通讯录中!\n");}return head;
}//对通讯录进行排序操作
address_List *Sort(address_List *head)
{address_List *p1,*p2;int i,j;typedef struct _Address_List1{char name[30];            //名字char work[30];            //职业char handset[20];        //手机号码char email[30];            //电子邮件char address[30];        //地址
    }address_List1;address_List1 Sort[200];address_List1 temp;if(head == NULL){printf("通讯录为空,无法排序!\n");return head;}p1 = head;for(i = 0;i < n,p1 != NULL; i++){strcpy(Sort[i].name,p1->name);strcpy(Sort[i].work,p1->work);strcpy(Sort[i].handset,p1->handset);strcpy(Sort[i].email,p1->email);strcpy(Sort[i].address,p1->address);p2 = p1;p1 = p1->next;}head = Release(head);for(j = 0; j < n-1; j++){for(i = j+1; i < n; i++){if(strcmp(Sort[i].name,Sort[j].name) < 0){Sort[i] = temp;temp = Sort[j];Sort[j] = temp;}}}p1 = (address_List *)malloc(LEN);p2 = p1;strcpy(p1->name,Sort[0].name);strcpy(p1->work,Sort[0].work);strcpy(p1->handset,Sort[0].handset);strcpy(p1->email,Sort[0].email);strcpy(p1->address,Sort[0].address);head = p1;for(i = 1; i < n; i++){p1 = (address_List *)malloc(LEN);strcpy(p1->name,Sort[i].name);strcpy(p1->work,Sort[i].work);strcpy(p1->handset,Sort[i].handset);strcpy(p1->email,Sort[i].email);strcpy(p1->address,Sort[i].address);p2->next = p1;p2 = p1;}p2->next = NULL;printf("按姓名排序后的结果是:\n");print(head);return head;
}//查找通讯录中某个人
address_List *Search_name(address_List *head)
{address_List *p1,*p2;int m;char name[30];if(head == NULL){printf("通讯录为空,无法查找!\n");return head;}p1 = head;printf("**************************\n");printf("****请输入要查找的姓名:**\n");printf("**************************\n");m = 0;gets(name);while(p1 != NULL){while(strcmp(p1->name,name) != 0 && (p1->next != NULL)){p2 = p1;p1 = p1->next;}if(strcmp(p1->name,name) == 0){m++;printf("你查找的内容是:\n");printf("++++++++++++++++++++++++++++++++\n");printf("++ %s\t%s\t%s\t%s\t%s  ++",p1->name,p1->work,p1->handset,p1->email,p1->address);printf("++++++++++++++++++++++++++++++++\n");}p1 = p1->next;if(m == 0){printf("你查找的姓名不在通讯录中!\n");}break;}return head;
}//释放整个通讯录
address_List *Release(address_List *head)
{address_List *p;while(head != NULL){p = head;head = head->next;free(p);}return head;
}//保存(以文件的形式保存)
void save(address_List *head)
{FILE *fp;address_List *p;char Filename[30];        //保存后的文件名if(head ==NULL){printf("待保存的通讯录为空,无法保存!\n");return ;}printf("请输入保存后的文件名:");gets(Filename);fp = fopen("Filename.txt","w");if(fp == NULL){printf("无法打开文件!\n");return ;}p = head;fprintf(fp,"姓名\t职业\t手机\tEmail\t地址\n");for(;p != NULL;){fprintf(fp,"姓名\t职业\t手机\tEmail\t地址",p->name,p->work,p->handset,p->email,p->address);p = p->next;}printf("保存完毕!\n");fclose(fp);
}//文件读出函数
address_List *Load(address_List *head)
{FILE *fp;char Filename[30];address_List *p1,*p2;printf("请输入要输出的文件名:");gets(Filename);fp = fopen("Filename.txt","r");if(fp == NULL){printf("此通讯录不存在,无法输出!\n");return head;}else{head = Release(head);}p1 = (address_List *)malloc(LEN);fscanf(fp,"%s%s%s%s%s",p1->name,p1->work,p1->handset,p1->email,p1->address);if(feof(fp) != 0){printf("文件为空,无法打开!\n");return head;}else{rewind(fp);p2 = p1;head = p1;n = 0;while(feof(fp) == 0){fscanf(fp,"%s%s%s%s%s",p1->name,p1->work,p1->handset,p1->email,p1->address);if(feof(fp) != 0){break;}p2->next = p1;p2 = p1;p1 = (address_List *)malloc(LEN);n = n+1;}p2->next = NULL;p1 = head;head = head->next;n = n-1;free(p1);print(head);printf("打开完毕!\n");return head;}fclose(fp);
}//菜单选择函数
address_List *menu(address_List *head)
{char num[10];while(1){printf("*******************************\n");printf("*****1. 姓名查找     **********\n");printf("*****2. 单个显示     **********\n");printf("*****3. 增加         **********\n");printf("*****4. 退出         **********\n");printf("*******************************\n");printf("请输入你选择的操作:");gets(num);switch(*num){case '1':{head = Search_name(head);print(head);}break;case '2':{head = display(head);}break;case '3':{head = insert(head);print(head);}break;case '4':return head;default:printf("操作有误,此项不存在!\n");break;}if(strcmp(num,"6") == 0){break;}}return head;
}//主函数
int main(void)
{address_List *head = NULL;char num[10];printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("*=*=*=*=*=*=*=            程序说明        *=*=*=*=*=*=*\n");printf("*=*=*=*=*=*=*=    请及时保存创建完毕的通讯录内容        *=*=*=*=*=*=*\n");printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");while(1){printf("*******************************\n");printf("******    1. 创建通讯录   *******\n");printf("******    2. 按名字排序    *******\n");printf("******    3. 综合操作    *******\n");printf("******    4. 保存        *******\n");printf("******    5. 打开        *******\n");printf("******    6. 删除        *******\n");printf("******    7. 退出        *******\n");printf("*******************************\n");printf("请输入你选择的操作:");gets(num);switch(*num){case '1':{if(head == NULL){head = Create();print(head);}else{head = Release(head);head = Create();print(head);}}break;case '2':{head = Sort(head);}break;case '3':{head = menu(head);}break;case '4':{save(head);print(head);}break;case '5':{head = Load(head);}break;case '6':{head = delete_txl(head);print(head);}break;case '7':{head = Release(head);}break;default:{printf("操作有误,此项不存在!\n");}break;}if(strcmp(num,"7") == 0){break;}}return 0;
}

转载于:https://www.cnblogs.com/tslDream/p/4455972.html

通讯录管理系统(C语言)相关推荐

  1. 个人通讯管理程序C语言,个人通讯录管理系统C语言源程序(优秀版)[1]

    个人通讯录管理系统C语言源程序(优秀版)[1] 更新时间:2017/2/22 1:03:00  浏览量:613  手机版 C语言个人通讯录系统源程序: #include /*头文件*/ #includ ...

  2. 通讯录管理系统 C语言课程设计实验报告

    通讯录管理系统C语言课程设计 一.实验目的 1.巩固和加深学生对C语言课程的基本知识的理解和掌握 2.掌握C语言编程和程序调试的基本技能 3.利用C语言进行基本的软件设计 4.掌握书写程序设计说明文档 ...

  3. 手机通讯录管理系统——c语言

    @手机通讯录管理系统--c语言 急需!!!!!!!!能有大佬帮看看吗,想搞个清屏,但是老是弄不对,头昏眼花了,有的加了清屏,下面的内容就无法出现,只是闪现一会,有知道的吗,可以直接帮我改改代码吗,在此 ...

  4. 个人通讯录管理系统C语言版(含源代码和报告)

    个人通讯录管理系统 1.前言 本人2019级学生,某天闲来无事偶然翻着自己的文件夹,发现自己在大一上学期期末做的C语言课程设计(这是大学的第一个课程设计),时间已悄然过去了一年多了.打开文件看着源代码 ...

  5. 通讯录管理系统C语言课程设计大作业,c语言课程设计报告---通讯录管理系统.doc...

    c语言课程设计报告---通讯录管理系统.doc Yangtze University College of Arts and Science 学生实习手册 (课程设计报告) 学 部 理 工 学 部 专 ...

  6. 数据结构员工通讯录管理系统 C语言,数据结构课程设计报告单位员工通讯录管理系统.doc...

    班级:计科112 学号: 201100814203 姓名:冯贵阳 PAGE PAGE 42 数 据 结 构 课 程 设 计 实 验 报 告 目录 1.单位员工通讯录管理系统(线性表的应用)---- - ...

  7. 通讯录管理系统C语言课程设计

    (只列出了大体的框架,需要源码的朋友请私信联系.) 通讯录管理系统 1.问题描述 通讯录属性有:编号.姓名.性别.通讯地址.邮箱地址.电话等信息和相关的对属性做操作的行为.主要完成对通讯录的简单管理. ...

  8. c语言个人通讯录管理系统实验报告_C语言实现个人通讯录管理系统

    如何用c语言制作简易的个人通讯录管理系统?想必这是每一位初步学习c语言的同学需要解决的一个大问题.如何将这些数据类型不完全相同的数据元素存储并访问呢?采用结构体便能轻松解决这个问题! #include ...

  9. android运用 sqlite 实现简单的通讯录_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...

    说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...

  10. c语言3级菜单_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...

    说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...

最新文章

  1. Flutter调试技巧总结——高效开发的秘密
  2. 火狐浏览器信息提取工具Dumpzilla
  3. 编解码器之战:AV1、HEVC、VP9和VVC
  4. Arcgis for Javascript实现两个地图的联动
  5. win7 ghost 纯净版最新系统下载
  6. php怎么做免登录,php---一周内免登录
  7. 2019年这50个Kafka面试题,你知道答案么
  8. Ping突然出现请求超时的问题
  9. pointers on c (day 1,chapter3)
  10. 使用手册|「3D视觉从入门到精通」知识星球
  11. 迷宫最短路径-货郎担问题的解决思路
  12. 每日学习笔记(17)
  13. matlab if函数嵌套函数,Excelif函数嵌套多层使用VLOOKUP函数实现多级条件嵌套搜索方法...
  14. r610服务器维修,戴尔服务器R610
  15. 南京工资个税计算机,南京个税计算器_南京税后月薪|工资计算器_南京个人所得税查询 - Tax518...
  16. 【100 种语言速成】第 2 节:Emojicode
  17. Leetcode 1647. Minimum Deletions to Make Character Frequencies Unique [Python]
  18. 戴尔刀片服务器盘柜型号,戴尔PowerEdge 4220 42U 机架式盘柜
  19. 西门子触摸屏数据历史数据记录_西门子触摸屏mp277历史数据丢失(免费技术支持)...
  20. 如何借助微信SEO,实现快速微信引流10000+

热门文章

  1. 使用sklearn自带公式计算余弦相似度
  2. android蓝牙开启后会尝试自动连接,以编程方式配对后,Android会自动连接蓝牙设备...
  3. randn函数加噪声_损失函数 (Loss Function)
  4. linux系统程序PPT,Linux 系统应用与程序设计 问题.ppt
  5. Conda环境搭建记录
  6. Java基础 JSP九大内置对象
  7. java Jconsole调优
  8. 使用Powerdesigner的逆向工程生成PDM(主要是注释可以放进去)
  9. 《系统集成项目管理工程师》必背100个知识点-63供应商选择
  10. 笔记-项目人力资源管理