您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 学生成绩管理系统《数据结构》课程设计
1系统需求说明书1.1系统软件界面介绍1.1系统界面介绍本系统的软件界卖弄是使用C语言编译生成的一个系统操作菜单。操作菜单界面总共有七个选项可以供用户操作选择,分别为策划给你记录入、成绩查询、成绩删除、成绩修改、成绩统计、成绩查询、显示所有信息、退出系统。菜单页面下方有可供用户选择操作项目的指令,当用户选择并输入0-6中的任意数字,系统便会进入相应的功能操作。如果出现错误操作,系统会给出输入错误请从新输入等提示或者自动跳出回到主菜单界面。1.2系统设计要求本系统设计要求使用C语言以及数据与结构的知识点对系统进行编译。要求学生熟练掌握数据结构的线性表和链表,以及C怨言的文件读一些操作,结构体、指针等知识点,并且学以致用,熟练应用。在处理数据时要求采用线性表存放成绩信息,结点的数据域可包括:班级、学号、姓名、课程名称、选课学期和成绩,程序退出时采用文件的形式永久保存成绩信息。1.3系统设计要求系统的设计主要从以下几大块进行设计体现:头文件的定义,包括数据结构中的函数头、结构体的定义,进行一个总体的规划布局。将与学生有关的个人信息如班级、学号、姓名等都定义为一个节点型的数据然后在创建链表和指向各个数据的节点。利用抽象数据类型将不同类型的数据进行管理!其次是主函数的定义和设计,主函数申请并创建一个链表,然后将系统所有的函数功能通过Switch条件语句进行统筹,从而实现对各个子函数的调用。并且通过文件读写将系统的数据保存到文件当中。最后便是系统中各个函数块的功能实现。在写子函数时必须统筹兼顾,考虑到各个方面。入系统类存的合理分配,如果内存一旦出错系统就回崩溃,信息就有可能出错。2系统的分析与设计2.1系统分析系统的主要工作流程图如下,当进入操作主菜单界面时,会有相应的不同的操作选项供用户选择,但操作完成后就晚会到系统主菜单。图2.1系统操作流程图2.2系统功能分析系统主要石油几大函数块来实现整个系统的功能。1)学生个人成绩信息录入主菜单Switch1成绩录入2成绩修改3删除成绩4成绩统计5成绩查询6显示信息7退出系统程序结束当用户选择第一项操作时,便进入学生成绩录入的函数。其流程图如下:图2.2成绩录入操作流程图2)学生成绩修改其流程图如下:图2.3成绩录入操作流程图3)学生成绩删除其流程图如下:图2.4成绩删除操作流程图4)学生成绩统计输入学号输入班级成绩录入输入姓名输入科目输入学期输入分数返回主菜单成绩修改输入要修改学生学号输入要修改分数返回主菜单成绩删除输入要删除学生学号删除返回主菜单其流程图如下:图2.5成绩统计操作流程图5)学生成绩查询其流程图如下:成绩删除统计方式1统计所有班级1统计某个班级输入查询班级返回主菜单成绩查询图2.6成绩统计操作流程图6)所有学生成绩信息显示其流程图如下:图2.7所有学生成绩和个人信息显示操作流程图3代码实现3.1创建结构体和链表解释1个人成绩查询2班级成绩查询输入查询班级返回主菜单输入查询学生学号查询方式成绩显示返回主菜单typedefstruct{charNumber[20];//学号charClass[20];//班级charName[20];//姓名charSubject[20];//科目intterm;//学期intScore;//分数}Node;//链表的定义typedefstruct{intcount;NodeStudent[MAX];}List;//线性表的定义typedefstruct{charClass[20];//班级名字intAcount;//班级优秀的人数intDcount;//班级不及格的人数intcount;//班级总人数}ClassInfor;创建一个链表,并定义数据对象;在创建线性表用来计数和存储信息。3.2学生成绩的录入代码解释voidInsert(List*L,ClassInfor*S)//成绩录入{charNumber[20];charClass[20];charName[20];charSubject[20];intTerm;intScore;inti,flag=0;printf(\n\t\t\t\t请输入学号:);scanf(%s,Number);getchar();if(strcmp(L-Student[L-count-1].Number,Number)0)//录入学号与最后学号进行比较{printf(\n\n\t\t\t不合法学号,学号应大于%s,L-Student[L-count-1].Number);return;}printf(\n\t\t\t\t请输入班级:);scanf(%s,Class);getchar();for(i=0;iClass_NUM;i++){if(strcmp(S[i].Class,Class)==0){S[i].count++;//该班级人数+1flag=1;break;}}if(flag==0){printf(\n\n\t\t\t\t请输入正确的班级\n);return;}printf(\n\t\t\t\t请输入姓名:);scanf(%s,Name);printf(\t\t\t);getchar();printf(\n\t\t\t\t请输入科目:);scanf(%s,Subject);printf(\n\t\t\t\t请输入学期:2\n);Term=2;printf(\n\t\t\t\t请输入分数:);scanf(%d,&Score);getchar();if(Score=90)//优秀人数+1S[i].Acount++;if(Score60)//不及格人数+1S[i].Dcount++;//寻找插入位置。与录入学生班级相同的排一块for(i=L-count;i=0;i--){if(strcmp(L-Student[i].Class,Class)==0){strcpy(L-Student[i+1].Number,Number);strcpy(L-Student[i+1].Class,Class);strcpy(L-Student[i+1].Name,Name);strcpy(L-Student[i+1].Subject,Subject);L-Student[i+1].term=Term;L-Student[i+1].Score=Score;L-count++;//所插入班级人数+1return;}elseL-Student[i+1]=L-Student[i];}}该函数实现了对学生成绩信息的录入。3.3学生成绩的修改代码解释oidChange(List*L,ClassInfor*S)//成绩修改{charNumber[20];//,Class[20];inti,flag=0;printf(\n\n\t\t\t请输入要修改学生的学号:);scanf(%s,Number);getchar();for(i=0;iMAX;i++)//找到要修改学生{if(strcmp(L-Student[i].Number,Number)==0)//通过比较输入的学号和文件当中存储的学号,然后通过链表访问到该学生。{flag=1;break;}}if(flag==0){printf(\n\n\t\t\t请输入正确的学号!\n);return;}//输出此人信息printf(\n\n\t\t\t班级:%s\n,L-Student[i].Class);printf(\n\n\t\t\t学号:%s\n,L-Student[i].Number);printf(\n\n\t\t\t姓名:%s\n,L-Student[i].Name);printf(\n\n\t\t\t学期:%d\n,L-Student[i].term);printf(\n\n\t\t\t课程:%d\n,L-Student[i].Subject);printf(\n\n\t\t\t分数:%d\n,L-Student[i].Score);printf(\n\n\t\t\t请输入修改数据结构后的分数:);scanf(%d,&L-Student[i].Score);getchar();}该函数块实现对学生信息的修改,通过了比较,然后由链表访问到。3.4学生信息的删除代码解释voidDelect(List*L,ClassInfor*S)//删除学生信息{charNumber[20];inti,j,flag=0;printf(\n\n\t);printf(\t\t\t请输入要删除的学号:);scanf(%s,Number);getchar();for(i=0;iL-count;i++){if(strcmp(L-Student[i].Number,Number)==0){flag=1;break;}}if(flag){for(j=0;jClass_NUM;j++){if(strcmp(S[j].Class,L-Student[i].Class)==0){S[i].count--;//该班级人数-1break;}}for(j=i;jL-count-i;j++)L-Student[j]=L-Student[j+1];L-count--;return;}printf(\t\t\t没有该学号的学生\n);}该函数通过链表访问实现了对学生信息的删除voidDisplay(List*L)//显示输出所有学生信息{intk;for(k=0;kL-count;k++){printf(\n);printf(班级:%s,L-Student[k].Class);printf(学号:%s,L-Student[k].Number);printf(姓名:%s,L-Student[k].Name);printf(学期:%d,L-Student[k].term);printf(课程:%s,L-Student[k].Subject);printf(分数:%d,L-Student[k].Score);printf(\n\n);}}该函数实现了对学生信息的输出。3.5学生成绩统计的代码解释voidSearch(List*L,ClassInfor*S)//统计函数块{intx;printf(\n\n\t\t\t1.统计所有班级\n);printf(\n\n\t\t\t2.统计某个班级\n);printf(\n\n\t\t\t);scanf(%d,&x);getchar();if(x==1)DisplayAll(L,S);//统计所有班级所有学生if(x==2)DisplayClass(L,S);//统计某个班级所有学生}该函数实现了对所有学生或者某个班级学生的优秀率和及格率进行统计并输出3.6学生成绩查询的代码解释voidFind(List*L,ClassInfor*S)//成绩查询函数块{intx;printf(\n\n\t\t\t1.个人成绩查询\n);printf(\n\n\t\t\t2.班级成绩查询\n);printf(\n\n\t\t\t请输入操作:);scanf(%d,&x);getchar();switch(x){case1:PersonalFind(L,S);//个人成绩查询break;case2:ClassFind(L,S);//班级成绩查询break;}}该函数实现了对学生信息的查询。3.7所有学生信息成绩显示的代码解释voidDisplay(List*L)//显示输出所有学生信息{intk;for(k=0;kL-count;k++){printf(\n);printf(班级:%s,L-Student[k].Class);printf(学号:%s,L-Student[k].Number);printf(姓名:%s,L-Student[k].Name);printf(学期:%d,L-Student[k].term);printf(课程:%s,L-Student[k].Subject);printf(
本文标题:学生成绩管理系统《数据结构》课程设计
链接地址:https://www.777doc.com/doc-6583806 .html