141数据结构课设论文模板2.docx
- 文档编号:12845790
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:22
- 大小:121.71KB
141数据结构课设论文模板2.docx
《141数据结构课设论文模板2.docx》由会员分享,可在线阅读,更多相关《141数据结构课设论文模板2.docx(22页珍藏版)》请在冰点文库上搜索。
141数据结构课设论文模板2
数据结构
课程设计(论文)
树的综合操作
院(系)名称
电子与信息工程学院
专业班级
物联网141
学号
140408012
学生姓名
韩建杰
指导教师
贾丹副教授
起止时间:
2016.1.4—2016.1.15
课程设计(论文)任务及评语
院(系):
电子与信息工程学院教研室:
软件工程
学号
140408012
学生姓名
韩建杰
专业班级
物联网141
课程设计(论文)题目
学生成绩管理系统
课程设计(论文)任务
任务要求:
学生成绩管理系统实现以下几个功能:
(1)录入学生成绩信息并保存;(2可查询显示所有学生的个人信息;(3)可查询显示所有学生的所有课程信息;(4按学号或姓名查询成绩;(5)能添加、删除和修改学生的成绩信息;(6)按成绩高低排序输出所有学生成绩信息。
技术要求:
1、数据的逻辑结构采用线性结构,物理结构采用顺序存储结构。
2、软件能正常运行,界面清晰,操作要简单。
3、系统要有主界面设计,调用各个功能项。
4、采用ViscalC++编写代码,可读性强。
5、数据类型用typedef定义。
指导教师评语及成绩
平时成绩:
答辩成绩:
论文成绩:
总成绩:
指导教师签字:
年月日
注:
平时成绩占20%,答辩成绩占40%,论文成绩占40%。
摘要
学生成绩管理是通过输入、输出、添加、排序、查找、删除等活动,解决学生成绩等信息之间存在的相对应的关系的信息存储,以此方便对学生成绩等信息的管理,从而可以大量告诉的对学生信息进行操作。
随着社会的发展,快速便捷已成为主流,当学生数量特别大的时候,此程序可以快速执行查找或者录入操作者所需要的信息。
计算机信息管理技术的迅速发展恰恰解决了这个问题,它使计算机技术与现代管理技术相互配合,来更加准确、高速地完成学生成绩的管理,使学校老师和同学能够以最少的人员来完成更多的工作。
系统的开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
本系统使用ViscalC++进行前台界面和处理程序的开发,前者建立成数据一致性和完整性强、数据安全性好的数据库,而后者具有应用程序功能完备,易使用等特点。
关键词:
成绩管理;成绩查询;递归遍历
目录
第1章绪论1
1.1系统的开发背景1
1.2开发工具及语言1
第2章概要设计1
2.1总体模块划分1
2.2各模块的设计2
2.3数据结构的选择2
第3章系统详细设计与编码4
3.1完整的源程序4
3.2程序的输入和输出5
3.3调试程序中遇到的问题及解决方案6
第4章思考题解析7
4.1思考题的选择7
4.2类C算法7
4.3程序分析7
第5章总结8
参考文献9
第1章绪论
1.1系统的开发背景
随着电子科技的快速发展,我们的生活离不开网络,科学技术突飞猛进,特别是信息技术和网络技术的迅速发展的广泛应用,对社会的政治、经济、军事、文化等领域产生越来越深刻。
学生成绩管理系统教育中不可缺少的部分,无论是对学生还是老师,是非常重要的。
1.2开发工具及语言
本系统使用ViscalC++语言开发,主界面清晰显示所有功能项,使用简单。
各个功能项均定义一个函数来实现,在主函数中调用各个子函数实现不同的功能。
第2章概要设计
2.1总体模块划分
系统主要完成如下功能模块:
(1)录入学生信息并保存;
(2)可查询显示所有学生的个人信息;
(3)可查询显示所有学生的所学课程信息;
(4)按学号或姓名查询成绩信息;
(5)能添加、删除和修改学生的成绩信息;
(6)按成绩高低排序输出所有学生总成绩信息;
系统的功能模块图如图所示。
图2.1系统功能模块图
2.2各模块的设计
题目应实现的具体功能;(阐述各子模块的功能)
运行程序,首先出现的是系统的主界面,显示系统的各项功能,输入学生信息,输出学生信息,添加学生信息,查找学生信息,排序学生信息,修改学生信息,删除学生信息,用户输入相应的选择,然后程序进入对应的功能模块。
图2.2打印链表模块程序流程图
2.3数据结构的选择
系统数据的逻辑结构采用线性结构,物理结构采用顺序存储结构。
存储结构定义如下:
typedefstruct
{charsubject[20];
intscore;
}fen;
typedefstruct
{charxuehao[10];
charxingming[20];
intzongfen;
fenchengji[kechengshu];
}student;
第3章系统详细设计与编码
3.1完整的源程序
#include
#include
#definebiandongshu6
#definekechengshu1
#definexueshengshu2
intq=1;
typedefstruct
{charsubject[20];
intscore;
}fen;
typedefstruct
{charxuehao[10];
charxingming[20];
intzongfen;
fenchengji[kechengshu];
}student;
/*1shuru*/
voidinput(studentxuesheng[])
{inti,j;
printf("\nnowinput%dstudents'information!
",xueshengshu);
for(j=0;j {printf("\nxuehao: "); scanf("%s",xuesheng[j].xuehao); printf("xingming: "); scanf("%s",xuesheng[j].xingming); for(i=0;i {printf("kechengming: "); scanf("%s",xuesheng[j].chengji[i].subject); printf("fenshu: "); scanf("%d",&xuesheng[j].chengji[i].score); xuesheng[j].zongfen+=xuesheng[j].chengji[i].score; } } } /*2shuchu*/ voidprint(studentxuesheng[]) {inti,j=0; printf("\nxuehaoxingmingkechengmingfengshu"); while(j {printf("\n"); printf("%s%-12s",xuesheng[j].xuehao,xuesheng[j].xingming); for(i=0;i printf("\n%27s%d",xuesheng[j].chengji[i].subject,xuesheng[j].chengji[i].score); printf("zongfen: %d",xuesheng[j].zongfen); j++;}} /*3tianjia*/ voidadd(studentxuesheng[]) {inti=0,j,n,m=0; charch[20]; while(xuesheng[i].chengji[m].score) ++i; printf("\ninputtheaddstudent'sinformation! \n"); printf("\nxuehao: "); scanf("%s",ch); strcpy(xuesheng[i].xuehao,ch); printf("xingming: "); scanf("%s",xuesheng[i].xingming); for(j=0;j {printf("\nkemu: "); scanf("%s",ch); strcpy(xuesheng[i].chengji[j].subject,ch); printf("chengji: "); scanf("%d",&n); xuesheng[i].chengji[j].score=n; xuesheng[i].zongfen+=xuesheng[i].chengji[j].score; } q=q+1;} /*4xiugai*/ voidchange(studentxuesheng[],intm) {inti,j,x,n=1; chara[20]; if(xuesheng[m-1].xuehao) while(n) {printf("\nchoisethechangenumber: \n0-end;\n1-xuehao;\n2-xingming;\n3-chengjichu;\n"); scanf("%d",&n); switch(n) {case1: printf("\ninputthechangexuehao: "); scanf("%s",a); strcpy(xuesheng[m-1].xuehao,a);break; case2: printf("\ninputthechangexingming: "); scanf("%s",a); strcpy(xuesheng[m-1].xingming,a);break; case3: printf("\ninputthechangeorder(<=%d): ",kechengshu); scanf("%d",&i); printf("\n1-kechengming;\n2-fenshu;\n"); scanf("%d",&j); switch(j) {case1: printf("\ninputkechengming: "); scanf("%s",a); strcpy(xuesheng[m-1].chengji[i-1].subject,a);break; case2: printf("\ninputfenshu: "); scanf("%d",&j); xuesheng[m-1].zongfen=xuesheng[m-1].zongfen-xuesheng[m-1].chengji[i-1].score+j; xuesheng[m-1].che break;} break;} } } /*5paixu*/ voidpaixu(studentxuesheng[]) {inti,n=0,j; studentren; for(i=2;xuesheng[i].chengji[n].score;i++) if(xuesheng[i].zongfen {ren=xuesheng[i]; xuesheng[i]=xuesheng[i-1]; for(j=i-2;ren.zongfen xuesheng[j+1]=xuesheng[j]; xuesheng[j+1]=ren; } printf("\nthememberisorderly! "); } /*6chazhao*/ voidcheck(studentxuesheng[],chara[]) {inti=0,j=0; while(xuesheng[i].xuehao) {if(strcmp(xuesheng[i].xuehao,a)==0) {printf("\nxuehao: %sxingming: %s",xuesheng[i].xuehao,xuesheng[i].xingming); for(j=0;j printf("\nkemu: %schengji: %dzongfen: %d",xuesheng[i].chengji[j].subject,xuesheng[i].chengji[j].score,xuesheng[i].zongfen); } elseif(strcmp(xuesheng[i].xingming,a)==0) {printf("\nxuehao: %sxingming: %s",xuesheng[i].xuehao,xuesheng[i].xingming); for(j=0;j printf("\nkemu: %schengji: %dzongfen: %d",xuesheng[i].chengji[j].subject,xuesheng[i].chengji[j].score,xuesheng[i].zongfen); } if(! xuesheng[i].xuehao) printf("\nthestudentisnoexist! \n"); i++; }} /*7shanchu*/ voiddelet(studentxuesheng[],intm) {inti; i=m; ngji[i-1].score=j; if(! xuesheng[i].xuehao) printf("\nthestudentisnoexist! "); while(xuesheng[i].xuehao) {xuesheng[i-1]=xuesheng[i]; i=i+1; }q=q-1;} /*zhuhanshu*/ voidmain() {intm=1,n,x;chara[20]; studentxuesheng[xueshengshu+biandongshu]; while(m) {printf("ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ\n‖(0)--结束‖\n‖ (1)--输入‖\n‖ (2)--输出‖\n‖(3)--添加‖\n‖(4)--修改‖\n‖(5)--排序‖\n‖(6)--查找‖\n‖(7)--删除‖\nˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ"); scanf("%d",&m); switch(m) {case1: input(xuesheng);break; case2: print(xuesheng);break; case3: add(xuesheng);break; case4: printf("inputthechange'sorder: "); scanf("%d",&x); change(xuesheng,x);break; case5: paixu(xuesheng);break; case6: printf("inputthestudent'sxuehaoorxingming: "); scanf("%s",a); check(xuesheng,a);break; case7: printf("\ninputthedeletstudent'ssituation: "); scanf("%d",&n); delet(xuesheng,n);break; } }getchar();} 3.2程序的输入和输出 程序运行主界面: 图3.1主界面 图3.2学生成绩输入 图3.3学生成绩输出 3.3调试程序中遇到的问题及解决方案 问题: 删除学生信息功能不能实现。 在选择删除功能后不能将选择的学生信息删除,而总是删除其他信息? 解决方案: 出现这个问题肯定是数据覆盖出现了错误,也就是循环出现了错误,检查循环程序后发现,循环体内数据交换出现了错误,没有定义结构变量,重新定义结构体变量后解决问题。 第4章思考题解析 4.1思考题的选择 所选择的思考题: 编写一个算法,构造一棵哈夫曼树,并求出其带权路径长度。 4.2类C算法 #include #include usingnamespacestd; constintMaxValue=10000;//初始设定的权值最大值 constintMaxBit=4;//初始设定的最大编码位数 constintMaxN=10;//初始设定的最大结点个数 structHaffNode//哈夫曼树的结点结构 { intweight;//权值 intflag;//标记 intparent;//双亲结点下标 intleftChild;//左孩子下标 intrightChild;//右孩子下标 }; structCode//存放哈夫曼编码的数据元素结构 { intbit[MaxBit];//数组 intstart;//编码的起始下标 intweight;//字符的权值 }; voidHaffman(intweight[],intn,HaffNodehaffTree[]) //建立叶结点个数为n权值为weight的哈夫曼树haffTree { intj,m1,m2,x1,x2; //哈夫曼树haffTree初始化。 n个叶结点的哈夫曼树共有2n-1个结点 for(inti=0;i<2*n-1;i++) { if(i haffTree[i].weight=weight[i]; elsehaffTree[i].weight=0; haffTree[i].parent=0; haffTree[i].flag=0; haffTree[i].leftChild=-1; haffTree[i].rightChild=-1; } //构造哈夫曼树haffTree的n-1个非叶结点 for(inti=0;i { m1=m2=MaxValue; x1=x2=0; for(j=0;j { if(haffTree[j].weight { m2=m1; x2=x1; m1=haffTree[j].weight; x1=j; } else if(haffTree[j].weight { m2=haffTree[j].weight; x2=j; } } //将找出的两棵权值最小的子树合并为一棵子树 haffTree[x1].parent=n+i; haffTree[x2].parent=n+i; haffTree[x1].flag=1; haffTree[x2].flag=1; haffTree[n+i].weight=haffTree[x1].weight+haffTree[x2].weight; haffTree[n+i].leftChild=x1; haffTree[n+i].rightChild=x2; } } voidHaffmanCode(HaffNodehaffTree[],intn,CodehaffCode[]) //由n个结点的哈夫曼树haffTree构造哈夫曼编码haffCode { Code*cd=newCode; intchild,parent; //求n个叶结点的哈夫曼编码 for(inti=0;i { cd->start=n-1;//不等长编码的最后一位为n-1 cd->weight=haffTree[i].weight;//取得编码对应权值的字符 child=i; parent=haffTree[child].parent; //由叶结点向上直到根结点 while(parent! =0) { if(haffTree[parent].leftChild==child) cd->bit[cd->start]=0;//左孩子结点编码0 else cd->bit[cd->start]=1;//右孩子结点编码1 cd->start--; child=parent; parent=haffTree[child].parent; } //保存叶结点的编码和不等长编码的起始位 for(intj=cd->start+1;j haffCode[i].bit[j]=cd->bit[j]; haffCode[i].start=cd->start; haffCode[i].weight=cd->weight;//保存编码对应的权值 } } intmain() { inti,j,n=4; intweight[]={1,3,5,7}; HaffNode*myHaffTree=newHaffNode[2*n-1]; Code*myHaffCode=newCode[n]; if(n>MaxN) { cout<<"定义的n越界,修改MaxN! "< exit(0); } Haffman(weight,n,myHaffTree); HaffmanCode(myHaffTree,n,myHaffCode); //输出每个叶结点的哈夫曼编码 for(i=0;i { cout<<"Weight="< for(j=myHaffCode[i].start+1;j cout< cout< } return0; } 4.3程序分析 该程序的逻辑结构为集合,存储结构是链式存储结构。 在求集合A和集合B的并集时,先将集合A中的元素放入新生成的集合中,再与集合B中元素进行比较,把集合B中不与集合A中的元素放入新生成的集合中即可,所得新集合为集合A与集合B的交集。 在求集合A与集合B的交集时,将集合A与集合B中元素进行比较,相同元素放入新生成的集合中,所得新集合为集合A与集合B的交集。 第5章总结 紧张的两周数据结构实训很快就过去了,通过这两周的实践学习,不仅使我们巩固了以前的知识并在此基础上还对数据结构的特点和算法有了更深的了解,使我们在这门课程的实际应用上也有了一个提高。 通过两周的课
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 141 数据结构 论文 模板