学生学习成绩管理系统
1.课程设计的目的
1.对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 2.掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。
3.熟练掌握C语言的基本语法,灵活运用各种数据类型。
4.进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察
表达式,分块调试)和修改程序。 2.课程设计的要求
1.程序在运行时,均以菜单形式提供选择界面,并提供一定的数据安全
和提示具有良好的交互功能。 2.设计中的每一个小功能均由子函数来完成
3.提前编制下次调试的程序,对于难点问题要积极查阅相关教材、资料,计划好每次上机的内 ,高效、独立地完成这次设计任务
4.在硬盘上建立自己的目录,将程序文件存储到该目录下,即有利于调试文件,又保证了文件的安全性。 3.课程设计报告内容 3.1任务定义
本系统主要应用数据结构的设计思想,在TC环境下运用C语言进行编程设计一个学生成绩管理系统,该系统主要实现对学生的学号、姓名等自然信息以及学生成绩信息进行创建、增加、删除、查询、插入、显示的功能以及计算所有学生总成绩的总分,并依照学生各类信息高低进行排名的功能。系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。
3.2系统运行环境
操作系统:Windows 98/2000/XP 运行软件:TC
3.3功能需求(问题分析)
学生成绩管理系统为教师和学生提供了一个对学生自然信息和学科成绩进行管理和查看的平台,给用户提供了一个简单友好的用户接口,功能需求分析描
1
述如下:
(1)编写菜单函数,为用户提供一个友好的操作选择界面。
(2)学生信息输入:用户根据提示输入学生的学号、姓名、各科成绩,可一次
性输入多条学生的成绩信息记录;当要停止输入并退回主菜单时,只须输入0符号回车即可。
(4)学生信息删除:提示用户输入要删除的学生学号或姓名,如果输入的学号
不存在,系统会立即提示不存在该学号的学生请先添加。
(6)学生信息添加(插入):使用户可以根据提示在原有的学生成绩表中的任何
位置添加新的学生信息记录。
(7)学生信息查询:根据系统提示输入要查找的学生名字或学号回车后,即可
显示已找到的学生信息记录。
(8)学生成绩计算:系统能够自动计算所有学生的总成绩。 (9)学生成绩排序:按照系统提示选择项目进行从高分到低分排序。
(10)学生信息清单显示:系统显示所有学生的信息情况,包括学生学号、姓名、各科成绩、个人总成绩。
(11)系统退出:实现用户退出本系统的功能。 3.4 程序设计步骤 1.大体结构图
学生成绩管理系统 学生信息添加 学生信息修改 信息清单删除 学生信息排序 学生成绩查找 载入文件信息 学生信息保存 系统退出 2.主程序模块分析
整个系统功能共分八个功能: 1.addstudent 学生信息添加
2
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)学生信息查询:根据系统提示输入要查找的学生名字或学号回车后,即可以排列的形式显示已找到的学生信息记录,接着自动跳到主菜单。用到status
3
findstudent(stu *s)查找函数。
(6)学生成绩计算:利用 allscore=mscore+escore+cscore求得. (7)学生信息添加:直接用用addstudent函数添加。
(8)学生成绩排序:选择并执行该功能后,系统提示使按学号,各科成绩或总成绩排列,选择后系统自动按降序排列。
(9)系统退出:实现用户退出本系统的功能。其实这里只用到了一个exit(0); 3.5流程图
开始 显示主菜单 Y 选0退出 N N 选1-7 Y 执行具体功能 显示结果 退出系统
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) /*添加记录*/
4
status findstudent(stu *s) /*查询*/ status loadstudent(stu *s) /*载入文件信息*/ status savestudent(stu *s) /*保存学生*/ exit(0); /*关闭*/ 2.计算公式
allscore=mscore+escore+cscore 3.定义数据结构
用一个类的嵌套定义struct student *next;用整型数据定义学号和成绩,用char定义姓名。
typedef struct student{ int num; // 学号 char name[20]; // 姓名 int mscore; // 数学成绩 int cscore; // c语言成绩 int escore; // 英语成绩
struct student *next;//嵌套定义结构体指针 }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:showstudent(s);break;//查看学生信息 case 5:findstudent(s);break;// 查询学生 case 6:loadstudent(s);break;//载入文件信息 case 7:savestudent(s);break;// 保存学生 default: getchar();break;//关闭系统 (2)菜单函数
定义菜单字符串数组,以字符形式保存选择号,定义整形变量作为开关的条件,要求输入选择项,利用开关定义当输入值超过7直接返回到主菜单重新选择输入,主程序根据该数调用相应的函数。实现了菜单美观和简便效果。 (3)链表
定义stu指向结构体的指针,并使用类嵌套定义类对象struct student *next,定义*s->next为头链表头依次往下输出信息知道指针指到的某个对象为
5