c语言_通讯录(初级版)

本文介绍了一个简单的基于控制台的通讯录程序,使用C语言实现。该程序具备添加、删除、修改联系人信息及查找和显示所有联系人等功能。

这是一个简单的通讯录(实现方案是初级版,并且只能在程序运行期间存在(没有写入文件))(以后还会写一个用动态内存分配+实现文件存储的版本)

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>
#pragma warning(disable:4996)

struct address
{
    char name[20];
    char sex[10];
    int age;
    char phonen[15];
    char site[40];

}people[1000];

int main()
{   
    int i = 0;//用于计数
    char m[20] = { 0 };
    int option = 0;
    printf("###      这是一个通 讯 录^-^    ###\n");

    while (1)
    {
        printf("###-----------------------------###\n");
        printf("###      1.>查找指定联系人      ###\n");
        printf("###-----------------------------###\n");
        printf("###      2.>修改指定联系人      ###\n");
        printf("###-----------------------------###\n");
        printf("###      3.>删除指定联系人      ###\n");
        printf("###-----------------------------###\n");
        printf("###      4.>添加指定联系人      ###\n");
        printf("###-----------------------------###\n");
        printf("###      5.>显示所有联系人      ###\n");
        printf("###-----------------------------###\n");
        printf("###      6.>删除所有联系人      ###\n");
        printf("###-----------------------------###\n");
        printf("###      7.>排序所有联系人      ###\n");
        printf("###-----------------------------###\n");
        printf("###      8.>退出通讯录          ###\n"); 
        printf("###-----------------------------###\n");
        printf("\n请选择要进行的操作:>");
        scanf("%d", &option);
        fflush(stdin);
        switch (option)
        {
        case 1:

            printf("\n\n\t输入要查找的姓名:>");
            gets(m);//因为gets函数可以接收空格而scanf函数不可以

        /*
        **这里使用了一个简单的遍历的算法,也可以封
        **装一个函数,用更高效的查找算法实现
        */
            for (; i < 1000; i++)
            {
                if (strcmp(people[i].name, m) == 0)
                {
                    printf("\n\t姓名:%s\n\t性别:%s\n\t年龄:%d\n\t电话:%s\n\t住址:%s\n", people[i].name,\
                    people[i].sex, people[i].age, people[i].phonen, people[i].site);
                    break;
                }
            }
            if (1000==i)
                printf("\t没有找到该联系人!\n");
            break;
    case 2:
        /*
        **这里实现的是一个基本方案,目前一次只能修改一项内容,并且要重新开始
        **才可以修改另一项或者多项内容。以后会再次改进这里的功能!
        */
        printf("\n\n\t请输入要修改的联系人姓名:>");
        gets(m);
        for (i=0;i < 1000;i++)
        {
            if (strcmp(people[i].name, m) == 0)
            {
                int n = 0;
                printf("请选择要修改的信息:\n\t1.name\n\t2.sex\n\t3.age\n\t4.phone number\n\t5.site\n\t");
                scanf("%d", &n);
                fflush(stdin);
                switch (n)
                {
                case 1:
                    printf("请输入修改后的内容:");
                    char arr[20];
                    gets(arr);
                    strcpy(people[i].name, arr);
                    printf("修改成功!\n");
                    break;
                case 2:
                    printf("\n\t请输入修改后的内容:");
                    gets(arr);
                    strcpy(people[i].sex, arr);
                    printf("修改成功!\n");
                    break;
                case 3:
                    printf("\n\t请输入修改后的内容:");
                    scanf("%d", &people[i].age);
                    fflush(stdin);
                    printf("修改成功!\n");
                    break;
                case 4:
                    printf("\n\t请输入修改后的内容:");
                    gets(arr);
                    strcpy(people[i].phonen, arr);
                    printf("修改成功!\n");
                    break;
                case 5:
                    printf("\n\t请输入修改后的内容:");
                    gets(arr);
                    strcpy(people[i].site, arr);
                    printf("修改成功!\n");
                    break;
                }
                break;
            }
        }
        if (1000==i)
            printf("\t该联系人不存在!\n");
        break;
    case 3:
        printf("\n\n\t请输入要删除的联系人姓名:>");
        gets(m);
        for (i=0; i < 1000; i++)
        {
            if (strcmp(people[i].name, m) == 0)
            {
                strcpy(people[i].name, "\0");
                strcpy(people[i].sex, "\0");
                people[i].age = 0;
                strcpy(people[i].site, "\0");
                strcpy(people[i].phonen, "\0");
                printf("删除成功!\n");
                break;
            }
        }
        if (1000 == i)
            printf("\t该联系人不存在!\n");
        break;
    case 4:

        for (i=0;i < 1000; i++)
        {
            char num[20] = { 0 };
            if (strcmp(people[i].name,num)==0)
            {
                printf("\n\n\t请输入要添加联系人的姓名:>");
                 char arr[20] = { 0 };
                 gets(arr);
                 strcpy(people[i].name, arr);       
                printf("\t请输入要添加联系人的性别:>");
                 gets(arr);
                 strcpy(people[i].sex, arr);
                printf("\t请输入要添加联系人的年龄:>");
                 scanf("%d", &people[i].age);
                 fflush(stdin);
                printf("\t请输入要添加联系人的电话号码:>");
                 gets(arr);
                 strcpy(people[i].phonen, arr);
                printf("\t请输入要添加联系人的住址:>");
                 gets(arr);
                 strcpy(people[i].site, arr);
                printf("\t添加成功!\n");
                break;
            }   
        }
        if (1000 == i)
            printf("添加失败,通讯录已满!\n");
        break;
    case 5:
        for (i = 0;i < 1000; i++)
        {
            if (strcmp(people[i].name, m) != 0)
            {
                printf("\n\t姓名:%s\n\t性别:%s\n\t年龄:%d\n\t电话:%s\n\t住址:%s\n", people[i].name, \
                people[i].sex, people[i].age, people[i].phonen, people[i].site);
            }
        }
        break;
    case 6:
        for (i = 0; i < 1000; i++)
        {
            if (strcmp(people[i].name, m) != 0)
            {
                strcpy(people[i].name, "\0");
                strcpy(people[i].sex, "\0");
                people[i].age = 0;
                strcpy(people[i].site, "\0");
                strcpy(people[i].phonen, "\0");
            }
        }
        if (1000 == i)
            printf("删除成功!\n");
        break;
    case 7: 
        //这块用qsort()给非空姓名数组排序即可
        break;
    case 8:
        return 0;
        break;
    default:
        printf("输入错误!重新选择!");
        break;
    }
}

system("pause");
return 0;

}

