C语言课程设计-学生成绩管理系统说明书2*******************实践教学*******************兰州理工大学计算机与通信学院2021年春季学期计算机语言课程设计题目:学生成绩管理系统专业班级:姓名:学号:指导教师:成绩:目录1.内容摘要……………………1.2.前言…………………………1.3.系统分析……………………1.4.详细设计……………………2.5.系统测试……………………3.6.源程序代码…………………3.7.参考文献……………………15.一.内容摘要进一步加深、巩固学生所学专业课程(《C语言》)的基本理论知识,理论联系实际,进一步培养学生综合分析问题和解决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能,充分发挥广大同学的潜力,使他们通过本次课程设计而得到全面的锻炼。二.前言随着科学技术的不断发展,对人们的工作水平要求也越来越高,然而计算机就成了帮助人们解决这个问题的工具,熟练的运用计算机,它能为人们解决许多工作上的难题。对与一个管理人员来说,快而迅速的了解各种信息是很关键的。使用计算机在C语言环境下编写相关的管理系统就能达到对相关信息的录入、显示;对记录的查询极其修改等目的。同时,这个系统与*-*管理系统都有相似之处。基于同样的C语言环境,对其提供的头文件*h(stdio.h,stdlib.h,string.h,malloc.h,mem.h,ctype.h,conio.h等)的不同组合,能为我们解决许许多多的问题,因此,用它来编写成绩管理管理系统是可行的。三.系统分析(1).系统流程图四.详细设计1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu*p1)来实现此操作。2、查询模块:可用stu*lookdata(stu*p1)来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。3、插入模块:可用insert()函数来实现。其中通过学号的大小来比较的,并且以此来排序。4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage()、maverage()、eaverage()和comaverage()来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。五.系统测试问题一、学生初始信息模块:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu*p1)来实现此操作。当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。解决办法及步骤:1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错3、输出用于循环检查语句中的学生信息,发现乱码4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。问题二、查询模块:可用stu*lookdata(stu*p1)来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。解决办法及步骤:1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息六.源程序代码学生成绩管理系统---C语言课程设计2021-06-30*/#includestdio.h#includestdlib.h#includestring.hintshoudsave=0;//structstudent{charnum[8];//学号charname[20];charsex[2];intcgrade;intmgrade;integrade;inttotle;intave;charneartime[10];//最近更新时间};typedefstructnode{structstudentdata;structnode*next;}Node,*Link;voidmenu(){printf(********************************************************************************);printf(\t1输入学生资料\t\t\t\t\t2删除学生资料\n);printf(\t3查询学生资料\t\t\t\t\t4修改学生资料\n);printf(\t5显示学生资料\t\t\t\t\t6统计学生成绩\n);printf(\t7排序学生成绩\t\t\t\t\t8保存学生资料\n);printf(\t9获取帮助信息\t\t\t\t\t0退出系统\n);printf(********************************************************************************\n);}voidprintstart(){printf(-----------------------------------------------------------------------\n);}voidWrong()printf(\n=====提示:输入错误!\n);}voidNofind(){printf(\n=====提示:没有找到该学生!\n);}voidprintc()//本函数用于输出中文{printf(学号\t姓名性别英语成绩数学成绩C语言成绩总分平均分\n);}voidprinte(Node*p)//本函数用于输出英文{printf(%-12s%s\t%s\t%d\t%d\t%d\t%d\t%d\n,p-data.num,p-);}Node*Locate(Linkl,charfindmess[],charnameornum[])//该函数用于定位连表中符合要求的接点,并返回该指针{Node*r;if(strcmp(nameornum,num)==0)//按学号查询{r=l-next;while(r!=NULL){if(strcmp(r-data.num,findmess)==0)returnr;r=r-next;}}elseif(strcmp(nameornum,name)==0)//按姓名查询{r=l-next;while(r!=NULL){if(strcmp(r-)==0)returnr;r=r-next;}return0;}voidAdd(Linkl)//增加学生{Node*p,*r,*s;charnum[10];r=l;s=l-next;while(r-next!=NULL)r=r-next;//将指针置于最末尾while(1){printf(请你输入学号(以'0'返回上一级菜单:));scanf(%s,num);if(strcmp(num,0)==0)break;while(s){if(strcmp(s-data.num,num)==0){printf(=====提示:学号为'%s'的学生已经存在,若要修改请你选择'4修改'!\n,num);printstart();printc();printe(s);printstart();printf(\n);return;}s=s-next;}p=(Node*)malloc(sizeof(Node));strcpy(p-data.num,num);printf(请输入姓名:);scanf(%s,p-);getchar();printf(请输入性别:);scanf(%s,p-data.sex);getchar();printf(请输入c语言成绩:);scanf(%d,&p-data.cgrade);getchar();printf(请输入数学成绩:);scanf(%d,&p-data.mgrade);getchar();printf(请输入英语成绩:);scanf(%d,&p-data.egrade);getchar();p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade;p-data.ave=p-data.totle/3;//信息输入已经完成p-next=NULL;r-next=p;r=p;shoudsave=1;}}voidQur(Linkl)//查询学生{intsel;charfindmess[20];Node*p;if(!l-next){printf(\n=====提示:没有资料可以查询!\n);return;}printf(\n=====1按学号查找\n=====2按姓名查找\n);scanf(%d,&sel);if(sel==1)//学号{printf(请你输入要查找的学号:);scanf(%s,findmess);p=Locate(l,findmess,num);if(p){printf(\t\t\t\t查找结果\n);printstart();printc();printe(p);printstart();}elseNofind();}elseif(sel==2)//姓名{printf(请你输入要查找的姓名:);scanf(%s,findmess);p=Locate(l,findmess,name);if(p){printf(\t\t\t\t查找结果\n);printstart();printc();printe(p);printstart();}elseNofind();}elseWrong();}voidDel(Linkl)//删除{intsel;Node*p,*r;charfindmess[20];if(!l-next){printf(\n=====提示:没有资料可以删除!\n);return;}printf(\n=====1按学号删除\n=====2按姓名删除\n);scanf(%d,&sel);if(sel==1){printf(请你输入要删除的学号:);scanf(%s,findmess);p=Locate(l,findmess,num);if(p){r=l;while(r-next!=p)r=r-next;r-next=p-next;free(p);printf(\n=====提示:该学生已经成功删除!\n);shoudsave=1;}elseNofind();}elseif(sel==2){printf(请你输入要删除的姓名:);scanf(%s,findmess);p=Locate(l,findmess,name);if(p){r=l;while(r-next!=p)r=r-next;r-next=p-next;free(p);printf(\n=====提示:该学生已经成功删除!\n);shoudsave=1;}elseNofind();}elseWron