通讯录管理系统(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)+ ...
随机推荐
- ldap认证jupyter notebook
虽然jupyter hub是支持ldap的,见ldapauthenticator: 但是登录成功后似乎要以登录用户名启动notebook,而登录用户在服务器上不存在,于是500了: 在服务器上通过pa ...
- 20190411RAID磁盘阵列及CentOS7系统启动流程
RAID磁盘阵列及CentOS7系统启动流程(week2_day3) RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构 ...
- centos6.9 PHP的编译安装并连接nginx
1.安装yum -y install libxml2-devel openssl-devel bzip2-devel libmcrypt-devel 解决php包的依赖关系,可能libmcrypt会报 ...
- Pandas: 使用str.replace() 进行文本清洗
str.replace()可以一次处理一整个Series.str.replace()的正式形式为 Series.str.replace(pat, repl) ,其中pat为想要寻找的模式,一般为正则表 ...
- AHOI2019游记
day0 早上八点钟出发,下午一点左右到了(高速好堵啊) 下午试机,打了一发线段树,堆和其他一些东西,测试完没有问题就走了 惊奇发现旁边竟然是合肥市队的WC银牌hzy,%%% 晚上%了一发金牌爷yg就 ...
- SSM-网站前台博客系统制作(1)---前台+Google的Kaptcha
前提: 1天半时间简单自己手写了一下前端布局和后台验证码的基本工作,简要说明一下遇到的问题和收获吧. 这次基本就是前台设计(首页)+Kaptcha图片验证码(之前弄了一个reCaptcha验证码 但是 ...
- SSM学习(一)Mybatis
Mybatis Notes Mybatis First 创建Maven项目 配置依赖 <dependencies> <dependency> <groupId>ju ...
- Magento 2.2.5和2.2.6的bug 产品设置special price又删除后价格排序有误
Magento 2.2.5和2.2.6的bug 产品设置special price又删除后价格排序有误 一.问题描述:版本2.2.5和2.2.6均有此问题,为Magento2的系统bug.为产品设置s ...
- mongodb常用查询语句
1.查询所有记录db.userInfo.find();相当于:select* from userInfo; 2.查询去掉后的当前聚集集合中的某列的重复数据db.userInfo.distinct(&q ...
- 阿里云ECS相关
RAM授权: https://help.aliyun.com/document_detail/28639.html 安全组: https://jingyan.baidu.com/article/afd ...