#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义数据
struct Student
{
int id;
char name[16];
int scores[3];
};
int n;
int size = n * sizeof(Student);
Student* data = (Student*) malloc(size); // 数据源:存储所有数据
int count = 0; // 总个数
int input(Student* s)
{
printf("ID:");
scanf("%d",&s->id);
printf("Name:");
//gets(s->name);
scanf("%s",s->name);
printf("Score:");
int a, b, c;
scanf("%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 \tName \tScore \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];
printf("请输入个数:");
scanf("%d",&n);
printf("您可以输入%d个数据\n",n);
while(1)
{
printf(">");
scanf("%s", cmdline);
//printf("cmd: %s\n",cmdline);
// 退出
if(strcmp(cmdline,"exit") == 0)
{
printf("now exit...\n");
free(data);
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",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;
}
printf("Bad Input\n");
}
return 0;
}
int test()
{
Student s;
//input(&s);
s.id = 1024;
strcpy(s.name, "lvhao");
s.scores[0] = 70;
s.scores[1] = 80;
s.scores[2] = 90;
add(&s);
list_all();
return 0;
}