C语言链表实现学生成绩管理系统教程

版权申诉
0 下载量 122 浏览量 更新于2024-12-08 1 收藏 2KB ZIP 举报
资源摘要信息: "学生成绩管理系统.zip" 1. C语言实现的学生成绩管理系统 学生成绩管理系统是一套专门用于高校、中学或小学等教育机构,帮助教师和学校管理人员对学生的学习成绩进行录入、查询、修改、统计和打印等操作的软件应用。C语言由于其执行效率高、功能强大,且易于控制硬件资源,非常适合用来开发此类系统。在本资源中,系统被实现为一个用C语言编写的程序。 2. 链表结构的使用 在该系统中,采用链表结构来存储学生信息及成绩。链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据本身和指向下一个节点的指针。链表的优势在于其动态的内存分配能力,能够根据数据的增减动态调整内存的大小,非常适合用来处理数量不定的数据。在学生成绩管理系统中,使用链表可以方便地对学生信息进行添加、删除和修改等操作。 3. C++语言的提及 虽然标题中明确指出了使用C语言实现,但在标签中也出现了C++。这可能是因为C++语言在某些方面(如面向对象编程特性)与C语言有交集,开发者可能希望指出该系统的技术背景或提供给对C++也有兴趣的用户。不过,具体到本资源,我们主要关注的是C语言实现的学生成绩管理系统。 4. 链接说明 描述中提供了一个链接 https://blog.csdn.net/qq_42276781/article/details/112466816,这是指向CSDN博客文章的链接。CSDN是中国最大的IT社区和服务平台,上面有很多技术文章和资源分享。该链接指明了更详细的实现说明和代码解析,用户可以访问该链接获取更多关于学生成绩管理系统实现细节的信息。 5. 文件名称列表说明 资源压缩包中包含的文件名称列表为“学生成绩管理系统”。这意味着在解压缩后,用户将获得一个或多个文件,这些文件可能包括源代码文件、头文件、编译生成的可执行文件以及可能的文档说明等。文件列表简单直接地反映了压缩包的内容,即一个完整的学生成绩管理系统。 知识点梳理: - C语言是计算机程序设计语言,具有指针、数组、结构体等强大的操作功能,非常适合用来实现数据管理系统的开发。 - 链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。在C语言中,通过结构体和指针实现链表。 - C++语言与C语言在很多基础语法上是兼容的,但C++还提供了面向对象编程等特性。尽管本资源的重点是C语言开发的系统,但提及C++可能意在表明开发者对于C++的了解或者提供技术上的多样性。 - 链接提供了直接访问源码实现和细节说明的途径,对于用户深入理解、学习和修改该系统非常有帮助。 - 压缩包文件通常用于存储和传输文件,以减少文件大小并压缩多个文件为一个文件,方便下载和分发。用户需要解压该压缩包,才能查看和使用内部文件。 - 文件名称列表简单地说明了压缩包内可能包含的文件类型和系统组成部分,帮助用户了解解压缩后可以期待得到哪些文件。
2009-01-06 上传
#include <stdio.h> #include <stdlib.h> #include <string.h> #include<ctype.h> #define M 3 struct student {long num; char name[20]; char sex; int score[5]; int ave; }stu[M]; void init() { printf("\t\t********************************\n\n"); printf("\t\tStudent score management systerm \n"); printf("\n"); printf("\t\t Make by Maggiehe \n"); printf("\n"); printf("\t\t Student number is 3206***** \n\n"); printf("\t\t********************************\n\n"); } void input() { int i,j; printf("\nInput the student number name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) {scanf("%ld,%s,%c",&stu[i].num,stu[i].name,&stu[i].sex); for(j=0;j<5;j++) scanf("%d",&stu[i].score[j]); scanf("%d",&stu[i].ave); save(); } } void list() { int i,j; clrscr(); printf("\t**********************student****************************\n"); printf("num name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) { printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } if((i+1)%10==0) { printf("\npress any key continue.......\n"); getch(); } printf("\t*************************end*********************************\n"); } void average() { int i,j; float sum[M]; for(i=0;i<M;i++) for(j=0;j<5;j++) sum[i]+=stu[i].score[j]; stu[i].ave=sum[i]/5.0; } void search_num() { long num; int i,j; printf("\nplease enter number which you want to search:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) if(stu[i].num!=num) printf("The number is not exist\n"); else { printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } } void search_nam() { int i,j; char name[20]; printf("\nplease enter name which you want to search:"); scanf("%s",&name); printf("\n"); for(i=0;i<M;i++) if(strcmp(stu[i].name,name)==0) { printf("number name sex math English PE maolun majing average:\n"); printf("%ld%s%c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } else printf("\nThe name is not exist!!!\n"); } void search_ave() { int i,j,a=0; float k; printf("please enter average score which you want to search:"); scanf("%f",&k); printf("\n"); for(i=0;i<M;i++) if(stu[i].ave!=k) printf("The average score is not exist!!!\n"); else for(i=0;i<M;i++) { if(stu[i].ave<=k) printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); a++; } } void sort() { int i,j; struct student temp; for(i=0;i<M;i++) for(j=i+i;j<M;j++) if(stu[i].ave<stu[j].ave) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } void save() { int i; FILE *fp; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } for(i=0;i<M;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void delect() { int i,t; long num; printf("please enter number which you want to delect:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) { if(stu[i].num!=num) printf("The number is not exist!!!\n"); if(stu[i].num==num) t=i; } for(i=t;i<M;i++) stu[i]=stu[i+1]; save(); } void insert() {FILE *fp; int i,n,t; struct student s; printf("please input record\n"); printf("number name sex math English PE maolun majing average\n"); scanf("%ld,%s,%c,%d%d%d%d%d%d",&s.num,s.name,&s.sex,&s.score[0],&s.score[1],&s.score[2],&s.score[3],&s.score[4],&s.ave); s.ave=(s.score[0]+s.score[1]+s.score[2]+s.score[3]+s.score[4])/3.0; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } i=M; for(t=0;stu[i].ave>s.ave&&t<M;t++) if(fwrite(&s,sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void MainMenu() {clrscr(); printf("\t********************************************************************\n \n); Printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1. search record\n"); printf("\t 2. sort record\n"); printf("\t 3. insert record\n"); printf("\t 4. delect record\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t********************************************************************\n"); } void menu_select() {clrscr(); printf("\t******************************************************************\n\n"); printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1.1 search by number\n"); printf("\t 1.2 search by name\n"); printf("\t 1.3 search by average score\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t******************************************************************\n"); } void search() { char ch; clrscr(); menu_select(); ch=getch(); switch(ch) { case '1':search_num();break; case '2':search_nam();break; case '3':search_ave();break; } } main() { char ch; clrscr(); init(); input(); list(); average(); save(); MainMenu(); ch=getch(); switch(ch) { case '1':search();break; case '2':sort();break; case '3':insert();break; case '4':delect();break; } search_num(); search_nam(); search_ave(); sort(); delect(); insert; }
2020-07-07 上传
本实验课题主要是要解决数据在文件中的读取,并且要求读取到的学生总人数少于30人,每位学生的课程不多于6门。此程序需要实现输入、计算、排序、删除、查询、显示功能。此实验需要在CodeBlocks等C语言编译平台上完成同时本实验要求所写的程序可以流畅的在编译平台上运行。首先为用户提供一个菜单,展示各个选项的功能,用户可输入一个选项(数字),执行相应的功能,通过运用switch语句对用户输入的数字进行处理判断出用户想要执行的操作。一共有14个选项,第一个和八九选项没有使用函数,二三分别对应着一个函数,第四个到第七个都使用同一个函数来输出成绩。十到十三个分别对应一个函数,最后一个0来结束程序。 学生信息的写入(定义FILE *fp指针),先将将学生人数和课程门数写入文件,以结构体数组的形式来保存键盘上输入的每个学生相应的信息。然后再用fprintf函数的格式写入方式将数组中的数据写入文档中。 学生信息的读取,先定义结构体数组,从文件中读取学生的学号姓名及成绩等信息写入到结构体数组stu中,在用fscanf函数的格式读取方式将文档中相应的数据保存在相应的结构体数组里定义的变量中。 计算排序的功能,是按不同的要求分别将学生的总成绩和平均成绩计算出来,然后将每个学科的总成绩平均成绩计算出来,然后按升序或者降序将成绩排序出来。 删除查询显示等功能,可以通过读取得到的结构体数组,进行重写文档,打印等方式实现功能。
2024-12-18 上传