1. 人员信息管理系统
这次,我们来弄一个小型的人员信息管理系统。它可以添加、删除、查看人员信息。
每一个人员信息由下面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个人。之后,再进行输入人员的详细信息。
这段代码暂时只能一次性输入所有的人员信息,若以后人员数会增加了,无法继续追加人员信息。现在,我们把这个程序做得更加通用化。加上一些交互,使得程序更加智能。