用C语言编一个成绩管理程序
要求:自定义一个学生表结构:学号、姓名、年龄、数学、英语、C#成绩。输入n(>20)个学生数据,要求每个学生的总成绩,统计各科不及格的人数和名单等功能。
追问:就是帮我编一个程序啊。
要求:自定义一个学生表结构:学号、姓名、年龄、数学、英语、C#成绩。输入n(>20)个学生数据,要求每个学生的总成绩,统计各科不及格的人数和名单等功能。
追问:就是帮我编一个程序啊。
答案:参考答案:#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*其它说明*/
#include "string.h" /*字符串函数*/
#include "conio.h" /*屏幕操作函数*/
#include "ctype.h" /*字符操作函数*/
#define N 3
#define M 20//可以把M扩大
typedef struct z1 /*定义数据结构*/
{
int score[N];//三门科目
int sum;char 易做图;//性别
int age;//年龄
char name[10];//姓名
int num;//学号
float average;
struct z1 *next;
/*score数组元素代表数学1,英语2,c#3*/
}STUDENT;/*以下是函数原型*/
STUDENT *Input(); /* 输入学生成绩*/
void Search(STUDENT *h); /*查找学生成绩*/
void Stat(STUDENT *h); /*统计学生成绩*/
void Modif(STUDENT *h);/*修改学生成绩*/
menu_select();/*菜单函数*/void main()
{
STUDENT *Head=NULL; /*链表定义头指针*/
for(;;) /*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{ /*值不同,执行的函数不同,break 不能省略*/
case 1:Head=Input();break; /*输入学生成绩*/
case 2:Stat(Head);break; /*统计平均成绩*/
case 3:Search(Head);break; /*查找学生成绩*/
case 4:Modif(Head);break; /*修改学生成绩*/
case 5:exit(0); /*如菜单返回值为5程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
int c;
printf("***********学生成绩管理学院**************\n");printf("********输入学生成绩********\n");
printf("********统计平均成绩********\n");
printf("********查找学生成绩********\n");
printf("********修改学生成绩********\n");
printf("******** 退出系统 ********\n");
do
{
printf("\n请输入你的选择!!(1~5):"); /*在菜单窗口外显示提示信息*/
scanf("%d",&c); /*输入选择项*/
}
while(c<1||c>5); /*选择项不在1~5之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT *Input() /* 输入学生成绩*/
{
int i,j;
int s[M]={0};
STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/
printf("*****输入学生成绩*******\n");
for(j=0;j<M;j++)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info) /*如果指针info为空*/
{
printf("\n内存溢出!!!\n"); /*输出内存溢出*/
return NULL; /*返回空指针*/
}
printf("姓名:");
scanf("%s",info->name);
if(info->name[0]=='@') break;//输入@录入完毕
do{
printf("性别(男M女W):");
}while((info->易做图=getchar())!='M'&&(info->易做图=getchar())!='W');do{
printf("学号(111-999之间):");
scanf("%d",&info->num);
}while(info->num<111||info->num>999);
for(i=0;i<N;i++) /*N门课程循环N次*/
{
do{
printf("现在录入第%d位学生的成绩!!!\n",j+1);printf("第[%d]门科目成绩:",i+1); /*提示输入第几门课程*/
scanf("%d",&info->score[i]); /*输入成绩*/
printf("\n");
if(info->score[i]>100||info->score[i]<0) /*确保成绩在0~100之间*/
printf("数据错误!!!!\n"); /*出错提示信息*/
}while(info->score[i]>100||info->score[i]<0);
s[j]=s[j]+info->score[i]; /*累加各门课程成绩*/
}
info->sum=s[j]; /*将总分保存*/
info->average=(float)s[j]/N; /*求出平均值*/
info->next=h; /*将头结点做为新输入结点的后继结点*/
h=info; /*新输入结点为新的头结点*/
}
printf("********录入完毕**********\n");
printf("\n");
return(h); /*返回头指针*/
}
void Search(STUDENT *h) /*查找学生成绩*/
{
int i=0,choose;
STUDENT *h1;
h1=h;
printf("请输入要查询的科目!!\n");
printf("*******************\n");
printf("1:数学\n");
printf("2:英语\n");
printf("3:C#\n");
printf("\n");
printf("请输入你的选择!!");
scanf("%d",&choose);
if(choose==1)
{
printf("********学生数学成绩************\n");
while(h1!=NULL)
{
printf("第%d位学生的数学成绩为:%d",i+1, h1->score[0]);
printf("\n");
h1=h1->next;
i++;
}
printf("*********************************\n");
}
if(choose==2)
{
printf("********学生英语成绩************\n");
while(h1!=NULL)
{
printf("第%d位学生的英语成绩为:%d",i+1,h1->score[1]);
printf("\n");
h1=h1->next;
i++;
}
printf("*********************************\n");
}
if(choose==3)
{
printf("********学生C#成绩************\n");
while(h1!=NULL)
{
printf("第%d位学生的C语言成绩为:%d",i+1,h1->score[3]);
printf("\n");
h1=h1->next;
i++;
}
printf("*********************************\n");
}
}
void Stat(STUDENT *h) /*统计学生成绩*/
{
int i=0;
STUDENT *h1;
h1=h;
printf("*****平均成绩*****\n");
while(h1!=NULL)
{
printf("第%d位学生成绩如下!!!\n",i+1);
printf("数学成绩:%d\n",h1->score[0]);
printf("英语成绩:%d\n",h1->score[1]);
printf("C#成绩:%d\n",h1->score[3]);
printf("总平均分:%f\n",h1->average);
printf("总分:%d\n",h1->sum);
printf("*******************\n");
h1=h1->next;
i++;
}
}
void Modif(STUDENT *h)/*修改学生成绩*/
{
int choose;
int i=0,k=0;
&