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

通讯录管理系统(C语言)的更多相关文章

  1. c语言实现通讯录管理系统(c课程设计)

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

  2. iOS学习之Object-C语言简单的通讯录管理系统

    用这几天学的OC的知识,写了一个实现简单功能的通讯录管理系统,在这里分享给大家: 通讯录管理系统 *  需求: 1.定义联系人类Contact.实例变量:姓名(拼音,首字母大写).性别.电话号码.住址 ...

  3. C++课程设计 通讯录管理系统 原码及解析

    设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理. (一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时 ...

  4. c++实现通讯录管理系统(控制台版)

    c++实现通讯录管理系统(控制台版) 此项目适合c++初学者,针对c++基础知识,涉及到变量.结构体定义使用.数组定义使用.指针定义使用等. 运行之后的结果如下: 代码: #include <i ...

  5. C++入门-控制台版的通讯录管理系统

    通讯录管理系统 1.系统需求 通讯录是一个可以记录亲人.好友信息的工具. 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名.性别 ...

  6. C++通讯录管理系统(添加联系人,显示联系人,删除联系人,查找联系人,修改联系人,清空联系人,退出通讯录)

    1 /** 2 * ProjectNmae:通讯录管理系统 3 * 功能: 4 * 添加联系人:向通讯录添加新人 5 * 显示联系人:显示通讯录中的所有联系人信息 6 * 删除联系人:按照姓名进行删除 ...

  7. c++—通讯录管理系统

    一.运用所学的结构体.地址指针等基础知识,完成通讯录管理系统 二.系统主要有以下6个功能: 1.添加联系人2.显示联系人 3.删除联系人 4.查找联系人5.修改联系人 6.清空联系人 1 #inclu ...

  8. C语言通讯录管理系统

    本文转载自:http://blog.csdn.net/hackbuteer1/article/details/6573488 实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能. ...

  9. 2019年7月16日 abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

随机推荐

  1. redis 在 php 中的应用(Hash篇)

    本文为我阅读了 redis参考手册 之后结合 博友的博客 编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) Redis hash 是一个string类型的f ...

  2. 向日葵连CentOS

    TeamViewer可以连CentOS,但TeamViewer最近老是提示“检测为商业用途”,5分钟就会自动断,用起来非常不爽,所以决定改用向日葵试下,向日葵目前的口碑也不错,更何况是国产软件,更要支 ...

  3. Monkey之常用ADB命令(新猿旺学习总结)

    查看 adb 版本                                     adb version获取连接设备及状态                           adb dev ...

  4. layui table数据表格reload where参数保留问题

    layui table数据表格reload where参数保留问题 在使用layui过程中多多少少会遇到些问题 table reload 有个坑:reload时where参数会保留上次的参数,如果用 ...

  5. 5、Storm集成Kafka

    1.pom文件依赖 <!--storm相关jar --> <dependency> <groupId>org.apache.storm</groupId> ...

  6. 妙用valueForKeyPath

    valueForKey与valueForKeyPath在KVC中同时出现,都可以使用,难免让开发者迷惑:心里知道肯定是不一样,但具体的用法你会吗?其实valueForKeyPath的功能更强大,支持深 ...

  7. RHCE

    RHCE 配置 配置firewalld防火墙 配置firewalld端口转发 自定义用户环境 配置链路聚合 配置IPV6地址 配置本地邮件服务

  8. 使用guava过期map

    最近需要将微信的accesstoken保存到缓存里面,防止重复请求微信接口获取token,造成token请求次数超标,其实随便一个缓存都可以轻松解决,但是现有的环境中没有redis,没有memcahe ...

  9. 利用策略模式实现了同一接口的多个Servicel实现类,如何同时注入Controller

    解决方法如上图,通过给实现类起别名,并在controller中,通过@Qualifier注解获取不同的实现类,之前没有这样写,会出现这样的情况: 通过@autowired注解注入dao层时为空,会报空 ...

  10. SpringBoot服务器部署

    注释本地tomcat jar包 jdk版本必须1.8以上 tomcat版本必须8以上 配置tomcat server.xml文件 Swagger 配置