通讯录管理系统(C语言)
/*
* 对通讯录进行插入、删除、排序、查找、单个显示功能
*/ #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语言)的更多相关文章
- c语言实现通讯录管理系统(c课程设计)
工具:Visual C++6.0 说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号 ...
- iOS学习之Object-C语言简单的通讯录管理系统
用这几天学的OC的知识,写了一个实现简单功能的通讯录管理系统,在这里分享给大家: 通讯录管理系统 * 需求: 1.定义联系人类Contact.实例变量:姓名(拼音,首字母大写).性别.电话号码.住址 ...
- C++课程设计 通讯录管理系统 原码及解析
设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理. (一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时 ...
- c++实现通讯录管理系统(控制台版)
c++实现通讯录管理系统(控制台版) 此项目适合c++初学者,针对c++基础知识,涉及到变量.结构体定义使用.数组定义使用.指针定义使用等. 运行之后的结果如下: 代码: #include <i ...
- C++入门-控制台版的通讯录管理系统
通讯录管理系统 1.系统需求 通讯录是一个可以记录亲人.好友信息的工具. 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名.性别 ...
- C++通讯录管理系统(添加联系人,显示联系人,删除联系人,查找联系人,修改联系人,清空联系人,退出通讯录)
1 /** 2 * ProjectNmae:通讯录管理系统 3 * 功能: 4 * 添加联系人:向通讯录添加新人 5 * 显示联系人:显示通讯录中的所有联系人信息 6 * 删除联系人:按照姓名进行删除 ...
- c++—通讯录管理系统
一.运用所学的结构体.地址指针等基础知识,完成通讯录管理系统 二.系统主要有以下6个功能: 1.添加联系人2.显示联系人 3.删除联系人 4.查找联系人5.修改联系人 6.清空联系人 1 #inclu ...
- C语言通讯录管理系统
本文转载自:http://blog.csdn.net/hackbuteer1/article/details/6573488 实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能. ...
- 2019年7月16日 abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
随机推荐
- Is ICARSCAN same or old version of LAUNCH X431 Easydiag ?
LAUNCH X431 Easydiag 2.0 is basically the same OBD-II Bluetooth device – but the software supplied w ...
- 安卓recyclerView 分割线的那些事
在这里我想记录下recyclerView 分割线遇到的一些问题,主要提供一些个人思路,代码可能不多~ 1.宽度问题 描述:我现在需要做一张卡片,卡片里面是一条条联系人,而且我们卡片外层是有阴影的,我的 ...
- leetcode 66.加一 python3
class Solution: def plusOne(self, digits): """ :type digits: List[int] :rtype: List[i ...
- UI自动化(十四)yaml配置文件
import yamlimport jsonf = open('config.yaml','rb')data = yaml.load(f)print(json.dumps(data,indent=4) ...
- mongodb常用的sql语句总结
本文为博主原创,转载请注明出处: 1 . 查询所有 db.getCollection('CollectionName').find() 2.根据条件查询 db.getCollection('Coll ...
- @resource、@Autowired、@Service在一个接口多个实现类中的应用
Spring在没有引入注解之前,传统的Spring做法是使用.xml文件来对bean进行注入,所有的内容都需要配置在.xml文件中,使配置和编程分离,却增加了可读性和复杂度. Spring注解将复杂的 ...
- 数据类型 varchar 和 uniqueidentifier 在 add 运算符中不兼容
select '<a href="/'+a.id +'" title="'+ a.title +'">'+a.Title+'</a>' ...
- 日常安装chocolatey报错此系统上禁止运行脚本
查看计算机上的现用执行策略get-executionpolicy ( 默认:Restricted ) 若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本,使用以下命令将计算机上的 执行 ...
- Mac 下eclipse安装Lombok插件
在官网下载最新版本的 JAR 包. 将 lombok.jar 放在eclipse安装目录下,和 eclipse.ini 文件平级的. 注意,mac操作系统下eclipse的安装路径下有两个eclips ...
- 同步请求和异步请求的区别,ajax异步请求如何理解
同步请求和异步请求的区别 先解释一下同步和异步的概念 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的 ...