设计实现一个简易通讯录,要求使用结构体
来源:互联网 发布:招财猫是什么软件 编辑:程序博客网 时间:2024/06/04 18:47
实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1.添加联系人信息
2.删除指定联系人信息
3.查找指定联系人信息
4.修改指定联系人信息
5.显示所有联系人信息
6.清空所有联系人
7.以名字排序所有联系人
由于一般储存都使用不了1000个人的信息,故为了省空间我使用的是单链表储存联系人的信息,有一个储存一个,单链表具有省空间的作用,我将函数代码封装,下边我将分布列出来
定义结构体头文件
#ifndef __telphone_H__#define _CRT_SECURE_NO_WARNINGS 1#define __telphone_H__#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct tel_number{char name[8];int sex;int age;char tel[12];char address[20];struct tel_number *next;}Node, *Telphone;#define TRUE 1#define FALSE 0extern void Init_tel(Telphone *S); //联系人链表初始化extern char *fun_sb(char name[]); //输入指定联系人extern int Add_tel(Telphone S); //增加联系人extern void Show_tel(Telphone S); //显示所有联系人extern int Delete_tel(Telphone S, char name[]); //删除制定联系人extern int fund_tel(Telphone S, char name[]); //寻找指定联系人extern int Mod_tel(Telphone S, char name[]); //修改指定联系人extern void Empty_tel(Telphone S); //清空联系人extern int Sort_tel(Telphone S); //按姓名排序extern void menu(); //菜单#endif
主函数文件
#include"telphone.h"int main(){int let = 0;Telphone S;Init_tel(&S);char name[10];int n = 1;while (n){system("cls");menu();scanf("%d", &n);switch (n){case 1:let = Add_tel(S);if (let == 1)printf("输入成功!\n");else printf("输入失败!\n");system("pause");break;case 2:let = Delete_tel(S, fun_sb(name));if (let == 1)printf("成功删除该指定联系人!\n");else printf("删除失败!\n");system("pause");break;case 3:let = fund_tel(S, fun_sb(name));if (let == 0)printf("未找到该指定联系人");system("pause");break;case 4:let = Mod_tel(S, fun_sb(name));if (let == 1)printf("成功修改该指定联系人!\n");else printf("修改失败!\n");system("pause");break;case 5:Show_tel(S);printf("已全部显示!\n");system("pause");break;case 6:Empty_tel(S);printf("\t清除成功!\n");system("pause");break;case 7:let=Sort_tel(S);if (let == 1)printf("成功将联系人按姓名排序!\n");else printf("排序失败!\n");system("pause");break;case 8:printf("\n\t\t\t\t谢谢使用!\n");n = 0;break;default:printf("\a\t\t输入序号有误!请重新输入!!!\n");system("pause");break;}}system("pause");return 0;}
联系人链表初始化
#include"telphone.h"//电话簿初始化void Init_tel(Telphone *S){*S = (Telphone)malloc(sizeof(Node));(*S)->next = NULL;}
输入指定联系人
#include"telphone.h"//输入联系人char *fun_sb(char name[]){getchar();printf("请输入指定联系人:");gets(name);return name;}
增加联系人
int Add_tel(Telphone S)//链栈进栈{Node *temp;temp = (Node *)malloc(sizeof(Node));if (temp == NULL)return(FALSE); /* 申请空间失败 */char name[10];char address[20];char c = 1;int i = 0, j = 0;getchar();printf("请输入姓名:");gets(name);printf("请输入性别:男->1,女->0 :");scanf("%d", &(temp->sex));strcpy(temp->name, name);printf("请输入年龄:");scanf("%d", &(temp->age));getchar();printf("请输入住址:");gets(address);printf("请输入电话号码:");gets(temp->tel);strcpy(temp->address, address);temp->next = S->next;S->next = temp; /* 修改当前栈顶指针 */return(TRUE);}
显示所有联系人
#include"telphone.h"void Show_tel(Telphone S) //显示所有联系人{int i = 0;Node * temp = S->next;if (temp == NULL)return;printf("姓名:%s\n", temp->name);printf("性别:");if (1 == (temp->sex))printf("男\n");else printf("女\n");printf("年龄:%d\n", temp->age);printf("电话号码:%s\n", temp->tel);printf("住址:%s\n\n", temp->address);Show_tel(S->next);}
删除指定联系人
#include"telphone.h"//删除指定联系人int Delete_tel(Telphone S, char name[]){Node * temp;if (S->next == NULL)return FALSE;else{temp = S->next;if (strcmp(temp->name, name) == 0){S->next = temp->next;return TRUE;}else Delete_tel(S->next, name);}return FALSE;}
寻找指定联系人
#include"telphone.h"//寻找指定联系人int fund_tel(Telphone S, char name[]){int i = 0;Node* temp;if (S->next == NULL)return FALSE;else{temp = S->next;if (strcmp(temp->name, name) == 0){printf("找到指定联系人! 信息如下:\n");printf("姓名:%s\n", temp->name);printf("性别:");if (1 == (temp->sex))printf("男\n");else printf("女\n");printf("年龄:%d\n", temp->age);printf("电话号码:%s\n", temp->tel);printf("住址:%s\n", temp->address);return TRUE;}else fund_tel(S->next, name);}return FALSE;}
修改指定联系人
#include"telphone.h"//修改制定联系人int Mod_tel(Telphone S, char name[]){int i = 0;Node *temp;if (S->next == NULL)return FALSE;else{temp = S->next;if (strcmp(temp->name, name) == 0){printf("找到指定联系人!请修改!\n :");printf("姓名由%s修改为:", temp->name);gets(name);printf("请输入性别:男->1,女->0 :");scanf("%d", &(temp->sex));strcpy(temp->name, name);printf("年龄由%d修改为:", temp->age);scanf("%d", &(temp->age));getchar();printf("住址由%s修改为:", temp->address);gets(temp->address);printf("电话号码由%s修改为:", temp->tel);gets(temp->tel);return TRUE;}else Mod_tel(S->next, name);}return ;}
清空联系人
#include"telphone.h"//清空void Empty_tel(Telphone S){if (S->next != NULL)free(S);S->next = NULL;}
按姓名排序
#include"telphone.h"//按姓名排序int Sort_tel(Telphone S){if (S->next = NULL)return FALSE;int flag = 0;Node *p3 = S;Node *p2, *p1, *p4, *p5;while (p3->next->next != NULL)//注意链表向前推进的方式{p2 = p3->next;p5 = p2;p1 = p2;p4 = p1;while (p1->next != NULL)//内存循环终止的条件{if (strcmp(p5->name, p1->next->name)>0)//找出原链表中剩余节点中值最小的那个节点{p5 = p1->next;p4 = p1;flag = TRUE;}p1 = p1->next;}if (flag)//交换两个节点的顺序,值小的节点往前调{if (p2 == p4)//此种情况为要交换顺序的两个节点相邻{p2->next = p5->next;p5->next = p2;p3->next = p5;}else//这种情况为要交换的两个节点不相邻{Node *temp = p5->next;p5->next = p2->next;p3->next = p5;p4->next = p2;p2->next = temp;}}p3 = p3->next;}return TRUE;}
注:本人使用的是VS2013编译器,为了使用scanf,故定义了宏 #define _CRT_SECURE_NO_WARNINGS 1 如果在别的编译器运行,则不需要定义这个宏,
运行结果:
结果就不予展示了,有兴趣的可以复制代码然后运行,
本人也是初学,代码中难免有许多疏漏之处,欢迎各位大神批评指正!
本文出自 “分享中进步” 博客,请务必保留此出处http://xmwen1.blog.51cto.com/10730069/1717827
0 0
- 设计实现一个简易通讯录,要求使用结构体
- 实现一个简易通讯录
- C结构体实现一个通讯录
- C语言利用结构体实现一个通讯录
- 将结构体实现的简易通讯录改成动态的版本
- 编写一个可容纳1000人的通讯录(【结构体】静态通讯录的实现)
- 用结构体实现通讯录
- C语言 使用结构体实现简单的通讯录
- C语言实现简易通讯录
- C++实现简易通讯录系统
- 【简易通讯录】-----C语言实现
- C语言实现简易通讯录
- 通讯录(用结构体的方法实现)
- [c语言]结构体实现通讯录
- 用结构体数组实现通讯录
- 利用结构体实现建议通讯录
- 结构体实现通讯录简单版
- 结构体实现通讯录动态内存版
- 使用冒泡排序,排序一组字符串
- 给一组数,只有两个数只出现了一次,其他所有数都是成对出现的。怎么找出这两个数
- 用C语言编写函数实现一个整数计算机,程序接受三个参数,第一个参数为操作项,后两个参数为操作数。
- 用C语言编程,实现调整数组,使奇数全部位于偶数前边,
- 用C语言编写函数,实现strlen计算字符串长度的功能
- 设计实现一个简易通讯录,要求使用结构体
- 将数字字符串转化为对应数字输出(不考虑溢出)
- 求一组数的平均数(利用可变参数列表)
- c++中的顺序表写法,主要实现(增删查改,构造函数,运算符重载)
- c++中的双向链表写法,主要实现(增删查改,链表逆置,构造函数,运算符重载,等)
- 古典密码之hill密码的加密与解密程序实现
- 小明哥教你使用模板函数实现顺序表
- [C++] 利用模板的模板参数实现单链表
- std的terminate函数