大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 舞伴問(wèn)題

上傳人:仙*** 文檔編號(hào):83416378 上傳時(shí)間:2022-05-01 格式:DOC 頁(yè)數(shù):53 大?。?48KB
收藏 版權(quán)申訴 舉報(bào) 下載
大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 舞伴問(wèn)題_第1頁(yè)
第1頁(yè) / 共53頁(yè)
大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 舞伴問(wèn)題_第2頁(yè)
第2頁(yè) / 共53頁(yè)
大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 舞伴問(wèn)題_第3頁(yè)
第3頁(yè) / 共53頁(yè)

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 舞伴問(wèn)題》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 舞伴問(wèn)題(53頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、word 分類(lèi)號(hào) 編 號(hào) 華北水利水電大學(xué) North China Institute of Water Conservancy and Hydroelectric Power 課 程 設(shè) 計(jì) 題目 舞伴問(wèn)題 院 系 信息工程學(xué)院 專(zhuān)業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 姓 名 賈 寧 指 導(dǎo) 教 師 彬 第一章需求分析2 問(wèn)

2、題描述2 1.2 根本要求2 1.2.1 輸入與輸出格式2 1.2.2 程序所完成的功能2 第二章概要設(shè)計(jì)3 2.1 數(shù)據(jù)結(jié)構(gòu)3 2.2 程序模塊4 2.3 模塊調(diào)用與算法5 第三章詳細(xì)設(shè)計(jì)7 3.1 操作實(shí)現(xiàn)7 3.2 算法實(shí)現(xiàn)8 第四章編碼調(diào)試10 4.1 調(diào)試環(huán)境10 4.2 調(diào)試方法10 4.3 調(diào)試項(xiàng)目與調(diào)試結(jié)果10 4.3.1 登陸測(cè)試10 4.3.2 加載學(xué)生信息11 4.3.3 學(xué)生配對(duì)調(diào)試12 4.3.4 顯示總配對(duì)13 4.3.5 查詢(xún)配對(duì)13 第五章總結(jié)15 參考文獻(xiàn)16 附錄系統(tǒng)源代碼17

3、 第一章 需求分析 問(wèn)題描述 一班有m個(gè)女生、n個(gè)男生(m不等于n), 舉辦一場(chǎng)舞會(huì). 男女生分別編號(hào)坐在舞池兩邊的椅子上,每曲開(kāi)始時(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)。

4、可以輸出整個(gè)舞池配對(duì)過(guò)程的所有配對(duì)情況。將輸出顯示的容對(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ì)列中剩下假如干學(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ì)

5、情況寫(xiě)入到文件。 根據(jù)男女生的或者某首歌曲的名字可以查詢(xún)到對(duì)應(yīng)的配對(duì)情況。 第二章 概要設(shè)計(jì) 2.1 數(shù)據(jù)結(jié)構(gòu) 學(xué)生座位隊(duì)列: ADT StuQueue{ 數(shù)據(jù)對(duì)象:D={ ai|ai∈ElemSet,i=1,2..n;n≥0 } 數(shù)據(jù)關(guān)系:R={ ai∈D ,i=1,2..n} void InitQueue(StuQueue &Q) 操作結(jié)果:初始化一個(gè)空的循環(huán)隊(duì)列 void EnQueue(StuQueue &Q,FinalStu stu) 初始條件:循環(huán)隊(duì)列Q已經(jīng)存在,并且無(wú)信息

6、 操作結(jié)果:向Q中循環(huán)參加信息 void EnQueue2(StuQueue &Q,FinalStu stu) 初始條件:循環(huán)隊(duì)列已存在,非首次進(jìn)循環(huán)隊(duì)列 操作結(jié)果:向Q中添加信息 FinalStu DeQueue(StuQueue &Q) 初始條件:循環(huán)隊(duì)列已存在 操作結(jié)果:使隊(duì)列頭的元素出隊(duì)列,且返回FinalStu類(lèi)型值 }ADT StuQueue //學(xué)生座位隊(duì)列 音樂(lè)隊(duì)列: ADT MusicList{ 數(shù)據(jù)對(duì)象:D={ ai|ai∈ElemSet,i=1,2..n;n≥0 } 數(shù)據(jù)關(guān)系:R={

7、,ai > ai∈D ,i=1,2..n} void InitMusic(MusicList & MList) 操作結(jié)果:創(chuàng)建循環(huán)鏈表 void InsertMusic(MusicList &MList,char* name) 初始條件:該鏈表已存在 操作結(jié)果:向鏈表中添加數(shù)據(jù) }ADT MusicList; 臨時(shí)隊(duì)列: ADT TempQList{ 數(shù)據(jù)對(duì)象:D={ ai|ai∈ElemSet,i=1,2..n;n≥0 } 數(shù)據(jù)關(guān)系:R={ ai∈D ,i=1,2..n} void InitQList(TempQ

8、List &TQL) 操作結(jié)果:初始化臨時(shí)隊(duì)列 void EnTempQueue(TempQList & TQL,FinalStu stu) 初始條件:隊(duì)列TQL已存在 操作結(jié)果:向TQL中添加信息 FinalStu DeTempQueue(TempQList &TQL) 初始條件:隊(duì)列TQL存在 操作結(jié)果:取出隊(duì)列的對(duì)頭元素,返回FinalStu類(lèi)型 }ADT TempQList; 2.2 程序模塊 本系統(tǒng)主要包括登陸模塊、學(xué)生入座、自動(dòng)配對(duì)、顯示配對(duì)過(guò)程以與查詢(xún)配對(duì)信息模塊。 登陸:輸入正確的用戶(hù)名

