实现一个简单的通讯录

来源:互联网 发布:航天飞机知乎 编辑:程序博客网 时间:2024/05/29 21:35


实现一个通讯录:
通讯录可以用来存储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 1000typedef 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;}

这里写图片描述

原创粉丝点击