2023年程序設計基礎實驗報告新編_第1頁
2023年程序設計基礎實驗報告新編_第2頁
2023年程序設計基礎實驗報告新編_第3頁
2023年程序設計基礎實驗報告新編_第4頁
2023年程序設計基礎實驗報告新編_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《程序設計基礎課程設計》實驗報告

班級:1403021

姓名:宋之鑫

學號:

所選題目:,1_2,2」,3_1,3_2,3_3,3_4,4-1,5_1,5_2

第1_1題

算法描述:一方面定義兩個二維字符數組,兩個維數分別代表行數和文本中每行的字符的個

數,用for循環(huán)和fgets函數把兩個文本中的數據一行一行地復制到數組中,完畢后用for

循環(huán)和strcmp函數比較兩個數組中的不同的行,碰到不同行輸出不同行,若沒有不相等的

行則輸出:這兩個文本文獻相同!完畢

源程序:

no1_1.c

#inc1ude<stdio,h>

#include<string.h>

#include<stdlib.h>

intmain()

(

°inti;

charaL6][80]M6J[80];//用于存儲文獻中的字符串

FILE*fpl;

oFILE*fp2;

。if((fpl=fopen("1.txt","r"))==NULL)〃打開文獻

printf("can*topenfile!\nn);

gexit(0);

)