9、以與密碼,方可進(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)始時(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

10、功能模塊 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)始之前,讓臨時(shí)隊(duì)列中的男女在分別根據(jù)性別入隊(duì),依次循環(huán),每次調(diào)用配對(duì)函數(shù),實(shí)現(xiàn)學(xué)生的循

11、環(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)用void main()進(jìn)入歡迎界面和系統(tǒng)登陸界面,根據(jù)用戶(hù)的和密碼登陸成功后進(jìn)入主菜單。根據(jù)用戶(hù)的選擇可分別進(jìn)入:1.學(xué)生就坐;2.每

12、曲配對(duì);3.顯示結(jié)果;4.查詢(xún)配對(duì);5.退出。 選擇“〞項(xiàng),會(huì)顯示學(xué)生信息來(lái)源,包括“1.按班級(jí)獲取(推薦)〞“2.手動(dòng)輸入...〞兩項(xiàng)可供選擇。其中,1是從文件中獲取學(xué)生信息,2是用戶(hù)手動(dòng)輸入學(xué)生信息。 選擇“〞項(xiàng),會(huì)顯示播放歌曲的類(lèi)型,有“〞“〞兩個(gè)音樂(lè)風(fēng)格可供選擇,當(dāng)用戶(hù)選擇其中一個(gè)風(fēng)格并確定播放后,會(huì)顯示出當(dāng)前播放的歌曲名字和所配對(duì)的男女生。 選擇“〞項(xiàng),會(huì)有“〞和“〞兩項(xiàng)操作可供選擇。當(dāng)選擇1,會(huì)把學(xué)生就坐后的信息顯示出來(lái),選擇2,會(huì)把每首歌學(xué)生的配對(duì)情況顯示出來(lái)。 選擇“〞項(xiàng),也有兩個(gè)操作可供選擇,分別是“〞“按歌曲名〞兩項(xiàng)。選擇1,會(huì)根據(jù)用戶(hù)輸入的男女生查看他們的配對(duì)情況

13、,選擇2,會(huì)根據(jù)用戶(hù)輸入的歌曲名稱(chēng)顯示每首歌曲學(xué)生的配對(duì)情況。 選擇“〞項(xiàng),會(huì)出現(xiàn)感使用系統(tǒng)界面,并按任意鍵退出系統(tǒng)。 本系統(tǒng)的主流程圖如圖3-1 所示 圖 3-1 主流程 3.2 算法實(shí)現(xiàn) 定義學(xué)生結(jié)構(gòu)體FinalStu ,將學(xué)生的信息放到本結(jié)構(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)始時(shí),男女生依次用Boys和Girl

14、s隊(duì)列中出對(duì),依次進(jìn)入臨時(shí)隊(duì)列TempQueue,從TempQueue中讀取男女生的信息,放到stuTable數(shù)組中,表示該首歌的配對(duì)情況。下首歌開(kāi)始時(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)境:Intel 1GHZ處理器〔或AMD同類(lèi)處理器〕,512M或以上存容量,10G或以上硬盤(pán)容量,

