C語言實(shí)現(xiàn)的歌唱比賽評分系統(tǒng)設(shè)計方案_第1頁
C語言實(shí)現(xiàn)的歌唱比賽評分系統(tǒng)設(shè)計方案_第2頁
C語言實(shí)現(xiàn)的歌唱比賽評分系統(tǒng)設(shè)計方案_第3頁
C語言實(shí)現(xiàn)的歌唱比賽評分系統(tǒng)設(shè)計方案_第4頁
C語言實(shí)現(xiàn)的歌唱比賽評分系統(tǒng)設(shè)計方案_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《軟件設(shè)計實(shí)踐》

匯報

學(xué)院:中北大學(xué)信息商務(wù)學(xué)院

專業(yè):__________通信工程專業(yè)______________

題目:_________歌唱比賽評分系統(tǒng)___________

王澤

學(xué)生姓名:________郭世杰___________

賀鑫

完畢時間:________完23年1月18FI_____________

指導(dǎo)教師:魯旭濤姚愛琴李沅

目錄

課程設(shè)計任務(wù)書............................3

1需求分析......................................5

1.1題目分析..................................5

1.2系統(tǒng)分析..................................5

2設(shè)計概要......................................6

3程序設(shè)計及模塊分工明細(xì)........................7

3.1人員模塊分工..............................7

3.2人員模塊分工明細(xì)..........................7

4測試成果.....................................47

4.1調(diào)試與測試...............................47

4.2測試成果截圖.............................48

設(shè)計總結(jié).......................................55

致謝..........................................56

參照文獻(xiàn).......................................57

附錄...........................................58

課程設(shè)計任務(wù)書

1設(shè)計目的

C語言是通信工程專業(yè)一門重要H勺專業(yè)技術(shù)課程,它是一門實(shí)踐性很強(qiáng)的課程。

軟件設(shè)計實(shí)踐課程是為配合c語言課程,對學(xué)生進(jìn)行全面綜合訓(xùn)練、與課堂教學(xué)、作業(yè)練

習(xí)題、上機(jī)試驗相輔時必不可少H勺一種教學(xué)環(huán)節(jié)。

運(yùn)用所學(xué)的C語言知識及其編程措施:構(gòu)造程序設(shè)計、數(shù)組、指針、構(gòu)造體、文獻(xiàn)操作等

內(nèi)容,通過布置具有一定難度的實(shí)際程序設(shè)計題目,規(guī)定學(xué)生獨(dú)立完畢所布置題目。在分析設(shè)

計過程中,規(guī)定學(xué)生養(yǎng)成良好的編程習(xí)慣,學(xué)會分析處理簡樸的實(shí)際問題,學(xué)會C語言的實(shí)際

調(diào)試技巧和措施,規(guī)定學(xué)生在教師的指導(dǎo)下逐漸完畢應(yīng)用程序的設(shè)計

2設(shè)計內(nèi)容和規(guī)定

有十個選手參與歌唱比賽,十個裁判對每個選手H勺演唱進(jìn)行打分,去掉一種最高分,去掉

一種最低分,剩余分?jǐn)?shù)的平均值作為每位選手最終的成績。

規(guī)定:

(1)采用構(gòu)造體定義每個選手的參賽編號,姓名以及十個裁判打出的分?jǐn)?shù);

(2)從鍵盤輸入每個選手的有關(guān)信息:參賽編號,姓名和十個得分;

(3)計算每位選手的最終得分,并按分?jǐn)?shù)由高到低排序;

(4)行詢功能:輸入?yún)①愡x手的編號或姓名,便可輸出該選手的得分以及排名;

以上功能采用菜單操作方式,即從鍵盤輸入1到3這三個數(shù),分別完畢以上(2)到(4)

W'J功能。

3設(shè)計工作任務(wù)及工作量的規(guī)定

?每個組員完畢自己的模塊設(shè)計。

?完畢一份設(shè)計闡明書。

?有對日勺口勺運(yùn)行成果及成果分析

1需求分析

1.1題目分析

