版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄
一、需求分析....................................
二、概要設(shè)計(jì)....................................
三、詳細(xì)設(shè)計(jì)....................................
四、調(diào)試分析.....................................................6
五、顧客手冊(cè).....................................................6
六、測(cè)試數(shù)據(jù).....................................................6
”七、附錄.........................................................8
一、需求分析
1.程序以菜單日勺方式工作,具有圖書的添加、刪除、修改、查詢、記錄操作,
數(shù)據(jù)存儲(chǔ)采用文獻(xiàn)形式。
2.定義構(gòu)造體數(shù)組structlibrarybookinf[30],用以存儲(chǔ)ISBN、書名、作者名、圖書
類別、出版單位、出版時(shí)間、價(jià)錢、數(shù)量信息。運(yùn)用文獻(xiàn)開辟并將信息保留在
"bookinf.txt”中。
3.顧客從鍵盤輸入需要的操作,其中“ISBN、書名、作者名、圖書類別、出扳單
位”需使用字符輸入,“出版時(shí)間、價(jià)格、數(shù)量”采用數(shù)字輸入。
4.測(cè)試數(shù)據(jù):
(1)查找:若找到了所要查找的書本,則打印出書本信息;若沒有找到,則打
印“沒有找到您要找的書本”
(2)刪除:若找到了所要查找的書本,按下y確認(rèn)刪除后,打印出“該書已刪
除”:若沒有找到要?jiǎng)h除的書本,則打印“沒有找到該書,退出操作”
(3)修改:若找到了要修改的書本,打印“請(qǐng)輸入你要修改口勺信息”并開始修
改;若沒有找到要修改口勺書本,則打印“沒有找到要修改的書本”
5.程序執(zhí)行命令為:
(1)創(chuàng)立"bookinf.txt”文獻(xiàn)
(2)將圖書信息用添力口操作加進(jìn)“bookinf.txt”文獻(xiàn)中
(3)顧客選擇所需操作
(4)搜索成果
二、概要設(shè)計(jì)
1.定義構(gòu)造體數(shù)組structlibrarybookinf[50]o
bookinfti].ISBN//ISBN
bookinfti].name〃書名
bookinf[i].author//作者名
bookinfti].vari//圖書類別
bookinfti].pubplace〃出版單位
bookinfti].pubtime〃出版時(shí)間
bookinfti].price〃價(jià)格
bookinf[i].num//數(shù)量
/*用如下程序開辟存儲(chǔ)文獻(xiàn)“bookinf.txt〃*/
FILE*fp;
if((fp=fopen(,'bookinf.txt","r+"))==NULL)
printf("無(wú)法打開文獻(xiàn)!\n");
return;
}
2.程序構(gòu)造
add()
通過此函數(shù)將輸入的書本信息添加存儲(chǔ)進(jìn)〃bookinf.txt〃文獻(xiàn)中,用于下一次H勺查
詢或刪、改、統(tǒng)操作的調(diào)用。
del。
通過此函數(shù)完畢對(duì)〃bookinf.txt〃文獻(xiàn)中巾本信息日勺刪除,“printf(〃確定要?jiǎng)h除該書
嗎?(y/n)\n〃);”鍵盤輸入y/n確定書本信息的刪除,刪除后將不再有該書記錄
modifyO
通過此函數(shù)完畢對(duì)書本信息的修改,修改內(nèi)容包括:ISBN、書名、作者名、圖書
類別、出版單位、出版時(shí)間、價(jià)格、數(shù)量。
search()
此函數(shù)為查詢?本信息操作,可查詢〃bookinf.txt〃文獻(xiàn)中存儲(chǔ)的書本信息。
count()
此操作為記錄操作,用于記錄“bookinf.txt”文獻(xiàn)中存儲(chǔ)書本的總數(shù)量及金額數(shù)。
main()
通過對(duì)上述函數(shù)的調(diào)用,將所得信息打印出來(lái)
3.主程序流程
|主函數(shù)
三、詳細(xì)設(shè)計(jì)
1.圖竹館管理的I數(shù)據(jù)類型
structlibrary!
charISBN[20];//ISBN
charname[30];〃書名
charauthor[30];;/作者名
charvari[10];〃圖書類別
charpubplace[50];,出版單位
intpubtimc;〃出版時(shí)間
intprice;〃價(jià)格
intnum;〃數(shù)量
);
//----------基本操作的算法描述
1.文獻(xiàn)部分
FILE*fp;
if((fp=fopen("bookinf.txr,"r+"))==NULL)〃檢查打開時(shí)操作與否出錯(cuò)
{
printf("無(wú)法打開文獻(xiàn)!\n”);〃若出錯(cuò)貝!打印該行文字
return;
}
2.查詢操作部分
printf("\n請(qǐng)輸入您要查或『、J竹名\n");
scanf("%s",bookname);〃輸入想查詢『、J名
while(!feof(fp))〃循環(huán)直到文獻(xiàn)尾部,函數(shù)值為真
fread(&bookint,sizeof(structlibrary),Ltp);“從fp中讀入1個(gè)長(zhǎng)度為
sizeof(structlibrary的數(shù)據(jù),存到bookinf[]中
if(strcmp(,bookname)=0)//比較輸入的I書名和文獻(xiàn)中保留『口書
名,若相似
{printf("ISBN書名作者名圖書類別出版單位出版時(shí)間價(jià)格
數(shù)量\n");
printf("%s%s%s%s%s%d%d%d
\n'\bookinf.ISBN,bookinf.nanie,bookinf.author,
bookinf.vari,bookinf.pubplace,bookinf.pubtime,bookinf.pnce,bookinf.num);//若相
似,則打印出書本臥J信息
i=l;break;}
}
if(i!=l)〃若沒有找到該書
{printfC沒有找到您要找的書本\n");}
3.刪除部分
strcpy(bookinf[flag].ISBN,bookinf[flag+1].ISBN);〃將后一本書『、JISBN復(fù)制給前一本
書淤JISBN
strcpy(bookinf[flag].name,bookinRflag+l].name);//將后一本書口勺書名復(fù)制給前
一本書口勺書名
strcpy(bookinf[flagl.author.bookinf[flag+l].author);〃將后一本書的I作者名復(fù)制給
前一本書的作者名
strcpy(bookinf[flag].vari,bookinf[flag+l].vari);//將后一本書的1圖書種類復(fù)制給
前一本書的圖書類別
strcpy(bookinf[flag].pubplace,bookinf[flag+1].pubplace);〃將后一本廿的J出版單位
復(fù)制給前一本書的出版單位
bookinf[flag].pubtime=bookinf[flag+1].pubtime;"將后一本|號(hào)的IH1版時(shí)間復(fù)制給
前一本書的出版時(shí)間
bookinf[flag].price二bookinf[flag+l].price;//將后一本仿口勺價(jià)格復(fù)制給前一本|5
的價(jià)格
bookinf[flag].num=bookinf[flag+1].num;//將后一本書ffj數(shù)量復(fù)制給前一本書
的數(shù)量
4.修改部分
if(strcmp(bookinf[i].ISBN,nbook)==0)〃假如輸入了'J書本nbook與文獻(xiàn)中存儲(chǔ)的JISBN相
似,則開始修改
5.記錄部分
inttn,total=0,alprice=0;//初始化總數(shù)和總價(jià)格aI值為0
for(i=0;i<=tn;i++){
total=total+bookinf[i].num;〃運(yùn)用遞歸,新的總數(shù)和為上一次的總數(shù)值加上
這一次口勺值
alprice=alprice+(bookinf[i].nuin)*(bookinf[i].price);//運(yùn)用遞歸,新的I總價(jià)錢和為上
一次的總價(jià)錢值加上這一次口勺價(jià)錢
printf(”圖書總冊(cè)書為%d總金額數(shù)為%d\n】otal,alprice);//打印出圖書總冊(cè)書和
總金額數(shù)
6.菜單部分
printfC*歡迎登錄圖書管系統(tǒng)\n”);
printf("*1.添加圖書2.刪除圖書*\n");
printfC*3.修改圖書4.查詢圖書*\n");
printf("*5.記錄圖書。退出系統(tǒng)*\n");
printf(''米格米本亭本木本長(zhǎng)格格字本本本木本木亭本亭本木本木木木木木木格米本亭方亭
7.選擇部分
switch(b){
casel:add();break;〃選擇1時(shí),執(zhí)行添加操作
case2:del():break;〃詵擇2時(shí),執(zhí)行刪除操作
case3:modify(i;break;〃選擇3時(shí),執(zhí)行修改操作
case4:search():break;〃選擇4時(shí),執(zhí)行查詢操作
case5:count();break;//選擇5時(shí),執(zhí)行記錄操作
caseO:flag=l;break;〃選擇0時(shí),執(zhí)行退出操作
default:printf("您輸入的選擇錯(cuò)誤!\n");//否則,打印輸入錯(cuò)誤
四.調(diào)試部分
1.開始寫程序時(shí),沒有運(yùn)用文獻(xiàn)保留函數(shù),導(dǎo)致輸入日勺書本信息不能被查看
2.程序刪除函數(shù)部分產(chǎn)生左值方面的錯(cuò)誤,后運(yùn)用strcmp()處理
3.程序刪除函數(shù)部分,開始不管找到還是沒找到要?jiǎng)h除歐I書本,都會(huì)打印循環(huán)
外的1〃該書已刪除!〃,后運(yùn)用i=n,處理了這個(gè)問題。
五.顧客手冊(cè)
1.本程序執(zhí)行文獻(xiàn)為"bookinf.txt”.
2.進(jìn)入菜單部分,會(huì)出現(xiàn)一下選擇菜單
1.添加圖書2.刪除圖書
3.修改圖書4.查詢圖書
5.記錄圖書0.退出系統(tǒng)
并提醒〃請(qǐng)輸入你日勺選擇!〃,顧客僅需選擇0~5運(yùn)行該程序
3.添加、修改圖書部分,其中ISBN、name、author>vari>pubplace>需輸入
字符(即字母或數(shù)字),pubtime>price、num需輸入數(shù)字。
4.添加、修改圖書部分,輸入的信息不可超標(biāo),需遵照ISBN為20字節(jié),name、
author為30字節(jié),vari為10字節(jié),pubplace為50字節(jié)。
六、測(cè)試部分
歡迎登錄圖書管系統(tǒng)
************************************
*I.添加圖書2.刪除圖書*
*3.修改圖書4.查詢圖書*
*5.記錄圖書0.退出系統(tǒng)*
************************************
請(qǐng)輸入你H勺選擇!
請(qǐng)輸入需要添加的書本書以及您要添加的書本數(shù)信息
1
1SBN:1
書名:1
1
圖書類別:1
出版單位:1
出版時(shí)間:1
價(jià)錢:1
數(shù)量:1
歡迎登錄圖書管系統(tǒng)
************************************
*1.添加圖書2.刪除圖書*
*3.修改圖書4.查詢圖書*
*3.記錄圖書0.退出系統(tǒng)*
請(qǐng)輸入你日勺選擇!
請(qǐng)輸入您要修改的書號(hào)
2
沒有找到要修改的書本
歡迎登錄圖書管系統(tǒng)
*1.添加圖書2.刪除圖書*
*3.修改圖書4.查詢圖書*
*5.記錄圖書0.退出系統(tǒng)*
請(qǐng)輸入你H勺選擇!
3
請(qǐng)輸入您要修改的書號(hào)
1
ISBN:2
書名:2
2
圖書類別:2
出版單位:2
出版時(shí)間:2
價(jià)錢:2
數(shù)量:2
修改成功!
歡迎登錄圖書管系統(tǒng)
*1.添加圖書2.刪除圖書*
*3.修改圖書4.查詢圖書*
*5.記錄圖書0.退出系統(tǒng)*
請(qǐng)輸入您的選擇!
4
請(qǐng)輸入您要查找的書名
2
ISBN書名作者名圖書類別出版單位出版時(shí)間價(jià)格數(shù)量
22222222
歡迎登錄國(guó)書管系統(tǒng)
**木木木水木木***木****水*木***木*木木木木*求*木****
*1.添加圖書2.刪除圖書*
*3.修改圖書4.查詢圖書*
*5.記錄圖書0.退出系統(tǒng)*
************************************
請(qǐng)輸入您的選擇!
2
請(qǐng)輸入您要?jiǎng)h除的書本名
22222
確定要?jiǎng)h除該書嗎?(y/n)
y
該書已刪除!
歡迎登錄圖書管系統(tǒng)
*1.添加圖書2.刪除圖書*
*3.修改圖書4.查詢圖書*
*5.記錄圖書0.退出系統(tǒng)*
請(qǐng)輸入您的選擇!
0
pressanykeytocontinue!
七、附錄
#include"stdio.h"
#include"string.h"
#include"slruct.h"
#include"conio.h"
structlibrarybookinf[30];
intn;
structlibrary{
charISBN[20J;
charnamc[30J;
charauthor[30];
charvari[10];
charpubplacc[50J;
intpubtimc;
intprice;
intnum;
};〃構(gòu)造體部分
voidmain。{〃主函數(shù)部分
intb.f!ag=O:
while⑴{〃菜單部分
printf("歡迎登錄圖書管系統(tǒng)\n");
printf(”********裂************咨************今*\[1");
printf("*L添加圖書2.刪除圖書*\n");
printf("*3.修改圖書4.查詢圖書*\n)
printf("*5.記錄圖書0.退出系統(tǒng)*\n");
printf(''********w*************************3*\rT'),
printf("請(qǐng)輸入你的選擇!\n");
scanfC'%d",&h);
switch(b){
casel:add();break;〃選擇1,執(zhí)行添加操作
case2:del();break;〃選擇2,執(zhí)行刪除操作
case3:modify(j;break;//選擇3,執(zhí)行修改操作
case4:search():break;〃選擇4,執(zhí)行查詢操作
case5:count();break;〃選擇5,執(zhí)行記錄操作
caseO:flag=1:break;//選擇0,退出程序操作
default:printf("您輸入的選擇錯(cuò)誤!\n");//否則,打印該句
|
voidadd(){/*添加函數(shù)*/
inti;
charx;
printf(”\n請(qǐng)輸入需要添加的書本書以及您要添加的書本數(shù)信息\n”);
scanf(”%d”,&n);〃輸入要添加口勺書本數(shù)
for(i=0;i<n;i++){〃用循環(huán)添加書本信息
printf("ISBN:");
scanf("%s",bookinf[i]ISBN);
printf("書名:”);
scanf("%s'\bookinf[i].name);
printf("");
scanf("%s",bookinf[i].author);
printf("圖書類別:");
scanf("%sH,bookinf[i].vari);
printf("出版單位:");
scanf("%s”,bookinf[i].pubplacc);
printf("出版時(shí)間:");
scanf("%d",&bookinf{i].pubtimc);
printf("價(jià)錢:”);
scanf("%d",&bookinf[i].price);
printf(“數(shù)量:"):
scanf("%dM,&bookinf[i].num);
)
x=getch();〃按任意鍵返回菜單
save();/*調(diào)用保留函數(shù)5f7
)
voiddel(){//刪除函數(shù)
inti=O,flag,t=O,tn=O;//tn為保留文獻(xiàn)內(nèi)日勺書本數(shù)
chara,booknamc|20|;
FILE*fp;
if((fp=fbpen(”bookinf.txt",T))=NULL)〃假如無(wú)法打開文獻(xiàn)
{
printf("無(wú)法打開文獻(xiàn)!\n");
return;
}
printf("\n請(qǐng)輸入您要?jiǎng)h除『'J書本名\n");
scanf("%s”,bookname);
rewind(fp);
while(!feof(fp))/*沒有垢?束時(shí)進(jìn)行循環(huán)*/
{fread(&bookinntn],sizeof(struc(library),l,fp);tn++;
}
fclose(fp);
for(i=0;i<tn;i++)
{if(slrcmp(bookinf[i].name,bookname)==0)〃假如輸入口勺書名與文獻(xiàn)內(nèi)保留I付書名
相似
printf("%s%s%s%s%s%d%d%d\n”,buokinfH].ISBN,bookinf[i].name,booki
nflij.author,bookint]i].vari,bookinf[i].pubplace,bookinf[i].pubtiine,bookinfli].price,bookinf[i],num
);
gctch();
flag=i;t=l;
printf("確定要?jiǎng)h除該書嗎?(y/n)\n");
scanf("%s",&a);
if(a=='y')
{
for(flag;flag<tn;flag++)
{strcpy(bookinf[flag].ISBN,bookinf[flag+1].ISBN);〃將后一,本竹
『、JISBN復(fù)制給前一本書的ISBN
strcpy(bookinf[flag].name.bookinf[flag+1].name)://^fS一本書書
名復(fù)制給前一本書『、J書名
strcpy(bookinffflag].author,bookinfffiag+1].author);〃將后一本書
的作者名復(fù)制給前一本書的作者名
strcpy(bookinf[flag].vari,bookinf[flag+l].vari);//將后一本書『'J
圖書類別復(fù)制給前一本書的圖書類別
strcpy(bookinf[flag].pubplace,bookinf[flag+l].pubplace);//將后
一本書口勺出版單位復(fù)制給前一本書的出版單位
boukinffflag].publime=bookinf[flag+1l.pubtime:〃將fri一本書出
版時(shí)間復(fù)制給前一本書日勺出版時(shí)間
bookinf[flag].price=bookinf[flag+l].price;//將后一本書的I價(jià)格
復(fù)制給前一本書的價(jià)格
bookinf[flag].num=bookinf[flag+l].num://將后一本|5『'J數(shù)量
復(fù)制給前一本書的數(shù)量
tn--;〃刪除后書/、J數(shù)量減一
)
printf("\n該竹已刪除!\n");break;
}
}
getch();
}
if(t!=l)〃假如沒有找到要?jiǎng)h除的書
(
printf('沒有找到該書,退出操作\n”);
)
save();
)
voidsearch。{〃查詢函數(shù)
inti=0;
FILE*fp;〃文獻(xiàn)打開
structlibrarybookinf;
charbookname[20];
if((fp=fopen("bookinf.txt","r"))==NULL)
|
printf("無(wú)法打開文獻(xiàn)!\n");
return;
)
printf("\n請(qǐng)輸入您要查找歐)竹名\n");
scant(',%s,\bookname);
while(!feof(fp))〃循環(huán)直到文獻(xiàn)尾部,函數(shù)值為真
{fread(&bookinf,sizeof(structlibrary),1,fp);//從fp中讀入1個(gè)長(zhǎng)度為sizeof(struct
library)『、J數(shù)據(jù),存到bookinfl]中
if(strcmp(,bookname)=0)/*比較輸入的書名和文獻(xiàn)中保留Kl書
名*/
{printfC'ISBN書名作者名圖書類別出版單位出版時(shí)間價(jià)格
數(shù)量\n”);
printf("%s%s%s%s%s%d%d%d
\n,'.bookinf.ISBN,,bookinf.author,
bookinf.vari,bookinf.pubplace,bookinf.pubtime,bookinf.pnce,bookinf.nuni);
i=1;break;)
if(i!=l)〃假如沒有找到要查詢的竹
{printf("沒有找到您要找的書本\n");}
printf("\n按任意鍵返回菜單\n");
getch();
}
voidmodify。{〃修改函數(shù)
inti=O,n=O;
charnbook[20];
FILE*fp;〃文獻(xiàn)打開
charbookname[20];
printf("\n請(qǐng)輸入您要修改的書號(hào)\n"
scanf("%s",nbook);
if((fp=fopen("bookinf.lxt","r+,,))==NULL)
{
prinlf(“無(wú)法打開文獻(xiàn)!\n");
return;
whilc(!fcof(fp))/*沒有結(jié)束時(shí)進(jìn)行循環(huán)*/
{fread(&bookinf[n],sizeof(stiuctlibrary),1,fp);n++;
)
for(i=0;i<n;i++)
{
if(strcmp(bookinf[i].ISBN,nbook)==0)〃假如輸入口勺nbook與文獻(xiàn)內(nèi)保留RjISBN
相似
(
printf("請(qǐng)輸入你要修改於J信息\n”);
printf("ISBN:"):
scanf("%s",bookinf[i].ISBN);
printf(“書名:”);
scanf("%s".bookinf[i].name):
printf("");
scanf("%s".bookinf[i].author)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 主體結(jié)構(gòu)施工技術(shù)方案
- 2025年河南交通職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)附答案解析
- 2024年錫林郭勒職業(yè)學(xué)院馬克思主義基本原理概論期末考試題帶答案解析
- 2025年鉛山縣幼兒園教師招教考試備考題庫(kù)及答案解析(奪冠)
- 2025年華坪縣幼兒園教師招教考試備考題庫(kù)帶答案解析(奪冠)
- 2025年紅河縣招教考試備考題庫(kù)附答案解析(奪冠)
- 2025年云南交通職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬題及答案解析(必刷)
- 2025年唐縣幼兒園教師招教考試備考題庫(kù)附答案解析(奪冠)
- 2025年煙臺(tái)衛(wèi)生健康職業(yè)學(xué)院馬克思主義基本原理概論期末考試模擬題含答案解析(必刷)
- 2025年海南開放大學(xué)馬克思主義基本原理概論期末考試模擬題帶答案解析(必刷)
- DB4403-T 377-2023 民宿消防安全管理規(guī)范
- 危險(xiǎn)化學(xué)品運(yùn)輸安全手冊(cè)
- GB/T 46146-2025家具五金件鉸鏈及其部件的強(qiáng)度和耐久性繞垂直軸轉(zhuǎn)動(dòng)的鉸鏈
- 粵教花城版音樂 鋼琴獨(dú)奏《雪橇》聽評(píng)課記錄
- 管樁供貨保障方案(3篇)
- 抽水蓄能電站項(xiàng)目建議書(參考范文)
- 名著導(dǎo)讀傅雷家書
- DB36∕T 2027-2024 普通高等學(xué)校營(yíng)養(yǎng)健康食堂建設(shè)規(guī)范
- 新一代大學(xué)英語(yǔ)(第二版)綜合教程1(智慧版) 課件 B1U1 iProduce
- GB/T 15849-2025密封放射源的泄漏檢驗(yàn)方法
- 醫(yī)院建設(shè)中的成本控制措施
評(píng)論
0/150
提交評(píng)論