编写一个菜单驱动的学生成绩管理程序。要求如下: 能输入并显示n个学生的m门考试科目的成绩、总分和平均分

编写一个菜单驱动的学生成绩管理程序。要求如下:
能输入并显示n个学生的m门考试科目的成绩、总分和平均分。
按总分由高到低进行排序。
任意输入一个学号,能显示该学生的姓名、各门功课的成绩
对程序进行测试,测试时应注意对各种边缘情况进行测试。
要求程序设计尽量简单,能满足要求即可。由于这个程序在百度上比较容易找到,很明显,那些都不是我想要的。回答者尽量自己设计一个!用C语言做!数组、结构等!

1、采用逐个赋值法进行编程。首先打开编辑器创建工程并新建内容,输入标准输入输出头文件及main()主函数

2、定义总分与平均分变量。然后定义是个数值变量,并分别对其进行赋值。编辑计算总分与平均分的程序语句。输出计算求得的总分与平均分。

3、首先打开编辑器创建工程并新建内容,然后在主函数中进行编辑。

4、先定义总分和平均分变量以及数组元素的变量。定义数组a[],根据问题进行赋值。利用for循环控制变量i遍历数组元素并求累加和。求得累加和后进行平均计算。输出计算求得的总分与平均分。

5、#include<stdio.h>main(){ int sum,average; //定义总分与平均分变量 int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;//定义10个变量存储10次成绩。

6、输出最后的结果。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-21
/*翻了下以前的代码,发现大学有做过..看了下, 木有总分, 木有按学号查找, 排序是按平均成绩来的,
所以小小改了下以符合楼主的要求, .....我那个汗啊, 现在看起来,那时候的代码写的有够烂的, 不过俺不管了, 正常运行, OK, 功能实现 , OK, 剩下的扔给你了... PS: 用到了Windows的命令, 确认操作系统环境是Windows喔, */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SCORESIZE 4
#define YES 14
#define NO 60
#define ERROR_VALUE 99
#define ERROR_VALUE_OUT printf("错误,没有这个选项,请认真输入!!!\n")
#define ERROR_LENTH -1
#define ERROR_LENTH_OUT printf("提示:请输入正确的命令,命令有一个数字组成,请勿多输!\n")
#define ERROR printf("输入错误,请重新输入!\n")

/*
*学生对象结构体
*/
typedef struct
{
int no; //学号
char *name; //姓名
int score[3]; //三门课程的成绩
int sum; //总成绩
double avr; //平均成绩
}student_t;

student_t stu[50];

/*
*获取一个字符串,开辟字符串长度+1的内存空间
*返回开辟的内存地址
*/
char * GetString()
{
char *p;
int len = 0;
p = (char *)malloc(1*sizeof(char));
while((*(p+len)=getchar()) != '\n')
{
++len;
p = (char *)realloc(p, (len+1)*sizeof(char));
}
*(p+len) = '\0';
return p;
}

/*
*主菜单
*/
void menu()
{
printf("|------------------------------学员成绩管理-------------------------------|\n"); printf("| |\n");
printf("| |\n");
printf("| 1------------>录入学生信息 |\n");
printf("| |\n");
printf("| |\n");
printf("| 2------------>查看所有学员成绩信息 |\n");
printf("| |\n");
printf("| |\n");
printf("| 3------------>插入 |\n");
printf("| |\n");
printf("| |\n");
printf("| 4------------>删除 |\n");
printf("| |\n");
printf("| |\n");
printf("| 5------------>查找 |\n");
printf("| |\n");
printf("| |\n");
printf("| 0------------>退出本系统 |\n");
printf("|-------------------------------------------------------------------------|\n");
printf("^_^ 提示:请输入操作命令 > > > > > > > > > > > > > > > > > > >:");
}
/*
*输出stu的全部的信息
*/

void output(student_t *s,int len)
{
int i;
printf("\t\t\t\t所有成绩信息显示\n");
printf("\t\t学号\t姓名\t成绩①\t成绩②\t成绩③\t平均成绩\t总分\n");
for(i=0;i<len;i++)
{
printf("\t\t%d\t%s\t%d\t%d\t%d\t%.2lf\t\t%d\n",(*(s+i)).no,(*(s+i)).name,
(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2],(*(s+i)).avr,
(*(s+i)).sum);
}
}

/*
*获取用户输入命令
*返回一个正整数
*/
int GetCommand()
{
char *cmd;
cmd = GetString();
if(strlen(cmd) == 1)
{
if(*cmd == '1')
{
return 1;
}
if(*cmd == '2')
{
return 2;
}
if(*cmd == '3')
{
return 3;
}
if(*cmd == '4')
{
return 4;
}
if(*cmd == '5')
{
return 5;
}
if(*cmd == '0')
{
return 0;
}
if((*cmd == 'Y')||(*cmd == 'y'))
{
return YES;
}
if((*cmd == 'N')||(*cmd == 'n'))
{
return NO;
}
else
{
return ERROR_VALUE;
}
}
return ERROR_LENTH;
free(cmd);
}

