/*
* 对通讯录进行插入、删除、排序、查找、单个显示功能
*/ #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. npm install --save 、--save-dev 、-D、-S 的区别

    备注:<=> 意为等价于: 1.npm install <=> npm i --save   <=> -S --save-dev  <=> -D npm ...

  2. BP神经网络(原理及MATLAB实现)

    人工神经网络概述: 人工神经元模型: 神经网络的分类: 按照连接方式,可以分为:前向神经网络 vs. 反馈(递归)神经网络: 按照学习方式,可以分为:有导师学习神经网络 vs. 无导师学习神经网络: ...

  3. 在java中使用Mysql数据库,如何在MyBatis的xml里面处理时间为Int类型的数据

    主要是将显示在页面上的数据变成日期格式,而不是相应的毫秒数,具体的做法如下: 1.首先需要在相关的xml文件里面修改时间为下面语句,其中reg_time为要修改的日期列名 FROM_UNIXTIME( ...

  4. C++环境设置

    g++ -V #include <iostream> int main() { std::cout << "Hello World!\n"; return ...

  5. vue 去中心化的路由拆分方案:require.context

    代码地址:https://github.com/lisiyizu/vue-router-dynamic

  6. win10 右键添加“在此打开powershell”

    计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\ 上图中的字符串,直接去下图中的位置复制过来就好

  7. git命令-切换分支

    git一般有很多分支,我们clone到本地的时候一般都是master分支,那么如何切换到其他分支呢? 1. 查看远程分支 $ git branch -a 我在mxnet根目录下运行以上命令: ~/mx ...

  8. Vue-admin工作整理(三):路由

    1.router-link和router-view组件 router-link组件实际上是封装了一个a标签(链接标签),里面有一个重要属性:“to”,它的值是一个路径,其路径对应的渲染组件,要在路由列 ...

  9. Python自动发送邮件提示:smtplib.SMTPServerDisconnected: please run connect() first

    参考:http://blog.csdn.net/leven_change/article/details/66976695

  10. PyQt5——隐藏控件并保留位置

    原文地址:https://blog.csdn.net/qq_38161040/article/details/86605798 ———————————————————————————————— 设置控 ...