問題分析和任務(wù)定義_第1頁
問題分析和任務(wù)定義_第2頁
問題分析和任務(wù)定義_第3頁
問題分析和任務(wù)定義_第4頁
問題分析和任務(wù)定義_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、問題分析和任務(wù)定義:本課題名稱:joseph環(huán)。任務(wù):編號(hào)是1,2,n的n個(gè)人按照順時(shí)針方向圍坐一圈,每個(gè)人只有一個(gè)密碼(正整數(shù))。一開始任選一個(gè)正整數(shù)作為報(bào)數(shù)上限值m,從第一個(gè)人開始順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,將他的密碼作為新的m值,從他在順時(shí)針方向的下一個(gè)人開始重新從1開始報(bào)數(shù),如此下去,直到所有人全部出列為止。要求:利用單向循環(huán)鏈表存儲(chǔ)結(jié)構(gòu)模擬此過程,按照出列的順序輸出各個(gè)人的編號(hào)。使用圖形界面。鍵盤控制程序的執(zhí)行。按某一按鍵實(shí)現(xiàn)對(duì)應(yīng)的值的輸入。模擬實(shí)現(xiàn)報(bào)數(shù)過程,將每輪報(bào)數(shù),每個(gè)人報(bào)數(shù)情況逐一顯示出來輸入數(shù)據(jù)包括:人的數(shù)量n(范圍1-100),初始密碼

2、(范圍1-999),輸入每個(gè)人的密碼(范圍1-999,這里可以先讓系統(tǒng)隨機(jī)生成密碼,然后對(duì)部分人的密碼可以進(jìn)行調(diào)整)。輸出數(shù)據(jù)包括:出列的人的序號(hào)(范圍1-100)。界面上按鈕,輸入框,標(biāo)簽以及他們的屬性可以模仿VB的控件模式及屬性特征來實(shí)現(xiàn)。最后得出的出列序列存入文件備用。二、概要設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)的選擇1、各種數(shù)據(jù)類型以及函數(shù)的定義struct key int v;/按鍵值 int Enabled;/按鍵當(dāng)前是否有效 struct people/表示每個(gè)人的結(jié)構(gòu)體 int No; /表示該人序號(hào) int num; /表示報(bào)的數(shù) int key; /表示該人的密碼 struct PeoCom *

3、peocom; /指向表示該人的控件,頭結(jié)點(diǎn)該指針指空 struct people *next; /指向下一個(gè)人struct Label/表示結(jié)果控件結(jié)構(gòu)體 int lux,luy,rdx,rdy; /控件的左上角坐標(biāo)和右下角坐標(biāo) int No; /存儲(chǔ)序號(hào) char ch5; /顯示在該控件上的字,即序號(hào) struct Label *next; /指向下一個(gè)結(jié)果struct PeoCom/表示人的控件的結(jié)構(gòu)體 int lux,luy,rdx,rdy; /控件的左上角坐標(biāo)和右下角坐標(biāo) int flag; /表示控件是彈起還是按下。彈起1,表示該人存在;按下0,表示該人已出列;struct Co

4、mmand/按鈕控件結(jié)構(gòu)體 int lux,luy,rdx,rdy; /控件的左上角坐標(biāo)和右下角坐標(biāo) int Enabled; /表示該控件單前是否可以單擊,1表示可以,0表示不可以 char ch10; /顯示在該控件上的字;struct Text/輸入框控件結(jié)構(gòu)體 int lux,luy,rdx,rdy; /控件的左上角坐標(biāo)和右下角坐標(biāo) char ch10; /顯示在該控件上的字;2、主函數(shù)(star()流程圖首先需要讀取一個(gè)鍵盤按鍵值,根據(jù)按鍵值來判斷用戶進(jìn)行了什么操作,便可以調(diào)用相應(yīng)的操作函數(shù)。程序開始,圖形模式初始化, 畫出初始界面及按鈕之后,是一個(gè)循環(huán),直到報(bào)數(shù)結(jié)束或者按了ESC退

5、出,否則一直在讀用戶輸入的字符,沒有輸入字符時(shí)則為0。程序開始initgr()圖形模式初始化, 畫出初始界面及按鈕讀取鍵盤按鍵flag=discrimination();判斷每人是否都有密碼,是flag為1,否則為0按ESC按鍵Y程序結(jié)束InitPeople();建立N人循環(huán)鏈表InitResult();建立出列順序的鏈表EnNCommand_click();讀取NNY按N(人數(shù))N按M(起始密碼)EnMCommand_click();該按鈕的單擊事件,讀取MNYMnext-peocom,p-peocom);p=p-next;按TAB鍵NPeoCom_click();表示人的控件的單擊事件 D

