问题有不少,求解决,小弟先谢过啦!
#include<stdio.h>#define N 2
struct student
{
char name[20];//姓名
char sex[10];//性别
int str_num;//学号
float cgrade;//C语言成绩
float egrade;//英语分数
float mgrade;//数学成绩
float pgrade;//物理成绩
float dgrade;//电路成绩
float Ave; // 平均分
float sum;//总分
};
int M=0;
void Sum_andAve(struct student info[], int num);
void input(struct student info[],int num);//输入函数的声明0
void modification(struct student info[],int num);//修改函数的声明0
void deleteinfo(struct student info[],int num);//删除信息函数的声明0
void add(struct student info[],int num);//增加信息函数的声明
void rank(struct student info[],int num);//排序函数的声明0
void seek(struct student info[],int num);//查找函数的声明0
void output(struct student info[],int num);//输出函数的声明0
void input(struct student info[],int num)//输入函数//
{
int i; //循环变量
printf("请输入你要输入的人数:");
scanf("%d",&M); //下标C保存多少个学生
M--;
if(M>N)
{
printf("最多输入%d个学生\n",N);
printf("按任意键返回");
getchar();
getchar();
input(info,N); //递归调用
}
for(i=0;i<=M;i++) //NUM是一个常量
{
printf("\t请输入学生的信息::\n");
printf("\t姓名----学号----C语言----英语----数学----物理-----电路\n");
for(i=0;i<num;i++)
{
printf("please input the %dth student's infomation::\n",i+1);
printf("\t姓名::");scanf("%s",&info[i].name );//姓名
printf("\n\t性别::");scanf("%s",&info[i].sex );//性别
printf("\n\t学号::");scanf("%f",&info[i].str_num );//学号
printf("\n\tC语言=");scanf("%f",&info[i].cgrade );//C语言成绩
printf("\n\t英语=");scanf("%f",&info[i].egrade );//英语成绩
printf("\n\t数学=");scanf("%f",&info[i].mgrade );//数学成绩
printf("\n\t物理=");scanf("%f",&info[i].pgrade );//物理成绩
printf("\n\t电路=");scanf("%f",&info[i].dgrade );//电路成绩
}}
Sum_andAve(info,N);
main();
}
void seek(struct student info[],int k)
{
int i;
for(i=0;i<N;i++)
{
if(info[i].str_num==k)
{
printf("\t您要查找的学生是::\n");
printf("姓名\t性别\t学号\tC语言\t英语\t数学\t物理\t电路\t平均分\t总分\n");
printf("%-10s%-6s%-6d%-4.2f%-4.2f%-4.2f%-4.2f%-4.2f%-4.2f%-4.2f%\n",info[i].name ,info[i].sex ,info[i].str_num ,info[i].cgrade ,\
info[i].egrade ,info[i].mgrade ,info[i].pgrade ,info[i].dgrade ,info[i].Ave ,info[i].sum );}}
main();
}
void Sum_andAve(struct student info[], int num)//总分和平均分的函数以及按平均分排序
{
int i;
printf("\t");
for(i=0;i<num;i++)//求总分和平均分的循环
{
info[i].sum=info[i].cgrade +info[i].dgrade +info[i].egrade +info[i].mgrade +info[i].pgrade;
info[i].Ave =(info[i].sum)/5;
}//循环结束
}
void rank(struct student info[], int num)
{
int i,j;
struct student temp;
Sum_andAve(info,num);
for(i=num-1;i>0;i--){//按总成绩排序
for(j=0;j<i;j++){
if(info[j].sum>info[j+1].sum )
{
temp=info[j+1] ;
info[j+1] =info[j];
info[j]=temp;
}}}
printf("按课程总成绩排序::\n\t");
printf("姓名 \t性别\t学号\t 平均分\t 总成绩\n");
for(i=0;i<num;i++)
{
printf("\t%-20s%-8s%-10d%-4.2f%-4.2f\n",info[i].name ,info[i].sex ,info[i].str_num ,info[i].Ave ,info[i].sum );}
main();
}
void modification(struct student info[],int num)
{
int i,k;
printf("请输入你要修改学生的学号::\n");
scanf("%d\n",&k);
seek(info,k);
for(i=0;i<N;i++)
{
if(info[i].str_num ==k)
{
printf("请输入新的学生信息::\n");
printf("\t姓名::");scanf("%s",&info[i].name );//姓名
printf("\n\t性别::");scanf("%s",&info[i].sex );//性别
printf("\n\t学号::");scanf("%f",&info[i].str_num );//学号
printf("\n\tC语言=");scanf("%f",&info[i].cgrade );//C语言成绩
printf("\n\t英语=");scanf("%f",&info[i].egrade );//英语成绩
printf("\n\t数学=");scanf("%f",&info[i].mgrade );//数学成绩
printf("\n\t物理=");scanf("%f",&info[i].pgrade );//物理成绩
printf("\n\t电路=");scanf("%f",&info[i].dgrade );//电路成绩
}
main();
}
}
void deleteinfo(struct student info[],int num)
{
int i,k;
struct student arr={{'\0'},'\0',0,0,0,0,0,0};
printf("请输入你要删除的学生学号::\n");
scanf("%d\n",&k);
seek(info,k);
for(i=0;i<N;i++)
{
if(info[i].str_num ==k){
info[i]=arr;
}
}
main();
}
void add(struct student info[],int num)
{
struct student temp;
printf("请输入新增学生的信息::\n");
printf("\t姓名::");scanf("%s",&temp.name );//姓名
printf("\n\t性别::");scanf("%s",&temp.sex );//性别
printf("\n\t学号::");scanf("%f",&temp.str_num );//学号
printf("\n\tC语言=");scanf("%f",&temp.cgrade );//C语言成绩
printf("\n\t英语=");scanf("%f",&temp.egrade );//英语成绩
printf("\n\t数学=");scanf("%f",&temp.mgrade );//数学成绩
printf("\n\t物理=");scanf("%f",&temp.pgrade );//物理成绩
printf("\n\t电路=");scanf("%f",&temp.dgrade );//电路成绩
temp.sum=temp.cgrade +temp.dgrade +temp.egrade +temp.mgrade +temp.pgrade;
temp.Ave =(temp.sum)/5;
if(M<N)
{
if(M==0)
{
info[M]=temp;
rank(info,N);
}
}
else
{
M++;
info[M]=temp;
rank(info,N);
}
main();
}
void output(struct student info[], int num)//定义输出函数//
{
int i;
printf("姓名\t性别\t学号\tC语言\t英语\t数学\t物理\t电路\t平均分\t总分\n");
for(i=0;i<num;i++)
{
printf("%-10s%-6c%-6d%-4.2f%-4.2f%-4.2f%-4.2f%-4.2f%-4.2f%-4.2f%\n",info[i].name ,info[i].sex ,info[i].str_num ,info[i].cgrade ,\
info[i].egrade ,info[i].mgrade ,info[i].pgrade ,info[i].dgrade ,info[i].Ave ,info[i].sum );}
main();
}
int main()
{
struct student info[N];
int k;
//struct student temp;
int a;//定义一个操作数
printf("-----------------------------------------------------------------------\n");
printf("-----------------------------学生管理系统------------------------------\n");
printf("-------------------------------------------------计科一班刘文---------\n");
printf("-----------------------------------------------------学号:1005010120---\n");
printf("---------------------------------操作菜单------------------------------\n");
printf(" 1.输入并储存学生信息 2.修改学生信息\t\n");
printf(" 3.删除学生信息 4.新增学生信息\t\n");
printf(" 5.排序学生成绩 6.查询学生成绩\t\n");
printf(" 7.输出学生信息 0.退出\t\n");
printf("\n\t提示:请按照操作菜单输入\n\n");
printf("\t请输入你要进行的操作::\n");
scanf("%d",&a);
switch(a)
{
case 1:input(info,N);
case 2:modification(info,N);
case 3:deleteinfo(info,N);
case 4:add(info,N);
case 5:rank(info,N);
case 6:
printf("请输入你要查找的学生学号::\n");
scanf("%d\n",&k);
seek(info,k);
case 7:output(info,N);
case 0:return 1;
default:printf("\tError!\n\t");
}
return 0;
}