/*
* 对通讯录进行插入、删除、排序、查找、单个显示功能
*/ #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. JS,JQuery小知识

    http://blog.163.com/wumingli456@126/blog/static/28896414201112252456459/?suggestedreading&wumii

  2. CentOS 7离线安装CDH 5.16.1完全指南(含各种错误处理)

    安装包下载 1.CM软件包下载 从http://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.16.1/RPMS/x86_64/下载rpm包,如下: 其实 ...

  3. Linux 内存泄漏检查工具 valgrind

    抄自<从零开始的JSON库教程>,先mark一下,以后再慢慢研究. ======== 引用分割线 ======== 在 Linux.OS X 下,我们可以使用 valgrind 工具(用 ...

  4. VMware下liunx虚拟机仅主机模式上网

    VMware上的配置 虚拟网络编辑器上的仅主机模式设置 可以自定义虚拟机的网段,我设置的是192.168.137.0 选择对应网卡的联网方式为仅主机模式 配置虚拟机网卡,主要是按虚拟网卡编辑器中设置的 ...

  5. 2019十大安卓手游折扣平台app排行榜

    2019游戏版号陆续开放,玩家又有许多好游戏可以玩了. 小编就以当前最热门的十个游戏来点评手游折扣平台App排行榜吧! 排名第一的游戏: 少年西游记-新征程 老平台,集成SDK,良心平台,覆盖全网游戏 ...

  6. Java基础学习-关键字的概述和特点以及常量的概述和分类

    1.关键字概述     -被Java语言赋予特定含义的单词 2.关键字的特点     -组成关键字的字母全部小写     -常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观,所以我们不需要死记硬 ...

  7. 单元测试系列之十:Sonar 常用代码规则整理(二)

    摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...

  8. P2178 [NOI2015]品酒大会

    思路 在后缀树上进行一些操作就好了 后缀树上LCA的maxlen就是两个后缀的LCP的长度了 然后统计每个点作为LCA的次数和最大值.次大值.最小值.次小值 然后就做完了 代码 #include &l ...

  9. springboot实现自定义的错误页面展示

    https://blog.csdn.net/trusause/article/details/84299886 参考 SpringBoot默认的错误处理机制 默认效果为: 返回一个默认的错误页面 Wh ...

  10. cuda cudnn tensorflow-gpu安装

    Ububtu18.04下载cuda9.0 下载好后得到: CUDA 9.0仅支持GCC 6.0及以下版本,而Ubuntu 18.04预装GCC版本为7.3,需要安装gcc-6与g++-6 查看当前版本 ...