軟件設(shè)計實(shí)踐課程是為配合C語言課程,對學(xué)生進(jìn)行全面綜合訓(xùn)練、與課堂教學(xué)、

作業(yè)練習(xí)題、上機(jī)式驗相輔的必不可少的I一種教學(xué)環(huán)節(jié)。

運(yùn)用所學(xué)的JC語言知識及其編程措施:構(gòu)造程序設(shè)計、數(shù)組、指針、構(gòu)造體、文獻(xiàn)

操作等內(nèi)容,通過布置具有一定難度打勺實(shí)際程序設(shè)計題目,規(guī)定學(xué)生獨(dú)立完畢所布置題

目。在分析設(shè)計過程中,規(guī)定學(xué)生養(yǎng)成良好的編程習(xí)慣,學(xué)會分析處理簡樸口勺實(shí)際問

題,學(xué)會C語言打勺實(shí)際調(diào)試技巧和措施來處理實(shí)際問題。

1.2系統(tǒng)分析

歌唱比賽評分系統(tǒng)包括:

?菜單:系統(tǒng)以菜單方式工作,界面友好,易于操作。

?錄入:在每個輸入前均有詳細(xì)分類和提醒,簡樸明了,根據(jù)提醒輸入?yún)①愡x手號

數(shù),姓名,各個評委打提成績。

?查詢:顧客輸入查詢條件,系統(tǒng)規(guī)則地在界面顯示查詢成果,不光可以輸入號數(shù),

查詢到該選手唁息,每位評委打分;還可以選擇排名查詢,顯示日勺數(shù)據(jù)全面。

?修改:在己經(jīng)有數(shù)據(jù)的基礎(chǔ)上實(shí)現(xiàn)對每位選手口勺信息,以及評分口勺修改。

?排名:運(yùn)用冒泡程序?qū)?shù)組進(jìn)行排序,刪除?種最高與最低然后進(jìn)行講剩余的值平

均,得出選手最終得分,再根據(jù)分?jǐn)?shù)高卜.排名。

?儲存:對于已經(jīng)輸入的數(shù)據(jù),己文檔的信息儲存到電腦硬盤中,實(shí)現(xiàn)永久儲存。

系統(tǒng)的程序設(shè)計環(huán)境:

本系統(tǒng)使用VisualC++作為程序開發(fā)工具。VisualC++是基于對象的迅速應(yīng)用程序

開發(fā)工具,是當(dāng)今最強(qiáng)大、最靈活的應(yīng)用程序開發(fā)工具之一,具有良好的可視化應(yīng)用程

序開發(fā)環(huán)境和強(qiáng)大的可擴(kuò)展數(shù)據(jù)庫功能。運(yùn)用VisualC++提供的可視化組件庫進(jìn)行編

程,可以迅速、高效地開發(fā)出基fWindows環(huán)境的各類應(yīng)用程序。VisualC++語言口勺特

點(diǎn)是面向?qū)ο笤O(shè)計的程序語言,VisualC++的J基礎(chǔ)編程語言是具有面向?qū)ο筇匦缘恼Z

言,具有代碼穩(wěn)定、可讀性好、編譯速度快等長處,并將面向?qū)ο蟮母拍钜浦驳搅薈語

言中,使這種基礎(chǔ)語言有了新的發(fā)展空間。與其他編程軟件相比,尤其是在數(shù)據(jù)庫和網(wǎng)

絡(luò)應(yīng)用方面,VisualC++具有簡便易用、靈活高效日勺特點(diǎn)。

開發(fā)軟件一般要通過修改源代碼、編譯、測試、再修改、再編譯、再測試等操作,

這些操作形成了一種開發(fā)循環(huán),因此迅速的編譯器可以大大地減少開發(fā)周期。Visual

C++正是建立在這種高效編譯器的基礎(chǔ)之上,是針時Windows口勺最快的高級語言代碼編

譯器,因此生成日勺代碼十分精練高效,使VisualC++程序的運(yùn)行速度更快。這也是使用

VisualC++作為程序設(shè)計開發(fā)語言日勺重要原因。

2設(shè)計概要

