《课程设计(论文)学生成绩管理系统.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)学生成绩管理系统.doc(19页珍藏版)》请在三一办公上搜索。
1、 题目:学生成绩管理系统 姓名学号:目录目录 一 问题的描述.3 1.1 问题描述.3 1.2 基本需求.3 二 需求分析.3 三 系统设计.4 3.1 主函数流程图.4 3.2 主程序结构及其声明.5 3.3 各个操作函数的流程图.6 3.3.1 添加学生信息函数.6 3.3.2 修改学生信息函数.7 3.3.3 删除学生信息函数.8 3.3.4 游历链表(输出数据)函数.9 3.3.5 比较函数(即成绩排名函数).9 3.3.6 单科成绩录入函数.10 3.3.7 挂科超过两门名单统计函数.10 四 编码与调试分析.11 4.1 遇到过的错误.11 4.11 语法错误.11 4.12 运行
2、错误.12 4.13 逻辑错误.13 4.2 系统仍存在的问题.13 五系统使用说明.14 五 测试结果.15 六 课程设计心得.18 八参考文献.18 一一问题的描述问题的描述 1.1 问题描述问题描述 随着数字信息的蓬勃发展,而今越来越多的行业要用到必要的软件来提高工作效率,尤其是对于学校学生成绩管理的现代化、科学化的要求逐渐迫切起来。越来越多的人认识到学生成绩管理计算机化的重要性和必要性。希望能够有一套提高管理效率、操作上简洁方便,并能满足各种必要功能的系统。本系统使用 Visual C+6.0 作为开发工具。编写操作台程序。编写简单的菜单,提供了一个可视化的操作界面,使用户可以对学生基
3、本信息操作,可以实现各科成绩的基本操作,使用户能够方便地管理学生成绩信息。1.2 基本需求基本需求 学生成绩管理系统针对主要用户为教师,此系统可以实现用户对学生基本信息的添加、修改、删除操作,也可以对学生成绩进行输入、管理、显示功能,还有对于不及格科目超过两科的学生名单统计,也可以对各科成绩进行排名。二二需求分析需求分析 根据程序的功能划分,可划分为以下几个模块:1、学生基本信息设置模块 用户在此模块中可以够添加,删除,修改学生的基本信息 2、各科成绩录入模块 用户在这个模块之中可以对各个学生的各科成绩进行录入 3、成绩统计模块 用户在此模块可以选择查看各科成绩的排名情况,或者不及格科目超过两
4、门的学生名单统计 4、信息查询模块 用户在此模块可以查询全部的学生数据,也可以查询某个学生的信息 三三系统设计系统设计 3.1 主函数流程图主函数流程图 根据用户需求,系统主函数的流程图如下:学 生 成 绩 管 理 系 统学 生 基 本 信 息 设 置学 生 各 科 成 绩 录 入学 生 成 绩 统 计学 生 信 息 查 询修 改添 加删 除高 数英 语C+各 科 排 名挂 科 超 过 两 门 名 单 显 示高 数英 语C+显 示 全 部 数 据查 询 学 生 个 人 信 息 3.2 主程序结构及其声明主程序结构及其声明 本程序运用链表结构,将各数据联系起来,实现学生各个数据的添加、删除、修改
5、等等功能。分别创建四个头文件,来实现主函数流程图中四个大的作用模块,其中学生基本信息管理的头文件命名为 StuSet.h,各科成绩录入模块的头文件命名为RecordSet.h,学生成绩统计模块的头文件命名为 RecordTongJi.h,学生信息查询模块的头文件命名为 InformSeek.h。在 StuSet 头文件中,创立结构,并定义结构体链表,定义全局变量链表头指针、尾指针、New 指针,定义学生数变量 n(即节点数),其声明如下:3.3 各个操作函数的流程图各个操作函数的流程图 3.3.1 添加学生信息添加学生信息函数函数 在添加学生基本信息函数中,运用链表的创建方法,其流程图如下:开
6、辟一个新结点,并使pnew、ptail 指向它读入一个学生基本信息数据,给pnew 所指向的结点定义头指针phead=NULL 当输入的pnew-num 不是零n=n+1n等于1?真假将头指针地址phead 交给pnew 即把pnew 作为第一个结点Ptail-next=pnew(把pnew 所指的结点连接到表尾)Ptail=pnew(ptail 移至表尾)再开辟一个结点,使pnew 指向它读入一个学生基本信息给pnew所指向的结点表尾结点的指针变量置NULL 3.3.2 修改学生信息修改学生信息函数函数 学生信息修改函数是简单的链表结点数据修改,由于尚未输入信息之前没有数据,故无法修改,所以
7、本函数加入了一个判断语句,其流程图如下:游历链表读入所输入的学号m学号m存在?真假输出要修改的学生的基本信息并提示请输入新的资料提示尚未输入任何数据,返回主菜单重新选择!输入要修改的新的资料表尾结点的指针变量置NULL 3.3.3 删除学生信息删除学生信息函数函数 删除学生数据的函数即删除结点的函数,其流程图如下:链表是否为一个空表pnew=phead输出“空表!”是是否pnew 是要删除的结点?否 pnew 所指是头结点?输出“未找到该生信息”的提示是否当num!=pnew-num 以及 pnew 所指的结点不是表尾结点 ptail=pnew(即ptail后移一个位置)pnew=pnew-n
8、ext(即pnew 后移一个位置)phead=pnew-next(删除头结点)ptail-next=pnew-next(删除该结点)3.3.4 游历链表(输出数据)函数游历链表(输出数据)函数 输出全部数据的函数,即游历链表的函数,其函数流程图为:链表是否为一个空表pnew=phead输出“尚未输入数据,请输入!”是否当 pnew!=NULL 输出该结点的全部数据pnew=pnew-next(每当输出完一个结点的数据,pnew 往下移动一个位置)3.3.5 比较函数(即成绩排名函数)比较函数(即成绩排名函数)成绩排名函数利用了冒泡法给学生各科成绩进行排序,交换所有数据,而后一一输出,其流程图为
9、:链表是否为一个空表 定义两个中间结构体指针*ptemp(中间变量指针)*pcomp=pnew-next(使其中的一个指向pnew 的下一个结点)输出“尚未输入数据,请输入!”是否n为已添加的学生总数,定义两个整形i,j,j由0到n共执行n-1次循环 进行n-j次比较交换pnew 和pcomp的所有数据要比较的pnew以及pcomp(pnew下一个结点)所指向的成绩大小pnew-成绩 pcomp-成绩是否输出排第几名、以及学号、姓名 3.3.6 单科成绩录入函数单科成绩录入函数 若未添加学生基本信息,则无法录入各科成绩,会提示请添加学生基本信息,该函数的流程图为:链表是否为一个空表输出“添加学
10、生基本信息!请输入!”是否 当pnew 不为NULL时输入pnew-num 同学的XX单科成绩 pnew=pnew-next(pnew 后移一个位置)输出“高数成绩录入完成”3.3.7 挂科超过两门名单统计函数挂科超过两门名单统计函数 此函数我运用了一个计数变量 q,来控制输出,当挂了一科(即一个科目的分数少于 60 分),q 便自加 1,q 的初始值为 0,即当 q=2 时输出该生的名字以及学号,其流程图为:链表是否为一个空表输出“添加学生基本信息!请输入!”是否三科成绩是否全部录入?输出提示“请将全部学科成绩录入完全”定义计数变量p=0,当pnew!=NULL结点数据小于60是否是否 q自
11、加1 q不变 pnew=pnew-next q 是否大于等于2?是否输出该结点的姓名,学号 四四编码与调试编码与调试分析分析 本系统编码过程中遇到过很多问题,现按其类别一一举出。4.1 遇到遇到过过的的错误错误 4.11 语法错误语法错误 最初遇到的语法错误便是在主菜单中的语法错误,开始定义了选择项的变量为整型,选择时若是输入了一个字符,便会进行菜单的无限循环。后来改为数组类型,用了 switch 循环语句,改掉了这个 bug 并能提示输入错误,请重新选择。后来遇到一个语法错误,是在编挂科超过两门学生名单统计时,计数变量 q的语法错误,开始定义 q 是在循环外定义的,这样在每次执行循环之前 q
12、 的初值都是执行完上一次的值,并不是 0,所以程序会显示各个学生的信息,现代码改为如下:在每次循环之前 q 都为 0,避免了出错。4.12 运行错误运行错误 编码时候遇到的运行错误,也是解决掉程序的一个重大的 bug。开始本程序在调用过添加学生信息(即创建一个链表)之后,若再继续添加学生信息,则程序会出错,因为此时相当于创建了两个链表。为修改这个错误,我创建了一个“继续添加学生信息”选项,此函数为再创建一个链表并直接接在原先链表尾部,使程序得以运行,此函数为:4.13 逻辑错误逻辑错误 在做比较函数的时候,曾遇到一个逻辑上的错误,便是利用冒泡法做比较的时候,开始没有细想一趟中的比较和一共要比较
13、几次与两个结构体指针往下指的关系,于是导致程序编译没有问题但是运行却不是那个结果。后来想到了这点,那段代码改为:即,每次两两比较后,pnew 与 pcomp 均往后移动一个位置;而每趟比较过后,pnew 与 pcomp 均归为起始点(即 pnew 指向链表第一个数据,pcomp指向链表第二个数据),这样修改便避免了这个逻辑错误。4.2 系统仍存在的问题系统仍存在的问题 本系统仍存在 Bug,因为我定义的学号为 int 型,学生各科成绩均为 double 型,所以当误输入这些数据为一个字符的时候,系统将会无限循环当前的画面。这个问题有待解决。五五系统使用说明系统使用说明 主菜单选择 1 学生基本
14、信息设置 子菜单 1 中选择 1 添加学生信息 子菜单 1 中选择 2 修改学生信息 子菜单 1 中选择 3 删除学生信息 子菜单 1 中选择 4 继续添加学生信息 主菜单选择 2 各科成绩录入 子菜单 2 中选择 1 高数成绩录入 子菜单 2 中选择 2 英语成绩录入 子菜单 2 中选择 3 C+成绩录入 主菜单选择 3 成绩统计菜单 子菜单 3 中选择 1 各科排名情况 子菜单 3 中选择 2 挂科超过两门学生名单显示 主菜单选择 4 信息查询菜单 子菜单 4 选择 1 全部信息显示 子菜单 4 选择 2 查询学生信息 主菜单选择 5 退出系统 五五测试结果测试结果 如图,当程序开始运行时
15、,会弹出主菜单,选择一进行学生基本信息设置 当选择一,进入基本信息设置的子菜单,这里可以有添加修改删除,以及继续添加的选项 当选择添加学生信息时,输入学号姓名性别,若不想继续添加,将学号置为 0 即可,输入完学生信息后,回车键回到主菜单 若想继续添加,则选择基本信息设置中的 4 选项,继续添加学生信息与此函数运行结果一样,在此不做截图。修改、删除学生信息,均为输入学号进行修改、删除。若无此学号,则会出现错误提示:若找到此学号的结点,修改函数执行结果为:先输出此函数的当前数据,再进行新数据的输入,输入新数据完成后回车键会回到主菜单,可以选择执行其他作用函数。同样删除函数成功删除后会有“数据已删除
16、”的提示,在此不作截图。各科成绩录入,选择后会按用户开始输入学生信息的顺序提示:请输入XX 同学的 XX 成绩,在此以高数成绩为例:在各科成绩都录入完全之后,选择成绩统计菜单中的各科排名,就会显示单科的排名状况,以高数成绩排名为例,程序运行如下:挂科超过两门选项运行结果亦如此,在这里不作截图。信息查询选项中,全部信息显示,将会显示当前所有的信息:查询学生个人信息选项中,提示要查询的学生学号,若有此人,则输出该生全部信息,若无此人,则提示无此人信息。查到了 未查到 六六课程设计心得课程设计心得 通过对于课程设计学生成绩管理系统的思考,编码,各个资料的学习,使得我了解了链表的基本使用方法,并学会了在程序编码过程中所遇到的各种困难的应对方法,以及各个小算法以及各种头文件之间联系知识的增长,还学会了构造菜单以及子菜单的循环算法等等。总之,通过此课程设计以及各个老师的悉心教导,使我受益匪浅,感觉自己不仅在程序方面大有提高,在应对学习中各种困难的心态也有所改变,使自己心态更为坚强,来应对学习生活中的各种艰难险阻。八参考文献八参考文献 C 程序设计(第四版)谭浩强 编著 C 程序设计(第四版)学习辅导 谭浩强 编著 C+面向对象程序设计 谭浩强 编著