数据结构设计

上传人:枫** 文档编号:507729946 上传时间:2022-07-22 格式:DOCX 页数:26 大小:292.87KB
返回 下载 相关 举报
数据结构设计_第1页
第1页 / 共26页
数据结构设计_第2页
第2页 / 共26页
数据结构设计_第3页
第3页 / 共26页
数据结构设计_第4页
第4页 / 共26页
数据结构设计_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《数据结构设计》由会员分享,可在线阅读,更多相关《数据结构设计(26页珍藏版)》请在金锄头文库上搜索。

1、一、问题描述在学生成绩管理中,经常会遇到求平均成绩,统计不及格学生成绩,统计优秀 学生人数,以及按成绩对学生进行排名等。现假设有某个班级的若干名学生,每个 学生都考试完成了4 门课程,试对所有学生的成绩完成以下工作:(1)求每门课程的平均成绩。(2)输出所有有不及格课程的学生的学号、姓名、全部课程的成绩、平均成绩。(3)输出所有平均分在90 分以上(含90 分)的学生学号、姓名。(4)对4 门课程中的任何一门,可随意抽取1门按学生成绩进行排序。二、基本要求对学生信息的输入完成后,实现如下功能:1、对学生信息的查找、插入、删除 修改。2、分别输出优秀学生和不及格学生的信息。3、显示每们课程的平均

2、成绩。4、 任意抽取一门课程后,可以按该课程学生成绩对学生信息进行排序。三、数据结构的设计为了对学生信息进行统一操作,使用了结构体这一数据结构,学生的各项数据 信息都能用结构体来表示,具体如下:struct stuint num;/*学号,整型变量*/char name50;/*姓名,长度为50的字符串数组*/char classes50/*班级名称,长度为50的字符串数组*/;double gsps_score;/*高等数学平时成绩,双精度实型变量*/double gsks_score;/*高等数学考试成绩,双精度实型变量*/double gszh_score;/*高等数学综合成绩,双精度实

3、型变量*/double dlps_score;/*电路理论平时成绩,双精度实型变量*/double dlks_score; /*电路理论考试成绩,双精度实型变量*/double dlzh_score; /*电路理论综合成绩,双精度实型变量*/double yyps_score;/*英语平时成绩,双精度实型变量*/double yyks_score;/*英语考试成绩,双精度实型变量*/double yyzh_score;/*英语综合成绩,双精度实型变量*/double wlps_score;/*物理平时成绩,双精度实型变量*/double wlks_score; /*物理考试成绩,双精度实型变量

4、*/double wlzh_score; /*物理综合成绩,双精度实型变量*/double pj_score;/*平均成绩,双精度实型变量*/student1000;/*最多存储1000个学生数据*/该结构体数据定义为全局变量。四、软件模块结构图学生信息录入模块按学号杳询学生信息学生信息杳询模块主菜单控制模块学生信息修改模块学生信息删除模块按姓名杳询学生信息学生信息插入模块输出优秀学生相关信息学生信息输出模块输出不及格学生信息每门课程的平均成绩课稈成绩统计模块按单科成绩排名次模块功能描述:a. 主菜单控制模块:主菜单直接控制七个模块(学生信息输出模块的两个子模块直 接归主菜单控制),在各模块间

5、起到纽带的作用。在主菜单,可以通过选择进入其他 模块,其他模块运行结束后也可回到主菜单继续选择。b. 学生信息录入模块:循环输入学生信息,建立临时的学生信息数据库。c. 学生信息查询模块:可选择按学号或者按姓名查询学生信息,如学生信息不存在 则给出提示。d. 学生信息修改模块:查找到要修改的学生信息后,可对该学生的信息进行逐项修 改。e. 学生信息删除模块:查找到要删除的学生信息后,可对其进行删除操作。f. 学生信息插入模块:在数据库末尾插入学生信息,逐项输入要插入的学生信息即 可。g. 学生信息输出模块:输出优秀学生信息模块能够输出优秀学生(平均成绩大于等90 分)的学号和姓名;输出不及格学

6、生信息模块能够输出不及格学生的相关信息。h. 课程成绩统计模块:可以得到每门课程的平均成绩,还可以任意抽取一门课按单 科成绩排定学生名次。五、 程序设计思想结构化的程序设计主要靠设计和调用各模块的函数来实现。本程序设计了多个 函数,每个函数自身能完成一个任务,有的函数和别的函数结合能完成更大的任务。 每一个模块功能的实现其实就是对函数的调用,本说明首先介绍本程序所涉及的子 函数,再介绍主函数,最后介绍程序整体的实现过程。1.void Inputfun() 此函数较特别,它只进行输入操作,但由于此函数所包含的语 句较长且需要被其他三个函数使用,为方便调用单写了一个函数。此函数在源程序 中放在最前