總體設(shè)計目冊):使用者可以運(yùn)用本系統(tǒng)進(jìn)行對選手信息以及評委評分的各項運(yùn)算操作,如

根據(jù)需求添加選信息,刪除選手信息,對選手得分進(jìn)行排名等。最終清晰完整的成果于屏幕

中。以便了評分操作,不僅節(jié)省時間,并且提高精確性,可以到達(dá)事半功倍口勺效果。

總體設(shè)計方略:本系統(tǒng)采用時是自頂向卜、層次化的模塊構(gòu)造。對高層模塊,采用以事務(wù)

為中心的設(shè)計方略,把一種大的I模塊逐漸分解成較小的相對簡樸的模塊。對低層模塊,采用以

變換為中心的設(shè)計方略。為了提高每個模塊的內(nèi)聚性、減少模塊間的耦合性,將每個模塊設(shè)計

成具有單一功能的模塊(即功能內(nèi)聚),使模塊間H勺聯(lián)絡(luò)完全是通過主模塊的控制和調(diào)用來實(shí)

現(xiàn)(即非直接耦合)。

結(jié)合上述分析該系統(tǒng)應(yīng)包括如下模塊:選手信息瀏覽,選手信息錄入,選手信息保留,選

手成績查詢,選手信息修改,選手信息刪除。

選手?jǐn)?shù)據(jù):編號、姓名、成績、平均成績。

圖1.總體構(gòu)造圖

3程序設(shè)計及模塊分工明細(xì)

3.1人員模塊分工

王澤:瀏覽選手?jǐn)?shù)據(jù)browse0;查詢選手成績search();查詢選手信息print()。

郭世杰:菜單函數(shù)menu_select();修改函數(shù)update。;保留函數(shù)save。。

賀鑫:參賽選手宅息錄入creal();成績排序rank。;刪除函數(shù)del();

公共模塊:colorC>quit()>welcome()?

3.2人員模塊分工明細(xì)

?瀏覽選手?jǐn)?shù)據(jù)browse。

分析:實(shí)際為鏈表的遍歷,將頭節(jié)點(diǎn)時指針予以臨時節(jié)點(diǎn)pl,用while語句實(shí)現(xiàn)鏈

表日勺遍歷。

圖2.瀏覽選手?jǐn)?shù)據(jù)模塊

/*----------------------browse函數(shù)-------------------------------*/

voidbrowseO

(

SONGER_MESSAGE*pl;

if(head==NULL&&tail==NULL)

printf("\n目前信息記錄為空\n〃);

)

else

printf("\n你要瀏覽日勺選手信息如下\n〃);

printf('--------1--------\n〃);

printfC編號|姓名\n〃);

pl=head;

while(pl!=NULL)

printf('--------1--------\n〃);

printf("%-9d%-6s\n/?,pl->num,pl->name);

pl=pl->next;

}

printf('--------1--------\n〃);

)

}

?查詢選手成績search()

分析:提供詳細(xì)成績查詢,排名查詢的函數(shù)調(diào)用。其中各功能均采用菜單項選擇擇FJ勺方式。

圖3.查詢選手成績

search函數(shù)*/

voidsearch()

(

intc;

printf("\n請選擇查詢內(nèi)容:\n〃);

printfCl.選手詳細(xì)成績查詢2.選手排名查詢\n請輸入您的選擇:〃);

scanf(〃%d〃,&c);

switch(c)

case1:

system("cis");

print();

break;

case2:

system(〃cls〃);

rank();

break;

}

)

?查詢選手信息print。

分析:實(shí)際為輸出鏈表中的某個某個節(jié)點(diǎn),輸出某個選手的編號與姓名較為好實(shí)現(xiàn),諭出10

位評委成績則用時for語句來實(shí)現(xiàn)。

(-TART

輸入要查找的選手編號

NULL&&lail==-------------------------------------------------

目前記錄為空輸出表頭

WHILE(pl!=NULL)

4El£j^>num==seekuiuw)—

輸出編號姓名指向鏈表的下一種

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

輸出每個評委的分?jǐn)?shù)

平均分

Return

-^HUieaU=NULL&&check__________________________________________________

選手成績不存在

