#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
typedef struct
{
int Id; //学号
char name[10]; //姓名
char sex[2]; //性别
int room; //宿舍号
int tel; //电话号码
} StudentInfo; //定义学生信息的结构体类型
typedef struct
{
int Id;
char courseNo[10]; //课程编号
char courseName[20];//课程名
double a; // 课程学分
double b; // 平时成绩
double c; // 实验成绩
double d; // 卷面成绩
double e; // 综合成绩
double f; // 实际学分
} MarkInfo; //定义课程信息的结构体类型
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(); //成绩输出
StudentInfo si[30]; // 学生信息结构数组
MarkInfo mi[150]; // 学生成绩结构数组
int sp=0; // 学生信息结构数组中学生数
int mp=0; // 学生成绩结构数组中成绩数
void ReadFile( )//读取文件
{
FILE *fp;
if((fp = fopen("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++;
}
fclose (fp);
fp = fopen("B.txt","r");
while (!feof(fp))
{
fscanf(fp,"%d%s%s%d%d%d%d",&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/1.0)+0.7*(mi[mp].d/1.0);
else
mi[mp].e = 0.15*(mi[mp].b/1.0)+0.15*(mi[mp].c/1.0)+0.7*(mi[mp].d/1.0);
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%d%d%d%d",&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("B.txt","r+");
for(i=0;i<mp;i++)
{
fprintf(fp,"%d%s%s%d%d%d%d",&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)
{
}
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("D:B.txt","r+");
for(i=0;i<mp;i++)
fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[i].b,&mi[i].c, &mi[i].d);
}
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();
}
这段函数是定义好的,求大佬帮帮忙编写完!
要求:使用下面的数据,用C语言设计一个简单的学籍管理系统,实现出最基本的功能。
学生基本信息文件(A.TXT)及其内容:A.TXT文件不需要编程录入数据,可用文本编辑工具直接生成:
学号 姓名 性别 宿舍号码 电话号码
01 张成成 男 501 87732111
02 李成华 女 101 87723112
03 王成凤 女 101 87723112
04 张明明 男 502 87734333
05 陈东 男 501 87732111
06 李果 男 502 87734333
07 张园园 女 102 87756122
… …. .. … ………..
学生成绩基本信息文件(B.TXT)及其内容:
学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分
01 A01 大学物理 3 66 78 82
02 B03 高等数学 4 78 -1 90
01 B03 高等数学 4 45 -1 88
02 C01 VF 3 65 76 66
… …. ………. .. .. …
(一) 功能要求及说明:
(1) 数据录入功能: 对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据. 综合成绩、学分由程序根据条件自动运算。
综合成绩的计算:如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% .
实得学分的计算: 采用等级学分制.
综合成绩在90-100之间 ,应得学分=学分*100%
综合成绩在80-90之间 ,应得学分=学分*80%
综合成绩在70-80之间 ,应得学分=学分*75%
综合成绩在60-70之间 ,应得学分=学分*60%
综合成绩在60以下 ,应得学分=学分*0%
(2)查询功能:分为学生基本情况查询和成绩查询两种
A:学生基本情况查询:
A1----输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
A2---输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
B:成绩查询:
B1:输入一个学号时,查询出此生的所有课程情况,格式如下:
学 号:xx 姓 名:xxxxx
课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx
课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx
课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx
… … … … ……… … …
共修:xx科,实得总学分为: xxx
(3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。
(4 ) 排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。