#include<string.h>
extern int count=0;
void input();
void search();
void alter();
void remove();
void grade();
int menu_select();
struct student;
extern struct student
{
char name[20];
char num[20];
int math,chinese;
int sum;
}
int main()
{
struct student stu[100];
for(;;)
{
switch(menu_select())
{
case 1:
input();
break;
case 2:
search();
break;
case 3:
alter();
break;
case 4:
remove();
break;
case 5:
grade();
break;
case 6:
printf("Goodbye\n");
exit(0);
}
}
return 0;
}
int menu_select()
{
char s;
int cn;
printf("1. 输入学生成绩信息\n");
printf("2. 查询学生成绩信息\n");
printf("3. 删除学生成绩信息\n");
printf("4. 修改学生成绩信息\n");
printf("5. 统计学生成绩信息\n");
printf("6. 退出系统\n");
printf("Please input 1-6:");
do
{
s=getchar();
cn=(int)s-48;
}while(cn<1||cn>6);
return cn;
}
void input()
{
int len;
do
{
printf("请输入学生的学号(12位)\n");
scanf("%s",&stu[count].num);
len=strlen(stu[count].num);
}while(len<13);
printf("请输入学生的姓名\n");
scanf("%s",&stu[count].name);
printf("请依次输入学生的数学、语文成绩\n");
scanf("%d,%d",&stu[count].math,&stu[count].chinese);
stu[count].sum=stu[count].math+stu[count].chinese;
count++;
}
void search()
{
char s[20];
int j;
if(count==0)
{
printf("当前并未存储学生信息,无法查询");
return;
}
else
{
printf("请输入你想查询学生的学号\n");
scanf("%s",&s);
fflush(stdin);
for(j=0;j<count;j++)
{
if(strcmp(stu[j].num,s)==0)
{
printf("姓名:%s\n",stu[j].name);
printf("学号:%s\n",stu[j].num);
printf("数学成绩:%d\n",stu[j].math);
printf("语文成绩:%d\n",stu[j].chinese);
}
}
}
}
void alter();
{
char s[20];
int j,course;
if(count==0)
{
printf("当前并未存储学生信息,无法修改!");
return;
}
else
{
printf("请输入你想要修改的学生学号:\n");
scanf("%s",&s);
fflush(stdin);
for(j=0;j<count;j++)
{
if(strcmp(stu[j].num,s)==0)
{
printf("请问你要修改哪个课程的成绩:1.数学 2.语文\n");
scanf("%d",&course);
printf("请输入修改后的成绩:\n");
soitch(course)
{
case 1:scanf("%d",&stu[j].math);break;
case 2:scanf("%d",&stu[j].chinese;break;
default:printf("无效的选择,请重新输入!\n");break;
}
}
}
}
}
void remove()
{
int choice;
if(count==0)
{
printf("当前并未存储学生信息,无法删除!\n");
return;
}
else
{
int j,index=0,k=count;
char s[20];
printf("请输入你想要删除的学生学号:\n");
scanf("%s",&s);
fflush(stdin);
for(j=0;j<count;j++)
{
if(strcmp(stu[j].num,s)==0)
{
for(j=index;j<count;j++)
{
stu[j]=stu[j+1];
count--;
if(count<k)
printf("你已删除成功!\n");
}
index++;
}
}
}
}
void grade()
{
int choice,i,j,k,amount=0,max=0,min=0,index,x=0;
float pass=0.0;
printf("请选择要进行统计的课程:1.数学 2.语文\n");
printf("若想查询总分排名,请输入3\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
{
min=stu[0].math;
for(i=0;i<count;i++)
{
amount+=stu[i].math;
if(stu[i].math>max)
max=stu[i].math;
if(stu[i].math<min)
min=stu[i].math;
if(stu[i].math>=60)
x++;
}
float average=(float)amount/count;
pass=(float)x/count;
printf("数学平均分为:%d\n",average);
printf("数学最高分为:%d\n",max);
printf("数学最低分为:%d\n",min);
printf("数学的及格率为:%d\n",pass);
}
break;
case 2:
{
min=stu[0].chinese;
for(i=0;i<count;i++)
{
amount+=stu[i].chinese;
if(stu[i].math>max)
max=stu[i].chinese;
if(stu[i].chinese<min)
min=stu[i].chinese;
if(stu[i].chinese>=60)
x++;
}
float average=(float)amount/count;
pass=(float)x/count;
printf("语文平均分为:%d\n",average);
printf("语文最高分为:%d\n",max);
printf("语文最低分为:%d\n",min);
printf("语文的及格率为:%d\n,pass);
}
break;
case 3:
{
for(i=0;i<count;i++)
{
i=index;
for(k=i+1;k<count;k++)
{
if(stu[k].sum>stu[index].sum)
{
stu[k].sum=j;
stu[k].sum=stu[index].sum;
stu[index].sum=j;
}
}
}
for(i=0;i<count;i++)
{
printf("第%d名的总分为:%d\n",i+1,stu[i].sum);
}
}break;
default:
printf("输入错误!请重新输入!");
}
错误:
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(28) : error C2628: 'student' followed by 'int' is illegal (did you forget a ';'?)
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(52) : error C2065: 'exit' : undeclared identifier
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(57) : error C2440: 'return' : cannot convert from 'const int' to 'struct student'
No constructor could take the source type, or constructor overload resolution was ambiguous
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(58) : warning C4508: 'main' : function should return a value; 'void' return type assumed
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(92) : error C2065: 'stu' : undeclared identifier
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(92) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(92) : error C2228: left of '.num' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(94) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(94) : error C2228: left of '.num' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(99) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(99) : error C2228: left of '.name' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(101) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(101) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(101) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(101) : error C2228: left of '.chinese' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(102) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(102) : error C2228: left of '.sum' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(102) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(102) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(102) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(102) : error C2228: left of '.chinese' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(136) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(136) : error C2228: left of '.num' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(139) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(139) : error C2228: left of '.name' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(141) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(141) : error C2228: left of '.num' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(143) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(143) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(145) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(145) : error C2228: left of '.chinese' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(153) : error C2447: missing function header (old-style formal list?)
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(247) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(247) : error C2228: left of '.num' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(255) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(255) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(255) : error C2106: '=' : left operand must be l-value
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(292) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(292) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(296) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(296) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(298) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(298) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(299) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(299) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(301) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(301) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(302) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(302) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(304) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(304) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(320) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(320) : error C2228: left of '.chinese' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(324) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(324) : error C2228: left of '.chinese' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(326) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(326) : error C2228: left of '.math' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(327) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(327) : error C2228: left of '.chinese' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(329) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(329) : error C2228: left of '.chinese' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(330) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(330) : error C2228: left of '.chinese' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(332) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(332) : error C2228: left of '.chinese' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(342) : error C2001: newline in constant
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(343) : error C2143: syntax error : missing ')' before '}'
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(343) : error C2143: syntax error : missing ';' before '}'
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(353) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(353) : error C2228: left of '.sum' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(353) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(353) : error C2228: left of '.sum' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(355) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(355) : error C2228: left of '.sum' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(356) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(356) : error C2228: left of '.sum' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(356) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(356) : error C2228: left of '.sum' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(357) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(357) : error C2228: left of '.sum' must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(363) : error C2109: subscript requires array or pointer type
D:\Microsoft Visual Studio\MyProjects\studentmenu\menu.cpp(363) : error C2228: left of '.sum' must have class/struct/union type
执行 cl.exe 时出错.
1、结构体后面没有分号,要加上分号
2、stu变量要定义成全局变量,不然其他方法没法访问
3、要包含stdio.h头文件,否则找不到stdin变量
4、alter方法后面不要加分号,不然就变成了声明,把分号去掉就行
5、输入字符串不用取地址,把&去掉
6、switch拼错了,chinese后面少了括号
7、printf里面少了个双引号
8、最后还少了}
9、remove可能会和标准库里的remove函数冲突,建议改成remove_stu
10、完整代码
#include<string.h>
#include<stdio.h>
extern int count = 0;
void input();
void search();
void alter();
void remove_stu(); //void remove();
void grade();
int menu_select();
struct student;
extern struct student
{
char name[20];
char num[20];
int math, chinese;
int sum;
};
struct student stu[100];
int main()
{
for (;;)
{
switch (menu_select())
{
case 1:
input();
break;
case 2:
search();
break;
case 3:
alter();
break;
case 4:
remove_stu();
break;
case 5:
grade();
break;
case 6:
printf("Goodbye\n");
exit(0);
}
}
return 0;
}
int menu_select()
{
char s;
int cn;
printf("1. 输入学生成绩信息\n");
printf("2. 查询学生成绩信息\n");
printf("3. 删除学生成绩信息\n");
printf("4. 修改学生成绩信息\n");
printf("5. 统计学生成绩信息\n");
printf("6. 退出系统\n");
printf("Please input 1-6:");
do
{
s = getchar();
cn = (int)s - 48;
} while (cn < 1 || cn>6);
return cn;
}
void input()
{
int len;
do
{
printf("请输入学生的学号(12位)\n");
scanf("%s", &stu[count].num);
len = strlen(stu[count].num);
} while (len < 13);
printf("请输入学生的姓名\n");
scanf("%s", &stu[count].name);
printf("请依次输入学生的数学、语文成绩\n");
scanf("%d,%d", &stu[count].math, &stu[count].chinese);
stu[count].sum = stu[count].math + stu[count].chinese;
count++;
}
void search()
{
char s[20];
int j;
if (count == 0)
{
printf("当前并未存储学生信息,无法查询");
return;
}
else
{
printf("请输入你想查询学生的学号\n");
scanf("%s", s); //scanf("%s", &s);
fflush(stdin);
for (j = 0; j < count; j++)
{
if (strcmp(stu[j].num, s) == 0)
{
printf("姓名:%s\n", stu[j].name);
printf("学号:%s\n", stu[j].num);
printf("数学成绩:%d\n", stu[j].math);
printf("语文成绩:%d\n", stu[j].chinese);
}
}
}
}
void alter()
{
char s[20];
int j, course;
if (count == 0)
{
printf("当前并未存储学生信息,无法修改!");
return;
}
else
{
printf("请输入你想要修改的学生学号:\n");
scanf("%s", &s);
fflush(stdin);
for (j = 0; j < count; j++)
{
if (strcmp(stu[j].num, s) == 0)
{
printf("请问你要修改哪个课程的成绩:1.数学 2.语文\n");
scanf("%d", &course);
printf("请输入修改后的成绩:\n");
switch(course)//soitch(course)
{
case 1:scanf("%d", &stu[j].math); break;
case 2:scanf("%d", &stu[j].chinese); break; //case 2:scanf("%d", &stu[j].chinese; break;
default:printf("无效的选择,请重新输入!\n"); break;
}
}
}
}
}
void remove_stu()
{
int choice;
if (count == 0)
{
printf("当前并未存储学生信息,无法删除!\n");
return;
}
else
{
int j, index = 0, k = count;
char s[20];
printf("请输入你想要删除的学生学号:\n");
scanf("%s", &s);
fflush(stdin);
for (j = 0; j < count; j++)
{
if (strcmp(stu[j].num, s) == 0)
{
for (j = index; j < count; j++)
{
stu[j] = stu[j + 1];
count--;
if (count < k)
printf("你已删除成功!\n");
}
index++;
}
}
}
}
void grade()
{
int choice, i, j, k, amount = 0, max = 0, min = 0, index, x = 0;
float pass = 0.0;
printf("请选择要进行统计的课程:1.数学 2.语文\n");
printf("若想查询总分排名,请输入3\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
{
min = stu[0].math;
for (i = 0; i < count; i++)
{
amount += stu[i].math;
if (stu[i].math > max)
max = stu[i].math;
if (stu[i].math < min)
min = stu[i].math;
if (stu[i].math >= 60)
x++;
}
float average = (float)amount / count;
pass = (float)x / count;
printf("数学平均分为:%d\n", average);
printf("数学最高分为:%d\n", max);
printf("数学最低分为:%d\n", min);
printf("数学的及格率为:%d\n", pass);
}
break;
case 2:
{
min = stu[0].chinese;
for (i = 0; i < count; i++)
{
amount += stu[i].chinese;
if (stu[i].math > max)
max = stu[i].chinese;
if (stu[i].chinese < min)
min = stu[i].chinese;
if (stu[i].chinese >= 60)
x++;
}
float average = (float)amount / count;
pass = (float)x / count;
printf("语文平均分为:%d\n", average);
printf("语文最高分为:%d\n", max);
printf("语文最低分为:%d\n", min);
printf("语文的及格率为:%d\n", pass);//printf("语文的及格率为:%d\n,pass);
}
break;
case 3:
{
for (i = 0; i < count; i++)
{
i = index;
for (k = i + 1; k < count; k++)
{
if (stu[k].sum > stu[index].sum)
{
stu[k].sum = j;
stu[k].sum = stu[index].sum;
stu[index].sum = j;
}
}
}
for (i = 0; i < count; i++)
{
printf("第%d名的总分为:%d\n", i + 1, stu[i].sum);
}
}break;
default:
printf("输入错误!请重新输入!");
}
}
11、运行截图
1、在结构体的位置错了
2、每个方法都要返回。
extern struct student
{
char name[20];
char num[20];
int math,chinese;
int sum;
} ; /* 这里缺少个 ;分号 */