找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5175|回復(fù): 0
收起左側(cè)

C語言程序設(shè)計-課程設(shè)計論文

[復(fù)制鏈接]
ID:76244 發(fā)表于 2015-4-7 01:05 | 顯示全部樓層 |閱讀模式

 

 

 

中 國 地 質(zhì) 大 學(xué)

C語言程序設(shè)計

 

 

 

課程名 計算機(jī)高級語言課程設(shè)計(C)

教師姓                  

本科生姓名                  

本科生學(xué)號   20121002504         

本科生專業(yè)   地球化學(xué)            

所在院   地球科學(xué)學(xué)院        

類別:    .      本科生              

日期:          2015年1月23    

 

 

 

 

 

 

課程設(shè)計評語

對課程論文的評語:

 

平時成績:

課程論文成績:

總 成 績:

評閱人簽名:

 

注:1、無評閱人簽名成績無效;

2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;

3、如有平時成績,必須在上面評分表中標(biāo)出,并計算入總成績。

 

1.題目要求

題目:歌星大賽獎

要求:

(1)在歌星大賽中,有十個評委為參賽的選手打分。分?jǐn)?shù)為1-100分。選手最后得分為:去掉一個最高分,去掉一個最低分其余8個分?jǐn)?shù)的平均值。試寫一段程序?qū)崿F(xiàn)。

(2)同時對評委評分進(jìn)行判斷,即在10個評委中找出最公平(評分最接近平均分)的和最不公平的(即與平均分的差距最大)的評委。

2.需求分析

這個問題的第一個算法要求簡單,但是要注意在程序中判斷最大,最小的變量是如何賦值;第二個要求要考慮效率,要用到排序技術(shù)。注意,要用到文件儲存信息。

3.總體設(shè)計

評分系統(tǒng)需要錄入歌星的信息,輸入10個評委的評分,然后求出相應(yīng)的平均數(shù),再求出最公平的和最不公平的評委,保存再相應(yīng)的文件夾中。分為錄入,計算,瀏覽,修改,刪除,查詢模塊。


 



 

 數(shù)據(jù)結(jié)構(gòu)體設(shè)計:定義結(jié)構(gòu)體變量struct people,進(jìn)行數(shù)據(jù)輸入,輸出,保存,修改等功能。

     其中定義M=50,指該數(shù)據(jù)庫最多能放50組數(shù)據(jù)。N為可變數(shù)據(jù)組數(shù),即當(dāng)前數(shù)據(jù)組數(shù)。

4.詳細(xì)設(shè)計

4.1主函數(shù)

main()

{

void re_file();            //讀文件

int sele;

sele=1;

while(sele)

{

system("cls");

printf("\n\n");               //顯示界面

printf("    ****************************************\n");

printf("    *                                      *\n");

printf("    *      1:瀏覽                  2:刪除  *\n");

printf("    *      3:增加                  4:修改  *\n");

printf("    *      5:退出                  6:計算  *\n");

printf("    *      7查詢                           *\n");

printf("    *                                      *\n");

printf("    ****************************************\n");

printf("\n\n    請輸入選擇功能序號:");

scanf("%d",&sele);       //通過輸入按鍵來判斷執(zhí)行那個步驟

switch(sele)

{

case 1:display();break;

case 2:display();delete1();break;

case 3:apepend();display();break;

case 4:display();modify();break;

case 5:sele=0;break;

case 6:caculate();display();break;

case 7:query();break;

}

wr_file();    //寫文件

printf("\n按任意鍵繼續(xù)\n");

getch();

}

}

4.2各功能模塊設(shè)計

4.2.1數(shù)據(jù)讀入模塊

  /*先定義一個結(jié)構(gòu)體struct  people,包含每位歌星的評分信息,在用可讀的方式打開文件zhongmo.txt.*/

struct people

{

 char name[40];

 char xuhao;

 float pinjunfen;

 float pingfen[10];

 char xuanpingwei[2];

}ss[M]; 

