版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 數(shù)學(xué)與計(jì)算機(jī)學(xué)院課程設(shè)計(jì)說明書課 程 名 稱: 軟件工程課程設(shè)計(jì) 課 程 代 碼: 8404131 題 目:KTV點(diǎn)歌管理系統(tǒng)實(shí)現(xiàn)歌曲播放年級/專業(yè)/班: 09級軟件工程4班 學(xué) 生 姓 名: 學(xué) 號: 開 始 時(shí) 間: 2011 年 05 月 27 日完 成 時(shí) 間: 2011 年 06 月 8 日課程設(shè)計(jì)成績:學(xué)習(xí)態(tài)度及平時(shí)成績(30)技術(shù)水平與實(shí)際能力(20)創(chuàng)新(5)說明書(計(jì)算書、圖紙、分析報(bào)告)撰寫質(zhì)量(45)總 分(100)指導(dǎo)教師簽名: 年 月 日軟件工程 課程設(shè)計(jì)任務(wù)書學(xué)院名稱: 數(shù)學(xué)與計(jì)算機(jī)學(xué)院 課程代碼:8404131 專業(yè): 軟件工程 年級: 2009級 一、設(shè)計(jì)題目
2、 KTV點(diǎn)歌管理系統(tǒng)二、主要內(nèi)容本課程設(shè)計(jì)完成一KTV自動點(diǎn)歌管理系統(tǒng),本系統(tǒng)包括歌曲管理和點(diǎn)歌查詢界面等功能。三、具體要求及應(yīng)提交材料具體要求:本課程設(shè)計(jì)要求學(xué)生運(yùn)用軟件工程的思想,嚴(yán)格按照軟件生命周期各階段的目的和任務(wù),完成對系統(tǒng)的分析、設(shè)計(jì)、編碼、及測試。1完成系統(tǒng)的需求分析2完成系統(tǒng)的設(shè)計(jì): 針對分析階段提出的軟件要求,給出實(shí)現(xiàn)的方案和具體細(xì)節(jié)的說明。(1)導(dǎo)出系統(tǒng)的數(shù)據(jù)流程圖和功能模塊圖。(2)設(shè)計(jì)數(shù)據(jù)庫。使用Microsoft Access創(chuàng)建數(shù)據(jù)庫。確定數(shù)據(jù)庫中數(shù)據(jù)表的組成。確定數(shù)據(jù)表中字段的構(gòu)成、主鍵字段和有關(guān)字段的約束條件等。依靠數(shù)據(jù)表中主鍵字段建立數(shù)據(jù)表之間的關(guān)系,并由此建
3、立數(shù)據(jù)表之間的參照完整性約束。(3)根據(jù)功能確定軟件模塊組成及調(diào)用關(guān)系。(4)確定每個(gè)模塊的數(shù)據(jù)結(jié)構(gòu)及算法。3編碼建造模塊,在可視化編程環(huán)境下,按照軟件設(shè)計(jì)要求制作界面和完成對模塊的編碼,由此使軟件設(shè)計(jì)具體化為軟件作品。4. 測試編寫合適的測試用例完成系統(tǒng)的測試工作并分析結(jié)果。5編寫課程設(shè)計(jì)報(bào)告應(yīng)提交材料:1上交源程序:學(xué)生按照課程設(shè)計(jì)的具體要求所開發(fā)的所有源程序(應(yīng)該放到一個(gè)文件夾中);2課程設(shè)計(jì)報(bào)告的打印稿和電子稿;四、主要技術(shù)路線提示1認(rèn)真閱讀相關(guān)知識,完成系統(tǒng)的功能分析和系統(tǒng)設(shè)計(jì)2選用ACCESS作為DBMS五、進(jìn)度安排序號設(shè)計(jì)內(nèi)容天數(shù)1分析設(shè)計(jì)內(nèi)容,給出解決方案32創(chuàng)建數(shù)據(jù)庫及建表3
4、3可視化界面設(shè)計(jì)34對所建數(shù)據(jù)庫進(jìn)行設(shè)計(jì),整理設(shè)計(jì)思路,編碼、測試,寫出課程設(shè)計(jì)報(bào)告35指導(dǎo)老師檢查設(shè)計(jì)結(jié)果并做成績評定2總 計(jì)14六、參考資料1 張海藩. 軟件工程導(dǎo)論. 北京:清華大學(xué)出版社,20042 陳明. 實(shí)用軟件工程基礎(chǔ). 北京:清華大學(xué)出版社,20033 殷人昆. 實(shí)用軟件工程. 北京:清華大學(xué)出版社,2003指導(dǎo)教師 簽名日期 年 月 日系 主 任 審核日期 年 月 日目 錄1 前言42 需求分析52.1 功能分析52.2 方案分析53 概要設(shè)計(jì)63.1 數(shù)據(jù)結(jié)構(gòu)63.2 邏輯結(jié)構(gòu)與物理結(jié)構(gòu)63.3 功能模塊劃分63.4抽象數(shù)據(jù)類定義94 詳細(xì)設(shè)計(jì)94.1 數(shù)據(jù)類型定義94.2
5、 主要模塊內(nèi)部設(shè)計(jì)10選擇歌曲功能模塊104.2.2 查看播放列表功能模塊134.2.3 歌曲播放功能模塊145 實(shí)現(xiàn)與調(diào)試分析165.1 實(shí)現(xiàn)環(huán)境165.2 語言選擇165.3 調(diào)試分析166 測試分析166.1 測試用例186.2 測試結(jié)果186.3 性能分析197用戶手冊20總 結(jié)20參考文獻(xiàn)201 前言迅速發(fā)展的計(jì)算機(jī)科學(xué)技術(shù)應(yīng)用越來越廣泛,已經(jīng)滲透到了人類社會生產(chǎn)和生活的各個(gè)領(lǐng)域。 隨著生活水平的提高,人們除了注重衣食住行以外,越來越需要一些好的娛樂休閑方式,而卡拉OK起源于日本引入我國,這種娛樂方式很快被大家接受。這也促進(jìn)了很多愛好者開發(fā)適用于不同應(yīng)用場合的KTV點(diǎn)歌系統(tǒng),以便于顧
6、客在KTV中自由點(diǎn)歌而不受其他的影響,同時(shí)也節(jié)約了很大的成本。KTV點(diǎn)歌系統(tǒng)以滿足用戶需求,減輕工作人員的復(fù)旦為宗旨。隨著計(jì)算機(jī)技術(shù)的進(jìn)一步發(fā)展和人們生活要求的不斷提高,KTV點(diǎn)歌管理系統(tǒng)一定會有更加廣闊的應(yīng)用前景。在這里,主要實(shí)現(xiàn)KTV點(diǎn)歌管理系統(tǒng)的歌曲播放功能(包括歌曲管理和友好的點(diǎn)歌查詢界面和歌曲播放功能)。2 需求分析 2.1 功能分析 經(jīng)過綜合分析,確定了系統(tǒng)應(yīng)該包括如下功能:該KTV點(diǎn)歌管理系統(tǒng)應(yīng)該實(shí)現(xiàn)選擇歌曲,查看播放列表,以及簡單的播放歌曲功能。用戶可以完全按照菜單的提示對其進(jìn)行操作,系統(tǒng)對用戶的指令做出相應(yīng)的反應(yīng)。l 選擇歌曲:通過顯示的界面選擇歌曲,其中歌曲的查找包括按語種
7、查找,按姓名查找,全部顯示。l 查看播放列表:通過該功能查看,刪除已選擇的歌曲,增添新的歌曲。l 歌曲播放:通過該功能實(shí)現(xiàn)歌曲的按順序播放和隨機(jī)播放。 2.2 方案分析該系統(tǒng)針對的是KTV點(diǎn)歌的用戶,用戶可以通過該系統(tǒng)對所提供的歌曲進(jìn)行選擇,可惜查看刪除播放列表中的歌曲,實(shí)現(xiàn)歌曲的按順序播放和隨機(jī)播放功能。 圖13 概要設(shè)計(jì) 3.1 數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)元素:歌曲庫,播放列表,歌曲。歌曲屬性:歌曲編號,歌曲名,歌手名,時(shí)間,語種 圖23.2 邏輯結(jié)構(gòu)與物理結(jié)構(gòu)通過對上述數(shù)據(jù)結(jié)構(gòu)的分析,根據(jù)課程設(shè)計(jì)自動選課系統(tǒng)的需求,將以上的E-R圖轉(zhuǎn)換為關(guān)系模式:歌曲(歌曲編號,歌曲名,歌手,時(shí)長,語種); 供選擇
8、的歌曲保存在歌曲庫musicbase.txt文件中,播放列表保存在playlist.txt文件中。3.3 功能模塊劃分3.3.1結(jié)構(gòu)框圖 圖3 3.3.2程序流圖 圖43.3.3模塊功能分析及外部設(shè)計(jì)以下是對各功能模塊主要功能的描述u 選擇歌曲模塊: 通過顯示的界面選擇歌曲,用戶可以按幾種方式來選擇歌曲??梢园锤枨檎?,按語種選擇,按歌手名選擇,全部查看,選中的歌曲自動記錄至播放列表,以便用戶查看進(jìn)行下一功能的使用。u 查看播放列表模塊: 用戶選擇該模塊即可查看播放列表,播放列表按用戶選擇順序默認(rèn)排序,用戶可以在該模塊中自行選擇增添或者刪除播放列表中的歌曲,并可刷新播放列表。u 歌曲播放模塊
9、: 用戶選擇歌曲至播放列表后,可使用該模塊,實(shí)現(xiàn)歌曲的播放功能,該模塊包括順序播放和隨機(jī)播放歌曲兩種功能。外部設(shè)計(jì)u 主界面: 列出該系統(tǒng)的各大功能供用戶選擇,在各模塊內(nèi)部界面也設(shè)置有返回 鍵,基本實(shí)現(xiàn)良好的友好界面。3.4抽象數(shù)據(jù)類定義void parFile();void SelectMusics(); / 選擇歌曲子函數(shù)void SelectMusicsFrName(char name64);/ 從歌曲名來查找void SelectMusicsFrSinger(char singer64);/ 從歌手來查找void SelectAllMusics();/ 顯示全部歌曲void AddOn
10、eMusicToPList(char code64); / 增加一首歌曲到列表中void DelOneMusicToPList(char code64); / 增加一首歌曲到列表中void DispSelMusics(); / 查看播放列表自漢書void PlayMusics(); / 播放子函數(shù)void writePlist(char ch256); / 把選擇的歌曲寫入播放列表中(全局?jǐn)?shù)組)void writePlistFile();/ 把選擇的歌曲寫入播放列表中(播放列表文件)void deletePlist(char ch256); / 把選擇的歌曲寫入播放列表中(全局?jǐn)?shù)組)4 詳細(xì)設(shè)
11、計(jì)4.1 數(shù)據(jù)類型定義typedef structchar chcode64;char chname64;char chsinger64;char chtime64;char chlanguage64; music_info;4.2 主要模塊內(nèi)部設(shè)計(jì)選擇歌曲功能模塊4.2.1.1 模塊算法void SelectMusics()/int select;char chSelect;char chSel64;bool bSelFlag = true;printf("nttt_ n");printf("ttt| |n"); printf("ttt| a
12、.按照歌曲名查找歌曲 |n"); printf("ttt|_|n");printf("ttt| |n");printf("ttt| b.按歌手查找歌曲 |n");printf("ttt|_|n");printf("ttt| |n");printf("ttt| c.顯示全部歌曲供選擇 |n");printf("ttt|_|n");printf("ttt| |n");printf("ttt| d.返回上一級菜單 |n&q
13、uot;);printf("ttt|_|n");printf("請選擇查找歌曲的方式(a-d):");while(bSelFlag)/scanf("%d",&select);scanf("%s",&chSelect);switch(chSelect) case 'a': / 按照歌曲名查找歌曲memset(chSel,0,64);bSelFlag = false;printf("請輸入歌曲名稱:");scanf("%s",&chSel)
14、;SelectMusicsFrName(chSel);break;case 'b': /按歌手查找歌曲memset(chSel,0,64);bSelFlag = false;printf("請輸入歌手名:");scanf("%s",&chSel);SelectMusicsFrSinger(chSel);break; case 'c': /顯示全部歌曲供選擇bSelFlag = false;SelectAllMusics();break;case 'd': /顯示全部歌曲供選擇bSelFlag = f
15、alse;break;default:printf("選擇輸入錯(cuò)誤!請重新輸入輸入(a-d):");break; 4.2.1.2 流程圖 圖54.2.2 查看播放列表功能模塊4.2.2.1模塊算法void DispSelMusics()char chSel;char cSel256;char chSelect;for(int i=0;i<nplistMusics;i+)printf("n編號:%s;歌名:%15s;歌手:%8s;時(shí)間:%s;語種:%s",nplistMusic_infoi.chcode,nplistMusic_infoi.chnam
16、e,nplistMusic_infoi.chsinger,nplistMusic_infoi.chtime,nplistMusic_infoi.chlanguage);printf("n是否刪除或增加歌曲(y/n)?");scanf("%s",&chSelect);if('y'=chSelect)printf("n刪除歌曲請輸入d,增加歌曲請輸入a:");scanf("%s",&chSel);if('d'=chSel)printf("n輸入刪除歌曲編號并以,
17、隔開:");memset(cSel,0,256);scanf("%s",&cSel);deletePlist(cSel);else if('a'=chSel)printf("n輸入增加歌曲編號并以,隔開:");memset(cSel,0,256);scanf("%s",&cSel);writePlist(cSel);4.2.2.2流程圖 圖64.2.3 歌曲播放功能模塊4.2.3.1 模塊算法void PlayMusics()char cSel;int nSec;/char chartmp;b
18、ool bQuit1 = false;bool bQuit2 = false;printf("n請選擇播放模式(1:順序播放;2:隨機(jī)播放):");scanf("%s",&cSel);if('1'=cSel) Play(1)if('2'=cSel) Play(2)4.2.3.2 流程圖 圖75 實(shí)現(xiàn)與調(diào)試分析5.1 實(shí)現(xiàn)環(huán)境Windows系列系統(tǒng)開發(fā)平臺:vc6.05.2 語言選擇C程序語言5.3 調(diào)試分析對于所有有返回值的函數(shù),都應(yīng)該檢查返回值,除非你確信這個(gè)函數(shù)調(diào)用絕對不會出錯(cuò),或者不關(guān)心它是否出錯(cuò)。 一些函數(shù)
19、返回錯(cuò)誤,需要用其他函數(shù)獲得錯(cuò)誤的具體信息。例如accept返回INVALID_SOCKET表示accept失敗,為了查明 具體的失敗原因,應(yīng)該立刻用WSAGetLastError獲得錯(cuò)誤碼,并針對性的解決問題。 有些函數(shù)通過異常機(jī)制拋出錯(cuò)誤,應(yīng)該用TRY-CATCH語句來檢查錯(cuò)誤.程序員對于能處理的錯(cuò)誤,應(yīng)該自己在底層處理,對于不能處理的,應(yīng)該報(bào)告給用戶讓他們決定怎么處理。如果程序出了異常, 卻不對返回值和其他機(jī)制返回的錯(cuò)誤信息進(jìn)行判斷,只能是加大了找錯(cuò)誤的難度。 6 測試分析6.1 測試用例測試結(jié)果測試1:名稱:歌曲選擇功能模塊測試 目的:測試歌曲選擇功能。 內(nèi)容:進(jìn)入主界面,按提示,選擇
20、1,進(jìn)入選擇歌曲界面,選擇a,按歌曲名查找歌曲輸入數(shù)據(jù):歷史的天空。預(yù)期輸出結(jié)果:歷史的天空歌曲的相關(guān)信息; 測試結(jié)果測試2:名稱:歌曲選擇功能模塊測試 目的:測試歌曲選擇功能。 內(nèi)容:進(jìn)入主界面,按提示,選擇1,進(jìn)入選擇歌曲界面,選擇b,按歌手名查找歌曲輸入數(shù)據(jù):周杰倫。預(yù)期輸出結(jié)果:周杰倫的所有歌曲;測試結(jié)果測試3:名稱:歌曲選擇功能模塊測試 目的:測試歌曲選擇功能。 內(nèi)容:進(jìn)入主界面,按提示,選擇1,進(jìn)入選擇歌曲界面,選擇c,顯示全部歌曲。輸入數(shù)據(jù):c。預(yù)期輸出結(jié)果:顯示所有歌曲;測試結(jié)果測試4:名稱:查看播放列表功能模塊測試 目的:測試查看播放列表功能。 內(nèi)容:進(jìn)入主界面,按提示,選擇
21、2,進(jìn)入查看播放列表界面,選擇c,顯示全部歌曲。輸入數(shù)據(jù):2。預(yù)期輸出結(jié)果:已選擇的歌曲;測試結(jié)果測試5:名稱:播放歌曲功能模塊測試 目的:測試播放歌曲功能。 內(nèi)容:進(jìn)入主界面,按提示,選擇3,進(jìn)入查看播放列表界面,選擇1。輸入數(shù)據(jù):u,d,q。預(yù)期輸出結(jié)果:按順序播放歌曲,并且可以實(shí)現(xiàn)上一曲下一曲以及退出;測試結(jié)果測試6:名稱:播放歌曲功能模塊測試 目的:測試播放歌曲功能。 內(nèi)容:進(jìn)入主界面,按提示,選擇3,進(jìn)入查看播放列表界面,選擇2。輸入數(shù)據(jù):u,d,q。預(yù)期輸出結(jié)果:按隨機(jī)播放歌曲,并且可以實(shí)現(xiàn)上一曲下一曲以及退出;6.2 測試結(jié)果 圖8 圖9 圖10 圖11 圖126.3 性能分析
22、此處采用的是黑盒測試法,及主要測試系統(tǒng)的每個(gè)功能是否能正確運(yùn)作。以下為接受測試的各個(gè)功能模塊描述:選擇歌曲: 實(shí)現(xiàn)了用戶對歌曲選擇的功能的需求。查看播放列表: 實(shí)現(xiàn)了查看,刪除已選擇的歌曲,增添新的歌曲。歌曲播放: 實(shí)現(xiàn)了歌曲的按順序播放和隨機(jī)播放,以及上一曲,下一曲。7用戶手冊此次開發(fā)的KTV點(diǎn)歌管理系統(tǒng)比較簡單,容易上手,用戶只需根據(jù)提示輸入自己的選擇即可,方便快捷。總 結(jié) 該KTV點(diǎn)歌管理系統(tǒng)我是完成的實(shí)現(xiàn)歌曲播放的功能,由于對可視化界面以及數(shù)據(jù)庫的不熟悉,所以采用了最原始的辦法完成了這個(gè)系統(tǒng),基本上實(shí)現(xiàn)了所要求的功能。為了對以后的實(shí)際開發(fā)有所幫助,總結(jié)一下本次課程設(shè)計(jì):1,對基礎(chǔ)知識掌
23、握仍有欠缺,不能達(dá)到熟練運(yùn)用。2,沒合理安排好時(shí)間,導(dǎo)致進(jìn)度有所偏差。3珍惜每次課程設(shè)計(jì),因?yàn)榭偟膩碚f,收獲不小。參考文獻(xiàn) 編號 書 名 作 者 出 版 社出版日期1軟件工程導(dǎo)論張海藩清華大學(xué)出版社 20042實(shí)用軟件工程基礎(chǔ)陳 明清華大學(xué)出版社 20033 實(shí)用軟件工程殷人昆清華大學(xué)出版社 2003#include <stdio.h>#include <iostream.h>#include <windows.h>#include <iostream> #include <fstream> #include <time.h&g
24、t;#include <conio.h>/*/*1、歌曲存放在musicbase.txt文件中/*2、播放列表文件為playlist.txt*/ 定義結(jié)構(gòu)typedef structchar chcode64;char chname64;char chsinger64;char chtime64;char chlanguage64; music_info;/ 函數(shù)定義void parFile();void SelectMusics(); / 選擇歌曲子函數(shù)void SelectMusicsFrName(char name64);/ 從歌曲名來查找void SelectMusicsF
25、rSinger(char singer64);/ 從歌手來查找void SelectAllMusics();/ 顯示全部歌曲void AddOneMusicToPList(char code64); / 增加一首歌曲到列表中void DelOneMusicToPList(char code64); / 增加一首歌曲到列表中void DispSelMusics(); / 查看播放列表自漢書void PlayMusics(); / 播放子函數(shù)void writePlist(char ch256); / 把選擇的歌曲寫入播放列表中(全局?jǐn)?shù)組)void writePlistFile();/ 把選擇的歌
26、曲寫入播放列表中(播放列表文件)void deletePlist(char ch256); / 把選擇的歌曲寫入播放列表中(全局?jǐn)?shù)組)/ 全局變量定義music_info nMusic_info1000; / 歌曲庫中的歌曲信息數(shù)組int nMusics;/ 歌曲庫總共的歌曲數(shù)music_info nplistMusic_info1000; / 播放列表中的歌曲信息數(shù)組int nplistMusics;/ 播放列表中的歌曲數(shù)/ 主函數(shù)void main()int select;bool exitFlag = false; / 退出標(biāo)志位system("cls"); / 清屏
27、 parFile();/ 解析歌曲庫文件nplistMusics = 0;/ 最初播放列表中沒有歌曲while(1)printf("nttt _ n"); printf("ttt| |n"); printf("ttt| 點(diǎn)歌系統(tǒng) |n"); printf("ttt|_|n");printf("ttt| |n"); printf("ttt| 1.選擇歌曲 |n"); printf("ttt|_|n");printf("ttt| |n");
28、 printf("ttt| 2.查看播放列表 |n");printf("ttt|_|n");printf("ttt| |n"); printf("ttt| 3.播放 |n");printf("ttt|_|n");printf("ttt| |n"); printf("ttt| 4.退出 |n");printf("ttt|_|n"); printf("請您按菜單指示選擇(1-4):");scanf("%d&qu
29、ot;,&select);switch(select) case 1: SelectMusics();break;case 2:DispSelMusics();break; case 3:PlayMusics();break;case 4: printf("已退出點(diǎn)歌系統(tǒng)!n");exitFlag = true;break; default:printf("選擇輸入錯(cuò)誤!請重新輸入(1-4)!"); if(exitFlag)break; / 退出主菜單循環(huán),進(jìn)而退出點(diǎn)歌系統(tǒng)/選擇歌曲子函數(shù)void SelectMusics()/int selec
30、t;char chSelect;char chSel64;bool bSelFlag = true;printf("nttt_ n");printf("ttt| |n"); printf("ttt| a.按照歌曲名查找歌曲 |n"); printf("ttt|_|n");printf("ttt| |n");printf("ttt| b.按歌手查找歌曲 |n");printf("ttt|_|n");printf("ttt| |n");pr
31、intf("ttt| c.顯示全部歌曲供選擇 |n");printf("ttt|_|n");printf("ttt| |n");printf("ttt| d.返回上一級菜單 |n");printf("ttt|_|n");printf("請選擇查找歌曲的方式(a-d):");while(bSelFlag)/scanf("%d",&select);scanf("%s",&chSelect);switch(chSelect)
32、case 'a': / 按照歌曲名查找歌曲memset(chSel,0,64);bSelFlag = false;printf("請輸入歌曲名稱:");scanf("%s",&chSel);SelectMusicsFrName(chSel);break;case 'b': /按歌手查找歌曲memset(chSel,0,64);bSelFlag = false;printf("請輸入歌手名:");scanf("%s",&chSel);SelectMusicsFrSing
33、er(chSel);break; case 'c': /顯示全部歌曲供選擇bSelFlag = false;SelectAllMusics();break;case 'd': /顯示全部歌曲供選擇bSelFlag = false;break;default:printf("選擇輸入錯(cuò)誤!請重新輸入輸入(a-d):");break; / 查看播放列表子函數(shù)void DispSelMusics()char chSel;char cSel256;char chSelect;for(int i=0;i<nplistMusics;i+)print
34、f("n編號:%s;歌名:%s;歌手:%s;時(shí)間:%s;語種:%s",nplistMusic_infoi.chcode,nplistMusic_infoi.chname,nplistMusic_infoi.chsinger,nplistMusic_infoi.chtime,nplistMusic_infoi.chlanguage);printf("n是否刪除或增加歌曲(y/n)?");scanf("%s",&chSelect);if('y'=chSelect)printf("n刪除歌曲請輸入d,增加歌
35、曲請輸入a:");scanf("%s",&chSel);if('d'=chSel)printf("n輸入刪除歌曲編號并以,隔開:");memset(cSel,0,256);scanf("%s",&cSel);deletePlist(cSel);else if('a'=chSel)printf("n輸入增加歌曲編號并以,隔開:");memset(cSel,0,256);scanf("%s",&cSel);writePlist(cSe
36、l);/ 播放子函數(shù)void PlayMusics()char cSel;int nSec;char chartmp;bool bQuit1 = false;bool bQuit2 = false;printf("n請選擇播放模式(1:順序播放;2:隨機(jī)播放):");scanf("%s",&cSel);if('1'=cSel)for(int i=0;i<nplistMusics;i+)printf("n播放第%d歌",i+1);nSec = atoi(nplistMusic_infoi.chtime);f
37、or(int j=0;j<nSec/20;j+)printf("n編號:%s;歌名:%s;歌手:%s;時(shí)間:%s;語種:%s",nplistMusic_infoi.chcode,nplistMusic_infoi.chname,nplistMusic_infoi.chsinger,nplistMusic_infoi.chtime,nplistMusic_infoi.chlanguage);Sleep(1000);if(0=(j/3)printf("n輸入q可以退出播放!輸入u播放上一首,d下一首。");if ( _kbhit() switch(_g
38、etch()case 'q':bQuit1 = true;bQuit2 = true;break;case 'u':i=i-2;bQuit1 = true;break;case 'd':bQuit1 = true;break;if(bQuit1)bQuit1=false;break;if(bQuit2)break;else if('2'=cSel)while(1)int i;srand(time(NULL); i=(rand()%nplistMusics);printf("n播放第%d歌",i+1);nSec
39、= atoi(nplistMusic_infoi.chtime);for(int j=0;j<nSec/20;j+)printf("n編號:%s;歌名:%s;歌手:%s;時(shí)間:%s;語種:%s",nplistMusic_infoi.chcode,nplistMusic_infoi.chname,nplistMusic_infoi.chsinger,nplistMusic_infoi.chtime,nplistMusic_infoi.chlanguage);Sleep(1000);if(0=(j/3)printf("n輸入q可以退出播放!");if
40、( _kbhit() switch(_getch()case 'q':bQuit1 = true;bQuit2 = true;break;case 'u':i=(i-2)>=0?(i-2):(nplistMusics-i+1);bQuit1 = true;break;case 'd':bQuit1 = true;break;if(bQuit1)bQuit1=false;break;if(bQuit2)break;/ 分析歌曲庫文件, 將歌曲信息寫入歌曲信息結(jié)構(gòu)體變量指針pMusic_info中void parFile()music_info
41、 * pMusic_info = nMusic_info;int nCount = 0;FILE *fp;char buf256,buf164;int npre=5;int n,m,p;if(NULL = (fp=fopen("musicbase.txt","r") exit(-1); while(!feof(fp)memset(buf,0,256);memset(buf1,0,64);fgets(buf,256,fp);n=0,m=0,p=0;while(0!=bufn)if(','=bufn | ''=bufn)n+;
42、m=0;p+;switch(p)case 1:strcpy(pMusic_info->chcode,buf1);break;case 2:strcpy(pMusic_info->chname,buf1);break;case 3:strcpy(pMusic_info->chsinger,buf1);break;case 4:strcpy(pMusic_info->chtime,buf1);break;case 5:strcpy(pMusic_info->chlanguage,buf1);break;default:printf("歌曲庫格式不對!&quo
43、t;);break;memset(buf1,0,64);elseif(m<npre)n+;m+;elsebuf1m-npre=bufn+;m+;pMusic_info+;nCount+;fclose(fp);nMusics = nCount; / 歌曲庫總共的歌曲數(shù)void SelectMusicsFrName(char name64)/ 從歌曲名來查找char chSel256;for(int i=0;i<nMusics;i+)if(0=strcmp(name,nMusic_infoi.chname)printf("n編號:%s;歌名:%s;歌手:%s;時(shí)間:%s;語種
44、:%s",nMusic_infoi.chcode,nMusic_infoi.chname,nMusic_infoi.chsinger,nMusic_infoi.chtime,nMusic_infoi.chlanguage);printf("n輸入標(biāo)號并以,隔開選擇歌曲:");memset(chSel,0,256);scanf("%s",&chSel);writePlist(chSel);void SelectMusicsFrSinger(char singer64)/ 從歌手來查找char chSel256;for(int i=0;i&
45、lt;nMusics;i+)if(0=strcmp(singer,nMusic_infoi.chsinger)printf("n編號:%s;歌名:%s;歌手:%s;時(shí)間:%s;語種:%s",nMusic_infoi.chcode,nMusic_infoi.chname,nMusic_infoi.chsinger,nMusic_infoi.chtime,nMusic_infoi.chlanguage);printf("n輸入標(biāo)號并以,隔開選擇歌曲:");memset(chSel,0,256);scanf("%s",&chSel)
46、;writePlist(chSel);void SelectAllMusics()/ 顯示全部歌曲char chSel256;for(int i=0;i<nMusics;i+)printf("n編號:%s;歌名:%s;歌手:%s;時(shí)間:%s;語種:%s",nMusic_infoi.chcode,nMusic_infoi.chname,nMusic_infoi.chsinger,nMusic_infoi.chtime,nMusic_infoi.chlanguage);printf("n輸入標(biāo)號并以,隔開選擇歌曲:");memset(chSel,0,2
47、56);scanf("%s",&chSel);writePlist(chSel);void writePlist(char ch256)char ccode64;memset(ccode,0,64);int i=0,j=0;while(0x00!=chi)if(','=chi )AddOneMusicToPList(ccode); memset(ccode,0,64);j=0;i+;elseccodej=chi;j+;i+;if(0x00!=ch0)AddOneMusicToPList(ccode);/ 更新播放列表文件writePlistFile();void deletePlist(char ch256)char ccode64;
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 愛心傳遞正能量
- 2025個(gè)人商鋪?zhàn)赓U合同范本全文解讀7篇
- 2025版國際投資居間業(yè)務(wù)合同范本3篇
- 2025年度個(gè)人房屋買賣合同解除條件協(xié)議2篇
- 2025年度個(gè)人信用貸款擔(dān)保合同模板大全
- 2025年度個(gè)人設(shè)備租賃還款協(xié)議規(guī)范3篇
- 2025年全球及中國電磁儲能行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球塑料桶襯里行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025版新勞動法下企業(yè)內(nèi)部審計(jì)與合規(guī)合同2篇
- 2025年度店鋪食品安全管理體系認(rèn)證合同
- 成品移動公廁施工方案
- 2025年度部隊(duì)食堂食材采購與質(zhì)量追溯服務(wù)合同3篇
- 新人教版一年級下冊數(shù)學(xué)教案集體備課
- 消防產(chǎn)品目錄(2025年修訂本)
- 地方性分異規(guī)律下的植被演替課件高三地理二輪專題復(fù)習(xí)
- 繪本 課件教學(xué)課件
- 光伏項(xiàng)目風(fēng)險(xiǎn)控制與安全方案
- 9.2提高防護(hù)能力教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版道德與法治七年級上冊
- 催收培訓(xùn)制度
- 牧場物語-礦石鎮(zhèn)的伙伴們-完全攻略
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理體系 審核與認(rèn)證機(jī)構(gòu)要求》中文版(機(jī)翻)
評論
0/150
提交評論