6、rawPeoCom(p-peocom,p);從新畫表示這個(gè)人的控件單擊某個(gè)人的按鈕輸入該人密碼YN3、程序模塊之間的層次關(guān)系首先調(diào)用開始函數(shù)star(),然后需要的是圖形模式初始化,再就是調(diào)用輸入模塊,即讀入n,讀入m,讀入每個(gè)密碼(可選),最后是開始報(bào)數(shù)的函數(shù)調(diào)用main()star()initgr()/圖形模式初始化discrimination()/判斷每個(gè)人是否都有一個(gè)密碼EnNCommand_click()/輸入N(人數(shù))按鈕的單擊事件InitPeople()/建立有N個(gè)人的一個(gè)循環(huán)鏈表InitResult()/建立存儲(chǔ)N個(gè)人出列順序的鏈表EnMCommand_click()/輸入M(

7、起始密碼)按鈕的單擊事件StarCommand_click()/開始按鈕的單擊事件ShowPromptFrom2()/彈出程序執(zhí)行結(jié)束的提示信息save()/記錄下最后結(jié)果PeoCom_click()/表示人的控件的單擊事件DrawText()/彈出輸入N(人數(shù))文本框DrawPeoCom()/畫出表示該人的控件DrawLabel()/畫表示結(jié)果的標(biāo)簽DrawText()/彈出輸入M(密碼)文本框DrawPeoCom()/畫出表示該人的控件Drawbasket();/在報(bào)數(shù)的人用框框上表示DrawLabel()/畫表示結(jié)果的標(biāo)簽ShowPromptFrom1()/彈出該人出列的提示信息Draw

8、Command()/畫按鈕DrawCommand()/畫按鈕DrawText()/彈出輸入密碼的文本框表示結(jié)果4,鏈表的連接定義表示人的結(jié)構(gòu)體需要存儲(chǔ)人的序號(hào),這個(gè)人報(bào)的數(shù)字,這個(gè)人帶頭結(jié)點(diǎn)的密碼,一個(gè)*peocom指針指向表示這個(gè)人的結(jié)構(gòu)體,一個(gè)*next指針指向下一個(gè)人表示人的按鈕的結(jié)構(gòu)體需要4個(gè)整形值存該按鈕的左上角坐標(biāo)和右下角坐標(biāo),一個(gè)flag來表示按鈕彈起還是按下char ch5; 顯示序號(hào)int No; 存儲(chǔ)序號(hào)int lux,luy,rdx,rdy;struct Labelstruct Label *next;struct Labelchar ch5;int No;int lux

9、,luy,rdx,rdy;struct Label *next;char ch5;int No;int lux,luy,rdx,rdy;struct Labelstruct Label *next;struct PeoCom *peocom;int key;int num;int No;struct peoplestruct PeoComint flag;int lux,luy,rdx,rdy;struct people *next;表示每個(gè)人int key; 密碼int num; 報(bào)的數(shù)int No; 序號(hào)struct peoplestruct PeoCom *peocom;struct p

10、eople *next;頭結(jié)點(diǎn)表示人的控件NULLstruct Label *next;char ch5;int No;int lux,luy,rdx,rdy;struct Labelstruct PeoCom *peocom;struct people *next;int key;int num;int No;int flag;int lux,luy,rdx,rdy;struct PeoComstruct people三、詳細(xì)設(shè)計(jì)和編碼1、 圖形界面及控件的坐標(biāo)設(shè)計(jì):(30,30)-(100,90)放3個(gè)按鈕,用于讀入n,m的值和開始按鈕(160,30)-(550,400)區(qū)域放表示人的按鈕