/*M為最多的明星個數(shù),程序中采用宏定義的方式,可以隨時改變源程序中定義的修改值。本程序中宏定義:#define M 50。*/

//數(shù)據(jù)讀入模塊

void re_file()

{

  char i;

  FILE *fp;

  fp=fopen("zhangmo.txt","r");

  while(fscanf(fp,"%s%s%d%d%d",ss[i].name,&ss[i].xuhao,&ss[i].pinjunfen,

         ss[i].xuanpingwei[0],ss[i].xuanpingwei[1]

         )!=EOF)  i++;

  fclose(fp);

}

/*本程序為了簡化計算結(jié)果,分?jǐn)?shù)采用100進(jìn)制整數(shù)形式,如果需要修改,可以定義為float類型。*/

4.2.2計算模塊

本程序的目的是為了計算出每位明星的平均分和最佳或者最差評分員。采用冒泡法來計算最小值和最大值,從而判斷平均值。在判斷最好和最差評分員。

void caculate()

{char fenshu[10],zhongjinazhi;

 int zhonggong=0;

 int i,j,k;

 int zuixiaozhi,zuidazhi;

 for(k=0;k<N;k++)

{

 for(i=0;i<10;i++)

 fenshu[i]=ss[k].pingfen[i];

 

 for(i=0;i<9;i++)

 for(j=i;j<9;j++)

 { 

     if(fenshu[i]>fenshu[j+1])

       {

              zhongjinazhi=fenshu[i];

         fenshu[i]=fenshu[j+1];

         fenshu[j+1] =zhongjinazhi;      

       }

 }

for(i=1;i<9;i++)

zhonggong=zhonggong+fenshu[i];

zhonggong=zhonggong/8;

ss[k].pinjunfen=zhonggong;

zuidazhi=abs(zhonggong-ss[k].pingfen[0])

for(i=1;i<10;i++)

{

 if(abs(zhonggong-ss[k].pingfen[i])>zuidazhi)

       j=i;

}

ss[k].xuanpingwei[0]=j;//最差評委

zuixiaozhi=abs(zhonggong-ss[k].pingfen[0]);

for(i=1;i<10;i++)

{

  if(zuixiaozhi>abs(zhonggong-ss[k].pingfen[i]))

  {

    zuixiaozhi=abs(zhonggong-ss[k].pingfen[i]);

       j=i;

  }

}

ss[k].xuanpingwei[1]=j;//最好評委

 }

}

4.2.3增加模塊

從鍵盤添加新的明星信息和評分

void apepend()

{

  int n,i,j;

  printf("\n增加歌星人數(shù)");

  scanf("%d",&n);  N=N+n;      //新增人數(shù)疊加,不影響原來的明星

  printf("\n現(xiàn)在,輸入相關(guān)信息:\n");

  for(i=1;i<n+1;i++)

  {

       printf("歌星:");

    scanf("%s",&ss[N-n-1+i].name);

       printf("序號:"); 

       scanf("%s",&ss[N-n-1+i].xuhao);

       printf("評委打分:");

       for(j=0;j<10;j++)

       { 

              printf("評委%d:",j+1);

           scanf("%d",&ss[N-n-1+i].pingfen[j]);

       }

  }

}

4.2.4修改模塊

該程序的功能是根據(jù)姓名或者序號修改明星的評分,序號,或者姓名。

void modify()

