![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計.舞伴問題_第1頁](http://file4.renrendoc.com/view/6755ab080b19a2a6eb6e175f4efaabaa/6755ab080b19a2a6eb6e175f4efaabaa1.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計.舞伴問題_第2頁](http://file4.renrendoc.com/view/6755ab080b19a2a6eb6e175f4efaabaa/6755ab080b19a2a6eb6e175f4efaabaa2.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計.舞伴問題_第3頁](http://file4.renrendoc.com/view/6755ab080b19a2a6eb6e175f4efaabaa/6755ab080b19a2a6eb6e175f4efaabaa3.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計.舞伴問題_第4頁](http://file4.renrendoc.com/view/6755ab080b19a2a6eb6e175f4efaabaa/6755ab080b19a2a6eb6e175f4efaabaa4.gif)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計.舞伴問題_第5頁](http://file4.renrendoc.com/view/6755ab080b19a2a6eb6e175f4efaabaa/6755ab080b19a2a6eb6e175f4efaabaa5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
可編輯版/分類號編號華北水利水電大學(xué)NorthChinaInstituteofWaterConservancyandHydroelectricPower課程設(shè)計題目舞伴問題院系信息工程學(xué)院專業(yè)計算機科學(xué)與技術(shù)姓名賈寧指導(dǎo)教師楊彬第一章需求分析21.1問題描述21.2基本要求21.2.1輸入及輸出格式21.2.2程序所完成的功能2第二章概要設(shè)計32.1數(shù)據(jù)結(jié)構(gòu)32.2程序模塊42.3模塊調(diào)用及算法5第三章詳細(xì)設(shè)計73.1操作實現(xiàn)73.2算法實現(xiàn)8第四章編碼調(diào)試104.1調(diào)試環(huán)境104.2調(diào)試方法104.3調(diào)試項目及調(diào)試結(jié)果104.3.1登陸測試104.3.2加載學(xué)生信息114.3.3學(xué)生配對調(diào)試124.3.4顯示總配對134.3.5查詢配對13第五章總結(jié)15參考文獻16附錄系統(tǒng)源代碼17第一章需求分析1.1問題描述一班有m個女生、n個男生<m不等于n>,舉辦一場舞會.男女生分別編號坐在舞池兩邊的椅子上,每曲開始時,依次從男生和女生中各出一人配對跳舞,本曲沒成功配對者坐著等待下一曲找舞伴,設(shè)計一個程序模擬舞伴配對過程。1.2基本要求1.2.1輸入及輸出格式輸入男、女學(xué)生的姓名、性別,由程序自動為男女生編號,可以順序編號,也可以隨機編號,輸出每曲配對情況〔包括男、女生的姓名、性別和編號。原始數(shù)據(jù)和結(jié)果數(shù)據(jù)要保存到文件中。在讀入男女生信息時,可以從文件中直接讀取學(xué)生的姓名和性別信息。輸出顯示時顯示每首歌的配對情況,包括對應(yīng)配對學(xué)生的姓名、性別以及編號??梢暂敵稣麄€舞池配對過程的所有配對情況。將輸出顯示的內(nèi)容對應(yīng)寫入到指定的文件中。1.2.2程序所完成的功能從文件或者手動輸入班級的學(xué)生信息,包括姓名和性別基本信息,根據(jù)性別使男女生分別坐在舞池兩邊的座位上,學(xué)生的座位編號順序生成,且一旦編號確定,將不再發(fā)生變化。每一首歌曲播放時,依次從男女生隊列中出來學(xué)生進行配對,由于男女生人數(shù)不一致,會使某個隊列中剩下若干學(xué)生配對不成功,配對不成功者等待下首歌時再進行配對。該首歌結(jié)束時,配對成功的學(xué)生再回到座位上。然后再依次進行配對,未成功者等待下首歌再進行配對。配對成功時,會顯示本首歌的詳細(xì)配對情況,以及整個過程的配對情況,并且可以將配對情況寫入到文件。根據(jù)男女生的姓名或者某首歌曲的名字可以查詢到對應(yīng)的配對情況。第二章概要設(shè)計2.1數(shù)據(jù)結(jié)構(gòu)學(xué)生座位隊列:ADTStuQueue{數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2..n;n≥0}數(shù)據(jù)關(guān)系:R={<ai-1,ai>ai∈D,i=1,2..n}voidInitQueue<StuQueue&Q>操作結(jié)果:初始化一個空的循環(huán)隊列voidEnQueue<StuQueue&Q,FinalStustu>初始條件:循環(huán)隊列Q已經(jīng)存在,并且無信息操作結(jié)果:向Q中循環(huán)加入信息voidEnQueue2<StuQueue&Q,FinalStustu>初始條件:循環(huán)隊列已存在,非首次進循環(huán)隊列 操作結(jié)果:向Q中添加信息FinalStuDeQueue<StuQueue&Q>初始條件:循環(huán)隊列已存在操作結(jié)果:使隊列頭的元素出隊列,且返回FinalStu類型值}ADTStuQueue//學(xué)生座位隊列音樂隊列:ADTMusicList{數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2..n;n≥0}數(shù)據(jù)關(guān)系:R={<ai-1,ai>ai∈D,i=1,2..n}voidInitMusic<MusicList&MList>操作結(jié)果:創(chuàng)建循環(huán)鏈表voidInsertMusic<MusicList&MList,char*name>初始條件:該鏈表已存在操作結(jié)果:向鏈表中添加數(shù)據(jù)}ADTMusicList;臨時隊列:ADTTempQList{數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2..n;n≥0}數(shù)據(jù)關(guān)系:R={<ai-1,ai>ai∈D,i=1,2..n}voidInitQList<TempQList&TQL>操作結(jié)果:初始化臨時隊列voidEnTempQueue<TempQList&TQL,FinalStustu>初始條件:隊列TQL已存在操作結(jié)果:向TQL中添加信息FinalStuDeTempQueue<TempQList&TQL>初始條件:隊列TQL存在操作結(jié)果:取出隊列的對頭元素,返回FinalStu類型}ADTTempQList;2.2程序模塊本系統(tǒng)主要包括登陸模塊、學(xué)生入座、自動配對、顯示配對過程以及查詢配對信息模塊。登陸:輸入正確的用戶名以及密碼,方可進入系統(tǒng),連續(xù)輸入錯誤三次則禁止進入系統(tǒng)。學(xué)生入座:以不同的方式獲取學(xué)生信息后,根據(jù)學(xué)生性別依次進入兩個循環(huán)隊列,并為每個學(xué)生唯一編號。自動配對:每首歌開始時,男女生依次從坐席中出來進行本首歌的配對,配對不成功者等待下首歌繼續(xù)配對,下首歌時,上首歌未配對成功者本首歌先進行配對。顯示配對過程:在播放歌曲的過程中,顯示播放的歌曲信息,以及本首歌的配對信息。查詢配對:根據(jù)男女生的姓名查出兩人的在哪一首歌進行過配對,根據(jù)歌曲名稱查詢出本首歌的配對信息。文件操作:將配對情況及學(xué)生的座位信息寫入文件根據(jù)系統(tǒng)模塊的劃分,本系統(tǒng)的功能模塊圖如圖2-1所示圖2-1功能模塊2.3模塊調(diào)用及算法登陸成功后進入主界面,進入主界面后,需要先運行學(xué)生入座模塊,方能進行下邊的操作。學(xué)生入座后會得到相關(guān)的基本信息。之后調(diào)用配對模塊函數(shù),進行學(xué)生的配對。學(xué)生配對成功后,才能利用顯示配對過程進行顯示配對的情況,后續(xù)的查詢配對模塊也必須在配對成功的基礎(chǔ)上進行。模塊間的調(diào)用流程如圖2-2所示圖2-2模塊調(diào)用在進行配對過程中用到算法,在每首歌配對時,依次從男女生隊列中出來一個學(xué)生,進入到臨時隊列,從臨時隊列中獲取配對的情況。在本首歌結(jié)束,下首歌開始之前,讓臨時隊列中的男女在分別根據(jù)性別入隊,依次循環(huán),每次調(diào)用配對函數(shù),實現(xiàn)學(xué)生的循環(huán)配對。第三章詳細(xì)設(shè)計3.1操作實現(xiàn)本系統(tǒng)包含七個文件。設(shè)計分有歡迎界面,登陸系統(tǒng),入隊函數(shù),配對函數(shù),顯示函數(shù),查詢函數(shù)等。登陸界面是整個系統(tǒng)的入口,其主要是讓合法人員進入系統(tǒng),入隊函數(shù)主要讓學(xué)生進入男女隊列,配對函數(shù)主要是根據(jù)每首歌曲把男女生進行配對,顯示函數(shù)主要是顯示男女生的配對情況,查詢函數(shù)主要是根據(jù)男女生姓名和歌曲名查找配對情況。系統(tǒng)首先通過程序調(diào)用voidmain<>進入歡迎界面和系統(tǒng)登陸界面,根據(jù)用戶的帳號和密碼登陸成功后進入主菜單。根據(jù)用戶的選擇可分別進入:1.學(xué)生就坐;2.每曲配對;3.顯示結(jié)果;4.查詢配對;5.退出。選擇"1.學(xué)生就坐"項,會顯示學(xué)生信息來源,包括"1.按班級獲取<推薦>""2.手動輸入..."兩項可供選擇。其中,1是從文件中獲取學(xué)生信息,2是用戶手動輸入學(xué)生信息。選擇"2.每曲配對"項,會顯示播放歌曲的類型,有"1.流行""2.復(fù)古"兩個音樂風(fēng)格可供選擇,當(dāng)用戶選擇其中一個風(fēng)格并確定播放后,會顯示出當(dāng)前播放的歌曲名字和所配對的男女生。選擇"3.顯示結(jié)果"項,會有"1.學(xué)生座位信息"和"2.學(xué)生配對信息"兩項操作可供選擇。當(dāng)選擇1,會把學(xué)生就坐后的信息顯示出來,選擇2,會把每首歌學(xué)生的配對情況顯示出來。選擇"4.查詢配對"項,也有兩個操作可供選擇,分別是"1.按學(xué)生姓名""按歌曲名"兩項。選擇1,會根據(jù)用戶輸入的男女生姓名查看他們的配對情況,選擇2,會根據(jù)用戶輸入的歌曲名稱顯示每首歌曲學(xué)生的配對情況。選擇"5.退出"項,會出現(xiàn)感謝使用系統(tǒng)界面,并按任意鍵退出系統(tǒng)。本系統(tǒng)的主流程圖如圖3-1所示圖3-1主流程3.2算法實現(xiàn)定義學(xué)生結(jié)構(gòu)體FinalStu,將學(xué)生的信息放到本結(jié)構(gòu)體中,定義兩個循環(huán)隊列Boys和Girls隊列,分別存儲男女生的座位信息。定義MusicList循環(huán)鏈表,用于存放音樂信息。定義TempQueue隊列,用于臨時存放從男女生隊列中出來的學(xué)生信息。創(chuàng)建一個存放每首歌配對情況的數(shù)組stuTable[],用來存放播放該首歌曲時男女生的信息。每一首歌開始時,男女生依次用Boys和Girls隊列中出對,依次進入臨時隊列TempQueue,從TempQueue中讀取男女生的信息,放到stuTable數(shù)組中,表示該首歌的配對情況。下首歌開始時,讓臨時隊列中的學(xué)生再根據(jù)性別依次進入男女循環(huán)隊列。同時將存放歌曲的MusicList循環(huán)鏈表指針后移,播放下首歌曲,再執(zhí)行上述操作,便可實現(xiàn)循環(huán)配對。第四章編碼調(diào)試4.1調(diào)試環(huán)境硬件環(huán)境:Intel1GHZ處理器〔或AMD同類處理器,512M或以上內(nèi)存容量,10G或以上硬盤容量,可連接互聯(lián)網(wǎng)的相關(guān)設(shè)備。軟件環(huán)境〔軟件、操作系統(tǒng):WindowsXP〔或Windows2003或Windowsvista或Windows7操作系統(tǒng),MicrosoftVisualStudio2008。4.2調(diào)試方法為了提高測試效率,降低測試成本,本測試方案采用黑盒法設(shè)計基本的測試方案,再用白盒法補充一些方案。在黑盒法測試方案中,采用等價劃分技術(shù),把所有可能的數(shù)據(jù)劃分成幾個等價類。4.3調(diào)試項目及調(diào)試結(jié)果4.3.1登陸測試用戶根據(jù)用戶名及密碼登陸系統(tǒng),內(nèi)置用戶為Admin,密碼為888888。登陸成功如圖4-1所示,登陸失敗如圖4-2所示圖4-1登陸成功圖4-2登陸失敗4.3.2加載學(xué)生信息可以從文件或者手動輸入學(xué)生信息,從文件中選擇時,可以選擇不同的文件,其運行結(jié)果如圖4-2及圖4-3所示圖4-3選擇信息來源圖4-4顯示獲取信息4.3.3學(xué)生配對調(diào)試在進行配對之前,需要先將音樂信息加載到系統(tǒng)中,其加載過程如圖4-5所示圖4-5加載音樂學(xué)生就位及音樂加載成功后,開始播放音樂,并進行配對,其音樂播放情況及每首歌曲的配對情況如圖4-6、圖4-7及圖4-8所示圖4-6配對開始圖4-7播放下一首圖4-8循環(huán)配對4.3.4顯示總配對在整個過程結(jié)束后,停止播放音樂,可以顯示整個過程的配對情況,其結(jié)果如圖4-9所示圖4-9顯示配對結(jié)果4.3.5查詢配對可以根據(jù)男女生的姓名查詢兩人的配對情況,當(dāng)輸入兩個學(xué)生姓名時,顯示在整個過程中的配對情況,其結(jié)果如圖4-10所示圖4-10姓名查詢配對根據(jù)每一首歌曲情況查詢在本首歌曲中的配對情況,其結(jié)果如圖4-11所示圖4-11按歌名查找第五章總結(jié)這次的課程設(shè)計懂得了理論與實際相結(jié)合是很非常重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為,從而提高自己的實際動手能力和獨立思考的能力。在整個設(shè)計過程中,構(gòu)思是很花費時間的,在構(gòu)思總體架構(gòu)時,需要先將需求分析搞清楚,需要在找到了需要解決的問題后,再想辦法解決該問題。而不是在設(shè)計過程中邊想邊解決,需要先將所有可能的問題都考慮到,再依次解決。在整個系統(tǒng)設(shè)計完成后,如果再遇到新的問題,可以對系統(tǒng)進行適當(dāng)?shù)母?。調(diào)試時經(jīng)常會遇到這樣那樣的錯誤,有的時候是因為一些最基本的錯誤,如標(biāo)點的中英錯誤,括號的匹配問題,數(shù)據(jù)的輸入錯誤等。當(dāng)然,也有很多地方是因為用錯了解決方法。在設(shè)計的過程中,最能體現(xiàn)出的缺點就是基礎(chǔ)不扎實,本可以避免的錯誤卻一再出現(xiàn)。在實現(xiàn)舞池配對問題過程中,需要使學(xué)生循環(huán)配對,此程序設(shè)計的是當(dāng)一個光盤的音樂播放結(jié)束時,整個配對過程隨之結(jié)束,而沒有讓學(xué)生再次進去坐席,導(dǎo)致不再從新將學(xué)生入座,就無法實現(xiàn)配對。設(shè)計的是在每首歌開始之前學(xué)生進入隊列,可以改為當(dāng)某個學(xué)生坐席為空時,隨即讓學(xué)生再次進入隊列,可以解決不能重復(fù)換歌曲的問題。剛開始的時候我直接在開發(fā)環(huán)境下一邊看題一邊寫代碼,瞪了半天什么也沒寫出來,于是我便先開始在紙上畫畫寫寫,將事件的整個過程畫下來,然后考慮怎么才能運用代碼來實現(xiàn),一邊思考一邊寫一些粗略的代碼,最后從上到下執(zhí)行代碼看看是不是符合題目要求。有沒有什么漏洞。等這些完成以后,再在開發(fā)環(huán)境下將代碼完善、編譯和調(diào)試。雖然說代碼還有許多要改進的地方,有的功能還不夠完善,可畢竟是自己親自寫出來的,對于程序的條理有了一個清晰的了解,對編程也有了更加深刻的認(rèn)識。參考文獻譚浩強.C程序設(shè)計<第三版>[M].北京:清華大學(xué)出版社,2005.嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)<C語言版>[M].北京:清華大學(xué)出版社,1997.陸麗娜.軟件工程.北京:經(jīng)濟科學(xué)出版社,2005.姚詩斌.數(shù)據(jù)庫系統(tǒng)基礎(chǔ).計算機工程與應(yīng)用,1981年第8期附錄系統(tǒng)源代碼#include<iostream>#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<Windows.h>#defineMAXQSIZE20//循環(huán)隊列最大存儲量#defineSTU_SIZE5//學(xué)生人數(shù)#defineSIZE100intidCount=1000;//全局變量控制學(xué)生id自增intlength;//記錄每首歌配對的數(shù)量intindex=0;//記錄最終配對表的下標(biāo)usingnamespacestd;//舞池就坐后的學(xué)生信息結(jié)構(gòu)體structAdmin{charname[15];charpassWord[15]; Admin*next;};Admin*admin;structFinalStu{charname[15];charsex[3];intid;};FinalStustu[STU_SIZE];FinalStustuSeat[STU_SIZE];//用來存放入座后的學(xué)生信息FinalStustuTable[STU_SIZE][2];//用來存放沒收歌曲的配對情況//舞池座位structStuQueue{ FinalStu*base;intfront;intrear;};StuQueueBoys;//男生隊列StuQueueGirls;//女生隊列//初始化學(xué)生坐席voidInitQueue<StuQueue&Q>{ Q.base=<FinalStu*>malloc<MAXQSIZE*sizeof<FinalStu>>;if<Q.base==NULL>return; Q.front=Q.rear=0;}//學(xué)生就坐,首次入隊,需要獲取學(xué)生的idvoidEnQueue<StuQueue&Q,FinalStustu>{inti=100;if<<Q.rear+1>%MAXQSIZE==Q.front>return; strcpy<Q.base[Q.rear].name,>; strcpy<Q.base[Q.rear].sex,stu.sex>; Q.base[Q.rear].id=idCount++; Q.rear=<Q.rear+1>%MAXQSIZE;}//非首次入隊,不需獲取學(xué)生的idvoidEnQueue2<StuQueue&Q,FinalStustu>{ strcpy<Q.base[Q.rear].name,>; strcpy<Q.base[Q.rear].sex,stu.sex>; Q.base[Q.rear].id=stu.id; Q.rear=<Q.rear+1>%MAXQSIZE;}//從坐席上出來FinalStuDeQueue<StuQueue&Q>{ FinalStustu;if<Q.rear!=Q.front> { stu=Q.base[Q.front]; } Q.front=<Q.front+1>%MAXQSIZE;returnstu;}//存放音樂信息structMusic{charM_Name[15]; Music*next;};//存放音樂鏈,循環(huán)鏈表structMusicList{ Music*head; Music*tail;};MusicListML;Music*M_p;//初始化指針voidInitMusic<MusicList&MList>{ MList.head=MList.tail=<Music*>malloc<sizeof<Music>>; MList.head->next=NULL;}//向音樂鏈表中添加音樂voidInsertMusic<MusicList&MList,char*name>{ Music*p=<Music*>malloc<sizeof<Music>>; MList.tail->next=p; strcpy<p->M_Name,name>; MList.tail=p; MList.tail->next=MList.head;}//臨時隊列,用于存放從男女生隊列中配對成成功的學(xué)生信息structTempQueue{ FinalStustu; TempQueue*next;};structTempQList{ TempQueue*front; TempQueue*rear;};TempQListTempQL;//臨時隊列,用于存放每次出來的男女生信息voidInitQList<TempQList&TQL>{ TQL.front=TQL.rear=<TempQueue*>malloc<sizeof<TempQueue>>; TQL.front->next=NULL;}voidEnTempQueue<TempQList&TQL,FinalStustu>{ TempQueue*p=<TempQueue*>malloc<sizeof<TempQueue>>; p->stu=stu; p->next=NULL; TQL.rear->next=p; TQL.rear=p;}FinalStuDeTempQueue<TempQList&TQL>{ FinalStustu; TempQueue*p; p=TQL.front->next;if<p==TQL.rear> { stu=p->stu; TQL.rear=TQL.front; }else { stu=p->stu; TQL.front->next=p->next; } free<p>;returnstu;}//==========配對信息存放===================structMatchList{charmusicName[20]; FinalStustu[2];};MatchListmatchTable[SIZE];//從鍵盤讀入學(xué)生信息voidGetInfKey<>{for<inti=0;i<STU_SIZE;i++> { cout<<"輸入第"<<i+1<<"個學(xué)生的姓名:"; scanf<"%s",stu[i].name>; cout<<"輸入第"<<i+1<<"個學(xué)生的性別:"; scanf<"%s",stu[i].sex>; }}//學(xué)生入座voidStudentSit<>{for<inti=0;i<STU_SIZE;i++> {if<strcmp<stu[i].sex,"男">==0> EnQueue<Boys,stu[i]>;else EnQueue<Girls,stu[i]>; }}//獲取就坐后的男女生性別、姓名、編號,stuSeat[]存放就坐后的學(xué)生信息,包括學(xué)生編號voidGetStuSeat<>{inti=0;intj=0; i=Boys.front; j=Girls.front;while<i!=Boys.rear> { stuSeat[i]=Boys.base[i]; i++; }while<j!=Girls.rear> { stuSeat[i]=Girls.base[j]; j++; i++; }}//將就座的學(xué)生信息寫入文件intInFileStuSeat<>{ FILE*fp_Seat;intres=0;if<<fp_Seat=fopen<"Seat.txt","wt">>==NULL> { cout<<"讀取學(xué)生座位信息失?。。?!";return-1; } fprintf<fp_Seat,"姓名\t性別\t序號\n">;for<inti=0;i<STU_SIZE;i++> { fprintf<fp_Seat,"%s\t%s\t%d",stuSeat[i].name,stuSeat[i].sex,stuSeat[i].id>; fprintf<fp_Seat,"\n">; res++; } fclose<fp_Seat>;returnres;}voidPrintStuSeat<>{ cout<<"\t\t\t姓名\t性別\t序號"<<endl;for<inti=0;i<STU_SIZE;i++> { cout<<"\t\t\t"<<stuSeat[i].name<<"\t"; cout<<stuSeat[i].sex<<"\t"<<stuSeat[i].id<<endl; }}//從文件中獲取管理員信息voidReadAdmin<>{ admin=<Admin*>malloc<sizeof<Admin>>; admin->next=NULL; Admin*q=admin; FILE*fp_Admin;if<<fp_Admin=fopen<"admin.txt","rt">>==NULL> { cout<<"打開文件失?。。?!";return; }while<!feof<fp_Admin>> { Admin*p=<Admin*>malloc<sizeof<Admin>>; p->next=NULL; fscanf<fp_Admin,"%s%s",p->name,p->passWord>; q->next=p; q=p; } fclose<fp_Admin>;}//從文件獲取學(xué)生信息voidReadStuFile<intres>{ FILE*fp;if<res==1> {if<<fp=fopen<"student1.txt","rt">>==NULL> { cout<<"打開文件失?。。?!"<<endl;return; } }elseif<res==2> {if<<fp=fopen<"student2.txt","rt">>==NULL> { cout<<"打開文件失?。。?!"<<endl;return; } }inti=0;while<!feof<fp>> { fscanf<fp,"%s%s",stu[i].name,stu[i].sex>; i++;if<i>=STU_SIZE>break; } fclose<fp>;}//加載音樂信息intLoadMusic<intcd>{charmusic[5][20];//存放從文件中獲取的音樂名稱intres=0; FILE*fp_music;if<cd==1> {if<<fp_music=fopen<"music1.txt","rt">>==NULL> { cout<<"打開音樂文件失?。。?!"<<endl;return-1; } }elseif<cd==2> {if<<fp_music=fopen<"music2.txt","rt">>==NULL> { cout<<"打開音樂文件失?。。?!"<<endl;return-1; } }for<intj=0;j<5;j++> {if<fread<music[j],20*sizeof<char>,1,fp_music>==1> res++; } fclose<fp_music>; InitMusic<ML>;for<inti=0;i<5;i++> { InsertMusic<ML,music[i]>; }returnres;}intInFileMatchTable<>{ FILE*fp_MTable;if<<fp_MTable=fopen<"matchtable.txt","wt">>==NULL> { cout<<"打開文件失敗~~~~"<<endl;return-1; } fprintf<fp_MTable,"歌曲名稱\t姓名\t性別\t序號\t姓名\t性別\t序號\n">;for<inti=0;i<index;i++> { fprintf<fp_MTable,"%s\t\t%s\t%s\t%d\t",matchTable[i].musicName,matchTable[i].stu[0].name,matchTable[i].stu[0].sex,matchTable[i].stu[0].id>; fprintf<fp_MTable,"%s\t%s\t%d\n",matchTable[i].stu[1].name,matchTable[i].stu[1].sex,matchTable[i].stu[1].id>; } fclose<fp_MTable>;return1;}voidStudentSitAgain<>{ FinalStustu;while<TempQL.front!=TempQL.rear> { stu=DeTempQueue<TempQL>;if<strcmp<stu.sex,"男">==0> EnQueue2<Boys,stu>;else EnQueue2<Girls,stu>; }}//播放歌曲voidPlayMusic<>{ cout<<"\t\t正在播放:\t"<<M_p->M_Name;}//下一首voidNextMusic<>{ M_p=M_p->next;if<M_p==ML.head> { M_p=ML.head->next; }}//學(xué)生配對voidMatch<>{//FinalStustudent[STU_SIZE];intstatici=0;intj=0; length=0;while<Boys.front!=Boys.rear&&Girls.front!=Girls.rear> { EnTempQueue<TempQL,DeQueue<Boys>>;//從男生隊列中出來進入臨時隊列 EnTempQueue<TempQL,DeQueue<Girls>>;//從女生隊列中出來進入臨時隊列 length++;//記錄每首歌的配對數(shù) }//從臨時隊列中將信息賦值給表 TempQueue*tem=TempQL.front->next;while<tem> { strcpy<matchTable[index].musicName,M_p->M_Name>; strcpy<matchTable[index].stu[0].name,tem->>; strcpy<matchTable[index].stu[0].sex,tem->stu.sex>; matchTable[index].stu[0].id=tem->stu.id;//每曲歌的配對情況 strcpy<stuTable[j][0].name,tem->>; strcpy<stuTable[j][0].sex,tem->stu.sex>; stuTable[j][0].id=tem->stu.id; tem=tem->next;//整個播放過程的配對表 strcpy<matchTable[index].stu[1].name,tem->>; strcpy<matchTable[index].stu[1].sex,tem->stu.sex>; matchTable[index].stu[1].id=tem->stu.id;//每首歌配對表 strcpy<stuTable[j][1].name,tem->>; strcpy<stuTable[j][1].sex,tem->stu.sex>; stuTable[j][1].id=tem->stu.id; tem=tem->next; index++; j++; }}//顯示每首歌配對情況voidPrintEachMatch<>{ cout<<endl; cout<<"本首歌的配對情況:"<<endl; cout<<"姓名\t性別\t序號\t姓名\t性別\t序號"<<endl;for<inti=0;i<length;i++>//length為每首歌的配對長度 { cout<<stuTable[i][0].name<<"\t"<<stuTable[i][0].sex<<"\t"<<stuTable[i][0].id<<"\t"; cout<<stuTable[i][1].name<<"\t"<<stuTable[i][1].sex<<"\t"<<stuTable[i][1].id<<endl; }}//播放下首歌時需要進行的各種操作voidNext<>{ StudentSitAgain<>; NextMusic<>; PlayMusic<>; Match<>; PrintEachMatch<>;}//獲取要顯示信息的一些操作//顯示界面的一些函數(shù)voidMainMenu<>{ cout<<"\t\t\t\t"<<"主界面"<<endl; cout<<"\t\t\t"<<"1、學(xué)生就坐"; cout<<"\t"<<"2、每曲配對"<<endl; cout<<"\t\t\t"<<"3、顯示結(jié)果"; cout<<"\t"<<"4、查詢配對"<<endl; cout<<"\t\t\t\t5、退出";}//配對顯示voidPrintMatchTable<>{ cout<<"歌曲名稱\t姓名\t性別\t序號\t姓名\t性別\t序號"<<endl;for<inti=0;i<index;i++> { cout<<matchTable[i].musicName<<"\t"<<matchTable[i].stu[0].name<<"\t"<<matchTable[i].stu[0].sex<<"\t"<<matchTable[i].stu[0].id<<"\t"; cout<<matchTable[i].stu[1].name<<"\t"<<matchTable[i].stu[1].sex<<"\t"<<matchTable[i].stu[1].id<<endl; }}voidPrintStuRes<>{ cout<<"\t\t\t請選擇學(xué)生信息來源:"<<endl; cout<<"\t\t\t1、按班級獲取<推薦>"<<endl; cout<<"\t\t\t2、手動輸入..."<<endl;}voidStudentChose<>{ PrintStuRes<>; cout<<"請選擇操作:";intres; cin>>res;switch<res> {case1://從文件讀取數(shù)據(jù)intres; cout<<"請選擇班級:"<<endl; cout<<"1.三年一班\t2.三年二班"<<endl; cin>>res;if<res==1> { ReadStuFile<1>; }elseif<res==2> { ReadStuFile<2>; }break;case2: cout<<"開始輸入"<<endl; GetInfKey<>;//鍵盤鍵入數(shù)據(jù)break;default: cout<<"輸入有誤,再見"<<endl;break; }}voidMusicMenu<>{ cout<<"請選擇要放入的光盤類型:"<<endl; cout<<"1.流行\(zhòng)t2.復(fù)古\n";intres,i;charch; cin>>res;if<res==1> i=LoadMusic<1>;else i=LoadMusic<2>;if<i> { M_p=ML.head->next;//p指向第一首歌 cout<<"歌曲光盤已就位,是否現(xiàn)在播放<Y/N>"<<endl; cin>>ch; InitQList<TempQL>;//初始化臨時隊列if<ch=='Y'||ch=='y'> { system<"cls">; PlayMusic<>; Match<>; PrintEachMatch<>; } cout<<"按n進行下一首歌曲、、\n"; cout<<"按q停止播放音樂、、"<<endl; cin>>ch;while<ch=='n'||ch=='N'> { system<"cls">; Next<>; cout<<"按n進行下一首歌曲、、\n"; cout<<"按q停止播放音樂、、"<<endl; cin>>ch; }if<ch=='q'||ch=='Q'>return; }}voidWelcome<>{ cout<<"\t\t\t\t歡迎進入進入舞池~~~~"<<endl<<endl; cout<<"\t\t\t按任意鍵繼續(xù)..."; getch<>; system<"cls">;}voidLoadAdmin<>{ Welcome<>;intres=0;inti; ReadAdmin<>;charuserName[15];charkey[15];for<i=0;i<3;i++> { Admin*p=admin->next; cout<<"\t\t\t請輸入您的用戶名:"; cin>>userName; cout<<"\t\t\t請輸入您的密碼:"; cin>>key;while<p> {if<strcmp<p->name,userName>==0>break; p=p->next; }if<!p> { system<"cls">; cout<<"\t\t\t輸入的用戶名不存在~~~~~"<<endl;;continue; }if<p> {if<strcmp<p->passWord,key>==0> { system<"cls">; cout<<"\t\t\t\t歡迎回來."; Sleep<500>; system<"cls">; cout<<"\t\t\t\t歡迎回來.."; Sleep<500>; system<"cls">; cout<<"\t\t\t\t歡迎回來..."; Sleep<500>;//system<"cls">;break; }else { system<"cls">; cout<<"\t\t\t輸入的密碼錯誤、、、"<<endl;;continue; } } }if<i>=3> { cout<<"\t\t\t您今天的機會已經(jīng)用完,再見"; exit<0>; }}voidShowMessage<>{ system<"cls">;intres; cout<<"\t\t\t選擇要操作的信息:"<<endl; cout<<"\t\t\t1.學(xué)生座位信息\t2.學(xué)生配對信息"<<endl; cin>>res;if<res==1> { cout<<"\t\t\t座位信息如下:"<<endl; PrintStuSeat<>;charch; cout<<"是否將該信息寫入文件<Y/N>:"; cin>>ch;if<ch=='Y'||ch=='y'> {if<InFileMatchTable<>> { cout<<"數(shù)據(jù)已寫入文件..."<<endl; } } }elseif<res==2> { PrintMatchTable<>;charch; cout<<"是否將該信息寫入文件<Y/N>:"; cin>>ch;if<ch=='Y'||ch=='y'> {if<InFileMatchTable<>> cout<<"數(shù)據(jù)已寫入文件..."<<endl;; } Sleep<3000>; }}voidQuit<>{system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡迎">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡迎下">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡迎下次">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡迎下次使^">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡迎下次使用">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡迎下次使用^o^">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡迎下次使用^o^\n\n\t\t\t\t">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡迎下次使用^o^\n\n\t\t\t\tGoodBye!">; Sleep<200>; system<"CLS">;printf<"\n\n\n\n\n\n\n\n\t\t\t^o^歡迎下次使用^o^\n\n\t\t\t\tGoodBye!\n">;}voidCheckByName<>//根據(jù)姓名查詢配對情況{charboyName[15];chargirlName[15]; cout<<"請輸入男生姓名:"; cin>>boyName; cout<<"請輸入女生姓名:"; cin>>girlName;intcount=0;for<inti=0;i<index;i++> {if<strcmp<matchTable[i].stu[0].name,boyName>==0&&strcmp<matchTable[i].stu[1].name,girlName>==0> { count++; } }if<count==0> { cout<<"未找到配對情況:"; }else { cout<<"\t\t\t查詢的
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《黑底整套模板》課件
- 《禮儀祝詞講課》課件
- 《世界地理復(fù)習(xí)之地》課件
- 《直流部分單元測驗》課件
- 《在險價值模型》課件
- 《臺階公開課》課件
- 臨床??七\營管理模式
- 7 生命最寶貴 (說課稿)-2024-2025學(xué)年道德與法治三年級上冊統(tǒng)編版
- 上海市金山區(qū)九年級歷史上冊 第二單元 近代社會的確立與動蕩 第8課 改變世界面貌的蒸汽革命說課稿 北師大版
- DB37-T 4451.8-2023 特種設(shè)備突發(fā)事件應(yīng)急處置技術(shù)指南 第8部分:移動式壓力容器
- 【藥用低密度聚乙烯袋探究4500字(論文)】
- 鄉(xiāng)鎮(zhèn)林長制培訓(xùn)課件
- 茶葉運營方案
- 企業(yè)法律顧問方案
- 哈佛大學(xué)住房研究聯(lián)合中心:2024年美國房屋租賃報告
- 農(nóng)商銀行貴金屬分析報告
- 人教版英語八年級下冊全冊教案教學(xué)設(shè)計及教學(xué)反思
- 軟件確認(rèn)報告-模板
- 馬克思主義的誕生(何)
- 《紅樓夢第五回》課件
- 供應(yīng)鏈管理 課件 項目一 供應(yīng)鏈及供應(yīng)鏈管理認(rèn)知
評論
0/150
提交評論