/*
*获取一个学生的信息
*/
student_t input()
{
int i;
student_t s;
//获取学号
do
{
printf("学号:");
scanf("%d",&s.no);
if(s.no>0&&s.no<=50)
{
break;
}
else
{
printf("错误,请输入0-50中的数字!\n");
fflush(stdin);
continue;
}
} while(1);
fflush(stdin);
//获取姓名
printf("姓名:");
s.name=GetString();
for(i=0;i<3;i++)
{
do
{
printf("请输入第%d成绩:",i+1);
scanf("%d",&s.score[i]);
if(s.score[i]>0&&s.score[i]<=100)
break;
else
{
printf("请输入正确的学生成绩!(0-100)\n");
fflush(stdin);
continue;
}
} while(1);
}
//计算平均成绩并赋值给s.avr
s.sum = s.score[0]+s.score[1]+s.score[2];
s.avr=(s.sum)/3.00;
return s;
}

/*
*获取所有学生的信息
*返回输入的学生总数
*/
int GetAllStudent()
{
int i=0,cmd;
do
{
system("cls");
printf("请避免输入重复的学号,以免混淆!\n");
stu[i] = input(); //将获得的学生信息给stu[i]
fflush(stdin);
lo: printf("是否继续录入(Y/N):");
cmd = GetCommand();
switch(cmd)
{
case YES:
i++;
break;
case NO:
return (i+1);
case ERROR_VALUE:
ERROR_VALUE_OUT;
goto lo;
default:
ERROR_LENTH_OUT;
goto lo;
}
}while(1);
return (i+1);
}

/*
*对学生按平均成绩进行排序(冒泡)
*/
void sort(int len)
{
int i;
student_t *p,temp;
for(i=0;i<len-1;i++)
{
for(p=stu;p<stu+len-1;p++)
{
if((*p).sum<(*(p+1)).sum)
{
temp=(*p);
(*p)=(*(p+1));
(*(p+1))=temp;
}
}
}
}

/*
*显示学员信息
*形参:学生的人数
*/
void DisplayAllStudent(int len)
{
system("cls");
system("color 70");
printf("现有成绩信息:\n");
output(stu,len);
sort(len);
printf("排序后成绩信息:\n");
output(stu,len);
system("pause");
}

int insert(int len)
{
int cmd;
do
{
system("cls");
printf("现有成绩信息:\n");
output(stu,len);
printf("请避免输入重复的学号,以免混淆!\n");
stu[len] = input(); //录入信息
len++; //长度+1;
sort(len); //排序
printf("插入后成绩信息:\n");
output(stu,len);
fflush(stdin);
lc: printf("是否继续插入(Y/N):");
cmd = GetCommand(); //获取命令
switch(cmd)
{
case YES:
break;
case NO:
return len;
case ERROR_VALUE:
ERROR_VALUE_OUT;
goto lc;
default:
ERROR_LENTH_OUT;
goto lc;
}
}while(1);
return len;
}

/*
*删除学员信息,并显示删除前后所有的成绩信息
*/
int del(int len) //len 学生的个数
{
int cmd,n,i,j=0,statu=0; //statu 找到和未找到的标记 0未找到
do
{
system("cls");
printf("现有成绩信息:\n");
output(stu,len);
printf("请输入要删除的学生学号:");
scanf("%d",&n);
for(i=0;i<len;i++)
{
if(stu[i].no==n)
{
statu=1;
for(j=i;j<len;j++)
{
stu[j]=stu[j+1];
}
len--;
}
}
if(statu==0)
{
fflush(stdin);
printf("未找到任何有关该学号的信息!\n");
goto lc;
}
sort(len);
printf("删除后成绩信息:\n");
output(stu,len);
fflush(stdin);
lc: printf("是否继续删除(Y/N):");
cmd = GetCommand();
switch(cmd)
{
case YES:
break;
case NO:
return len;
case ERROR_VALUE:
ERROR_VALUE_OUT;
goto lc;
default:
ERROR_LENTH_OUT;
goto lc;
}
}while(1);
return len;
}

int main(void)
{
int cmd,lenth=0,n,i;
system("color 2B");
do
{
system("color 2B");
system("cls");
menu();
cmd = GetCommand();
switch(cmd)
{
case 1:
system("color 3E");
system("cls");
printf("\t\t\t警告:录入成绩将删除原有的所有学生信息!\n");
lenth = GetAllStudent();
break;
case 2:
DisplayAllStudent(lenth);
break;
case 3:
system("color 3E");
system("cls");
lenth = insert(lenth);
break;
case 4:
system("color 3E");
system("cls");
lenth = del(lenth);
break;
case 5:
printf("请输入要查找的学生学号:");
scanf("%d",&n);
for(i=0;i<lenth;i++)
{
if(stu[i].no==n)
{
printf("\t\t学号\t姓名\t成绩①\t成绩②\t成绩③\t平均成绩\t总分\n");
printf("\t\t%d\t%s\t%d\t%d\t%d\t%.2lf\t\t%d\n",stu[i].no,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr,stu[i].sum);
break;
}
}
if(i>=lenth)
{
printf("未找到任何有关该学号的信息!\n");
}
fflush(stdin);
system("pause");
break;
case 0:
exit(0);
case ERROR_LENTH:
ERROR_LENTH_OUT;
system("pause");
break;
default:
ERROR_VALUE_OUT;
system("pause");
break;
}
}
while(1);
}本回答被提问者和网友采纳
相似回答