oif((fp2=fopen(u2.txt\"rM))==NULL)///打開文獻

(

sprintf("can'topenfile!\nu);

o<>exit(0);

for(i=0;i<6;i++)//把文獻中的數據錄入到字符串數組中

°(

?fgets(b[i],81,fp2);

8fgets(a[i],81,fp1);

)

?for(i=0;i<6;i++)

if(strcmp(a[i],b[i])!=0)break;〃比較此行數據是否相同

?if(i==6)printf("這兩個文獻相同!\n");

else

(

。printf("不同行是第%d行\(zhòng)nl.txt的第%d行是%s\nb.txt的第%d行是%

s\n",i+1,i+l,a[i],i+l,b[i]);

)

)

測試數據(輸入、輸出):兩個不同的文本文獻l.txt和2.txt

1-記事本2-記事本

文件(F)—(E)格式?_查看(V)幫助(H)文件(F)=(E)格式(O)查看CV)幫助(H)

ldelsdfldelsdf

lde22de2gdg

lde3del2de3sdfs

lde42de4sdfasdf

lde55552de5sadfdg

lde66662de6sdfs

C:\Users床之密\Desktop'編程、輸出第一個不同的行、輸出第一個不同行.exe-

不同行是第2行

Ltxt的第2行是ide2

2小€的第2行是2<1629<19

Processexitedafter0.02069secondswithreturnvalue0

(請按任意鍵繼續(xù).???

第1_2題

算法描述:

有三個文獻,前兩個里面有一串數字,把前面兩個文獻中的數字格式化輸入到一個整型數組

中,寫一個冒泡排序函數把這個整型數組從大到小排序,最后平用fprint輸入到第三個

文獻中,完畢

源程序:

no1_2.c

#inc1ude<stdio.h>

#inc1ude<stdlib.h>

#include<string.h>

intpaixu(int*arr,intjishu)〃冒泡排序,把數組中的數組排序

(

inti=O,j=0,tmp;

for(i=0;i<jishu;i++)//冒泡排序,從大到小

(

for(j=i+1;j<jishu;j++)

{

if(arr[i]>arr[j])

(

tmp=arr[i];

arr[i]=arr[j];

arr[j]=tmp;

)

}

)

return0;

)

intmain()

(

inta[300]={0};//初始化

intjishu=0;〃初始化

inti=0;

FILE*fpl=fopen(n");

FILE*fp2=fopen(M2.txtn,nr”);

FILE*fp3=fopen("3.txt“,“w+");

if(fpl==NULL||fp2==NULL)//判斷打開是否成功

(

printf("文獻打開失敗\n");

return0;

}

whi1e(!feof(fpl))

(

fscanf(fp1,"%d",&a[jishu++]);//把文獻1中各數字輸入到數組中

)

fclose(fp1);

whi1e(!feof(fp2))//把文獻二中各數字輸入到數組中

(

fscanf(fp2,"%d",&a[jishu++]);

)

fclose(fp2);

paixu(a,jishu);

for(i=0;i<jishu;i++)

(

fprintf(fp3,"%d\",a[i]);//把排完序的數字輸入到文獻3中

)

fclose(fp3);

Printf("操作成功

return0;

測試數據(輸入、輸出):

輸入:

輸出:

第2-1題

算法描述:有一個帶有注釋的c源程序,一方面把它按行錄入到二維數組中,有兩種情況//

型和/**/型,第一〃分兩種情況,解決方法,找到//所在數組行,把這行〃削去,//之后賦值為

\0,/**/情況,找出/*所在行一直削去,直到碰到*/,把解決后的數組重新放入c源程序中,

(放之前c的打開方式是wb+:為了把之前的數據刪除)完畢

源程序:

No2_1.c

//I.將合法C源程序每行前加上行號并刪除其所有注釋。

#include<stdio.h>

#include<string.h>

intmain()

(

printf("這是一個將c源程序每行加行號且刪除其所有注釋的程序”);

?inti=0,j,k;

charduqu[100][1000],ch;〃用這個來儲存c程序,這個程序不大于100行,且每

行不大于1000個字符

FILE*fp=fopen(nl.cpp%”r+”);

oif(fp==NULL)

°(

printf("打開文獻失敗\n”);

6oreturn0;

)

owhile(!feof(fp))

°(

fgets(duqu[i],100O,fp);

-i++;//讀取的行數

)

ofor(k=i—1;k>=O;k—)〃把注釋消掉

^for(j=O;j<1000;j++)

00|

。屈f(duqu[k][j]=='/'&&duqu[kj[j—1]!=,*'&&(duquLkJ[j+l]'I|duq

u[k]lj+l]=='*'))〃這是/*情況和〃情況

。(

。?if(k!=0&&j!=0)duqu[k][j]='\n';//防止下面的第一行是注釋,消除完

后,第一行變空

。elseduqu[k][j]='\0

??duqu[k][j+l]=,\0';

eIseif(duqu[k]Lj]==7,&&duqu[k]=duqu[k][0]='\0//

*/的這種情況

°)

fclose(fp);//把本來的c內容刪掉

?fp=fopen("l.cpp","wb+");//同上

if(fp==NULL)

(

。printf("打開文獻失敗\n");

?return0;

°}

?for(j=0,k=l;j<i-1;j++,k++)//這個是加行號的(i-1是由于前面有個i++,

多加了一個1)

°(

if(strlen(duqu[j])==O)

。k-;//假如第一行為空,則跳過這次,并且不能使第一行行號變成2;所以要減去1

continue;

。fputs("/*”,fp);

oofprintf(fp,"%d”,k);

。fputs(H*/”,fp);

fputs(duqu[j],fp);。

)

fclose(fp);

”eturn0;

)

測試數據(輸入、輸出):

1:沒操作之前

[*]l.cpp

1//sdfsdfasdfsdfasdfsdf

2#include<stdio.h>

3intmain()

4

556654*/|

7|prirj中l(wèi)elloworldM)i//skLjdkf;asdf

8Lj//sdfaJujsfulifsadfasdfsdfasdfasdf

9//sdsafdsf

2:操作之后

第3」題

算法描述:

輸入的是一個字符串,一方面把這個字符串轉化為整型數組中的數,再根據二進制轉化為十進

制的方法求出,具體實現過程用for循環(huán)完畢,其中定義一個數學關于幾的幾次方的函數方便

計算

源程序:

No3_l.c

#include<stdio.h>

#include<math.h>

#inc1ude<string.h>

intpow(inta,intb)〃次數函數

(

ointsum=l;

for(b;b>O;b--)sum*=a;

aretumsum;

)

intmain()

(

intaLlOO];charb[10];

叩rintf(“這是一個將一個二進制的字符串轉化十進制的數的程序\n請輸入二進制字符

串:\n");

gets(b);

intn=strlen(b);

ointi,j,k,m,sum=0;

ofor(i=0;i<n;i++)a[i]=b[i]-48;//把字符串傳化為數

for(i=n-l,j=O;i>=0;i-,j++)//把二進制的數轉化為十進制的數

?sum+=pow(2,j)*a[i];

°)

?Printf("轉化的結果為:%d",sum);

)

測試數據(輸入、輸出):

A

第3_2題

算法描述:

一方面定義一個復數的結構體,內部分別為復數的實部和虛部,有三個分支,分別為三種運算,

加減乘,根據運算法則,做出c中的運算規(guī)則,假如輸入錯誤則從新輸入,最后輸出結果

源程序:

No3_2.c

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

intmain()

(

intm,n,p,q;

structfushu

?inti;//實部

?intj;//虛部

?}a,b,c;//c是昨晚運算的結構體

charstart='y';//標志,,,當start==n時退出

for(;l;)

(

printf("請分別輸入兩個復數的實部,虛部(用空格間隔)\n");

??printf("請輸入第一個復數:\n");

。scanf("%d%d",&a.i,&a.j);〃第一個復數

??fflush(stdin);〃釋放數據

oprintf("請輸入第二個復數:\n");

。scanf("%d%d",&b.i,&b.j);

?fflush(stdin);

xing:printf("你希望這兩個復數做什么運算?\n求和運算請輸入1.\n求差運

算請輸入2.\n求乘積運算請輸入3.W");

?scanf("%d",&m);//選擇運算方式

?ff1ush(stdin);

o?if(m==1)//求和

(

c.i=a.i+b.i;

°?c.j=a.j+b.j;

“elseif(m==2)//求差

00I

。c.i=a.i-b?i;

6c.j=a.j-b.j;

°}

?elseif(m==3)〃求積

0{

owc.i=a.i*b.i-a.j*b.j;

。。c.j=a.i*b.j+a.j*b.i;

00}

?else{printf("輸入錯誤,請重新輸入\n");gotoxing;}//假如輸入錯誤的話則重新

輸入數據

。叩rintf("運算結果是:%d+%di\n\n",c.i,c.j);

printf("你是否要繼續(xù)使用?(y/n)\n");

seanf("%c",&start);

?offlush(stdin);

if(start=='n,)exit(O);

}

)

測試數據(輸入、輸出):

1.加法運算,減法運算,乘法運算

c、C:\Dev-Cpp\ConsolePauser.exe-|n|x

請分別撞入兩丈復數的賣都,虛部。用錄圈情亍

請輸入第一個復數:

薔輸入第二個復數:

去茶望這兩個復數做什么運算?

莢和運算請摘入,■

求差運算請輸入2.

京乘積送算請輸入3-

運算結果是:4*3i

你是否要繼續(xù)使用?<“n>

毒翥契亶△率&羲數的實部,虛部(用空格間隔)

著鐮入第二個復數:

去篇望這兩個復數做什么運算?

泵乘積差算將輸入3.

2

運算結果是:-2+1:

你是否要繼續(xù)使用?<?n>

y

請會別通入兩個復數的實部,虛部(用空格間隔)

請輸入弟一個復數:

23

請輸入第二個復數:

源篇望這兩個復數做什么運算?

錄赴運算請輸入i-

求差運算請輸入2.

未乘積法算情輸入3.

運算結果是:-?*22i

你是否要繼續(xù)使用?<“n>

第3_3題

算法描述:

按本程序規(guī)定,一方面把十進制的數放到字符串中,為了要把十進制轉化為二進制必須把這

個字符串轉化到整型數組,所以定義一個轉化函數,再根據,十進制轉化為二進制的數學方

法,編出相應法則(本程序定義了,X乘以10的n次方的函數方便計算)完畢

源程序:

No3_3.c

#include<stdio.h>

#include<string.h>

intpow(inta,intb)〃計算a乘以10的b次方的值

(

ointsum=1;

for(b;b>0;b--)

°(

sum*=l0;

0)

eturna*sum;

)

intzhuanhua(intsum)//將十進制轉化為二進制

(

inty,c=1,b[100];〃y是余數

inti;

ofor(i=0,y=0;sum!=0;i++)

6{

gbEiJ=sum%2;

osum=(sum—bLi])/2;

y++;//計數

)

叩rintf("結果是:”);

ofor(i=0;i<y;i++)printf(H%dn,b[y-i-1]);//輸出二進制的數

)

intmain()

inta[100],i,j,k,sum=0;charb[100];

printf("這是一個將一個十進制數轉化為二進制的數的程序\n請輸入一個十進制的數:

\n");

gets(b);〃先把是十進制的數放到一個字符串數組里面

intn=strlen(b);//b是十進制數的位數

for(i=O;i<n;i++)

。a[iJ=b[iJ-48;//把十進制數放到整型數組里面

?for(i=0;i<n;i++)//計算大整數的值

°{

。。sum+=pow(a[i],n-1—i);

?//printf("sum=%d",sum);

zhuanhua(sum);

測試數據(輸入、輸出):

第3_4題

算法描述:先判斷輸入的數的位數(這是一個子程序),再寫一個子程序,按是判斷一個數是

否為鏈運算后是否為為一,假如為一,返回1給主函數,主函數中有一個變量記錄鏈運算為1

的數的個數PS:(按照題目給的鏈運算規(guī)則寫第一個子程序)完畢

源程序:

No3_4.c

#inc1ude<stdio.h>

#include<string,h>

intweishu(intn)〃判斷輸入的N的位數

(

?inti;

for(i=1;l;i++)

(

。n=n/10;

?if(n==0)returni;〃返回位數

。}

}

intxunhuan(intn)//判斷鏈運算后是否某為1

(

inta[IO0J,i,k;

?intj=weishu(n);

for(;n>=10;)//44->32->13->10->l

(

,for(i=0;i<j;i++)//把各個數字取出來,放到數組里

°{

00a[i]=n%10;

?n=(n-a[i])/10;

oo

?for(i=0;i<j;i++)〃鏈式計算

(

~?n+=a[i]*a[i];

°}

)

?if(n==l)return1,假如符合規(guī)則返回1

。。。e1sereturn0;//假如不符合規(guī)則返回0

)

intmain()

(

intn,m=0,a[100];

。printf("這個是計算N、以內(涉及N)數據鏈末尾數字是1的數據個數的程序\n請輸入

N:\n");

scanf("%d",&n);

?for(n;n>0;n—)

(

if(xunhuan(n)==1)m++;//記錄數據用的

。}

?printf("結果是:%d",m);

測試數據(輸入、輸出):

鋌:Etirf?算爭吉軍是否知.exe

果X2

第4_1題

算法描述:

Ktv點歌系統(tǒng)重要的是把主體框架搭建起來,這里實現多種功能要用到switch語句,各

種case連接著一個有功能的子程序,每個功能結束返回主菜單,歌曲信息的讀取還需要結構

體的定義,歌曲的信息(歌曲名,歌手,風格)放到一個文本文獻中,歌曲的刪除添加需要加一

個密碼功能,結構體有一個標記變量,這個變量用于刪除歌曲時把刪除的歌曲做標記

源程序:

No4_1.c

#include<stdio.h>

#include<stdlib.h>

#inc1ude<string.h>

#defineSIZE1000〃最多有1000首歌曲

structmusicdate//定義歌曲信息的結構體變量

(

?charname[15];

ocharsinger[15];

charsty1eL10];

°intflag=l;〃用于刪除時標記的

}music[SIZE];

voidmimaServe1()//這是密碼服務1,啟動密碼服務的

(

FILE*fp=fopen(,,mima,txtn,"ab+n);

oif(fp==NULL)

(

oprintf(ncon7topenthisfi1e!");

。exit(0);

)

ocharmima[6]={n\0n};〃給密碼初始化

fgets(mima,7,fp);〃把密碼讀到mima數組中

//if(strlen(mima)==O)printf("您還沒有設立密碼\n");

//叩rintf("**%s**”,mima);

°if(strlen(mima)!=0)//假如啟動就不用再啟動,直接結束就okay

00|

oprintf("密碼服務已啟動,無需再次啟動\n\n");

。。。「eturn;

。else

°(

srestar:

。printf(”請輸入密碼,按回車鍵結束(密碼共六位,可以是字母或數字)”),密碼由六位

字符組成

agets(mima);

if(str1en(mima)!=6)//假如不是六位則密碼是設立錯誤

printf("\n格式錯誤,請重新輸入!(密碼共六位,可以是字母或數字)\n

\n");

wogotorestar;

)

gff1ush(stdin);

3叩rintf('*\n請再次出入密碼)

。。charcheck[6]={“\0"};//防止第一次密碼出入錯誤,第二次驗證

gets(check);

gif(strcmp(check,mima)==O)fputs(mima,fp);

。delse

00|

8。printf(M\n\n兩次輸入的不一致,請重新設立密碼\n\n");

。egotorestar;

ob|

0

oprintf(n\n\n密碼設立成功!\n\nn);

fc1ose(fp);

)

)

voidmimaServe2()//密碼服務的2,用于關閉密碼服務

(

FILE*fp=fopen(nmima.txtn,"ab+u);

ooif(fp==NULL)

°(

printf(ncon'topenthisfile!");

eexit(O);

?charmima[6]={"\0"};

。fgets(mima,7,fp);

/Aif(strlen(mima)==O)printf("您還沒有設立密碼\rT);

//printf(M**%s**”,mima);

^if(strlen(mima)==0)//假如之前沒有啟動密碼服務,則沒有必要關閉

00{

。printf("密碼服務已關閉,請勿重新關閉\n\n)

。return;

“if(strlen(mima)!=0)〃需要輸入原密碼才干關閉!

(

charformerMima[6];

o?ofor(inti=0;i<3;i++)

0o{

°叩rintf("請輸入原密碼:");

。gets(formerMima);

0°if(strcmp(formerMima,mima)==O)//假如原密碼與輸入密碼相同,則關閉

001

gprintf("\n密碼關閉成功!\n\n”);

^fclose(fp);

。ofp=fopen("mima.txt"Jwb+");〃打開文獻時初始化

ggfc1ose(fp);

?6return;

00}

mprintf("輸入錯誤請重新輸入!\n\n");

-printf(“您已出入錯誤三次;再見!“)"/假如密碼輸入錯誤超過三次,則結束程序

exit(0);

)

)

voidmimaServe3()//密碼服務第三種功能,修改密碼

(

?FILE*fp=fopen("mima.txt“ab+”);

if(fp==NULL)

(

gprintf("con'topenthisfile!");

oexit(O);

)

。charmima[6]={n\0"};

?fgets(mima,7,fp);

/Aif(strien(mima)==0)printf("您還沒有設立密碼W”);

〃叩rintf("**%sa);

if(strlen(mima)==0)〃之前已經錄入密碼

06{

printf(”未啟動密碼服務!請啟動!\n");

^return;

0)

。for(inti=0;i<3;i++)〃假如跳出去則密碼輸入錯誤超過三次

00{

叩rintf("\n請輸入本來的密碼:");

◎charformerMima[6];

gets(formerMima);

ff1ush(stdin);

o?if(strcmp(formerMiinajnima)==0)//假如輸入對的則整個if都在改密碼

(

。printf("\n輸入對的!\nn);

“restarl:

sprintf("\n請輸入新密碼:");

charnewl[6];

。gets(newl);

3if(strlen(new1)!=6)//判斷新密碼位數

(

-printf("\n格式錯誤,請重新輸入!(密碼共六位,可以是字母或數字)\n\n");

。。gotorestar1;

)

fflush(stdin);

川printf("\n請再次輸入新密碼:");

。charcheck[6];

gets(check);

8“f(strcmp(check,new1)!=0)

°(

eprintf("\n前后輸入不一致,請重新輸入:\n");

。gotorestarl;

)

1se〃進行錄入

fclose(fp);

fp=fopen("miwb+");

oif(fp==NULL)

°{

。oprintf(ncon*topenthisfi1e!");

a。exit(0);

00b|

??fputs(new1,fp);//錄入

。。8fclose(fp);

。。printf("\n密碼修改成功!'n\n\n");

。。。return;

?)

。}

printf("\n密碼輸入錯入,請重新輸入\n");

00}

printf("\n密碼輸入錯誤三次!再見!");

fc1ose(fp);

exit(0);

)

//添加和刪除管理員模式

/*刪除歌曲或添加歌曲是,只能由管理員進行操作,這個是添加密碼服務,只有管理員知道

密碼*/

intguan1i()

(

?FILE*fp=fopen("mima.txt","ab+");

?if(fp==NULL)

°(

oprintf(ncon*topenthisfile!u);

xit(0);

0)

charmima[6],mima1[6];

fgets(mima,7,fp);

if(strlen(mima)==O)return1;

Printf("此項功能只允許管理員使用,請輸入管理員密碼:”);//m沒有放到最前

面是由于,假如沒有設立密碼則不需要輸入密碼

for(inti=0;i<3;i++)

°(

Mgets(mimal);

fflush(stdin);

oif(strcmp(mimal,mima)==O)

00{

的printf(”\n輸入對的,請繼續(xù)操作。\nn);

sfc1ose(fp);

gbreturn1;

00}

??elseprintf("輸入錯誤,請重新輸入!\n此項功能只允許管理員使用,請輸入管理員密

碼:");

}

printf(“您已輸入三次錯誤!再見!");

ofclose(fp);

aexit(O);。

)

/*在點歌時,假如用戶輸入歌曲,系統(tǒng)就要檢查這首歌是否存于music.txt文獻中,假如不

存在則系統(tǒng)沒有該歌曲。所以就不可以點歌,之后返回主菜單*/

intjiancha(charname[15J)//點歌時檢查是否存在該歌曲,假如存在則返回1;

并且輸出歌曲信息

(

。FILE*fp=fopen("music.txt","ab+");

if(fp==NULL)

°{

8Printf("con'topenthisfile.");

?exit(0);

)

。inti,j;

for(i=O;!feof(fp);i++)

gfread(&music[i],sizeof(structmusicdate),l,fp);把歌曲信息讀取到結構體數

組中

?for(j=0;j<i;j++)

if(strcmp(music[j].name,name)==0)//和dete相同,假如有則輸出

了歌曲信息

。{

。。printf("歌手:%s風格:%s\n",music|j].singer,music[j].sty1e);

。。return1;//有該歌曲返回1,假如沒有則引用該函數的函數輸出,不存在該歌曲請?zhí)砑?/p>

)

?return0;

fclose(fp);

)

/*本子函數功能是添加歌曲,并把歌曲信息填入到music.txt文獻中,核心是用fwrite函數*/

voidadd()

(

FILE*fp=(fopen("music.txtM,"ab+u));

if(fp==NULL)

?printfC'con*topenthisfi1e.");

?exit(0);

)

printf("請輸入要添加歌曲的數量:\n");〃添加多個歌曲

°inti,j;

oscanf("%d”,&i);

afor(j=0;j<i;j++)

。Printf(”請輸入第%d首歌曲信息(格式:歌曲名稱歌手流派)\n”,j+l);

?scanf("%s%s%s",music[j].name,music[j].singer,music[j].style);

fflush(stdin);

oif((fwrite(&music[j],sizeof(struetmusicdate),l,fp))!=1)printf("錄入失敗

\n");〃假如錄入成功就等于1

oe1se

6(

。osystem("clsn);

。printf(”錄入成功\n\n\n");

0)

。}fclose(fp);

/*本子程序是刪除歌曲功能(把歌曲信息從music.txt中刪除),刪除后該歌曲歌詞就不能

再被打開,這里用到的一個flag,該標志定義在結構體中,flag初始是1;假如刪除歌曲與

歌曲信息相同則flag變成0;有了這個標志,可以選擇的把歌曲信息重新錄入music.txt

文獻中*/

voiddete()

(

FILE*fp=fopen(umusic.txt',,,,ab+");//錄出,再選擇錄進,flag是刪除標志

if(fp==NULL)

°(

printf(ucon'topenthisfile.");

exit(O);

}

inti,j;

charname[15];

ofor(i=0;!feof(fp);i++)

。fread(&music[i],sizeof(structmusicdate),l,fp);〃讀出歌曲信息

/Afor(i=i—2;i>=0;i—)printf("name:%ssinger:%sstyle:%s\n”,music[i].n

ame,music[i].singer,music[i].sty1e);

叩rinif(”請輸入要刪除的歌曲名稱:\n");

ogets(name);

?inta=jiancha(name);〃檢查歌曲是否存在

if(a==0)

(

?system(ncisH);

-printf("不存在該歌曲,操作失敗!\n\n\n");

??return;

。}〃檢查是否存在此歌曲

for(j=0;j<i;j++)

dif(strcmp(music[j].name,name)==0)music[j].flag=0;

才c1ose(fp);

ofp=fopen(umusic.txt"wb");//把本來的歌曲信息從music.txt中刪除

oif(fp==NULL)

。(

。printf("con'topenthisfile.n);

。exit(0);

0)

ofor(j=O;j<i—1;j++)

。if(music[j].f1ag!=0)fwrite(&music|j],sizeof(structmusicdate),1,fp);〃

選擇性重新錄入歌曲信息

system(uc1s");

oPrintf("刪除成功\n”);

fclose(fp);

0

)

/*這個子函數功能是點歌,(只有在music.txt里面存了該歌曲才可以打開該歌詞,否則就

算歌詞存在也沒有用),輸入歌曲名字,假如music.txt中有與之相相應的歌曲名則打開該

歌曲歌詞*/

voidchoose1(){

sprintf("請輸入要點的歌曲名稱:\n");

charname[l5];//用于儲存用戶輸入的歌曲名稱

?chargeei[50][50];//儲存讀取歌詞

inti,j;

gets(name);

inta=jiancha(name);//檢查該歌曲是否存在,假如存在則函數返回1

aif(a==O)

°(

“printf("不存在該歌曲,請?zhí)砑?\n\n\n");

return;

?}〃檢擦是否純在該歌曲,若存在輸出歌曲信息,若不存在printf("該歌曲不存在,請?zhí)?/p>

加\n");結束該分支

strcat(name,".txt");//該操作是把歌曲名末尾加上.txr這是為了之后打開

歌曲文獻用

FILE*fp=fopen(name,打開歌曲文獻

if(fp==NULL)

(

。printf("不存在這首歌的歌詞,請?zhí)砑樱n");

。//printf("con'toPenthisfiIe.");

。exit(0);

。}

。//歌詞不存在時打不開

ofor(i=0;!feof(fp);i++)//輸出歌詞

°(

。fgets(geci[i],50,fp);

printf("%s\n",geci[i]);

)

fclose(fp);

/*本子函數功能是按歌手點歌,輸入歌手名字,輸出該歌手所有歌曲,然后函數跳到choosel

函數,進行點歌,具體功能實現與之前函數基本相同*/

voidchoose2()〃同理,copydete中的讀取,判斷情況//這是按歌手來點歌〃輸入歌手,輸出

歌手所有的歌曲,然后跳到choose1;進行點歌

(

0charsinger[15];

叩rintf("請輸入歌手的名字:");

gets(singer);

?FILE*fp=fopen("music.txt","ab+");

//if(fp==NULL)printf("con'topenthisfile.");

。if(fp==NULL)

°{

叩rintf("con'topenthisfile.");

。exit(O);

)

ointi,j,k=O;//k用來記是否有該歌手歌曲

for(i=0;!feof(fp);i++)//讀取歌曲信息

fread(&music[i],sizeof(structmusicdate),l,fp);

?for(j=Oy<i;j++)

f(strcmp(music[jJ.singer,singer)==0)

00|

oprintf("歌曲:%s\n",musicljJ.name);

k++;//用于標記是否有歌曲

00

)

if(k==O)printf("沒有該歌手的歌曲;\n)

1sechoosel();

ofc1ose(fp);

)

/*本子函數功能和瀏覽所有歌曲,實現方法與choose2如出一轍,所以就不具體介紹了

(輸出系統(tǒng)中所有的歌曲)*/

voidscan()

(

oFILE火fp=fopen(nmusic.txtK,"ab+u);

//if(fp==NULL)printf('*con*topenthisfile.”);

“f(fp==NULL)

(

。printf(nconopenthisfile.");

exit(0);

intij;

printf("歌曲名稱歌手風

格\n");

ofor(i=0;!feof(fp);i++)

read(&music[i],sizeof(structmusicdate),1,fp);

for(i=i—2;i>=0;i-)//輸出歌手信息

。printf(H%10s%1Os%10s\n”,music[il,nam

e,music[i].singer,music[i].style);

afclose(fp);

/*用于退出系統(tǒng)*/

voidout()

printff擬定退出系統(tǒng)?(y/n)");

ochara;

scanf(n%cn,&a);

f(a==/y')

{

it(0);

)

)

/*主體框架*/

intmain()

(

FILE*fp;

。/*fp=(fopen("music.txt","ab+M));

if(fp==NULL)printf("con'topenthisfile.");*/

or:

printf("歡迎進入ktv點歌系統(tǒng)\n");

Printff1:點歌\n”);

oprintf(H2:瀏覽所有歌曲\n”);

oprintf("3:添加歌曲3”);

-printfC4:刪除歌曲\0“);

printf(M5:管理員密碼服務\n");

printf("6:退出系統(tǒng)如”);

printf(M請選擇功能\n”);

“nti;

scanf(n%dn,&i);

ff1ush(stdin);

switch(i)

°{

case1:system("cis”);

。printf("l:按歌曲名字點歌'n2:按歌手點歌\n");

。intway;//選擇點歌方式

scanf(H%d';&way);

。。任1ush(stdin);

if(way==l)choosel();

QeIsechoose2();

ogotor;

gbreak;

。case2:system(,,clsn);

■scan();//瀏覽所有歌曲

ogotor;

。。break;

ase3://system("cis*');

6if(guanli()==1)add();//添加歌曲

。。gotor;

。。break;

case4://system("cIs");

。if(guanli()==1)dete();〃刪除歌曲

gotor;

^break;

case5:system("c1s");

3restar:

-printf(”請輸入要選擇密碼服務項目:\n");

-printf(n\n1:啟動密碼;\n”);

。printf(M2:關閉密碼;\n");

。。printf(u3:修改密碼;\n)

ointserve;

?scanf("%d”,&serve);

。offlush(stdin);

“◎if(serve!=1&&serve!=2&&serve!=3)

00{

intf("輸入錯誤請重新輸入!\n”);

gotorestar;

00}

。if(serve==l)mimaServe1();〃啟動管理員模式

6if(serve==2)mimaServe2();〃關閉管理員模式

。if(serve==3)mimaServe3();//修改管理員密碼

gotor;

。break;

acase6:system(“cis");

。oout();//退出系統(tǒng)

gotor;

?break;

。。default:system("c1sn);

printf("輸入錯誤!請重新輸入:\n");

。gotor;

。break;。。

)

測試數據(輸入、輸出):

1:文獻中具體情況(涉及歌曲信息,歌詞,密碼)

?這臺電腦?文檔(E:)?編程>ktv點數系統(tǒng)

名稱修改日期類型‘大小

ktv點2015/5/223:47C++SourceFile

mima2015/5/310:57文本文楮

music2015/5/223:48文本文檔

2015/4/290:02

2015/4/290Q5文本文檔

2015/4/290:05文本如

一味道2015/4/290:05百如

,,eatstyle2015/4/290:04文本文檔

2:瀏覽所有歌曲功能

0E:\編程\ktv點領ktv點統(tǒng).exe□

tU歌統(tǒng)

■1IE

麗普

2歌

3歌

4歌

統(tǒng)

51053月艮

6^匕

半>

.E:\編程\ktv點歌系統(tǒng)\ktv點歌系統(tǒng).exe

3:添加歌曲功能(輸入31泡沫鄧紫棋pop)

E:\編程\ktv點歌系統(tǒng)\ktv點歌系統(tǒng).exe□

1舌

歌曲

宿

2樹

3添

4歌

統(tǒng)

5053月

息1

出^

6^

青輸入要添加歌曲的數量:

春黔震髀黔息(格式:歌曲名稱歌手流派,

此時瀏覽所有歌曲,發(fā)現比

溫馨提示

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

評論

0/150

提交評論