码迷,mamicode.com
首页 > 编程语言 > 详细

C语言用结构体写一个通讯录

时间:2015-11-29 06:44:41      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:通讯录   结构体   c语言   字符串   

    今天写了个通讯录,给大家看一下

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern meau();//目录函数就没写出来了,大家可以自己写一下
typedef struct T//定义一个结构体
{
char name[10];
char sex[4];
int age;
char tetl[13];
char add[20];
}T;
int count = 0;//全局变量,用来记录电话个数
void add(T *p)//添加目录
{
int falg = 0;
do
{
printf("请输入姓名:\n");//这里需要注意的是结构体指针的运用,根据scanf函数的特性
scanf("%s", (*(p + count)).name);//输入字符串的时候不用取地址,输入整形的时候需要取地址
printf("请输入性别:\n");
scanf("%s", (*(p + count)).sex);
printf("请输入年龄:\n");
scanf("%d", &((*(p + count)).age));
printf("请输入电话号码:\n");
scanf("%s", (*(p + count)).tetl);
printf("请输入用户地址:\n");
scanf("%s", (*(p + count)).add);
count++;
printf("输入完成!按0退出,按任意键继续输入!\n");
scanf("%d", &falg);
} while (falg);
}
void dele(T*p)            //删除通讯录的函数
{
int i = 0;
int flag = 0;
char goal[10] = {0};
do
{
printf("请输入要删除的用户名:\n");
scanf("%s", goal);
for (i = 0; i < count; i++)
{
if (!strcmp(goal, (*(p + i)).name))
{
while (i <= count)//这里是个讲数组第i个元素以后的元素向前挪动,达到删除i元素的目的得一个/                  //算法
{
*(p + i) = *(p + i + 1);
i++;
}
count--;
flag = 0;
}
else
flag = 1;
}
if (flag)
{
printf("输入用户不存在,按任意键重新输入,按0意键退出:\n");
scanf("%d", &flag);
}
} while (flag);
}
void find(T*p)//查找函数
{
int i = 0;
int flag = 0;
char goal[10] = { 0 };
do
{
printf("请输入要查找的用户名:\n");
scanf("%s", goal);
for (i = 0; i <  count; i++)
{
if (!strcmp(goal, (*(p + i)).name))
{
printf("姓名:%s\n", (*(p + i)).name);
printf("性别:%s\n", (*(p + i)).sex);
printf("年龄:%d\n", (*(p + i)).age);
printf("电话号码:%s\n", (*(p + i)).tetl);
printf("家庭地址:%s\n", (*(p + i)).add);
flag = 0;
}
else
flag = 1;
}
if (flag)
{
printf("输入用户不存在,选择0退出,按任意键继续查找\n");
scanf("%d", &flag);
}
} while (flag);
}
void revise(T*p)//修改函数
{
int i = 0;
int flag = 0;
char goal[10] = { 0 };
do
{
printf("请输入要查找的用户名:\n");
scanf("%s", goal);
for (i = 0; i < count; i++)
{
if (!(strcmp(goal, (*(p + i)).name)))
{
printf("请选择你要修改的内容:\n1.姓名\n2.性别\n3.年龄\n4.电话号码\n5.家庭住址\n");
scanf("%d", &flag);
switch (flag)
{
case 1:
{
  printf("请输入新的姓名:\n");
  scanf("%s", (*(p + i)).name);
  break;
}
case 2:
{
  printf("请输入新的性别:\n");
  scanf("%s", (*(p + i)).sex);
  break;
}
case 3:
{
  printf("请输入新的年龄:\n");
  scanf("%d", &((*(p + i)).age));
  break;
}
case 4:
{
  printf("请输入新的电话号码:\n");
  scanf("%s", (*(p + i)).tetl);
  break;
}
case 5:
{
  printf("请输入新的用户地址:\n");
  scanf("%s", (*(p + i)).add);
  break;
}
default:
{
   printf("指令有误,请重新输入!\n");
   break;
}
}
flag = 0;
}
else
flag = 1;
}
if (flag)
{
printf("输入用户不存在,选择任意键继续,按0键退出:\n");
scanf("%d", &flag);
}
} while (flag);
}
void display(T*p)//打印所有电话簿的函数
{
int i = 0;
if (count)
{
for (i = 0; i < count; i++)
{
printf("姓名:%s\n", (*(p + i)).name);
printf("性别:%s\n", (*(p + i)).sex);
printf("年龄:%d\n", (*(p + i)).age);
printf("电话号码:%s\n", (*(p + i)).tetl);
printf("家庭地址:%s\n", (*(p + i)).add);
}
}
else
{
printf("电话簿内无内容!\n");
}
}
void empty(T*p)//清空函数,这里我没有将数组内容清空,而是将count改为0,使电话薄刷新
{
count = 0;
}
void dobble(T*p)//冒泡排序对姓名排序
{
int i = 0;
int j = 0;
for (i = 0; i < count; i++)
{
for (j = 0; j < count - i - 1; j++)
{
if (strcmp((*(p + j)).name, (*(p + j+1)).name) > 0)
{
*(p + count) = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = *(p + count);
}
}
}
}
int main()
{
T tel[1000];
T*p = tel;
int key = 0;
do
{
meau();
printf("请选择:\n");
scanf("%d", &key);
switch (key)
{
case 1:
{
  add(p);
  break;
}
case 2:
{
  dele(p);
  break;
}
case 3:
{
  find(p);
  break;
}
case 4:
{
  revise(p);
  break;
}
case 5:
{
  display(p);
  break;
}
case 6:
{
  empty(p);
  break;
}
case 7:
{
  dobble(p);
  break;
}
case 0:
{
  return 0;
}
default:
{
   printf("输入错误,请重新输入!\n");
   break;
}
}
} while (key);
system("pause");
return 0;
}

如有不足之处,希望指正

本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1717800

C语言用结构体写一个通讯录

标签:通讯录   结构体   c语言   字符串   

原文地址:http://10743407.blog.51cto.com/10733407/1717800

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!