版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-.z.-----優(yōu)質(zhì)資料編號(hào)華北水利水電大學(xué)NorthChinaInstituteofWaterConservancyandHydroelectricPower課程設(shè)計(jì)題目舞伴問(wèn)題院系信息工程學(xué)院專(zhuān)業(yè)計(jì)算機(jī)科學(xué)與技術(shù)**賈寧指導(dǎo)教師彬第一章需求分析21.1問(wèn)題描述21.2根本要求21.2.1輸入及輸出格式21.2.2程序所完成的功能2第二章概要設(shè)計(jì)22.1數(shù)據(jù)構(gòu)造22.2程序模塊22.3模塊調(diào)用及算法2第三章詳細(xì)設(shè)計(jì)23.1操作實(shí)現(xiàn)23.2算法實(shí)現(xiàn)2第四章編碼調(diào)試24.1調(diào)試環(huán)境24.2調(diào)試方法24.3調(diào)試工程及調(diào)試結(jié)果24.3.1登陸測(cè)試24.3.2加載學(xué)生信息24.3.3學(xué)生配對(duì)調(diào)試2顯示總配對(duì)24.3.5查詢(xún)配對(duì)2第五章總結(jié)2參考文獻(xiàn)2附錄系統(tǒng)源代碼2第一章需求分析1.1問(wèn)題描述一班有m個(gè)女生、n個(gè)男生(m不等于n),舉辦一場(chǎng)舞會(huì).男女生分別編號(hào)坐在舞池兩邊的椅子上,每曲開(kāi)場(chǎng)時(shí),依次從男生和女生中各出一人配對(duì)跳舞,本曲沒(méi)成功配對(duì)者坐著等待下一曲找舞伴,設(shè)計(jì)一個(gè)程序模擬舞伴配對(duì)過(guò)程。1.2根本要求1.2.1輸入及輸出格式輸入男、女學(xué)生的**、性別,由程序自動(dòng)為男女生編號(hào),可以順序編號(hào),也可以隨機(jī)編號(hào),輸出每曲配對(duì)情況〔包括男、女生的**、性別和編號(hào)〕。原始數(shù)據(jù)和結(jié)果數(shù)據(jù)要保存到文件中。在讀入男女生信息時(shí),可以從文件中直接讀取學(xué)生的**和性別信息。輸出顯示時(shí)顯示每首歌的配對(duì)情況,包括對(duì)應(yīng)配對(duì)學(xué)生的**、性別以及編號(hào)??梢暂敵稣麄€(gè)舞池配對(duì)過(guò)程的所有配對(duì)情況。將輸出顯示的內(nèi)容對(duì)應(yīng)寫(xiě)入到指定的文件中。1.2.2程序所完成的功能從文件或者手動(dòng)輸入班級(jí)的學(xué)生信息,包括**和性別根本信息,根據(jù)性別使男女生分別坐在舞池兩邊的座位上,學(xué)生的座位編號(hào)順序生成,且一旦編號(hào)確定,將不再發(fā)生變化。每一首歌曲播放時(shí),依次從男女生隊(duì)列中出來(lái)學(xué)生進(jìn)展配對(duì),由于男女生人數(shù)不一致,會(huì)使*個(gè)隊(duì)列中剩下假設(shè)干學(xué)生配對(duì)不成功,配對(duì)不成功者等待下首歌時(shí)再進(jìn)展配對(duì)。該首歌完畢時(shí),配對(duì)成功的學(xué)生再回到座位上。然后再依次進(jìn)展配對(duì),未成功者等待下首歌再進(jìn)展配對(duì)。配對(duì)成功時(shí),會(huì)顯示本首歌的詳細(xì)配對(duì)情況,以及整個(gè)過(guò)程的配對(duì)情況,并且可以將配對(duì)情況寫(xiě)入到文件。根據(jù)男女生的**或者*首歌曲的名字可以查詢(xún)到對(duì)應(yīng)的配對(duì)情況。第二章概要設(shè)計(jì)2.1數(shù)據(jù)構(gòu)造學(xué)生座位隊(duì)列:ADTStuQueue{數(shù)據(jù)對(duì)象: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é)果:初始化一個(gè)空的循環(huán)隊(duì)列voidEnQueue(StuQueue&Q,FinalStustu)初始條件:循環(huán)隊(duì)列Q已經(jīng)存在,并且無(wú)信息操作結(jié)果:向Q中循環(huán)參加信息voidEnQueue2(StuQueue&Q,FinalStustu)初始條件:循環(huán)隊(duì)列已存在,非首次進(jìn)循環(huán)隊(duì)列操作結(jié)果:向Q中添加信息FinalStuDeQueue(StuQueue&Q)初始條件:循環(huán)隊(duì)列已存在操作結(jié)果:使隊(duì)列頭的元素出隊(duì)列,且返回FinalStu類(lèi)型值}ADTStuQueue//學(xué)生座位隊(duì)列音樂(lè)隊(duì)列:ADTMusicList{數(shù)據(jù)對(duì)象: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;臨時(shí)隊(duì)列:ADTTempQList{數(shù)據(jù)對(duì)象: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é)果:初始化臨時(shí)隊(duì)列voidEnTempQueue(TempQList&TQL,FinalStustu)初始條件:隊(duì)列TQL已存在操作結(jié)果:向TQL中添加信息FinalStuDeTempQueue(TempQList&TQL)初始條件:隊(duì)列TQL存在操作結(jié)果:取出隊(duì)列的對(duì)頭元素,返回FinalStu類(lèi)型}ADTTempQList;2.2程序模塊本系統(tǒng)主要包括登陸模塊、學(xué)生入座、自動(dòng)配對(duì)、顯示配對(duì)過(guò)程以及查詢(xún)配對(duì)信息模塊。登陸:輸入正確的用戶(hù)名以及密碼,方可進(jìn)入系統(tǒng),連續(xù)輸入錯(cuò)誤三次則制止進(jìn)入系統(tǒng)。學(xué)生入座:以不同的方式獲取學(xué)生信息后,根據(jù)學(xué)生性別依次進(jìn)入兩個(gè)循環(huán)隊(duì)列,并為每個(gè)學(xué)生唯一編號(hào)。自動(dòng)配對(duì):每首歌開(kāi)場(chǎng)時(shí),男女生依次從坐席中出來(lái)進(jìn)展本首歌的配對(duì),配對(duì)不成功者等待下首歌繼續(xù)配對(duì),下首歌時(shí),上首歌未配對(duì)成功者本首歌先進(jìn)展配對(duì)。顯示配對(duì)過(guò)程:在播放歌曲的過(guò)程中,顯示播放的歌曲信息,以及本首歌的配對(duì)信息。查詢(xún)配對(duì):根據(jù)男女生的**查出兩人的在哪一首歌進(jìn)展過(guò)配對(duì),根據(jù)歌曲名稱(chēng)查詢(xún)出本首歌的配對(duì)信息。文件操作:將配對(duì)情況及學(xué)生的座位信息寫(xiě)入文件根據(jù)系統(tǒng)模塊的劃分,本系統(tǒng)的功能模塊圖如圖2-1所示圖2-1功能模塊2.3模塊調(diào)用及算法登陸成功后進(jìn)入主界面,進(jìn)入主界面后,需要先運(yùn)行學(xué)生入座模塊,方能進(jìn)展下邊的操作。學(xué)生入座后會(huì)得到相關(guān)的根本信息。之后調(diào)用配對(duì)模塊函數(shù),進(jìn)展學(xué)生的配對(duì)。學(xué)生配對(duì)成功后,才能利用顯示配對(duì)過(guò)程進(jìn)展顯示配對(duì)的情況,后續(xù)的查詢(xún)配對(duì)模塊也必須在配對(duì)成功的根底上進(jìn)展。模塊間的調(diào)用流程如圖2-2所示圖2-2模塊調(diào)用在進(jìn)展配對(duì)過(guò)程中用到算法,在每首歌配對(duì)時(shí),依次從男女生隊(duì)列中出來(lái)一個(gè)學(xué)生,進(jìn)入到臨時(shí)隊(duì)列,從臨時(shí)隊(duì)列中獲取配對(duì)的情況。在本首歌完畢,下首歌開(kāi)場(chǎng)之前,讓臨時(shí)隊(duì)列中的男女在分別根據(jù)性別入隊(duì),依次循環(huán),每次調(diào)用配對(duì)函數(shù),實(shí)現(xiàn)學(xué)生的循環(huán)配對(duì)。第三章詳細(xì)設(shè)計(jì)3.1操作實(shí)現(xiàn)本系統(tǒng)包含七個(gè)文件。設(shè)計(jì)分有歡送界面,登陸系統(tǒng),入隊(duì)函數(shù),配對(duì)函數(shù),顯示函數(shù),查詢(xún)函數(shù)等。登陸界面是整個(gè)系統(tǒng)的入口,其主要是讓合法人員進(jìn)入系統(tǒng),入隊(duì)函數(shù)主要讓學(xué)生進(jìn)入男女隊(duì)列,配對(duì)函數(shù)主要是根據(jù)每首歌曲把男女生進(jìn)展配對(duì),顯示函數(shù)主要是顯示男女生的配對(duì)情況,查詢(xún)函數(shù)主要是根據(jù)男女生**和歌曲名查找配對(duì)情況。系統(tǒng)首先通過(guò)程序調(diào)用voidmain()進(jìn)入歡送界面和系統(tǒng)登陸界面,根據(jù)用戶(hù)的**和密碼登陸成功后進(jìn)入主菜單。根據(jù)用戶(hù)的選擇可分別進(jìn)入:1.學(xué)生就坐;2.每曲配對(duì);3.顯示結(jié)果;4.查詢(xún)配對(duì);5.退出。選擇"1.學(xué)生就坐〞項(xiàng),會(huì)顯示學(xué)生信息來(lái)源,包括"1.按班級(jí)獲取(推薦)〞"2.手動(dòng)輸入...〞兩項(xiàng)可供選擇。其中,1是從文件中獲取學(xué)生信息,2是用戶(hù)手動(dòng)輸入學(xué)生信息。選擇"2.每曲配對(duì)〞項(xiàng),會(huì)顯示播放歌曲的類(lèi)型,有"1.流行〞"2.復(fù)古〞兩個(gè)音樂(lè)風(fēng)格可供選擇,當(dāng)用戶(hù)選擇其中一個(gè)風(fēng)格并確定播放后,會(huì)顯示出當(dāng)前播放的歌曲名字和所配對(duì)的男女生。選擇"3.顯示結(jié)果〞項(xiàng),會(huì)有"1.學(xué)生座位信息〞和"2.學(xué)生配對(duì)信息〞兩項(xiàng)操作可供選擇。中選擇1,會(huì)把學(xué)生就坐后的信息顯示出來(lái),選擇2,會(huì)把每首歌學(xué)生的配對(duì)情況顯示出來(lái)。選擇"4.查詢(xún)配對(duì)〞項(xiàng),也有兩個(gè)操作可供選擇,分別是"1.按學(xué)生**〞"按歌曲名〞兩項(xiàng)。選擇1,會(huì)根據(jù)用戶(hù)輸入的男女生**查看他們的配對(duì)情況,選擇2,會(huì)根據(jù)用戶(hù)輸入的歌曲名稱(chēng)顯示每首歌曲學(xué)生的配對(duì)情況。選擇"5.退出〞項(xiàng),會(huì)出現(xiàn)感謝使用系統(tǒng)界面,并按任意鍵退出系統(tǒng)。本系統(tǒng)的主流程圖如圖3-1所示圖3-1主流程3.2算法實(shí)現(xiàn)定義學(xué)生構(gòu)造體FinalStu,將學(xué)生的信息放到本構(gòu)造體中,定義兩個(gè)循環(huán)隊(duì)列Boys和Girls隊(duì)列,分別存儲(chǔ)男女生的座位信息。定義MusicList循環(huán)鏈表,用于存放音樂(lè)信息。定義TempQueue隊(duì)列,用于臨時(shí)存放從男女生隊(duì)列中出來(lái)的學(xué)生信息。創(chuàng)立一個(gè)存放每首歌配對(duì)情況的數(shù)組stuTable[],用來(lái)存放播放該首歌曲時(shí)男女生的信息。每一首歌開(kāi)場(chǎng)時(shí),男女生依次用Boys和Girls隊(duì)列中出對(duì),依次進(jìn)入臨時(shí)隊(duì)列TempQueue,從TempQueue中讀取男女生的信息,放到stuTable數(shù)組中,表示該首歌的配對(duì)情況。下首歌開(kāi)場(chǎng)時(shí),讓臨時(shí)隊(duì)列中的學(xué)生再根據(jù)性別依次進(jìn)入男女循環(huán)隊(duì)列。同時(shí)將存放歌曲的MusicList循環(huán)鏈表指針后移,播放下首歌曲,再執(zhí)行上述操作,便可實(shí)現(xiàn)循環(huán)配對(duì)。第四章編碼調(diào)試4.1調(diào)試環(huán)境硬件環(huán)境:Intel1GHZ處理器〔或AMD同類(lèi)處理器〕,512M或以上內(nèi)存容量,10G或以上硬盤(pán)容量,可連接互聯(lián)網(wǎng)的相關(guān)設(shè)備。軟件環(huán)境〔軟件、操作系統(tǒng)〕:Windows*P〔或Windows2003或Windowsvista或Windows7〕操作系統(tǒng),MicrosoftVisualStudio2008。4.2調(diào)試方法為了提高測(cè)試效率,降低測(cè)試本錢(qián),本測(cè)試方案采用黑盒法設(shè)計(jì)根本的測(cè)試方案,再用白盒法補(bǔ)充一些方案。在黑盒法測(cè)試方案中,采用等價(jià)劃分技術(shù),把所有可能的數(shù)據(jù)劃分成幾個(gè)等價(jià)類(lèi)。4.3調(diào)試工程及調(diào)試結(jié)果4.3.1登陸測(cè)試用戶(hù)根據(jù)用戶(hù)名及密碼登陸系統(tǒng),內(nèi)置用戶(hù)為Admin,密碼為888888。登陸成功如圖4-1所示,登陸失敗如圖4-2所示圖4-1登陸成功圖4-2登陸失敗4.3.2加載學(xué)生信息可以從文件或者手動(dòng)輸入學(xué)生信息,從文件中選擇時(shí),可以選擇不同的文件,其運(yùn)行結(jié)果如圖4-2及圖4-3所示圖4-3選擇信息來(lái)源圖4-4顯示獲取信息4.3.3學(xué)生配對(duì)調(diào)試在進(jìn)展配對(duì)之前,需要先將音樂(lè)信息加載到系統(tǒng)中,其加載過(guò)程如圖4-5所示圖4-5加載音樂(lè)學(xué)生就位及音樂(lè)加載成功后,開(kāi)場(chǎng)播放音樂(lè),并進(jìn)展配對(duì),其音樂(lè)播放情況及每首歌曲的配對(duì)情況如圖4-6、圖4-7及圖4-8所示圖4-6配對(duì)開(kāi)場(chǎng)圖4-7播放下一首圖4-8循環(huán)配對(duì)4.3.4顯示總配對(duì)在整個(gè)過(guò)程完畢后,停頓播放音樂(lè),可以顯示整個(gè)過(guò)程的配對(duì)情況,其結(jié)果如圖4-9所示圖4-9顯示配對(duì)結(jié)果4.3.5查詢(xún)配對(duì)可以根據(jù)男女生的**查詢(xún)兩人的配對(duì)情況,當(dāng)輸入兩個(gè)學(xué)生**時(shí),顯示在整個(gè)過(guò)程中的配對(duì)情況,其結(jié)果如圖4-10所示圖4-10**查詢(xún)配對(duì)根據(jù)每一首歌曲情況查詢(xún)?cè)诒臼赘枨械呐鋵?duì)情況,其結(jié)果如圖4-11所示圖4-11按歌名查找第五章總結(jié)這次的課程設(shè)計(jì)懂得了理論與實(shí)際相結(jié)合是很非常重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在整個(gè)設(shè)計(jì)過(guò)程中,構(gòu)思是很花費(fèi)時(shí)間的,在構(gòu)思總體架構(gòu)時(shí),需要先將需求分析搞清楚,需要在找到了需要解決的問(wèn)題后,再想方法解決該問(wèn)題。而不是在設(shè)計(jì)過(guò)程中邊想邊解決,需要先將所有可能的問(wèn)題都考慮到,再依次解決。在整個(gè)系統(tǒng)設(shè)計(jì)完成后,如果再遇到新的問(wèn)題,可以對(duì)系統(tǒng)進(jìn)展適當(dāng)?shù)母?。調(diào)試時(shí)經(jīng)常會(huì)遇到這樣那樣的錯(cuò)誤,有的時(shí)候是因?yàn)橐恍┳罡镜腻e(cuò)誤,如標(biāo)點(diǎn)的中英錯(cuò)誤,括號(hào)的匹配問(wèn)題,數(shù)據(jù)的輸入錯(cuò)誤等。當(dāng)然,也有很多地方是因?yàn)橛缅e(cuò)了解決方法。在設(shè)計(jì)的過(guò)程中,最能表達(dá)出的缺點(diǎn)就是根底不扎實(shí),本可以防止的錯(cuò)誤卻一再出現(xiàn)。在實(shí)現(xiàn)舞池配對(duì)問(wèn)題過(guò)程中,需要使學(xué)生循環(huán)配對(duì),此程序設(shè)計(jì)的是當(dāng)一個(gè)光盤(pán)的音樂(lè)播放完畢時(shí),整個(gè)配對(duì)過(guò)程隨之完畢,而沒(méi)有讓學(xué)生再次進(jìn)去坐席,導(dǎo)致不再?gòu)男聦W(xué)生入座,就無(wú)法實(shí)現(xiàn)配對(duì)。設(shè)計(jì)的是在每首歌開(kāi)場(chǎng)之前學(xué)生進(jìn)入隊(duì)列,可以改為當(dāng)*個(gè)學(xué)生坐席為空時(shí),隨即讓學(xué)生再次進(jìn)入隊(duì)列,可以解決不能重復(fù)換歌曲的問(wèn)題。剛開(kāi)場(chǎng)的時(shí)候我直接在開(kāi)發(fā)環(huán)境下一邊看題一邊寫(xiě)代碼,瞪了半天什么也沒(méi)寫(xiě)出來(lái),于是我便先開(kāi)場(chǎng)在紙上畫(huà)畫(huà)寫(xiě)寫(xiě),將事件的整個(gè)過(guò)程畫(huà)下來(lái),然后考慮怎么才能運(yùn)用代碼來(lái)實(shí)現(xiàn),一邊思考一邊寫(xiě)一些粗略的代碼,最后從上到下執(zhí)行代碼看看是不是符合題目要求。有沒(méi)有什么漏洞。等這些完成以后,再在開(kāi)發(fā)環(huán)境下將代碼完善、編譯和調(diào)試。雖然說(shuō)代碼還有許多要改良的地方,有的功能還不夠完善,可畢竟是自己親自寫(xiě)出來(lái)的,對(duì)于程序的條理有了一個(gè)清晰的了解,對(duì)編程也有了更加深刻的認(rèn)識(shí)。參考文獻(xiàn)譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].:清華大學(xué),2005.嚴(yán)蔚敏,吳偉民.數(shù)據(jù)構(gòu)造(C語(yǔ)言版)[M].:清華大學(xué),1997.陸麗娜.軟件工程.:經(jīng)濟(jì)科學(xué),2005.姚詩(shī)斌.數(shù)據(jù)庫(kù)系統(tǒng)根底.計(jì)算機(jī)工程與應(yīng)用,1981年第8期附錄系統(tǒng)源代碼#include<iostream>#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<Windows.h>#defineMA*QSIZE20//循環(huán)隊(duì)列最大存儲(chǔ)量#defineSTU_SIZE5//學(xué)生人數(shù)#defineSIZE100intidCount=1000;//全局變量控制學(xué)生id自增intlength;//記錄每首歌配對(duì)的數(shù)量intinde*=0;//記錄最終配對(duì)表的下標(biāo)usingnamespacestd;//舞池就坐后的學(xué)生信息構(gòu)造體structAdmin{charname[15];charpassWord[15]; Admin*ne*t;};Admin*admin;structFinalStu{charname[15];charse*[3];intid;};FinalStustu[STU_SIZE];FinalStustuSeat[STU_SIZE];//用來(lái)存放入座后的學(xué)生信息FinalStustuTable[STU_SIZE][2];//用來(lái)存放沒(méi)收歌曲的配對(duì)情況//舞池座位structStuQueue{ FinalStu*base;intfront;intrear;};StuQueueBoys;//男生隊(duì)列StuQueueGirls;//女生隊(duì)列//初始化學(xué)生坐席voidInitQueue(StuQueue&Q){ Q.base=(FinalStu*)malloc(MA*QSIZE*sizeof(FinalStu));if(Q.base==NULL)return; Q.front=Q.rear=0;}//學(xué)生就坐,首次入隊(duì),需要獲取學(xué)生的idvoidEnQueue(StuQueue&Q,FinalStustu){inti=100;if((Q.rear+1)%MA*QSIZE==Q.front)return; strcpy(Q.base[Q.rear].name,); strcpy(Q.base[Q.rear].se*,stu.se*); Q.base[Q.rear].id=idCount++; Q.rear=(Q.rear+1)%MA*QSIZE;}//非首次入隊(duì),不需獲取學(xué)生的idvoidEnQueue2(StuQueue&Q,FinalStustu){ strcpy(Q.base[Q.rear].name,); strcpy(Q.base[Q.rear].se*,stu.se*); Q.base[Q.rear].id=stu.id; Q.rear=(Q.rear+1)%MA*QSIZE;}//從坐席上出來(lái)FinalStuDeQueue(StuQueue&Q){ FinalStustu;if(Q.rear!=Q.front) { stu=Q.base[Q.front]; } Q.front=(Q.front+1)%MA*QSIZE;returnstu;}//存放音樂(lè)信息structMusic{charM_Name[15]; Music*ne*t;};//存放音樂(lè)鏈,循環(huán)鏈表structMusicList{ Music*head; Music*tail;};MusicListML;Music*M_p;//初始化指針voidInitMusic(MusicList&MList){ MList.head=MList.tail=(Music*)malloc(sizeof(Music)); MList.head->ne*t=NULL;}//向音樂(lè)鏈表中添加音樂(lè)voidInsertMusic(MusicList&MList,char*name){ Music*p=(Music*)malloc(sizeof(Music)); MList.tail->ne*t=p; strcpy(p->M_Name,name); MList.tail=p; MList.tail->ne*t=MList.head;}//臨時(shí)隊(duì)列,用于存放從男女生隊(duì)列中配對(duì)成成功的學(xué)生信息structTempQueue{ FinalStustu; TempQueue*ne*t;};structTempQList{ TempQueue*front; TempQueue*rear;};TempQListTempQL;//臨時(shí)隊(duì)列,用于存放每次出來(lái)的男女生信息voidInitQList(TempQList&TQL){ TQL.front=TQL.rear=(TempQueue*)malloc(sizeof(TempQueue)); TQL.front->ne*t=NULL;}voidEnTempQueue(TempQList&TQL,FinalStustu){ TempQueue*p=(TempQueue*)malloc(sizeof(TempQueue)); p->stu=stu; p->ne*t=NULL; TQL.rear->ne*t=p; TQL.rear=p;}FinalStuDeTempQueue(TempQList&TQL){ FinalStustu; TempQueue*p; p=TQL.front->ne*t;if(p==TQL.rear) { stu=p->stu; TQL.rear=TQL.front; }else { stu=p->stu; TQL.front->ne*t=p->ne*t; } free(p);returnstu;}//==========配對(duì)信息存放===================structMatchList{charmusiame[20]; FinalStustu[2];};MatchListmatchTable[SIZE];//從鍵盤(pán)讀入學(xué)生信息voidGetInfKey(){for(inti=0;i<STU_SIZE;i++) { cout<<"輸入第"<<i+1<<"個(gè)學(xué)生的**:"; scanf("%s",stu[i].name); cout<<"輸入第"<<i+1<<"個(gè)學(xué)生的性別:"; scanf("%s",stu[i].se*); }}//學(xué)生入座voidStudentSit(){for(inti=0;i<STU_SIZE;i++) {if(strcmp(stu[i].se*,"男")==0) EnQueue(Boys,stu[i]);else EnQueue(Girls,stu[i]); }}//獲取就坐后的男女生性別、、編號(hào),stuSeat[]存放就坐后的學(xué)生信息,包括學(xué)生編號(hào)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é)生信息寫(xiě)入文件intInFileStuSeat(){ FILE*fp_Seat;intres=0;if((fp_Seat=fopen("Seat.t*t","wt"))==NULL) { cout<<"讀取學(xué)生座位信息失?。。。?;return-1; } fprintf(fp_Seat,"\t性別\t序號(hào)\n");for(inti=0;i<STU_SIZE;i++) { fprintf(fp_Seat,"%s\t%s\t%d",stuSeat[i].name,stuSeat[i].se*,stuSeat[i].id); fprintf(fp_Seat,"\n"); res++; } fclose(fp_Seat);returnres;}voidPrintStuSeat(){ cout<<"\t\t\t**\t性別\t序號(hào)"<<endl;for(inti=0;i<STU_SIZE;i++) { cout<<"\t\t\t"<<stuSeat[i].name<<"\t"; cout<<stuSeat[i].se*<<"\t"<<stuSeat[i].id<<endl; }}//從文件中獲取管理員信息voidReadAdmin(){ admin=(Admin*)malloc(sizeof(Admin)); admin->ne*t=NULL; Admin*q=admin; FILE*fp_Admin;if((fp_Admin=fopen("admin.t*t","rt"))==NULL) { cout<<"翻開(kāi)文件失?。。?!";return; }while(!feof(fp_Admin)) { Admin*p=(Admin*)malloc(sizeof(Admin)); p->ne*t=NULL; fscanf(fp_Admin,"%s%s",p->name,p->passWord); q->ne*t=p; q=p; } fclose(fp_Admin);}//從文件獲取學(xué)生信息voidReadStuFile(intres){ FILE*fp;if(res==1) {if((fp=fopen("student1.t*t","rt"))==NULL) { cout<<"翻開(kāi)文件失?。。。?<<endl;return; } }elseif(res==2) {if((fp=fopen("student2.t*t","rt"))==NULL) { cout<<"翻開(kāi)文件失?。。?!"<<endl;return; } }inti=0;while(!feof(fp)) { fscanf(fp,"%s%s",stu[i].name,stu[i].se*); i++;if(i>=STU_SIZE)break; } fclose(fp);}//加載音樂(lè)信息intLoadMusic(intcd){charmusic[5][20];//存放從文件中獲取的音樂(lè)名稱(chēng)intres=0; FILE*fp_music;if(cd==1) {if((fp_music=fopen("music1.t*t","rt"))==NULL) { cout<<"翻開(kāi)音樂(lè)文件失敗?。?!"<<endl;return-1; } }elseif(cd==2) {if((fp_music=fopen("music2.t*t","rt"))==NULL) { cout<<"翻開(kāi)音樂(lè)文件失?。。?!"<<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.t*t","wt"))==NULL) { cout<<"翻開(kāi)文件失敗~~~~"<<endl;return-1; } fprintf(fp_MTable,"歌曲名稱(chēng)\t**\t性別\t序號(hào)\t**\t性別\t序號(hào)\n");for(inti=0;i<inde*;i++) { fprintf(fp_MTable,"%s\t\t%s\t%s\t%d\t",matchTable[i].musiame,matchTable[i].stu[0].name,matchTable[i].stu[0].se*,matchTable[i].stu[0].id); fprintf(fp_MTable,"%s\t%s\t%d\n",matchTable[i].stu[1].name,matchTable[i].stu[1].se*,matchTable[i].stu[1].id); } fclose(fp_MTable);return1;}voidStudentSitAgain(){ FinalStustu;while(TempQL.front!=TempQL.rear) { stu=DeTempQueue(TempQL);if(strcmp(stu.se*,"男")==0) EnQueue2(Boys,stu);else EnQueue2(Girls,stu); }}//播放歌曲voidPlayMusic(){ cout<<"\t\t正在播放:\t"<<M_p->M_Name;}//下一首voidNe*tMusic(){ M_p=M_p->ne*t;if(M_p==ML.head) { M_p=ML.head->ne*t; }}//學(xué)生配對(duì)voidMatch(){//FinalStustudent[STU_SIZE];intstatici=0;intj=0; length=0;while(Boys.front!=Boys.rear&&Girls.front!=Girls.rear) { EnTempQueue(TempQL,DeQueue(Boys));//從男生隊(duì)列中出來(lái)進(jìn)入臨時(shí)隊(duì)列 EnTempQueue(TempQL,DeQueue(Girls));//從女生隊(duì)列中出來(lái)進(jìn)入臨時(shí)隊(duì)列 length++;//記錄每首歌的配對(duì)數(shù) }//從臨時(shí)隊(duì)列中將信息賦值給表 TempQueue*tem=TempQL.front->ne*t;while(tem) { strcpy(matchTable[inde*].musiame,M_p->M_Name); strcpy(matchTable[inde*].stu[0].name,tem->); strcpy(matchTable[inde*].stu[0].se*,tem->stu.se*); matchTable[inde*].stu[0].id=tem->stu.id;//每曲歌的配對(duì)情況 strcpy(stuTable[j][0].name,tem->); strcpy(stuTable[j][0].se*,tem->stu.se*); stuTable[j][0].id=tem->stu.id; tem=tem->ne*t;//整個(gè)播放過(guò)程的配對(duì)表 strcpy(matchTable[inde*].stu[1].name,tem->); strcpy(matchTable[inde*].stu[1].se*,tem->stu.se*); matchTable[inde*].stu[1].id=tem->stu.id;//每首歌配對(duì)表 strcpy(stuTable[j][1].name,tem->); strcpy(stuTable[j][1].se*,tem->stu.se*); stuTable[j][1].id=tem->stu.id; tem=tem->ne*t; inde*++; j++; }}//顯示每首歌配對(duì)情況voidPrintEachMatch(){ cout<<endl; cout<<"本首歌的配對(duì)情況:"<<endl; cout<<"\t性別\t序號(hào)\t**\t性別\t序號(hào)"<<endl;for(inti=0;i<length;i++)//length為每首歌的配對(duì)長(zhǎng)度 { cout<<stuTable[i][0].name<<"\t"<<stuTable[i][0].se*<<"\t"<<stuTable[i][0].id<<"\t"; cout<<stuTable[i][1].name<<"\t"<<stuTable[i][1].se*<<"\t"<<stuTable[i][1].id<<endl; }}//播放下首歌時(shí)需要進(jìn)展的各種操作voidNe*t(){ StudentSitAgain(); Ne*tMusic(); PlayMusic(); Match(); PrintEachMatch();}//獲取要顯示信息的一些操作//顯示界面的一些函數(shù)voidMainMenu(){ cout<<"\t\t\t\t"<<"主界面"<<endl; cout<<"\t\t\t"<<"1、學(xué)生就坐"; cout<<"\t"<<"2、每曲配對(duì)"<<endl; cout<<"\t\t\t"<<"3、顯示結(jié)果"; cout<<"\t"<<"4、查詢(xún)配對(duì)"<<endl; cout<<"\t\t\t\t5、退出";}//配對(duì)顯示voidPrintMatchTable(){ cout<<"歌曲名稱(chēng)\t**\t性別\t序號(hào)\t**\t性別\t序號(hào)"<<endl;for(inti=0;i<inde*;i++) { cout<<matchTable[i].musiame<<"\t"<<matchTable[i].stu[0].name<<"\t"<<matchTable[i].stu[0].se*<<"\t"<<matchTable[i].stu[0].id<<"\t"; cout<<matchTable[i].stu[1].name<<"\t"<<matchTable[i].stu[1].se*<<"\t"<<matchTable[i].stu[1].id<<endl; }}voidPrintStuRes(){ cout<<"\t\t\t請(qǐng)選擇學(xué)生信息來(lái)源:"<<endl; cout<<"\t\t\t1、按班級(jí)獲取(推薦)"<<endl; cout<<"\t\t\t2、手動(dòng)輸入..."<<endl;}voidStudentChose(){ PrintStuRes(); cout<<"請(qǐng)選擇操作:";intres; cin>>res;switch(res) {case1://從文件讀取數(shù)據(jù)intres; cout<<"請(qǐng)選擇班級(jí):"<<endl; cout<<"1.三年一班\t2.三年二班"<<endl; cin>>res;if(res==1) { ReadStuFile(1); }elseif(res==2) { ReadStuFile(2); }break;case2: cout<<"開(kāi)場(chǎng)輸入"<<endl; GetInfKey();//鍵盤(pán)鍵入數(shù)據(jù)break;default: cout<<"輸入有誤,再見(jiàn)"<<endl;break; }}voidMusicMenu(){ cout<<"請(qǐng)選擇要放入的光盤(pán)類(lèi)型:"<<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->ne*t;//p指向第一首歌 cout<<"歌曲光盤(pán)已就位,是否現(xiàn)在播放(Y/N)"<<endl; cin>>ch; InitQList(TempQL);//初始化臨時(shí)隊(duì)列if(ch=='Y'||ch=='y') { system("cls"); PlayMusic(); Match(); PrintEachMatch(); } cout<<"按n進(jìn)展下一首歌曲、、\n"; cout<<"按q停頓播放音樂(lè)、、"<<endl; cin>>ch;while(ch=='n'||ch=='N') { system("cls"); Ne*t(); cout<<"按n進(jìn)展下一首歌曲、、\n"; cout<<"按q停頓播放音樂(lè)、、"<<endl; cin>>ch; }if(ch=='q'||ch=='Q')return; }}voidWele(){ cout<<"\t\t\t\t歡送進(jìn)入進(jìn)入舞池~~~~"<<endl<<endl; cout<<"\t\t\t按任意鍵繼續(xù)..."; getch(); system("cls");}voidLoadAdmin(){ Wele();intres=0;inti; ReadAdmin();charuserName[15];charkey[15];for(i=0;i<3;i++) { Admin*p=admin->ne*t; cout<<"\t\t\t請(qǐng)輸入您的用戶(hù)名:"; cin>>userName; cout<<"\t\t\t請(qǐng)輸入您的密碼:"; cin>>key;while(p) {if(strcmp(p->name,userName)==0)break; p=p->ne*t; }if(!p) { system("cls"); cout<<"\t\t\t輸入的用戶(hù)名不存在~~~~~"<<endl;;continue; }if(p) {if(strcmp(p->passWord,key)==0) { system("cls"); cout<<"\t\t\t\t歡送回來(lái)."; Sleep(500); system("cls"); cout<<"\t\t\t\t歡送回來(lái).."; Sleep(500); system("cls"); cout<<"\t\t\t\t歡送回來(lái)..."; Sleep(500);//system("cls");break; }else { system("cls"); cout<<"\t\t\t輸入的密碼錯(cuò)誤、、、"<<endl;;continue; } } }if(i>=3) { cout<<"\t\t\t您今天的時(shí)機(jī)已經(jīng)用完,再見(jiàn)"; e*it(0); }}voidShowMessage(){ system("cls");intres; cout<<"\t\t\t選擇要操作的信息:"<<endl; cout<<"\t\t\t1.學(xué)生座位信息\t2.學(xué)生配對(duì)信息"<<endl; cin>>res;if(res==1) { cout<<"\t\t\t座位信息如下:"<<endl; PrintStuSeat();charch; cout<<"是否將該信息寫(xiě)入文件(Y/N):"; cin>>ch;if(ch=='Y'||ch=='y') {if(InFileMatchTable()) { cout<<"數(shù)據(jù)已寫(xiě)入文件..."<<endl; } } }elseif(res==2) { PrintMatchTable();charch; cout<<"是否將該信息寫(xiě)入文件(Y/N):"; cin>>ch;if(ch=='Y'||ch=='y') {if(InFileMatchTable()) cout<<"數(shù)據(jù)已寫(xiě)入文件..."<<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ù)**查詢(xún)配對(duì)情況{charboyName[15];chargirlName[15]; cout<<"請(qǐng)輸入男生**:"; cin>>boyName; cout<<"請(qǐng)輸入女生**:"; cin>>girlName;intcount=0;for(inti=0;i<inde*;i++) {if(strcmp(matchTable[i].stu[0].name,boyName)==0&&strcmp(matchTable[i].stu[1].name,girlName)==0) { count++; } }if(count==0) { cout<<"未找到配對(duì)情況:"; }else { cout<<"
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 皮卡車(chē)項(xiàng)目融資渠道探索
- 河南電網(wǎng)與公司合作協(xié)議
- 海外市場(chǎng)推廣服務(wù)合同(2篇)
- 二零二五年度離婚后財(cái)產(chǎn)分割與子女教育保險(xiǎn)合同9篇
- 二零二五年度物流配送中心建設(shè)與貨物運(yùn)輸服務(wù)合同4篇
- 二零二五年度知識(shí)產(chǎn)權(quán)對(duì)賭合同參考范本
- 2025至2030年中國(guó)緯彈印花燈芯絨數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025草原家庭承包管理服務(wù)合作協(xié)議3篇
- 2025至2030年中國(guó)不銹鋼抗震金屬軟管數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年空氣濾清器橡膠彎管項(xiàng)目可行性研究報(bào)告
- 玻璃鋼煙囪方案
- 中國(guó)電信應(yīng)急管理整體解決方案
- 中小學(xué)教師師德師風(fēng)法律法規(guī)培訓(xùn)
- 醫(yī)療器械質(zhì)量管理體系文件模板
- 秦始皇嬴政人物生平介紹PPT
- 在馬克思墓前的講話(huà)說(shuō)課稿公開(kāi)課一等獎(jiǎng)市賽課獲獎(jiǎng)?wù)n件
- 骨科無(wú)痛病房的建立
- 送養(yǎng)收養(yǎng)合同協(xié)議書(shū)
- 塑料成型模具設(shè)計(jì)(第2版)江昌勇課件0-導(dǎo)論
- 漢語(yǔ)拼音發(fā)音口型及配圖
- 績(jī)效考核管理醫(yī)院績(jī)效分配方案包括實(shí)施細(xì)則考核表
評(píng)論
0/150
提交評(píng)論