C语言知识生信息管理计划系统程序与报告

上传人:新*** 文档编号:101782478 上传时间:2019-09-29 格式:DOC 页数:57 大小:308KB
返回 下载 相关 举报
C语言知识生信息管理计划系统程序与报告_第1页
第1页 / 共57页
C语言知识生信息管理计划系统程序与报告_第2页
第2页 / 共57页
C语言知识生信息管理计划系统程序与报告_第3页
第3页 / 共57页
C语言知识生信息管理计划系统程序与报告_第4页
第4页 / 共57页
C语言知识生信息管理计划系统程序与报告_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《C语言知识生信息管理计划系统程序与报告》由会员分享,可在线阅读,更多相关《C语言知识生信息管理计划系统程序与报告(57页珍藏版)》请在金锄头文库上搜索。

1、-+C程序课程设计学生成绩管理系统的设计与运行 姓 名:_ 学号:_ 院(系):地空学院 专业:地球信息科学 指导教师: 职称: 评 阅 人: 职称: 2012 年 1 月目 录第一章 程序设计课题:学生信息管理系统 (1) 1.1程序设计题目(1)1.2程序设计要求(1)第二章 学生信息管理系统内容及结构 (1) 2.1结构和流程图部分(1) 第三章 学生信息管理系统运行示例 (7)3.1运行结果截图展示(7)第四章 程序设计实习感想 (17)附录 源代码和注释(18)参考文献 (46)-+第一章 程序设计课题:学生信息管理系统1.1 程序设计题目课程设计题目:学生信息管理系统设计通过学生信

2、息管理系统项目的实际编程操作训练,让同学们掌握对实际工程项目的开发与设计的基本方法与步骤,掌握结构体数组、分支结构、循环结构、顺序结构程序设计、函数调用的思想,在日后的工作和学习中能够更加熟练地运用所学的知识。 提高学生们的实际操作能力。1.2 程序设计要求界面要求:有简单操作界面, 用户可以通过数字选择不同的功能. 功能要求:(1) 录入成绩.(建立链表,每个结点包括:)(2)学生信息包括学号、姓名、数学、物理、英语、计算机、总分。(2) 输出成绩.(链表的输出)(4)排序信息(可以按学号排序、按总分排序) (5)查找成绩.(按学号或姓名查找结点)(6)删除信息(按学号或者姓名删除结点)(7

3、)添加信息(按学号顺序插入结点,) (8)保存到文件, 以及从文件中读出.第二章 学生信息管理系统内容及结构2.1 结构和流程图部分本系统在编辑过程中一共定义了28个函数以实现菜单、输入数据,查询信息,删除信息,修改信息,阅读信息,排序和文件处理八个主要的功能,各个不同的功能的函数的调用通过一个main()主函数和四个其他的菜单函数实现功能的选择和切换。各个部分详细如下:进入主目录进入学生信息管理系统开始输入学生信息从原文件中录入学生信息显示学生的信息退出系统是否编辑信息是否返回目录查询学生信息删除该生补充学生信息在列表中插入在列表末补充返回目录排序学生信息按学号排序按年龄排序按单科成绩排序按

4、总分排序显示学生信息返回主目录是否保存退出否保存信息是全部系统流程图1.输入部分:在编辑程序之处,根据程序的基本要求能够录入学生的学号、姓名、年龄、数学、物理、英语、计算机四门成绩,同时还考虑到在后期的数据处理中需要计算和显示出每一个学生的总分成绩并建立结点以链表的形式存入电脑中,所以在开始的结构体中我定义了一个long int型num变量存入学号,一个字符数组name存入学生姓名,一个整形age,五个浮点型和为了构建链表用于指向下一个结点地址的struct student型指针变量,student型结构体在全部的系统中都会被引用,所以定义为全局变量。同时定义一个整形变量n作为计数器用于计算总

5、共的学生数目,其中n会在插入函数,查询函数和删除函数中作为循环的总次数多次使用。Head10101成绩next10103成绩NULLP1P2n=2在输入函数中先定义了一个结构体型指针head,作为建立链表的首地址,同时也作为creat函数的返回值,是实现其他的函数在创建链表中实现各种功能的地址。在输入数据过程中,默认学号不为零,采用ifelse进行判断,如果学号的值扫描为0则终止输入,返回主菜单,不为一使用malloc创建新的结点,由已经定义的指针p1指向,根据p1对结构体进行赋值,赋值完毕后已定义的指针p2此时指向该节点的上一个结点,把p1所指向的新地址赋给上一个结点的next,使链表各结点

6、间相联系,建立保存有学生信息的链表,每输入一次,整形变量n自增,计数学生。开辟一个新结点是p1、p2指向新结点读入一个数据给p1指向的结点P1-num=0n=n+1n=1Head=p1P2-nexy=p1p2=p1尾结点是NULL,退出真假真假输入函数流程图2.输出部分输出函数定义为无返回值(void)型,首先把所需输出链表的首地址head传递给输出函数的形参,定义一个dowhile循环,判断循环条件是next的地址不为NULL,把首地址head复制给指针p1,通过printf输出每一个结点信息,p1再根据next中存放的地址指向下一个结点输出,当读入最后一个结点时,next为空,循环终止,函