15、可連接互聯(lián)網(wǎng)的相關(guān)設(shè)備。 軟件環(huán)境〔軟件、操作系統(tǒng)〕:Windows XP〔或Windows 2003或Windows vista或Windows 7〕操作系統(tǒng),Microsoft Visual Studio 2008。 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)試項(xiàng)目與調(diào)試結(jié)果 4.3.1 登陸測(cè)試 用戶(hù)根據(jù)用戶(hù)名與密碼登陸系統(tǒng),置用戶(hù)為Admin,密碼為888888。登陸成功如圖4-1所示,登陸失敗如圖4-2所示

16、 圖 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)始播放音樂(lè),并進(jìn)展配對(duì),其音樂(lè)播放情況與每首歌曲的配對(duì)情況如圖4-6、圖4-7與圖4-8所示 圖 4-6 配對(duì)開(kāi)始 圖 4-7 播放下一首

17、 圖 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í)是

18、遠(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ò)程中,最能表現(xiàn)出的缺點(diǎn)就是根底不扎

19、實(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)始之前學(xué)生進(jìn)入隊(duì)列,可以改為當(dāng)某個(gè)學(xué)生坐席為空時(shí),隨即讓學(xué)生再次進(jìn)入隊(duì)列,可以解決不能重復(fù)換歌曲的問(wèn)題。 剛開(kāi)始的時(shí)候我直接在開(kāi)發(fā)環(huán)境下一邊看題一邊寫(xiě)代碼,瞪了半天什么也沒(méi)寫(xiě)出來(lái),于是我便先開(kāi)始在紙上畫(huà)畫(huà)寫(xiě)寫(xiě),將事件的整個(gè)過(guò)程畫(huà)下來(lái),然后考慮怎么才能運(yùn)用代碼來(lái)實(shí)現(xiàn),一邊思考一邊寫(xiě)一些粗略的代碼,最后從上到下執(zhí)行代碼看看是不是符合題目要求。有沒(méi)有什么漏洞。等這些完成以

20、后,再在開(kāi)發(fā)環(huán)境下將代碼完善、編譯和調(diào)試。雖然說(shuō)代碼還有許多要改良的地方,有的功能還不夠完善,可畢竟是自己親自寫(xiě)出來(lái)的,對(duì)于程序的條理有了一個(gè)清晰的了解,對(duì)編程也有了更加深刻的認(rèn)識(shí)。 參考文獻(xiàn) [1] 譚浩強(qiáng). C程序設(shè)計(jì)(第三版)[M].:清華大學(xué),2005. [2] 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].:清華大學(xué),1997. [3] 陸麗娜. 軟件工程. :經(jīng)濟(jì)科學(xué),2005. [4] 詩(shī)斌.數(shù)據(jù)庫(kù)系統(tǒng)根底.計(jì)算機(jī)工程與應(yīng)用,1981年第8期 附錄 系統(tǒng)源代碼 #include #inclu

21、de #include #include #include #define MAXQSIZE 20 //循環(huán)隊(duì)列最大存儲(chǔ)量 #define STU_SIZE 5 //學(xué)生人數(shù) #define SIZE 100 int idCount=1000;//全局變量控制學(xué)生id自增 int length;//記錄每首歌配對(duì)的數(shù)量 int index=0;//記錄最終配對(duì)表的下標(biāo) usingnamespace std; //舞池就坐后的學(xué)生信息結(jié)構(gòu)體 struct Admin { char nam

22、e[15]; char passWord[15]; Admin *next; }; Admin *admin; struct FinalStu { char name[15]; char sex[3]; int id; }; FinalStu stu[STU_SIZE]; FinalStu stuSeat[STU_SIZE];//用來(lái)存放入座后的學(xué)生信息 FinalStu stuTable[STU_SIZE][2];//用來(lái)存放沒(méi)收歌曲的配對(duì)情況 //舞池座位 struct StuQueue { FinalStu *base; int front; int

23、 rear; }; StuQueue Boys; //男生隊(duì)列 StuQueue Girls; //女生隊(duì)列 //初始化學(xué)生坐席 void InitQueue(StuQueue &Q) { Q.base=(FinalStu*)malloc(MAXQSIZE*sizeof(FinalStu)); if(Q.base==NULL) return ; Q.front=Q.rear=0; } //學(xué)生就坐,首次入隊(duì),需要獲取學(xué)生的id void EnQueue(StuQueue &Q,FinalStu stu) { int i=100; if((Q.rear+1)

