|
发表于 2021-12-29 21:45:23
From FishC Mobile
|
显示全部楼层
|阅读模式
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#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[10];
char sex[6];
int room;
int tel;
} StudentInfo;
typedef struct {
int Id;
char courseNo[10];
char courseName[20];
float a;
float b;
float c;
float d;
float e;
float f;
} MarkInfo;
StudentInfo si[30];
MarkInfo mi[150]; //定义的两个结构体
源代码
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int Id;
char name[10];
char sex[6];
int room;
int tel;
} StudentInfo;
typedef struct {
int Id;
char courseNo[10];
char courseName[20];
float a;
float b;
float c;
float d;
float e;
float f;
} MarkInfo;
StudentInfo si[30];
MarkInfo mi[150];
int sp=0;
int mp=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[sp].Id,si[sp].name,&si[sp].sex,&si[sp].room,&si[sp].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[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);
if (mi[mp].c == -1)
mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;
else
mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;
if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a;//计算学分
else if ( mi [mp].e >= 80. )
mi[mp].f = mi[mp].a *0.8;
else if ( mi[mp].e >= 70. )
mi[mp].f = mi[mp].a *0.75;
else if ( mi[mp].e >= 60. )
mi[mp].f = mi[mp].a *0.6;
else mi[mp].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[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);
if(mi[mp].Id==-1)break;
if (mi[mp].c == -1)
mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;
else
mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;
if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a;
else if ( mi [mp].e >= 80. )
mi[mp].f = mi[mp].a *0.8;
else if ( mi[mp].e >= 70. )
mi[mp].f = mi[mp].a *0.75;
else if ( mi[mp].e >= 60. )
mi[mp].f = mi[mp].a *0.6;
else mi[mp].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[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[mp].b,&mi[i].c, &mi[i].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[i].Id != x) i++;
if (i<sp-1)
{
for ( k=i; k<sp-1; k++)
{
si[k] = si[k+1];
}
}
if ( i<sp) sp--;
d = 0;
for (k=0;k<mp;k++)
{
if ( mi[k].Id == x ) d++;
else mi[k-d] = mi[k];
}
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[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[i].b,&mi[i].c, &mi[i].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 QueryMark(int x)
{
int i=0;
while(si[i].Id!=x)
{
i++;
}
printf("学号: %d 姓名: %s\n",si[i].Id,si[i].name);
for (i=0;i<sp;i++)
{
if ( si[i].Id == x )
{
printf ("课程编号: %s 课程名称: %s 综合成绩: %f 实得学分: %f\n",mi[i].courseNo,mi[i].courseName,mi[i].e,mi[i].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[j].e>mi[j+1].e)
{
t=mi[j];
mi[j] = mi[j+1];
mi[j+1] = t;
}
}
}
markput();
}
void sort2()
{
int i,j;
MarkInfo t;
for (i=mp-1;i>=1;i--)
{
for (j=0;j<i;j++)
{
if (mi[j].f>mi[j+1].f)
{
t=mi[j];
mi[j] = mi[j+1];
mi[j+1] = 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[i].Id,mi[i].courseNo,mi[i].courseName,mi[i].a,mi[i].b,mi[i].c,mi[i].d,mi[i].e,mi[i].f);
}
} |
|