運動會分?jǐn)?shù)統(tǒng)計-數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計報告_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  計算機科學(xué)與技術(shù)系</b></p><p><b>  課程設(shè)計報告</b></p><p>  2009 ~2010 學(xué)年第 2 學(xué)期</p><p>  2010 年 6 月</p><p>  題目:運動會分?jǐn)?shù)統(tǒng)計</p>&l

2、t;p><b>  一、課程設(shè)計目的</b></p><p>  “數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計”是計算機科學(xué)與技術(shù)專業(yè)學(xué)生的集中實踐性環(huán)節(jié)之一,是學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)與算法”理論和實驗課程后進行的一次全面的綜合練習(xí)。其目的是要達到理論與實際應(yīng)用相結(jié)合,提高學(xué)生組織數(shù)據(jù)及編寫程序的能力,使學(xué)生能夠根據(jù)問題要求和數(shù)據(jù)對象的特性,學(xué)會數(shù)據(jù)組織的方法,把現(xiàn)實世界中的實際問題在計算機內(nèi)部表示出來并用軟件解

3、決問題,培養(yǎng)良好的程序設(shè)計技能。</p><p>  二、課程設(shè)計名稱及內(nèi)容</p><p>  名稱:運動會分?jǐn)?shù)統(tǒng)計程序</p><p>  內(nèi)容:參加運動會的n個學(xué)校編號為1~n,比賽分成m個男子項目和w個女子項目,項目編號分別為1~m和m+1~m+w。有些項目取前五名,得分依次為6,4,3,2,1;有些項目取前三名,得分依次為4,2,1。寫一程序產(chǎn)生各學(xué)校的成

4、績單(包括各校所取得的每項成績的項目號、成績、姓名和得分)和團體總分報表(包括校號、男子團體總分、女子團體總分和團體總分)?;疽螅海?)可以輸入各個項目的前三名或前五名的成績;(2)能統(tǒng)計各學(xué)??偡郑?)可以按學(xué)校編號或名稱、學(xué)校總分、男女團體總分排序輸出;4)可以按學(xué)校編號查詢學(xué)校某個項目的情況;可以按項目編號查詢?nèi)〉们叭蚯拔迕膶W(xué)校。5)數(shù)據(jù)存入文件并能隨時查詢。</p><p><b> 

5、 三、任務(wù)和要求</b></p><p>  任務(wù):⑴ 通過獨立解決某個課程設(shè)計問題,在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇應(yīng)用、算法的設(shè)計及其實現(xiàn)等方面加深對課程基本內(nèi)容的理解和綜合運用。⑵ 深刻理解、牢固掌握數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計技術(shù),提高分析和解決實際問題的能力。⑶ 在程序設(shè)計方法以及上機操作等基本技能和科學(xué)作風(fēng)方面進行比較系統(tǒng)和嚴(yán)格的訓(xùn)練。</p><p>  按題

6、目要求(1)可以輸入各個項目的前三名或前五名的成績;(2)能統(tǒng)計各個學(xué)校的總分;(3)可以按學(xué)校編號或名稱、學(xué)校總分、男女團體總分排序輸出;(4)可以按學(xué)號編號查詢學(xué)校某個項目的情況;可以按項目編號查詢?nèi)〉们叭蚯拔宓膶W(xué)校;(5)數(shù)據(jù)存入文件并能隨時查詢;等功能的實現(xiàn)。要實現(xiàn)此諸多的功能,可以設(shè)計兩個結(jié)構(gòu)體:student和collage;student為運動員類型,在其中定義運動員所在的系sclass、姓名name、性別sex、項目

7、名xname、名次range和分?jǐn)?shù)score。Collage為系類型,在其中定義了系的名稱xxname、男團體總分manscore、女團體總分womanscore、總分score、編號xnum及取得名次的人數(shù)student xiangmu【】和指針*next;這樣運動員的信息基本上都已包含,由于此題目中輸入數(shù)據(jù)比較麻煩我選擇了文件讀出和寫入來實現(xiàn)功能(1),從文件中讀取前三名或前五名的信息。功能二計算各學(xué)校總分,分別計算出男團體總分mz

