实现一个通讯录:
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
未使用开辟动态内存的方法:
头文件部分(test.h)
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __CONTACTS_H__
#define __CONTACTS_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
#define N 1000
typedef struct contact
{
char name[20];
char sex[4];
int age;
int telephone;
char address[20];
}*c;
void show(struct contact *c, int len); //struct contact *c:结构体指针指向这个结构体
//int len:结构体数组的长度
void add(struct contact *c, int len, int flag);
int Delete(struct contact *c, int d_number, int len);
void find(struct contact *c, int d_number, int len);
void empty(struct contact *c);//清空联系人
void modify(struct contact *c, int m_member, int len);//修改联系人
int cmp(const void*a, const void*b);
void sort(struct contact *c, int len);//根据联系人的名字进行排序
#endif
contact.c文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"test.h"
void show(struct contact *c, int len)
{
assert(c);
int i = 0;
for (i = 0; i < len; i++)
{
printf("name:%s sex:%s age:%d telephone:%d address:%s", \
c[i].name, c[i].sex, c[i].age, c[i].telephone, c[i].address);
printf("\n");
}
}
void add(struct contact *c, int len, int flag)
{
int i = 0;
for (i = flag; i < len; i++)
{
printf("输入姓名:");
scanf("%s",&c[i].name);
printf("输入性别:");
scanf("%s", &c[i].sex);
printf("输入年龄:");
scanf("%d", &c[i].age);
printf("输入电话号码:");
scanf("%d", &c[i].telephone);
printf("输入地址:");
scanf("%s", &c[i].address);
}
}
int Delete(struct contact *c, int d_number, int len) //删除联系人
{
int i = 0;
for (i = d_number - 1; i < len - 1; i++)
{
c[i] = c[i + 1];
}
}
void find(struct contact *c, int d_number, int len)
{
if (d_number - 1 >= 0 || d_number - 1 < len)
{
printf("name:%s sex:%s age:%d telephone:%d address:%s", \
c[d_number].name, c[d_number].sex, c[d_number].age, c[d_number].telephone, c[d_number].address);
printf("\n");
}
else
{
printf("不存在");
return;
}
}
void empty(struct contact *c)//清空联系人
{
int i = 0;
for (i = 0; i < 1000; i++)
{
memset(c + i, 0, sizeof(struct contact));
}
}
void modify(struct contact *c,int m_member,int len)//修改联系人
{
char name[20];
printf("输入要修改联系人姓名:");
scanf("%s", name);
for(m_member = 0; m_member < len; m_member++)
{
if (strcmp(c[m_member].name, name) == 0)
{
printf("修改的姓名为:");
scanf("%s", &c[m_member].name);
printf("修改的性别为:");
scanf("%s", &c[m_member].sex);
printf("修改的年龄为:");
scanf("%d", &c[m_member].age);
printf("修改的电话为:");
scanf("%d", &c[m_member].telephone);
printf("修改的地址为:");
scanf("%s", &c[m_member].address);
break;
}
}
if (m_member == len)
{
printf("没有此人\n");
return;
}
}
int cmp(const void*a, const void*b)
{
struct contact *aa = (struct contact *)a;
struct contact *bb = (struct contact *)b;
if (aa->name != bb->name)
return (strcmp((aa->name), (bb->name)));
}
void sort(struct contact *c, int len)
{
assert(c);
qsort(c, len, sizeof(struct contact), cmp);
}
test.c文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"test.h"
void menu()
{
printf("*************************\n");
printf("******* 通讯录 ******\n");
printf("1.Add 2.Delete 3.Find\n");
printf("4.Empty 5.Modify 6.Sort\n");
printf("0.Exit 7.Show\n");
printf("*************************\n");
printf("*************************\n");
}
int main()
{
struct contact people[N];
int len = 0;
int delete_number = 0;
int flag = 0;//定义一个标志位来表示结构体数组中每个结构体的位置
int input;
menu();
while (1)
{
printf("请选择");
scanf("%d", &input);
switch (input)
{
case 1:
{
printf("请添加len个联系人的信息:");
scanf("%d", &len);
add(people,len+flag,flag);
flag = flag + len;
}break;
case 2:
{
printf("请输入要删除第i个联系人的信息:");
scanf("%d", &delete_number);
Delete(people,delete_number,len+flag);
flag = flag - 1;
}break;
case 3:
{
int find_number =0;
printf("请输入要查找的第i个联系人的信息:");
scanf("%d", &find_number);
find(people,delete_number,len+flag);
}break;
case 4:
{
printf("清空所有联系人");
empty(people);
}break;
case 5:
{
int m_member = 0;
modify(people,m_member,len+flag);
}break;
case 6:
{
printf("根据名字排序所有人:");
sort(people,len+flag);
}break;
case 7:
{
printf("打印所有人的信息:");
show(people,flag);
}break;
case 0:
{
exit(1);
}
default:printf("输入有误!");
}
}
system("pause");
return 0;
}