7、数结束。P=headP指向尾结点输出结点P=p-next退出假真输出函数流程图输出函数仅输出链表内容,不作修改,其他也无功能。3.排序部分在本系统中排序功能部分一共定义了7函数sort个以实现从学号到年龄以及单科成绩和总分的不同排序方式。以按学号排序为例。在排序中使用了冒泡法排序,根据冒泡法原理,当p2-num大于p1-num时,数据交换,但因为结构体不是数组,需要从学号,姓名到成绩的全部交换,所以在函数开始定义了一个swap交换函数,并在swap函数中定义了一个struct student类型的形参作为中间变量,以交换比较的两个结点的值,swap用于嵌套在sort函数中实现排序功能,然后把p

8、1的地址赋给p2,p1指向下一个结点再次比较,当p1指向最后一个结点,重新把head赋给p1和p2,循环n-1次后实现排序。排序结束之后,所有学生的顺序按照学号的升序排列,排列完后,返回所需排列的链表首地址,嵌套输出函数print输出结果。其他的排序函数原理与学号排序基本一致。在排序函数中改变了原来链表中的4.查询部分本系统为了使用方便同样定义了8个函数search以实现学号,姓名及各科成绩的查找。在查找中,首先把查找链表的首地址head传递进入search函数的形参,search函数中又定义了一个变量(根据不同的函数查找功能的不同而变化,如学好查找就定义long int型)函数search根

9、据首地址进行读取,用ifelse函数进行判断,如果head= =NULL则直接输出链表空置,请补充信息,其余状况才实现继续扫描。其实现过程实质是链表的遍历及按条件输出的结果。当结点的 num 成员与用户的输入值吻合时,则输出该结点的信息,否则则扫描下一个结点的信息,依次类推。当所有的结点均被扫描但仍未发现吻合的 num值时,会提示“不存在的信息”,并跳转到主菜单以实现重新操作。如果发现吻合的信息,用printf函数输出该结点的信息,即为我们所需要查找学生的信息,此时查找终止,返回主菜单。在查询函数中不改变原来连表内部保存的数值信息。5.补充信息部分在本系统中,补充信息包括在链表中间插入信息,和

10、在链表尾部补充信息两种方式,虽然两种函数不同的运行结果可以通过排序函数实现最终输出和保存结果一致,但是再补充信息过程中还是可以更方便的完成。在插入函数insert中首先定义两个指针,一个用于传递得到的需要插入数据的链表的首地址,另一个用于指向存放待插入信息变量的地址,如果首地址空置(即head= =NULL)则令首地址为p0=stud。函数内定义的指针首先根据num大小的排列顺序,把各个结点中的num与带插入信息stud中的num进行比较,当num小于stud.num时,p=p-next依次向后对比,直到stud.num介于前后的num元素大小之间时,新定义一个指针p0=stud,并把p0的地

11、址赋值给上一个结点的next成员,并把下一个节点的地址赋给p0-next,这样行的信息就成功的按照学好顺序插入了链表之中。插入函数一件改变了链表内部的储存信息,因此返回一个head值(如果原来的head= =NULL,则head值改变)用于其他的函数使用该链表。在链表尾部添加信息的函数定义为add,add函数的功能是在链表的末尾添加学生的信息结点,首先使用整形变量n的值读出学生总数,把n的值代入for的循环语句,使指针p指向已存在链表的最后一个结点,新建一个结点输入所需要添加的信息,把新结点地址赋给p-next,新结点的next暂时令其为NULL,直至需要再一次的添加结点时,循环以上过程,即可

12、在链表尾部加入新的信息结点。6.删除信息部分删除信息部分包括一个查询模块和一个执行删除函数,删除函数是根据学生的学号查询学生的信息进行删除操作,因此在删除之前如果不知道学号可以根据查询功能首先进行查询,得到具体的信息之后读取学号,进行删除。先定义指针p1根据链表的首地址进行扫描,如果首地址为空置,则输出“学生信息为空,请输入信息”,不为空置则把扫描过程放入一个while的循环之中,扫描结果和输入的结果不吻合p1根据p-next指向下一个的结点,如果一致则修改上一个结点的next地址使其指向下一个结点,跳过所删除的结点之后free(p),这样就成功的删除了该节点,是指在以后的排序、查询、阅读信息

13、中不再显示出来。P1=head链表为空num=p1-numP2=p1P1=p1-nextP1是删除结点P1是首结点Head=p1-nextP2-next=p1-next删除成功退出真假假真真假删除函数流程图9.文件处理部分:这一部分主要有读出函数(load)和保存函数(save)两个函数。Save() 函数可将链表信息写为文本文件保存在硬盘中,保存的文件名为file.txt 。load()函数可实现将以前保存的 file.txt 文件读出,并返回首地址head,根据返回值head(保存链表读入内存之后的首地址)代入其他的查询、删除、排序函数中进行其他的操作处理,实现信息的反复使用。10.菜单部分:菜单函数在本程序中是实现各个不同的功能的函数之间的反复调用,因此是实现系统运行的很重要的部分。在本系统中为了实现操作界面的简单化,一共设计了4个菜单函数,首先是主菜单函数,主菜单函数显示出了输入、读取文件、查询、删除、补充、输出、排序、退出、和保存文件九个个主要的功能。因为在设计函数时,为了让函数之间可以彼此调用,实现功能的模块化,我选择了每一个函数都返回所处理的链表的首地址,因此定义的是返回指针的函数,因此在主函数中定义了struct student型指针变量head用于接受每个函数返回的地址,同时定义一个新的整形变量用于录入使用者的选择,代入switch函数进行判断从而调用不同功能的

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

当前位置:首页 > 高等教育 > 专业基础教材

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