1 Star 6 Fork 0

吴文益 / student-administration

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

程序设计报告

题目

学生成绩管理程序

代码及版本管理地址

gitee码云版本地址(点击跳转)

要求

本程序用于教学单位(院/系)的学生成绩管理。要求程序能够实现学生信息录入(可以实现增加、删除、修改学生的基本信息)、单科学习成绩的录入;班级内单科成绩排名;成绩查询:查询某个学生的各科成绩、统计所有不及格科目超过2科的学生名单。

设计思路

按照要求设计多种功能函数,并利用主函数实现功能,添加可视化操作提示。

数据结构

利用链式线性结构体Stu数据域存储学生信息,学生姓名、班级、年级、学生各科成绩为字符串型,学生编号为整型,指针域存储下一个指针地址。

流程图

图床链接过期

功能及函数介绍

链表操作函数
(1)尾插法
void AddItem(Stu *plist) ;//尾插添加结点:传入需要添加结点的数量和头指针,从头指针遍历到尾结点,并从尾结点开始用malloc函数添加结点,添加完后将尾结点的指针域指向NULL
(2)遍历结点
Stu *NextItem(Stu *plist) ;//传入当前结点,传出下一结点
(3)链表初始化
Stu *InitList(int num);//初始化链表:利用malloc函数创建头指针,并将头指针编号为0,将头指针指针域指向NULL,并向后添加num个结点,并返回头指针
(4)寻找结点
Stu *SearchItem(int num,Stu *phead);//寻找结点:传入头指针,返回编号为num的结点位置
功能函数
(1)输出所有学生信息
 void ShowItem(Stu *p_list,Stu *p_head);//传入指针,输出其数据域学生信息
(2) 初始化程序
void InitSys(Stu *p_head);//初始化学生系统后,管理员输入数据层
(3) 保存文件(二进制)
void SaveFile(Stu *p_head);//保存文件,用wb打开文件,并利用fwrite函数写入fwrite(1,2,3,4); 参数说明:1.要写入的数据的地址,2.一次要写多少字节,3.写多少次,4.写到哪里
(4) 学生总排名
int Sort(Stu *p_head,int n_ID,int n_subject) ;//院系总排名,传入头指针、学生编号、所要排名的数据类型,用SearchItem()函数检索该编号数据地址,并从头遍历链表到NULL,对每一个结点该数据值进行检索,遇到比被排序结点数值大时sum+1
(5)学生所在班级排名
 int ClassSort(Stu *p_head,int n_ID,int n_subject) ;//班级排名,传入头指针、学生编号、所要排名的数据类型,同(4)类似,只是判断了班级是否相等,利用了strcmp()库函数,包含了<string.h>头文件
(6)查找学生
 void Search(Stu *p_head,char *name);  //搜索学生信息,传入头指针,传入学生姓名,遍历链表,找到该学生(考虑了重名情况)
(7)删除学生信息
 void Del(Stu *p_head,int n_ID); //删除表,传入头指针,传入删除学生编号。用free()释放内存,包含头文件<stdlib>,并将前后结点相连,利用了SearchItem()函数找到3个结点地址
(8)将字符串转为double型
 double Strtodouble(char *str) ;//传入0-100的字符串返回double型函数,若传入其他字符串,则返回-1。主要用于符合成绩逻辑,利用了atof()函数,包含头文件<stdlib>
(9)添加学生
 void AddList(Stu *p_head) ;//尾部添加新同学
(10)修改学生信息
void Change(Stu *p_head);//修改学生信息,利用SearchItem()函数
(11)统计所有不及格科目超过2科的学生名单
void NoPass(Stu *p_head);//传入头指针,输出所有不及格科目超过2科的学生名单,从头开始遍历判断
(12)单科学习成绩的录入
void InputScore(Stu *start , Stu *end , Stu *p_head ,char *subject);//单科学习成绩录入,传入开始录入位置和结束录入位置,传入头指针 ,传入需要录入的学科
(13)保存文件(txt)
void Fprint(Stu *p_head);//将数据导出到当前路径下的StudentInformation.txt,导出为txt便于使用者阅读
(14)输出单个学生信息
void ShowItem(Stu *p_list,Stu *p_head) ;//传入结点地址,输出其数据域学生信息
(15)班级内单科成绩排名
void ClassSortOutput(Stu *p_head,char *str_class,int subject);//传入头指针,传入班级,传入学科 利用了桶排序思想
(16)插入学生
void Insert(Stu *p_head) ;//在中间插入一个表,找到前后结点,free()并将前中后结点关联,并将后续结点编号加一

功能测试

(1)存在数据文件时对数据读取并进入主菜单

图床链接过期

(2)不存在数据时初始化系统

图床链接过期

(3)学生菜单

图床链接过期

(4)管理员菜单(需输入密匙)

图床链接过期

(5)输出所有学生信息

图床链接过期

(6)查找学生

图床链接过期

(7)输出两门以上不及格学生名单

图床链接过期

(8)输出班级单科排名

图床链接过期

(9)添加学生

图床链接过期

(10)删除学生

图床链接过期

(11)修改学生信息

图床链接过期

(12)单科成绩录入

图床链接过期

(13)插入学生

图床链接过期

(14)保存为txt

图床链接过期

遇到的问题和异常处理方法

(1)对输入int型变量的控制:
if(scanf("%d",&num)!=1)  
{
printf("提示:你没有输入正确值,请重新输入:");
fflush(stdin);//while(getchar()!='\n'); 
}

能解决输入非int型变量时,程序崩溃问题

(2)对输入字符串的问题:

利用gets()函数输入,可以读入空格,防止缓冲区同时读入多个数据。

(3)
fflush(stdin);

读入int型等变量时会将换行符读入,利用这个函数可以将缓冲区换行符清除。Stdin指缓冲区

(4)对成绩判断问题:
while(Strtodouble(p_new->m_nMath) == -1)
{    
printf("提示:您的输入有问题(成绩为0-100的整数),请重新输入:"); 
gets(p_new->m_nMath);
}

利用Strtodouble函数对成绩输入判断,如果错误则重新输入

(5)对指针的判断:

遇到指针为NULL时,设置返回值,防止异常

MIT License Copyright (c) 2022 吴文益 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

学生管理系统(适合c语言入门学习) 展开 收起
C++ 等 4 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/wu_wen_yi/student-administration.git
git@gitee.com:wu_wen_yi/student-administration.git
wu_wen_yi
student-administration
student-administration
master

搜索帮助