24、%MAXQSIZE==Q.front) return ; strcpy(Q.base[Q.rear].name,stu.name); strcpy(Q.base[Q.rear].sex,stu.sex); Q.base[Q.rear].id=idCount++; Q.rear=(Q.rear+1)%MAXQSIZE; } //非首次入隊(duì),不需獲取學(xué)生的id void EnQueue2(StuQueue &Q,FinalStu stu) { strcpy(Q.base[Q.rear].name,stu.name); strcpy(Q.base[Q.rear].sex,stu

25、.sex); Q.base[Q.rear].id=stu.id; Q.rear=(Q.rear+1)%MAXQSIZE; } //從坐席上出來(lái) FinalStu DeQueue(StuQueue &Q) { FinalStu stu; if(Q.rear!=Q.front) { stu=Q.base[Q.front]; } Q.front=(Q.front+1)%MAXQSIZE; return stu; } //存放音樂(lè)信息 struct Music { char M_Name[15]; Music *next; }; //存放音樂(lè)鏈,循環(huán)鏈表 s

26、truct MusicList { Music *head; Music *tail; }; MusicList ML; Music *M_p;//初始化指針 void InitMusic(MusicList & MList) { MList.head=MList.tail=(Music *)malloc(sizeof(Music)); MList.head->next=NULL; } //向音樂(lè)鏈表中添加音樂(lè) void InsertMusic(MusicList &MList,char* name) { Music *p=(Music*)malloc(size

27、of(Music)); MList.tail->next=p; strcpy(p->M_Name,name); MList.tail=p; MList.tail->next=MList.head; } //臨時(shí)隊(duì)列,用于存放從男女生隊(duì)列中配對(duì)成成功的學(xué)生信息 struct TempQueue { FinalStu stu; TempQueue * next; }; struct TempQList { TempQueue *front; TempQueue *rear; }; TempQList TempQL; //臨時(shí)隊(duì)列,用于存放每次出來(lái)的男女生信息

28、 void InitQList(TempQList &TQL) { TQL.front=TQL.rear=(TempQueue *)malloc(sizeof(TempQueue)); TQL.front->next=NULL; } void EnTempQueue(TempQList & TQL,FinalStu stu) { TempQueue *p=(TempQueue *)malloc(sizeof(TempQueue)); p->stu=stu; p->next=NULL; TQL.rear->next=p; TQL.rear=p; } Fina

29、lStu DeTempQueue(TempQList &TQL) { FinalStu stu; 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); return stu; } //==========配對(duì)信息存放=================== struct MatchList { char musiame[20];

30、FinalStu stu[2]; }; MatchList matchTable[SIZE]; //從鍵盤(pán)讀入學(xué)生信息 void GetInfKey() { for(int i=0;i

31、cmp(stu[i].sex,"男")==0) EnQueue(Boys,stu[i]); else EnQueue(Girls,stu[i]); } } //獲取就坐后的男女生性別、、編號(hào),stuSeat[] 存放就坐后的學(xué)生信息,包括學(xué)生編號(hào) void GetStuSeat() { int i=0; int j=0; i=Boys.front; j=Girls.front; while(i!=Boys.rear) { stuSeat[i]=Boys.base[i]; i++; } while(j!=Girls.rear) { stuSeat[i

32、]=Girls.base[j]; j++; i++; } } //將就座的學(xué)生信息寫(xiě)入文件 int InFileStuSeat() { FILE *fp_Seat; int res=0; if((fp_Seat=fopen("Seat.txt","wt"))==NULL) { cout<<"讀取學(xué)生座位信息失?。。?!"; return -1; } fprintf(fp_Seat,"\t性別\t序號(hào)\n"); for(int i=0;i

