C語(yǔ)言圖書館管理系統(tǒng)設(shè)計(jì)_第1頁(yè)
C語(yǔ)言圖書館管理系統(tǒng)設(shè)計(jì)_第2頁(yè)
C語(yǔ)言圖書館管理系統(tǒng)設(shè)計(jì)_第3頁(yè)
C語(yǔ)言圖書館管理系統(tǒng)設(shè)計(jì)_第4頁(yè)
C語(yǔ)言圖書館管理系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論