8、ongfen()、女團體總分wzongfen()和總分zongfen(),然后在初始化collage時,分別把它們賦</p><p>  void numordernode(){ // 按系的編號排序</p><p>  collage *p,*q,*t,*pq,*pn;</p><p>  t=L; //記錄表頭</p>

9、<p>  for(p=t->next ,q=p->next;p->next ;t=t->next ,p=p->next ){ </p><p>  for(pq=p,q=p->next ;q;q=q->next ){</p><p><b>  // </b></p><p>  if(p

10、->xnum <q->xnum ){</p><p>  t->next =q;</p><p>  pn=p->next ;</p><p>  p->next =q->next ;</p><p>  if(pn==q){ //當(dāng)p和q相鄰時 </p>&

11、lt;p>  q->next =p;</p><p><b>  }</b></p><p>  else{ // 當(dāng)p和q不相鄰時</p><p>  q->next =pn;</p><p>  pq->next =p;</p><p&g

12、t;<b>  }</b></p><p>  p=t->next ; // 指針后移</p><p>  q=pq->next ;</p><p><b>  }</b></p><p>  pq=q; //pq指向q<

13、;/p><p>  if(!q) //如果q 為空 跳出</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b&g

14、t;  }</b></p><p>  功能四查詢某個學(xué)校某個項目的情況,用普通查找,用兩個控制語句即可。按項目號查詢前三或前五名的情況,只需一個控制語句就可以了。其代碼如下:</p><p>  void findsx(char sch[],char schxm[]){ //輸入系名,和項目名查找運動員信息</p><p>  int

15、i=0,flag=0;</p><p>  for(;i<42;i++)</p><p>  if(strcmp(xm.xiangmu[i].sclass,sch)==0&&strcmp(xm.xiangmu[i].xname,schxm)==0){</p><p><b>  flag=1;</b></p>

16、<p>  printf("運動員的班級、姓名、性別、參加的項目名稱、名次和成績:\n\t");</p><p>  printf(" %5s %10s %10s %10s %5d%5d\n",xm.xiangmu[i].sclass,xm.xiangmu[i].name,xm.xiangmu[i].sex,xm.xiangmu[i].xname,xm.xian

17、gmu[i].range,xm.xiangmu[i].score);</p><p><b>  }</b></p><p>  if(flag!=1)</p><p>  printf("\t沒有此信息,請從新輸入!\n");</p><p><b>  }</b></p

18、><p>  void findxm(char sxm[],int number){ //按項目號查找前三名或前五名的成績信息</p><p>  int i=0,j=0;</p><p>  printf("項目 %s 前 %d 名的學(xué)校為:\n",sxm,number);</p><p>  for(

19、;i<number;i++){</p><p>  for(j=0;j<42;j++){</p><p>  if(strcmp(xm.xiangmu[j].xname,sxm)==0&&xm.xiangmu[j].range==i+1)</p><p>  printf("第 %d 名 學(xué)校 %s 性別 %s\n&q

20、uot;,i+1,xm.xiangmu[j].sclass,xm.xiangmu[j].sex);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  程序運行結(jié)果如下:&

21、lt;/b></p><p><b>  主菜單:</b></p><p><b>  查找功能</b></p><p>  輸入校名和項目名查找c2 run 查找沒有此人信息 c3 run 查找則有c3 li man run 2 4 </p><p>  和 c

22、3 zhang man run 3 3 兩個信息</p><p>  輸入項目名 查找 前三或前五名的學(xué)校的信息</p><p>  Jump 5 </p><p><b>  查找信息如上圖</b></p><p><b>  排序:</b></p><p

23、><b>  按系編號排序</b></p><p><b>  按男女團體總分排序</b></p><p><b>  用戶使用說明</b></p><p>  在主菜單中有四種選擇:選擇‘1’時為按學(xué)校編號查找。選擇‘2’為按項目編號查找前三或前五名。選擇‘3’為排序,在排序中又有子菜單,在子

24、菜單中‘1’為按學(xué)校編號輸出,‘2’為按男團體總分排序輸出,‘3’為按女團體排序輸出,‘4’為總分排序輸出,‘0’未推出子菜單。選擇‘0’為推出主菜單。</p><p>  參考文獻:《數(shù)據(jù)結(jié)構(gòu)》《c語言》</p><p>  附錄:#include<stdio.h></p><p>  #include<malloc.h></p>

25、;<p>  #include<string.h></p><p>  #include<stdlib.h></p><p>  #define m 5 //男項目數(shù)</p><p>  #define w 5 //女項目數(shù)</p><p

26、>  #define maxlen 10 //總項目數(shù)</p><p>  #define n 10 //總參賽系的數(shù)目</p><p>  typedef struct node1{ </p><p>  char sclass[5]; //運動員所在的系 </p

27、><p>  char name[5]; //運動員的姓名</p><p>  char sex[5]; //性別</p><p>  char xname[5]; //參賽項目名</p><p>  int range; //名次</p>

28、<p>  int score; //分?jǐn)?shù)</p><p><b>  }student;</b></p><p>  typedef struct node2{ </p><p>  char xxname[5]; //系的名稱</p><p>  int x

29、num; //系的編號</p><p>  int manscore; //男團體總分</p><p>  int womanscore; // 女團體總分</p><p>  int totalscore; //總分</p><p>  student xi

30、angmu[42]; //取得名次的人數(shù) </p><p>  struct node2 *next; </p><p><b>  }collage;</b></p><p>  collage xm; //collage 的變量</p><p>  colla

31、ge *L; // collage 的指針</p><p>  void input(){ //文件輸入函數(shù)</p><p><b>  int i;</b></p><p>  FILE *fp; // 文件指針</p><p&

32、gt;  if((fp=fopen("data1.txt","r"))==0){</p><p>  printf("Cannot open file data1.txt.\n");</p><p>  printf("Press any key to exit!");</p><p>

33、<b>  exit(0);</b></p><p><b>  }</b></p><p>  printf("\n\t\t正在讀取data1.txt文件...\n");</p><p>  for(i=0;i<42;i++) //讀出</p><p>

34、  fscanf(fp,"%s%s%s%s%d%d",xm.xiangmu[i].sclass,xm.xiangmu[i].name,xm.xiangmu[i].sex,xm.xiangmu[i].xname,&xm.xiangmu[i].range,&xm.xiangmu[i].score);</p><p>  fclose(fp);</p><p>

35、;  printf("\n\t\t讀取文件data1.txt結(jié)束!\n");</p><p><b>  }</b></p><p>  int mzongfen(char a[]){ //求男團體總分</p><p>  int i,mscore; </p>

36、<p><b>  mscore=0;</b></p><p>  for(i=0;i<42;i++)</p><p>  if(strcmp(xm.xiangmu[i].sclass,a)==0&&xm.xiangmu[i].sex[0]=='m')</p><p>  mscore=msco

37、re+xm.xiangmu[i].score;</p><p>  return(mscore);</p><p><b>  }</b></p><p>  int wzongfen(char a[]){ //求女團體總分</p><p>  int i,mscore;</p>

38、<p><b>  mscore=0;</b></p><p>  for(i=0;i<42;i++)</p><p>  if(strcmp(xm.xiangmu[i].sclass,a)==0&&xm.xiangmu[i].sex[0]=='w')</p><p>  mscore=mscor

39、e+xm.xiangmu[i].score;</p><p>  return(mscore);</p><p><b>  }</b></p><p>  int zongfen(char a[]){ // 求總分</p><p>  int i,zscore;</p><

40、;p><b>  zscore=0;</b></p><p>  for(i=0;i<42;i++)</p><p>  if(strcmp(xm.xiangmu [i].sclass ,a)==0)</p><p>  zscore=zscore+xm.xiangmu[i].score;</p><p> 

41、 return(zscore);</p><p><b>  }</b></p><p>  void creatnode(){ //初始化鏈表L</p><p>  collage *S,*R;</p><p>  int num,i=0;</p><p>  c

42、har name[5];</p><p><b>  FILE *fp;</b></p><p>  L=(collage *)malloc(sizeof(collage));</p><p>  L->next=NULL;</p><p><b>  R=L;</b></p>

43、<p>  if((fp=fopen("data2.txt","r"))==0){</p><p>  printf("Cannot open file data2.txt.\n");</p><p>  printf("Press any key to exit!");</p><

44、;p><b>  exit(0);</b></p><p><b>  }</b></p><p>  printf("\n\t\t正在讀取data2.txt文件...\n");</p><p>  while(i<n){</p><p>  fscanf(fp,&q

45、uot;%d%s",&num,name);</p><p>  S=(collage *)malloc(sizeof(collage));</p><p>  S->xnum=num;</p><p>  strcpy(S->xxname,name);</p><p>  S->totalscore=zon

46、gfen(S->xxname);</p><p>  S->womanscore=wzongfen(S->xxname); </p><p>  S->manscore=mzongfen(S->xxname);</p><p>  S->next=NULL;</p><p>  R->next=S;&

47、lt;/p><p><b>  R=S;</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p>  printf("\n\t\t讀取文件data2.txt結(jié)束!\n");</p><p&

48、gt;<b>  }</b></p><p>  void numordernode(){ // 按系的編號排序</p><p>  collage *p,*q,*t,*pq,*pn;</p><p>  t=L; //記錄表頭</p><p>  for(p=t->next ,q=p

49、->next;p->next ;t=t->next ,p=p->next ){ </p><p>  for(pq=p,q=p->next ;q;q=q->next ){</p><p><b>  // </b></p><p>  if(p->xnum <q->xnum ){</p

50、><p>  t->next =q;</p><p>  pn=p->next ;</p><p>  p->next =q->next ;</p><p>  if(pn==q){ //當(dāng)p和q相鄰時 </p><p>  q->next =p;</p>

51、;<p><b>  }</b></p><p>  else{ // 當(dāng)p和q不相鄰時</p><p>  q->next =pn;</p><p>  pq->next =p;</p><p><b>  }</b></p>

52、;<p>  p=t->next ; // 指針后移</p><p>  q=pq->next ;</p><p><b>  }</b></p><p>  pq=q; //pq指向q</p><p>  if(!q)

53、 //如果q 為空 跳出</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

54、gt;  manorder(){ //男團體總分排序</p><p>  collage *p,*q,*t,*pq,*pn;</p><p><b>  t=L;</b></p><p>  for(p=t->next ,q=p->next;p->next ;t=t->n

55、ext ,p=p->next ){</p><p>  for(pq=p,q=p->next ;q;q=q->next ){</p><p>  if(p->manscore<q->manscore ){</p><p>  t->next =q;</p><p>  pn=p->next ;&

56、lt;/p><p>  p->next =q->next ;</p><p>  if(pn==q){</p><p>  q->next =p;</p><p><b>  }</b></p><p><b>  else{</b></p>&l

57、t;p>  q->next =pn;</p><p>  pq->next =p;</p><p><b>  }</b></p><p>  p=t->next ;</p><p>  q=pq->next ;</p><p><b>  }</b&

58、gt;</p><p><b>  pq=q;</b></p><p><b>  if(!q)</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b> 

59、 }</b></p><p><b>  }</b></p><p>  womanorder(){ //女團體總分排序</p><p>  collage *p,*q,*t,*pq,*pn;</p><p><b>  t=L;</b>&l

60、t;/p><p>  for(p=t->next ,q=p->next;p->next ;t=t->next ,p=p->next ){</p><p>  for(pq=p,q=p->next ;q;q=q->next ){</p><p>  if(p->womanscore<q->womanscore )

61、{</p><p>  t->next =q;</p><p>  pn=p->next ;</p><p>  p->next =q->next ;</p><p>  if(pn==q){</p><p>  q->next =p;</p><p><b&

62、gt;  }</b></p><p><b>  else{</b></p><p>  q->next =pn;</p><p>  pq->next =p;</p><p><b>  }</b></p><p>  p=t->next ;&

63、lt;/p><p>  q=pq->next ;</p><p><b>  }</b></p><p><b>  pq=q;</b></p><p><b>  if(!q)</b></p><p><b>  break;</b&

64、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  totalorder(){ //總分排序</p><p>

65、  collage *p,*q,*t,*pq,*pn;</p><p><b>  t=L;</b></p><p>  for(p=t->next ,q=p->next;p->next ;t=t->next ,p=p->next ){</p><p>  for(pq=p,q=p->next ;q;q=q-

66、>next ){</p><p>  if(p->totalscore<q->totalscore ){</p><p>  t->next =q;</p><p>  pn=p->next ;</p><p>  p->next =q->next ;</p><p> 

67、 if(pn==q){</p><p>  q->next =p;</p><p><b>  }</b></p><p><b>  else{</b></p><p>  q->next =pn;</p><p>  pq->next =p;</p

68、><p><b>  }</b></p><p>  p=t->next ;</p><p>  q=pq->next ;</p><p><b>  }</b></p><p><b>  pq=q;</b></p><p&

69、gt;<b>  if(!q)</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>&

70、lt;p>  void findsx(char sch[],char schxm[]){ //輸入系名,和項目名查找運動員信息</p><p>  int i=0,flag=0;</p><p>  for(;i<42;i++)</p><p>  if(strcmp(xm.xiangmu[i].sclass,sch)==0&&a

71、mp;strcmp(xm.xiangmu[i].xname,schxm)==0){</p><p><b>  flag=1;</b></p><p>  printf("運動員的班級、姓名、性別、參加的項目名稱、名次和成績:\n\t");</p><p>  printf(" %5s %10s %10s %10s

72、 %5d%5d\n",xm.xiangmu[i].sclass,xm.xiangmu[i].name,xm.xiangmu[i].sex,xm.xiangmu[i].xname,xm.xiangmu[i].range,xm.xiangmu[i].score);</p><p><b>  }</b></p><p>  if(flag!=1)</p&g

73、t;<p>  printf("\t沒有此信息,請從新輸入!\n");</p><p><b>  }</b></p><p>  void findxm(char sxm[],int number){ //按項目號查找前三名或前五名的成績信息</p><p>  int i=0,j=0;&l

74、t;/p><p>  printf("項目 %s 前 %d 名的學(xué)校為:\n",sxm,number);</p><p>  for(;i<number;i++){</p><p>  for(j=0;j<42;j++){</p><p>  if(strcmp(xm.xiangmu[j].xname,sxm)

75、==0&&xm.xiangmu[j].range==i+1)</p><p>  printf("第 %d 名 學(xué)校 %s 性別 %s\n",i+1,xm.xiangmu[j].sclass,xm.xiangmu[j].sex);</p><p><b>  }</b></p><p><b&

76、gt;  }</b></p><p><b>  }</b></p><p>  void output(){ //信息輸出</p><p><b>  int i=0;</b></p><p>  collage *q;</p><p>

77、<b>  q=L;</b></p><p>  q=q->next ;</p><p>  printf("系的編號、名稱、男團體總分、女團體總分、和總分:\n");</p><p>  while(i<n){</p><p>  printf("%5d%5s%5d%5d%5d

78、\n",q->xnum,q->xxname,q->manscore,q->womanscore,q->totalscore);</p><p>  q=q->next;</p><p><b>  i++;</b></p><p><b>  }</b></p>

79、<p><b>  }</b></p><p>  ordernode(){ //排序函數(shù)選擇</p><p><b>  int flag;</b></p><p><b>  for(;;){</b></p><p>  printf("*

80、*************************請 選 擇************************\n");</p><p>  printf("*******************1--按 系 編 號 排 序 輸 出****************\n");</p><p>  printf("******************

81、*2--按男生團體總分排序輸 出****************\n");</p><p>  printf("*******************3--按女生團體總分排序輸 出****************\n");</p><p>  printf("*******************4--按 系 總 分 排 序 輸 出*********

82、*******\n");</p><p>  printf("*******************0-- 退 出 ************************\n");</p><p>  scanf("%d",&flag);</p><p>  switch(flag){</p&

83、gt;<p>  case 1:numordernode();output();break;</p><p>  case 2:manorder(); output();break;</p><p>  case 3:womanorder(); output();break;</p><p>  case 4:totalorder(); ou

84、tput();break;</p><p><b>  }</b></p><p>  if(flag>4)</p><p>  printf("error!");</p><p>  if(flag==0)</p><p><b>  break;</b

85、></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main(){</p><p>  char sch[5],schxm[5],sxm[5];</p><p>  int number,flag;</

86、p><p><b>  input();</b></p><p>  creatnode();</p><p><b>  for(;;){</b></p><p>  printf("*************************請 選 擇**********************

87、******\n") ;</p><p>  printf("*******************1--按 系 編 號 查 找 項 目******************\n");</p><p>  printf("*******************2--按項目編號查找前三、前五名***************\n");</p

88、><p>  printf("*******************3-- 排 序 ******************************\n");</p><p>  printf("*******************0-- 退 出 ******************************\n");</p>

89、<p>  scanf("%d",&flag);</p><p>  switch(flag){</p><p>  case 1:printf("\n輸入系名稱、要查找的項目名:\n");</p><p>  scanf("%s%s",sch,schxm);</p><

90、;p>  findsx(sch,schxm);</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  printf("項目run,walk,jump分前五名/ 項目swim,ball分前三名");</p><p

91、>  printf("\n輸入要查找的項目名稱、要顯示的名次的個數(shù):\n");</p><p>  scanf("%s%d",sxm,&number);</p><p>  findxm(sxm,number);</p><p><b>  break;</b></p><

92、;p>  case 3: ordernode(); break;</p><p><b>  }</b></p><p>  if(flag>3)</p><p>  printf("error!");</p><p>  if(flag==0)</p><p>

溫馨提示

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

最新文檔

評論

0/150

提交評論