1、 目录目录 一、一、各功能模块程序流程图各功能模块程序流程图 2 2 二、 程序解析二、 程序解析 5 5 三、 调试分析三、 调试分析 7 7 四、设计体会四、设计体会 8 8 五、参考书目五、参考书目 9 9 六、 源代码六、 源代码 1010 一、各功能模块程序流程图:一、各功能模块程序流程图: (1)学生成绩管理系统总流程图(图 4.1) N Y 进入程序 打开保存文件 增加学生纪录 保存学生纪录 系统启动 进行查询,修改,统计等操作 退 出 系 统 (2)查询学生记录流程图(图 4.3) Y N N 2 入口 输入信息 指针为空 是目标记录 输入记录信息 到表尾? 结束 (3)学生记
2、录排序流程图(图 4.5) 4 入 口 打开文件 原表不为空 总分比较 排序点值小 排序点值大 表指针后移 排在首位 插入中间位置 到表尾? 记录名次 结 束 N Y N Y N Y (4)显示文件流程图(图 4.7) Y N 二、程序解析二、程序解析 1数据结构 链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。线形表的顺序存储 结构的特点是逻辑关系上相邻的两个元素物理位置上也相邻, 因此可以随机存取表中任一元 素。 链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。 链表的最大的优 点是对表的添加、删除、查找、排序等操作比较方便,因此采用链表来存储学生相关信息。 且对结
3、点的定义如下: typedef struct message_student /*结构体定义*/ 8 入口 结束 找到文件 显示学生信息 P 为空? char number6; char name20; char sex4; float subjectnumsubs; float score; float average; int index; studen 2 查询学生记录类 C 码算法: 函数说明:#include “stdio.h“ int findrecord(student stud) /*查找信息*/ 定义相关变量:char str2; int i,num; 如果没有保存文件:if
4、(numstus=0) 输出没有可被查找的记录:printf(“没有可被查找的记录n“); 返回函数:return -1; 否则,输出“按何种方式查询” :printf(“以何种方式查找?n1.学号t2.姓名t3.名 次n“); 选择 1,按学号查找: if(str0=1) /*按学号查找*/ 输出“请输入学号”:printf(“请输入学号:“); 进行 for 和 if 语句的循环,进行选择:for(i=0;inumstus) 输出“没有查找所要的信息”printf(“没有查找所要的信息。n“); 返回函数:return -1; 返回主函数:return i; 三、调试分析三、调试分析 错误
5、结果分析 在实验过程中, 我们遇到许多的问题, 但是在老师的指导下和同组成员的交流中得到了 解决。其中,主要的错误有主函数 mian()重复,缺少分号等。 主函数 main()重复(图 5.10) 缺少分号(图 5.11) 分号是 C 语句中不可缺少的一部分, 语句末尾必须有分号。 缺少或多加分号都会引起 错误,下面是对这两种情况的简单分析: (a)忘记加分号: a=1 b=2 编译时, 编译程序在“a=1”后面没发现分号, 就把下一行“b=2”也作为上一行语句的一部 分, 这就会出现语法错误。 改错时, 有时在被指出有错的一行中未发现错误, 就需要看一下, 上一行是否漏掉了分号。 z=x+y; t=z/100; printf(“%f“,t); 对于复合语句来说,最后一个语句中最后的分号不能忽略不写。 (b)多加分号: 对于一个复合语句,如: z=x+y; t=z/100; printf(“%f“,t); ; 复合语句的花括号后不应再加分号,否则将会画蛇添足。 以上这些错误是由于对于课本知识的不熟悉,本来不应该