{

 int i,j=-1,t;

 char m[40],d[10];

 printf("\n\n\n");

 printf("    *******************************************\n");

 printf("    *                                         *\n");

 printf("    *  1:姓名         2:序號                  *\n");

 printf("    *                                         *\n");

 printf("    *******************************************\n");

 printf("請輸入修改選項:");

 scanf("%d",&i);

 if(i==1)

 {

   printf("請輸入歌星:");

   scanf("%s",&m);

   for(i=0;i<N;i++)

   if(strcmp(m,ss[i].name)==0)

          j=i;

 }

else if(i==2)

{

  printf("請輸入序號:");

  scanf("%s",&d);

  for(i=0;i<N;i++)

       if(strcmp(d,ss[i].xuhao)==0)

                j=i;

}

if(j==-1)

printf("沒有找到!\n");

else {

   printf("序號  歌星    評委1   2   3   4   5   6   7   8   9  10  平均分最差評委最好評委\n");

       printf("%3s%6s%8d%5d%5d%4d%4d%4d%4d%4d%4d%4d%8d%8d%6d\n",ss[j].xuhao,ss[j].name,

              ss[j].pingfen[0],ss[j].pingfen[1],ss[j].pingfen[2],ss[j].pingfen[3],

              ss[j].pingfen[4],ss[j].pingfen[5],ss[j].pingfen[6],ss[j].pingfen[7],

              ss[j].pingfen[8],ss[j].pingfen[9],ss[j].pinjunfen,ss[j].xuanpingwei[0],

              ss[j].xuanpingwei[1]);

}

printf("\n\n");

printf("     ********************************************************************\n");

printf("     *                                                                  *\n");

printf("     *        1:序號           2:歌星名                 3:評分        *\n");

printf("     *                                                                  *\n");

printf("     ********************************************************************\n");

scanf("%d",&t);

switch(t)

{

    case 1:printf("序號改為:");scanf("%s",&ss[j].xuhao);break;

       case 2:printf("姓名改為:");scanf("%s",ss[j].name);break;

       case 3:printf("評分改為:");

                 {

                  for(i=0;i<10;i++)

                     {

                        printf("評委%d",i+1);

                       scanf("%f",&ss[i].pingfen[i]);

                     }

                 }

              break;

}

}

4.2.5刪除模塊

該程序的功能是根據(jù)序號或者明星姓名刪除某位明星的評分?jǐn)?shù)據(jù)。

void delete1()

{

int i,j=-1;

char m[40],d[10];

printf("刪除模塊:");

printf("\n\n");

printf("     ******************************************************************\n");

printf("     *                                                                *\n");

printf("     *        1:歌星名          2:序號                                *\n");

printf("     *                                                                *\n");

printf("     ******************************************************************\n");

printf("輸入刪除選項:\n");

scanf("%d",&i);

if(i==1)

{

 printf("輸入歌星名:");

 scanf("%s",m);

 for(i=0;i<N;i++)

       if(strcmp(m,ss[i].name)==0)

              j=i;

}

if(i==2)

{

 printf("輸入序號:");

 scanf("%s",d);

 for(i=0;i<N;i++)

       if(strcmp(d,ss[i].xuhao)==0)

              j=i;

}

 

if(j!=-1)

{

  N=N-1;

  for(i=j;i<=N&&j!=-1;i++)

         ss[i]=ss[i+1];

}

else if(j==-1)

printf("沒有找到!\n");

}

4.2.6瀏覽模塊

該模塊的功能是顯示所有的明星評分?jǐn)?shù)據(jù)。

void display()

{

int i,j;

system("cls");

  printf("序號  歌星    評委1   2   3   4   5   6   7   8   9  10  平均分最差評委最好評委\n");

for(j=0,i=1;j<N;i++,j++)

{                                                                                        printf("%3s%6s%8d%5d%5d%4d%4d%4d%4d%4d%4d%4d%8d%8d%6d\n",ss[j].     xuhao,ss[j].name,

              ss[j].pingfen[0],ss[j].pingfen[1],ss[j].pingfen[2],ss[j].pingfen[3],

              ss[j].pingfen[4],ss[j].pingfen[5],ss[j].pingfen[6],ss[j].pingfen[7],

              ss[j].pingfen[8],ss[j].pingfen[9],ss[j].pinjunfen,ss[j].xuanpingwei[0],

              ss[j].xuanpingwei[1]);

   if(i%10==0)

   {

          printf("按任意鍵繼續(xù)....");

          getch();

          puts("\n");

  printf("序號  歌星    評委1   2   3   4   5   6   7   8   9  10  平均分最差評委最好評委\n");

   }

}

}

4.2.7查詢模塊

通過輸入序號或者歌星名,調(diào)取歌星的信息

void query()