33、e,stuSeat[i].sex,stuSeat[i].id); fprintf(fp_Seat,"\n"); res++; } fclose(fp_Seat); return res; } void PrintStuSeat() { cout<<"\t\t\t\t性別\t序號(hào)"<

34、息 void ReadAdmin() { admin=(Admin*)malloc(sizeof(Admin)); admin->next=NULL; Admin *q=admin; FILE *fp_Admin; if((fp_Admin=fopen("admin.txt","rt"))==NULL) { cout<<"打開(kāi)文件失敗?。?!"; return; } while(!feof(fp_Admin)) { Admin *p=(Admin *)malloc(sizeof(Admin)); p->next=NULL; fscanf(fp_Admin,

35、"%s%s",p->name,p->passWord); q->next=p; q=p; } fclose(fp_Admin); } //從文件獲取學(xué)生信息 void ReadStuFile(int res) { FILE *fp; if(res==1) { if((fp=fopen("student1.txt","rt"))==NULL) { cout<<"打開(kāi)文件失?。。?!"<

36、"打開(kāi)文件失?。。?!"<=STU_SIZE) break; } fclose(fp); } //加載音樂(lè)信息 int LoadMusic(int cd) { char music[5][20]; //存放從文件中獲取的音樂(lè)名稱(chēng) int res=0; FILE *fp_music; if(cd==1) { if((fp_music=fopen("music

37、1.txt","rt"))==NULL) { cout<<"打開(kāi)音樂(lè)文件失?。。?!"<

38、ic(ML); for(int i=0;i<5;i++) { InsertMusic(ML,music[i]); } return res; } int InFileMatchTable() { FILE *fp_MTable; if((fp_MTable=fopen("matchtable.txt","wt"))==NULL) { cout<<"打開(kāi)文件失敗~~~~"<

39、 fprintf(fp_MTable,"%s\t\t%s\t%s\t%d\t",matchTable[i].musiame,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); return 1; } void Stu

40、dentSitAgain() { FinalStu stu; while(TempQL.front!=TempQL.rear) { stu=DeTempQueue(TempQL); if(strcmp(stu.sex,"男")==0) EnQueue2(Boys,stu); else EnQueue2(Girls,stu); } } //播放歌曲 void PlayMusic() { cout<<"\t\t正在播放:\t"<M_Name; } //下一首 void NextMusic() { M_p=M_p->next; if(M_p==M

41、L.head) { M_p=ML.head->next; } } //學(xué)生配對(duì) void Match() { //FinalStu student[STU_SIZE]; intstatic i=0; int j=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ì)列 lengt

42、h++;//記錄每首歌的配對(duì)數(shù) } //從臨時(shí)隊(duì)列中將信息賦值給表 TempQueue *tem=TempQL.front->next; while(tem) { strcpy(matchTable[index].musiame,M_p->M_Name); strcpy(matchTable[index].stu[0].name,tem->stu.name); strcpy(matchTable[index].stu[0].sex,tem->stu.sex); matchTable[index].stu[0].id=tem->stu.id; //----每曲歌的配對(duì)情況

43、strcpy(stuTable[j][0].name,tem->stu.name); strcpy(stuTable[j][0].sex,tem->stu.sex); stuTable[j][0].id=tem->stu.id; tem=tem->next; //------整個(gè)播放過(guò)程的配對(duì)表 strcpy(matchTable[index].stu[1].name,tem->stu.name); strcpy(matchTable[index].stu[1].sex,tem->stu.sex); matchTable[index].stu[1].id=tem->stu.i

44、d; //----每首歌配對(duì)表 strcpy(stuTable[j][1].name,tem->stu.name); strcpy(stuTable[j][1].sex,tem->stu.sex); stuTable[j][1].id=tem->stu.id; tem=tem->next; index++; j++; } } //顯示每首歌配對(duì)情況 void PrintEachMatch() { cout<

45、;i

46、 Match(); PrintEachMatch(); } //----------------------獲取要顯示信息的一些操作 //-------顯示界面的一些函數(shù) void MainMenu() { cout<<"\t\t\t\t "<<"主界面"<

