数据结构课程设计-学生成绩管理系统-(2).doc

上传人:知****量 文档编号:92330850 上传时间:2023-06-03 格式:DOC 页数:34 大小:927.50KB
返回 下载 相关 举报
数据结构课程设计-学生成绩管理系统-(2).doc_第1页
第1页 / 共34页
数据结构课程设计-学生成绩管理系统-(2).doc_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《数据结构课程设计-学生成绩管理系统-(2).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计-学生成绩管理系统-(2).doc(34页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、课 程 设 计报 告课程名称 数据结构 课题名称 学生成绩管理系统 专 业 通信工程 班 级 101 学 号 姓 名 momo 指导教师 张鏖烽 彭帧黄哲 205年 7月 日湖南工程学院课 程 设 计 任 务 书课程名称 数据结构 课 题 学生成绩管理系统 专业班级 通信工程11 学生姓名 mmo 学 号 2 指导老师 张鏖烽 彭帧 黄哲 审 批 张鏖烽 任务书下达日期 2015年 6月 29日任务 完成日期 05年 7月 5日目 录一、课程设计得分析1、课程设计目得:42、课程设计题目、需求分析5二、概要设计三、详细设计四、调试分析11(1)调试过程中遇到得问题11()经验与体会11五、用户

2、使用说明2六、测试结果七、附录8八、课程设计评分表37一、课程设计得分析1、课程设计目得:课程设计就是对学生得一种全面综合训练,就是与课堂听讲、自学与练习相辅相成得必不可少得一个教学环节。通常,实习题中得问题比平时得习题复杂得多,也更接近实际。实习着眼于原理与应用得结合点,使读者学会如何把书上学到得知识用于解决实际问题,培养软件工作所需要得动手能力;另一方面,能使书上得知识变“活”,起到深化理解与灵活掌握教学内容得目得.平时得练习较偏重于如何编写功能单一得“小”算法,而实习题就是软件设计得综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能与技巧,多人合作,以至一整套软件工作规

3、范得训练与科学作风得培养。2、课程设计题目【课题】学生成绩管理系统【问题描述】根据自己这个学期得课程表,设计一个成绩管理系统管理自己班得成绩;每个学生记录包含学号、姓名、每门课程成绩、总分以及加权平均分.【基本要求】一个完整得成绩管理系统应具有以下功能:(1)输入:成绩录入;(2)输出:输出成绩表;(3)插入:在成绩表中适当位置插入某个学生成绩;()删除:在成绩表中删除某个学生成绩;(5)查找:根据某个关键字查找某个学生成绩;(6)排序:根据某一个或某几个关键字进行排序;(7)筛选:根据某个关键字筛选出符合某些条件得数据;【测试数据】用本班得成绩总表作为测试数据.3、需求分析本次课程设计得题目

4、就是学生成绩管理系统,要求可以存入学生,学生信息包括学生学号、姓名、每科成绩与平均成绩以及加权平均成绩等。该系统主要有以下七个功能,即对学生信息进行:输入、输出、插入、删除、查找、排序、筛选等功能。对学生进行操作可以有很多思路,而我选用得就是单链表村学生信息那一条思路,即设置一个单链表,其中节点数据域保存学生基本信息。由于我们学号比较长,用整型数据无法保存,所以我定义cha型得字符串来保存学号与姓名.用一个数组来保存学生每一科得成绩,此外在定义一个总分与平均分变量。定义学生如下:typedf struct Studenthar mu12; /学号charname20; 姓名flat sore8

5、; /成绩fot allscoe; /总分float ave_core; /加权平均分strct Studentnext;kLst;二、概要设计本程序采用链表得方法将每一个学生设置成为一个链表中得数据节点,节点中有字符型mun1(学号)、nme20(姓名)、浮点型数据score(放置每一科成绩得数组)、all_sc(总分)与avcore(加权平均分)。主函数中在执行成绩管理系统之前会先创建一个链表,并调用vdIitLis(inkist *)函数来初始化链表;而后进入菜单选择项选择功能进行操作,主程序流程图如下:三、详细设计1、添加学生: 2、输出学生:创建节点 LinkLstp=-et;输入学

6、生信息,计算总分与加权分 for(m=1;met=s;=s;(尾插法插入链表)输出学生信息,p=pneut=count+1;学生总数加1、插入学生、删除学生输入要插入得位置 数字选择删除方式snf(%d”,&); 按编号删除与学号删除调用插入函数 1编号 调用DeletStudentIsert_Stuen(h,w); 2学号 调用cae_Stude找到 学生位置,在用Delee_Student得流程图如下:Inert_tudet 函数 Dlt_Studnt得函数流程图: ocate_Stdet函数得流程图与如下:Loca_Stud1得流程图类似,不再重复了 5查找学生:调用Se_Stdent函

7、数,分为按学号查找与按姓名查找1按编号调用Locate_tunt函数返回i在调用Ou_ne_Studet输出第i个学生 按姓名调用Locte_tnt函数返回i在调用Outone_Stdent输出第i个学生6排序函数 调用uue_Studet函数:其中有按学号,总分,各科成绩排序我这里采用得就是冒泡排序法进行排序,分别定义了两个节点指针q指向头指针p指向得下一个节点,在进入双重循环进行比较排序 流程图如下:排序得方法都类似,知识比较数据不同,所以就没有一一画出来了 筛选创建另一个链表r用于存筛选出来得学生,并调用tttuent函数输出筛选程序流程图如下:筛选程序又分为1 按总分选2 全部及格得人

8、 3 按各科成绩1 而总分筛选主要就是输入一个数值,判断数据就是否大于输入数据,大于得都输出2 去不几个得人通过比较每一科成绩就是否都大于60分,大于得就选出插入新链表并输出各科成绩得话就是只比较其中一科来创建链表并输出其比较流程图都如上图所示,这里便不再一一画出来了.四、调试分析(1)调试过程中遇到得问题就是如何解决得以及对设计与实现得回顾讨论与分析在调试过程中遇到得第一个问题就是输出学生得问题,因为输出得问题,其中总就是发现输出乱码,找了好久,后来终于发现就是输入时出了问题,因为姓名我定义了字符串型,而字符串长度我定义了0,在创建节点得时候我却把nae2给了学生节点,导致输出时地址错误而输

9、出乱码。第二个问题就是查找,我开始一直想不到怎么把查找到得学生输出,后来想了很久,找到了方法,我先通过查找关键字去找到该学生就是在链表得那个位置,在通过返回得位置得值来输出想要输出得那个学生,所以就定义了Loc_Studnt与Out_one_Sudent来完成查找功能.第三个问题就是筛选功能得实现,我本来想通过比较,将符合关键字得学生筛选出来在输出,结果发现输出函数就是已经定义成一次性全部输出得形式。导致我一直想不到好得方法来进行这个功能得代码编写.后来经过老师得指导,我知道了一种新得方法来编写,就就是通过创建一个新得学生链表来存已经筛选出来得学生。然后在通过输出函数来将新链表进行输出,这样就

10、可以达到筛选得目得。改进方法:现在想了一下,其实可以将输出函数进行改进,改成一个一个学生输出得形式,在通过一个判断语句进行选择性输出,用这个输出得方法可以减少代码得得量,而达到同样得效果.第四个问题就是主函数得问题,因为我想让主函数瞧起来简洁一点,就把主函数分成两部分,一部分用于选择操作,另一部分用于进行选择好得操作,可就是这样一来却出现了问题,就就是输出数据之后无法暂停在输出界面,而就是闪了一下就退出来进入主界面了,这个问题我开始以为就是输出函数得问题,结果我去改了输出函数,结果还就是无法停留。后来知道原因了,主函数退出swtc循环之后会立即回到主菜单界面,到时无法停在输出界面。我在主函数最

11、后加一个sysm(“puse)之后才打到可以观察到得地方.改进方法:可以将主函数定义成一个,不用分开,去掉r(;)这个循环会好点。(2)经验与体会本次课程设计得题目我一开始瞧到得时候以为很容易就能做出来,所以只就是大概想了一下思路,就直接开始了,其实这个实验可以用顺序表做会思路更清晰一些,我没有选择顺序表来做,因为我在单链表这一部分有点模糊,所以想挑战一下用单链表来做。这个程序得每一个代码都就是我经过一步一步分析写出来得,在编写得过程中遇到了很多得阻碍,很多自己无法预知得错误,在不断得找错过程中,我感觉到自己在语言这一方面得不足,对算法得精髓还不就是很了解, 对于单链表得操作也不就是很熟练,尤

12、其就是在节点指针多起来得时候会有点乱,甚至搞不清指针到底指向哪里了。然而,在编程过程中,一次次得测试失败,再一次次修改正确却让我慢慢得熟悉了数据结构一些用法,渐渐得知道要编写一个系统,需要各种功能协调才能算一个系统,而每一个功能有需要很多函数之间得相互联系来调用与支撑。同时要想将课程设计完成得好,就需要积极提问,遇到不懂得地方可以找老师或同学相互交流经验,这样才会更加有效率得完成课设。经过这一段时间得课设,我学到得不仅仅就是数据结构得想关知识,也懂得了团队协作得重要性,知道学习需要真正扎实去学习,这样才能真正学到知识,并灵活运用这些所学知识。五、用户使用说明1、添加学生功能:进入系统后先选择1

13、回车即可进入输入界面,然后按照提示输入学生学号、姓名与数据结构、数字信号处理、数字电子技术基础得分数在按回车,如果还想再继续添加就按1继续,否则可以按任何键退出.2、输出学生:用户在输入完学生数据后既可以按2输出所输入得全部学生、插入学生:用户需在主界面按3即可以进入插入界面,此时可以按数字键在选择要插入得位置,如输入1即可以将要插入得学生插入到第一个位置,可以在主界面输入2进行查瞧就是否插入到指定位置。4、删除学生:用户可以在主界面输入4进入删除,在通过选择编号来删除要删除得学生。5、查找:查找查找功能有按学号与姓名查找,如按一进入学号查找,可以输入要查找得学号,回车即可以输出要查找得学生。

14、6、排序:排序可以通过学号,总分,与各科成绩,输入1可以按学号从小到大排序,输入2可以按总分从小到大进行排序,输入3可以进入科目选择,再按1进行数据结构排序,2进行数字型号处理排序,3进行数电得排序.、筛选:可以按1进入总分筛选,进入之后输入筛选多少分以上得人,输入分数,如:200,即可输出所有大于20分得学生;在筛选界面输入可以输出全部及格得学生;按3可以进入各科成绩得筛选,再按1选出所有数据结构及格得学生、再按2选出所有数字信号处理及格得学生、再按选出所有数字电子技术基础及格得学生.8、退出:退出程序只需要在主界面按0再回车即可以退出程序.六、测试结果1、添加学生:、输出学生:、插入学生:

15、 、删除学生: 、查找学生:6、排序7、筛选、退出程序:七、附录#nclde stdi、hinclu malloc、include next!NL)r=r-nex;s=(nkList )malc(sizeof(Linkist));-net=NULL;pnt(”输入学生学号、姓名、每科成绩n”);rintf(”学号:);nf(s”,&mun);pintf(姓名:”);scn(”s,snam);数据结构、0、数字信号处理4、0、数字电子技术基础2、5 这里只输入三门成绩作为示范*fr(i0;icorei=;(=1)rntf(输入数字信号处理分数);caf(”%f,&ai);sorei=a;if(=

16、)prit(输入数字电子技术基础分数n);af(%f,&ai);sscoi=ai;all=a0+a+2;sall_coreall;ave=(a03、0+a1*4、022、5)/9、;save_scoeave;rnext=;s;countont+1;rint(”就是否继续?(按1继续,其她退出.)”);can(%d,&j);void utput_Stdnt (Linkist *,intn) 输出全部学生inkList p=Lnext;f(p=NULL)rintf(没有学生成绩!请添加学生.。.);ur;printf(tt 学生成绩表 n”);pintf(”编号 学号 姓名 数据结构 数字信号 数

17、字电路 总分 加权平均分n”);int ;for(m=;mscore,pscore1,pscre2,-al_coe,ve_scor);=next;vid DeeteStudet(kList ,iti) /删除第个学生int 0;nkLis p,;if (i=)pritf(没有找到该学生);retr;whil(et;if(p=NUL)print(没有找到该学生);return ;lseq=p-nxt;if(q=NUL)return;pnetq-next;ree(q);cunt=cout1;prinf(删除成功!n”);retun;int Lc_Student(LinLi L,harmu) /按学

18、号定位,返回第个学生nt i=1;LnkList *p-net;hle(p!=UL&stcmp(p-u,mu)!=0)i+;pext;if(p=ULL)return ();els eturn(i);intLct_Stuent1(Liki L,r* name) 按姓名定位,返回第i个学生int i;Lnkt Lnet;whle(p!=ULL&tcmp(pnm,nam)!=0)i+;p=p-next;if(=NL)return ();lse rturn(i);voidQueueSbject(LinList L) /不同科目排序ini;LnkLst*q,*,,t2;prntf(请输入科目得代号: 数

19、据结构 2 数字信号处理3 数电请输入:”);scnf(”d,);i(=1|ext!=NUL;=qx)for(qnx;pnxt!=NULL;p=pext)if(q-next-coinet-sorei1)f(-net=p)t1=pnext;pnext=pnext-nex;1-n=next;qnext=;p=;elset=p-ex;t2qnt;pnext=pnextxt;-t=qnextnet;t1-ext=q-net;qnext1;t2ext=pnet;-next=2;elsintf(”没有找到该科目!n);rtun;voi Quu_Student(ikList &L) /排序函数nt ,1;p

20、rif(”1、按照学号、总分3、按各科分排序请输入:);caf(%d,&i);iList,p,t1,t2;switch() case 1: /学号排序fr(q=L;q-next!NUL;q=qne)fo(p=q-next;t!=NULL;p=p-ext)if(stmp(qextn,pet-u)=1)i(qnex=p)t1=-ex;nex=nextne;t1nex=qext;q-et=1;1;elset1=ext;t2=q-ext;nexpet-next;qnt=-nextnet;t1-n=q-next;q-net=1;t2-next=-nxt;ext=t2;brak;cas 2: /总分排序o

21、(qL;next!=NULL;q=qxt)for(p=next;pn!=NU;p=p-ne)if(nexta_soreextall_core)if(-ext=)1ext;pext=pt-next;nex=q-nt;qt=t1;pt1;eset1=-next;t2=q-next;nxt=pnet-net;qnext=qexnex;textq-next;next=t;text=pnex;p-nxt=t2;beak;as 3:Quee_bect(L);/科目排序brak;od Out_one_Stuent(Linkist L,n ) /输出第个学生in j0;LinLit *p=;while(ji)

22、+;pxt;pin(%9s%-s、f%0、1f%-10、1-8、1 -10、n”,pun,pnam,pscore0,scoe1,pscore,-all_score,pave_sre);in Seek_tudent(LikList *) /查找学生1按学号查找2 按姓名查找nt m;pritf(按学号查找 2 按姓名查找3 退出n请输入:”);scanf(,);sith(m)cs :char a12;printf(输入学号:);sca(”,a);retun (Locate_Studet(L,a); /返回学号查找到得值ba;ae 2:charb2;prin(输入姓名:);caf(”,b);ret

23、urn(Locte_Student(L,b);break;cse 3:brek;voi Flter_Stue(LinkList&L) 筛选Lt *s,*p=L-t,*,*q;int ,unt2=0;prnt( 按总分选 2 全部及格得人 按各科成绩4退出请输入:”);sca(d”,y);switch(y)case :=(LinkLis )ma(sieof(inkLis);q=;nt;foat al;print(您要总分多少分以上得人,请输入:”);scanf(”f,al);fo (0;unt;+,next)if (ULL)pit(没有”);rtur;f(p-all_scrll)r=(nkLit

24、 *)malloc(izeof(Links);strcpy(mu,mun);trcpy(r-name,nam); r-sce=pso1;rscre2=scor2;score=pcor0;rll_core=p-al_core;-ave_sce=p-e_or;qne=r;q=xt;qnex=NLL;count2+;otStudent(s,coun2);f(s);re;c2:=(iLst)aloc(seo(LinList));q=s;nt ;fo (j0;jcount;j+,p=pnxt)if (=UL)rinf(”没有);reurn;if(psor59pe19psore259)(LinkLit*)

25、malloc(sizof(Linkist);strcp(r-mn,-mu);srcpy(rna,-name); r-score=pscre1;rscor2=psore2;r-core0pscre;allcor=pallscoe;ave_scre=pave_core;qnext=r;q=q-next;qnxt=ULL;cout2+;tu_Stuen(,cont2);free(s);brea;cae 3:s(LinkList*)allo(sizeof(LinkList));s;in k,x;prif(选择 1 数据结构及格得 数字信号处理及格得 数电及格得);prinf(”请输入:);scaf(d

26、”,);for(=0;kscore-159)r=(LinkLs *)malo(sizeof(LnLis));tcpy(rmun,p-mu);srcpy(r-ne,p-na); rcore1=pce1;scoe2=pso2;rscre0=pc;-all_scorp-all_scre;r-ave_scorepavesre;q-nxt=r;q=nex;q-next=NULL;cou+;uput_Studnt(s,un2);fee(s);beak;case :break;ol Inserudent(LnkList&L,in i) /插入学生int j0;LikLs *p=L,*s;i(i=0)pin(

27、对不起,没有该位置!);eturn fase;hil(ji-1&p!NL)j+;p=xt;(p=ULL)pin(对不起,没有该位置!n);return false;les(LinList )mallo(szef(inkist));nex=UL;loaal,e,scoe;pnt(输入学生学号、姓名、每科成绩n);pitf(学号:”);scaf(s”,s-);ntf(”姓名:);canf(s,&nam);fr(=0;i3;i+)i(i=0)rintf(”输入数据结构分数n”);saf(”f,sore);sscorei=core;if(i=1)pnf(输入数字信号处理分数);anf(”,sore);

28、ori=ore;if(i=)prntf(输入数字电子技术基础分数);cf(%f”,&ore);soei=score;all=sore1+ssce2+sscre0;sall_cor=ll;ave=(-score03、0+score1、+s-score2、)9、;-ave_score=av;s-et=p-nex;pext=;nt+;prntf(插入成功);eturn tru;int men_elct() *菜单选择程序it c; do sye(cls”); pritf(nt 欢迎使用学生成绩管理系统 ”);prinf(”t 、 添加学生 ”); rintf(t 2、 输出学生n”); printf

29、(”t 3、 插入学生n”);prntf(t 4、 删除学生 ”);pintf(”t 5、 查找学生 n); printf(” 、排序 n);pinf(t 、筛选 ); printf(”t 0、 退出程序 n); pritf(”t*); pnt(t 请您选择(7):); scanf(”,c); wie(cc); return(c); voidman() LinkL *h; Iniist(h); /初始化for(;) switch(menusct() ase1: /添加学生et_Se(h); /添加学生rk; cae 2: utpt_Studn(h,coun); /输出全部学生brea;cse3: /插入int w;print(”输入插入得位置,位置为大于或等于得数,(如1、2、)n);prt(”请输入:);canf(%d”,&w);Inert_td

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com