学生成绩管理系统《数据结构》课程设计.docx
- 文档编号:9898131
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:20
- 大小:456.25KB
学生成绩管理系统《数据结构》课程设计.docx
《学生成绩管理系统《数据结构》课程设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统《数据结构》课程设计.docx(20页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统《数据结构》课程设计
1系统需求说明书
1.1系统软件界面介绍
1.1系统界面介绍
本系统的软件界卖弄是使用C语言编译生成的一个系统操作菜单。
操作菜单界面总共有七个选项可以供用户操作选择,分别为策划给你记录入、成绩查询、成绩删除、成绩修改、成绩统计、成绩查询、显示所有信息、退出系统。
菜单页面下方有可供用户选择操作项目的指令,当用户选择并输入0-6中的任意数字,系统便会进入相应的功能操作。
如果出现错误操作,系统会给出输入错误请从新输入等提示或者自动跳出回到主菜单界面。
1.2系统设计要求
本系统设计要求使用C语言以及数据与结构的知识点对系统进行编译。
要求学生熟练掌握数据结构的线性表和链表,以及C怨言的文件读一些操作,结构体、指针等知识点,并且学以致用,熟练应用。
在处理数据时要求采用线性表存放成绩信息,结点的数据域可包括:
班级、学号、姓名、课程名称、选课学期和成绩,程序退出时采用文件的形式永久保存成绩信息。
1.3系统设计要求
系统的设计主要从以下几大块进行设计体现:
头文件的定义,包括数据结构中的函数头、结构体的定义,进行一个总体的规划布局。
将与学生有关的个人信息如班级、学号、姓名等都定义为一个节点型的数据然后在创建链表和指向各个数据的节点。
利用抽象数据类型将不同类型的数据进行管理!
其次是主函数的定义和设计,主函数申请并创建一个链表,然后将系统所有的函数功能通过Switch条件语句进行统筹,从而实现对各个子函数的调用。
并且通过文件读写将系统的数据保存到文件当中。
最后便是系统中各个函数块的功能实现。
在写子函数时必须统筹兼顾,考虑到各个方面。
入系统类存的合理分配,如果内存一旦出错系统就回崩溃,信息就有可能出错。
2系统的分析与设计
2.1系统分析
系统的主要工作流程图如下,当进入操作主菜单界面时,会有相应的不同的操作选项供用户选择,但操作完成后就晚会到系统主菜单。
图2.1系统操作流程图
2.2系统功能分析
系统主要石油几大函数块来实现整个系统的功能。
1)学生个人成绩信息录入
当用户选择第一项操作时,便进入学生成绩录入的函数。
其流程图如下:
图2.2成绩录入操作流程图
2)学生成绩修改
其流程图如下:
图2.3成绩录入操作流程图
3)学生成绩删除
其流程图如下:
图2.4成绩删除操作流程图
4)学生成绩统计
其流程图如下:
图2.5成绩统计操作流程图
5)学生成绩查询
其流程图如下:
图2.6成绩统计操作流程图
6)所有学生成绩信息显示
其流程图如下:
图2.7所有学生成绩和个人信息显示操作流程图
3代码实现
3.1创建结构体和链表解释
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;i { if(strcmp(S[i].Class,Class)==0) { S[i].count++;//该班级人数+1 flag=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)//优秀人数+1 S[i].Acount++; if(Score<60)//不及格人数+1 S[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++;//所插入班级人数+1 return; } else L->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;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;i { if(strcmp(L->Student[i].Number,Number)==0) { flag=1; break; } } if(flag) { for(j=0;j { if(strcmp(S[j].Class,L->Student[i].Class)==0) { S[i].count--;//该班级人数-1 break; } } for(j=i;j L->Student[j]=L->Student[j+1]; L->count--; return; } printf("\t\t\t没有该学号的学生\n"); } 该函数通过链表访问实现了对学生信息的删除 voidDisplay(List*L)//显示输出所有学生信息 { intk; for(k=0;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;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"); } } 该函数通过链表访问实现了对学生成绩的显示。 4系统功能实现 4.1系统功能主菜单界面实现 图4.1系统操作菜单主页面 4.2学生成绩录入界面实现 图4.2学生成绩录入操作界面 4.3学生成绩删除界面实现 图4.3学生信息的删除操作界面 4.4学生成绩统计界面实现 图4.4统计所有班级的优秀率和及格率操作界面 图4.5统计某个班级的优秀率和及格率 4.5学生成查询计界面实现 图4.6按学生个人成绩查询操作界面 图4.7按班级查询学生成绩操作界面 4.6所有学生个人信息成绩显示界面实现 图4.8所有学生个人信息成绩的显示 5系统使用说明书 1.成绩录入: 在本操作中,用户可以录入新添加的学生信息和成绩。 当用户退出系统时,系统会自动保存新添加的学生信息,并写入文件。 2.成绩修改: 在本操作中,用户可根据学生学号访问并修改学生成绩退出系统时总动保存修改后的学生成绩。 3.删除信息: 再此目录下,用户根据学号访问到要删除的学生,并删除其所有个人信息。 4.成绩统计: 在此操作中,用户可以根据提示分别统计所有班级所有学生和每个班级所有学生的优秀率和及格率。 5.成绩查询: 在此操作中,用户可根据某个学生的学号查询该学生的班级、科目、考试成绩等个人信息;也可以根据班级名称查询某个班级的所有学生的信息。 6.显示所有信息: 该操作会读取文件当中所存储的所有学生的个人信息,并输出到显示屏幕。 0.退出系统: 用户只要按0键便会退出操作系统。 6总结 两周时间的数据结构课程设计终于结束,在整个课程设计的过程当中,从前期两天的任务理解,思考大致框架和程序设计思路,然后后再通过查询相应的资料,上网搜寻一些相应的程序学习其设计的思路方法。 在准备充分后便开始进行代码编写,首先定义链表、结构体、主要功能的函数块等,将大的框架先准备完备,前期设计就算初步完成了。 接下来便是根据任务书题目当中的具体要求,一步一步实现具体的功能。 在这期间出现不少问题,有没有掌握到的知识,如对快速排序没有掌握,从而不知道该如何怎样快速显示出所有学生的信息;有因马虎大意而导致的小错误,如文本录入是学生信息数目没有录入够,而导致最终读取显示学生信息时出现乱码,死循环等;也有思考不够全面等造成的一系列困难。 但还是在经过一番思路整理,请教老师和同学自己困惑、不懂的地方,然后在一步步的修改和完善,一次次的调试和优化,从而实现所有的功能和要求,最终终于将程序顺利运行! 7参考文献 [1]吴伟民.结构(C语言版).大学出版社2000 [2]程杰.大话数据结构.清华大学出版社2011.6 [3]谭浩强.C程序设计(第三版).清华大学出版设2008 [4]苏仕华.数据结构课程设计.北京: 机械工业出版社2005 8致谢 历经两周的努力,一份关于学生成绩管理系统的数据结构课程设计任务终于完成了。 在整个设计过程当中,遇到很多不懂得问题和麻烦,但经过自己的努力,不懂的知识就下来自己上网搜索资料,查阅相关书籍,和向懂得同学请教,向老师询问寻求帮助,最终很多问题还是都逐个解决。 在此,我要感谢所有帮助我的同学和老师,感谢他们的细心讲解和耐心的指导,从而才使我能顺利的完成本次的课程设计。 在本次的课程设计当中,对数据结构有了更进一步的了解和掌握。 对自己在程序设计的思路和想法方面有了一定的收获,让自己学到不少东西。 再次衷心感谢所有帮助过我的老师和同学。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 学生 成绩管理系统 课程设计