文档详情

C语言学生学习成绩管理系统实验报告

M****1
实名认证
店铺
DOCX
92.81KB
约21页
文档ID:490736589
C语言学生学习成绩管理系统实验报告_第1页
1/21

学生学习成绩管理系统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)学生信息删除:提示用户输入要删除的学生学号或姓名,如果输入的学号 不存在,系统会立即提示不存在该学号的学生请先添加6)学生信息添加(插入):使用户可以根据提示在原有的学生成绩表中的任何 位置添加新的学生信息记录7)学生信息查询:根据系统提示输入要查找的学生名字或学号回车后,即可 显示已找到的学生信息记录8)学生成绩计算:系统能够自动计算所有学生的总成绩9)学生成绩排序:按照系统提示选择项目进行从高分到低分排序10)学生信息清单显示:系统显示所有学生的信息情况,包括学生学号、姓名 各科成绩、个人总成绩。

11)系统退出:实现用户退出本系统的功能3.4 程序设计步骤1•大体结构图学生成绩管理系统学生信息添加学生信息修改信息清单删除学生信息排序学生成绩查找载入文件信息学生信息保存系统退出2. 主程序模块分析整个系统功能共分八个功能:1. addstudent 学生信息添加2. editstudent 学生信息修改3. delstudent 信息清单删除4. showstudent 学生信息排序5. findstudent 学生成绩查找6.loadstudent 载入文件信息7. savestudent 学生信息保存0.exit 系统退出以上八个功能就是本系统模块的主要功能,根据需求分析,对其进行功能逻 辑设计:(1) 定义数据结构typedef struct student{ }stu;以下分别要用到的 函数为:菜单函数void showmenu()的函数,定位链表中符合要求的接点stu* Locate(stu *s,char find[],int k)用于插入和查找功能,删除记录函数status delstudent(stu *s),显示所有记录的函数 void show(stu *s,int k),显示学 号对应的姓名 void showid(stu *s)),排序函数 status list(stu *s,int k), 添加记录函数 status addstudent(stu *s), 查询函数 status findstudent(stu *s) 载 入 文 件 信息 status loadstudent(stu *s), 保 存学 生 status savestudent(stu *s), 关闭exit(0);(2) 学生信息输入:实现可以输入学生的学号、姓名、各科成绩的功能。

首先 定义指向结构体的指针,动态申请空间;用if(k == 0) break;实现当学号首字 符为0则结束输入的功能;在for循环中嵌套while{}{},实现N门课程循环N 次和成绩正确输入, 接着用到了数据结构的新结点插入的知识3) 学生信息删除:实现输入要删除的学生学号,执行后就可以删除该学生所 有信息该功能用到status delstudent(stu *s)删除记录的函数,先定义p为 查找到要删除的结点指针,如果还没信息则显示添加,函数返回到Locate,否则 通过 while(r->next != p) r = r->next; r->next 二 p->next; free(p);确定 要删除的项目4) 学生信息清单显示:系统显示所有学生的信息情况,包括学生编号、学号、 姓名、各科成绩、个人总成绩这里用到显示函数实现输出链表中结点信息的功 能5) 学生信息查询:根据系统提示输入要查找的学生名字或学号回车后,即可 以排列的形式显示已找到的学生信息记录,接着自动跳到主菜单用到 statusfinds tuden t(stu *s)查找函数6) 学生成绩计算:利用 allscore=mscore+escore+cscore 求得.(7) 学生信息添加:直接用用 addstudent 函数添加。

8) 学生成绩排序:选择并执行该功能后,系统提示使按学号,各科成绩或总 成绩排列,选择后系统自动按降序排列9) 系统退出:实现用户退出本系统的功能其实这里只用到了一个exi t(0);3.5 流程图3.6 详细设计1. 函数原型void showmenu() 菜单函数stu* Locate(stu *s,char find[],int k) /*结点添加(插入) */status delstudent(stu *s) /*删除记录*/void show(stu *s,int k) /*显示所有记录的*/void showid(stu *s) /*显示学号对应的姓名*/status list(stu *s,int k) /*排序*/status addstudent(stu *s) /*添加记录*/status findstudent(stu *s) /*查询*/status loadstudent(stu *s) /*载入文件信息*/status savestudent(stu *s) /*保存学生*/exit(0); /*关闭*/2. 计算公式allscore=mscore +escore+ cscore3. 定义数据结构用一个类的嵌套定义struct student *next;用整型数据定义学号和成绩, 用 char 定义姓名。

typedef struct student{int num; // 学号char name[20]; // 姓名int mscore; // 数学成绩int cscore; // c 语言成绩int escore; // 英语成绩st ruc t stu dent *nex t;//嵌套定义结构体指针}stu;3.7.函数说明(算法分析)(1)链表定义头指针stu *s,初始化链表s->next二NULL;,主函数调用set, set值作为开关语句的条件,switch函数中用了八个case:case 1:addstudent(s);break; // 增加学生case 2:editstudent(s);break;// 修改学生 case 3:delstudent(s);break;// 删除学生 case 4:shows tu den t( s);break;//查看学生信息 case 5:findstudent(s);break;// 查询学生 case 6:loads tu den t( s);break;//载入文件信息 case 7:savestudent(s);break;// 保存学生 defaul t: ge tchar();break;//关闭系统( 2 )菜单函数定义菜单字符串数组,以字符形式保存选择号,定义整形变量作为开关的条 件,要求输入选择项,利用开关定义当输入值超过 7 直接返回到主菜单重新选择 输入,主程序根据该数调用相应的函数。

实现了菜单美观和简便效果 3)链表定义 stu 指向结构体的指针,并使用类嵌套定义类对象 struct student*next,定义*s->next为头链表头依次往下输出信息知道指针指到的某个对象为 空时停止并返回主菜单选择直接在输出数值时添加 mscore+escore+cscore 作 为总成绩加到信息最后一列4)show 函数为了能让用户输入字符串,依然是定义一个开关,此时的开关条件无最大值,添加信息时直接调用 show 函数即可实现学生信息的输入5) printf 函数编写显示函数用来输出链表中结点信息,Stu型指针r接着r二*S初值为 头指针,用printf方法输出存储学生信息,最while(r!=NULL){……}实现当表 中有信息即不为空,就执行while中的内容,打印出学生的各个信息6) delete 函数用来删除记录,先用 if(!S->next){printf("haSnoStudent!\npleaSeadd at frist!")验证学生信息是否为空,如果为空则输出“please add first”如 果不为空,先选择按学号删除或按姓名删除,然后调用函数 Stu* Locate(Stu *s,char find[],int k)查找要删除的记录。

然后用freep ()执行记录清空7) insert 函数用来插入学生记录,定义二个指针为p和l,l为前驱,p为插入数据的位 置如果遇到相同学号的则显示输入有重复并显示原来学号的信息如不然则用 scnf和printf输入输出数据,并在运行结束后把指针置尾 8) sort 函数根据不同的要求实现成绩从大到小排列,程序中采用的使选择法进行排序,排序过程中调用swap函数实现数据的排列这样就能按不同要求把数据排列 了3.8 程序调试与测试(结果分析)1.函数主界面2.选择第一项实现添加数据如下1mscore,cscoreinput tiiFnl:.input num[0:return]:1 student:name,,escorelike [luc

氓=huangjiann4.选择 3 进行删除成绩le。

下载提示
相似文档
正为您匹配相似的精品文档