版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、文檔可能無法思考全面,請(qǐng)瀏覽后下載! 歌曲信息管理系統(tǒng)要求制作一個(gè)歌曲信息管理系統(tǒng)功能:1) 歌曲信息包括歌曲名,作者,演唱者,發(fā)行年月等。2) 可以對(duì)歌曲信息進(jìn)行輸入,刪除,瀏覽。3) 可以查詢根據(jù)歌曲名,作者,演唱者歌曲信息。4) 可以提供按作者分組顯示功能。5) 用文件存儲(chǔ)信息。我的設(shè)計(jì)思路根據(jù)題目要求,由于歌曲信息數(shù)據(jù)以文本文件的方式存放,所以應(yīng)提供文件的輸入、輸出等操作;在程序中需要瀏覽歌曲的信息,應(yīng)提供顯示、查詢等操作,按照一般的思路,我采用的是按照歌曲名進(jìn)行查找的方式。并且要提供可以按作者進(jìn)行分組的方法。整體設(shè)計(jì)思路是首先以一個(gè)主函數(shù)為主,將各個(gè)功能諸如瀏覽,刪除等分別設(shè)計(jì)成函數(shù)
2、,通過主函數(shù)的調(diào)用從而實(shí)現(xiàn)其功能。由于程序中經(jīng)常要用到一些函數(shù),諸如加載函數(shù),顯示函數(shù)等,如果重復(fù)輸入,會(huì)嚴(yán)重增加工作量,所以可以將這些函數(shù)作為公共函數(shù)編寫出來,以被隨時(shí)調(diào)用。分析一下整個(gè)系統(tǒng),根據(jù)上面的需求分析,可以將系統(tǒng)設(shè)計(jì)分為以下六大模塊。28 / 28退出瀏覽刪除輸入歌曲信息管理查找分組四. 詳細(xì)設(shè)計(jì)#include#include#include#include#define N 100上面這些是整個(gè)程序要用到的文件包含命令和宏定義struct song char name20; char creater20; char singer20; char date6; soN;將下面所要
3、編寫的函數(shù)分別聲明出來void shu_ru() ; void shan_chu(); void liu_lan() ; void cha_zhao(); void fz(int i,int n); void fen_zu (); void fname(); void printf_one(int i); void input(int i); void save(int n); void printf_back(); int load(); void printf_face(); int shan_chue_data(int j,int n); 首先是設(shè)計(jì)主函數(shù),設(shè)計(jì)主函數(shù)一般應(yīng)該做到簡潔,主
4、函數(shù)主要是提供函數(shù)調(diào)用等方面的功能,各功能函數(shù)以菜單的形式在主函數(shù)中列出來,通過主函數(shù)的調(diào)用從而實(shí)現(xiàn)各功能函數(shù)的功能。其用流程圖可表示為: 根據(jù)n的值調(diào)用各功能模塊函數(shù)輸入n,判斷n是否是1-6顯示一系列功能選項(xiàng) NYY 菜單界面void menu() int k,w1; do printf(tt*目錄*nn); printf( 1.輸入n); printf( 2.刪除n); printf( 3.瀏覽n); printf( 4.查找n); printf(“5.分組 n”) printf(6.退出n);對(duì)選擇的數(shù)字作判斷 printf(nnt請(qǐng)選擇(1-6):); scanf(%d,&k); i
5、f(k6) w1=1; getchar(); else w1=0;根據(jù)選擇調(diào)用功能函數(shù) while(w1=1); switch(k) case 1:shu_ru();break; case 2:shan_chu();break; case 3:liu_lan();break; case 4:cha_zhao();break; case 5:fen_zu();break; case 6 exit(0); 主函數(shù)void main() menu();設(shè)計(jì)輸入功能函數(shù)模塊數(shù)據(jù)信息存放在文件中,為方便管理,一條記錄對(duì)應(yīng)一個(gè)歌曲,自然的我們可以想到用結(jié)構(gòu)體數(shù)組的形式存放多首歌曲信息。struct son
6、g char name20; /*歌曲名*/ char creater20; /*作者*/ char singer20; /*演唱者*/ char date6; /*發(fā)行年月*/soN;該結(jié)構(gòu)體中包含了歌曲所需的各項(xiàng)信息,soN中的N為歌曲數(shù)目,程序中采用宏定義方式,可以隨時(shí)對(duì)N進(jìn)行修該。輸入模塊的設(shè)計(jì)思想是根據(jù)所要輸入的歌曲數(shù)目,循環(huán)調(diào)用輸入函數(shù),然后調(diào)用保存函數(shù)。void shu_ru() int i,n;printf(要輸入幾首歌?:,N-1);scanf(%d,&n); printf(n 開始輸入nn); for(i=0;in;i+) printf(n 輸入第 %d首 歌.n,i+1)
7、; input(i); if(i!=0) save(n); printf_back(); 設(shè)計(jì)刪除函數(shù)模塊其思想是在顯示所有歌曲信息后,這時(shí)用到加載函數(shù)等,用戶輸入要?jiǎng)h除的歌曲的歌名,根據(jù)歌名查找記錄并予以刪除。其中,刪除的數(shù)據(jù)是從文件中刪除,刪除數(shù)據(jù)后面的記錄即歌曲信息往前移。其流程圖可表示為:是否找到此歌曲記錄輸入要?jiǎng)h除的歌曲名顯示所有歌曲記錄,看用戶需要?jiǎng)h除哪個(gè) Y N顯示找到的記錄,調(diào)用刪除函數(shù)顯示沒有找到 Y詢問是否繼續(xù)刪除返回主菜單 Nvoid shan_chu() struct song s;int i,n,k,w0=1,w1,w2=0;n=load(); do k=-1; pr
8、intf_face(); for(i=0;in;i+) if(i!=0)&i%10=0) printf(nn,按任意鍵鍵繼續(xù)); getchar(); printf(nn); printf_one(i); do printf(nn請(qǐng)輸入你要?jiǎng)h除的歌的歌名!Name:); scanf(%s,&); for(i=0;in;i+) if(strcmp(,)=0) k=i; s=soi; break; if(k=-1) printf(nnNO exit! Are you again?nnt1).again 2).no and back! ); scanf(%d,
9、&n); if(n=1)shan_chu(); else menu(); while(k=-1); printf_face(); printf_one(k); w1=shan_chue_data(i,n); if(w1=1) printf(n成功.nn Are you again?nnt1).again 2).no and back! ); scanf(%d,&w0); w2=1; else w0=0; if(w2=1)sok=s; while(w0=1); menu();設(shè)計(jì)瀏覽函數(shù)模塊所謂瀏覽,其思想就是顯示所有的歌曲信息,因?yàn)橛袝r(shí)歌曲信息較多,這時(shí)可以通過設(shè)計(jì)一個(gè)循環(huán),將歌曲信息以十個(gè)一
10、屏的形式顯示出來,這其中仍需調(diào)用加載函數(shù)及一些顯示函數(shù),最后按任意鍵返回主菜單。void liu_lan() int i,n;n=load(); printf_face(); for(i=0;inn 1).name 2).backn);printf(Which you need?:);do scanf(%d,&c); if(c2|c1) printf(nChoice error!Please again!); m=1; while(m!=0); switch(c) case 1:fname();break; printf_back();下面是根據(jù)歌曲名茶找函數(shù),其思想是首先輸入歌曲名,然后調(diào)用
11、加載函數(shù),通過strcmp函數(shù)找出該歌曲信息,如果存在則顯示出歌曲信息,如果不存在則顯示Not Found,并提示用戶是繼續(xù)查找還是返回主菜單。void fname() /*根據(jù)歌曲名查找*/int i,n; int k=-1;char name20;printf(nn name :);scanf(%s,&name); n=load(); for(i=0;in;i+) if(strcmp(,name)=0) k=i; printf_one(k); if(k=-1) printf(nNot Foundn); printf(nnAre you again?nt1).again 2)
12、.no and back bb); scanf(%d,&n); if(n=1)fname(); else menu(); 設(shè)計(jì)按作者分組功能該模塊的功能是將所有歌曲信息按照作者名一樣的進(jìn)行分組,然后從新顯示所有分組后的歌曲信息。其操作過程是加載歌曲作者名稱,將所有歌曲作者進(jìn)行比較,一致的放在一起,然后顯示分組后的所有歌曲信息。 void fz(int i,int n) int j;struct song s;for (j=i+1;jn;j+)if(strcmp(soi.creater,soj.creater)=0) if(j=i+1)i+; fz (i,n); else s=soi+1; so
13、i+1=soj; soj=s; else if(j=n-1) i+; fz(i,n); save(n);void fen_zu() /顯示分組后的所有歌曲信息int i=0,n;n=load();fz(i,n);printf(nn);liu_lan();設(shè)計(jì)公共函數(shù)部分有一些函數(shù)在多個(gè)函數(shù)模塊中都有可能被用到,為了程序的簡潔,減少程序的源代碼長度,我們可以將這些函數(shù)分別寫出,以便被其他函數(shù)隨時(shí)調(diào)用。這些函數(shù)分別有:顯示一個(gè)記錄函數(shù) 該函數(shù)作用是顯示出一首歌的所有歌曲信息,主要用到一個(gè)printf函數(shù)。 void printf_one(int i) printf(n%s %s %s %sn,so
14、,soi.creater,soi.singer,soi.date);輸入一個(gè)完整記錄函數(shù)該函數(shù)的作用是分別提示用戶來輸入一首歌的各個(gè)信息,包括歌曲名,作者,演唱者,日期。用到的是scanf printf 函數(shù)。void input(int i) printf(nname: ); scanf(%s,); printf(ncreater: ); scanf(%s,soi.creater); printf(nsinger: ); scanf(%s,soi.singer); printf(ndate: ); scanf(%s,soi.date);保存函數(shù)該函數(shù)是首先打開文件
15、,如果沒有就新建一個(gè),以只寫的方式,通過循環(huán)向文件中寫入歌曲信息。void save(int n) FILE *fp;int i;if(fp=fopen(song.txt,w)=NULL)printf(nCannot open filen); exit(1);for(i=0;in;i+) fprintf(fp,%s %s %s %sn,,soi.creater,soi.singer,soi.date);fclose(fp); 返回上一級(jí)函數(shù)該函數(shù)就是向用戶提示一個(gè)成功并調(diào)用menu()函數(shù)返回主菜單。void printf_back() void menu();printf(n
16、nt成功nn); menu(); 加載函數(shù)該函數(shù)的作用是首先打開文件,然后從文件中用fscanf函數(shù)調(diào)出歌曲信息,完成后用fclose關(guān)閉文件。int load()FILE *fp;int i;if(fp=fopen(song.txt,r)=NULL)printf(nCannot open filen); return 0; for(i=0;!feof(fp);i+) fscanf(fp,%s %s %s %s ,,soi.creater,soi.singer,soi.date); fclose(fp); return(i); 顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù)該函數(shù)的作用就是通過一個(gè)printf函數(shù)顯示出歌曲信息的表頭。void printf_face()printf(nname creater singer daten); 顯示刪除數(shù)據(jù)函數(shù)int shan_chue_data(int j,int n) FILE *fp;int i;if(fp=fopen(song.txt,w)=NULL)printf(nCannot open filen); exit(1);fo
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024馬腦山養(yǎng)殖戶合同
- 2024樓頂廣告牌安裝合同范本
- 房產(chǎn)交易資金托管服務(wù)合同
- 社區(qū)環(huán)境衛(wèi)生維護(hù)合同
- 授權(quán)經(jīng)營合同范本
- 房屋建筑工程協(xié)議2024年
- 標(biāo)準(zhǔn)傷殘賠償協(xié)議書參考
- 2023年高考地理第一次模擬考試卷-(廣東B卷)(考試版)A4
- 【人教版系列】四年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)專項(xiàng)測(cè)評(píng)(含答案)
- 關(guān)于離婚協(xié)議書的撰寫指南
- 生態(tài)文明學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 區(qū)病案質(zhì)控中心匯報(bào)
- 期中測(cè)試卷(1-4單元)(試題)2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)人教版
- 教育局職業(yè)院校教師培訓(xùn)實(shí)施方案
- 《萬維網(wǎng)服務(wù)大揭秘》課件 2024-2025學(xué)年人教版新教材初中信息技術(shù)七年級(jí)全一冊(cè)
- 2024年新華社招聘應(yīng)屆畢業(yè)生及留學(xué)回國人員129人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 人教版(2024新版)七年級(jí)上冊(cè)英語Unit 5單元測(cè)試卷(含答案)
- (完整版)新概念英語第一冊(cè)單詞表(打印版)
- 美食行業(yè)外賣平臺(tái)配送效率提升方案
- 中國民用航空局信息中心招聘筆試題庫2024
- 芯片設(shè)計(jì)基礎(chǔ)知識(shí)題庫100道及答案(完整版)
評(píng)論
0/150
提交評(píng)論