10-1. 初识结构化数据

  • 学习人数 30K+
  • 适合所有人群学习
avatar
林耿亮

你好编程主讲老师

1. 人员信息管理系统

这次,我们来弄一个小型的人员信息管理系统。它可以添加、删除、查看人员信息。

每一个人员信息由下面4个部分组成。

  1. 姓名
  2. 性别
  3. 身高
  4. 体重

我们先实现一个小目标,管理3个人的信息。

姓名 性别 身高 体重
Timmy 1 170.00 60.00
David 1 175.00 65.00
Jane 2 165.00 55.00

其中,1代表男生,2代表女生。

#include <stdio.h>

int main()
{
    //  第一个人
    char name1[20];
    int gender1;
    double height1;
    double weight1;
    //  第二个人
    char name2[20];
    int gender2;
    double height2;
    double weight2;
    //  第三个人
    char name3[20];
    int gender3;
    double height3;
    double weight3;

    //  输入人员信息
    printf("input name gender height weight:\n");
    scanf("%s %d %lf %lf", name1, &gender1, &height1, &weight1);
    scanf("%s %d %lf %lf", name2, &gender2, &height2, &weight2);
    scanf("%s %d %lf %lf", name3, &gender3, &height3, &weight3);

    //  显示人员信息
    printf("display personal information\n");
    printf("name gender height weight:\n");
    printf("%s %d %.2f %.2f\n", name1, gender1, height1, weight1);
    printf("%s %d %.2f %.2f\n", name2, gender2, height2, weight2);
    printf("%s %d %.2f %.2f\n", name3, gender3, height3, weight3);

    return 0;
}

使用局部变量存储信息

上面的代码为每个人都声明了4个变量来存储个人信息。如果需要添加更多的人员,则需要在代码里添加更多的变量。灵活性很差。

...
    //  第一个人
    char name1[20];
    int gender1;
    double height1;
    double weight1;
...
    //  第N个人
    char nameN[20];
    int genderN;
    double heightN;
    double weightN;
...

如果需要输入N个人的信息,那么代码将变得非常冗长。

2. 使用数组存储数据

让我们将单个的变量改为数组,增加一些灵活性。

我们暂时设置数组的长度为10,最多可以容纳10个人的数据。

//  使用数组存储人员信息
//  姓名数组,每个名字最多20个字节,最多10个名字。
char name[10][20];
int gender[10];
double height[10];
double weight[10];

另外,我们使用数组配合上循环来录入和显示数据。在这之前,我们需要知道目前一共有多少人。

//  人员数量
int numOfPerson = 0;
//  有多少人?
printf("How many people?\n");
scanf("%d", &numOfPerson);

现在一共有3个人,输入3后。开始输入3个人的详细信息,接着程序将这3个人的信息再显示出来。

//  输入人员信息
printf("input name gender height weight:\n");
for(int i = 0; i < numOfPerson; i++)
{
    scanf("%s %d %lf %lf", name[i], &gender[i], &height[i], &weight[i]);
}

//  显示人员信息
printf("display personal information\n");
printf("name gender height weight:\n");
for(int i = 0; i < numOfPerson; i++)
{
    printf("%s %d %.2f %.2f\n", name[i], gender[i], height[i], weight[i]);
}

完整的代码如下:

#include <stdio.h>

int main()
{
    //  使用数组存储人员信息
    //  姓名数组,每个名字最多20个字节,最多10个名字。
    char name[10][20];
    int gender[10];
    double height[10];
    double weight[10];

    //  人员数量
    int numOfPerson = 0;

    //  有多少人?
    printf("How many people?\n");
    scanf("%d", &numOfPerson);

    //  输入人员信息
    printf("input name gender height weight:\n");
    for(int i = 0; i < numOfPerson; i++)
    {
        scanf("%s %d %lf %lf", name[i], &gender[i], &height[i], &weight[i]);
    }

    //  显示人员信息
    printf("display personal information\n");
    printf("name gender height weight:\n");
     for(int i = 0; i < numOfPerson; i++)
    {
        printf("%s %d %.2f %.2f\n", name[i], gender[i], height[i], weight[i]);
    }

    return 0;
}

使用数组存储信息

现在灵活性稍微提高一些了。我们使用数组来存储数据,数组长度为10。那么,我们最多可以存储10个人员的信息。首先,输入总人员数,例如目前有3个人。之后,再进行输入人员的详细信息。

这段代码暂时只能一次性输入所有的人员信息,若以后人员数会增加了,无法继续追加人员信息。现在,我们把这个程序做得更加通用化。加上一些交互,使得程序更加智能。