11、(最多100個(gè),每行10個(gè)),按鈕長(zhǎng)寬均30(0,430)-(640,480)區(qū)域放出列的人的號(hào)碼2、主函數(shù)設(shè)計(jì)void star() struct people *p;/p用來記錄TAB鍵停在哪一個(gè)人身上 int flag=0;/用來判斷每個(gè)人是否都有一個(gè)密碼 initgr();/圖形模式初始化 setfillstyle(1,BLUE);/畫出初始界面及按鈕 bar(1,1,639,20); setcolor(WHITE);/畫標(biāo)題欄 outtextxy(290,6,joseph); setfillstyle(1,7);/界面底色 bar(0,21,639,479); setcolor(BL

12、UE);/界面分割線 rectangle(0,0,639,479); line(130,0,130,425); line(130,425,639,425); line(0,400,130,400); setcolor(WHITE); outtextxy(10,410,RESULT:);DrawCommand(EndCommand.lux,EndCommand.luy,EndCommand.rdx,EndCommand.rdy,&EndCommand);DrawCommand(EnNCommand.lux,EnNCommand.luy,EnNCommand.rdx,EnNCommand.rdy,

13、&EnNCommand);DrawCommand(EnMCommand.lux,EnMCommand.luy,EnMCommand.rdx,EnMCommand.rdy,&EnMCommand);DrawCommand(StarCommand.lux,StarCommand.luy,StarCommand.rdx,StarCommand.rdy,&StarCommand); while(1) key=0; if(kbhit()key=bioskey(0); if(key = ESC.v)/按ESC退出break; flag=discrimination();/判斷每個(gè)人是否都有一個(gè)密碼 if(

14、key=ENN.v&ENN.Enabled=1&EnNCommand.Enabled=1)/輸入N(人數(shù))按鈕 EnNCommand_click();/輸入N(人數(shù))按鈕的單擊事件 p=InitPeople();/建立有N個(gè)人的一個(gè)循環(huán)鏈表 InitResult();/建立存儲(chǔ)N個(gè)人出列順序的鏈表 setcolor(BLACK);/更新輸入N(人數(shù))按鈕和輸入M(起始密碼)按鈕 bar(EnNCommand.lux,EnNCommand.luy,EnNCommand.rdx,EnNCommand.rdy); bar(EnMCommand.lux,EnMCommand.luy,EnMComman

15、d.rdx,EnMCommand.rdy);DrawCommand(EnNCommand.lux,EnNCommand.luy,EnNCommand.rdx,EnNCommand.rdy,&EnNCommand);DrawCommand(EnMCommand.lux,EnMCommand.luy,EnMCommand.rdx,EnMCommand.rdy,&EnMCommand); TAB.Enabled=1;/此時(shí)TAB鍵可以使用 ENM.Enabled=1;/此時(shí)M鍵可以使用 ENTER.Enabled=1;/此時(shí)回車鍵可以使用 continue; if(key=ENM.v&ENM.Ena

16、bled=1&EnMCommand.Enabled=1)/輸入M(密碼)按鈕 EnMCommand_click();/輸入M(起始密碼)按鈕的單擊事件 setcolor(BLACK);/更新輸入M(起始密碼)按鈕和開始按鈕 bar(EnMCommand.lux,EnMCommand.luy,EnMCommand.rdx,EnMCommand.rdy); bar(StarCommand.lux,StarCommand.luy,StarCommand.rdx,StarCommand.rdy);DrawCommand(EnMCommand.lux,EnMCommand.luy,EnMCommand.

17、rdx,EnMCommand.rdy,&EnMCommand);DrawCommand(StarCommand.lux,StarCommand.luy,StarCommand.rdx,StarCommand.rdy,&StarCommand); ENN.Enabled=0;/此時(shí)N鍵不可以使用 BEGIN.Enabled=1;/此時(shí)開始鍵可以使用 continue; if(key=BEGIN.v&BEGIN.Enabled=1&StarCommand.Enabled=1&flag=1)/開始按鈕 TAB.Enabled=0;/此時(shí)TAB鍵不可以使用 ENM.Enabled=0;/此時(shí)M鍵不可以

18、使用 ENN.Enabled=0;/此時(shí)N鍵不可以使用 BEGIN.Enabled=0;/此時(shí)開始鍵不可以使用 ENTER.Enabled=0;/此時(shí)回車鍵不可以使用 StarCommand.Enabled=0;/單擊之后就不能再單擊,暫時(shí)不可以退出 EndCommand.Enabled=0; setcolor(BLACK);/更新開始按鈕和退出按鈕 bar(StarCommand.lux,StarCommand.luy,StarCommand.rdx,StarCommand.rdy); bar(EndCommand.lux,EndCommand.luy,EndCommand.rdx,EndC

19、ommand.rdy);DrawCommand(StarCommand.lux,StarCommand.luy,StarCommand.rdx,StarCommand.rdy,&StarCommand);DrawCommand(EndCommand.lux,EndCommand.luy,EndCommand.rdx,EndCommand.rdy,&EndCommand); StarCommand_click();/開始按鈕的單擊事件 EndCommand.Enabled=1;/報(bào)數(shù)結(jié)束之后,退出按紐可單擊 setcolor(BLACK);/更新退出按鈕 bar(EndCommand.lux,E

20、ndCommand.luy,EndCommand.rdx,EndCommand.rdy);DrawCommand(EndCommand.lux,EndCommand.luy,EndCommand.rdx,EndCommand.rdy,&EndCommand); ShowPromptFrom2();/彈出程序執(zhí)行結(jié)束的提示信息 save();/記錄下最后結(jié)果 break;/程序結(jié)束,退出,此處可以加入其他功能 if(key=TAB.v&TAB.Enabled=1&EnNCommand.Enabled=0) Drawbasket(p-next-peocom,p-peocom); p=p-next;

21、 continue; if(EnNCommand.Enabled=0&key=ENTER.v&ENTER.Enabled=1) /已經(jīng)輸入過人數(shù)了,這時(shí)單擊表示某個(gè)人的按鈕可以輸入該人的密碼 PeoCom_click(p);/表示人的控件的單擊事件 DrawPeoCom(p-peocom,p);/從新畫表示這個(gè)人的控件 四、上機(jī)調(diào)試:1、時(shí)間復(fù)雜度分析n個(gè)人圍成一圈,需要執(zhí)行2n次申請(qǐng)空間,來建立代表這n個(gè)人圍成一圈的循環(huán)鏈表以及界面上的控件,執(zhí)行n次申請(qǐng)空間來生成用來存儲(chǔ)出列序列的單鏈表。開始報(bào)數(shù):最壞情況,n個(gè)人,密碼均為m(最大值),則到報(bào)數(shù)完畢,p指針需要在循環(huán)鏈表中移動(dòng)n*m次。用于

22、表示每個(gè)人報(bào)的數(shù)的變量i+執(zhí)行n*m次。判斷i可等于密碼m執(zhí)行了n*m次。用于記錄p的前一個(gè)結(jié)點(diǎn)的frontp指針同理需要移動(dòng)n*m次。q指針移動(dòng)n次。將序號(hào)從Head賦值到ResultHead鏈表中賦值n次則報(bào)數(shù)的總時(shí)間復(fù)雜度為O(4nm+2n)2、空間復(fù)雜度分析n個(gè)人申請(qǐng)了n*( sizeof(struct PeoCom)+sizeof(struct people)+sizeof(struct Label) )空間五、用戶使用說明1、程序執(zhí)行之后,可以按n鍵輸入人數(shù)(1-100)。當(dāng)輸入大于100或小于1需要重新輸入,此時(shí)退出按鈕“X”可以使用退出程序,按ESC退出。此時(shí)用于輸入m的按鈕“

23、enter m”不可使用,用于開始報(bào)數(shù)的按鈕“star”不可使用。2、按n相當(dāng)于按下“enter n”按鈕,之后彈出讓用戶輸入n的文本框,此時(shí)用戶可以輸入n的值。輸入達(dá)到3個(gè)字符默認(rèn)輸入結(jié)束。輸入值范圍在1-100之間,輸入了超過100或低于1或其他非法輸入字符則需要重新輸入。某個(gè)字符輸入錯(cuò)誤可以按退格鍵刪除。3、輸入完畢之后,顯示代表n個(gè)人的n個(gè)按鈕。此后“enter n”按鈕不可使用?!癳nter m”按鈕可以使用,顯示出來的代表n個(gè)人的n個(gè)按鈕可以使用。按鈕上紅數(shù)字為該人報(bào)的數(shù),黑數(shù)字為該人所帶的密碼4、按m相當(dāng)于按下“enter m”按鈕,輸入初始密碼(1-999),當(dāng)輸入大于999或

24、小于1需要重新輸入,此時(shí)退出按鈕“X”可以使用,按ESC退出程序。5、此時(shí)黃色框框框住的是當(dāng)前選定的某一個(gè)人,按ENTER鍵可以調(diào)整該人的密碼,彈出讓用戶輸入該人密碼的文本框,此時(shí)用戶可以輸入該人密碼的值,輸入達(dá)到3個(gè)字符默認(rèn)輸入結(jié)束。輸入范圍在1-999之間,輸入了超過999或低于1或其他非法輸入字符則需要重新輸入。某個(gè)字符輸入錯(cuò)誤可以按退格鍵刪除。TAB鍵選擇其他的人6、按下“enter m”按鈕之后彈出讓用戶輸入m的文本框,此時(shí)用戶可以輸入m的值,輸入達(dá)到3個(gè)字符默認(rèn)輸入結(jié)束。輸入范圍在1-999之間,輸入了超過999或低于1或其他非法輸入字符則需要重新輸入,某個(gè)字符輸入錯(cuò)誤可以按退格鍵

25、刪除。輸入完畢之后, “enter m”按鈕不可使用。7、全部輸入完畢之后,按下B相當(dāng)于按下“star”開始報(bào)數(shù)。當(dāng)某個(gè)人出列,顯示提示框,給出提示信息,說明某人出列,按ENTER鍵繼續(xù)。全部人出列,顯示提示框,給出提示信息,說明全部出列。程序結(jié)束。六、測(cè)試結(jié)果輸入數(shù)據(jù):n=100,m=1,100個(gè)人的密碼依次為1-100;輸出數(shù)據(jù)序列:(輸出數(shù)據(jù)來自文件)1 2 4 8 16 32 64 34 69 45 92 95 5 11 23 49 6 14 30 65 47 100 35 76 75 74 73 72 71 70 68 66 61 54 38 94 41 9 21 52 39 3 1

26、2 28 81 25 67 91 63 89 62 93 86 60 98 19 53 82 78 56 7 22 79 87 29 15 46 88 55 37 51 33 44 17 80 96 90 83 48 84 10 42 77 27 99 43 50 31 97 58 36 26 57 59 24 18 40 85 13 20 輸入數(shù)據(jù):n=100,m=100,100個(gè)人的密碼依次為900-999;輸出數(shù)據(jù)序列:100 9 35 96 33 14 83 41 61 16 31 75 81 7 60 88 63 22 45 8 43 34 28 32 57 29 84 27 13

27、97 20 54 55 76 53 15 47 48 72 66 71 10 80 94 69 25 39 3 42 86 56 99 79 62 49 52 11 24 21 70 90 19 38 73 68 26 50 17 87 65 78 40 93 67 85 5 82 37 95 18 2 46 92 12 4 30 59 23 98 64 89 58 6 44 51 36 91 77 74 1 七、附錄,帶注釋的源程序(主要函數(shù))/*頭文件定義*/#include stdio.h#include stdlib.h#include conio.h#include graphics

28、.h#include string.h/*變量,數(shù)據(jù)類型定義*/int key; /鍵盤按鍵定義struct key int v;/按鍵值 int Enabled;/按鍵當(dāng)前是否有效ESC,ENN,ENM,BEGIN,ENTER,TAB;struct key ESC= 0x11b,1;struct key ENN= 0x316e,1;struct key ENM= 0x326d,0;struct key BEGIN=0x3062,0;struct key ENTER=0x1c0d,0;struct key TAB= 0xf09,0;#define PeopleMax 100/最多100人int

29、 N; /表示總?cè)藬?shù)int M; /表示起始的密碼值,即m的值#define PeoLUX 160/表示第1個(gè)人的控件的左上角坐標(biāo)#define PeoLUY 30#define PeoLength 30/表示人的控件的長(zhǎng),寬#define PeoWide 30struct PeoCom/表示人的控件的結(jié)構(gòu)體 int lux,luy,rdx,rdy; /控件的左上角坐標(biāo)和右下角坐標(biāo) int flag; /表示該控件是彈起的還是按下的。彈起是1,表示該人存在;按下是0,表示該人已出列;struct people/表示每個(gè)人的結(jié)構(gòu)體 int No; /表示該人序號(hào) int num; /表示報(bào)的數(shù)

