news 2026/4/25 3:17:22

基于C语言实现的(控制台)班级学生成绩管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于C语言实现的(控制台)班级学生成绩管理

班级学生成绩管理

1.设计题目与要求

设计实现一个模拟的班级学生成绩管理系统目的:通过学生成绩管理系统的设计,培养学生综合利用 C/C++ 语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计。

基本要求:该系统用于管理学生的基本信息、课程成绩。要求实现以下功能:

① 通过此模块来管理课程信息,包括查询、添加、修改、删除等功能。在进行课程信息添加时,系统会自动监测所添加的信息是否已经存在,如果存在,会提示已经存在。在进行课程信息删除时,同样要求再次确定。

② 实现对学生信息、课程成绩的文件存取(分别存储在 StudentInfo.txt、StudentScore.txt 文件中),实现对学生信息、课程成绩的记录增加、删除及修改;

③ 实现输入学生学号或姓名查询并显示学生的课程成绩。

学生的基本信息记录,如:

学号

姓名

性别

出生日期

专业

20050999

张三

1980 年 6 月 1 日

软件工程

……

……

……

……

……

学生的课程成绩记录,如:

学号

课程名称

学分

成绩

20050999

毛泽东思想概论

4

60

20050999

高级语言程序设计

3

70

20050999

Web 程序设计

2

80

20050999

IT 企业管理

1

90

……

……

……

……

2.设计软硬件环境

计算机:Surfacepro6 处理器:I5-8250U1.8GHZ 内存容量:8.00GB 操作系统:Windows10 企业版 IDE:Devc++

3.功能设计与描述

(一)班级学生成绩管理系统功能:

1.按学号/姓名查询学生成绩

2.查询学生信息

3.按学号/姓名查询学生信息

4.学生信息的增加/修改/删除

5.查询课程信息

6.课程信息的增加/修改/删除

7.对存有学生信息及成绩信息的文件进行读写功能模块图如下:

图 1:班级学生成绩管理系统的功能模块图

(二)班级学生成绩管理系统算法设计:

1.学生成绩查询流程图:

图 2:学生成绩查询算法流程图

2.学生信息查询流程图:

图 3:学生信息查询算法流程图 3.学生信息修改算法流程图

图 4:学生信息修改算法流程图

4.学生信息添加算法流程图

图 5:学生信息添加算法流程图 5.学生信息删除算法流程图

图 6:学生信息删除算法流程图 6.课程信息查询算法流程图:

图 7:课程信息查询算法流程图

7.课程信息增加算法流程图:

图 8:课程信息增加算法流程图

8.课程信息修改算法流程图:

图 9:课程信息修改算法流程图 9.课程信息删除算法流程

图 10:课程信息删除算法流程图

4.源程序代码清单

