数据结构课程设计报告学生成绩管理系统设计.docx
- 文档编号:20142022
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:39
- 大小:469.88KB
数据结构课程设计报告学生成绩管理系统设计.docx
《数据结构课程设计报告学生成绩管理系统设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告学生成绩管理系统设计.docx(39页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告学生成绩管理系统设计
广东某某学院
《数据结构课程设计》
题目:
学生成绩管理系统设计
学号:
姓名:
年级:
学院:
专业:
指导教师:
一、问题描述与需求分析
1.1问题描述
设计一个简单的学生成绩管理系统。
完成对学生成绩信息的建立、查找、插入、修改、删除等功能。
1.2需求分析
系统设计要求:
1、能录入任意条数据,以方便教室录入多条学生成绩,提高教室工作效率,输入的内容包括学号,姓名,数学,英语,c语言成绩。
2、能比较迅速的查询挂科学生信息,合格学生信息,方便老师统计教学结果,且可以通过名字查询学生的信息,并输出该学生是否挂科的信息。
3、能快速准确删除不需要的学生信息,在删除前给出现有数据,可让教师直观了解要删除的数据的学号,删除后,输出删除结果并询问教师是否保存,以免误删。
4、能准确的修改学生的信息,在修改前输出现有数据,让教师直观了解需要修改的数据的学号,修改后,输出修改信息并询问是否保存,以免误删。
5、能够保存输入的数据,下次进入系统时不需要重新输入数据。
6、能够快速准确插入学生信息,并在插入前后输出表格对照。
7、学生也可以查询自己的成绩,但不拥有修改数据的权限。
二、数据结构的设计
2.1数据结构的选择
课程设计题目要求完成对学生成绩信息的建立、查找、插入、修改、删除等功能,自然而然的,我想到可以用单链表的结构,通过编写相应的功能函数来实现建立,删除,修改,输出,查找,保存节点数据域的内容来满足课程设计题目的要求。
2.2单链表定义和创建
先定义单链表节点的数据域,包括学号、姓名、数学、英语、c语言成绩等信息和链表结点,然后再创建表头以及新建链表数据。
以下为单链表相关定义:
structstu//定义节点数据结构
{
intdata;//学号
charname[20];//姓名
floatmath;//数学成绩
floateng;//英语成绩
floatc;//c语言成绩
stu*next;
};
三、软件模块结构图及程序流程图
3.1大体模块关系图
3.2程序流程图
注:
因流程图过长,上图中1->A,2->B,3->C,4->D,5->E,6->F,7->G,8->H间流程省略了,以下为1->A,2->B,3->C,4->D,5->E,6->F,7->G,8->H间详细流程图。
(2.3.4功能逻辑上相似,流程图大体上没太大区别)
1A
2B
3C
4D
5E
6F
7G
8H
四、运行界面及用户使用手册
4.1运行界面
输入账户密码后即可进入主菜单,
若不存在数据文件则需要先输入数据
输入数据即可
若存在文件数据则可以在加载界面加载后直接进入主菜单
主菜单界面
新建学生信息功能演示
学生信息插入功能演示
对原来数据按学号进行排序
将修改alice的学号为22
查找功能3查找学生信息并判断学生是否挂科
查找功能2输出合格的学生的信息
查找功能1输出挂科学生的信息
删除学生alice的信息
显示学生信息的界面
保存学生信息的界面
4.2测试数据
管理员账户root密码123456
学号姓名数学成绩英语成绩c语言成绩
26张三689536
11李四657585
16王五506418
21alice659585
4.3用户使用手册
本系统是学生成绩管理系统,该系统可以比较快速的新建,修改,删除,查询,保存,插入学生信息等多种功能。
进入本系统后,即可选择管理员登录和学生自查成绩功能,管理员登录后可在主菜单界面下输入相应的数字并按回车键执行相应子菜单的功能。
学生用户自查流程如下:
1.在登录界面输入2并按回车选择学生自查功能,随后输入你的名字或者同学的名字,即可查询成绩。
管理员使用流程如下:
1.在登录界面输入正确的管理员账号和密码,即可跳转至主界面,若之前未录入数据,则需要先录入数据,随后再进入主界面。
2.进入主菜单后,选择数字1-9表示的不同功能,1.新建学生信息,2.插入学生信息,3.修改学生信息,4.删除学生信息,5.查找学生信息,6.排序学生信息.7线上学生信息,8保存学生信息,9.退出系统。
3.选择功能后,按照子菜单提示进行操作,知道实现相关功能。
4.实现功能后可以重新选择功能,亦可直接退出系统。
五、心得体会
因为本次课程设计的题材和我上学期做的类似,所以这学期用单链表做起来非常的顺利,信心也很足,就是在文件保存数据的时候,对文件流函数的使用不太明白,和遇到一个文件流函数读取的小问题,所以在网上查询了很多相关的资料,对于fstream函数在循环语句时读到文件尾后多运行一次的问题也解决了。
通过这次实验,我加深了对c++这门语言的理解,对数据结构这门课的兴趣也提高了。
六、附录(源码)
#include
#include
#include
usingnamespacestd;
#defineNULL0
//author:
wulianyang
structstu//定义节点数据结构
{
intdata;
charname[20];
floatmath;
floateng;
floatc;
stu*next;
};
//声明函数
voidmenu(stu*h);
intout(stu*h);
voidsave(stu*h);
stu*create()//创建链表表头
{
stu*h;
h=newstu;
h->next=NULL;
returnh;
}
voidsetlst(stu*h)//新建链表数据
{
inti;
stu*p,*l;
p=h;
l=newstu;
while(p->next!
=NULL)
p=p->next;
p->next=l;
l->next=NULL;
cout<<"请输入学生的学号:
";
cin>>l->data;
cout< "; cin>>l->name; cout< "; cin>>l->math; cout< "; cin>>l->eng; cout< "; cin>>l->c; cout< "; cin>>i; if(i==1) setlst(h); menu(h); } voidinsertlst(stu*h)//插入链表中学生的数据 { system("cls"); cout< out(h); stu*p,*s,*l; p=h->next; s=h; floatdata; cout< "; cin>>data; while(p! =NULL&&p->data! =data) { s=p; p=p->next; } if(p==NULL) cout<<"不存在这个学生学号,回到主菜单。 "< elseif(p->data==data) { cout<<"请分别输入学生的学号,姓名和数学、英语、c语言成绩: "< l=newstu; cout<<"请输入学生的学号: "; cin>>l->data; cout< "; cin>>l->name; cout< "; cin>>l->math; cout< "; cin>>l->eng; cout< "; cin>>l->c; s->next=l; l->next=p; cout<<"修改成功! 修改结果为: "< out(h); } system("pause"); menu(h); } voiddellst(stu*h)//删除链表中学生的数据 { system("cls"); cout< out(h); stu*s,*p; floatdata; s=h; p=h->next; cout< "< cin>>data; while(p! =NULL&&p->data! =data) { s=p; p=p->next; } if(p==NULL) cout<<"不存在这个学号的学生! 返回主界面"< elseif(p->data==data) { s->next=p->next; delete(p); if(h->next! =NULL) { cout<<"删除成功! 删除结果为: "< out(h); } else cout<<"删除成功,返回主界面"< save(h); } system("pause"); menu(h); } voidrewrite(stu*h)//修改链表中学生的数据 { system("cls"); cout< out(h); stu*s; s=h; charname[20],q[4]; intdata; cout< <<"(按学号修改输入num/按姓名修改输入name)"< cin>>q; if(strcmp(q,"num")==0) { cout<<"请输入需要修改信息的学号"< cin>>data; while((s! =NULL)&&s->data! =data) s=s->next; if(s==NULL) cout<<"不存在这个学号的学生信息"; elseif(s->data==data) { cout<<"请分别输入学生的学号,姓名和数学、英语、c语言成绩: "< cout<<"请输入新的学生学号: "; cin>>s->data; cout< "; cin>>s->name; cout< "; cin>>s->math; cout< "; cin>>s->eng; cout< "; cin>>s->c; cout< "< out(h); save(h); } } elseif(strcmp(q,"name")==0) { cout<<"请输入学生姓名"< cin>>name; while((s! =NULL)&&strcmp(s->name,name)) s=s->next; if(s==NULL) cout<<"不存在这个学生信息"; elseif(strcmp(s->name,name)==0) { cout<<"请分别输入学生的学号,姓名和数学、英语、c语言成绩: "< cout<<"请输入学生的学号: "; cin>>s->data; cout< "; cin>>s->name; cout< "; cin>>s->math; cout< "; cin>>s->eng; cout< "; cin>>s->c; cout< "< out(h); save(h); } } else { cout< "< system("pause"); menu(h); } system("pause"); menu(h); } voidsearch(stu*h)//查找链表中学生的信息 { system("cls"); cout< cout<<"\t"<<"|--------------------------------------|"< cout<<"\t"<<"|---- (1)输出挂科学生的信息----|"< cout<<"\t"<<"|---- (2)输出合格学生的信息----|"< cout<<"\t"<<"|----(3)按姓名查找学生信息----|"< cout<<"\t"<<"|--------------------------------------|"< stu*s; charname[20]; inti; cout< "; cin>>i; switch(i) { case1: s=h->next; cout<<"挂科学生: "< <<"\t数学"<<"\t英语"<<"\tc语言"< while(s! =NULL) { if(s->math<60||s->eng<60||s->c<60) cout< < s=s->next; } break; case2: s=h->next; cout<<"合格学生: "< <<"\t数学"<<"\t英语"<<"\tc语言"< while(s! =NULL) { if(s->math>=60&&s->eng>=60&&s->c>=60) cout< < s=s->next; } break; case3: cout<<"请输入学生的姓名: "; cin>>name; s=h; while(s! =NULL&&strcmp(s->name,name)! =0) s=s->next; if(s==NULL) cout<<"不存在这个学号的学生! "; else { if(strcmp(s->name,name)==0) { cout<<"学号"<<"\t姓名"<<"\t数学"<<"\t英语"<<"\tc语言"< cout< < } if(s->math<60||s->eng<60||s->c<60) { cout< if(s->math<60) cout<<"[数学]"; if(s->eng<60) cout<<"[英语]"; if(s->c<60) cout<<"[c语言]"; cout<<"的成绩挂科了! "< } else cout<<"很好,该学生没有挂科! "< } break; default: cout<<"无效数字! 返回菜单。 "< break; } system("pause"); menu(h); } voidswap(float&a,float&b)//交换ab数据 { floatc; c=b; b=a; a=c; } voidsort(stu*h)//冒泡法排序学生信息 { system("cls"); cout< charname[20]; intflag=0; stu*s,*j; for(s=h;s! =NULL;s=s->next) { flag=0; for(j=h;j->next! =NULL;j=j->next) if(j->data>j->next->data) { strcpy(name,j->next->name); strcpy(j->next->name,j->name); strcpy(j->name,name); swap(j->data,j->next->data); swap(j->c,j->next->c); swap(j->math,j->next->math); swap(j->eng,j->next->eng); flag=1; } if(flag==0) break; } cout<<"排序成功! 排序结果为: "< out(h); save(h); system("pause"); menu(h); } voidsave(stu*h)//保存链表中学生信息 { chara; cout<<"是否保存? (y保存/n不保存)"< cin>>a; if(a=='n') cout<<"选择不保存,返回菜单"< elseif(a=='y') { stu*s=h->next; fstreamfp; fp.open("E: \\stu.txt",ios: : out); if(! fp)//判断是否为空 { cout<<"文件不存在! "< exit(0); } else { while(s! =NULL) { fp< <<''< s=s->next; } cout<<"保存成功! 返回菜单"< } fp.close(); } else cout<<"输入错误,返回菜单。 "< system("pause"); system("cls"); menu(h); } intout(stu*h)//显示链表中所有学生信息 { stu*s=NULL; s=h->next; if(s==NULL) { cout<<"学生信息不存在! "< } if(s! =NULL) cout<<"学号"<<"\t姓名"<<"\t数学"<<"\t英语"<<"\tc语言"< while(s! =NULL) { cout< < s=s->next; } re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 学生 成绩管理系统 设计