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


推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 本文提出了一种基于栈结构的高效四则运算表达式求值方法。该方法能够处理包含加、减、乘、除运算符以及十进制整数和小括号的算术表达式。通过定义和实现栈的基本操作,如入栈、出栈和判空等,算法能够准确地解析并计算输入的表达式,最终输出其计算结果。此方法不仅提高了计算效率,还增强了对复杂表达式的处理能力。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277。作者:Bob Lee,日期:2012年9月15日。题目描述:给定n个木棍,求可以组成的不同三角形的数量,最多15根木棍。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 你的问题在于:1. 代码格式混乱,缺乏必要的缩进,导致可读性极低;2. 使用 `strlen()` 和 `malloc()` 函数时,必须包含相应的头文件;3. `write()` 函数的返回值处理不当,建议检查并处理其返回值以确保程序的健壮性。此外,建议在编写代码时遵循良好的编程规范,增加代码的可维护性和可读性。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
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社区 版权所有