47、 PrintMatchTable() { cout<<"歌曲名稱(chēng)\t\t性別\t序號(hào)\t\t性別\t序號(hào)"<

48、hTable[i].stu[1].id<>res; switch(res) { case 1: //從文件讀取數(shù)據(jù) int res; cout<<"請(qǐng)選擇班級(jí):"<<

49、endl; cout<<"1.三年一班\t2.三年二班"<>res; if(res==1) { ReadStuFile(1); } elseif(res==2) { ReadStuFile(2); } break; case 2: cout<<"開(kāi)始輸入...."<

50、<<"1.流行\(zhòng)t2.復(fù)古\n"; int res,i; char ch; cin>>res; if(res==1) i=LoadMusic(1); else i=LoadMusic(2); if(i) { M_p=ML.head->next;//p指向第一首歌 cout<<"歌曲光盤(pán)已就位,是否現(xiàn)在播放(Y/N)"<>ch; InitQList(TempQL); //初始化臨時(shí)隊(duì)列 if(ch=='Y'||ch=='y') { system("cls"); PlayMusic(); Match(); PrintEachMatch()

51、; } cout<<"按n進(jìn)展下一首歌曲、、\n"; cout<<"按q停止播放音樂(lè)、、"<>ch; while(ch=='n'||ch=='N') { system("cls"); Next(); cout<<"按n進(jìn)展下一首歌曲、、\n"; cout<<"按q停止播放音樂(lè)、、"<>ch; } if(ch=='q'||ch=='Q') return; } } void Wele() { cout<<"\t\t\t\t歡迎進(jìn)入進(jìn)入舞池~~~~"<

52、續(xù)..."; getch(); system("cls"); } void LoadAdmin() { Wele(); int res=0; int i; ReadAdmin(); char userName[15]; char key[15]; for( i=0;i<3;i++) { Admin *p=admin->next; cout<<"\t\t\t請(qǐng)輸入您的用戶(hù)名:"; cin>>userName; cout<<"\t\t\t請(qǐng)輸入您的密 碼:"; cin>>key; while(p) { if(strcmp(p->name,userName)

53、==0) break; p=p->next; } if(!p) { system("cls"); cout<<"\t\t\t輸入的用戶(hù)名不存在~~~~~"<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)...";

54、 Sleep(500); //system("cls"); break; } else { system("cls"); cout<<"\t\t\t輸入的密碼錯(cuò)誤、、、"<=3) { cout<<"\t\t\t您今天的機(jī)會(huì)已經(jīng)用完,再見(jiàn)"; exit(0); } } void ShowMessage() { system("cls"); int res; cout<<"\t\t\t選擇要操作的信息:"<

55、l; cin>>res; if(res==1) { cout<<"\t\t\t座位信息如下:"<>ch; if(ch=='Y'||ch=='y') { if(InFileMatchTable()) { cout<<"數(shù)據(jù)已寫(xiě)入文件..."<>ch; if

56、(ch=='Y'||ch=='y') { if(InFileMatchTable()) cout<<"數(shù)據(jù)已寫(xiě)入文件..."<

57、"\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("

58、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"); p

59、rintf("\n\n\n\n\n\n\n\n\t\t\t ^o^歡迎下次使用^o^\n\n\t\t\t\t -----GoodBye!"); Sleep(200); system("CLS"); printf("\n\n\n\n\n\n\n\n\t\t\t ^o^歡迎下次使用^o^\n\n\t\t\t\t -----GoodBye!\n"); } void CheckByName() //根據(jù)查詢(xún)配對(duì)情況 { char boyName[15]; char girlName[15]; cout<<"請(qǐng)輸入男生:"

60、; cin>>boyName; cout<<"請(qǐng)輸入女生:"; cin>>girlName; int count=0; for(int i=0;i

61、<"歌曲名稱(chēng)\t\t性別\t編號(hào)\t\t性別\t編號(hào)"<

62、ut<>Musiame; int count=0; for(int i=0;i

63、ount==0) { cout<<"未找到該歌曲~~~~"; } else { cout<<"\t\t\t查詢(xún)的學(xué)生的配對(duì)情況如下:"<

64、"<>ins; switch(ins)

65、 { case 1: system("cls"); StudentChose(); InitQueue(Boys); InitQueue(Girls); StudentSit(); //學(xué)生分別入座 GetStuSeat(); //獲取學(xué)生座位信息 cout<<"\t\t\t男女生已分別就位...."<>ch; if(ch=='Y'||ch=='y') { if(InFileS

66、tuSeat()) cout<<"數(shù)據(jù)已寫(xiě)入文件..."<>i; switch(i) { case 1: CheckByName(); break; case 2: CheckByMusic(); break; } //CheckByMusic(); getch(); break; case 5: system("color FC"); Quit(); exit(0); break; } } } void main() { MainCho

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!