# include<stdio.h> # include<stdlib.h> # include <unistd.h> # include"validation.h" # include"stmanagement.h" # include"clmanagement.h" # include"Linklist.h" # include"searchway.h" int validation(int,int); //合法性验证 void classmenu(NodeB **TB,NodeA **TA); //课程信息管理菜单 void studentmenu(NodeB **TB,NodeA **TA); //学生信息管理菜单 void classqeury(NodeB **TB,NodeA **TA); //课程信息显示 void classmanagement(NodeB **TB,NodeA **TA); //课程信息管理 void studentquery(NodeB **TB,NodeA **TA); //学生信息查询 void studentmanagement(NodeB **TB,NodeA **TA); //学生信息管理 void stresult(NodeB **TB,NodeA **TA); //学生成绩查询 void themenu(NodeB **TB,NodeA **TA); //主菜单 int main(void){ NodeA *TA=NULL;//学生信息 NodeB *TB=NULL;//学生成绩 TA=initializeA();//学生信息初始化 TB=initializeB();//学生成绩初始化 themenu(&TB,&TA);//主菜单 return 0; } void themenu(NodeB **TB,NodeA **TA){ int x=-1,y=2; printf("**************************************欢迎使用班级学生成绩管理系统**************************************\n"); printf("* 请选择需要使用的功能 *\n"); printf("* 1.课程信息管理 *\n"); printf("* 2.学生信息管理 *\n"); printf("* 3.学生成绩查询 *\n"); printf("* 0.退 出 *\n"); printf("********************************************************************************************************\n"); while(x==-1){ scanf("%d",&x); x=validation(x,3);//合法性验证 switch(x){ case 1:system("cls"); classmenu(TB,TA); break;//课程信息管理 case 2:system("cls"); studentmenu(TB,TA); break;//学生信息管理 case 3:system("cls"); stresult(TB,TA); break;//成绩查询 case 0: printf("再见");stdatewritten(TA);cldatewritten(TB); exit(1); //数据写入文件并退出 case -1: break; } } } void classmenu(NodeB **TB,NodeA **TA){ int x=-1; printf("**********************************************课程信息管理**********************************************\n"); printf("* 请选择需要使用的功能 *\n"); printf("* 1.课程信息查询 *\n"); printf("* 2.课程信息管理 *\n"); printf("* 3.返回上一级 *\n"); printf("* 0.退出 *\n"); printf("********************************************************************************************************\n"); while(x==-1){ scanf("%d",&x); x=validation(x,3);//合法性验证 switch(x){ case 1:system("cls");TraverseNodeB(*TB); themenu(TB,TA); break; case 2:system("cls"); classmanagement(TB,TA); themenu(TB,TA); break;//课程查询 case 3:system("cls"); themenu(TB,TA); break;//课程管理 case 0: printf("再见");stdatewritten(TA);cldatewritten(TB); exit(1); //数据写入文件并退出 } } } void studentmenu(NodeB **TB,NodeA **TA){ int x=-1; printf("**********************************************学生信息管理**********************************************\n"); printf("* 请选择需要使用的功能 *\n"); printf("* 1.学生信息查询 *\n"); printf("* 2.学生信息管理 *\n"); printf("* 3.返回上一级 *\n"); printf("* 0.退出 *\n"); printf("********************************************************************************************************\n"); while(x==-1){ scanf("%d",&x); x=validation(x,3);//合法性验证 switch(x){ case 1:system("cls");studentquery(TB,TA); break;//学生信息查询 case 2:system("cls");studentmanagement(TB,TA); break;//学生信息管理 case 3:system("cls");themenu(TB,TA); break;//主菜单 case 0:printf("再见");stdatewritten(TA);cldatewritten(TB); exit(1); //数据写入文件并退出 case -1: break; } } } void classmanagement(NodeB **TB,NodeA **TA){//课程信息管理 printf("**********************************************课程信息管理**********************************************\n"); printf("* 请选择需要使用的功能 *\n"); printf("* 1.课程信息添加 *\n"); printf("* 2.课程信息修改 *\n"); printf("* 3.课程信息删除 *\n"); printf("* 4.返回上一级 *\n"); printf("* 0.退出 *\n"); printf("********************************************************************************************************\n"); int x=-1; while(x==-1){ scanf("%d",&x); x=validation(x,4);//合法性验证 switch(x){ case 1:system("cls"); classadd(TB); break;//课程信息添加 case 2:system("cls"); classchange(TB); break;//课程信息修改 case 3:system("cls"); classdel(TB); break;//课程信息删除 case 4:system("cls"); classmenu(TB,TA); break;//课程菜单 case 0: printf("再见");stdatewritten(TA);cldatewritten(TB); exit(1); //数据写入文件并退出 case -1: break; } } } void studentquery(NodeB **TB,NodeA **TA){//学生信息查询 printf("**********************************************学生信息查询**********************************************\n"); printf("* 1.加载全部信息 *\n"); printf("* 2.按学号/姓名查询 *\n"); printf("********************************************************************************************************\n"); int i=0; scanf("%d",&i); if(i==1){ system("cls"); bool x=1; i=-1; printf("*******************************************正在加载学生信息*********************************************\n"); x=TraverseNodeA(*TA);//学生信息加载 printf("********************************************************************************************************\n"); while(i==-1){ printf("键入0以结束浏览\n"); scanf("%d",&i); i=validation(i,0);//合法性验证 if(i==0){ system("cls"); themenu(TB,TA); //返回主菜单 }else i=-1; } } else{ system("cls"); printf("*******************************************请输入学号或者姓名*******************************************\n"); char a[11],c[11]; scanf("%s",c); system("cls"); printf("********************************************************************************************************\n"); search(TA,c);//查询并显示 printf("********************************************************************************************************\n"); int i=-1; while(i==-1){ printf("键入0以结束浏览\n"); scanf("%d",&i); i=validation(i,0);//进行合法性验证 if(i==0){ system("cls"); themenu(TB,TA); //返回主菜单 } else i=-1; } } studentmenu(TB,TA); //返回上一级菜单 } void studentmanagement(NodeB **TB,NodeA **TA){//学生信息管理 printf("*****************************************学生信息管理***************************************************\n"); printf("* 请选择需要使用的功能 *\n"); printf("* 1.学生信息添加 *\n"); printf("* 2.学生信息修改 *\n"); printf("* 3.学生信息删除 *\n"); printf("* 4.返回上一级 *\n"); printf("* 0.退出 *\n"); printf("********************************************************************************************************\n"); int x=-1; while(x==-1){ scanf("%d",&x); x=validation(x,4);//合法性验证 switch(x){ case 1:system("cls"); newstudent(TB,TA);studentmanagement(TB,TA); break;//学生信息添加 case 2:system("cls"); changestudent(TB,TA);studentmanagement(TB,TA);break;//学生信息修改 case 3:system("cls"); delstudent(TB,TA);studentmanagement(TB,TA); break;//学生信息删除 case 4:system("cls"); studentmenu(TB,TA); break;//学生管理菜单 case 0: printf("再见");stdatewritten(TA);cldatewritten(TB); exit(1); //将内存中的数据写入文件并关闭程序 case -1:break; } } } void stresult(NodeB **TB,NodeA **TA){//学生成绩查询 printf("*******************************************请输入学号或者姓名*******************************************\n"); char c[11]; scanf("%s",c); system("cls"); printf("********************************************************************************************************\n"); searchresult(TA,TB,c); //调用成绩查找函数 printf("********************************************************************************************************\n"); int i=-1; while(i==-1){ printf("键入0以结束浏览\n"); scanf("%d",&i); i=validation(i,0); if(i==0){ system("cls"); themenu(TB,TA); //返回主菜单 } else i=-1; } }