Enter

END

圖4.杳詢選手信息模塊

---print函數(shù)

voidprint()

SONGER_MESSAGE*pl=(SONGERMESSAGE*)malloc(LEN);

intcheck=0,i;

longseoknum;

printf("\n請輸入要查找H勺選手編號:〃);

scanf(“/d”,&seeknum);

if(head==NULL&&tail=NULL)

(

printf("\n對不起,目前記錄為空!\n");

)

else

(

pl=head;

printff\n----------你要找H勺選手口勺成績?nèi)缦?--------\n");〃在這里找到了要查找

口勺選手成績

printfC——I——I——I一一I一一I——I——I——I一一I——I——I——I——

|----------1--------'n");

printfC編號I姓名|成績I1|2|3|4|5|6|7|8|9|10

平均成績\n〃);

printf('------1-------1------1----1-----1----1-

—|---------\吟;

while(pl!=NULL)

(

if(pl->num==secknum)

(

printf(*淅7d%-6s”,pl->num,pl->name);

printff〃);

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

(

printf(z,%.Ifz,,pl->grades[i]);

I

printf("%-6.21f\nw,pl->ave);

chcck=l;

getchar();

return;

)

else

pl=pl->next;

1

)

)

if(head!=NULL&&check==0)

(

printfC\n對不起,你查看的J選手成績不存在!\n");

)

gctchar();

?菜單函數(shù)menu_select()

分析:菜單主函數(shù)規(guī)定設(shè)計比較簡潔,只提供設(shè)輸入,處理和輸出部分的函數(shù)調(diào)用。其中各功

能模塊用菜單方式選擇。

定義變量charsflOOkintc:

WHILE(1)

運(yùn)用atoiO函數(shù)將所接受II勺字符串轉(zhuǎn)換成數(shù)值,提供應(yīng)if語句判斷

____________________________________________

<111c------------------------------------------

輸入有誤Break

SWITCH(c)

1234567default

信息瀏覽信息錄入信息保留成績查詢信息修改信息刪除退出系統(tǒng)Break

BreakBreakBreakBreakBreakBreakReturn

Break

Code

圖5菜單模塊

/*-----------------menu_select函數(shù)--------------------------*/

voidmenu_select0

chars[100];

intc;

gots(s);〃不管顧客輸入吊J是數(shù)字鍵或是字母鍵使用gets都能將輸入作為字

符串接受

while(l)〃限定顧客輸入的數(shù)值必須在1-7之間才有效,否則規(guī)定重新輸入

(

c=atoi(s);〃運(yùn)用atoi()函數(shù)將所接受的字符串轉(zhuǎn)換成數(shù)值,提供應(yīng)if語句

判斷

if(c<1||c>7)

(

printf(“您的輸入有誤,請重新輸入:〃);

gets(s);

)

elsebreak;

)

switch(c)

(

case1:

system("cls");〃清屏

browse();〃選手信息瀏覽

break;

case2:

system("cis");

creat();〃選手信息錄入

break;

case3:

systcm("cls");

save();〃選手信息保留

break;

case4:

system("cls");

search();〃選手成績查詢

break;

case5:

systcm("cls");

update();〃選手信息修改

break;

case6:

system("cls");

del();〃選手信息刪除

break;

case7:

system(/zclsw);

quit();〃退出系統(tǒng)

return;

break;

default:

break;

)

gctchar();

system("cis");

menu();

menuselect();

?修改函數(shù)update()

分析;實(shí)現(xiàn)選手信息的修改,關(guān)鍵內(nèi)容為鏈表日勺遍歷。找出要修改H勺選手,修改其

/*-------------------------update函數(shù)----------------------------*/

voidupdate()

SONGER_MESSAGE*pl;//=(SONGERMESSAGE*)malloc(LEN);

intcheck=0;〃用來進(jìn)行判斷,與否找到了要修改口勺信息

longupdatenum;

printfC\n請輸入要修改日勺選手編號:");

scanf&updatcnum);〃查找到要修改H勺選手

if(head==NULL&&tail==NULL)

(

printf("\n--------目前信息記錄為空--------\n");

)

