10.4节 结构体项目应用实例
项目需求->实现学生成绩录入和查询
邵发
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
定义数据
struct Student
{
int id;
char name[16];
int scores[3];
};
Student data[100];//数据源
int count = 0;//个数
//定义一个用户输入函数
int input(Student *s)
{
printf("ID: ");
scanf_s("%d", &s->id);
printf("Name: ");
scanf_s("%s", s->name);
printf("Scores: ");
int a = 0, b = 0, c = 0;
scanf_s("%d,%d,%d", &a, &b, &c);
s->scores[0] = a;
s->scores[1] = b;
s->scores[2] = c;
return 0;
}
///保存到数据源
int add(const Student *s)
{
data[count] = *s;
count++;
return 0;//总是成功
}
///打印所有信息
void list_all()
{
printf("ID; \tNmae: \tScores \n");
printf("------------------------------\n");
for (int i = 0; i < count; i++)
{
Student* s = &data[i];
printf("%d \t%s \t%d,%d,%d \n",
s->id,
s->name,
s->scores[0],
s->scores[1],
s->scores[2]);
}
printf("------------------------------\n");
}
//按照名称查找
Student* find(const char* name)
{
for (int i = 0; i < count; i++)
{
Student* s = &data[i];
if (strcmp(name, s->name) == 0)
return s;
}
return NULL;
}
///菜单栏
int main()
{
///命令行,菜单处理
char cmdline[128];
while (1)
{
printf("add\tlist\tcount\tfind\n");
printf("****************************\n");
printf(">");
scanf_s("%s",cmdline);
//退出,strcmp函数,输入exit\q时退出
if (strcmp(cmdline, "q") == 0)
{
printf("now exit...\n");
break;
}
///菜单
if (strcmp(cmdline, "add") == 0)
{
Student s;
input(&s);
add(&s);
continue;
}
///菜单
if (strcmp(cmdline, "list") == 0)
{
list_all();
continue;
}///菜单
if (strcmp(cmdline, "count") == 0)
{
printf("total: %d \n", count);
continue;
}///菜单
if (strcmp(cmdline, "find") == 0)
{
printf("Enter name: ");
char name[16];
scanf_s("%s", name);
Student* s = find(name);
if (s)
{
printf("Found: ID:%d Name:%s Score:%d,%d,%d\n",
s->id, s->name,
s->scores[0],
s->scores[1],
s->scores[2]);
}
else
{
printf("not found\n");
}
continue;
}
}
}
///主函数
int test()
{
Student s;
input(&s);
add(&s);
list_all();
return 0;
}