1000人通讯录的实现(静态实现)

实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:

姓名、性别、年龄、电话、住址

 

提供方法:

1. 添加联系人信息

2. 删除指定联系人信息

3. 查找指定联系人信息

4. 修改指定联系人信息

5. 显示所有联系人信息

6. 清空所有联系人

7. 以名字排序所有联系人


首先:建立一个头文件contacts.h

#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
#include <memory.h>  
 
#define MAX 1000 
#define NAME_LENGTH 20 
#define SEX_LENGTH 5
#define AGE_LENGTH 3
#define TELE_LENGTH 20 
#define ADDR_LENGTH 30 

 
/*
    结构体 用于储存通讯录人员信息
*/
struct ContactsUser
{
    char name[NAME_LENGTH];
    char sex[SEX_LENGTH];
    /*
        VS编译器下scanf_s对于长度有安全保护 因此采用字符数组保存年龄
    */
    char age[AGE_LENGTH];
    char tele[TELE_LENGTH];
    char addr[ADDR_LENGTH];
};
 
/*
    结构体 将上一个结构体装起来 同时创建变量记录人数
*/
struct Contacts
{
    struct ContactsUser person[MAX];
    int user_count;
};
 
typedef struct Contacts *pContacts;

int add_contacts(pContacts pcon);//添加函数
int dele_contacts(pContacts pcon);//删除函数
int clear_contacts(pContacts pcon);//清空函数
int find_contacts(pContacts pcon);//查找函数
int modify_contacts(pContacts pcon);//修改函数
void sort_contacts(pContacts pcon);//排序函数
void show_contacts(pContacts pcon);//显示函数
void menu();//主菜单</memory.h></stdlib.h></string.h></stdio.h>
然后建立两个文件,让程序看起来条理清晰

test1.c

void menu()
{
    printf("------------ 服务菜单 ---------------\n");
	printf("-------------------------------------\n");
	printf("           1.添加联系人\n");
	printf("           2.删除联系人\n");
	printf("           3.清空联系人\n");
	printf("           4.查找联系人\n");
	printf("           5.修改联系人\n");
	printf("           6.显示所有联系人\n");
    printf("           7.排序联系人\n");
	printf("           0.退出\n");
	printf("-------------------------------------\n");
}
/*
    查询实体函数  用于将输入的用户特征和储存进行比较(strcmp)
    方便其他功能函数的调用
*/
int find_entry(pContacts pcon)
{
    int i = 0;
    char name[NAME_LENGTH];
    printf("请输入名字:");
    scanf_s("%s", name,NAME_LENGTH);
    for (i = 0; i < pcon->user_count; i++)
    {
        if (strcmp(pcon->person[i].name, name) == 0) //输入和存储进行比较
        { 
            return i;
        }
    }
    return -1;
}
 
 
/*
    增添函数
*/
int add_contacts(pContacts pcon)
{
    if (pcon->user_count == MAX)
    {
        printf("电话本已满!\n");
        return -1;
    }
    else
    {
    printf("请输入名字:");
    /*
        scanf_s安全函数  应该添加控制长度的参数
    */
    scanf_s("%s", pcon->person[pcon->user_count].name, NAME_LENGTH);
    /*
        数组从下标为0到下标为user_count-1 ,则在user_count处操作
    */
    printf("请输入性别:");
    scanf_s("%s", pcon->person[pcon->user_count].sex, SEX_LENGTH);
    printf("请输入年龄:");
    scanf_s("%s", pcon->person[pcon->user_count].age, AGE_LENGTH);
    printf("请输入电话:");
    scanf_s("%s", pcon->person[pcon->user_count].tele,TELE_LENGTH);
    printf("请输入地址:");
    scanf_s("%s", pcon->person[pcon->user_count].addr, ADDR_LENGTH);
	printf("添加成功!\n");
 
    pcon->user_count++;//添加结束 人员数目增加1
    return 1;
    }
     
}
 
 
 
/*
    删除函数
*/
int dele_contacts(pContacts pcon)
{
    int i = 0;
    int ret = find_entry(pcon);//定义ret 接收find_entry的返回位置
 
    if (ret != -1)
    {
        for (i = ret; i < pcon->user_count - 1; i++)
        {
            pcon->person[i] = pcon->person[i + 1];
        }
        printf("删除成功!\n");
        pcon->user_count--;
        return 1;
		
    }
    else
    {
        printf("找不到联系人\n");
        return -1;
    }
}
 
 
 