else

(

pl=hcad;

while(pl!=NULL)

if(pl->num==updatenum)

(

printf(*\n-----------你要修改的選手信息如F----------\n");

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

printff編號|姓名\n〃);

printf("---\n〃);

printf("%-9d%-6s\nw,pl->num,pl->namo);

printff---------1---------\n");

printff\n------------請重新寫入此選手信息:---------\n");

check=l;//從新寫入修改項目

printf(〃\n修改選手編號為:〃);

scanf(飛d”,&pl->num);

printf(〃\n修改選手姓名為:〃);

scanfpl->namc);

return;

)

else

(

pl=pl>next;

)

}

)

if(head!=NULL&&check==0)

(

printfC\n對不起,你要修改的選手信息不存在!\n");

)

getchar();

)

?保留函數(shù)save。

分析:保留文獻(xiàn)H勺流程。使用fopen()函數(shù)打開txt文獻(xiàn),“w”參數(shù)代表打開只寫文

獻(xiàn),再運(yùn)用fprintf。函數(shù)寫入選手內(nèi)容,最終用fclose()函數(shù)關(guān)閉文獻(xiàn)。

(START)

打開一種文獻(xiàn),并寫入格式數(shù)據(jù)

WHILE(pl!=NULL)

向文獻(xiàn)寫入“編號”,“姓名”

關(guān)閉文獻(xiàn)

(END)

圖7.保留模塊

voidsave。〃將數(shù)據(jù)保留到文獻(xiàn)

