数据结构与算法课程设计学生成绩管理系统_第1页
数据结构与算法课程设计学生成绩管理系统_第2页
数据结构与算法课程设计学生成绩管理系统_第3页
数据结构与算法课程设计学生成绩管理系统_第4页
数据结构与算法课程设计学生成绩管理系统_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计说明书题目:数据结构与算法课程设计学院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:

课程设计(论文)任务及评语院(系):教研室:软件工程学号学生姓名专业班级课程设计(论文)题目数据结构与算法课程设计课程设计(论文)任务1.从十个题目中选择一个题目,,规定每个题目用标准的C语言程序实现,此外,完毕思考题一题,思考题须写出相应的类C算法即可。2.每个题目编写源程序时,规定有主菜单,每个子功能定义为相应的子函数,在主函数中调用各子函数,程序结构清楚。根据题目,选择合适的逻辑结构和存储结构。输入的数据由键盘输入。分析算法的时间复杂度,规定算法的效率尽也许高。验证排序算法的稳定性。指导教师评语及成绩成绩:指导教师签字:2023年月日目录第1章 课程设计目的与规定 11.1课程设计目的 11.2课程设计的实验环境 11.3课程设计的预备知识 11.4课程设计规定 1第2章课程设计内容 22.1题目的选择 22.2题目的具体实现 22.3思考题解析 12总结: 14参考文献 错误!未定义书签。课程设计目的与规定1.1课程设计目的本课程设计是计算机科学与技术专业、软件工程专业的专业技术实践课。本实践课的重要目的是:使学生学会运用在课堂中学过的理论知识,解决相应的实际问题,进一步理解和灵活掌握所学的内容,培养学生理论和实践相结合的能力,培养学生分析问题解决问题的能力。同时,在实验环节规范化、程序设计方法等方面受到比较系统和规范的训练。通过实践设计使学生进一步加深对程序设计的规范化及对复杂程序设计环节的理解。通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。通过课程设计,提高程序开发功能,能运用合理的控制流程编写清楚高效的程序。通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。通过课程设计,开发一个中小型系统,掌握系统研发全过程。通话课程设计,培养分析问题、解决实际问题的能力。1.2课程设计的实验环境PC机,WindowsXP,C++。1.3课程设计的预备知识C语言程序设计、数据结构。1.4课程设计规定(1)认真查找资料,分析每个题目应选择的数据结构(逻辑结构和物理结构);(2)准时到实验室调试程序,遵守实验室的规章制度,爱惜设备;(3)每个题目编写源程序时,每个子功能定义为相应的子函数,在主函数中调用各子函数,程序结构清楚,有必要的注释,可读性强。(4)程序健壮性强,当数据输入错误时,要进行相应的解决;(5)分析算法的时间复杂度,规定算法的效率尽也许高;(6)对于排序算法,要验证排序算法的稳定性。第2章课程设计内容2.1题目的选择6、学生成绩管理系统2.2题目的具体实现(1)题目应实现的具体功能;eq\o\ac(○,1)录入学生成绩信息并保存;eq\o\ac(○,2)可查询显示所有学生的个人信息;eq\o\ac(○,3)可查询显示所有学生的所学课程信息;eq\o\ac(○,4)按学号或姓名查询成绩信息;eq\o\ac(○,5)能添加、删除和修改学生的成绩信息;(2)题目所选择的数据结构及存储结构;采用线性数据结构及链式存储结构(3)完整的源程序#include<stdio.h>#include<stdlib.h>#include<string.h>structstud{longnum;charname[20];doublescore1,score2;};typedefstructstucode{structstudstudent;structstucode*next;}L;voidmenu();voidcreatelist(structstucode**r);voidout(structstucode*r);voidsearch1(structstucode*r);voidsearch2(structstucode*r);voiddel(structstucode**r);voidinsert(structstucode**r);voidchange(structstucode**r);voidmain(){charchoose;intflag=1;structstucode*r=NULL;while(flag){system("cls");menu();choose=getchar();switch(choose){case'1':createlist(&r);out(r);printf("Testingfunction1\nPressanykeytocontinue\n");getchar();getchar();break;case'2':search1(r);printf("Testingfunction1\nPressanykeytocontinue\n");getchar();getchar();break;case'3':search2(r);printf("Testingfunction1\nPressanykeytocontinue\n");getchar();getchar();break;case'4':del(&r);out(r);printf("Testingfunction1\nPressanykeytocontinue\n");getchar();getchar();break;case'5':insert(&r);out(r);printf("Testingfunction1\nPressanykeytocontinue\n");getchar();getchar();break;case'6':out(r);printf("Testingfunction1\nPressanykeytocontinue\n");getchar();getchar();break;case'7':change(&r);out(r);printf("Testingfunction1\nPressanykeytocontinue\n");getchar();getchar();break;case'0':flag=0;printf("Theend.\n");break;default:printf("\nWrongSelection!(选择错误,请重选!)\n");getchar();getchar();}}}voidcreatelist(structstucode**r){structstucode*p,*t;longn;chara[20];doubles1,s2;if(*r)*r=NULL;printf("\n请输入:\n学号姓名分数1分数2(若要结束请输入四个为零)\n");scanf("%ld%s%lf%lf",&n,a,&s1,&s2);if(n==0)return;p=(L*)malloc(sizeof(L));p->student.num=n;strcpy(p->,a);p->student.score1=s1;p->student.score2=s2;p->next=NULL;*r=p;scanf("%ld%s%lf%lf",&n,a,&s1,&s2);while(n){t=p;p=(L*)malloc(sizeof(L));p->student.num=n;strcpy(p->,a);p->student.score1=s1;p->student.score2=s2;p->next=NULL;t->next=p;scanf("%ld%s%lf%lf",&n,a,&s1,&s2);}}voidsearch1(structstucode*r){longx;structstucode*p=r;if(!r){printf("没有学生信息可查询!\n");return;}printf("请输入要查询的学生信息的学生学号:\n");scanf("%ld",&x);while(p&&p->student.num!=x)p=p->next;if(p==NULL)printf("Error!Nosuchstudent!\n");elseprintf("%ld%s%.2lf%.2lf\n",p->student.num,p->,p->student.score1,p->student.score2);}voidsearch2(structstucode*r){charm[20];if(!r){printf("没有学生信息可查询!\n");return;}printf("请输入要查询的学生信息的学生姓名:\n");scanf("%s",m);while(r&&strcmp(r->,m))r=r->next;if(r==NULL)printf("Error!Nosuchstudent!\n");elseprintf("%ld%s%.2lf%.2lf\n",r->student.num,r->,r->student.score1,r->student.score2);}voiddel(structstucode**r){longk;structstucode*p=*r,*t;if(!(*r)){printf("没有学生信息可删除!\n");return;}printf("请输入要删除的学生信息的学生学号:\n");scanf("%ld",&k);if(p->student.num==k)*r=(*r)->next,free(p);else{while(p->next&&p->next->student.num!=k)p=p->next;if(p->next==NULL)printf("Error!Nosuchstudent!\n");else{t=p->next;p->next=p->next->next;free(t);}}}voidinsert(structstucode**r){longn;chara[20];doubles1,s2;L*p,*t,*k;printf("请输入要插入的学生信息的学生学号姓名分数1分数2:\n");scanf("%ld%s%lf%lf",&n,a,&s1,&s2);p=(L*)malloc(sizeof(L));p->student.num=n;p->student.score1=s1;p->student.score2=s2;strcpy(p->,a);if(!(*r)){*r=p;(*r)->next=NULL;return;}if(p->student.num<(*r)->student.num)p->next=(*r),(*r)=p;else{t=*r;k=t;while(t->next&&t->next->student.num<=p->student.num)t=t->next;p->next=t->next;t->next=p;*r=k;}}voidout(structstucode*r){printf("\n\n");if(!r){printf("没有学生信息可输出!\n");return;}while(r){printf("%ld%s%.2lf%.2lf\n",r->student.num,r->,r->student.score1,r->student.score2);r=r->next;}printf("\n\n");}voidchange(structstucode**r){structstucode*p=*r;longx;longn;chara[20];doubles1,s2;printf("更改的学生的信息\n");printf("请输入要查询的学生信息的学生学号:\n");scanf("%ld",&x);while(p&&p->student.num!=x)p=p->next;if(p==NULL)printf("Error!Nosuchstudent!\n");elseprintf("%ld%s%.2lf%.2lf\n",p->student.num,p->,p->student.score1,p->student.score2);printf("请输入要修改的学生信息:\n");scanf("%ld%s%lf%lf",&n,a,&s1,&s2);p->student.num=n;strcpy(p->,a);p->student.score1=s1;p->student.score2=s2;}voidmenu(){printf("\n学生成绩管理系统\n");printf("\n菜单\n\n");printf("\n1建立链表\n");printf("\n2查找某学号的学生信息\n");printf("\n3查找某姓名的学生信息\n");printf("\n4删除某学号的学生信息\n");printf("\n5插入新的学生信息\n");printf("\n6显示所有学生的个人信息\n");printf("\n7更改学生个人信息\n");printf("\n0退出\n");printf("\n请选择您要执行的选项:\n");}(4)程序的输入和输出图1按学生学号查找结果:图2按学生姓名查找:图3删除某学生的运营结果:图4插入某学生的运营结果:图5显示所有学生的信息:图6(5)调试程序中碰到的问题及解决方案在调试search1子函数由于在查找中移动了原指针,导致search1中不能查找,解决方法设一结构体类型的指针,将原指针赋给该指针,将该指针进行移动查找。在调试chance()中,如何对已有的记录进行从新输入更改。解决方案为在chance()子函数中加入一个查找的程序,也就是说先找到要修改的学生信息,用scanf语句对要修改的学生的信息进行重新输入,再将所赋的信息通过赋值语句将修改后的学生信息赋给该学生相应的结构体。如何返回一个结构体中信息,解决方案是采用指针类型,将变量的地址作为实参赋给子函数。数组名代表数组首地址,用scanf语句赋值字符串时,不用加地址操作符。2.3思考题解析所选择的思考题: 编写一个算法,构造一棵哈夫曼树。程序如下:typedefstruct{ unsignedintweight; unsignedintparent,lchild,rchild;}HTNode,*HuffmanTree;typedefchar**HuffmanCodevoidHnffCodeding(HnffmanTree&HT,&HC,int*w,intn){ if(n<=1)return; m=2*n-1;HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));for(p=HT;i=1;i<=n;++i,++,++w)*p={*w,0,0,0};for(;i<=m;++i,++p)*p={*w,0,0,0};for(i=n+1;i<=m;++i){Select(HT,i-1,s1,s2);HT[s1].parent=i;HT[s2].parent=i;HT[i].lchild=s1;HT[i].rchild=s2;HT[i].weight=HT[s1].weight+HT[s2].weight;}HC=(HuffmanCode)malloc((n+1)*size(char*));cd=(char*)malloc(n*sizeof(char));cd[n-1]=0;for(i=1;i<=n;++i){ start=n-1; for(c=i;f=HT[i].parent;f!=0;c=f,f=HT[f].parent) if(HT[f].lchild==c)cd[--start]="0"; elsecd[--start]="1";HC[i]=(char*)malloc((n-start)*sizeof(char)); strcpy(HC[i],&cd[start]);}free(cd);}算法分析:哈夫曼树构造方法如下:根据给定的n个权值{W1,W2,…….Wn}构成n课二叉树的集合F={T1,T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论