30、int key; /表示該人的密碼 struct PeoCom *peocom; /指向表示該人的控件,頭結(jié)點(diǎn)該指針指空 struct people *next; /指向下一個(gè)人Head;/鏈表的頭指針#define ResLUX 0/表示出列的第1個(gè)人的控件的左上角坐標(biāo)#define ResLUY 430#define ResLength 32/表示出列的人的控件的長(zhǎng),寬#define ResWide 10struct Label/表示結(jié)果控件結(jié)構(gòu)體 int lux,luy,rdx,rdy; /控件的左上角坐標(biāo)和右下角坐標(biāo) int No; /存儲(chǔ)序號(hào) char ch5; /顯示在該控件上的字

31、,即序號(hào) struct Label *next; /指向下一個(gè)結(jié)果ResultHead;/存儲(chǔ)結(jié)果的鏈表的頭指針struct Command/按鈕控件結(jié)構(gòu)體 int lux,luy,rdx,rdy; /控件的左上角坐標(biāo)和右下角坐標(biāo) int Enabled; /表示該控件單前是否可以單擊,1表示可以,0表示不可以 char ch10; /顯示在該控件上的字;struct Command EndCommand= 1 ,1 ,20 ,20 ,1,X; /退出按鈕struct Command EnNCommand= 30 ,30 ,100,49 ,1,enter n;/初始先確定人數(shù),其他2個(gè)按鈕不可

