基于链表的学生成绩查询

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

目录一、题目名称、内容。二、解题的基本思路,三、设计方案,功能模块框图与程序流程图等。四、算法设计:算法描述、实现方法、详细流程图等。五、程序调试:调试过程与步骤,发现的问题,解决的办法等。六、测试:运行程序,输入测试数据,判断是否达到预期目的。测试数据要有典型意义,要注意临界值的选取,注意测试数据的广泛性和普适性。七、总结:收获与体会,有实际内容,忌空洞无物,忌千篇一律,400字左右。八、附录:源代码(含注释)。综合训练报告格式要求:纸张:A4,页边距:上下2.5CM、左:3CM、右:2.5CM;段落:所有正文段落采用首行缩进2字符,1.5倍行距,段落前后间距皆为0;源代码采用单倍行距,左缩进2字符字体:一级标题:三号黑体;二级标题:四号黑体;三级标题:小四黑体;正文部分:中文为小四宋体,英文为小四(14号)TimesNewRoman;代码:小五号TimesNew程序设计报告一、题目名称(基于链表的学生成绩查询系统)(第15组)先建立一个有三个学生的链表,每个结点包含:学号、姓名、3门考试成绩(英语、数学、计算机)。并将学生信息用文件保存,并可在电脑中直接查找并打开该文件。请设计一个学生成绩管理系统,该系统包括如下功能:1.添加学生信息2.按学号排序3.插入(输入一个学生的信息将它插入链表中,假定链表按学号有序);4.查找(输入一个学生学号,输出其各科成绩);5.删除(从链表中按输入的学号删除该学生);6.按姓名修改学生成绩7.按学号修改学生成绩8.保存学生信息9.显示不及格学生成绩10.退出二、解题的基本思路利用所学知识,理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主设计相结合的方法,开始执行这一任务。一开始,我反复读要求,看到每个学生信息包括了学号、姓名、英语成绩、数学成绩、计算机成绩等信息,我就想到了利用结构体来执来完成这项功能,把这些信息做为其成员,这样使用起这些数据就很方便。之后,了解了这个系统有多个功能,自然而然就想到了用函数调用来分布实现这些功能,这样就一目了然,功能很清晰,再加个注解,可以很好的帮助读者理解程序。然后,又深入研究每个函数怎样来完成其特定功能,最后完善程序,越优化越好。最后,做这样一个大的系统,必然要保存数据,保存数据文件是必不可少的,文件在我们日常的学习中用得不多,可以多翻翻书,查查资料。三、设计方案,功能模块框图与程序流程图等1、设计方案:通过主函数调用各个函数实现其功能,并逐步进行优化。2、本系统的功能模块如图所示:程序设计报告3、流程图如图所示:主函数主菜单界面按班级输出学生成绩按学号排序插入学生按学号查找按学号删除退出学生成绩查询系统按学号排序按学号查找按姓名修改保存学生信息退出结束菜单选择从文件中添加学生信息按姓名修改按学号修改输出不及格学生保存学生信息插入学生按学号删除按学号修改输出不及格程序设计报告4、主要功能模块:1)整个程序结构比较清晰,由一个主函数和多个子函数组成。主函数main()利用switch函数多种情况把各个子函数穿插使用在其中,构成了整个系统运行的主控模块。整个程序中包含了信息录入、按学号排序、信息输出、信息修改、信息插入、信息查找、信息删除、信息保存和安全退出等10大模块,分别蕴含了数据的输入、输出、插入、修改、查找、删除和保存功能,由各个子函数支撑其运行。其中,信息的查找可以从姓名查找和学号查找两个方向进行。而输出的信息也可分为处处全部学生信息和输出不及格学生信息两部分。整个程序大致上由以上几大模块构成,下面就分别进行细致具体的说明。2).功能模块描述:(1)主控模块:这是整个程序的灵魂部分,支撑着程序所有功能的选择和运行。每个模块都是通过主控模块所指向的,系统通过主控模块进入其他模块的运行。也就是说主控模块是整个系统的入口,然后由主控模块根据指令或特定条件通向相应的模块实现相应功能。(2)信息录入模块:录入学生信息,把所输入进去的学生信息以链表的形式建立,是其他模块的先决条件,否则其他模块会出现“这是一个空表”的提示。(3)信息输出模块:输出所有学生的信息,并且是按学号顺序输出的。(4)信息插入模块:在已输入了学生信息基础上插入其他学生的信息,即将数据插入到以建立的链表中。(5)信息修改模块:先找到要修改的学生的信息,然后构造一个修改界面,有供选择修改的各项信息。修改之后退出该界面。(6)信息查找模块可以根据学生学号查找,若表中没有该学生的信息会输出“没找到该生信息”提程序设计报告示说明。若找到会输出该生信息。(7)信息删除模块:按学号找到要删除的学生信息,并删除该生的全部信息。删除信息后会给予提示。(8)信息保存模块:将学生信息保存在指定的文件中。(9)输出不及格学生模块输出任意一门分数小于60的同学,并输出有几个同学不及格。(10)安全退出系统三、数据结构设计整个程序是建立一个链表,然后通过对链表的一系列操作,来完成整个程序的运行。定义函数来建立链表、输出链表,对链表进行插入操作、删除操作等等。本程序使用了结构体类型的数据结构,来包括学生的各种信息,既有层次感,又保证了能够定义所有变量,清晰明朗,其中定义的变量为全局变量。其他模块可直接使用已在此定义的变量。typedefstructSTUDENT{charstudentNumber[10];/*学生学号*/charstudentName[20];/*学生姓名*/charclassName[20];/*班级名称*/charyearName[20];/*学期名称*/floatmark1;/*英语成绩*/floatmark2;/*数学成绩*/floatmark3;/*计算机成绩*/structSTUDENT*next;}STUDENT;STUDENT*headLink;/*链表表头指针*/四、算法设计1、main()主函数算法说明主函数主要由switch函数构成。根据不同的选择指令,调用不同的子函数。(1)主控模块:运行后,首先出现一个学生信息管理系统主菜单,并输出各个功能的10编号。只要输入相应的功能号,就可以进入录入、输出、排序、插入、修改、删除、保存、按学号查找、列出不及格学生信息函数模块并可以安全退出系统。进入各模块后,按提示操作也可以返回主菜单来。程序设计报告/*主函数*/voidmain(){CreateHeadLink();ReadInfoFormFile();DesplayMenu();}函数功能:显示菜单,根据用户的输入完成相应的功能************************************/voidDesplayMenu(void){STUDENT*p;printf(*******************欢迎进入学生成绩查询系统***************\n\n);printf(----------------------请选择相应功能---------------\n\n);printf(|1按班级输出学生成绩单|\n);printf(|2按学号排序并输出成绩|\n);printf(|3插入学生|\n);printf(|4按学号查找学生|\n);printf(|5删除学生|\n);printf(|6按姓名修改学生成绩|\n);printf(|7按学号修改学生成绩|\n);printf(|8保存所有学生信息|\n);printf(|9显示不及格学生成绩|\n);printf(|10退出|\n\n);printf(**************************************************************\n\n\n);scanf(%d,&choose);/*取得用户的选择*/switch(choose){case1:OutputInformation();/*显示所有学生的信息*/break;case2:CompositorBystudentNumber();/*按学号排序*/break;case3:p=MallocNode();/*先申请一个结点*/GetInformation(p);/*要求用户输入信息到新结点中*/InsertOneNode(p);/*将新结点加到链表中*/break;case4:DesplayInfoBystudentNumber();break;case5:DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/break;case6:ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/break;case7:ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/程序设计报告break;case8:SaveLinkToFile();/*保存数据*/break;case9:DesplayMarkSegment();/*显示不及格的学生成绩*/break;case10:SaveLinkToFile();/*保存数据后再退出*/free(headLink);exit(1);break;default:break;}DesplayMenu();/*递归调用*/}(2)从文件中读取学生信息调用函数Readfoformfile(void),进入文件读取学生信息,若文件不存在,则显示“文件不存在”,若文件存在,则读取学生信息并输出。/************************************函数功能:从文件中读学生信息到链表中************************************/voidReadInfoFormFile(void){FILE*fp;STUDENT*p;fp=fopen(D://student.txt,r);if(!fp){printf(文件不存在\n);exit(0);}p=MallocNode();while(fscanf(fp,%s%s%s%f%f%f,p-studentNumber,p-studentName,p-className,&(p-mark1),&(p-mark2),&(p-mark3))0){InsertOneNode(p);p=MallocNode();}fclose(fp);}(3)按学号排序调用函数CompositorbyStudentNumber(void),根据学号大小排序,利用strcmp函数比较学号大小,借用中间变量exchange进行调换,最后按学号由小到大进行输出。/************************************函数功能:按学号排序程序设计报告************************************/voidCompositorBystudentNumber(void){STUDENTexchange,*r,*p,*q;r=headLink-next;if(r==NULL){printf(现在还没学生信息,请先输入学生信息\n);return;}while(r)/*两层while循环实现排序*/{p=r;q=r-next;while(q){if(strcmp(q-studentNumber,p-studentNumber)0){strcpy(exchange.studentNumber,q-studentNumber);/*先复制q结点信息到exchange*/strcpy(exchange.studentName,q-studentName);strcpy(exchange.className,q-className);exchange.mark1=q-mark1;exchange.mark2=q-mark2;exchange.mark3=q-mark3;strcpy(q-studentNumber,p-studentNumber);/*再复制p结点信息到q*/strcpy(q-studentName,p-studentName);strcp

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功