5.程序运行结果

1.学生信息查看

2.学生信息修改

3.学生信息增加

4.学生信息删除

5.学生成绩查询

6.课程信息查询

7.课程信息增加

8.课程信息修改

9.课程信息删除

6.设计总结

本次设计班级学生成绩管理系统采用了模块化的程序设计结构,即将程序分为菜单模块、数据处理模块、学生信息管理模块、课程信息管理模块、合法性验证模块、结构体模块、查询模块这 7 大模块,实现了对单独模块的调试与修改,减少了开发难度并提升了可维护性。在程序设计上,按照要求绘制了程序流程图简化设计流程,提高开发速度。

为满足开发需求,程序中运用了 c 标准库函数以及链表数据结构。通过使用带有头节点的循环单链表实现学生信息、课程信息的增删读写查。c 标准库函数和文件读写函数实现了字符串的规律读写。

在程序的编写以及调试过程中遇到了一些问题,并加以修正。下面列出一些显著问题:

1.链表指针问题

最开始使用指针值的传递来进行对链表的修改,但这极大的消耗资源并带来不必要的编写难度,后来选择了指针引用/地址传递避免了指针的回传。

2.文件读写问题

由于文件读写指针的特性会导致某些字符在读写时丢失,采用指针复位的方法进行了优化。

3.循环条件问题

在链表遍历过程中循环条件很重要,针对头结点的特殊标记显然起了很大作用。

本次程序的设计与编写锻炼了我的代码编写能力以及调试能力。通过对指针的使用对 c/c++ 最为重要的特性加深了理解,因为时间关系,对于合法性验证模块做的并不是很完整,今后将继续完善此设计并尝试图形化界面的绘制。

参考文献

[1]StephenPrata.CPrimerPlus.第六版北京:人民邮电出版社.2016,6:219-240[2]李春葆.数据结构教程.第五版.北京:清华大学出版社,2017:31-42.

[3]菜鸟教程 c 标准库参考手册 www.runoob.com

♻️ 资源

大小:3.52MB

➡️资源下载:https://download.csdn.net/download/s1t16/87404242

注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:26:07

自媒体视觉物料高效创作新路径:稿定设计如何用AI重构内容生产逻辑

在自媒体行业竞争白热化、内容同质化严重的当下&#xff0c;内容传播、商业变现、IP塑造等核心场景对视觉物料的依赖度日益攀升。短视频封面、推文配图、带货海报等物料直接影响流量获取与转化效果&#xff0c;而从业者普遍面临四大痛点&#xff1a;多平台分发需批量产出差异化…

作者头像 李华
网站建设 2026/4/23 9:25:07

AI Agent 到底是怎么“干活”的?本文直击核心为你讲述!

你有没有想过&#xff1a;为什么 ChatGPT 只会聊天&#xff0c;而真正的 AI Agent 能自主订机票、写代码、分析数据&#xff0c;甚至管理项目&#xff1f;它们不是简单回应&#xff0c;而是像“智能机器人”一样主动行动&#xff01;本文直击核心&#xff1a;AI Agent 通过工具…

作者头像 李华
网站建设 2026/4/23 11:14:26

SSM springboot的周边转卖交易平台设计 追星商城

目录 SSM与SpringBoot的周边转卖交易平台设计&#xff08;追星商城&#xff09; 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 SSM与SpringBoot的周边转卖交易平台设计&#xff08;追星商城&#xff09;…

作者头像 李华
网站建设 2026/4/17 15:28:52

元宇宙平台的整车生产线管理系统的设计与实现

目录元宇宙平台的整车生产线管理系统设计与实现摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作元宇宙平台的整车生产线管理系统设计与实现摘要 随着工业4.0和数字孪生技术的发展&#xff0c;元宇宙平…

作者头像 李华
网站建设 2026/4/18 5:13:44

百考通海量资源,满足多元开发需求!

在技术日新月异的今天&#xff0c;无论是高校学子、职场新人还是经验丰富的开发者&#xff0c;都面临着一个共同的挑战&#xff1a;如何高效地启动一个新项目&#xff1f;从构思到落地&#xff0c;从框架搭建到功能实现&#xff0c;每一个环节都可能耗费大量时间和精力。你是否…

作者头像 李华
网站建设 2026/4/24 1:17:26

告别文献综述焦虑!百考通让科研更高效、更智能

面对成千上万篇文献无从下手&#xff1f;梳理研究脉络耗费数周&#xff1f;担心综述结构松散、引用不规范&#xff0c;甚至被质疑原创性&#xff1f;别再让文献综述成为你学术路上的“拦路虎”&#xff01;百考通&#xff08;[https://www.baikaotongai.com](https://www.baika…

作者头像 李华