歌曲信息管理系統(tǒng)-C語言_第1頁
歌曲信息管理系統(tǒng)-C語言_第2頁
歌曲信息管理系統(tǒng)-C語言_第3頁
歌曲信息管理系統(tǒng)-C語言_第4頁
歌曲信息管理系統(tǒng)-C語言_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

歌曲信息管理系統(tǒng)——C語言歌曲信息管理系統(tǒng)——C語言歌曲信息管理系統(tǒng)——C語言V:1.0精細整理,僅供參考歌曲信息管理系統(tǒng)——C語言日期:20xx年X月歌曲信息管理系統(tǒng)[要求]制作一個歌曲信息管理系統(tǒng)功能:歌曲信息包括歌曲名,作者,演唱者,發(fā)行年月等??梢詫Ω枨畔⑦M行輸入,刪除,瀏覽??梢圆樵兏鶕枨?,作者,演唱者歌曲信息??梢蕴峁┌醋髡叻纸M顯示功能。用文件存儲信息。我的設計思路根據題目要求,由于歌曲信息數據以文本文件的方式存放,所以應提供文件的輸入、輸出等操作;在程序中需要瀏覽歌曲的信息,應提供顯示、查詢等操作,按照一般的思路,我采用的是按照歌曲名進行查找的方式。并且要提供可以按作者進行分組的方法。整體設計思路是首先以一個主函數為主,將各個功能諸如瀏覽,刪除等分別設計成函數,通過主函數的調用從而實現(xiàn)其功能。由于程序中經常要用到一些函數,諸如加載函數,顯示函數等,如果重復輸入,會嚴重增加工作量,所以可以將這些函數作為公共函數編寫出來,以被隨時調用。分析一下整個系統(tǒng),根據上面的需求分析,可以將系統(tǒng)設計分為以下六大模塊。退出瀏覽刪除輸入歌曲信息管理 退出瀏覽刪除輸入歌曲信息管理查找分組查找分組 詳細設計#include<>#include<>#include<>#include<>#defineN100上面這些是整個程序要用到的文件包含命令和宏定義structsong{charname[20];charcreater[20];charsinger[20];chardate[6];}so[N];將下面所要編寫的函數分別聲明出來voidshu_ru();voidshan_chu();voidliu_lan();voidcha_zhao();voidfz(inti,intn);voidfen_zu();voidfname();voidprintf_one(inti);voidinput(inti);voidsave(intn);voidprintf_back();intload();voidprintf_face();intshan_chue_data(intj,intn);首先是設計主函數,設計主函數一般應該做到簡潔,主函數主要是提供函數調用等方面的功能,各功能函數以菜單的形式在主函數中列出來,通過主函數的調用從而實現(xiàn)各功能函數的功能。其用流程圖可表示為:根據n的值調用各功能模塊函數輸入n,判斷n是否是1-6顯示一系列功能選項 N Y Y 根據n的值調用各功能模塊函數輸入n,判斷n是否是1-6顯示一系列功能選項 菜單界面voidmenu(){intk,w1;do{printf("\t\t******************目錄**********************\n\n");printf("1.輸入\n");printf("2.刪除\n");printf("3.瀏覽\n");printf("4.查找\n");printf(“5.分組\n”)printf("6.退出\n");對選擇的數字作判斷printf("\n\n\t請選擇(1-6):");scanf("%d",&k);if(k<1||k>6){w1=1;getchar();}elsew1=0;根據選擇調用功能函數}while(w1==1); switch(k) {case1:shu_ru();break; case2:shan_chu();break; case3:liu_lan();break; case4:cha_zhao();break; case5:fen_zu();break;case6exit(0); }}主函數voidmain(){ menu();}設計輸入功能函數模塊數據信息存放在文件中,為方便管理,一條記錄對應一個歌曲,自然的我們可以想到用結構體數組的形式存放多首歌曲信息。structsong{charname[20];/*歌曲名*/charcreater[20];/*作者*/charsinger[20];/*演唱者*/chardate[6];/*發(fā)行年月*/}so[N];該結構體中包含了歌曲所需的各項信息,so[N]中的N為歌曲數目,程序中采用宏定義方式,可以隨時對N進行修該。輸入模塊的設計思想是根據所要輸入的歌曲數目,循環(huán)調用輸入函數,然后調用保存函數。voidshu_ru(){ inti,n; printf("要輸入幾首歌:",N-1); scanf("%d",&n); printf("\n開始輸入\n\n"); for(i=0;i<n;i++) { printf("\n輸入第%d首歌.\n",i+1); input(i); } if(i!=0)save(n); printf_back();}設計刪除函數模塊其思想是在顯示所有歌曲信息后,這時用到加載函數等,用戶輸入要刪除的歌曲的歌名,根據歌名查找記錄并予以刪除。其中,刪除的數據是從文件中刪除,刪除數據后面的記錄即歌曲信息往前移。其流程圖可表示為:是否找到此歌曲記錄輸入要刪除的歌曲名顯示所有歌曲記錄,看用戶需要刪除哪個 是否找到此歌曲記錄輸入要刪除的歌曲名顯示所有歌曲記錄,看用戶需要刪除哪個 YN 顯示找到的記錄,調用刪除函數顯示沒有找到顯示找到的記錄,調用刪除函數顯示沒有找到Y詢問是否繼續(xù)刪除詢問是否繼續(xù)刪除返回主菜單返回主菜單Nvoidshan_chu(){ structsongs; inti,n,k,w0=1,w1,w2=0; n=load(); do { k=-1; printf_face(); for(i=0;i<n;i++) { if((i!=0)&&i%10==0) {printf("\n\n,按任意鍵鍵繼續(xù)");getchar();printf("\n\n"); } printf_one(i); }do { printf("\n\n請輸入你要刪除的歌的歌名!Name:");scanf("%s",&;for(i=0;i<n;i++) { if(strcmp,so[i].name)==0) { k=i; s=so[i]; break; } } if(k==-1){printf("\n\nNOexit!Areyouagain\n\n\t1).again2).noandback!");scanf("%d",&n);if(n==1)shan_chu();elsemenu(); }} while(k==-1); printf_face(); printf_one(k); w1=shan_chue_data(i,n); if(w1==1) {printf("\n成功.\n\nAreyouagain\n\n\t1).again2).noandback!"); scanf("%d",&w0); w2=1; } else { w0=0; if(w2==1)so[k]=s; } } while(w0==1); menu();}設計瀏覽函數模塊所謂瀏覽,其思想就是顯示所有的歌曲信息,因為有時歌曲信息較多,這時可以通過設計一個循環(huán),將歌曲信息以十個一屏的形式顯示出來,這其中仍需調用加載函數及一些顯示函數,最后按任意鍵返回主菜單。voidliu_lan(){ inti,n; n=load(); printf_face(); for(i=0;i<n;i++) { if((i!=0)&&(i%10==0)) { printf("\n\n按任意鍵繼續(xù)\n"); getchar(); printf("\n\n"); } printf_one(i); } printf("\tThereare%drecord.\n",n); printf("\nPassanykeytoback\n"); getchar(); menu();}設計查找函數模塊該模塊設計主要是通過歌曲名來進行查找,如果文件中存在所要查找的歌曲,則顯示出該歌曲的所有信息,包括歌曲名,作者,演唱者及日期。查找結束后提示用戶是繼續(xù)查找還是返回主菜單。其流程圖可表示為:提示沒有找到是否找到該歌曲記錄輸入歌曲名提示沒有找到是否找到該歌曲記錄輸入歌曲名詢問是否繼續(xù)查找顯示找到的記錄 是 否詢問是否繼續(xù)查找顯示找到的記錄 是返回主菜單 否返回主菜單voidcha_zhao(){ intc,m=0; printf("\n\n通過何種方式查找=>\n\n1).name2).back\n"); printf("Whichyouneed:"); do { scanf("%d",&c); if(c>2||c<1) { printf("\nChoiceerror!Pleaseagain!");m=1; } }while(m!=0);switch(c) { case1:fname();break; } printf_back();}下面是根據歌曲名茶找函數,其思想是首先輸入歌曲名,然后調用加載函數,通過strcmp函數找出該歌曲信息,如果存在則顯示出歌曲信息,如果不存在則顯示NotFound,并提示用戶是繼續(xù)查找還是返回主菜單。voidfname()/*根據歌曲名查找*/{ inti,n;intk=-1; charname[20]; printf("\n\nname:"); scanf("%s",&name); n=load(); for(i=0;i<n;i++) if(strcmp(so[i].name,name)==0){k=i;printf_one(k);}if(k==-1){printf("\nNotFound\n"); printf("\n\nAreyouagain\n\t1).again2).noandback[]\b\b");scanf("%d",&n);if(n==1)fname();elsemenu();}}設計按作者分組功能該模塊的功能是將所有歌曲信息按照作者名一樣的進行分組,然后從新顯示所有分組后的歌曲信息。其操作過程是加載歌曲作者名稱,將所有歌曲作者進行比較,一致的放在一起,然后顯示分組后的所有歌曲信息。voidfz(inti,intn){ intj; structsongs; for(j=i+1;j<n;j++) { if(strcmp(so[i].creater,so[j].creater)==0) { if(j==i+1) { i++; fz(i,n); } else { s=so[i+1]; so[i+1]=so[j]; so[j]=s; } } else { if(j==n-1) { i++; fz(i,n); } } } save(n);}voidfen_zu()ame,so[i].creater,so[i].singer,so[i].date); }輸入一個完整記錄函數該函數的作用是分別提示用戶來輸入一首歌的各個信息,包括歌曲名,作者,演唱者,日期。用到的是scanfprintf函數。voidinput(inti){printf("\nname:");scanf("%s",so[i].name);printf("\ncreater:");scanf("%s",so[i].creater);printf("\nsinger:");scanf("%s",so[i].singer);printf("\ndate:");scanf("%s",so[i].date);}保存函數該函數是首先打開文件,如果沒有就新建一個,以只寫的方式,通過循環(huán)向文件中寫入歌曲信息。voidsave(intn){ FILE*fp; inti; if((fp=fopen("","w"))==NULL) { printf("\nCannotopenfile\n"); exit(1); } for(i=0;i<n;i++) { fprintf(fp,"%s%s%s%s\n",so[i].name,so[i].creater,so[i].singer,so[i].date); } fclose(fp);}返回上一級函數該函數就是向用戶提示一個成功并調用menu()函數返回主菜單。voidprintf_back(){ voidmenu(); printf("\n\n\t成功\n\n");

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論