《数据结构与算法课程设计学生成绩管理系统.pdf》由会员分享,可在线阅读,更多相关《数据结构与算法课程设计学生成绩管理系统.pdf(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计说明书 题目:数据结构与算法课程设计 学院(系):_ 专业班级:_ 学 号:_ 学生姓名:_ 指导教师:_ 教师职称:_ 起止时间:_ 学号 学生姓名 专业班级 课程设计(论文)题目 数据结构与算法课程设计 课程设计论文任务 1 从十个题目中选择一个题目,要求每个题目用标准的C语言程序实现,另外,完成思考题一题,思考题须写出相应的类 C算法即可。2 每个题目编写源程序时,要求有主菜单,每个子功能定义为相应的子函数,在 主函数中调用各子函数,程序结构清晰。3.根据题目,选择合适的逻辑结构和存储结构。4.输入的数据由键盘输入。5.分析算法的时间复杂度,要求算法的效率尽可能高。6.验证排序算
2、法的稳定性。院(系):课程设计(论文)任务及评语 教研室:软件工程 指导教师评语及成绩 成绩:指导教师签字:2012年 月 日 第1章课程设计目的与要求 5 1.1课程设计目的 _ 5 1.2课程设计的实验环境 _ 5 _ 1.3课程设计的预备知识 _ 5 _ 1.4课程设计要求 _ 6 第2章课程设计内容 _ 6 2.1题目的选择 _ 6 2.2题目的具体实现 _ 6 2.3思考题解析 _ 23 总结:_ 26 参考文献 _ 签。第 1 章 课程设计目的与要求 1.1课程设计目的 本课程设计是计算机科学与技术专业、软件工程专业的专业技术实践课。本实践课的主要目的是:使学生学会利用在课堂中学过
3、的理论知识,解决相应的实 际问题,深入理解和灵活掌握所学的内容,培养学生理论和实践相结合的能力,培养学 生分析问题解决问题的能力。同时,在实验步骤规范化、程序设计方法等方面受到比较 系统和规范的训练。通过实践设计使学生进一步加深对程序设计的规范化及对复杂程序 设计步骤的理解。通过课程设计,加深对数据结构这一课程所学内容的进一步理解 与巩固。通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设 计合理的模块化结构。通过课程设计,提高程序开发功能,能运用合理的控制流程编写 清晰高效的程序。通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统 联调通过。通过课程设计,开发一个
4、中小型系统,掌握系统研发全过程。通话课程设计,培养分析问题、解决实际问题的能力。1.2课程设计的实验环境 PC 机,WindowsXP,C+。1.3课程设计的预备知识 C语言程序设计、数据结构 1.4课程设计要求(1)认真查找资料,分析每个题目应选择的数据结构(逻辑结构和物理结构);(2)按时到实验室调试程序,遵守实验室的规章制度,爱护设备;(3)每个题目编写源程序时,每个子功能定义为相应的子函数,在主函数中调用各子 函数,程序结构清晰,有必要的注释,可读性强。(4)程序健壮性强,当数据输入错误时,要进行相应的处理;(5)分析算法的时间复杂度,要求算法的效率尽可能高;(6)对于排序算法,要验证
5、排序算法的稳定性。第 2 章课程设计内容 2.1题目的选择&学生成绩管理系统 2.2题目的具体实现(1)题目应实现的具体功能;录入学生成绩信息并保存;可查询显示所有学生的个人信息;可查询显示所有学生的所学课程信息;按学号或姓名查询成绩信息;能添加、删除和修改学生的成绩信息;(2)题目所选择的数据结构及存储结构;采用线性数据结构及链式存储结构(3)完整的源程序#i nclude#i nclude#i ncludevstri ng.h struct stud long num;char n ame20;double score1,score2;typedef struct stucode stru
6、ct stud stude nt;struct stucode*n ext;L;void menu();void createlist(struct stucode*r);void out(struct stucode*r);void search1(struct stucode*r);void search2(struct stucode*r);void del(struct stucode*r);void in sert(struct stucode*r);void cha nge(struct stucode*r);void mai n()char choose;int flag=1;s
7、truct stucode*r=NULL;while(flag)system(cls);menu();choose=getchar();switch(choose)case 1:createlist(&r);out(r);printf(Testing function 1nPress any key to continued);getchar();getchar();break;case 2:searchl(r);printf(Testing function 1nPress any key to continued);getchar();getchar();break;case 3:sear
8、ch2(r);printf(Testing function 1nPress any key to continued);getchar();getchar();break;case 4:del(&r);out(r);printf(Testing function 1nPress any key to continued);getchar();getchar();break;case 5:in sert(&r);out(r);prin tf(Test ing function 1n Press any key to con ti nuen”);getchar();getchar();break
9、;case 6:out(r);prin tf(Test ing function 1n Press any key to con ti nuen”);getchar();getchar();break;case 7:cha nge(&r);out(r);prin tf(Test ing function 1n Press any key to con ti nuen”);getchar();getchar();break;case O:flag=0;prin tf(The en d.n);break;default:printf(nWrong Selection!(选择错误请重选!)n);ge
10、tchar();void createlist(struct stucode*r)struct stucode*p,*t;long n;char a20;double s1,s2;if(*r)*r=NULL;printf(n请输入:n学号 分数1分数2(若要结束请输入四个为零)scan f(%ld%s%lf%lf,&n,a,&s1,&s2);if(n=0)retur n;p=(L*)malloc(sizeof(L);p-stude nt.num=n;strcpy(p-stude nt.name,a);p-stude nt.score仁s1;p-stude nt.score2=s2;p-n ex
11、t=NULL;*r=p;scan f(%ld%s%lf%lf,&n,a,&s1,&s2);while(n)n);t=p;p=(L*)malloc(sizeof(L);p-stude nt.num=n;strcpy(p-stude nt.name,a);p-stude nt.score仁si;p-stude nt.score2=s2;p-n ext=NULL;t-n ext=p;scan f(%ld%s%lf%lf,&n,a,&s1,&s2);void search1(struct stucode*r)long x;struct stucode*p=r;if(!r)printf(没有学生信息可查
12、询!n);return;printf(请输入要查询的学生信息的学生学号 scan f(%ld,&x);while(p&p-stude nt.nu m!=x):n);p=p-n ext;if(p=NULL)printf(Error!No such student!n);else prin tf(%ld%s%.2lf%.2lfn,p-stude nt.nu m,p-stude nt.name,p-stude nt.score1,p-stud en t.score2);void search2(struct stucode*r)char m20;if(!r)printf(没有学生信息可查询!n);r
13、eturn;printf(请输入要查询的学生信息的学生姓名:n);scan f(%s,m);while(r&strcmp(r-stude nt.name,m)r=r-n ext;if(r=NULL)printf(Error!No such student!n);else prin tf(%ld%s%.2lf%.2lfn,r-stude nt.num,r-stude nt.n ame,r-stude nt.score1,r-stude nt.score2);void del(struct stucode*r)long k;struct stucode*p=*r,*t;if(!(*r)printf
14、(没有学生信息可删除!n);return;printf(请输入要删除的学生信息的学生学号 scan f(%ld,&k);if(p-stude nt.num=k)*r=(*r)-n ext,free(p);else while(p-n ext&p-n ext-stude nt.nu m!=k)p=p-n ext;if(p-next=NULL)printf(Error!No such student!n);else:n);t=p-n ext;p-n ext=p-n ext-n ext;free(t);void in sert(struct stucode*r)long n;char a20;dou
15、ble s1,s2;L*p,*t,*k;printf(请输入要插入的学生信息的学生学号 分数1分数2:n);scan f(%ld%s%lf%lf,&n,a,&s1,&s2);p=(L*)malloc(sizeof(L);p-stude nt.num=n;p-stude nt.score仁s1;p-stude nt.score2=s2;strcpy(p-stude nt.name,a);if(!(*r)*r=p;(*r)-next=NULL;return;if(p-stude nt.num v(*r)-stude nt.num)p-n ext=(*r),(*r)=p;else t=*r;k=t;
16、while(t-n ext&t-n ext-stude nt.num v=p-stude nt.num)t=t-n ext;p-n ext=t-n ext;t-n ext=p;*r=k;void out(struct stucode*r)prin tf(nn);if(!r)printf(没有学生信息可输出!n);return;while(r)prin tf(%ld%s%.2lf%.2lfn,r-stude nt.num,r-stude nt.n ame,r-stude nt.score1,r-stude nt.score2);r=r-n ext;prin tf(nn);void cha nge
17、(struct stucode*r)struct stucode*p=*r;l ong x;l ong n;char a20;double s1,s2;printf(更改的学生的信息n);printf(请输入要查询的学生信息的学生学号:n);scan f(%ld,&x);while(p&p-stude nt.num!=x)p=p-n ext;if(p=NULL)printf(Error!No such student!n);else prin tf(%ld%s%.2lf%.2lfn,p-stude nt.nu m,p-stude nt.name,p-stude nt.score1,p-stud
18、 en t.score2);printf(请输入要修改的学生信息:n);sea nf(%ld%s%lf%lf,&n,a,&s1,&s2);p-stude nt.num=n;strcpy(p-stude nt.name,a);p-stude nt.score仁si;p-stude nt.score2=s2;void menu()printf(n学生成绩管理系统n);prin tf(n 菜单 nn);printf(n 1 建立链表 n);printf(n 2查找某学号的学生信息n);printf(n 3查找某姓名的学生信息n);printf(n 4删除某学号的学生信息n);printf(n 5插入
19、新的学生信息n);printf(n 6显示所有学生的个人信息n);printf(n 7更改学生个人信息n);printf(n 0 退出 n);printf(n请选择您要执行的选项:n);(4)程序的输入和输出 学生成绩管理系统 菜单 1建立犍表 2查找某学号的学生信息 渣找某姓名的学生信息 4删除某学号的学生信息 5插入新的学生信息 百显示所有学生的个人信息 丁更改学生个人信息 退出 请选S您要扶行的选项:按学生学号查找结果:建立镇表 渣找某学号的学生信息 M 査找某姓名的学生信息 观滕某学号的学生信息 遍入新的学生信息 6显示所有学生的个人宿息 7更改学生个人信息 0退出 请选B您墓扶行的选
20、顶=请输入要查询的学竺信息的学生学爭 01002 010O2H39.0092,00 ESting function 1 ress ankey to continue 按学生姓名查找:i建立链表 2查找某学号的学生信息 喳找某姓名的学生信息 姓删除某学号的学生信息 百插入新的学生信息 百显示所有学生的个人信息 更改学生个人信息 退岀 il选S您1扶行的选顶,3f输人夢杳询的羊匕信慝的学牛舛名:n 1010O21i39.0O92.00 TestLn9 function 1 Press any key to GDntinue 图3 删除某学生的运行结果:I建立 渣找某学号的学生信息 喳找某姓名的学生
21、信息 砌除某学号的学生信息 9插入新的学生信息 百显示所有学生的个人宿息 7更改学生个人信息 目退出 请选S您更扶行的运珈 冷输入萝删降的学生信息的学生学号:1B1Q82 插入某学生的运行结果:1建立链表、查戎某学号的学生宿息 弓查找某姓名的学生宿息 4删除某学号的学生信息、插入新的学生信息 G显示所有学生的个人信息 7更改学生个人信息。退岀:情选择您要执行的选顼:f请输入更插入的学生信息的学生学号姓名分数1分数?:161002 11 29 92!BlO81sLin48.00B3.08 1010021133*0092.00 1匹g加空 图5 显示所有学生的信息:建立链袅、査找某学号的学生信息
22、日査找某姓名的学生信息、删除寤号的学生信息、插入新的学生信息、显示所有学生的个人信息 7更改学生个人信息 请迅择您要执行的选顶:h 1肛师“朗钿阴阳.亟 101002li39,0072.00 101003vangS5.00&4,00 (5)调试程序中遇到的问题及解决方案 在调试searchi子函数由于在查找中移动了原指针,导致searchi中不能查找,解决方法设一结构体类型的指针,将原指针赋给该指针,将该指针进行移动查找。在调 试chance()中,如何对已有的记录进行从新输入更改。解决方案为在 chance()子函数中 加入一个查找的程序,也就是说先找到要修改的学生信息,用 sca nf语句
23、对要修改的学 生的信息进行重新输入,再将所赋的信息通过赋值语句将修改后的学生信息赋给该学生 对应的结构体。如何返回一个结构体中信息,解决方案是采用指针类型,将变量的地址 作为实参赋给子函数。数组名代表数组首地址,用 sca nf语句赋值字符串时,不用加地 址操作符。2.3思考题解析 所选择的思考题:编与一个算法,构造一棵哈夫曼树。程序如下:typedef struct un sig ned int weight;un sig ned int pare nt,lchild,rchild;HTNode,*Huffma nTree;typedef char*Huffma nCode void Hn
24、ffCodedi ng(Hnffman Tree&HT,&HC,i nt*w,i nt n)if(n=1)return;m=2*n-1;HT=(Huffma nTree)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);HTs1.pare nt=i;HTs2.pare nt=i;HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HTs1.weight+HTs2.
25、weight;HC=(Huffma nCode)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=HTi.pare nt;f!=O;c=f,f=HTf.pare nt)if(HTf.lchild=c)cd-start=O;else cd-start=1;HCi=(char*)malloc(n-start)*sizeof(char);strcpy(HCi,&cdstart);free(cd);算法分析:哈夫曼树构造方法如下:(1)根据给定的n个权值
26、W1,W2,.Wn构成n课二叉树的集合F=T1,T2 其中每棵二叉树Ti中只有一个带权为 Wi的根节点,其左右子树均为空。(2)在F中选取两棵节点的权值最小的树为左右之树构造一棵新的二叉树,二叉树的根结点的权值为左右子树上根结点的权值之和。(3)在F中删除这两棵树。同时将得到的二叉树加入 F中。(4)重复(2)和(3),直到F只含一棵树为止。哈夫曼树优点:(1)总平均码长最短;(2)任一个字符的的编码的前缀都不是另一个字符的编码的前缀。Tn,且置新的 (3)提高信道利用率,节省发报时 间。总结:通过本次课程设计,使我学会利用在课堂中学过的理论知识,解决相应的实际问题,深入理解和灵活掌握所学的内
27、容,培养我们的理论和实践相结合的能力,分析问题解决 问题的能力。同时,在实验步骤规范化、程序设计方法等方面受到比较系统和规范的训 练。通过实践设计使我们进一步加深对程序设计的规范化及对复杂程序设计步骤的理 解。通过课程设计,加深对数据结构这一课程所学内容的进一步理解与巩固。并通 过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模 块化结构,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序,训练 C 程序调试能力,能将一个查找表调试通过,并掌握系统研发全过程,培养分析问题、解 决实际问题的能力。通过本次课程设计我对结构体,指针有了更深的了解,提高了程序设计的能力。在 本次课程设计中,我遇到了很多问题,这不仅使我在专业知识上有了很大的提高,同时 也增强了我的逻辑思维能力和动手实践的能力,培养了我面对问题的处理心态,使我在 个人素质方面也有了很大的提高。本人签字:参考文献 1 严蔚敏数据结构清华大学出版社.2002年8月 2 谭浩强.C程序设计.清华大学出版社.2005年7月 3 李春葆著.数据结构教程.清华大学出版社.2005年1月 本人签字:4 严蔚敏,吴伟民编著,数据结构,.清华大学出版社,1997.4 朱战立,张选平编著.数据结构学习指导和典型例题.西安交通大学出版社,2002.4