一、题目:通讯录管理 二、目的与要求 1. 目的: (1)基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握C语言的基本知识和技能; (3)能够利用所学的基本知识和技能,解决简单的程序设计问题 2. 要求 基本要求: 1. 要求利用C语言面向过程的编程思想来完成系统的设计; 2. 突出C语言的函数特征,以多个函数实现每一个子功能; 3. 画出功能模块图; 4. 具有清晰的程序流程图和数据结构的详细定义; 5. 熟练掌握C语言对文件的各种操作。 创新要求: 在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同 三、信息描述 有关该系统基本信息的描述,如:姓名、电话、城市和邮编等。 四、功能描述 1. 名单基本信息(姓名,城市,电话,邮编等)的录入,并存放在文件当中。 2. 基本信息的查询与修改。 3. 记录的添加和删除。 4. 对同一类型记录的查找:如查找同一城市的记录或同一省份的记录。 五、解决方案 1. 分析程序的功能要求,划分程序功能模块。 2. 画出系统流程图。 3. 代码的编写。定义数据结构和各个功能子函数。 4. 程序的功能调试。 5. 完成系统总结报告以及使用说明书 六、进度安排 此次课程设计时间为一周或两周,分四个阶段完成: 1. 分析设计阶段。指导教师应积极引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。 2. 编码调试阶段:根据设计分析方案编写C代码,然后调试该代码,实现课题要求的功能。 3. 总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编码、测试的步骤和内容。 4. 考核阶段。 七、撰写课程设计报告或课程设计总结 课程设计报告要求: 总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值