# 学生成绩管理程序 **Repository Path**: XKD163/stu ## Basic Information - **Project Name**: 学生成绩管理程序 - **Description**: No description available - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-03 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #程序设计报告 **班级**:软件193 **学号**:2019082324 **姓名**:许开达 **题目**:学生成绩管理系统 **代码及版本管理地址**:https://gitee.com/XKD163/stu.git **要求**:本程序用于教学单位(院/系)的学生成绩管理。要求程序能够实现学生信息录入(可以实现增加、删除、修改学生的基本信息)、单科学习成绩的录入;班级内单科成绩排名;成绩查询:查询某个学生的各科成绩、统计所有不及格科目超过2科的学生名单; **设计思路**: 按照要求设计多种功能函数,并利用主函数实现功能,添加可视化操作提示。 **数据结构**: 利用链式线性结构体struct student的数据域来储存学生的姓名、性别、专业、班级、学号、英语成绩、高数成绩、C语言成绩、排名,平均分,其中姓名、性别、专业为字符型数组,班级、学号,排名,平均分为整形数,英语成绩、高数成绩、C语言成绩为双精度浮点型数,指针域用来存储下一个指针的地址。 **流程图**: ![流程图](https://images.gitee.com/uploads/images/2020/0318/172556_2f5fe82b_6511484.png "流程图.png") **所引用的功能介绍**: `void menu()`;//主菜单函数 `arrow* student_in(arrow* stu_head)`;//创建链表,新增一名学生 通过创建一个链表,输入一个学生作为头节点的数据,开始使用此程序 `void student_in_add(arrow* stu_head)`;//1新增一名学生成绩 新增一名学生的信息,通过在功能函数对地址进行操作从而完成对链表进行数据输入。 `void student_add(arrow* stu_head)`;//2录入学生单科成绩 此功能函数通过选择需要录入的科目,将所有该学生的指定一科统一录入,此函数结束 `void student_fin(arrow* stu_head)`;//3通过学生学号来查找学生信息 此功能函数是通过从键盘中输入的学号在stu_head中寻找相匹配的学号,同过遍历链表来寻找相符的学号,并罗列出该学生信息,此函数结束。 `arrow* student_del(arrow* stu_head)`;//4修改学生信息 此功能函数通过从键盘中输入的的学号在stu_head中寻找相匹配的学号,通过遍历链表来找出该学生的相关信息,在输入到成绩时,进行检测是否存在,不存在则提示未输入,存在则提供修改的选项,输入后进行修改,如果学号输入错误则提示该学号不存在,此函数结束。 `void student_rank(arrow* stu_head)`;//5对班学生成绩进行名单排列 此功能函数通过从键盘输入的专业和班级进行判断,专业不存在则提示不存在,然后结束,班级不存在则提示班级不存在,然后结束,先建立一个数组,通过遍历链表的方式把一个班的学生的成绩赋予给数组,后通过分数在链表中找到名字进行匹配,然后通过冒泡排序法进行输出,此函数结束。 `void student_sta(arrow* stu_head)`;//6统计不及格科目超过2科的学生名单 此功能函数通过遍历链表的方式搜查两科及以上不及格学生的名字并进行输出,进行了三次判断以免重复输出该学生的名字,此函数结束。 `void student_in_del(arrow* stu_head)`;//7删除学生 此功能函数通过学号来查找学生,遍历链表查找到该学生在链表中的位置后,将单链表的前一段与后一段相接,从而在需要删除的数据上断开,然后释放该内存,有一个检测学号是否存在的整数,函数开头会检测链表是否异常或是只有1人录入从而无法提供删除,此函数结束。 `arrow* student_change(arrow* stu_head)`;//9交换链表首尾学生信息 此功能函数通过操作链表指针交换链表首尾的学生 `void student_aver(arrow* stu_head)`;//10求学生平均成绩并从高到低进行排名‘ **部分函数展示:** **系统菜单页面**: ![程序菜单](https://images.gitee.com/uploads/images/2020/0318/172628_6cf3ba54_6511484.png "程序主页面.png") **新增一名学生** ![新增一名学生](https://images.gitee.com/uploads/images/2020/0318/172701_e254ff1e_6511484.png "输入学生.png") **单科成绩输入** ![单科成绩输入](https://images.gitee.com/uploads/images/2020/0318/172720_2bd2967c_6511484.png "成绩输入.png") **班级单科排名** ![班级单科排名](https://images.gitee.com/uploads/images/2020/0318/172741_6e4a66d5_6511484.png "班级单科排名.png") **查询学生** ![学生查询](https://images.gitee.com/uploads/images/2020/0318/172800_8b16f29c_6511484.png "学生查询.png") 补充: 功能函数中增加了一定防止冲突的检测步骤,例如防止同学号的学生出现,从而导致修改和查询学生功能出现问题,在求平均数时使用了强制转换,防止数字看起来过长而不美观,部分函数有链表的检测功能,在检测链表异常时会强制结束程序,但更加具体的防止冲突功能没有添加,缺少一些检测bug并进行修复的功能,再设计上还有所欠缺,部分代码过于冗长,导致整体并不是很美观。 总结: 这次的代码设计还是很不成熟,在各种算法的应用和了解上都有所不足,大量重复性高的代码没有修改到最为整洁,在思考方式上有那么些欠缺,通过这次的课程设计,我深刻认识到了自身所存在的不足,在此期间不断学习相关知识,解决各种程序上出现的疑难杂症,对我有着很大的启发,这次作业,使我受益匪浅。