热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言期末大作业学生成绩管理系统(完整源码+设计报告)

原标题:C语言期末大作业-学生成绩管理系统(完整源码+设计报告)C语言-学生成绩管理系统一

原标题:C语言期末大作业-学生成绩管理系统(完整源码+设计报告)


C语言-学生成绩管理系统



  • 一、学生成绩管理系统源码(完整)

  • 二、程序设计报告


    • 1、课程设计目的

    • 2、课程设计任务与要求:

    • 4、课程设计成果(运行截图)

    • 5、课程设计心得





一、学生成绩管理系统源码(完整)

#include
#include
#include
#define LEN sizeof(struct Student)
struct Student
{
int clas;
int num;
char name[20];
char cou[20];
int score;
struct Student *next;
};
struct Student *creat(void)
{
struct Student *head;
struct Student *p1,*p2;
int n=0;
printf("班级 学号 姓名 课程 得分(输入0 0 0 0 0结束):\n");
p1=p2=(struct Student*)malloc(LEN);
scanf("%d%d%s%s%d",&p1->clas,&p1->num,p1->name,p1->cou,&p1->score);
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Student*)malloc(LEN);
scanf("%d%d%s%s%d",&p1->clas,&p1->num,p1->name,p1->cou,&p1->score);
}
p2->nwww.yii666.comext=NULL;
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;
www.yii666.comdefault: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->n文章来源地址15224.htmlame,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);
}
文章来源地址15224.html
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语言的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、文章来源站点https://www.yii666.com/解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C语言程序设计这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。


2、课程设计任务与要求:

本次课程设计利用《C语言程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。

要求:
1、对系统进行功能需求分析
2、设计合理的数据结构和系统框架
3、编程简练,程序功能齐全,能正确运行
4、说明书、流程图要清楚
5、课题完成后必须按要求提交课程设计报告

任务:
设计一个学生成绩排名系统
实现功能:


  1. 具备对成绩的管理功能(添加、删除、排序)

  2. 具备对成绩的统计功能(最高分,最低分,平均分,及格率等)

  3. 具备按学号、姓名、或课程名查询成绩的功能。
    4)学生成绩应该保存在文件中。
    备注:成绩记录以下信息:班级,学号,姓名,课程名,成绩(百分制)。可以用能表示学生成绩的结构体数组存储数据。

概要设计
首先拿到这个课程题,学生成绩管理系统,数组或动态链表都可以去解决,我选择了动态链表,在主函数中调用函数来达到功能的实现。函数包括添加,删除,排序,最高分。最低风,及格率,平均分,查询。都将以输入的学生信息作为传参。

详细设计
1、因为不知道具体的学生人数,所以我选择了去使用动态链表去实现输入学生信息的功能。
使用动态链表的时候,对于添加个人信息,删除,排序等问题的难度比较大,需要好好思考问题的难点,再去设计算法解决。
2、题目所蕴含的功能包括添加,删除,排序,最高分。最低风,及格率,平均分,查询。这些功能选择使用switch函数去进行分类输入,分类调用。尽量使功能齐全方便。对于最高分,最低分,平均分,及格率这些问题。平时解决的也比较多一些常用办法即可。对于添加个人信息,需要在动态链表的最后再加上个人信息,删除和查询感觉是一类问题,需要一一去匹配个人信息。排序在这里是个比较麻烦的问题,因为使用的是动态链表。所以比数组处理起来要麻烦一点。
3、以上的知识点大概要用到stdio,stdlib,string三个头文件即可。
4、界面美观简洁即可。

图1:

在这里插入图片描述

ADD函数: 将动态链表指向最后一个,然后在链表末尾创建新的空间去连接,再输出新的链表。

图2:

在这里插入图片描述

DEL函数:输入学号 让它和链表中的学号一一对比,

图3:

在这里插入图片描述

MAX函数:擂台算法 将第一个赋值给max 然后让max与后面的比较,这样可以不破坏原函数。

图4:

在这里插入图片描述

平均数函数:这个算法比较简单就建立一个循环,在其中计算人数的多少,利用累加算出总分数有多少,再算出平均分。

图5:

在这里插入图片描述

及格率函数:和平均值函数差不多,只需要循环将满足条件的选出来,最后将数值计算出来即可。

在这里插入图片描述

图9:

在这里插入图片描述


4、课程设计成果(运行截图)

在这里插入图片描述


5、课程设计心得

通过这次课程设计,我意识到了c语言在程序设计中的重要性,和它的实用性,在一个学年的学习中,从一开始的输入,输出。到后面的函数,指针,链表。不断地学习和实践让我的c语言技术有了一个较好的基础,这也归功于戴老师的教导。此次课程设计,是我第一次去编写的一个较大的程序。在其中我意识到了自己的不足,即动态链表的使用,但是在设计中,我抛弃自己擅长的数组,去使用动态链表在一次次调试中,理清楚动态链表的操作方法。但还是在链表排序的问题上遇到了麻烦,通过上网查找资料,和同学进行讨论后终于将问题解决。我觉得此次课程设计十分有意义,它是对我们c语言学习的一次总结,让我们将所学知识融会贯通,去用于实践。我觉得c语言是基础,只有打好基础才能在以后的程序语言学习中有一个较好的发展。回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从理论到实践,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

喜欢的点个赞收藏一下呗!感谢支持!

来源于:C语言期末大作业-学生成绩管理系统(完整源码+设计报告)


推荐阅读
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了PHP常量的定义和使用方法,包括常量的命名规则、大小写敏感性、全局范围和标量数据的限制。同时还提到了应尽量避免定义resource常量,并给出了使用define()函数定义常量的示例。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
author-avatar
金玉的海角_745
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有