学生成绩管理

来源:互联网 发布:淘宝上的美国快高 编辑:程序博客网 时间:2024/03/29 12:37

学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本实验是对学生的成绩管理作一个简单的模拟,用菜单选择操作方式完成下列功能:

1)学生成绩;

2)查询学生成绩;

3)插入学生成绩;

4)删除学生成绩。

【知识要点】

本实验涉及单链表的各种操作,包括单链表的建立、结点的查找、插入、删除等基本运算。链表中插入结点的指针变化,删除p所指结点的指针变化。

【实现提示】

本题实质是建立学生成绩单链表,每条信息由学号、姓名与成绩组成,即链表中每个结点由4个域组成,分别为:学号、姓名、成绩、存放下一个结点地址的next域。要求完成的四项功能可写成四个函数,登记学生成绩对应建立学生单链表的功能,后三个功能分别对应单链表的查询、插入与删除三大基本操作。

/* 标准文档模板 */

#include "Stdio.h"
#include "Conio.h"
#define SIZE 50
struct student
{
int ID;
char name[20];
int score[3];//
三门课的成绩
float avg;
};
int count=4; //
用来记录总条数 因为已有四条记录所以初始化为4,再录入记录时从第四条开始记录
void input(struct student stu[]) /*
实现信息录入功能*/
{
int i;
int sum; //
总分
char ch;
do
{
sum=0;
printf("
请输入学生ID:/n");
scanf("%d",&stu[count].ID);
printf("
请输入学生name:/n");
scanf("%s",&stu[count].name);
for(i=0;i<3;i++)
{
printf("
请输入第%d门成绩",i+1);
scanf("%d",&stu[count].score[i]);
sum=sum+stu[count].score[i];//
计算总分
}
stu[count].avg=sum/3.0f; //
计算平均分
count++; //
累计总记录条数
printf("
是否继续录入信息?(y/n)");
fflush(stdin);
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');
}
void view(struct student stu[]) /*
实现信息浏览功能*/
{
int i;
printf("/nID /tNAME /t/tSTB/tC
语言/tSQL/tAVG/n");
for(i=0;i<count;i++)
{
printf("%d/t%-15.7s %d/t%d/t%d/t%-.2f/n",stu[i].ID,stu[i].name,stu[i].score[0],
stu[i].score[1],stu[i].score[2],stu[i].avg);
}
}

void sort_ID(struct student stu[]) //
按学号进行排序
{
int i,j;
struct student temp;//
定义结构体变量来实现整条记录交换
for(i=0;i<count-1;i++) //
选择排序法进行排序
{
for(j=i+1;j<count;j++)
{
if(stu[i].ID<stu[j].ID)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
view(stu);
}
void sort_Name(struct student stu[]) //
按姓名进行排序
{
int i,j;
struct student temp;
for(i=0;i<count-1;i++)//
选择排序法进行排序
{
for(j=i+1;j<count;j++)
{
if(strcmp(stu[i].name,stu[j].name)>0) //
strcmp比较名字的大小
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
view(stu);
}
void sort_Avg(struct student stu[]) //
按平均分大小进行排序
{
int i,j;
struct student temp;//
定义结构体变量来实现整条记录交换
for(i=0;i<count-1;i++) //
选择排序法进行排序
{
for(j=i+1;j<count;j++)
{
if(stu[i].avg<stu[j].avg)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
view(stu);
}
void sort(struct student stu[])
{
int option;
do
{
printf("/n========1.
按学号排序==========2.按姓名排序=======/n");
printf("/n========3.
按平均分排序========0.退出=============/n");
printf("
请选择:/n");
scanf("%d",&option);
switch(option)
{
case 0:printf("
谢谢!");break;
case 1:sort_ID(stu);break;
case 2:sort_Name(stu);break;
case 3:sort_Avg(stu);break;
default:printf("
请重新选择!"); break;
}
}while(option!=0);
}
/*
按学号查询*/
void findID(struct student stu[])
{
int tempID;//
要查找的临时学号
char flag='n'; //
默认没有找到状态
int i;
printf("
请输入要查询的学号:");
scanf("%d",&tempID);
printf("/n/t
学号 /t姓名/tSTB /tC成绩/tSQL成绩 平均分/n");
for(i=0;i<count;i++)
{
if(tempID==stu[i].ID) //
找到
{
printf("/t%d/t%s/t%d/t%d/t%df/t%-.2f/n",stu[i].ID,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avg);
flag='y'; //
找到的状态

}

}
if(flag!='y')
printf("
找不到学号是%d的记录/n",tempID);

}
/*
按姓名查询*/
void findName(struct student stu[])
{
char tempName[15]; //
要查找的临时姓名
int flag=0; //
默认没有找到状态
int i;
printf("
请输入要查询的姓名:");
fflush(stdin);
scanf("%s",tempName);
printf("/n/t
学号 /t姓名/tSTB /tC成绩/tSQL成绩 平均分/n");
for(i=0;i<count;i++)
{
if(strcmp(tempName,stu[i].name)==0) //
找到
{
printf("/t%d/t%s/t%d/t%df/t%df/t%-.2f/n",stu[i].ID,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avg);
flag=1; //
找到的状态

}

}
if(flag!=1)
printf("
找不到姓名是%s的记录/n",tempName);

}
/*
按学号,姓名,平均分查询 */
void find(struct student stu[])
{
int option;
printf("/n********************************************************/n");
printf("/n****** 1.
退出 2.按学号 3.按姓名 ****************/n");
printf("/n********************************************************/n");
printf("
请选择: ");
scanf("%d",&option);
switch(option)
{
case 1: break;
case 2: findID(stu);break;
case 3: findName(stu);break;
default: printf("
选项无效!! /n");break;
}
}
int main(void)
{
/*
此处添加你自己的代码 */
struct student stu[SIZE]={{1002,"LiLan",70,80,90,80},{1004,"WangHai",75,85,95,85},
{1003,"LiYang",60,80,73,81},{1001,"JackChen",95,90,100,95}}; //
初始化四条信息
int option;
do
{
printf("/n======0.
退出===========1.信息录入==========2.信息浏览=====/n");
printf("/n======3.
信息排序========4.信息查询========================/n");
printf("
请选择:/n");
scanf("%d",&option);
switch(option)
{
case 0:printf("
欢迎下次再使用!");break;
case 1:input(stu);break;
case 2:view(stu);break;
case 3:sort(stu);break;
case 4:find(stu);break;
default:printf("
请重新选择!");
}
}while(option!=0);
getch();
return 0;
}

 

 

 

原创粉丝点击