C语言程序设计学生成绩管理系统实验报告
- 格式:doc
- 大小:53.00 KB
- 文档页数:10
c语言学生成绩管理系统设计报告C语言是计算机领域最为重要的编程语言之一,用于许多应用系统的开发。
这里我将围绕C语言学生成绩管理系统的设计报告,分步骤阐述该系统的设计与实现。
第一步:需求分析在进行设计之前,必须先进行需求分析,明确系统所需的功能和性能。
针对学生成绩管理系统,我们需要实现以下功能:1. 学生信息管理:包括学生姓名,学号等信息。
2. 成绩信息管理:包括课程分数,总分、平均分等信息。
3. 数据录入和修改:教师可以输入学生的成绩信息,并对已有的信息进行修改。
4. 成绩查询功能:学生可以查询自己的成绩情况。
第二步:系统设计根据需求分析,我们可以对系统进行具体设计。
该系统主要分为以下模块:1. 学生信息管理模块:用于录入和管理学生的信息。
2. 成绩信息管理模块:用于录入和管理学生的成绩信息。
3. 数据操作模块:用于操作学生和成绩信息的增删改查。
4. 用户管理模块:用于管理系统用户,包括学生和教师。
第三步:系统实现在进行系统实现时,我们需要注意以下几个方面:1. 界面设计:尽量简洁明了,易于使用。
2. 数据库设计:需要对数据进行分类储存,便于操作。
3. 数据库连接:需要通过C语言的数据库API来连接数据库。
4. 代码编写:需要根据设计要求进行代码编写,并进行测试调整,确保系统的稳定性和性能。
第四步:系统测试完成系统的设计和实现后,就需要对系统进行测试。
测试主要包括以下几个方面:1. 单元测试:对系统各个功能模块进行单独测试,确保每个模块的运行效果。
2. 集成测试:对系统各个模块进行集成测试,确保各个模块之间的相互交互正常。
3. 用户测试:邀请用户来测试系统,听取他们的反馈和建议,进行调整和改进。
总结:本文围绕C语言学生成绩管理系统的设计报告,分步骤阐述了系统的设计、实现和测试。
这对于开发人员在进行类似系统开发时具有一定的指导意义。
不过,由于每个系统都具有其独特性和特点,因此具体实现还需根据具体情况而定。
学生成绩管理系统c语言课程设计报告一、引言学生成绩管理系统是一个为学校或教育机构提供学生学业成绩管理的重要工具。
通过该系统,可以方便地记录和查询学生的各项成绩,帮助教师和学生了解学生的学业表现,及时作出教学和学习的调整和改进。
本文将介绍一个基于C语言的学生成绩管理系统的设计与实现。
二、需求分析1. 学生信息管理:包括学生基本信息的录入、修改和删除。
2. 成绩信息管理:包括成绩的录入、修改和删除。
3. 成绩查询与统计:可以按照学生学号或姓名查询学生的成绩,并能够进行成绩的统计分析,如计算平均分和排名等。
4. 数据存储与备份:能够将学生信息和成绩信息存储在文件中,并能够进行数据的备份和恢复。
三、系统设计1. 学生信息管理模块:设计一个结构体来存储学生的基本信息,包括学号、姓名、性别、年龄等。
通过菜单选择,可以实现学生信息的录入、修改和删除功能。
2. 成绩信息管理模块:设计一个结构体来存储学生的成绩信息,包括科目名称和成绩。
通过菜单选择,可以实现成绩信息的录入、修改和删除功能。
3. 成绩查询与统计模块:通过学号或姓名查询学生的成绩,并能够进行成绩的统计分析,如计算平均分和排名等。
4. 数据存储与备份模块:设计文件操作函数,将学生信息和成绩信息存储在文件中,并能够进行数据的备份和恢复。
四、系统实现1. 使用C语言编写程序代码,通过结构体和数组等数据结构实现学生信息和成绩信息的存储。
2. 利用文件操作函数实现数据的读取和存储,包括学生信息和成绩信息的存储和备份。
3. 设计菜单界面,通过用户选择来实现各个功能模块的调用。
五、系统测试与优化1. 针对各个功能模块进行测试,验证系统的正确性和稳定性。
2. 根据测试结果优化程序代码,提高系统性能和用户体验。
3. 完善系统功能,考虑异常情况的处理,提高系统的容错性和健壮性。
六、总结与展望通过本次课程设计,我们成功实现了一个基于C语言的学生成绩管理系统。
该系统能够方便地记录和查询学生的成绩信息,帮助教师和学生进行教学和学习的分析和改进。
c语言成绩管理实验报告实验目的:设计并实现一个简单的C语言成绩管理系统,能够实现学生信息录入、成绩查询、成绩统计等功能。
实验要求:1. 使用C语言编写代码,实现学生信息的录入、查询和统计功能。
2. 使用文件操作,将学生信息存储到文件中,以便后续查询和统计。
3. 学生信息包括学号、姓名、语文成绩、数学成绩、英语成绩。
实验过程:1. 设计数据结构由于我们需要存储学生信息,可以设计一个包含学号、姓名和成绩的结构体。
```ctypedef struct {int id;char name[20];int chinese;int math;int english;} Student;```2. 学生信息录入先定义一个数组来存储学生信息,然后通过循环输入学生信息,并将其保存到数组中。
```c#define MAX_STUDENT 100void inputStudent(Student students[], int count) {for (int i = 0; i < count; i++) {printf("请输入第%d个学生的学号:", i + 1);scanf("%d", &students[i].id);printf("请输入第%d个学生的姓名:", i + 1);scanf("%s", students[i].name);printf("请输入第%d个学生的语文成绩:", i + 1);scanf("%d", &students[i].chinese);printf("请输入第%d个学生的数学成绩:", i + 1);scanf("%d", &students[i].math);printf("请输入第%d个学生的英语成绩:", i + 1);scanf("%d", &students[i].english);}}```3. 学生信息存储将学生信息存储到文件中,可以使用文件操作函数fwrite()来实现。
物理与电子信息学院C语言课程设计(科创实验)报告学生成绩管理系统专业年级学生姓名学号指导教师2021年 1 月 4 日目录1 设计任务 (1)2 需求分析 (1)2.1基础功能 (1)2.2扩展功能 (2)3系统设计概要 (2)3.1开发与运行环境 (2)3.2数据结构设计 (2)3.2总体设计 (3)4系统详细设计 (3)5 系统测试 (4)6 总结与反思 (8)参考文献 (8)附录 (9)1.设计任务设计一个系统,使其能够记录学生的学号、姓名、专业和5门课程的成绩。
该系统能够实现添加、删除、修改功能。
并且能够计算某学生的总分和平均成绩,能够按照总分排序输出。
2.需求分析学生成绩管理系统主要是提供成绩查询,方便管理的网上的信息查阅平台,学生可以通过该系统查阅与自己相关信息。
教师可以通过成绩管理系统查阅学生成绩信息。
系统管理员可以实现以上的所有功能,还有对学生的添加、删除、修改、教师的添加、删除、修改。
根据开发要求,学生成绩管理系统主要应用于教育系统,完成对日常的教学、教务、教师以及学生的计算机化的管理。
开发学生成绩管理系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。
目前,学校工作繁杂、资料重多。
目前,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。
因此,开发一套适和大众的、兼容性好的系统是很有必要的。
2.1基础功能该系统所具有的基础功能有能够记录学生的学号、姓名、专业和5门课程的成绩。
该系统能够实现添加、删除、修改功能。
并且能够计算某学生的总分和平均成绩,能够按照总分排序输出。
2.2扩展功能该系统在原有的基础功能上还增加了查询不及格学生的记录、按照单科成绩排序、添加学生信息后可以写进文件。
3.系统概要设计3.1开发与运行环境3.1.1开发环境1.开发语言为C语言。
移通学院C语言程序设计报告书设计名称:学生成绩管理系统专业:指导老师:班级:姓名:学号:座号:时间一、实验目的1.在编辑应用程序过程中,逐步加深对C语言编程的理解;2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3.培养初步编程的能力,为以后的学习奠定基础;二、实验内容运用所学的C语言知识编辑一个应用程序:学习成绩管理系统三.系统软件环境:本程序主要运行在: Visual C++ 6.0Turbo C/C++ 3.0四.课程设计题目:学生成绩管理系统程序说明:有N个学生,每个学生的数据包含学号不重复、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:1主菜单2各菜单项功能①成绩录入:输入学生的学号、姓名及三门课的成绩;②成绩查询:按学号查询学生记录;③成绩统计:计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序后输出;④退出系统:退出整个系统即主菜单;五.数据结构设计描述:↓int num; /定义学号,变量为整型/char name; /定义姓名,变量为字符型/int score; /定义课程的成绩,变量为整型/float average; /定义平均分,变量为浮点型/七.系统各函数的功能,、相互调用关系1.函数实现功能说明:1menu函数是定义一个菜单函数,其功能在于输出菜单界面供使用者选择;2input函数是定义用于输入学生信息;3select 函数是定义用于查询学生信息;包括学号、姓名及各科成绩;4statistics 函数计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序输出;2.相互调用关系:Main函数调用menu函数;Menu 函数可以调用input 函数、select函数和statistics 函数八.心得体会C语言是一种较为基础和普遍的编程语言,应用相当广泛,这次课程设计的要求与C语言的广泛应用相比较还有很大的差距;我们对于C语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,我想我们也要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序; 九.程序:include <stdio.h>include <stdlib.h>include <conio.h>define N 3 /学生人数/define M 3 /课程门数/struct student{int num; /学号/char name20; /姓名/int score3; /三门课成绩/float average;}stuN; /学生数/void input; /查询/void select; /统计/void menu;void input{int i,j;printf"\t\t①成绩录入\n\n";fori=0;i<N;i++{printf"请输入学号:";scanf"%d",&stui.num;printf"请输入姓名:";scanf"%s",&;forj=0;j<M;j++{printf"第%d门成绩的分数:",j+1;scanf"%d",&stui.scorej;}printf"\n\n";}printf"\n\n";printf"输入完毕按任意键返回主菜单";}/2.查询/void selectint no{int i;printf"学生%d号: \n",no; printf"学号: %d\n",stuno-1.num; printf"姓名: %s\n",;for i=0;i<M;i++{printf"第%d门课程的成绩为: ",i+1; printf"%d\n",stuno-1.scorei;}printf"\n按任意键返回主菜单";getch;}/3.统计/void statistics{float temp=0;int i=0;/学生成绩平均分/temp=0;printf"\t\t③成绩统计\n\n";forj=0;j<N;j++{fori=0;i<M;i++{temp=temp+stuj.scorei;}stuj.average=temp/N;printf"\n学生%s的成绩平均成绩为:",;printf"%0.2f分",stuj.average;temp=0;}/排序/for j=0;j<N;j++fori=0;i<N-j-1;i++ifstui.average<stui+1.average{ temp=stui.average;stui.average=stui+1.average;stui+1.average=temp;}printf"\n\n学生平均成绩前三名:";fori=0;i<3;i++{printf"\n第%d名:%0.2f分",i+1,stui.average;}printf"\n\n按任意键返回主菜单";getch;}void menu{ int num=0;int n=0;printf"\n\t\t\t学生成绩管理系统\n\n";printf"\n\t\t\t①成绩录入\n\t\t\t②成绩查询\n\t\t\t③成绩统计\n\t\t\t④退出系统\n";printf"\t\t\tchoose:";scanf"%d",#switchnum{case 1:system"cls";input;break;case 2:system"cls";printf"\t\t②成绩查询\n\n"; printf"请输入要查询的学生号1~3:";scanf"%d",&n;selectn;break;case 3:system"cls";statistics;break;case 4:exit0;default:;}}void main{while1{system"cls"; /清屏/menu;}}。
c语言课程设计学生成绩管理系统报告一、教学目标本课程旨在通过C语言编程实现一个学生成绩管理系统,让学生掌握C语言的基本语法、数据结构、函数、文件操作等知识,培养学生编写程序解决实际问题的能力。
具体目标如下:1.知识目标:(1)掌握C语言的基本语法和编程技巧;(2)了解数据结构的基本概念,学会使用数组、链表等数据结构;(3)熟悉函数的定义和调用,掌握函数的参数传递和返回值;(4)掌握文件操作,了解文件读写的原理和方法。
2.技能目标:(1)能够独立编写C语言程序,解决实际问题;(2)具备良好的编程习惯,代码结构清晰、可读性强;(3)掌握调试和优化程序的方法,提高程序的运行效率;(4)学会使用版本控制系统,如Git,进行代码管理和协作开发。
3.情感态度价值观目标:(1)培养学生的编程兴趣,激发学习C语言的积极性;(2)培养学生团队协作精神,提高沟通与协作能力;(3)培养学生的问题解决能力,培养创新意识和持续学习的态度;(4)培养学生具有良好的职业道德,遵守编程规范,尊重他人代码。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、函数、文件操作等。
具体安排如下:1.C语言基本语法:介绍C语言的数据类型、运算符、表达式、控制语句等基本概念;2.数据结构:讲解数组、链表、栈和队列等数据结构的基本原理和应用;3.函数:讲解函数的定义、声明、调用,以及函数的参数传递和返回值;4.文件操作:介绍文件的概念、文件读写的方法和技巧。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法相结合,以激发学生的学习兴趣和主动性。
具体方法如下:1.讲授法:通过讲解C语言的基本语法、数据结构、函数和文件操作等知识,使学生掌握课程的基本概念和编程技巧;2.案例分析法:分析实际编程案例,让学生学会将理论知识应用于实际问题解决;3.实验法:安排上机实验,让学生动手编写程序,培养实际编程能力;4.小组讨论法:学生进行小组讨论,培养团队协作和沟通能力。
学生成绩管理c语言设计报告1. 引言学生成绩管理是学校教学管理中非常重要的一项工作。
对于学校来说,准确记录、管理和分析学生成绩,既能评估学生的学业水平,也能帮助教师更好地了解学生的学习情况,从而采取针对性的教学措施。
本报告介绍了一个使用C语言设计的学生成绩管理系统,旨在简化学生成绩管理的过程,提高工作效率。
2. 设计目标本学生成绩管理系统的设计目标如下:- 实现学生信息的录入和管理,包括姓名、学号、课程名称和成绩等;- 实现成绩的录入、修改和查询功能;- 提供成绩统计和分析功能,包括课程平均分、最高分、最低分等;- 实现学生成绩的排名功能,便于教师和学生了解自己在班级中的位置。
3. 系统设计本系统采用C语言进行设计和实现,主要包括以下几个模块:3.1 学生信息管理模块该模块负责学生信息的录入、显示和修改等功能。
使用结构体来定义学生信息,包括姓名、学号和课程等。
通过指针和动态内存分配,实现学生信息的存储和管理。
3.2 成绩录入和修改模块该模块负责成绩的录入和修改功能。
通过用户输入学号和课程名称,系统可以找到对应的学生信息,并提供成绩录入和修改的操作。
使用文件来保存学生信息,实现数据的持久化。
3.3 成绩查询模块该模块提供成绩查询功能,通过用户输入学号和课程名称,系统可以根据学号和课程名称找到对应的成绩,并进行显示。
3.4 统计和分析模块该模块负责成绩的统计和分析功能。
可以计算某一门课程的平均分、最高分、最低分等,并将结果进行显示。
3.5 排名模块该模块负责对学生成绩进行排名。
根据学生的总成绩,对学生进行排名,并将排名结果进行显示。
4. 系统运行4.1 系统启动用户启动该系统后,系统会显示欢迎界面,并提供相应的菜单选项供用户选择。
4.2 学生信息录入和管理用户选择该选项后,可以进行学生信息的录入、显示和修改等操作。
用户可以根据提示输入学生的姓名、学号和课程等信息,系统会将信息保存起来并进行管理。
4.3 成绩录入和修改用户选择该选项后,可以根据学号和课程名称找到对应的学生成绩,进行成绩的录入和修改操作。
HUNAN UNIVERSITY程序设计训练报告题目学生成绩管理系统学生姓名学生学号专业班级指导老师湖南大学程序设计训练报告目录一程序功能简介…………………………………………………………………………….。
.。
.3二本人完成的主要工作……………………………………………………………………..。
3三设计方案……………………………………………………………………………。
...。
.。
3 1)设计分析……………………………………………………………………………。
.。
.。
.。
32)模块的功能及程序分析…………………………………………………………....。
43)核心算法流程图……………………………………………………………………。
...。
74) 核心源程序模块………………………………………………………………………。
.85)操作方法简介………………………………………………………………………….。
86)实验结果……………………………………………………………………………。
.。
.。
.。
.98)设计体会…………………………………………………………………………….。
11四附录……………………………………………………………………………。
..。
.。
12 一、程序功能简介;本程序作为一个学生成绩管理系统,用户可以首先使用管理员模式初始化该系统.初始化完成之后,用户可以选择使用成绩记录人模式进入系统,对学生成绩进行记录。
系统自动储存所记录的学生成绩,然后用户可根据不同需要来选择不同的功能来使用程序,其中包括成绩查询与增减,成绩排序,成绩分析等功能. 二、本人完成的主要工作;程序设计分析,绘制程序流程图,写出大体结构算法以及各个核心算法模块,写出核心源程序,对源程序进行算法优化,对源代码进行多次试验验证其正确性,完成源代码的测试以及代码书写规范检测。
三、设计方案;1)设计分析;首先拿到这个题目,我就开始思考如何将这个看似简单的系统做的较为完善,而不是简简单单的学生成绩管理系统,学生管理系统自然是这个题目的核心,从中发散思维,我想到了几个比较细小的地方。
C语言学生学习成绩管理系统实验报告学生学习成绩管理系统1.课程设计的目的1.对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
2.掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。
3.熟练掌握C语言的基本语法,灵活运用各种数据类型.4.进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。
2。
课程设计的要求1.程序在运行时,均以菜单形式提供选择界面,并提供一定的数据安全和提示具有良好的交互功能。
2.设计中的每一个小功能均由子函数来完成3.提前编制下次调试的程序,对于难点问题要积极查阅相关教材、资料,计划好每次上机的内 ,高效、独立地完成这次设计任务4.在硬盘上建立自己的目录,将程序文件存储到该目录下,即有利于调试文件,又保证了文件的安全性. 3.课程设计报告内容 3.1任务定义本系统主要应用数据结构的设计思想,在TC环境下运用C语言进行编程设计一个学生成绩管理系统,该系统主要实现对学生的学号、姓名等自然信息以及学生成绩信息进行创建、增加、删除、查询、插入、显示的功能以及计算所有学生总成绩的总分,并依照学生各类信息高低进行排名的功能。
系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。
3。
2系统运行环境操作系统:Windows 98/2000/XP 运行软件:TC3。
3功能需求(问题分析)学生成绩管理系统为教师和学生提供了一个对学生自然信息和学科成绩进行管理和查看的平台,给用户提供了一个简单友好的用户接口,功能需求分析描(1)编写菜单函数,为用户提供一个友好的操作选择界面。
(2)学生信息输入:用户根据提示输入学生的学号、姓名、各科成绩,可一次性输入多条学生的成绩信息记录;当要停止输入并退回主菜单时,只须输入0符号回车即可。
(4)学生信息删除:提示用户输入要删除的学生学号或姓名,如果输入的学号不存在,系统会立即提示不存在该学号的学生请先添加。
C语言课程设计报告一.问题描述:题目七:学生成绩管理系统设计学生成绩信息包含:学期,学号,班别,姓名,xx课程成绩(语文、数学、英语和计算机)等。
主要功能:(1)能按学期、按班级完成对学生成绩的录入、更正(2)能按班级统计学生的成绩,修业生的总分及均匀分(3)能盘问学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单要求:使用二进制文件方式储存数据,系统以菜单方式工作学生成绩信息包含:学期,学号,班别,姓名,xx课程成绩(语文、数学、英语和计算机)等。
要求使用二进制文件方式储存数据,系统以菜单方式工作,实现对学生成绩的录入,更正,统计,排序,盘问,输出等功能。
二.设计目的设计“学生成绩管理系统”使其拥有以下功能:(1)能完成对学生成绩的录入(2)能按班级统计学生的成绩,修业生的总分及均匀分,排序(3)能按班级,学期输出学生的成绩单和不及格科目及学生名单(4)能盘问单个学生成绩(5)能更正单个学生信息三.要求系统以菜单方式工作四.功能1输入功能:可以一次完成无数条信息的输入。
2输出功能:能按班级输出学生的成绩单。
3更正功能:完成对单个学生成绩的更正。
4查找功能:完成对单个学生信息查找,并显示。
5排序功能:按学生成绩进行排序,并显示。
6有一个清楚雅观界面来调用各个功能五.模块图结构数组structstudent学期intterm班级intclasses姓名charname[10] 学号intnum成绩intscore[4]信息录入学号stu[i].num、班级stu[i].classes,姓名主流voidinputstu[i].name、四门课成绩stu[i].score程按班级统计学生的成绩,修业生的总成绩统计voidsort分及均匀分,排序成绩输出能按班级,学期输出学生成绩单和不及格voidprint盘问科目及学生名单voidsearch能按学号盘问单个学生成绩更正更正单个学生信息voidmonify六.详细内容整个系统除了主函数外,别的还有5个函数,实现六大功能:输入功能、输出功能、更正功能,查找并显示功能、排序并显示功能。
原创C语言学生成绩管理系统设计报告一、引言学生成绩管理是学校教务工作中的重要组成部分,对于学校管理和学生评价具有重要意义。
为了提高学生成绩管理效率和准确性,本文设计并实现了一个基于C语言的学生成绩管理系统。
本系统以学生的基本信息和成绩为核心,提供了学生信息录入、成绩查询、成绩统计等功能,方便学校教务人员管理学生的学籍和成绩信息。
二、需求分析学生成绩管理系统的主要功能需求如下: 1. 学生信息的录入和修改:系统需要提供录入学生基本信息(如姓名、学号、性别、年级等)的功能,同时可以修改已录入学生的信息。
2. 学生成绩的录入和修改:系统需要提供录入学生成绩的功能,在录入成绩时,需要输入学生学号和各科成绩,并计算总分和平均分。
同时可以修改已录入学生的成绩信息。
3. 学生成绩的查询和统计:系统需要提供根据学生学号或姓名查询学生成绩的功能,并能够对学生成绩进行统计,包括科目平均分、总分排名等。
4. 界面友好、操作简便:系统需要使用简洁明了的界面设计,方便用户进行操作,并给出相应的提示和错误信息。
三、系统设计3.1 数据库设计本系统的数据库需要存储学生的基本信息和成绩信息。
设计采用两个数据表:student和score。
#### 3.1.1 student表字段包括:学生学号(sid)、姓名(name)、性别(gender)、年级(grade)。
#### 3.1.2 score表字段包括:学生学号(sid)、科目1成绩(score1)、科目2成绩(score2)、科目3成绩(score3)、总分(total_score)、平均分(average_score)。
3.2 系统模块设计本系统设计采用模块化设计,将各个功能模块进行划分,提高代码的可维护性和重用性。
#### 3.2.1 学生信息管理模块该模块实现学生信息的录入、修改和删除功能,包括以下函数:- add_student():添加学生信息。
- modify_student():修改学生信息。
c 学生成绩管理系统实验报告《C 学生成绩管理系统实验报告》摘要:本实验旨在设计并实现一款基于C语言的学生成绩管理系统,通过该系统可以实现学生信息的录入、查询、修改和删除等功能,并能够对学生成绩进行统计和分析。
通过实验结果表明,该系统具有良好的稳定性和高效性,可以满足学校对学生成绩管理的需求。
1. 引言学生成绩管理是学校教务管理工作中的重要组成部分,有效的成绩管理系统可以提高学校管理效率,为学生提供更好的学习环境。
因此,设计一款稳定高效的学生成绩管理系统对于学校教务管理工作具有重要意义。
2. 系统设计本实验设计了一个基于C语言的学生成绩管理系统,系统主要包括学生信息管理模块和成绩管理模块。
学生信息管理模块可以实现学生信息的录入、查询、修改和删除等功能;成绩管理模块可以对学生成绩进行统计和分析。
系统采用了文件存储学生信息和成绩数据,具有良好的数据持久性。
3. 实验方法本实验采用了自顶向下的模块化设计方法,将系统划分为多个模块,每个模块负责不同的功能。
通过模块化设计,可以提高系统的可维护性和可扩展性。
在实验过程中,我们使用了C语言进行编程,利用了C语言丰富的库函数和指针等特性,提高了系统的效率和性能。
4. 实验结果经过实验测试,我们发现该系统具有良好的稳定性和高效性,可以满足学校对学生成绩管理的需求。
学生信息的录入、查询、修改和删除等功能均能够正常运行,成绩的统计和分析功能也能够准确地反映学生成绩的情况。
5. 结论本实验成功设计并实现了一款基于C语言的学生成绩管理系统,系统具有良好的稳定性和高效性,可以满足学校对学生成绩管理的需求。
通过本实验,我们对C语言的应用有了更深入的了解,也对学生成绩管理系统的设计和实现有了更加深刻的认识。
综上所述,C 学生成绩管理系统实验报告得出了该系统具有良好的稳定性和高效性,可以满足学校对学生成绩管理的需求。
学生成绩管理系统(C语言)C语言课程设计报告一、实践的目的和要求加深对《C语言程序设计》课程所学知识的理解,进一步巩固C语言讲法规则。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力二、实践内容在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);函数的使用,结构体和文件的操作等。
三、设计说明学生成绩管理系统建立一个学生成绩管理系统。
程序运行时显示一个简单的菜单。
例如:1.信息输入(INPUT)2.信息的删除与修改3.显示当前学生成绩的记录信息,若无记录,则给出提示信息4.学生或者各个班级各门课程总分、平均分、最低分、最高分等的统计5.可以按照班级、姓名、性别、分数(可以有区间)等方式进行查询6.具有良好的交互功能7.能使用图形函数进行简单的界面设计8.具有良好的纠错功能9.退出等等程序:#include <stdio.h> /*文件操作(读文件)*/#include<dos.h>#include<stdlib.h> /*其它说明*/#include<string.h> /*字符串函数*/#include<mem.h> /*内存操作函数*/#include<conio.h> /*屏幕操作函数*/#include<ctype.h> /*字符操作函数*/#include<alloc.h> /*动态地址分配函数*/#include<time.h>#define LEN sizeof(STUDENT)#define N 3typedef struct stu /*定义结构体数组用于缓存数据*/{char grade[6];char name[5];char sex[4] ;int score[N];int sum;float average;int order;struct stu *next;}STUDENT;/*以下是函数原型*/STUDENT *init(); /*初始化函数*/STUDENT *create(); /*创建链表*/STUDENT *delete(STUDENT *head); /*删除记录*/STUDENT *sort(STUDENT *head); /*按平均分排序*/void print(STUDENT *head); /* 显示所有记录*/void name(STUDENT *head); /*姓名查找*/void grade(STUDENT *head); /*班级查找*/void sex(STUDENT *head); /*性别查找*/void average(STUDENT *head); /*按平均分查找在那个分数里*/STUDENT *statistciam(STUDENT *head);/*统计记录*/void save(STUDENT *head); /*保存文件*/STUDENT *load(); /*读文件*/STUDENT *insert(STUDENT *head,STUDENT *new); /*插入记录*/int menu_select(); /*菜单函数*/int menu_search(); /*查询菜单*/void code(); /*密码验证*//*主函数界面*/main(){int i,j,n,m;STUDENT *head,new; /*链表定义头指针*/randomize();/*开启扬声器,发出声音*/while(!bioskey(1)){j=rand()*5000;sound(j);delay(10);}nosound();/*关闭声音文件*/code();/*密码输入*/clrscr(); /*清屏*/for(;;) /*无限循环*/{switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/{ /*值不同,执行的函数不同,break 不能省略*/case 0:head=init();break; /*执行初始化*/case 1:head=create();break; /*创建链表*/case 2:head=delete(head);break; /*删除记录*/case 3:print(head);break; /*显示全部记录*/case 4:loop:printf("sreach:\n 1.grade\n \n 3.sex\n 4.average\n 5.quit\n Enter you choice(0~5):");scanf("%d",&n);switch(n){case 1:grade(head);goto loop;case 2:name(head);goto loop;case 3:sex(head);goto loop;case 4:average(head);goto loop;case 5: break;}break;/*查找记录*/case 5:sort(head);break; /*排序*/case 6:save(head);break; /*保存文件*/case 7:head=load(); break; /*读文件*/case 8:head=insert(head,&new); break; /*插入记录*/case 9:head=statistciam(head); break; /*统计记录*/case 10:exit(0); /*如菜单返回值为10程序结束*/}}}/*密码输入*/void code(){int i;char number[20];const w=10;printf("\n\t\t\t--------------------------------------------------");printf("\n\t\t\tBecause this system is busywork,Code is: 123456");printf("\n\t\t\t----------------------------------------------- ");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n\t*********************************");printf("\n\t Please Enter The Code : ");printf("\n\t*********************************\n");scanf("%s",number);printf("\n\t\t\tExamining!");for(i=0;i<=w;i++){printf("*");}if(strcmp(number,"123456")==0){printf("\n\t\t\tCode is right!press any key enter menu......");clrscr();}else{printf("\n\t\t\tCode is wrong!Please enter again : ");clrscr();code();}}/*初始化函数*/STUDENT *init(){return NULL; /*返回空指针*/}/*菜单选择函数*/menu_select(){char *menu[]={"********************************************", " Welcome to "," The student score manage system!","*****************MENU***********************", /*定义菜单字符串数组*/" 0. Init list", /*初始化*/" 1. Input list", /*输入记录*/" 2. Delete a record from list", /*从表中删除记录*/" 3. Print list ", /*显示当前学生成绩的记录信息*/" 4. Search record ", /*查询学生记录*/" 5. Sort to make new a file ", /*排序*/" 6. Save the file", /*将单链表中记录保存到文件中*/" 7. Load the file", /*从文件中读入记录*/" 8. insert record to list ", /*插入记录到表中*/" 9. statistciam record to list ", /*统计记录到表中*/" 10. Quit", /*退出*/"********************************************"," Producer:ZengWenyan ZhaoJingxiu "," Faculty Adviser:XiaoFengrui ",}; /*退出*/char s[3]; /*以字符形式保存选择号*/int c,i; /*定义整形变量*/textbackground(MAGENTA); /*设置背景颜色为粉色*/gotoxy(1,50); /*移动光标*/printf("press any key enter menu......\n"); /*压任一键进入主菜单*/getch(); /*输入任一键*/clrscr(); /*清屏幕*/gotoxy(1,1); /*移动光标*/textcolor(YELLOW); /*设置文本显示颜色为黄色*/textbackground(BLUE); /*设置背景颜色为蓝色*/gotoxy(15,2); /*移动光标*/putch(0xc9); /*输出左上角边框┏*/for(i=1;i<44;i++)putch(0xcd); /*输出上边框水平线*/putch(0xbb); /*输出右上角边框┓*/for(i=3;i<23;i++){gotoxy(15,i);putch(0xba); /*输出左垂直线*/gotoxy(59,i);putch(0xba);} /*输出右垂直线*/gotoxy(15,22);putch(0xc8); /*输出左上角边框┗*/for(i=1;i<44;i++)putch(0xcd); /*输出下边框水平线*/putch(0xbc); /*输出右下角边框┛*/window(16,3,58,21); /* 制作显示菜单的窗口,大小根据菜单条数设计*/clrscr(); /*清屏*/for(i=0;i<18;i++) /*输出主菜单数组*/{gotoxy(1,i+1);cprintf("%s",menu[i]);}textbackground(BLACK); /*设置背景颜色为黑色*/window(1,1,80,25); /*恢复原窗口大小*/gotoxy(10,23); /*移动光标*/do{printf("\n Enter you choice(0~10):"); /*在菜单窗口外显示提示信息*/scanf("%s",s); /*输入选择项*/c=atoi(s); /*将输入的字符串转化为整形数*/}while(c<0||c>10); /*选择项不在0~10之间重输*/return c; /*返回选择项,主程序根据该数调用相应的函数*/}/*输入函数*/STUDENT *create(){int i,s;STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/clrscr();textbackground(MAGENTA);textcolor(BLUE);for(;;){p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/if(!p) /*如果指针p为空*/{printf("\nOut of memory."); /*输出内存溢出*/return (head); /*返回头指针,下同*/}printf("Enter the grade(0:list end):");scanf("%s",p->grade);if(p->grade[0]=='0') break; /*如果班级首字符为0则结束输入*/printf("Enter the name:");scanf("%s",p->name);do{printf("Enter the sex(M or W):");scanf("%s",&p->sex[0]);if(p->sex[0]!='M'&&p->sex[0]!='W')printf("Data error,please enter again.\n");}while(p->sex[0]!='M'&&p->sex[0]!='W');printf("Please enter the %d scores\n",3); /*提示开始输入成绩*/s=0; /*计算每个学生的总分,初值为0*/for(i=0;i<N;i++) /*3门课程循环3次*/{do{printf("score%d:",i+1);scanf("%d",&p->score[i]);if(p->score[i]<0 || p->score[i]>100) /*确保成绩在0~100之间*/printf("Data error,please enter again.\n");}while(p->score[i]<0 || p->score[i]>100);s=s+p->score[i]; /*累加各门成绩*/}p->sum=s; /*将总分保存*/p->average=(float)s/3; /*先用强制类型转换将s转换成float 型,再求平均值*/p->order=0; /*未排序前此值为0*/p->next=head; /*将头结点做为新输入结点的后继结点*/head=p; /*新输入结点为新的头结点*/}return(head);}/*删除记录函数*/STUDENT *delete(STUDENT *head){int n;STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/char c,s[6]; /*s[6]用来存放班级,c用来输入字母*/clrscr();textbackground(MAGENTA);textcolor(BLUE);printf("Please enter the deleted grade: ");scanf("%s",s);p1=p2=head; /*给p1和p2赋初值头指针*/while(strcmp(p1->grade,s) && p1 != NULL) /*当记录的班级不是要找的,或指针不为空时*/{p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/ p1=p1->next; /*将p1指针指向下一条记录*/}if(strcmp(p1->grade,s)==0) /*班级找到了*/{printf("**************************************FOUND******** ****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d |\n", p1->grade,p1->name,p1->score[0],p1->score[1],p1->score [2],p1->sum,p1->average,p1->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");printf("Are you sure to delete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/for(;;){scanf("%c",&c);if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/if(c=='y'||c=='Y'){if(p1==head) /*若p1==head,说明被删结点是首结点*/ head=p1->next; /*把第二个结点地址赋予head*/elsep2->next=p1->next; /*否则将一下结点地址赋给前一结点地址*/n=n-1;printf("\nNum %s student have been deleted.\n",s);printf("Don't forget to save.\n");break; /*删除后就跳出循环*/}}}elseprintf("\nThere is no num %s student on the list.\n",s); /*找不到该结点*/return(head);}/* 显示全部记录函数*/void print(STUDENT *head){int i=0; /* 统计记录条数*/STUDENT *p; /*移动指针*/clrscr();textbackground(MAGENTA);textcolor(BLUE);p=head; /*初值为头指针*/printf("\n************************************STUDENT******* *****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Rec | Grade | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");printf("-------------------------------------------------------------------------------\n");while(p!=NULL){i++;printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f| %-5d |\n",i,p->grade,p->name,p->score[0],p->score[1],p->score[2],p->su m,p->average,p->order);p=p->next;}printf("-------------------------------------------------------------------------------\n");printf("**************************************END************* *************************\n");}/*姓名查找记录函数*/void name(STUDENT *head){STUDENT *p; /* 移动指针*/char s[5]; /*存放姓名用的字符数组*/clrscr();textbackground(MAGENTA);textcolor(BLUE);printf("Please enter name for searching.\n");scanf("%s",s);p=head; /*将头指针赋给p*/while(strcmp(p->name,s) && p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/p=p->next; /*移动指针,指向下一结点*/if(p!=NULL) /*如果指针不为空*/{printf("\n*************************************FOUND******* *****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4 .2f | %-5d|\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseprintf("\nThere is no name %s student on the list.\n",s); /*显示没有该学生*/}/*班级查找记录函数*/void grade(STUDENT *head){STUDENT *p; /* 移动指针*/char s[6]; /*存放班级用的字符数组*/clrscr();textbackground(MAGENTA);textcolor(BLUE);printf("Please enter grade for searching.\n");scanf("%s",s);p=head; /*将头指针赋给p*/while(strcmp(p->grade,s) && p != NULL) /*当记录班级不是要找的,或指针不为空时*/p=p->next; /*移动指针,指向下一结点*/if(p!=NULL) /*如果指针不为空*/{printf("\n*************************************FOUND******* *****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseprintf("\nThere is no grade %s student on the list.\n",s); /*显示没有该学生*/}/*性别查找记录函数*/void sex(STUDENT *head){STUDENT *p; /* 移动指针*/char s[4]; /*存放性别用的字符数组*/clrscr();textbackground(MAGENTA);textcolor(BLUE);printf("Please enter sex for searching.\n");scanf("%s",s);p=head; /*将头指针赋给p*/while(strcmp(p->sex,s) && p != NULL) /*当记录的性别不是要找的,或指针不为空时*/p=p->next; /*移动指针,指向下一结点*/if(p!=NULL) /*如果指针不为空*/{printf("\n*************************************FOUND******* *****************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseprintf("\nThere is no sex %s student on the list.\n",s); /*显示没有该学生*/}/* 用平均分进行分数段查找 */void average(STUDENT *head){STUDENT *p; /* 移动指针*/clrscr();textbackground(MAGENTA);textcolor(BLUE);p=head; /*将头指针赋给p*/if(p!=NULL&&p->average<60&&p->average>0) /*如果指针不为空且平均分在0-60之间*/{printf("\n**********************************notpass************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseif(p!=NULL&&p->average<70&&p->average>=60) /*如果指针不为空且平均分在60-70之间*/{printf("\n**********************************60-70************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}else if(p!=NULL&&p->average<80&&p->average>=70) /*如果指针不为空且平均分在70-80之间*/{printf("\n**********************************70-80************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseif(p!=NULL&&p->average<90&&p->average>=80) /*如果指针不为空且平均分在80-90之间*/{printf("\n**********************************80-90************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | % 4.2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}else if(p!=NULL&&p->average<100&&p->average>=90) /*如果指针不为空且平均分在90-100之间*/{printf("\n**********************************90-100************************************\n");printf("-------------------------------------------------------------------------------\n");printf("| Grade | Name | sc1 | sc2 | sc3 | Sum | Av e | Order |\n");printf("-------------------------------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4 .2f | %-5d |\n",p->grade,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END************ **************************\n");}elseprintf("\nThere is not average student on the list.\n"); /*显示没有该学生*/}/*保存数据到文件函数*/void save(STUDENT *head){FILE *fp; /*定义指向文件的指针*/STUDENT *p; /* 定义移动指针*/char outfile[10];printf("Enter outfile name,for example c:\\score\n");scanf("%s",outfile);if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,为只写方式*/{printf("Cannot open the file\n");return; /*若打不开则返回菜单*/}printf("\nSaving the file......\n");p=head; /*移动指针从头指针开始*/while(p!=NULL) /*如p不为空*/{fwrite(p,LEN,1,fp); /*写入一条记录*/p=p->next; /*指针后移*/}fclose(fp); /*关闭文件*/printf("Save the file successfully!\n");}/* 从文件读数据函数*/STUDENT *load(){STUDENT *p1,*p2,*head=NULL; /*定义记录指针变量*/FILE *fp; /* 定义指向文件的指针*/char infile[10];printf("Enter infile name,for example c:\\score\n");scanf("%s",infile);if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为只读方式*/{printf("Can not open the file.\n");return(head);}printf("\nLoading the file!\n");p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/if(!p1){printf("Out of memory!\n");return(head);}head=p1; /*申请到空间,将其作为头指针*/while(!feof(fp)) /*循环读数据直到文件尾结束*/{if(fread(p1,LEN,1,fp)!=1) break; /*如果没读到数据,跳出循环*/p1->next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/if(!p1->next){printf("Out of memory!\n");return (head);}p2=p1; /*使p2指向刚才p1指向的结点*/p1=p1->next; /*指针后移,新读入数据链到当前表尾*/}p2->next=NULL; /*最后一个结点的后继指针为空*/fclose(fp);printf("You have success to read data from the file!\n");return (head);}/*按平均分排序函数*/STUDENT *sort(STUDENT *head){int i=0; /*保存名次*/STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/temp=head->next; /*将原表的头指针所指的下一个结点作头指针*/head->next=NULL; /*第一个结点为新表的头结点*/ while(temp!=NULL) /*当原表不为空时,进行排序*/ {t=temp; /*取原表的头结点*/temp=temp->next; /*原表头结点指针后移*/p1=head; /*设定移动指针p1,从头指针开始*/p2=head; /*设定移动指针p2做为p1的前驱,初值为头指针*/while(t->average<p1->average&&p1!=NULL) /*作成绩平均分比较*/{p2=p1; /*待排序点值小,则新表指针后移*/p1=p1->next;}if(p1==p2) /*p1==p2,说明待排序点值大,应排在首位*/ {t->next=p1; /*待排序点的后继为p*/head=t; /*新头结点为待排序点*/}else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/{t->next=p1; /*t的后继是p1*/p2->next=t; /*p2的后继是t*/}}p1=head; /*已排好序的头指针赋给p1,准备填写名次*/ while(p1!=NULL) /*当p1不为空时,进行下列操作*/{i++; /*结点序号*/p1->order=i; /*将结点序号赋值给名次*/p1=p1->next; /*指针后移*/}printf("Sorting is sucessful.\n"); /*排序成功*/return (head);}/*插入记录函数*/STUDENT *insert(STUDENT *head,STUDENT *new){STUDENT *p0,*p1,*p2;int n,sum1,i;p1=head; /*使p1指向第一个结点*/p0=new; /*p0指向要插入的结点*/printf("\nPlease enter a new record.\n"); /*提示输入记录信息*/printf("Enter the grade:");scanf("%s",new->grade);printf("Enter the name:");scanf("%s",new->name);do{printf("Enter the sex(M or W):");scanf("%s",&new->sex[0]);if(new->sex[0]!='M'&&new->sex[0]!='W')printf("Data error,please enter again.\n");}while(new->sex[0]!='M'&&new->sex[0]!='W');printf("Please enter the %d scores.\n",3);sum1=0; /*保存新记录的总分,初值为0*/for(i=0;i<3;i++){do{printf("score%d:",i+1);scanf("%d",&new->score[i]);if(new->score[i]>100||new->score[i]<0)printf("Data error,please enter again.\n");}while(new->score[i]>100||new->score[i]<0);sum1=sum1+new->score[i]; /*累加各门成绩*/}new->sum=sum1; /*将总分存入新记录中*/new->average=(float)sum1/3;new->order=0;if(head==NULL) /*原来的链表是空表*/{head=p0;p0->next=NULL;} /*使p0指向的结点作为头结点*/ else{while((p0->average<p1->average)&&(p1->next!=NULL)) {p2=p1; /*使p2指向刚才p1指向的结点*/p1=p1->next; /*p1后移一个结点*/}if(p0->average>=p1->average){if(head==p1)head=p0; /*插到原来第一个结点之前*/else p2->next=p0; /*插到p2指向的结点之后*/p0->next=p1;}else{p1->next=p0;p0->next=NULL;} /*插到最后的结点之后*/}n=n+1; /*结点数加1*/head=sort(head); /*调用排序的函数,将学生成绩重新排序*/printf("\nStudent %s have been inserted.\n",new->name);printf("Don't forget to save the new file.\n");return(head);}/*统计学生成绩函数*/STUDENT *statistciam(STUDENT *head){floatsum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min;STUDENT *p;int x,y=0,i=0;p=head;printf("1.sum and average\n2.single of average\n3.max of sum\n4.min of sum\n");scanf("%d",&x);getchar();switch(x)/*用switch语句实现功能选择*/{case 1: if(head==NULL){printf("\n There are not anyone's information !\n");return(head);}/*链表为空*/else{printf("---------------------------------------------------------\n");printf("|Grade\t|Name\t|Sc1\t|Sc2\t|Sc3\t|Sum\t|Ave\t|\n");printf("---------------------------------------------------------\n");/*打印表格域*/while(p!=NULL){sum1=p->score[0]+p->score[1]+p->score[2]; /*计算个人总分*/ave1=sum1/3;/*计算个人平均分*/printf("|%s\t|%s\t|%.1d\t|%.1d\t|%.1d\t|%.1f\t|%.1f\t|\n",p-> grade,p->name,p->score[0],p->score[1],p->score[2],sum1,ave1);/*打印结果*/printf("---------------------------------------------------------\n");/*打印表格域*/p=p->next;}}return(head);case 2: if(head==NULL){printf("\nThere are not anyone's information !\n");return(head);}/*链表为空*/while(p!=NULL){sum1=sum1+p->score[0];sum2=sum2+p->score[1];sum3=sum3+p->score[2];/*计算总分*/y=y+1;ave1=sum1/y;ave2=sum2/y;ave3=sum3/y;/*计算平均分*/p=p->next;/*使p指向下一个结点*/}printf("score1 average is%.1f\n",ave1);printf("score2 average is%.1f\n",ave2);printf("score3 average is%.1f\n",ave3);/*打印结果*/return(head);case 3:if(head==NULL){printf("\nThere are not anyone's information !\n");return(head);}/*链表为空*/max=p->score[0]+p->score[1]+p->score[2];while(i<N){i=i+1;sum1=p->score[0]+p->score[1]+p->score[2]; /*计算个人总分*/if(max<sum1)max=sum1;p=p->next;}printf("max of sum:%.1f",max);printf("\n");return(head);case 4: if(head==NULL){printf("\nThere are not anyone's information !\n");return(head);}/*链表为空*/while(p!=NULL){min=p->score[0]+p->score[1]+p->score[2];while(p!=NULL){sum2=p->score[0]+p->score[1]+p->score[2];if(min>sum2)min=sum2;p=p->next;}}printf("min of sum:%.1f",min);printf("\n");return(head);default :printf("Data error,please enter again!\n"); }return(head);}。
【学生成绩管理系统】计算机程序编程课程设计实验报告实验地点:第一教学楼502室实验平台:Windows XP Microsoft Visual C++ 6.0实验用时:2013.8。
27——2013.8.30实验题目学生成绩管理系统一.实验目的使用标准C或C++实现一般管理系统的基本功能。
进一步巩固C语言的学习,培养一定的综合编程能力。
二.实验设计要求(一)需要处理的基础数据学生基本信息包括:➢学号(如2010级14班6号写作20101406)➢姓➢名➢性别➢出生年月日➢课程对应的考试成绩(外语SCORE[0]、高数SCORE[1]、C语言SCORE[2]、马哲SCORE[3])➢平均成绩和总成绩(二)系统功能1.学生基本情况录入.要求对输入的性别、出生年月日的合理性进行判断(如0代表“女”,1代表“男",输入其他值非法,年龄不能为负,月份不能大于13等)。
2.允许对已经录入的数据进行显示。
3.允许进行数据的插入。
4.删除基本数据的相关信息。
5.基于姓名的查询。
如:姓张的所有同学。
6.基于各种基本数据的统计计算。
如:①统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。
②列出90分及以上、80分及以上、70分及以上、60分及以上、不及格学生清单(学号、姓名、不及格的课程和成绩)。
③统计并输出各门功课的平均成绩和总平均成绩。
④按班级统计并输出总成绩(需对学号进行解析).(三)数据结构说明typedef struct St1{ char IDNumber[16]; /*学号*/char FamilyName[16];/*姓*/char GivenName[16]; /*名*/int sex;/*性别(0代表“女”,1代表“男”)*/int BirthYear;/*出生年*/int BirthMonth;/*出生月*/int BirthDay;/*出生日*/float score[4]; /*成绩*/float sum; /*总分*/float average;/*平均分*/struct St1 *next;}StudentNode;(四)菜单的样板模式为:1。
c语言成绩管理系统实验报告C语言成绩管理系统实验报告摘要:本实验旨在设计并实现一个基于C语言的成绩管理系统,通过该系统可以方便地对学生的成绩进行管理和查询。
本实验采用了C语言作为开发工具,利用文件操作和数据结构的知识,成功实现了一个简单而实用的成绩管理系统。
通过本实验,不仅加深了对C语言的理解和应用,还提高了对文件操作和数据结构的掌握。
一、实验目的1. 熟悉C语言的基本语法和文件操作知识;2. 掌握数据结构的基本概念和应用;3. 设计并实现一个简单的成绩管理系统。
二、实验内容1. 设计成绩管理系统的功能模块:包括录入成绩、查询成绩、修改成绩、删除成绩等;2. 使用C语言编写相应的代码实现各功能模块;3. 运行程序进行测试,检验系统功能是否正常。
三、实验步骤1. 设计成绩管理系统的数据结构:学生信息包括学号、姓名、成绩等;2. 编写录入成绩的功能模块,实现将学生信息和成绩保存到文件中;3. 编写查询成绩的功能模块,实现根据学号或姓名查询学生的成绩信息;4. 编写修改成绩的功能模块,实现根据学号或姓名修改学生的成绩信息;5. 编写删除成绩的功能模块,实现根据学号或姓名删除学生的成绩信息;6. 编写主函数,实现系统的整体调用和测试。
四、实验结果通过本次实验,成功设计并实现了一个基于C语言的成绩管理系统。
系统可以方便地对学生的成绩进行录入、查询、修改和删除操作,操作简单、方便。
通过测试,系统功能正常,可以满足基本的成绩管理需求。
五、实验总结本次实验加深了对C语言的理解和应用,提高了对文件操作和数据结构的掌握。
通过设计和实现成绩管理系统,不仅锻炼了编程能力,还提高了对实际问题的解决能力。
希望通过本次实验,能够更好地掌握C语言的基本知识和应用技巧,为今后的学习和工作打下坚实的基础。
六、参考资料1. 《C Primer Plus》2. 《C语言程序设计》3. 《数据结构与算法分析》通过本次实验,不仅加深了对C语言的理解和应用,还提高了对文件操作和数据结构的掌握。
学生成绩管理系统实验报告㈠实验名称:学生成绩管理系统㈡实验目的:1〕利用所学的三种程序根本构造以及数组、用户自定义函数进展一个简单管理系统的设计,进一步理解和掌握c语言的语法以及三种根本程序构造的综合应用。
2〕通过程序中设计到的排序、查找、求和等操作加深对算法、程序设计思路、常用程序设计技巧的理解与掌握,逐步培养学生的程序开发能力。
㈢实验要求:设某班有n位同学,每位同学的数据包括一下内容:学号〔长整型〕、姓名〔字符号〕、数学成绩〔整型〕、程序设计成绩〔整型〕。
设计程序完成以下5项功能:新建数据档案、添加数据、删除数据、对输入的数据进展排序和查询。
㈣算法内容:①程序运行,利用printf函数显示主菜单,并提示输入相应的数字来进展相关操作。
显示主菜单如下:1.新建数据2.添加数据3.删除数据4.排序5.查询6.退出②假设输入1,那么进入新建数据界面。
根据提示依次输入学生人数、学生的学号、姓名、数学成绩和程序设计程序。
S1:输入学生人数n,S2: 0->i,(把0放在变量i中〕S3:输入第i+1个学生的数据〔学号,姓名,学数学成绩,程序设计成绩〕S4:i+1->iS5:假设i<n,返回S2 ,否那么继续S6:0=<iS7:输出第i+1个学生数据S8:i+1=i假设i<N,返回s6否那么完毕算法③输入2,进入添加数据界面。
S1:原有学生人数n加1,即n+1=>nS2:输入学生数据S3:0->iS4:输出第i+1个学生的数据S5:假设i<n返回S4,否那么完毕算法④输入3进入删除数据界面。
S1:输入要删除的学生学号mS2:0->i,0->jS3:假设学生的学号stu[i].num,转到S6,否那么继续S4:i+1->iS5:假设i<n,返回S3,否那么输出“输出的学号不存在〞算法接速S6:n-1-> nS7: 把要删除的数据覆盖stu[i].num=>stu[j].num;stu[i].name=>stu[j].name;stu[i].math=stu[j].math;stu[i].C=stu[j].C;j++;S8:假设i<n,返回S7,否那么继续S9:0->iS10:输出第i+1个学生的数据S11:假设i<n返回S10,否那么完毕算法⑤输入4,进入排序界面。
移通学院
C语言程序设计报告书设计名称:学生成绩管理系统
专业:
指导老师:
班级:
姓名:
学号:
座号:
时间
一、实验目的
1.在编辑应用程序过程中,逐步加深对C语言编程的理解;
2.加强实践的能力,动手能力,同时进一步对所学的知识
进行巩固;
3.培养初步编程的能力,为以后的学习奠定基础。
二、实验内容
运用所学的C语言知识编辑一个应用程序:学习成绩管理系统
三.系统软件环境:
本程序主要运行在:Visual C++ 6.0
Turbo C/C++ 3.0
四.课程设计题目:
学生成绩管理系统
程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:
(1)主菜单
(2)各菜单项功能
①成绩录入:输入学生的学号、姓名及三门课的成绩;
②成绩查询:
*按学号查询学生记录。
③成绩统计:
*计算学生的平均分;
*根据学生的平均分高低,对学生的数据进行排序后输出;
④退出系统:退出整个系统(即主菜单)。
五.数据结构设计描述:
↓
↓
六.各变量的定义和作用
int num; /*定义学号,变量为整型*/
char name; /*定义姓名,变量为字符型*/
int score; /*定义课程的成绩,变量为整型*/
float average; /*定义平均分,变量为浮点型*/
七.系统各函数的功能,、相互调用关系
1.函数实现功能说明:
(1)menu函数
是定义一个菜单函数,其功能在于输出菜单界面供使用者选择。
(2)input函数
是定义用于输入学生信息。
(3)select 函数
是定义用于查询学生信息。
包括学号、姓名及各科成绩。
(4)statistics 函数
计算学生的平均分。
根据学生的平均分高低,对学生的数据进行排序输出。
2.相互调用关系:
Main函数调用menu函数。
Menu 函数可以调用input 函数、select函数和statistics函数八.心得体会
C语言是一种较为基础和普遍的编程语言,应用相当广泛,这次课程设计的要求与C语言的广泛应用相比较还有很大的差距。
我们对于C语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,我想我们也要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序。
九.程序:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 3 /*学生人数*/ #define M 3 /*课程门数*/ struct student
{
int num; /*学号*/ char name[20]; /*姓名*/
int score[3]; /*三门课成绩*/ float average;
}stu[N]; /*学生数*/
void input(); /*查询*/
void select(); /*统计*/
void menu();
void input()
{
int i,j;
printf("\t\t①成绩录入\n\n");
for(i=0;i<N;i++)
{
printf("请输入学号:");
scanf("%d",&stu[i].num);
printf("请输入姓名:");
scanf("%s",&stu[i].name);
for(j=0;j<M;j++)
{
printf("第%d门成绩的分数:",j+1); scanf("%d",&stu[i].score[j]);
}
printf("\n\n");
}
printf("\n\n");
printf("输入完毕!按任意键返回主菜单!"); getch();
}
/*2.查询*/
void select(int no)
{
int i;
printf("学生%d号: \n",no);
printf("学号: %d\n",stu[no-1].num); printf("姓名: %s\n",stu[no-1].name); for (i=0;i<M;i++)
{
printf("第%d门课程的成绩为: ",i+1); printf("%d\n",stu[no-1].score[i]);
}
printf("\n按任意键返回主菜单!"); getch();
}
/*3.统计*/
void statistics()
{
float temp=0;
int i=0;
int j=0;
/*学生成绩平均分*/
temp=0;
printf("\t\t③成绩统计\n\n");
for(j=0;j<N;j++)
{
for(i=0;i<M;i++)
{
temp=temp+stu[j].score[i];
}
stu[j].average=temp/N;
printf("\n学生%s的成绩平均成绩为:",stu[j].name); printf("%0.2f分",stu[j].average);
temp=0;
}
/*排序(冒泡法)*/
for (j=0;j<N;j++)
for(i=0;i<N-j-1;i++)
if(stu[i].average<stu[i+1].average)
{ temp=stu[i].average;
stu[i].average=stu[i+1].average;
stu[i+1].average=temp;
}
printf("\n\n学生平均成绩前三名:");
for(i=0;i<3;i++)
{
printf("\n第%d名:%0.2f分",i+1,stu[i].average);
}
printf("\n\n按任意键返回主菜单!");
getch();
}
void menu()
{ int num=0;
int n=0;
printf("\n\t\t\t学生成绩管理系统\n\n");
printf("\n\t\t①成绩录入\n\t\t\t②成绩查询\n\t\t\t③成绩统计\n\t\t\t④退出系统\n");
printf("\t\t\tchoose:");
scanf("%d",&num);
switch(num)
{case 1:
system("cls");
input();
break;
case 2:
system("cls");
printf("\t\t②成绩查询\n\n");
printf("请输入要查询的学生号(1~3):"); scanf("%d",&n);
select(n);
break;
case 3:
system("cls");
statistics();
break;
case 4:
exit(0);
default:;
}
}
void main()
{while(1)
{system("cls"); /*清屏*/
menu();
}
}。