资源简介

(1)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat。 (2)对文件input.dat中的数据进行处理,要求具有如下功能: 1) 按各门课程成绩排序,并生成相应的文件输出。 2) 计算每人的平均成绩,按平均成绩排序,并生成文件。 3) 求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数。 4) 根据姓名或学号查询某人的各门课成绩,重名情况也能处理。 (3)界面美观。

资源截图

代码片段和文件信息

/*10.2.5 成绩分析问题
[问题描述]
录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。
[基本要求]
(1)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat。
(2)对文件input.dat中的数据进行处理,要求具有如下功能:
1) 按各门课程成绩排序,并生成相应的文件输出。
2) 计算每人的平均成绩,按平均成绩排序,并生成文件。
3) 求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数。
4) 根据姓名或学号查询某人的各门课成绩,重名情况也能处理。
(3)界面美观。*/
/*........................................................................................*/
#include 
#include 
#include 
struct STUDENT
{
char no[7];
char name[9];
int math;
int eng;
int com;
struct STUDENT *next;
};

typedef struct STUDENT linklist;
linklist *head=NULL;

void initlinklist() //单链表的初始化,生成一个空的单链表
{
head=(linklist *)malloc(sizeof(linklist)); //生成头结点
head->next=NULL;
}

linklist *findn(linklist *headchar *no)  //查找指定学号的学生,返回该结点的地址
{
linklist *p;
p=head->next;
while(p)
{
if(strcmp(p->nono)==0)
return p;
p=p->next;
}
return NULL;
}
linklist *findm(linklist *headchar *name)  //查找指定姓名的学生,返回该结点的地址
{
linklist *p;
p=head->next;
while(p)
{
if(strcmp(p->namename)==0)
return p;
p=p->next;
}
return NULL;
}

linklist *finds(linklist *headint score)  //查找指定数学成绩的学生,返回该结点的地址
{
linklist *p;
p=head->next;
while(p)
{
if(p->math==score) //比较是否相等相等就确定找到
return p;
p=p->next;
}
return NULL;
}

linklist *finde(linklist *headint score)  //查找指定英语成绩的学生,返回该结点的地址
{
linklist *p;
p=head->next;
while(p)
{
if(p->eng==score) //比较是否相等相等就确定找到
return p;
p=p->next;
}
return NULL;
}

linklist *findc(linklist *headint score)  //查找指定计算机成绩的学生,返回该结点的地址
{
linklist *p;
p=head->next;
while(p)
{
if(p->com==score) //比较是否相等相等就确定找到
return p;
p=p->next;
}
return NULL;
}
void creat()
{
//录入学生信息
struct STUDENT *p;
while(1)
{
p=(struct STUDENT *)malloc(sizeof(struct STUDENT));
printf(“学号:“);
fflush(stdin);
gets(p->no);
printf(“姓名:“);
fflush(stdin);
gets(p->name);
printf(“数学成绩:“);
fflush(stdin);
scanf(“%d“&(p->math));
printf(“英语成绩:“);
fflush(stdin);
scanf(“%d“&(p->eng));
printf(“计算机成绩:“);
fflush(stdin);
scanf(“%d“&(p->com));
p->next=head->next;
head->next=p;

printf(“是否要继续录入?(y/n)“);
fflush(stdin);
if(getchar()==‘n‘)break;
}
}

void prnt(linklist *p)   //输出单条记录
{
printf(“\n---------------------------------------------------\n“);
printf(“ 学号:%s“p->no);
printf(“\t姓名:%s“p->name);
printf(“\t数学:%d“p->math);
printf(“\t英语:%d“p->eng);
printf(“\t计算机:%d“p->com);
printf(“\n---------------------------------------------------\n“);
}

void search()  //查找指定学号的学生
{
char no[7];
char name[9];
linklist *p=NULL;
printf(“学号查询请输入1,姓名查询输入0:  “);
fflush(stdin);
if(getchar()==‘1‘)
{
printf(“按学号查询:\n“);
printf(“请输入要查询的学号:“);
fflush(stdin);
gets(no);
if(p=findn(headno))
{
prnt(p); //传递指针位置
}
else printf(“对不起,没有找到满足条件记录!\n“);
}
else
{
printf(“按姓

评论

共有 条评论