7、,所以在此先作说明。此函数可细分为11 个小块,用来输入学生的基本 数据。每小块的结构基本相同即for(;)基本语句 +一个 continue 语句+基本语句+ -个 break语句之所以用这个结构为了使输入的数据更加正规。比如在分数的输入 中就限定了只能输入 0 至 100 之间的数值,这也符合分数录入规则。需要特别注意 的是,这个函数完成了本程序中要做的两个计算。其-是在每门课的考试试成绩输 入后完成了对这门课的综合成绩的加权计算(考试成绩 *0.7+平时成绩*0.3);其二 是在最后-门课程的综合成绩算出后,计算了该学生四门课的平均成绩。2.void Getinformation() 此

8、函数用来录入学生信息。它调用了 void Inputfun() 函数,其实它的主体部分就是void Inputfun()函数。这函数还用了一个for循环以 达到循环输入的目的。3.int Searchbynum (int no)int Searchbyname (char na50) 这是两个“兄弟 函数”,是按学号查找和按姓名查询模块中的两个重要函数。主要功能是根据用户 输入的学号姓名返回改学生所在的的数组下标。利用 for 循环嵌套-个 if 语句实 现,若找到学生该学生信息就返回数组下标,若找不到就返回-1。4. void Seekinformation()void Printinfor

9、mation(int x) 这两个函数关系紧密, 所以一起介绍。void Seekinformation()函数利用for循环和if语句使查找中能够 使用学号和姓名两种方式。如源程序所示,在用if语句确定了查找方式后先后调用 了 int Searchbynum (int no)int Searchbyname (char na50) 和 void Printinformation(int x) 两 个 函 数 , 根 据 int Searchbynum (int no)int Searchbyname (char na50)返回的数组下标,运用 void Printinformation(in

10、t x) 输出所查询的内容。所以int Searchbynum (int no)int Searchbyname (char na50)void Seekinforma tion()void Prin tinforma tion(in t x)这四个函数是查询模块的四个 联系紧密的重要函数,在它们的共同作用下查询模块的功能得以实现。5. void Modifyinformation() 此函数用于修改学生信息。基本原理就是用输入的新 数据覆盖原来的老数据,达到修改的目的。本函数还调用了查找模块的函数,使修改前能按学号或姓名找到要修改的学生信息。修改过程中调用了 Inputfun()函数6. v

11、oid Deleteinformation() 此函数用于删除学生信息。同样调用了查找模块的函 数。删除模块的关键语句是 for (i二x;i999;i+) studenti=studenti+1;从要 删除的那一个数据开始,用后一个数据覆盖它,一直循环到最后,相当于把开始的 第一个数据删除了。7. void Insertinformaton() 此函数用于插入学生数据。由于没有用链表,所以选 择插入在最后一个有效数据之后。本函数运用if(studentj.num=0)这个语句找到 了最后一个有效数据之后的数组下标j,然后将数据输入到studentj中,便完成的 了插入。插入过程中,调用了 I

12、nputfun()函数。8. void Showthefail() 此函数用于显示不及格学生的信息。能够按要求输出不及格 学生的学号、姓名、各科成绩以及平均成绩。首先用这条if语句搜索该学生是否有 成绩不及格,当四门课中至少有一门不及格时会输出该学生的相关信息。9. void Stu_p()此函数用于输出优秀学生(平均成绩大于90分)的信息,利用for 循环和条件判断句输出找出相应的学生输出相关信息。10v oid Chengji tongjiO此函数用于按要求统计成绩。有分别统计每门课的平均成 绩的功能;还能够按每门课程的成绩对学生进行排序,使学生在该门课的表现一目 了然。排序中用到了冒泡排

13、序的方法。9void main() 下面对主函数作简要说明。 Switch 语句是函数的主体:swi tch(c)/*利用switch语句集成各个功能函数*/case 1 : Geti nforma ti on();break;/*获得学生信息 */case 2 : Seekinforma tion();break;/* 查找学生信息 */case 3 : Modifyinforma tion();break;/* 修改学生信息 */case:Dele teinforma tion();break;/* 删除学生信息*/case:Inser tinforma ton();break;/*插入学

14、牛信息 *casecase:Show thefail();break;/*显示不及格学生信息*/:Stu _p();break;/*显示优秀学生信息*/casecase:exi t(0);/* 退出 */:Chengji to ngji();break;/*果程成绩的统计 */default: break; default: break;通过一个数值输入函数,使用户在简单的数值输入后就可轻松调用各模块。还使用了 for (;)使各模块能够循环调用。11.最后对程序的整体实现过程作个简要说明。源程序中多处运用continue和break 语句,同时配合scanf函数和if条件判断语句,使用户能够根据提示通过简单的数值输入来选择下一步该做什么。中文界面,用户很容易根据提示上手,简单易用。六、程序流程Yc=1?Yc=3?c=4?YNYc=6?c=2?N-c=5?开始 系统启动口令输入a=N进入选择菜单录入学生信息查找学生信息删除学生信息修改学生信息/ 口令错误,系/ 统即将关闭!现分别画出八个模块的流程图:1、录入学生成绩:3、修改学生信息1调用查找函数找到要修改的信息是否继续?继续按1,结束按0信息4、删除学生信息:11优秀学生信息:6、开始

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号