超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx
- 文档编号:7715243
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:26
- 大小:20.50KB
超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx
《超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx》由会员分享,可在线阅读,更多相关《超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx(26页珍藏版)》请在冰点文库上搜索。
超好的学生成绩管理系统顺序表实现的代码含详细注释哦
#include
#include
#include
#defineLIST_INIT_SIZE4//线性表存储空间的初始分配量
#defineLISTINCREMENT10//线性表存储空间的分配增量
//学生的定义
typedefstruct
{
intnum;
charname[20];
floatenglish;
floatmath;
floatdatabase;
floatsum;
floataverage;
}Student;
//顺序表的定义
typedefstruct
{
Student*stu;
intlength;
intlistsize;
}sqlist;
//函数1录入信息
intInput(sqlist*L)
{
inti=1;//为了查找、排序的方便将第一个当哨兵
charflag='y';
//输入数据
while(flag=='Y'||flag=='y')
{
for(i=1;i
{
printf("请输入第%d个同学的信息:
\n",L->length);
printf("学号:
");
fflush(stdin);
scanf("%d",&L->stu[L->length].num);
printf("姓名:
");
fflush(stdin);
scanf("%s",L->stu[L->length].name);
printf("英语成绩:
");
fflush(stdin);
scanf("%f",&L->stu[L->length].english);
printf("高数成绩:
");
fflush(stdin);
scanf("%f",&L->stu[L->length].math);
printf("数据结构成绩:
");
fflush(stdin);
scanf("%f",&L->stu[L->length].database);
L->stu[L->length].sum=L->stu[L->length].english+L->stu[L->length].math+L->stu[L->length].database;
L->stu[L->length].average=L->stu[L->length].sum/3;
L->length++;
printf("是否继续[Y/N]...");
fflush(stdin);
flag=getchar();
if(flag=='N'||flag=='n')
break;
}
}
return0;
}
//函数2显示所有学生信息
intDisplay(sqlist*L)
{
inti;
if(L->length<=1)
{
printf("请先输入数据!
\n");
return0;
}
printf("所有同学信息如下:
\n");
printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");
for(i=1;i
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->stu[i].num,L->stu[i].name,L->stu[i].sum,L->stu[i].average,L->stu[i].english,L->stu[i].math,L->stu[i].database);
return0;
}
//函数3插入一条记录到表尾
voidInsert(sqlist*L)
{
printf("学号:
");
scanf("%d",&L->stu[L->length].num);
printf("姓名:
");
scanf("%s",L->stu[L->length].name);
printf("英语成绩:
");
scanf("%f",&L->stu[L->length].english);
printf("高数成绩:
");
scanf("%f",&L->stu[L->length].math);
printf("数据结构成绩:
");
scanf("%f",&L->stu[L->length].database);
L->stu[L->length].sum=L->stu[L->length].english+L->stu[L->length].math+L->stu[L->length].database;
L->stu[L->length].average=L->stu[L->length].sum/3;
L->length++;
}
//函数4删除一条记录
intDelete(sqlist*L)
{
chars[20];
inti=1,j,ch,n;//第一个是哨兵
if(L->length<=1)
{
printf("请先输入数据!
\n");
return0;
}
printf("1.按姓名删除\n2.按学号删除\n请选择:
");
scanf("%d",&ch);
if(ch==1)
{
printf("请输入姓名:
");
scanf("%s",s);
while(strcmp(L->stu[i].name,s)!
=0&&i
i++;
}
else
{
printf("请输入学号:
");
scanf("%d",&n);
while(L->stu[i].num!
=n&&i
i++;
}
if(i>=L->length)
{
printf("要删除记录不存在!
");
return0;
}
for(j=i;j
L->stu[j]=L->stu[j+1];
printf("删除成功!
\n");
L->length--;
return0;
}
//函数5统计成绩
intStatistic(sqlist*L)
{
inti,j=1,j1=1,j2=1,j3=1,k=1,k1=1,k2=1,k3=1;//要算及格率两个整数相除可能会是0所以float型
floataver,stusum=0,stusum1=0,stusum2=0,stusum3=0,count1=0,count2=0,count3=0;
if(L->length<=1)
{
printf("请先输入数据!
\n");
return0;
}
for(i=1;i
{
//用于计算全班平均成绩
stusum+=L->stu[i].sum;
//用于计算各科平均成绩
stusum1+=L->stu[i].english;
stusum2+=L->stu[i].math;
stusum3+=L->stu[i].database;
//查找总分最高分
if(L->stu[j].sum
j=i;
//查找总分最低分
if(L->stu[k].sum>L->stu[i].sum)
k=i;
//查找英语最高分
if(L->stu[j1].english
j1=i;
//查找高数最高分
if(L->stu[j2].math
j2=i;
//查找数据结构最高分
if(L->stu[j3].database
j3=i;
//查找英语最低分
if(L->stu[k1].english>L->stu[i].english)
k1=i;
//查找高数最低分
if(L->stu[k2].math>L->stu[i].math)
k2=i;
//查找数据结构最低分
if(L->stu[k3].database>L->stu[i].database)
k3=i;
//用于计算及格率
if(L->stu[i].english>=60)
count1++;
if(L->stu[i].math>=60)
count2++;
if(L->stu[i].database>=60)
count3++;
}
aver=stusum/L->length;
printf("共有%d条记录.\n",L->length);
printf("总分最高的记录:
\n");
printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->stu[j].num,L->stu[j].name,L->stu[j].sum,L->stu[j].average,L->stu[j].english,L->stu[j].math,L->stu[j].database);
printf("总分最低的记录:
\n");
printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->stu[k].num,L->stu[k].name,L->stu[k].sum,L->stu[k].average,L->stu[k].english,L->stu[k].math,L->stu[k].database);
printf("全体同学平均成绩:
%.2f\n",aver);
printf("英语及格率:
%.2f\n",count1/(L->length-1));
printf("高数及格率:
%.2f\n",count2/(L->length-1));
printf("数据结构及格率:
%.2f\n",count3/(L->length-1));
printf("英语最高分:
%.2f\n",L->stu[j1].english);
printf("高数最高分:
%.2f\n",L->stu[j2].math);
printf("数据结构最高分:
%.2f\n",L->stu[j3].database);
printf("英语最低分:
%.2f\n",L->stu[k1].english);
printf("高数最低分:
%.2f\n",L->stu[k2].math);
printf("数据结构最低分:
%.2f\n",L->stu[k3].database);
return0;
}
//函数6查找
intSearch(sqlist*L)
{
charsn[20];
inti=1,ch1,ch2,j,snum,low,high,mid;
if(L->length<=1)
{
printf("请先输入数据!
\n");
return0;
}
printf("1.顺序查找\n2.二分查找\n请选择:
");
scanf("%d",&ch1);
if(ch1==1){
printf("1.按学号查找\n2.按姓名查找\n请选择:
");
scanf("%d",&ch2);
if(ch2==1)
{
printf("请输入学号:
");
scanf("%d",&snum);
while(L->stu[i].num!
=snum&&i
i++;
}
else{
printf("请输入姓名:
");
scanf("%s",sn);
while(strcmp(L->stu[i].name,sn)!
=0&&i
i++;
}
if(i>=L->length)
{
printf("查找失败!
");
return0;
}
printf("查找成功!
\n");
printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->stu[i].num,L->stu[i].name,L->stu[i].sum,L->stu[i].average,L->stu[i].english,L->stu[i].math,L->stu[i].database);
}
if(ch1==2){
printf("1.按学号查找\n2.按姓名查找\n请选择:
");
scanf("%d",&ch2);
if(ch2==1)
{//二分查找,先按学号排序
for(i=2;i
if(L->stu[i].num
{
L->stu[0]=L->stu[i];
L->stu[i]=L->stu[i-1];
for(j=i-2;L->stu[0].num
L->stu[j+1]=L->stu[j];
L->stu[j]=L->stu[0];
}
printf("请输入学号:
");
scanf("%d",&snum);
low=1;high=L->length-1;//置区间初值
while(low<=high)
{mid=(low+high)/2;
if(L->stu[mid].num==snum){
printf("查找成功!
\n");
printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->stu[mid].num,L->stu[mid].name,L->stu[mid].sum,L->stu[mid].average,L->stu[mid].english,L->stu[mid].math,L->stu[mid].database);
return0;
}
else
if(snum
else
low=mid+1;//继续在后半区间进行查找
}
printf("查找失败!
\n");
return0;
}
else
{//二分查找,先按姓名排序
for(i=2;i
if(strcmp(L->stu[i].name,L->stu[i-1].name)<0)
{
L->stu[0]=L->stu[i];
L->stu[i]=L->stu[i-1];
for(j=i-2;strcmp(L->stu[0].name,L->stu[j].name)<0;j--)
L->stu[j+1]=L->stu[j];
L->stu[j]=L->stu[0];
}
printf("请输入姓名:
");
scanf("%s",sn);
low=1;high=L->length-1;//置区间初值
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(L->stu[mid].name,sn)==0){
printf("查找成功!
\n");
printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->stu[mid].num,L->stu[mid].name,L->stu[mid].sum,L->stu[mid].average,L->stu[mid].english,L->stu[mid].math,L->stu[mid].database);
return0;
}
else
if(strcmp(sn,L->stu[mid].name)<0)high=mid-1;//继续在前半区间进行查找
else
low=mid+1;//继续在后半区间进行查找
}
printf("查找失败!
\n");
return0;
}//else
}//if(ch1==2)
}
//函数7排序
intSort(sqlist*L)
{
inti,ch1,ch2,j,k;
intlow,high,mid;
if(L->length<=1)
{
printf("请先输入数据!
\n");
return0;
}
printf("1.直接插入排序\t2.折半插入排序\n3.冒泡排序\t4.直接选择排序\n请选择:
");
scanf("%d",&ch1);
switch(ch1){
case1:
printf("1.按学号排序\n2.按英语成绩排序\t3.按高数成绩排序\n4.按数据结构成绩排序\t5.按总分排序\n请选择:
");
scanf("%d",&ch2);
switch(ch2){
case1:
for(i=2;i
if(L->stu[i].num
{
L->stu[0]=L->stu[i];
L->stu[i]=L->stu[i-1];
for(j=i-2;L->stu[0].num
L->stu[j+1]=L->stu[j];
L->stu[j]=L->stu[0];
}
break;
case2:
for(i=2;i
if(L->stu[i].english
{
L->stu[0]=L->stu[i];
L->stu[i]=L->stu[i-1];
for(j=i-2;L->stu[0].english
L->stu[j+1]=L->stu[j];
L->stu[j]=L->stu[0];
}
break;
case3:
for(i=2;i
if(L->stu[i].math
{
L->stu[0]=L->stu[i];
L->stu[i]=L->stu[i-1];
for(j=i-2;L->stu[0].math
L->stu[j+1]=L->stu[j];
L->stu[j]=L->stu[0];
}
break;
case4:
for(i=2;i
if(L->stu[i].database
{
L->stu[0]=L->stu[i];
L->stu[i]=L->stu[i-1];
for(j=i-2;L->stu[0].database
L->stu[j+1]=L->stu[j];
L->stu[j]=L->stu[0];
}
break;
case5:
for(i=2;i
if(L->stu[i].sum
{
L->stu[0]=L->stu[i];
L->stu[i]=L->stu[i-1];
for(j=i-2;L->stu[0].sum
L->stu[j+1]=L->stu[j];
L->stu[j]=L->stu[0];
}
break;
}//swich(ch2)
break;
case2:
printf("1.按学号排序\n2.按英语成绩排序\t3.按高数成绩排序\n4.按数据结构成绩排序\t5.按总分排序\n请选择:
");
scanf("%d",&ch2);
switch(ch2){
case1:
for(i=2;i
{
if(L->stu[i].num
{
L->stu[0]=L->stu[i];/*设置监测哨*/
low=1;
high=i-1;
while(low<=high)
{/*在r[low..high]中折半查找有序插入的位置*/
mid=(low+high)/2;
if(L->stu[0].num
high=mid-1;/*插入点在低半区*/
else
low=mid+1;/*插入点在高半区*/
}/*while*/
for(j=i-1;j>=low;--j)
L->stu[j+1]=L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 顺序 实现 代码 详细 注释