帮我改一下我的程序
问题是:能保存全部学生信息,但只能打开一个学生。还有无法排序。#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<string.h>
static int m;
#define FUNC_CREATE 1
#define FUNC_OPEN 2
#define FUNC_SAVE 3
#define FUNC_INSERT 4
#define FUNC_DISPLAY 5
#define FUNC_DOMAX 6
#define FUNC_DOSORT() 7
// add your function Macro here;
#define FUNC_QUIT 9
#define MAX_STUD_COUNT 30
#define N 5.0
// your data structure;
struct _student
{
int ID;
char Name[20];
int Eng;
int C_Language;
int AdMaTH;
int Computer;
int Physics;
float ave_score;
int sum;
};
typedef struct _student STUD;
// Globle varibles;
STUD stud[MAX_STUD_COUNT+1];
// class id
int iClassID;
// student count in a class;
int iStudCount;
void PrintGreeting();
int PrintMainMenu();
void DoFunc(int);
void DoCreate();
void DoDisplay();
void DoSave();
void DoOpen();
void DoMax();
void DoQUIT();
//void DoInsert();
void DoSort();
void Doswap();
void main()
{
int iChosedFuncId;
PrintGreeting();
for(;;)
{
iChosedFuncId = PrintMainMenu();
//if (FUNC_QUIT == iChosedFuncId)
// break;
if((iChosedFuncId >= FUNC_CREATE)
&&(iChosedFuncId <= FUNC_QUIT))
DoFunc(iChosedFuncId);
}
return ;
}
void DoFunc(int id)
{
/// int i;
switch(id)
{
case FUNC_CREATE:
DoCreate();
//printf("Do create!\n");
break;
case FUNC_OPEN:
DoOpen();
// printf("Do Open!\n");
break;
case FUNC_SAVE:
//printf("Write to a Text file\n");
DoSave(); /*循环写入数据*/
printf("\t\t\t");
system("pause");
break;
case FUNC_INSERT:
//DoInsert();
//printf("Do insert!\n");
// break;
case FUNC_DISPLAY:
DoDisplay();
break;
case FUNC_DOMAX:
DoMax();
break;
case FUNC_DOSORT():
DoSort();
break;
// your case should continue;
case FUNC_QUIT:
DoQUIT();
break;
default:
break;
}
}
void DoDisplay()/*显示学生信息*/
{
int i;
if((iStudCount == 0)
||(iStudCount > MAX_STUD_COUNT)
|| (iClassID == 0))
{
printf("请新建或者打开学生信息!按任意键继续:");
scanf("%d",&i);
}
system("cls");
printf("班级:%d\n",iClassID);
printf("学生人数:%d\n",iStudCount);
printf("%8s%15s%8s%8s%8s%8s%8s%8s%8s\n",
"学号", "姓名", "英语","数学","C语言","计算机","物理","平均分","总分");
for(i = 0; i < iStudCount; i++)
{
printf("%8d%15s%8d%8d%8d%8d%8d%8.2f%8d\n",
stud[i].ID,
stud[i].Name,
stud[i].Eng,
stud[i].AdMaTH,
stud[i].C_Language,
stud[i].Computer,
stud[i].Physics,
stud[i].ave_score,
stud[i].sum);
}
printf("显示完成,请按任意键数字键返回主菜单:");
scanf("%d",&i);
return;
}
void DoCreate()/*新建一个班级*/
{
int i;
float m=N;
float ave_score=0;
system("cls");
printf(" Main function--Create......\n");
printf("输入班号(6位):");
scanf("%d",&iClassID);
printf("请输入学生人数(< %d):",MAX_STUD_COUNT);
scanf("%d",&iStudCount);
printf(" 请依次输入学生信息, 格式如下:\n");
printf(" 学号 姓名 英语 数学 C语言 计算机 物理\n");
for (i = 0; i < iStudCount; i++)
{
scanf("%d%s%d%d%d%d%d",
&stud[i].ID,
stud[i].Name,
&stud[i].Eng,
&stud[i].AdMaTH,
&stud[i].C_Language,
&stud[i].Computer,
&stud[i].Physics);
stud[i].sum=(stud[i].Eng+stud[i].AdMaTH +stud[i].C_Language+stud[i].Computer+stud[i].Physics);
stud[i].ave_score=stud[i].sum/m;
}
printf("录入完成,请按任意键数字键返回主菜单:");
scanf("%d",&i);
return;
}
void DoMax() /*比较每个学生的总成绩*/
{
int i;
int max,min;
for(i=0 ;i < iStudCount ;i++)
{
stud[i].sum=(stud[i].Eng+stud[i].AdMaTH +stud[i].C_Language+stud[i].Computer+stud[i].Physics);
}
min = stud[0].sum;
max = stud[0].sum;
for(i=0 ;i < iStudCount ;i++)
{
if(max<stud[i].sum)
max = stud[i].sum;
if(min>stud[i].sum)
min = stud[i].sum;
}
for(i=0;i<iStudCount;i++)
{
if(max==stud[i].sum)
{
printf("总成绩最高学生的姓名 :%s \n",stud[i].Name);
printf("总成绩最高学生的学号 :%d \n",stud[i].ID);
printf("最高分数 :%d \n",stud[i].sum);
}
if(min==stud[i].sum)
{
printf("总成绩最低学生的姓名 :%s\n",stud[i].Name);
printf("总成绩最低学生的学号 :%d \n",stud[i].ID);
printf("最低分数 :%d \n",stud[i].sum);
}
}
printf("比较完成,请按任意键数字键返回主菜单:");
scanf("%d",&i);
return ;
}
void DoSave( )//保存学生信息记录
{
FILE* fp;
int i,c=0;
system("cls");
printf("是否保存改记录(1/0)");
scanf("%d",&c);
if(c==1)
{
if((fp=fopen("aa.txt","wb"))==NULL)
{
printf("无发打开\n");
return;
}
else
{
fwrite(&iStudCount,sizeof(struct _student),1,fp);
fwrite(&iClassID,sizeof(struct _student),1,fp);
for(i=0;i<iStudCount;i++)
{
fwrite(&stud[i],sizeof(struct _student),1,fp);
}
printf("保存成功\n");
fclose(fp);
return;
}
}
}
void DoOpen(struct _student*a,int n)
{
int i;
FILE* fp;
if((fp=fopen("aa.txt","rb+"))==NULL)
{
printf("不能打开此文件\n");
return;
}
fread(&iStudCount,sizeof(struct _student),1,fp);
printf("学生人数:");
printf("%d\n",iStudCount);
fread(&iClassID,sizeof(struct _student),1,fp);
printf("班级号:");
printf("%d\n",iClassID);
printf("%8s%15s%8s%8s%8s%8s%8s%8s%8s\n",
"学号", "姓名", "英语","数学","C语言","计算机","物理","平均分","总分");
for(i = 0; i < iStudCount; i++)
{
printf("%8d%15s%8d%8d%8d%8d%8d%8.2f%8d\n",
stud[i].ID,
stud[i].Name,
stud[i].Eng,
stud[i].AdMaTH,
stud[i].C_Language,
stud[i].Computer,
stud[i].Physics,
stud[i].ave_score,
stud[i].sum);
}
fclose(fp);
printf("读取成功!\n");
printf("打开完成,请按任意键数字键返回主菜单:");
scanf("%d",&i);
return;
}
void DoQUIT()
{
int c;
int i;
printf("是否要退出系统(1/0)");
scanf("%d",&c);
if(c==1)
{
printf("系统将自动退出\n");
printf("欢迎下次使用教学系统\n");
}
for(i=0;i<10;i++)
{
printf("......");
_sleep(150);
}
exit(0) ;
}
/*void DoInsert()
{
int i;
int m;
printf("请输入你要插入的学生的学号");
scanf("%d",&ID);
m=ID-1;
for(i=0;i<inclass;i++)
if(stud[i].ID==m)
{
}
}*/
void DoSort()
{
int i,j,min;
for(i=0 ;i < iStudCount-1 ;i++)
{
min=i;
for(j=i ;i < iStudCount ;j++)
if(stud[i].ID<stud[j].ID )
{
min=j;
//stud[j].ID =stud[i].ID;
Doswap(&stud[i],&stud[j]);
}
}
}
void Doswap(int* a, int* b)
{
int n;
n=*a;
*a=*b;
*b=n;
}
void PrintGreeting()
{
char ch;
printf("########################################\n");
printf("# #\n");
printf("# #\n");
printf("# #\n");
printf("# #\n");
printf("# 学生信息管理系统 #\n");
printf("# V1.0 #\n");
printf("# #\n");
printf("# #\n");
printf("# #\n");
printf("# #\n");
printf("# #\n");
printf("# 作者:yuanchao 日期10-11-20 #\n");
printf("# #\n");
printf("# #\n");
printf("########################################\n");
printf("请按任意键进入系统....");
scanf("%c",&ch);
return;
}
int PrintMainMenu()
{
int iChosedID = 0;
system("cls");
printf(" Main function menu......\n");
printf("1) 新建班级信息\n");
printf("2) 从文件打开班级信息\n");
printf("3) 将班级信息保存到文件\n");
printf("4) 插入新的学生信息\n");
printf("5) 显示班级学生信息\n");
printf("6) 最大值\n");
printf("7) 按学生学号排序\n");
printf("9) 退出系统\n");
printf("请输入您的选择(1..9):");
scanf("%d",&iChosedID);
return iChosedID;
}