32、用struct Command EnMCommand= 30 ,50 ,100,69 ,0,enter m;struct Command StarCommand=30 ,70 ,100,89 ,0,star;struct Text/輸入框控件結(jié)構(gòu)體 int lux,luy,rdx,rdy; /控件的左上角坐標(biāo)和右下角坐標(biāo) char ch10; /顯示在該控件上的字;struct Text EnNtext=50,50,150,69,;struct Text EnMtext=50,70,150,89,;/*函數(shù)申明*/void initgr(); /圖形模式初始化void DrawCommand(

33、int LUx,int LUy,int RDx,int RDy,struct Command *p);/用于畫按鈕。LUx,LUy為左上角坐標(biāo),RDx,RDy為右下角坐標(biāo)。*p指向該控件void DrawText(int LUx,int LUy,int RDx,int RDy); /畫輸入文本void DrawPeoCom(struct PeoCom *p,struct people *q); /畫出表示該人的控件struct people *InitPeople(); /建立有N個(gè)人的一個(gè)循環(huán)鏈表void DrawLabel(struct Label *p); /畫表示結(jié)果的標(biāo)簽void I

34、nitResult(); /建立存儲(chǔ)N個(gè)人出列順序的鏈表void EnNCommand_click(); /單擊輸入N(人數(shù))按鈕void EnMCommand_click(); /單擊輸入M(起始密碼)按鈕void Drawbasket(struct PeoCom *p,struct PeoCom *q); /在報(bào)數(shù)的人用框框上表示void ShowPromptFrom1(int i); /彈出該人出列的提示信息void ShowPromptFrom2(); /彈出程序執(zhí)行結(jié)束的提示信息void StarCommand_click(); /單擊開始按鈕void PeoCom_click(st

35、ruct people *p); /表示人的控件的單擊事件int discrimination(); /判斷每個(gè)人是否都有一個(gè)密碼void save(); /記錄下最后結(jié)果/*程序主體(主要函數(shù))*/struct people *InitPeople()/建立有N個(gè)人的一個(gè)循環(huán)鏈表 int i; struct people *newnode,*p;/newnode為新建結(jié)點(diǎn),p指向下一個(gè)結(jié)點(diǎn) Head.No=0;/建立頭結(jié)點(diǎn) Head.num=0; Head.key=0; Head.peocom=NULL; Head.next=&Head; p=&Head; for(i=1;iNo=i; ne

36、wnode-num=0; newnode-key=random(100)+1;/初始密碼,0除外 newnode-peocom=(struct PeoCom *)malloc(sizeof(struct PeoCom); newnode-peocom-lux=PeoLUX+(i-1)%10*(PeoLength+10);/賦控件坐標(biāo),10為2控件間間隔長(zhǎng) newnode-peocom-luy=PeoLUY+(i-1)/10*(PeoWide+10); newnode-peocom-rdx=newnode-peocom-lux+PeoLength; newnode-peocom-rdy=newn

37、ode-peocom-luy+PeoWide; newnode-peocom-flag=1;/初始為彈起狀態(tài),即該人存在 DrawPeoCom(newnode-peocom,newnode);/畫出表示該人的控件 p-next=newnode;/移動(dòng)指針 newnode-next=Head.next; p=p-next; p=Head.next; Drawbasket(p-peocom,NULL); return p;void InitResult()/建立存儲(chǔ)N個(gè)人出列順序的鏈表 int i; struct Label *newnode,*p;/newnode為新建結(jié)點(diǎn),p指向下一個(gè)結(jié)點(diǎn) R

38、esultHead.lux=ResultHead.luy=ResultHead.rdx=ResultHead.rdy=0;/建立頭結(jié)點(diǎn) ResultHead.No=0; strcpy(ResultHead.ch,); ResultHead.next=NULL; p=&ResultHead; for(i=1;iNo=0;/初始所有序號(hào)為0 strcpy(newnode-ch,);/字符串為空 newnode-lux=ResLUX+(i-1)%20*ResLength;/賦控件的坐標(biāo) newnode-luy=ResLUY+(i-1)/20*ResWide; newnode-rdx=newnode-

39、lux+ResLength; newnode-rdy=newnode-luy+ResWide; p-next=newnode;/移動(dòng)指針 newnode-next=NULL; p=p-next; p=ResultHead.next; while(p!=NULL) DrawLabel(p);/畫表示結(jié)果的標(biāo)簽 p=p-next; void StarCommand_click()/單擊開始按鈕,開始報(bào)數(shù) struct people *p,*frontp; struct Label *q; int i=1; p=Head.next; frontp=Head.next; while(frontp-ne

40、xt!=p)/frontp指向p的前一結(jié)點(diǎn) frontp=frontp-next; q=ResultHead.next; while(1) p-num=i; DrawPeoCom(p-peocom,p);/畫出表示該人的控件 Drawbasket(p-peocom,frontp-peocom);/在報(bào)數(shù)的人用框框上表示 if(p=frontp)/只剩一個(gè)人了 p-peocom-flag=0;/控件按下 DrawPeoCom(p-peocom,p);/畫出表示該人的控件 setcolor(7);/該人的框擦掉 rectangle(p-peocom-lux-2,p-peocom-luy-2,p-p

41、eocom-rdx+2,p-peocom-rdy+2); q-No=p-No;/最后一個(gè)人出列 p-key=0;/將該人的密碼從新寫為0 DrawLabel(q);/畫表示結(jié)果的標(biāo)簽 ShowPromptFrom1(p-No);/彈出該人出列的提示信息 break; if(i=M)/報(bào)到M了,p出列 frontp-next=p-next; M=p-key;/更新M p-key=0;/將該人的密碼從新寫為0 q-No=p-No;/p的序號(hào)放入出列鏈表 DrawLabel(q);/畫表示結(jié)果的標(biāo)簽 q=q-next; p-peocom-flag=0;/控件按下 DrawPeoCom(p-peoco

42、m,p);/畫出表示該人的控件 ShowPromptFrom1(p-No);/彈出該人出列的提示信息 setcolor(7);/該人的框擦掉rectangle(p-peocom-lux-2,p-peocom-luy-2,p-peocom-rdx+2,p-peocom-rdy+2); free(p); p=frontp-next; i=1;/從1開始繼續(xù)報(bào)數(shù) else i+; p=p-next; frontp=frontp-next; int discrimination()/判斷每個(gè)人是否都有一個(gè)密碼 struct people *p; p=Head.next; do if(p-key=0)r

43、eturn 0; elsep=p-next; while(p!=Head.next); return 1;/每一個(gè)都有密碼,返回1void save()/記錄下最后結(jié)果 FILE *fp; struct Label *p; if(fp=fopen(result.txt,w)=NULL) printf(ERROR); return; p=ResultHead.next; while(p!=NULL) fprintf(fp,%-4d,p-No); p=p-next; fclose(fp);void star() struct people *p;/p用來記錄TAB鍵停在哪一個(gè)人身上 int fla

44、g=0;/用來判斷每個(gè)人是否都有一個(gè)密碼 initgr();/圖形模式初始化 setfillstyle(1,BLUE);/畫出初始界面及按鈕 bar(1,1,639,20); setcolor(WHITE); outtextxy(290,6,joseph); setfillstyle(1,7); bar(0,21,639,479); setcolor(BLUE); rectangle(0,0,639,479); line(130,0,130,425); line(130,425,639,425); line(0,400,130,400); setcolor(WHITE); outtextxy(10,410,RESULT:);DrawCommand(EndCommand.lux,EndCommand.luy,EndCommand.rdx,EndCommand.rdy,&EndCommand);DrawCommand(EnNCommand.lux,EnNComm

溫馨提示

  • 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)論