數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)方案_第1頁
數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)方案_第2頁
數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)方案_第3頁
數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)方案_第4頁
數(shù)據(jù)結(jié)構(gòu)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)方案_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

.../洛陽理工學(xué)院課程設(shè)計(jì)報(bào)告課程名稱數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)設(shè)計(jì)題目運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)學(xué)號(hào)姓名課程設(shè)計(jì)任務(wù)書設(shè)計(jì)題目:運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)設(shè)計(jì)內(nèi)容與要求:參加運(yùn)動(dòng)會(huì)有n個(gè)學(xué)校,學(xué)校編號(hào)為1……n。比賽分成m個(gè)男子項(xiàng)目,和w個(gè)女子項(xiàng)目。項(xiàng)目編號(hào)為男子1……m,女子m+1……m+w。不同的項(xiàng)目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學(xué)生自己設(shè)定。〔m<=20,n<=20

可以輸入各個(gè)項(xiàng)目的前三名或前五名的成績(jī);2>

能統(tǒng)計(jì)各學(xué)校總分,3>

可以按學(xué)校編號(hào)或名稱、學(xué)校總分、男女團(tuán)體總分排序輸出;4>

可以按學(xué)校編號(hào)查詢學(xué)校某個(gè)項(xiàng)目的情況;可以按項(xiàng)目編號(hào)查詢?nèi)〉们叭蚯拔迕膶W(xué)校。輸出形式:有中文提示,各學(xué)校分?jǐn)?shù)為整形界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。存儲(chǔ)結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì),但是要求運(yùn)動(dòng)會(huì)的相關(guān)數(shù)據(jù)要存儲(chǔ)在數(shù)據(jù)文件中。測(cè)試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進(jìn)行程序測(cè)試,以保證程序的穩(wěn)定。指導(dǎo)教師:張新顏2016年12月日課程設(shè)計(jì)評(píng)語成績(jī):指導(dǎo)教師:_______________年月日...算法思想:本課設(shè)要求輸入信息,統(tǒng)計(jì)分?jǐn)?shù),執(zhí)行排序與查找功能,在要求中沒有在建立數(shù)據(jù)之后進(jìn)行插入和刪除操作,而在排序和查找過程中有許多的隨機(jī)讀取數(shù)據(jù)操作,因此使用順序結(jié)構(gòu)而不用鏈表。由于各個(gè)要求屬性具有一定的聯(lián)系,在定義數(shù)據(jù)時(shí)使用結(jié)構(gòu)體和結(jié)構(gòu)體數(shù)組來存儲(chǔ)信息數(shù)據(jù)??紤]到程序的要求在設(shè)計(jì)函數(shù)時(shí)將學(xué)校個(gè)數(shù)和項(xiàng)目個(gè)數(shù)設(shè)計(jì)為可變的數(shù)據(jù),為方便使用設(shè)計(jì)菜單函數(shù)〔menu,而由于要求將信息存儲(chǔ)在文件中故設(shè)計(jì)文件的存儲(chǔ)〔savetofile與讀取函數(shù)〔readfromfile,信息輸入函數(shù)〔input在輸入基本信息后由系統(tǒng)統(tǒng)計(jì)總分的內(nèi)容并全部存入文件file中,在接下來的函數(shù)中開始都需要讀取文件中的信息,信息的輸出〔output輸出輸入函數(shù)中統(tǒng)計(jì)后的各項(xiàng)信息,在排序輸出〔sortput中使用冒泡排序法進(jìn)行不同關(guān)鍵字的排序,查詢函數(shù)〔search采用順序表的查找來完成。2.模塊劃分:1、Voidmenu<intn,intm,intw>功能是提供界面窗口。2、Voidsavetofile<>功能是保存輸入的運(yùn)動(dòng)會(huì)信息到file文件開始開始輸入項(xiàng)目編號(hào)temp是數(shù)字NY0<top<18NY輸出""統(tǒng)計(jì)結(jié)果Top存在YNNextschoolNTop是5NY取5名取3名編號(hào)snum1<snum<15NY學(xué)校、項(xiàng)目號(hào)、名次Y繼續(xù)添加YN結(jié)束3、Voidreadfromfile<>功能是從file文件中讀取運(yùn)動(dòng)會(huì)信息4、Voidinput<intn,intm,intw>功能是輸入信息并統(tǒng)計(jì)5、Voidoutput<intn,intm,intw>功能是按學(xué)校、項(xiàng)目輸出統(tǒng)計(jì)信息開始開始輸入1或者0輸入項(xiàng)目號(hào)輸入學(xué)校編號(hào)輸出學(xué)校信息輸出該項(xiàng)目信息結(jié)束6、Voidsortput<intn,intm,intw>功能是按四種方法排序并輸出結(jié)果開始輸入c開始輸入c按學(xué)校編號(hào)排序按學(xué)??偡峙判虬茨猩?xiàng)目排序按女生項(xiàng)目排序結(jié)束8、voidmain<>主函數(shù)數(shù)據(jù)結(jié)構(gòu):〔1項(xiàng)目數(shù)據(jù)表:運(yùn)動(dòng)會(huì)系統(tǒng)先制定本次運(yùn)動(dòng)會(huì)所需的參賽項(xiàng)目。本數(shù)據(jù)表根據(jù)要求設(shè)計(jì)存儲(chǔ)每個(gè)項(xiàng)目的編號(hào)、要取的名次、各個(gè)名次名稱及各名次對(duì)應(yīng)的分?jǐn)?shù)。用于對(duì)以后項(xiàng)目情況的統(tǒng)計(jì)已及查詢。其中inum,top,range由輸入信息輸入,而mark有range和top決定。typedefstruct{ intinum;/*項(xiàng)目編號(hào)*/inttop;/*取名次的數(shù)目*/intrange[5];/*名次*/intmark[5];/*分?jǐn)?shù)*/}itemnode;/*存放項(xiàng)目信息*/〔2學(xué)校數(shù)據(jù)表:本數(shù)據(jù)表根據(jù)要求儲(chǔ)存了各個(gè)參賽學(xué)校的總體情況,包括學(xué)校的編號(hào)、學(xué)校總分、男子團(tuán)體總分、女子團(tuán)體總分,并且包括項(xiàng)目數(shù)據(jù)數(shù)組t[n]。其中snum和t[n]中部分?jǐn)?shù)據(jù)由輸入信息輸入,而其他三項(xiàng)內(nèi)容score,mscore,wscore將由系統(tǒng)進(jìn)行自動(dòng)統(tǒng)計(jì)。typedefstruct{ intsnum;/*學(xué)校編號(hào)*/intscore;/*學(xué)??偡?/intmscore;/*男團(tuán)體總分*/intwscore;/*女團(tuán)體總分*/itemnodet[M+W];/*項(xiàng)目數(shù)組*/}snode;/*存放學(xué)校信息*/snodea[N];/*定義一個(gè)學(xué)校數(shù)組*/這二個(gè)數(shù)據(jù)表相關(guān)聯(lián)接,a[n]中包括t[n],形成一個(gè)整體。測(cè)試:測(cè)試取學(xué)校個(gè)數(shù)為3,男子項(xiàng)目個(gè)數(shù)2.女子項(xiàng)目個(gè)數(shù)1。項(xiàng)目學(xué)校編號(hào)1〔男編號(hào)2〔男編號(hào)3〔女取前3取前5取前5編號(hào)1名次31、43、4編號(hào)2名次22、51、5編號(hào)3名次132將上述所有學(xué)校的信息輸入,然后計(jì)算出所有學(xué)校的總分,男子項(xiàng)目的總分,女子項(xiàng)目的總分,然后再將自己計(jì)算出的數(shù)值與所做成的系統(tǒng)比較,觀看是否存在誤差和錯(cuò)誤。主菜單界面2.信息輸入測(cè)試:預(yù)計(jì)輸入三個(gè)學(xué)校的信息。統(tǒng)計(jì)輸出測(cè)試:預(yù)計(jì)輸出三個(gè)學(xué)校信息。排序輸出測(cè)試。實(shí)現(xiàn)學(xué)??偡?男團(tuán)總分,女團(tuán)總分均可排序輸出。信息查詢測(cè)試:預(yù)計(jì)可以用學(xué)校編號(hào)和項(xiàng)目編號(hào)查詢。結(jié)束程序測(cè)試:預(yù)計(jì)直接退出系統(tǒng)。經(jīng)過運(yùn)算與測(cè)試結(jié)果比較,發(fā)現(xiàn)預(yù)期結(jié)果與運(yùn)行結(jié)果一致。所以運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)正確無誤。源程序:#include<stdio.h>#include<math.h>#include<stdlib.h>#defineN20/*學(xué)校最大數(shù)目*/#defineM20/*男子項(xiàng)目最大數(shù)目*/#defineW20/*女子項(xiàng)目最大數(shù)目*/typedefstruct{ intinum;/*項(xiàng)目編號(hào)*/inttop;/*取名次的數(shù)目*/intrange[5];/*名次*/intmark[5];/*分?jǐn)?shù)*/}itemnode;/*存放項(xiàng)目信息*/typedefstruct{ intsnum;/*學(xué)校編號(hào)*/intscore;/*學(xué)??偡?/intmscore;/*男團(tuán)體總分*/intwscore;/*女團(tuán)體總分*/itemnodet[M+W];/*項(xiàng)目數(shù)組*/}snode;/*存放學(xué)校信息*/snodea[N];/*定義一個(gè)學(xué)校數(shù)組*/voidmenu<intn,intm,intw>/*菜單函數(shù)*/{ intc;voidinput<intn,intm,intw>; voidoutput<intn,intm,intw>; voidsortput<intn,intm,intw>; voidsearch<intn,intm,intw>; printf<"\t\t\t歡迎使用\t\t\t\t\n\n">; printf<"\t***********運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)***********\n\n">;printf<"\t*1.信息輸入*\t\n">;printf<"\t*2.統(tǒng)計(jì)輸出*\t\n">;printf<"\t*3.排序輸出*\t\n">;printf<"\t*4.信息查詢*\t\n">;printf<"\t*0.退出系統(tǒng)*\t\n\n">; printf<"\t*老師你最好看*\t\n">;printf<"\t========================================\n\n">; printf<"請(qǐng)選擇要實(shí)現(xiàn)步驟的編號(hào)<0--4>:">;scanf<"%d",&c>; switch<c> { case1: input<n,m,w>;break;case2: output<n,m,w>;break;case3: sortput<n,m,w>;break;case4: search<n,m,w>;break;case0: printf<"謝謝使用,再見!\n">;exit<0>;default: printf<"輸入錯(cuò)誤,請(qǐng)重試!\n">;menu<n,m,w>;}}voidsavetofile<>/*信息存入文件file*/{ FILE*fp;inti;if<<fp=fopen<"file.txt","wb">>==NULL>{ printf<"cannotopenthefile\n">; return;}for<i=0;i<N;i++>{ if<a[i].snum!='\0'> if<fwrite<&a[i],sizeof<snode>,1,fp>!=1> { printf<"filewriteerror\n">; return; }}fclose<fp>;}voidreadfromfile<>/*信息從文件file中取出*/{inti; FILE*fp;if<<fp=fopen<"file.txt","rb">>==NULL>{ printf<"cannotopenthefile\n">; return;}for<i=0;i<N;i++> fread<&a[i],sizeof<snode>,1,fp>;fclose<fp>;}voidinput<intn,intm,intw>//輸入函數(shù){ inti,j,s,k,q=0;for<i=0;i<n;i++>{ printf<"學(xué)校編號(hào):">;scanf<"%d",&a[i].snum>;/*輸入學(xué)校信息*/for<j=0;j<m+w;j++> { printf<"項(xiàng)目編號(hào):">;scanf<"%d",&a[i].t[j].inum>; printf<"項(xiàng)目取前3名或前5名<3或者5>:">;scanf<"%d",&a[i].t[j].top>; if<a[i].t[j].top==3> printf<"獲得名次個(gè)數(shù)<1--3>:">; else printf<"獲得名次個(gè)數(shù)<1--5>:">;scanf<"%d",&k>;/*輸入項(xiàng)目信息*/for<s=0;s<k;s++> { if<a[i].t[j].top==3> printf<"所獲名次<1--3>:">; else printf<"所獲名次<1--5>:">;scanf<"%d",&a[i].t[j].range[s]>;/*輸入所獲名次信息*/ } printf<"\n">;}}for<i=0;i<n;i++>{ a[i].score=0;a[i].mscore=0;a[i].wscore=0; }/*初始化分?jǐn)?shù)*/ for<i=0;i<n;i++> for<j=0;j<m+w;j++> for<s=0;s<5;s++> { if<a[i].t[j].top==3> switch<a[i].t[j].range[s]> {case0:a[i].t[j].mark[s]=0;break;case1:a[i].t[j].mark[s]=5;break;case2:a[i].t[j].mark[s]=3;break;case3:a[i].t[j].mark[s]=2;break; } elseif<a[i].t[j].top==5> switch<a[i].t[j].range[s]> {case0:a[i].t[j].mark[s]=0;break;case1:a[i].t[j].mark[s]=7;break;case2:a[i].t[j].mark[s]=5;break;case3:a[i].t[j].mark[s]=3;break;case4:a[i].t[j].mark[s]=2;break;case5:a[i].t[j].mark[s]=1;break; } else { printf<"信息有誤!">; printf<"\n">; exit<0>; } a[i].score=a[i].score+a[i].t[j].mark[s];/*記學(xué)校總分*/ if<j<=m-1> a[i].mscore=a[i].mscore+a[i].t[j].mark[s];/*記男子團(tuán)體總分*/ else a[i].wscore=a[i].wscore+a[i].t[j].mark[s];/*記女子團(tuán)體總分*/ } printf<"輸入完畢!返回?1是0否\n">;/*返回菜單*/ scanf<"%d",&q>; printf<"\n">; if<q!=1> printf<"不能再添加信息!">; printf<"\n">; savetofile<>;/*將信息存入文件file*/ getchar<>; system<"cls">; menu<n,m,w>;}voidoutput<intn,intm,intw>//輸出函數(shù){readfromfile<>; inti,j,s,q=0;for<i=0;i<n;i++>/*顯示結(jié)果*/ { printf<"學(xué)校編號(hào):%d學(xué)??偡?%d男團(tuán)總分:%d女團(tuán)總分:%d\n",a[i].snum,a[i].score,a[i].mscore,a[i].wscore>;for<j=0;j<m+w;j++> { printf<"項(xiàng)目編號(hào):%d所取名次數(shù)量:%d\n",a[i].t[j].inum,a[i].t[j].top>; for<s=0;s<5;s++> {if<a[i].t[j].range[s]!=0> printf<"名次:%d分?jǐn)?shù):%d\n",a[i].t[j].range[s],a[i].t[j].mark[s]>; } } printf<"\n">; } printf<"\n">; printf<"統(tǒng)計(jì)成功!返回?1是0否">;/*返回菜單*/ scanf<"%d",&q>; printf<"\n">; if<q!=1> printf<"統(tǒng)計(jì)已經(jīng)結(jié)束!">; printf<"\n">; system<"cls">;menu<n,m,w>;}voidsortput<intn,intm,intw>//順序輸出{ readfromfile<>; intc,i,j,k,q=0; inttemp[N];printf<"\t**************排序輸出系統(tǒng)**************\n\n">;printf<"\t************1.按學(xué)校編號(hào)輸出************\t\n">;printf<"\t************2.按學(xué)校總分輸出************\t\n">;printf<"\t************3.按男團(tuán)總分輸出************\t\n">;printf<"\t************4.按女團(tuán)總分輸出************\t\n">;printf<"\t========================================\n\n">; do {printf<"請(qǐng)選擇要實(shí)現(xiàn)功能的編號(hào)<1--4>:">;scanf<"%d",&c>; switch<c> { case1: for<i=0;i<n;i++> temp[i]=i;for<i=0;i<n;i++>{ for<j=i+1;j<n;j++> if<a[temp[i]].snum>a[j].snum> { k=temp[i];temp[i]=temp[j];temp[j]=k; }}/*用冒泡排序方法排序*/for<i=0;i<n;i++>{ printf<"學(xué)校編號(hào):%d學(xué)??偡?%d男團(tuán)總分:%d女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore>;}/*按學(xué)校編號(hào)輸出*/break; case2: for<i=0;i<n;i++> temp[i]=i;for<i=0;i<n;i++> { for<j=i+1;j<n;j++> if<a[temp[i]].score<a[j].score> { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } }/*用冒泡排序方法排序*/ for<i=0;i<n;i++> { printf<"學(xué)校編號(hào):%d學(xué)校總分:%d男團(tuán)總分:%d女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore>; }/*按學(xué)??偡州敵?/ break; case3: for<i=0;i<n;i++> temp[i]=i; for<i=0;i<n;i++> { for<j=i+1;j<n;j++> if<a[temp[i]].mscore<a[j].mscore> { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } }/*用冒泡排序方法排序*/ for<i=0;i<n;i++> { printf<"學(xué)校編號(hào):%d學(xué)校總分:%d男團(tuán)總分:%d女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore>; }/*按男團(tuán)總分輸出*/ break; case4: for<i=0;i<n;i++> temp[i]=i; for<i=0;i<n;i++> { for<j=i+1;j<n;j++> if<a[temp[i]].wscore<a[j].wscore> { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } }/*用冒泡排序方法排序*/ for<i=0;i<n;i++> { printf<"學(xué)校編號(hào):%d學(xué)校總分:%d男團(tuán)總分:%d女團(tuán)總分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore>; }/*按女團(tuán)總分輸出*/ break; default: printf<"輸入錯(cuò)誤,請(qǐng)重試!\n">; } printf<"請(qǐng)選擇1返回主菜單0繼續(xù)">;/*返回菜單或繼續(xù)排序*/ scanf<"%d",&q>;system<"cls">; printf<"\n">; } while<q==0>; printf<"\n">; if<q!=0> menu<n,m,w>;}voidsearch<intn,intm,intw>//查詢函數(shù){ readfromfile<>; intc,i,j,k,d,l,q=0;printf<"\t****************查詢系統(tǒng)****************\n\n">;printf<"\t*1.按學(xué)校編號(hào)查詢*\t\n">;printf<"\t*2.按項(xiàng)目編號(hào)查詢*\t\n">;printf<"\t========================================\n\n">; do {k=-1;d=-1;l=-1; printf<"請(qǐng)選擇要實(shí)現(xiàn)功能的編號(hào)<1--2>:">;scanf<"%d",&c>; switch<c> { case1:printf<"要查詢的學(xué)校編號(hào):">;/*查找學(xué)校編號(hào)下標(biāo)*/ scanf<"%d",&c>; for<i=0;i<n;i++> { if<a[i].snum==c> k=i; } if<k==-1> printf<"錯(cuò)誤:這個(gè)學(xué)校沒有參加此次運(yùn)動(dòng)會(huì)!\n">; else { printf<"要查詢的項(xiàng)目編號(hào):">;/*查找項(xiàng)目編號(hào)下標(biāo)*/scanf<"%d",&c>; for<j=0;j<m+w;j++> { if<a[k].t[j].inum==c> d=j; } if<d==-1> printf<"此次運(yùn)動(dòng)會(huì)沒有這個(gè)項(xiàng)目\n">; else/*顯示結(jié)果*/ { printf<"這個(gè)項(xiàng)目取前%d名,該學(xué)校的成績(jī)?nèi)缦?\n",a[k].t[d].top>; for<i=0;i<5;i++> if<a[k].t[d].range[i]!=0> printf<"名次:%d\n",a[k].t[d].range[i]>; } }break; case2: printf<"要查詢的項(xiàng)目編號(hào):">;/*查找項(xiàng)目編號(hào)下標(biāo)*/ scanf<"%d",&c>; for<i=0;i<n;i++> for<j=0;j<m+w;j++> if<a[i].t[j].inum==c> l=j; if<l==-1> printf<"此次運(yùn)動(dòng)會(huì)沒有這個(gè)項(xiàng)目\n">; else/*顯示結(jié)果*/ { printf<"該項(xiàng)目取前%d名,取得名次的學(xué)校\n",a[0].t[l].top>; for<i=0;i<n;i++> for<j=0;j<5;j++> if<a[i].t[l].ra

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論