C语言课程设计
精品文档---下载后可任意编辑 课程名称 C语言课程设计 课题名称 学生成绩管理 专 业 班 级 学 号 姓 名 指导老师 湖南工程学院 课 程 设 计 任 务 书 课程名称 C语言课程设计 课 题 学生成绩管理 专业班级 学生姓名 学 号 指导老师 审 批 任务书下达日期 任务完成日期 目录 一、 课程设计内容与主要功能 …………………….…….4 二、 课题分析 ……………………………………….…6 三、 主要功能的实现步骤 ………………………….……7 四、 程序测试…………………………………………….13 调试分析与结论…………………………………….21 五、 总结 ………………………………………………….22 六、 附件 …………………………………………………23 一、 课题设计内容与主要功能 程序设计内容 对一个班级的学生,每个学生有N门课程。该系统实现对班级成绩的录入、显示、删除、查找、添加、计算、修改、排序、保存等操作的管理。 设计思想 结构化程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据结构与处理这些数据结构具有同样的重要性。 数据结构 在本课题中,每个学生的成绩门数用先预先定义一个常数N表示。将学生的信息:学号、姓名、成绩、总分、平均分、名次。定义成如下的数据结构: #define N 3 typedef struct s1 { char no [11]; /*学号*/ char name[16]; /*姓名*/ int score[N]; /*成绩*/ float sum; /*总分*/ float average; /*平均分*/ int order; /*名次*/ struct s1 next;/*指向后继结点的指针*/ } (2)main()主函数 主函数是程序的入口,采纳模块化设计,主函数不宜复杂,功能尽量在各模块中实现。首先声明一些必要的变量,然后作一无限循环程序,循环体为一个开关语句,该语句的条件值是通过调用 主菜单函数得到的返回值,根据该值,调用相应的各功能函数,同时设置一个断点,即当返回值为一定条件时运行exit()函数结束程序,以免造成死循环。 menu_select()主菜单 制作一个单边框的窗口,窗口背景为蓝色,在窗口中显示光带主菜单,字体颜色为黄色,同时间标默认定位在第一项菜单上,用光标的上下移动即可选中所需选项,选中项背景不绿色,按回车键后进入相应的功能函数,而不必输入数,真正具有了窗口的特性,方便了操作。 利用函数bioskey()识别按了什么键,根据光标停留在窗口的行数换算成对应的菜单项,作为菜单函数的返回值。 init()初始化 初始化单链表。 enter()录入记录 输入学生信息,根据提示信息输入学号(字符串不超过10位)、姓名(字符串不超过15位)、三门课程成绩(整数0-100),每输入一个数就按一下回车键,进行下一个数的输入,当在输入学号首字符为@时结束输入,返回主函数。 list()显示所有记录 学生成绩信息录入好后,更频繁的操作是显示和查找记录,本函数实现学生信息的显示功能。 delete(); /*删除记录*/ 删除指定学号的学生记录。首先输入要删除学生记录的学号,输入后推断该学生是否存在,假如不存在,则输出没找到的提示信息;否则,显示找到的学生信息,按任意键后进行该学生信息的删除。 search(); /*查找记录*/ 根据学生姓名查找学生信息,假如查找成功,则显示信息,否则显示提示没找到的信息。 姓名是字符串,比较功能利用字符串比较函数strcmp()实现。 add(); /*添加记录*/ 添加记录函数的功能是将新的记录紧跟在原来所有信息记录的后面进行添加,添加一个学生后。 computer(); /*计算总分和均分*/ 该功能是计算所有学生成绩的总分和平均分。 void sort(); /*排序*/ 对于学生成绩的管理,一个很重要的运算是将学生根据分数由高到低排名,本函数实现根据总分排序功能, 最后根据排序后学生信息的排列顺序,将每个学生名次写入order的当中。 本程序利用数组和指针完成对学生成绩的动态管理,其基本功能模块图如图2-1所示。 主程序 初始化 输入 显示 删除 查找 添加 计算 排序 退出 图2-1基本功能模块 通过实现学生成绩管理,了解数据库管理的基本功能,掌握C语言中的数组、指针、函数(系统函数、自定义函数)等知识,是一个C语言知识的比较综合应用。 二、课题分析(分析课程设计项目的实现方法,并写出类声明与核心算法实现代码)。 该系统是一个简单的学生挡案管理系统,能够使学生了解到相应的信息。同时也减少了老师的工作量。整个系统除了主函数外,另外还有五个函数,实现五大功能:插入功能、显示功能、查找功能、修改功能、删除功能。该系统的插入功能可以每次可以任意插入一位学生的学生信息;显示功能可以任意显示一名或多名学生信息;查找功能分为学号查找和姓名查找两种查找方式;删除功能和修改功能进入这两个系统时可选择进行学号对比和姓名对比两种方式。该系统操作简单,这也利于管理人员进行实际的操作。 主要流程结构 学生成绩管理系统 成绩录入 成绩显示 成绩删除 成绩查找 成绩添加 成绩排序 退出系统 三、主要功能的实现步骤 输入记录函数 这是一个无参函数,用来执行第学生成绩记录的输入,函数结束后,带回一个指链表头的指针向r。将下一个学生的信息插在表头。N-S流程图如下: r=l;s=l->next; 指针 l->next 指向新开辟的单元 指针 l->next r是否为空 是否 输入学号num 输出strcmp(num,”0”)是否为0 内存是否 溢出 输入姓名 停止while(s) 输入输入成绩 返回p->data.grade; 菜单 ; p->data.ave=p->data.totle / 4; p->next=NULL; r->next=p; r=p; 显示记录函数 void Disp(link l) 这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。 算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。 N-S流程图如下: p=l->next,使指向第一个结点