新手,写了一个班级成绩管理程序,有几点不会
希望大神能帮忙解决一下。下面是我写的代码,结构体数组一直搞不明白。希望大神能帮我分析一下。
另外,有个保存的函数我写不出来,能帮我补充一下么(一共就那么点积分了,真抱歉)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct chengji//构造体数组,也不太会,查的资料,后边跟的a[i]也不知道为什么总是错误的。 这个程序应该是N个学生的M门课程,然而弄不出来M门课程,所以改为三门
{
int xuehao;
char mingzi;
float kecheng[3];
};a[i];
int menu(){//显示界面
int x;
printf(" 班级成绩管理系统 \n");
printf("********************************************************************************\n");
printf("请选择系统功能项: \n");
printf(" a.成绩录入 b.成绩显示 c.成绩保存 d.成绩排序 e.成绩修改 f.成绩统计 g.退出系统\n");
printf("********************************************************************************\n");
for (;;){
printf("请输入 a ~ g 中的一个选项:");
scanf("%c",&x);
switch(x){
case 'a':printf("成绩录入");break;
case 'b':printf("成绩显示");break;
case 'c':printf("成绩保存");break;
case 'd':printf("成绩排序");break;
case 'e':printf("成绩修改");break;
case 'f':printf("成绩统计");break;
case 'g':printf("退出系统");break;
default:printf("输入错误,请重新输入");
}
return x;
}
}
void baocun(){//保存这个函数 我也不会写
}
void luru(){//对成绩进行录入,N个学生,三门课程:语 数 外。这不会,没写出来
int N,i,j;
char temp[N];
for(i=1;i<=N;i++){
printf("分别输入:\n姓名,学号,科目成绩:语,数,外:\n");
}
}
void paixu(){//对某科成绩进行排序
int i,j,t,N;
for(i=1;i<=N;i++)//N次比较
for(j=1;j<=N-i;j++)
if(a[i].kecheng[1]>a[i+1].kecheng[1]){
t=a[1].kecheng[1];a[i].kecheng[1]=a[i+1].kecheng[1];a[i+1].kecheng[1]=t;
}
printf("语文成绩排序结果:%s %d %.1f\n",a[i].mingzi,a[i].xuehao,a[i].kecheng[1]);
for(i=1;i<=N;i++)//N次比较
for(j=1;j<=N-i;j++)
if(a[i].kecheng[2]>a[i+1].kecheng[2]){
t=a[1].kecheng[2];a[i].kecheng[2]=a[i+1].kecheng[2];a[i+1].kecheng[2]=t;
}
printf("数学成绩排序结果:%s %d %.1f\n",a[i].mingzi,a[i].xuehao,a[i].kecheng[2]);
for(i=1;i<=N;i++)//N次比较
for(j=1;j<=N-i;j++)
if(a[i].kecheng[3]>a[i+1].kecheng[3]){
t=a[1].kecheng[3];a[i].kecheng[3]=a[i+1].kecheng[3];a[i+1].kecheng[3]=t;
}
printf("外语成绩排序结果:%s %d %.1f\n",a[i].mingzi,a[i].xuehao,a[i].kecheng[3]);
}
void xianshi(){//显示录入学生的成绩信息
int N;
for(int t=1;t<=N;t++){
printf("姓名 学号 语 数 外\n");
printf("%s %d %.1f %.1f %.1f\n",a[i].mingzi,a[i].xuehao,a[i].kecheng[1],a[i].kecheng[2],a[i].kecheng[3]);
if (a[i+1].xuehao==0) break;
}
}
void xiugai(){//修改成绩
int x,z,c,s,N;
printf ("请输入密码:");
scanf("%d",&x);
if(x==1234){//对密码进行判断
for (;;){//提取某个学生的信息
printf("输入要修改的学生号\n");
scanf("%d",&c);
for(int i=1;i<=N;i++){
if(c==a[i].xuehao){ s=i;
}
}
}
system("cls");//清屏
printf("请输入选择\n");
printf("%d %s %.1f %.1f %.1f\n",a[i].xuehao,a[i].mingzi,a[i].kecheng[1],a[i].kecheng[2],a[i].kecheng[3]);
for(;;){//对某一科目进行修改
printf ("1.语文 2.数学 3.外语 4.退出\n");
scanf("%d",&z);
if(z>=1&&z<=3){//修改语文成绩
if(z==1){
system("cls");
for(;;){
printf ("输入语文分数0~100:\n");
scanf("%f",&a[s].kecheng[1]);
if(a[s].kecheng[1]>=0&&a[s].kecheng[1]<=100) printf("修改成功\n");
}
}
if(z==2){
for(;;){
printf("输入数学分数0~100:\n");
scanf("%f",&a[s].kecheng[2]);
if(a[s].kecheng[2]>=0&&a[s].kecheng[2]<=100) printf("修改成功\n");
}
}
if(z==3){
for(;;){
printf("输入外语分数0~100:\n");
scanf("%f",&a[s].kecheng[3]);
if(a[s].kecheng[3]>=0&&a[s].kecheng[3]<=100) printf("修改成功\n");
}
}
if(z==4){
break;
}
}
}
}
else printf ("密码错误,请重新输入。\n");
}
void pinjun(){//各科平均成绩
float sum1=0,sum2=0,sum3=0,ave1,ave2,ave3;
int j=0,k=0,l=0,N;
for(int i=1;i<=N;i++){//计算平均成绩
sum1=sum1+a[i].kecheng[1]; j++;
sum2=sum2+a[2].kecheng[2]; k++;
sum3=sum3+a[3].kecheng[3]; l++;
}
ave1=sum1/j;ave2=sum2/k;ave3=sum3/l;
printf("语文的平均成绩:%.2f \n 数学的平均成绩:%.2f \n 外语的平均成绩:%.2f\n",ave1,ave2,ave3);
int m=0,n=0,p=0;
for(i=1;i<=N,i++){//计算超过的人数
while(a[i].kecheng[1]>ave1) m++;
while(a[i].kecheng[2]>ave2) n++;
while(a[i].kecheng[3]>ave3) p++;
}
printf("超过语文平均成绩的人数是:%d\n 超过数学平均成绩的人数是:%d\n 超过外语平均成绩的人数是:%d\n",m,n,p);
}
int bye(){//退出系统,也不懂
int ch;
ch=getchar();
return 0;
}
int main(){
for (;;){
switch(menu()){
case 'a':luru();//成绩录入
system("pause");//按任意键继续
system("cls");
break;
case 'b':xianshi();//成绩显示
system("pause");
system("cls");
break;
case 'c':baocun();//成绩保存 不会写。
system("pause");
system("cls");
break;
case 'd':paixu();//成绩排序
system("pause");
system("cls");
break;
case 'e':xiugai();//成绩修改
system("pause");
system("cls");
break;
case 'f':pinjun();//成绩统计
system("pause");
system("cls");
break;
case 'g':bye();//退出系统
return 0;
}
}
}
//技术要求:
//题目9:班级成绩管理系统
//对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。功能要求:
//(1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 (2)本系统显示这样的菜单:
// 请选择系统功能项: a、成绩录入 b、成绩显示 c、成绩保存 d、成绩排序
//e、成绩修改(要求先输入密码) f、成绩统计 g、退出系统
//1)显示每门课程成绩最高的学生的基本信息 2)显示每门课程的平均成绩
//3)显示超过某门课程平均成绩的学生人数
//(4)执行一个具体的功能之后,程序将重新显示菜单。 (5)将学生成绩保存到文件中。