/*
    清空函数
*/
int clear_contacts(pContacts pcon)
{ 
    /*memset(pcon->person,0,MAX);*/
    /*
    memset函数 在一段内存中填充给定的值 
    是对较大结构体或数组清零的最快方法
    */
    pcon->user_count = 0;//count 赋值0  进行清零
    printf("清空成功!");   
    return 1;
}
 
 
/*
    查找函数
*/
int find_contacts(pContacts pcon)
{
    int ret = find_entry(pcon);//定义ret 接收find_entry的返回位置
    if (ret != -1)
    {
		printf("该联系人的信息为:\n");
        printf("姓名:%-5s\n", pcon->person[ret].name, NAME_LENGTH);
        printf("性别:%-5s\n", pcon->person[ret].sex, SEX_LENGTH);
        printf("年龄:%-5s\n", pcon->person[ret].age, AGE_LENGTH);
        printf("电话:%-5s\n", pcon->person[ret].tele, TELE_LENGTH);
        printf("地址:%-5s\n", pcon->person[ret].addr, ADDR_LENGTH);
        return 1;
    }
    else
    {
        printf("找不到该联系人\n");
        return -1;
    }
}
 
 
/*
    修改函数
*/
int modify_contacts(pContacts pcon)
{
    int ret = find_entry(pcon);//定义ret 接收find_entry的返回位置
    if (ret != -1)
    {   
		printf("请重新编辑该联系人信息:\n");
        printf("请输入姓名:");
        scanf_s("%s", pcon->person[ret].name, NAME_LENGTH);
        printf("请输入性别:");
        scanf_s("%s", pcon->person[ret].sex, SEX_LENGTH);
        printf("请输入年龄:");
        scanf_s("%s", pcon->person[ret].age, AGE_LENGTH);
        printf("请输入电话:");
        scanf_s("%s", pcon->person[ret].tele, TELE_LENGTH);
        printf("请输入地址:");
        scanf_s("%s", pcon->person[ret].addr, ADDR_LENGTH);
		printf("修改成功!");
        return 1;
    }
    else
    {
        printf("找不到该联系人\n");
        return -1;
    }
}
 
 
/*
    显示函数
*/
void show_contacts(pContacts pcon)
{
    int i = 0;
    printf("%10s\t%4s\t%3s\t%13s\t%10s\n","姓名","性别","年龄","电话","地址");
    for (i = 0;i< pcon->user_count;i++)
    {
    printf("%10s\t%4s\t%3s\t%13s\t%10s\n", pcon->person[i].name, pcon->person[i].sex, pcon->person[i].age,pcon->person[i].tele, pcon->person[i].addr);
    }
    printf("\n");
}

//排序函数
void sort_contacts(pContacts pcon)
{
	int i=0;
    int j=0;
	for(i=0;i<(pcon->user_count-1);i++)
	{
		
		for(j=0;j<(pcon->user_count-1)-i;j++)
		{
			if((strcmp(pcon->person[j].name,pcon->person[j+1].name))>0)
			{
				struct ContactsUser  tmp=pcon->person[j];
				pcon->person[j]=pcon->person[j+1];
				pcon->person[j+1]=tmp; 
				

			}
		}
	}
	printf("排序完成!");

}
test2.c

#include "contacts.h" 
 
/*
    主函数
*/
int main()
{
 
    int input = 1;   //定义一个输入  初始化
    struct Contacts user;
    user.user_count = 0;//为user_count进行初始化
 
    menu(); 
 
    while (input)
    {
        printf("\n  请选择数字编号:\n");
        scanf_s("%d", &input);
        switch (input)  //switch-case 使用不同的功能函数
        {
        case 1:
            add_contacts(&user);
            break;
        case 2:
            dele_contacts(&user);
            break;
        case 3:
            clear_contacts(&user);
            break;
        case 4:
            find_contacts(&user);
            break;
        case 5:
            modify_contacts(&user);
            break;
        case 6:
            show_contacts(&user);
            break;
        case 7:
            show_contacts(&user);
            break;
        case 0:
            printf("感谢使用!\n");
            break;
        default:
            printf("输入有误!\n"); 
            break;
        }
    }
 
    return 0;
}


come on!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值