编译的程序现在有一个错误和两个警告,且都在一句中,不知如何修改,恳请不吝赐教!!
#include<stdlib.h>#include<stdio.h>
#include<string.h>
#include<conio.h>
typedef struct {
int id;
char name[10];
int sex;
int room;
int tel;
}StudentInfo;
typedef struct {
int id;
char courseNo[10];
char coursename[20];
int a;
int b;
int c;
int d;
double e;
double f;
}GradeInfo;
StudentInfo si[100];
GradeInfo gi[500];
int sp=0;
int gp=0;
void ReadFile()
{
FILE *fp;
fp=fopen("d:\\student.txt","r");
while (!feof(fp))
{
fscanf(fp,"%d%s%d%d%d",&si[sp].id,&si[sp].name,&si[sp].sex,&si[sp].tel);
sp++;
}
fclose(fp);
fp=fopen("score.dat","r");
while (!feof(fp))
{
fscanf(fp,"%d%s%s%d%d%d%d",&gi[gp].id,&gi[gp].courseNo,&gi[gp].coursename,&gi[gp].a,&gi[gp].b,&gi[gp].c,&gi[gp].d);
if (gi[gp].c==-1)
gi[gp].e = 0.3*gi[gp].b+0.7*gi[gp].d;
else
gi[gp].e = 0.15*gi[gp].b+0.15*gi[gp].c+0.7*gi[gp].d;
if ( gi[gp].e >= 80. )
gi[gp].f = gi[gp].a *0.8;
else if ( gi[gp].e >= 70. )
gi[gp].f = gi[gp].a *0.75;
else if ( gi[gp].e >= 60. )
gi[gp].f = gi[gp].a *0.6;
else gi[gp].f = 0;
gp++;
}
fclose(fp);
}
void DisplayMainMenu()
{
printf (" 1) 学生信息录入 \n2) 学生信息查询 \n3) 学生数据删除 \n4) 学生成绩排序 \n5) 程序结束 \n ");
}
void DataInput()
{
printf ("学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩\n");
fscanf(fp,"%d%s%s%d%d%d%d",&gi[gp].id,&gi[gp].courseNo,&gi[gp].coursename,&gi[gp].a,&gi[gp].b,&gi[gp].c,&gi[gp].d);
if (gi[gp].c==-1)
gi[gp].e=0.3*gi[gp].b+0.7*gi[gp].d;
else
gi[gp].e=0.15*gi[gp].b+0.15*gi[gp].c+0.7*gi[gp].d;
if (gi[gp].e >=90) gi[gp].f=gi[gp].a*1.;
else if (gi[gp].e>=80)
gi[gp].f=gi[gp].a *0.8;
else if (gi[gp].e>=70)
gi[gp].f=gi[gp].a*0.75;
else if ( gi[gp].e>=60)
gi[gp].f=gi[gp].a*0.6;
else gi[gp].f=0;
gp++;
}
void QueryById();
void QueryByRoom();
void QueryGrade();
void DataQuery()
{
int x,y;
printf(" 1) 学生基本情况查询\n2) 成绩查询\n");
scanf("%d",&x);
if (x==1) // 查询学生信息
{
printf("1) 按学号查询 2)按宿舍查询\n");
scanf("%d",&x);
if (x==1)
{
printf(" 输入学号\n");
scanf("%d",&y);
QueryById(y);
}
if (x==2)
{
printf(" 输入宿舍号\n");
scanf("%d",&y);
QueryByRoom(y);
}
}
if (x==2) // 查询成绩信息
{
printf (" 输入学号\n");
scanf ("%d",&y);
QueryGrade(y);
}
}
void DataDelete()
{
int x;
int d=0;
int k;
int i=0;
printf("输入学号\n");
scanf("%d",&x);
while(si[i].id!=x) i++;
if (i<sp-1)
{ for (k=i;k<sp-1; k++)
{
si[k] = si[k+1]; // 删除一个数据后,其他数据前移
}
}
if (i<sp) sp--;
// 成绩数组中,有多个相同的学号,都要删除,并且后面的数据需要前移
for (k=0;k<gp;k++)
{
if (gi[gp].id==x) d++;
else gi[k-d]=gi[k];
}
gp=gp-d;
}
void QueryById(int x)
{
int i;
for (i=0;i<sp;i++)
{
if (si[i].id==x)
{
printf ("\n 学号 姓名 性别 宿舍号码 电话号码\n");
printf (" %d %s %s %d %d\n",si[i].id,si[i].name,si[i].sex,si[i].room,si[i].tel);
}
}
}
void QueryByRoom(int x)
{
int i;
for (i=0;i<sp;i++)
{
if (si[i].room==x)
{
printf ("\n 学号 姓名 性别 宿舍号码 电话号码\n");
printf (" %d %s %s %d %d\n",si[i].id,si[i].name,si[i].sex,si[i].room,si[i].tel);
}
}
}
void QueryGrade(int x)
{
int i;
int sc=0;
double sg=0;
for (i=0;i<gp;i++)
{
if (gi[i].id==x)
{
sc++;
sg+=gi[i].f;
printf("\n 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分\n");
printf(" %d %s %s %f %f %f %f %f %f\n",gi[i].id,gi[i].courseNo,gi[i].coursename,gi[i].a,gi[i].b,gi[i].c,gi[i].d,gi[i].e,gi[i].f);
}
}
printf ("共修:%d科,实得总分为:%f\n",sc,sg);
}
void sort1();
void sort2();
void DataSort()
{
int x;
printf (" 1) 综合成绩排序\n 2) 实际学分排序\n");
scanf("%d",&x);
if (x==1) sort1();
if (x==2) sort2();
}
void gradeput();
void sort1()
{
int i,j;
GradeInfo t;
for (i=gp-1;i>=1;i--)
{
for (j=0;j<i;j++)
{
if (gi[j].e>gi[j+1].e) // 如果改为 gi[j].e< gi[j+1].e 则为逆序
{
t=gi[j];
gi[j]=gi[j+1];
gi[j+1]=t;
}
}
}
gradeput();
}
void sort2()
{
int i,j;
GradeInfo t;
for (i=gp-1;i>=1;i--)
{
for (j=0;j<i;j++)
{
if (gi[j].f>gi[j+1].f) // 如果改为 gi[j].f< gi[j+1].f 则为逆序
{
t=gi[j];
gi[j]=gi[j+1];
gi[j+1]=t;
}
}
}
gradeput();
}
void gradeput()
{
int i;
for(i=0;i<gp;i++)
{
printf("\n 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分\n");
printf(" %d %s %s %f %f %f %f %f %f\n",gi[i].id,gi[i].courseNo,gi[i].coursename,gi[i].a,gi[i].b,gi[i].c,gi[i].d,gi[i].e,gi[i].f);
}
}
void main()
{
int x;
ReadFile();
while(1)
{
DisplayMainMenu();
scanf("%d",&x);
switch (x)
{
case 1: DataInput();break;
case 2: DataQuery();break;
case 3: DataDelete();break;
case 4: DataSort();break;
case 5: exit (0);
}
}
}