热门标签 | 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语言期末大作业-学生成绩管理系统(完整源码+设计报告)


推荐阅读
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本次考试于2016年10月25日上午7:50至11:15举行,主要涉及数学专题,特别是斐波那契数列的性质及其在编程中的应用。本文将详细解析考试中的题目,并提供解题思路和代码实现。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 在多线程编程环境中,线程之间共享全局变量可能导致数据竞争和不一致性。为了解决这一问题,Linux提供了线程局部存储(TLS),使每个线程可以拥有独立的变量副本,确保线程间的数据隔离与安全。 ... [详细]
  • 本文介绍了几种不同的编程方法来计算从1到n的自然数之和,包括循环、递归、面向对象以及模板元编程等技术。每种方法都有其特点和适用场景。 ... [详细]
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社区 版权所有