{

FILE*fp;

SONGER_MESSAGE*pl;//=(SONGERMESSAGE*)malloc(I^N);

pl-head;

fp=fopen(”參賽選手名單.txt","[v");

fprintf(fp.\n〃):

fprintf(fp/編號|姓名\n〃);

while(pl!=NULL)

(

fprintf(fp,*--------1--------;

fprintf(fp,/z%-9d%-6s\n,z,pl->num,pl->name);

pl=pl->next;

)

fprintf(fp,"--------1--------\n〃);

fclose(fp);

printfC\n\t文獻(xiàn)已將保留到、〃參賽選手名單.txt\");

}

?參賽選手信息錄入creat()

分析:錄入信息體現(xiàn)為創(chuàng)立鏈表節(jié)點(diǎn)并給節(jié)點(diǎn)的元素賦值,然后對評委口勺分?jǐn)?shù)進(jìn)行排序(鏈表

的排序),排序選擇冒泡排序法,最終去掉一種最高分去掉一種最低分。

圖7.參賽選手信息錄入模塊

/*—----creat函數(shù)

voidcreat()

inti,j;

floatt;

charc=,y';

while(c=='y'11c=='Y')

(

SONGER_MESSAGE*pl=(SONGER_MESSAGE*)malloc(LEN);

printf("\n請輸入要錄入的選手信息:\n");

printf(〃\n選手編號:”);

scanf&pl->num);

printf(〃\n選手姓名:〃);

scanfpl->name);

printf("\n請輸入10位評委點(diǎn)評成績:");

pl->ave=0;

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

(

scanf(線f”,&(pl-〉grades[i]));//runtimeerror

pl->ave+=pl->grades[i];

for(i=0;i〈N-1;i++)〃冒泡排序法讓那個成績從小到大排

列,然后選出最大值是最終一種,最小值是第一種

for(j=0;j++)

if(pl->gradesJJ>pl->grades[j+lj)

(

t=pl->grades[j];

pl->gradesLj]=pl->gradesJ+l];

pl->gradesLj+lj=t;

}

pl->ave=(pl->ave-(pl->grades[0]+pl->grades[9]))/8;〃去掉一種最高分,去第一種這

一低分,得出最線的平均分

pl->next=NULL;

if(pl==NULL)

(

printfC\n內(nèi)存分派失敗\n〃);

n=n-l;

)

if(head==NULL&&tail==NULL)〃目前沒有結(jié)點(diǎn),創(chuàng)立第一種結(jié)點(diǎn)

hcad=pl;

head->next=NL'LL;

tail=head;

printf(",\n-----選手信息錄入成功------\n");

}

else〃假如目前尚有節(jié)點(diǎn)則插入到尾部

(

tail->next=pl;

tail=pl;

tail->next=NL-LL;

printf(z,\n-----選手信息錄入成功------\n");

)

printf(〃與否繼續(xù)(Y/N):");

getchar();

scanf&c);

}

)

?成績排序rank。

分析:用冒泡排序的措施對平均成績(鏈表)進(jìn)行排序。

&TART

圖8.成績排序模塊

/*rank函數(shù)

voidrank()

SONGER_MESSAGE*pl,*p2,*endpt,*p;//*endpl/*控制循環(huán)比較*/*p/*臨時指針變量*/

n=0;

pl-head;

if(head==NULL&&tail=NULL)

(

printf(*\n-----------目前信息記錄為空--------\n");

)

else

(

pl=(SONGERMESSAGE*)malloc(LEN);

pl->next=head;/*注意理解:我們增長一種節(jié)點(diǎn),放在第一種節(jié)點(diǎn)口勺前面,重

要是為了便于比較。由于第一種節(jié)點(diǎn)沒有前驅(qū),我們不能互換地址。*/

head=pl;/*讓head指向pl節(jié)點(diǎn),排序完畢后,我們再把pl節(jié)點(diǎn)釋放

掉*/

for(endpt=NULL;endpt!=head;endpt=p)/*結(jié)合第6點(diǎn)理解*/

(

for(p二pl二head;pl->next->next!=endpt;pl=pl->next)

(

if(pl->next->ave<pl->next->next->ave)/*假如前面口勺節(jié)點(diǎn)鍵值比背面

節(jié)點(diǎn)的鍵值小,則互換*/

p2=pl->next->next;//1>排序后q節(jié)點(diǎn)指向p節(jié)點(diǎn),在調(diào)

整指向之前,我們要保留原pH勺指向節(jié)點(diǎn)地址,即:p2=pl->next->next

pl->next->next=p2->next;〃2、順著這一步一步往下推,排序后

pl->ncxt->next要指於J是p2->next,因此pl->next->next=p2->next

p2->next=pl->next;〃3、p2->next原是q發(fā)出來H勺指

向,排序后qH勺指向要變?yōu)橹赶騪的1,而本來pl->next是指向p口勺,因此p2->next=pl->next

pl->next=p2;〃4、pl->next原是指向pH勺,排序

后圖16中pl->next要指向q,本來pl->next->next(即p2)是指向q的,因此pl->next=p2

P=pl->next->next;〃5、至此,完畢了相鄰兩節(jié)點(diǎn)口勺次序

互換

}

)

pl=head;/*把pl『勺信息去掉*/

head=head->next;/*讓head指向排序后的第一種節(jié)點(diǎn)*/

free(pl);/*釋放pl*/

printfT\n----------選手成績排名信息如下---------\n〃);

printf("--------1--------1--------1---------\n");

printfT編號I姓名I平均成績I名次\n〃);

pl=head;

while(pl!=NULL)

printf("---------1---------1---------1---------\n");

printf("%-9d%-9s%-9.1lf%-5d\n,z,pl->num,pl->name,pl->ave,n+1);

n++;

pl=pl->next;

)

printf("---------1---------1---------1---------\n");

)

getchar();

)

?刪除函數(shù)del()

分析:節(jié)點(diǎn)H勺刪除較為繁瑣。

第一種狀況:數(shù)據(jù)在鏈表頭部,并且只有一種結(jié)點(diǎn)。

第二種狀況:數(shù)據(jù)在鏈表頭部,頭結(jié)點(diǎn)。

第三種狀況:數(shù)據(jù)在鏈表中間,中間節(jié)點(diǎn)。

第四種狀況:數(shù)據(jù)在鏈表尾部,尾部節(jié)點(diǎn)。

START

輸出要刪除的選手信息

