求大佬调试一下
#include <stdio.h>#include <stdlib.h>
void DisplayMainMenu();//菜单
void DataInput();//输入数据
void DataQuery();//数据查询
void DataDelete();//数据删除
void DataSort();//数据排序
void QueryById(int );//学号查询
void QueryByRoom(int );//宿舍查询
void QueryMark(int );//成绩查询
void sort1();//综合成绩排序
void sort2();//实际学分排序
void markput();//输出
typedef struct {
int Id;
char name;
char sex;
int room;
int tel;
} StudentInfo;
typedef struct {
int Id;
char courseNo;
char courseName;
float a;
float b;
float c;
float d;
float e;
float f;
} MarkInfo;
StudentInfo si;
MarkInfo mi; //定义的两个结构体
源代码
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int Id;
char name;
char sex;
int room;
int tel;
} StudentInfo;
typedef struct {
int Id;
char courseNo;
char courseName;
float a;
float b;
float c;
float d;
float e;
float f;
} MarkInfo;
StudentInfo si;
MarkInfo mi;
intsp=0;
intmp=0;
void ReadFile();
void DisplayMainMenu();
void DataInput();
void DataQuery();
void DataDelete();
void DataSort();
void QueryById(int );
void QueryByRoom(int );
void QueryMark(int );
void sort1();
void sort2();
void markput();
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);
}
}
}
void ReadFile( )
{
FILE *fp;//声明fp是指针,用来指向FILE类型的对象
if((fp = fopen("C:\\Users\\lenovo\\Desktop\\A.txt","r"))==NULL)printf("cant open the file\n");
while (!feof(fp))//当条件为不是文件尾时均执行后续代码
{
fscanf(fp,"%d%s%s%d%d", &si.Id,si.name,&si.sex,&si.room,&si.tel);
sp++;//fscanf功 能:从一个流中执行格式化输入
}
fclose (fp);
fp = fopen("C:\\Users\\lenovo\\Desktop\\B.txt","r");//r 以可读写方式打开文件,该文件必须存在
while (!feof(fp))
{ fscanf(fp,"%d%s%s%f%f%f%f",&mi.Id,mi.courseNo,mi.courseName,&mi.a,&mi.b,&mi.c, &mi.d);
if (mi.c == -1)
mi.e = 0.3*mi.b+0.7*mi.d;
else
mi.e = 0.15*mi.b+0.15*mi.c+0.7*mi.d;
if ( mi.e >= 90. ) mi.f = mi.a;//计算学分
else if ( mi .e >= 80. )
mi.f = mi.a *0.8;
else if ( mi.e >= 70. )
mi.f = mi.a *0.75;
else if ( mi.e >= 60. )
mi.f = mi.a *0.6;
else mi.f = 0;
mp++;
}
fclose(fp);
}
void DisplayMainMenu()
{
printf ("\n 1) 数据录入 \n 2) 数据查询 \n 3) 数据删除 \n 4) 数据排序 \n 5) 程序结束 \n ");
}
void DataInput()
{
FILE *fp;
int i;
printf ("学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩\n");
while(1)
{scanf("%d%s%s%f%f%f%f",&mi.Id,mi.courseNo,mi.courseName,&mi.a,&mi.b,&mi.c, &mi.d);
if(mi.Id==-1)break;
if (mi.c == -1)
mi.e = 0.3*mi.b+0.7*mi.d;
else
mi.e = 0.15*mi.b+0.15*mi.c+0.7*mi.d;
if ( mi.e >= 90. ) mi.f = mi.a;
else if ( mi .e >= 80. )
mi.f = mi.a *0.8;
else if ( mi.e >= 70. )
mi.f = mi.a *0.75;
else if ( mi.e >= 60. )
mi.f = mi.a *0.6;
else mi.f = 0;
mp++;}
fp = fopen("C:\\Users\\lenovo\\Desktop\\B.txt","r+");
for(i=0;i<mp;i++) fprintf(fp,"%d%s%s%f%f%f%f",&mi.Id,mi.courseNo,mi.courseName,&mi.a,&mi.b,&mi.c, &mi.d);
fclose(fp);
}
void DataQuery()
{
int x,y,z;
printf( "\n 1) 学生基本情况查询\n 2) 成绩查询\n");
scanf("%d",&x);
if (x == 1) // 查询学生信息
{
printf ("1) 按学号查询 2) 按宿舍查询\n");
scanf("%d",&y);
if(y == 1 )
{
printf ( " 输入学号\n");
scanf ("%d",&z);
QueryById(z);
}
if(y == 2)
{
printf ( " 输入宿舍号\n");
scanf ("%d",&z);
QueryByRoom(z);
}
}
if ( x ==2)// 查询成绩信息
{
printf ( " 输入学号\n");
scanf ("%d",&y);
QueryMark(y);
}
}
void DataDelete()
{
FILE *fp;
int x;
int i=0;
int k,d;
printf( "输入学号\n");
scanf( "%d",&x);
while( si.Id != x) i++;
if (i<sp-1)
{
for ( k=i; k<sp-1; k++)
{
si = si;
}
}
if ( i<sp) sp--;
d = 0;
for (k=0;k<mp;k++)
{
if ( mi.Id == x ) d++;
else mi = mi;
}
mp = mp - d;
fp = fopen("C:\\Users\\lenovo\\Desktop\\B.txt","r+");//r+以读写方式打开文件
for(i=0;i<mp;i++) fprintf(fp,"%d%s%s%f%f%f%f",&mi.Id,mi.courseNo,mi.courseName,&mi.a,&mi.b,&mi.c, &mi.d);
}
void QueryById(int x)
{
int i;
for (i=0;i<sp;i++)
{
if ( si.Id == x )
{
printf ("\n 学号 姓名 性别 宿舍号码 电话号码\n");
printf (" %d %s %s %d %d\n",si.Id,si.name,si.sex,si.room,si.tel);
}
}
}
void QueryByRoom(int x)
{
int i;
for (i=0;i<sp;i++)
{
if ( si.room == x )
{
printf ("\n 学号 姓名 性别 宿舍号码 电话号码\n");
printf (" %d %s %s %d %d\n",si.Id,si.name,si.sex,si.room,si.tel);
}
}
}
void QueryMark(int x)
{
int i=0;
while(si.Id!=x)
{
i++;
}
printf("学号:%d姓名:%s\n",si.Id,si.name);
for (i=0;i<sp;i++)
{
if ( si.Id == x )
{
printf ("课程编号: %s课程名称: %s综合成绩: %f实得学分: %f\n",mi.courseNo,mi.courseName,mi.e,mi.f);
}
}
}
void DataSort()
{
int x;
printf (" 1) 综合成绩排序\n 2} 实际学分排序\n");
scanf("%d",&x);
if ( x == 1 ) sort1();
if ( x == 2 ) sort2();
}
void sort1()
{
int i,j;
MarkInfo t;
for (i=mp-1;i>=1;i--)
{
for (j=0;j<i;j++)
{
if (mi.e>mi.e)
{
t=mi;
mi = mi;
mi = t;
}
}
}
markput();
}
void sort2()
{
int i,j;
MarkInfo t;
for (i=mp-1;i>=1;i--)
{
for (j=0;j<i;j++)
{
if (mi.f>mi.f)
{
t=mi;
mi = mi;
mi = t;
}
}
}
markput();
}
void markput()
{
int i;
for( i=0;i<mp;i++)
{
printf("\n 学号%d课程编号%s课程名称%s学分%f平时成绩%f实验成绩%f卷面成绩%f综合成绩%f实得学分%f\n",mi.Id,mi.courseNo,mi.courseName,mi.a,mi.b,mi.c,mi.d,mi.e,mi.f);
}
} 看了看应该是文件打开的问题,这个代码是要一个A.txt,文件和一个B.txt文件
你可以将这两文件和你的代码放到同一文件夹下,将打开文件的代码全改成
fopen("./A.txt","r"))
fopen("./B.txt","r"))
应该就没问题了
页:
[1]