return(head);
}
void shuchu(struct Student *pt) { printf("\n"); printf("班级 学号 姓名 课程 得分:\n"); while (pt!=NULL) { printf("%-5d%-5d%-5s%-5s%-5d\n",pt->clas,pt->num,pt->name,pt->cou,pt->score); pt=pt->next; } printf("\n"); }
void add(struct Student *pt) { struct Student *p1,*p2,*head; head=pt; printf("请输出你要添加的学生信息:\n"); while(pt->next!=NULL) { pt=pt->next; } p1=p2=pt; printf("班级 学号 姓名 课程 得分(输入0 0 0 0 0结束):\n"); do { p1=(struct Student*)malloc(LEN); scanf("%d%d%s%s%d",&p1->clas,&p1->num,p1->name,p1->cou,&p1->score); p2->next=p1; p2=p1; }while(p1->num!=0); p2->next=NULL; shuchu(head); }
void del(struct Student *pt) { int n; printf("请输入你要删除的学生的学号:\n"); scanf("%d",&n); if(n==pt->num) { pt->next=pt->next->next; printf("已删除学生信息\n"); } while(n!=(pt->next)->num) { pt=pt->next; } pt->next=pt->next->next; printf("已删除学生信息\n"); printf("\n"); }
void order(struct Student *pt) { struct Student *first,*t,*p,*q;
first=pt->next;
pt->next=NULL;
while(first!=NULL)
{
for(t=first,q=pt;((q!=NULL)&&(q->score<t->score));p=q,q=q->next);
first = first->next;
if(q==pt)
pt=t;
else
p->next=t;
t->next=q;
}
shuchu(pt);
}
void max(struct Student *pt) { struct Student *max; max=pt; while(pt->next!=NULL) { if((max->score)<(pt->next->score)) { max=pt->next; } pt=pt->next; } printf("\n"); printf("班级 学号 姓名 课程 得分:\n"); printf("%-5d%-5d%-5s%-5s%-5d\n",max->clas,max->num,max->name,max->cou,max->score); printf("\n"); }
void min(struct Student *pt) { struct Student *min; min=pt; while(pt->next!=NULL) { if((min->score)>(pt->next->score)) { min=pt->next; } pt=pt->next; } printf("\n");
printf("班级 学号 姓名 课程 得分:\n");
printf("%-5d%-5d%-5s%-5s%-5d\n",min->clas,min->num,min->name,min->cou,min->score);
printf("\n");
}
void aver(struct Student *pt) { int n=0; float aver,sum=0.0; while(pt!=NULL) { sum+=pt->score; n++; pt=pt->next; } aver=(float)sum/n; printf("\n"); printf("平均分:%f\n",aver); printf("\n"); }
void jigelv(struct Student *pt) { int n=0; float jigelv=0.0,s=0.0; while(pt!=NULL) { if((pt->score)>=60) { n++; } s++; pt=pt->next; } jigelv=n/s*100; printf("\n"); printf("及格率:百分之%f",jigelv); printf("\n"); }
void search(struct Student *pt) { void num(struct Student *pt); void name(struct Student *pt); void cou(struct Student *pt); int n; printf("\n"); printf("请输入你要查询学生的 1 学号 2 姓名 3 课程名:\n"); scanf("%d",&n); switch(n) { case 1:num(pt);break; case 2:name(pt);break; case 3:cou(pt);break; default:printf("error!\n"); } }
void num(struct Student *pt) { int n; printf("\n"); printf("请输入你要查询学生的学号:\n"); scanf("%d",&n); while(pt->num!=n) { pt=pt->next; } printf("班级 学号 姓名 课程 得分:\n"); printf("\n"); printf("%-5d%-5d%-5s%-5s%-5d\n",pt->clas,pt->num,pt->name,pt->cou,pt->score); }
void name(struct Student *pt) { char name[20]; scanf("%s",name); printf("\n"); printf("请输入你要查询学生的姓名:\n"); while(strcmp(pt->name,name)!=0) { pt=pt->next; } printf("班级 学号 姓名 课程 得分:\n"); printf("\n"); printf("%-5d%-5d%-5s%-5s%-5d\n",pt->clas,pt->num,pt->name,pt->cou,pt->score); }
void cou(struct Student *pt) { char cou[20]; scanf("%s",cou); printf("\n"); printf("请输入你要查询学生的课程名:\n"); while(strcmp(pt->cou,cou)!=0) { pt=pt->next; } printf("班级 学号 姓名 课程 得分:\n");
printf("\n");
printf("%-5d%-5d%-5s%-5s%-5d\n",pt->clas,pt->num,pt->name,pt->cou,pt->score);
}
void save(struct Student *pt) { FILE *fp; if((fp=fopen("D:\student information.txt","w"))==NULL) { printf("can't open file!\n"); exit(0); } while(pt!=NULL) { if(fwrite(pt,sizeof(struct Student),1,fp)!=1) printf("file write error\n"); pt=pt->next; } printf("存储完成\n"); fclose(fp); }
void main() { FILE *fp; int i; struct Student *pt; pt=creat();
if((fp=fopen("D:\\xia.txt","w"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
shuchu(pt);
printf("请输入你想要实现的功能的序号\n1 添加学生信息\n2 删除学生信息\n3 学生成绩排序\n4 最高分\n5 最低分\n6 平均分\n7 及格率\n8 查询学生\n9 退出\n");
for(;;)
{
scanf("%d",&i);
switch(i)
{
case 1:add(pt);break;
case 2:del(pt);break;
case 3:order(pt);break;
case 4:max(pt);break;
case 5:min(pt);break;
case 6:aver(pt);break;
case 7:jigelv(pt);break;
case 8:search(pt);break;
case 9:exit(0);break;
default:printf("error!\n");
}
}
save(pt);
}
## 二、程序设计报告
### 1、课程设计目的
C语言程序设计课程设计是计算机科学与技术专业重要的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C语言的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C语言程序设计这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。
### 2、课程设计任务与要求:
本次课程设计利用《C语言程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。
**要求:**
1、对系统进行功能需求分析
2、设计合理的数据结构和系统框架
3、编程简练,程序功能齐全,能正确运行
4、说明书、流程图要清楚
5、课题完成后必须按要求提交课程设计报告
**任务:**
设计一个学生成绩排名系统
实现功能:
1. 具备对成绩的管理功能(添加、删除、排序)
2. 具备对成绩的统计功能(最高分,最低分,平均分,及格率等)
3. 具备按学号、姓名、或课程名查询成绩的功能。
4)学生成绩应该保存在文件中。
备注:成绩记录以下信息:班级,学号,姓名,课程名,成绩(百分制)。可以用能表示学生成绩的结构体数组存储数据。
**概要设计**
首先拿到这个课程题,学生成绩管理系统,数组或动态链表都可以去解决,我选择了动态链表,在主函数中调用函数来达到功能的实现。函数包括添加,删除,排序,最高分。最低风,及格率,平均分,查询。都将以输入的学生信息作为传参。
**详细设计**
1、因为不知道具体的学生人数,所以我选择了去使用动态链表去实现输入学生信息的功能。
使用动态链表的时候,对于添加个人信息,删除,排序等问题的难度比较大,需要好好思考问题的难点,再去设计算法解决。
2、题目所蕴含的功能包括添加,删除,排序,最高分。最低风,及格率,平均分,查询。这些功能选择使用switch函数去进行分类输入,分类调用。尽量使功能齐全方便。对于最高分,最低分,平均分,及格率这些问题。平时解决的也比较多一些常用办法即可。对于添加个人信息,需要在动态链表的最后再加上个人信息,删除和查询感觉是一类问题,需要一一去匹配个人信息。排序在这里是个比较麻烦的问题,因为使用的是动态链表。所以比数组处理起来要麻烦一点。
3、以上的知识点大概要用到stdio,stdlib,string三个头文件即可。
4、界面美观简洁即可。
图1:
**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**


**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**
**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**