{

int i,j[20]={-1},d,k,t=0;

char m[20];

printf("查詢模塊:");

printf("\n\n");

printf("   ********************************************************************\n");

printf("   *                                                                  *\n");

printf("   *        1:歌星名                     2:序號                      *\n");

printf("   *                                                                  *\n");

printf("   ********************************************************************\n");

printf("輸入查詢選項:\n");

scanf("%d",&k);

if(k==1)

{

  printf("請輸入姓名:");

  scanf("%s",&m);

  for(i=0;i<N;i++)

         if(strcmp(m,ss[i].name)==0)

         {

           j[t]=i;t=t+1;

         }

         else if(k==2)

     {

       printf("請輸入序號");

       scanf("%d",&d);

        for(i=0;i<N;i++)

       if(d==ss[i].xuhao)

          {

           j[t]=i;t++;

          }

      if(j[0]==-1&&t==0)

       printf("沒有找到!\n");

      if(j[0]!=-1&&t!=0)

         {

       printf("序號  歌星    評委1   2   3   4   5   6   7   8   9  10  平均分最差               評委最好評委\n");

 for(i=0;i<t;i++)   printf("%3s%6s%8d%5d%5d%4d%4d%4d%4d%4d%4d%4d%8d%8d%6d\n",ss[i].xuhao,ss[i].name,

              ss[i].pingfen[0],ss[i].pingfen[1],ss[i].pingfen[2],ss[i].pingfen[3],

              ss[i].pingfen[4],ss[i].pingfen[5],ss[i].pingfen[6],ss[i].pingfen[7],

              ss[i].pingfen[8],ss[i].pingfen[9],ss[i].pinjunfen,ss[i].xuanpingwei[0],

              ss[i].xuanpingwei[1]);

         }

   }

}

}

5上機(jī)操作

5.1主界面顯示:

圖5-1主界面

5.2瀏覽模塊:按1進(jìn)入

圖5-2瀏覽模塊

5-3增加模塊:按3

圖5-3增加模塊

 

5-4刪除模塊:刪除歌星1的數(shù)據(jù)

圖5-4刪除模塊

5.5修改模塊:按2修改。已將序號2變成了序號33.

圖5-5修改模塊

5.6刪除模塊:已將序號為33的學(xué)員信息刪除。

圖5-6刪除模塊

 

5.7計算模塊:計算當(dāng)前輸入信息,判斷平均分,最好評委,最差評委。

圖5-7計算模塊

5.8查詢模塊,可通過序號或者歌星名查詢信息。

圖5-8-1查詢模塊

顯示相應(yīng)的值:

5-8-2查詢模塊

5.9退出程序:

圖5-9退出程序

5-10保存的文件夾

6.總結(jié)

通過對本程序的寫入,運行,調(diào)試,我知道如何將分離的模塊函數(shù)綜合起來,將C語言課程中學(xué)到的理論知識運用到實際中,編寫一個小小的明星評分系統(tǒng),很有些成就感。

在運行程序中,我有幾次忘了改文件的輸出格式,導(dǎo)致輸出結(jié)構(gòu)體亂碼,文件的寫入方式不對,也導(dǎo)致文件不能打開。明星評分系統(tǒng)寫的函數(shù)不對,也導(dǎo)致輸出的結(jié)果不對,最后改對了。

7.致謝

     感謝學(xué)校能給我們這次機(jī)會實習(xí),有幸接觸到計算機(jī)編程,雖然和專業(yè)不大關(guān)系,但我們學(xué)習(xí)到了編程的奧秘和樂趣。

參考文獻(xiàn)

[1] 譚浩強(qiáng). C程序設(shè)計(第三版)[M]. 北京: 清華大學(xué)出版社, 2005.

[2] 張冬梅, 劉遠(yuǎn)興, 陳晶, 等. 基于PBL的C語言課程設(shè)計及學(xué)習(xí)指導(dǎo)[M]. 北京: 清華大學(xué)出版社, 2011.

[3] 網(wǎng)絡(luò)資源……

 

 

相關(guān)帖子

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表