head&&IL、nE--MULE)""""

刪除唯一口勺節(jié)

點(diǎn)刪除頭節(jié)點(diǎn)

中間節(jié)點(diǎn)刪除

成功刪除尾節(jié)點(diǎn)

getchar();

Return

END

圖9.刪除模塊

/*------del函數(shù)*/

voiddel()

SONGERJIESSAGE*node;//=(SONGERJIESSAGE*)malloc(LEN);

SONGERJIESSAGE*pl;

intcheck=0;〃用來進(jìn)行判斷,與否找到了要刪除的信息

longdel_num;

printf(〃\n請輸入要刪除H勺選手的編號:〃);

scanf(“/d”,&del_num);

if(head==NULL&&tail==Nl)LL)

{

printf("\n目前信息記錄為空,刪除失敗!\n〃);

)

else

(

node=hcad;

pl=head;

while(node!=NULL)

if(node->num==delnum)

printff\n-要刪除的選手信息\n〃)

printff--------1--------\n");

printff編號|姓名\n");

printfC--------1--------\n");

printf(z/%-9d%-6s\nw,node->num,noth->name);〃在這里找到了要刪除艮I

選手信息

printff--------1--------\n");

chcck=l;〃找到要刪除的信息,賦為真

if(node==head&&head->next==NULL)〃是頭結(jié)點(diǎn),并且只有

一種結(jié)點(diǎn)

(

hcad=NULL;

tail=head;

free(node);

printf(",\n--------刪除信息成功--------\n");〃刪除唯一的T節(jié)點(diǎn)

)

elseif(nede==head&&head->next!=NULL)//刪除頭節(jié)點(diǎn)

(

node二head:

head-head->next;

free(node);

printfC\n--------刪除信息成功--------\n〃);〃頭節(jié)點(diǎn)刪除成功

n=n-l;

}

elseif(ncdc->next!=NULL)//刪除中間節(jié)點(diǎn)

(

pl->ncxt=nodo->noxt;

free(node);

printfC\n--------刪除信息成功--------;〃中間節(jié)點(diǎn)刪除成功

n=n-l;

)

elseif(ncde->next==NULL)〃刪除尾節(jié)點(diǎn)

(

pl->next=NULL;

tail=pl;

free(node);

printfC\n刪除信息成功\n");〃尾節(jié)點(diǎn)刪除成功

n=n-l;

)

getcharO;

return;

else

pl=nodc;

node=node->ncxt;

)

}

)

if(head!=NULL&&check==0)

(

printfC\n對不起,你要刪除的選手信息不存在!\n");

)

gctchar();

}

?公共模塊

?顏色控制函數(shù)color。

分析:為了使程序看起來更美觀,因此引入wind5Vsapi末控制顏色函數(shù),用來變化字體顏色。

/*---------------------------color函數(shù)------------------------------*/

voidcolor(constunsignedshortcolorl)

/*僅限變化0-15H勺顏色;假如在0-15那么實(shí)現(xiàn)他H勺顏色由于假如超過15背面

日勺變化的是文本背景色。,/

if(colorl>=0&&colorl<=15)

SetConsoleTextAttribute(GetStdllandle(STD_OUTPUT_HANDLE),colorl);

/*假如不在0T5日勺范圍顏色,那么改為默認(rèn)的顏色白色;*/

else

SetConsoleTextAttribute(GetStdllandle(STD_OUTPUTJIANDLE),7);

/*顏色對應(yīng)值:

0:黑色8;灰色

1二藍(lán)色9二淡藍(lán)色

2二綠色10;淡綠色Oxa

3二湖藍(lán)色11;淡淺綠色Oxb

4:紅色12二淡紅色Oxc

5二紫色13二淡紫色Oxd

6:黃色14二淡黃色Oxe

7=白色15=亮白色Oxf

*/

)

?退出函數(shù)quit。

分析:用來退出程序

/*----------------------quit函數(shù)------------------------------*/

voidquit()

(

printf(/z\n\n\t==========^感謝您使用歌唱比賽評分系統(tǒng)?==========\n\n/z);

}

?目錄函數(shù)menu。

分析;為程序入口提供顯示,因篇幅有限,因此顯示有錯亂。

/*--------------------------------------menu函數(shù)---------------------------

---------------*/

voidmenu()

(

system(z,modeconcols=100lines=30/z);

color(11):

printf(,z\t.;rl55551r

\n〃);

printf(〃、1★+★☆歌唱比賽評分系統(tǒng):rlhhhhhhhhhhlr:

printf(〃\t:ISSSSSSSSSr

\n〃);

printf(z,\t.sSSS55SSl.

\n〃);

printf選手信息瀏覽hS5555SSiiSh.

\n〃);

printf(〃\trS555SSh,.sSSSl

\n〃);

printf(z/\trh55SS5i;5S555S,

\n〃);

printf(z,\t2.選手信息錄入ShSS5r,lSS5555Si

\n〃);

printf("\thhSS5r..sSS555555S;

\n〃);

printf("\t,hS555555SSS5r..r5ss555555s5.

\n〃);

printf(z/\t3.選手信息保

留:SS555SSS1;,sSSS5555555SS;

printf(〃\t

iSSSShi.;1SSS55555555SS;\n〃);

printf(z,\t,sr,,r5ss55555555SSS1,

si.\n〃);

printf(〃\t4.選手成績查詢

i533SSSSSSSSSSS5s,.lSS5i\n");

printf("\t.:islh5555hlsi,.r5S

55SSh;\n〃);

printf(〃\t..,;s5SS5

5555SS1,\n〃);

printf(z,\t5.選手信息修

改.sS3SSSs.\n");

printf("\t,r5SS5

5555555ss5i\n〃);

printf("\t;hS

SS5555555SSh:\n〃);

printfC\t6.選手信息刪

除:sSSS5555555SSl,

\n〃);

printf(zz\t

,r5SS5555555SSr.\n〃);

printf("\t

.ihSSS55555SS5;\n〃);

printf(/z\t7.退出系

統(tǒng):1SSS55555SS

s\n〃);

printf(〃\t

,r5ss5555s5\n〃);

printf("\t

:shhhhh:\n〃);

color(15);

}

?歡迎模塊welcome()

分析:一種系統(tǒng)需要一種美觀歡迎界面,由于DOS窗口有限,因此用點(diǎn)陣字寫出“welcome”

并且在右下角增長目前時間顯示。時間用的time.h庫來實(shí)現(xiàn)。

/*-------------------------------welcome函數(shù)------------------------------*/

intwelcome0

system(z,modeconcols=65lincs=25");

printf(〃\n\n\n\n〃);

color(14);printf(z,#n#######n#########

#######\n〃);

color(14);printf(z,n###nn蝴##

#\n〃);

color(ll);printf(z,##n##n####

#\n〃);

color(11);printf("itnnnnnnnitaantun

附###\n〃);

color(11);printf(z,n###n#####n

#\n〃);

color(13);printf(z,##########n

#\n");

color(13);printfC#############¥##########

#######\n〃);

color(lO);printf("\n\n\n\n\n制作:電子信息工程系通信工程1班42王澤

38郭世杰49賀鑫\n〃);color(15);

time_tit;

it=time(NULL);

ptr=localtime(&it);

printfC\n\t\t\t目前系統(tǒng)時間:%4d年$02d月%02d

日%d:%d\n”,ptr->tm_year+1900,ptr->tm_mon+l,ptr->tm_mday,ptr->tm_hour,ptr->

ptr->tm_sec);

printf(z,\n\n按任意健進(jìn)入主菜單\n〃);

getchO;

system("cis");

menu();

menuselect();

return0;

)

?主函數(shù)main。

分析;提供程序入口。

/*---------------------------------------------------------main函數(shù)

-----------------------*/

intmain()

(

welcome();

return0;

)

?庫函數(shù)

ttinclude<stdio.h>

^include<stdlib.h>

#include<conio.h>

ttinclude<string.h>

■include<malloc.h>

#include<Windows.h>

#include<timc.h>

#defineLENsizeof(S0NGERJ1ESSAGE)

ttdefineN10

?構(gòu)造體

structtm*ptr;//用于welcome()顯示時間的構(gòu)造體

typedefstructsonger〃定義選手信息鏈表構(gòu)造

tr

longnum;〃選手編號

charname[20];

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論