刚学C语言不久,遇到问题解决不了,想请教各位!!谢谢
#include<stdio.h>#include<stdlib.h>
#include<string.h>/*对字符串调用的头文件*/
#include<math.h>
#define S1 "***************欢迎使用学生成绩管理系统***************"
#define S2 "********制造者:*********"
struct student//学生数据结构
{
double num;
char name[20];
float C;//
float math;//实验
float english;//考试
double zongping;//总评
}stu[30];
void main()
{
void newstu(); /* 输入一个班的学生记录*/
void showall();/* 显示所有记录*/
void calculate();/* 求出全班平均成绩,显示均方差*/
void sort();/*输出成绩与排名*/
void save();/*将数据保存到成绩.txt文件中*/
int n,i;
while(n!=6)
{
printf("\n\n%s\n\n",S1);
printf("\n\n%s\n\n",S2);
printf("%15s***2012应用软件开发9班***\n\n"," ");
printf("%15s1:输入该班学生大学3科学生成绩记录\n"," ");
printf("%15s2:显示所有成绩记录\n"," ");
printf("%15s3:计算并输出平均成绩,均方差\n"," ");
printf("%15s4:输出成绩与排名\n"," ");
printf("%15s5:结果存入文件成绩.txt中\n"," ");
printf("%15s6:退出系统\n"," ");
printf("%15s7: 按-1返回主菜单\n"," ");
for(i=0;i<80;i++)
putchar('=');
printf("输入选项代码:\n");
scanf("%d",&n);
if(n!=1&&n!=2&&n!=3&&n!=4&&n!=5&&n!=6)/*当n不等于1,2,3,4,5,6时*/
printf("对不起!您的输入有误,请重新输入:");
else
switch(n)
{
case 1:newstu();break;
case 2:showall();break;
case 3:calculate();break;
case 4:sort();break;
case 5:save();break;
case 6:printf("\n*******************谢谢使用!*******************\n");break;
break;
}
}
getchar();
}
/* 子 函 数*/
void newstu() /* 输入一个班的学生记录*/
{
int i,n;
printf("请输入您要保存记录的人数:");
scanf("%d",&n);
if(n>30)
printf("对不起,您的输入有误,请重新输入");
else
{for(i=0;i<n;i++)
{
printf("请输入学号 姓名 C语言 数学 英语:");
scanf("%lf%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].C,&stu[i].math,&stu[i].english);
}for(i=0;i<n;i++)
stu[i].zongping=stu[i].C+stu[i].math+stu[i].english;
}
system("cls");
}
void showall()/* 显示所有记录*/
{
int i,n;
printf("请输入您要保存记录的人数:");
scanf("%d",&n);
printf("学号 姓名 C语言 数学 英语 总评\n");
for(i=0;i<n;i++)
printf("%lf %0.5s %0.5f %0.5f %0.5f %0.5f\n",stu[i].num,stu[i].name,stu[i].C,stu[i].math,stu[i].english,stu[i].zongping);
}
void calculate()/* 求出全班平均成绩,显示均方差*/
{
int a[30]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
int i,n;
double total=0,pfc=0,bzc=0;
double ave;
printf("请输入您要保存记录的人数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
total=total+stu[i].zongping;
}
ave=total/n;
printf("总评平均成绩是%f\n",ave);
for(i=0;i<n;i++)
{
pfc=pow((stu[i].zongping-ave),2)/n;/*表示第i个学生总评减去平均分的平方*/
}
bzc=sqrt(pfc);
printf("\n平方差是%f\n",pfc);
printf("\n标准差是%f\n",bzc);
}
void sort()/*输出成绩与排名*/
{
int a[30]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
int i,j,temp;
for(j=0;j<29;j++)
{
for(i=0;i<29-j;i++)
if(stu[a[i]].zongping<stu[a[i+1]].zongping)
{
temp=a[i];a[i]=a[i+1];
a[i+1]=temp;
}
}
printf("顺序为:\n");
printf("学号 姓名 总评成绩\n");
for(i=0;i<30;i++)
printf("%15.0lf%10s%15.2f\n",stu[a[i]].num,stu[a[i]].name,stu[a[i]].zongping);
printf("\n");
}
void save()/*将数据保存到成绩.txt文件中*/
{int i;
FILE *fp;
fp=fopen("成绩.txt","w");
fprintf(fp,"学号 姓名 C语言 数学 英语 总评成绩\n");
for(i=0;i<29;i++)
fprintf(fp,"%15.0lf%14s%14.2f%14.2f%14.2f%14.2f\n",stu[i].num,stu[i].name,stu[i].C,stu[i].math,stu[i].english,stu[i].zongping);
printf("System pause...\n");
printf("Please wait...\n");
printf("\n\n*******************恭喜,保存完成!*******************\n\n");
}
这程序感觉有很多要改进的地方,感觉很繁琐,输入错误不能返回,请教一下各位,我应该怎样改进呢?谢谢!!