版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
題目三:圖書管理系統(tǒng)設(shè)計(jì)
(一)、課程設(shè)計(jì)題目:
圖書管理系統(tǒng)設(shè)計(jì)
(二)、要求:
使用二進(jìn)制文件方式存儲(chǔ)數(shù)據(jù),系統(tǒng)以菜單方式工作
(三)、設(shè)計(jì)方法和基本原理:
1、功能描述:
(1)新進(jìn)圖書基本信息的輸入。
(2)圖書基本信息的查詢。
(3)對(duì)撤消圖書信息的刪除。
(4)為借書人辦理注冊(cè)。
(5)辦理借書手續(xù)。
(6)辦理還書手續(xù)。
2、問題的解決方案:
根據(jù)系統(tǒng)功能要求,可以將問題解決分為以下步驟:
(1)應(yīng)用系統(tǒng)分析,建立該系統(tǒng)的功能模塊框圖以及界面的組織和設(shè)計(jì);
(2)分析系統(tǒng)中的各個(gè)實(shí)體及它們之間的關(guān)系包括屬性和行為;
(3)根據(jù)問題描述,設(shè)計(jì)系統(tǒng)的類層次;
(4)完成類層次中各個(gè)類的描述(包括屬性和方法);
(5)完成類中各個(gè)成員函數(shù)的定義;
(6)完成系統(tǒng)的應(yīng)用模塊;
(7)功能調(diào)試;
(8)完成系統(tǒng)總結(jié)報(bào)告以及系統(tǒng)使用說明書
一、設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求
1.課程設(shè)計(jì)目的:
從課程設(shè)計(jì)的實(shí)踐活動(dòng)中獲得知識(shí)提高。要求學(xué)生達(dá)到熟練掌握C++語言的基本知
識(shí)和技能;基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的思想和方法;能夠利用所學(xué)的基本知識(shí)和技
能,解決簡(jiǎn)單的面向?qū)ο蟪绦蛟O(shè)計(jì)問題,從而提高動(dòng)手編程解決實(shí)際問題的能力。
2.總體設(shè)計(jì)
2.1系統(tǒng)功能分析:
系統(tǒng)通過調(diào)用函數(shù)來實(shí)現(xiàn)刪除圖書、讀者信息,添加圖書、讀者信息等功能。
delbook()函數(shù)用于刪除圖書信息;addbook()函數(shù)用于增加圖書信息;borrowbook()函
數(shù)用于實(shí)現(xiàn)借書操作;returnbook()函數(shù)用于實(shí)現(xiàn)還書操作等等;主函數(shù)用于掉用這些
函數(shù)。
2.2系統(tǒng)功能模塊劃分與設(shè)計(jì)
本系統(tǒng)定義了Book類、BDatebase類、Reader類、RDatebase類這四個(gè)類,定義了
addbook()、addreader()、borrowbook()、setname()等函數(shù)來實(shí)現(xiàn)系統(tǒng)所需功能。
2.3系統(tǒng)功能模塊圖:
圖書管理系統(tǒng)
四個(gè)類程序?qū)崿F(xiàn)功能
圖圖讀讀文輸查刪退
書書者者件出詢除出
類庫類庫錄顯信信程
類類入示息息序
3.3.詳細(xì)設(shè)計(jì)
3.1讀者類的設(shè)計(jì)
該類定義了借書操作,還書操作,設(shè)置讀者姓名等功能。
Reader
+name[20]:char
+no:int
+tag:int
+borbook:int
+getname():char
+gettag():int
+getno():int
+setname(charna[]):void
+delbook():void
+addreader(intn,char*na):void
+borrowbook(intbookid):void
+retbook(intbookid):int
+disp():void
圖3.1
3.2讀者庫類類的設(shè)計(jì)
該類實(shí)現(xiàn)了建立讀者的個(gè)人資料,刪除讀者信息,輸出讀者信息等功能。
RDatebase
+top:int
+rname[20]:char
+readerid:int
+readerdata():void
+choice:char
+addreader(intn,char*na):int
+clear():void
+disp():void
圖3.2
3.3圖書類的設(shè)計(jì)
圖書類,可以實(shí)現(xiàn)對(duì)圖書的描述,圖書的編號(hào),書名,借出,還入等操作。
Book
+no:int
+name[20]:char
+onshelf:int
+getname():char
+getno():int
+gettag():int
+setname(charna[]):void
+delbook():void
+addbook():void
+borrowbook():int
+retbook():void
+disp():void
圖3.3
3.4圖書庫類的設(shè)計(jì)
Xingzhengrenyuan
+top:int
+clear():void
+addbook(intn,char*na):int
+bookdata():void
+bookdata():void
+disp():void
圖3.4
4.調(diào)試與測(cè)試:
4.1系統(tǒng)調(diào)試
在調(diào)試過程中,出現(xiàn)了一些錯(cuò)誤。
1、輸入數(shù)據(jù)時(shí),輸錯(cuò)了數(shù)據(jù)的類型會(huì)造成死循環(huán),因此輸入時(shí)需要注意。
2、一開始主界面輸入非正確數(shù)字時(shí),沒有提示錯(cuò)誤。容易造成用戶誤解
圖4.1
在主函數(shù)的switch語句結(jié)束處加上default:cout<<"輸入錯(cuò)誤,請(qǐng)從新輸入:";就可以
了,修改后:
圖4.2
具體調(diào)試過程。
主界面
圖4.3
圖書維護(hù)
圖4.4
讀者維護(hù)
圖
4.1
5.結(jié)果分析
本程序總共設(shè)計(jì)了四個(gè)類,滿足了課題對(duì)類的要求,在設(shè)計(jì)的過程中,建立了較
為清晰的類層次,也利用了面向?qū)ο蟮姆椒ㄒ约癈++的編程思想來完成系統(tǒng)的設(shè)計(jì),
做到了每個(gè)借閱者建立一個(gè)賬戶,賬戶中存儲(chǔ)借閱者的個(gè)人信息、借閱信息等要求。
而且界面美觀,容易操作。但是程序太長(zhǎng),不夠簡(jiǎn)練,導(dǎo)致出現(xiàn)錯(cuò)誤很難發(fā)現(xiàn)和修
改。
6.總結(jié)
感想和體會(huì):
通過這次的課程設(shè)計(jì),讓我們充分的感覺到了要自己設(shè)計(jì)一個(gè)程序是多么的難,
以及學(xué)習(xí)好c++是多么的重要。
在這個(gè)程序的設(shè)計(jì)過程中,我們清楚的意識(shí)到自己的水平有多么的薄弱,課程的
知識(shí)學(xué)得有多么的不扎實(shí)??淳W(wǎng)上的例子好像覺得也沒那么難,自己一上機(jī)實(shí)際操作
就出現(xiàn)了很多問題,調(diào)試的時(shí)候系統(tǒng)總是在報(bào)錯(cuò),還有很多警告,每增加一個(gè)函數(shù)就
要調(diào)試好久,有時(shí)候應(yīng)為少了一個(gè)大括號(hào)或是分號(hào),導(dǎo)致要找很久很久。雖然系統(tǒng)可
以運(yùn)行,也具有了一些基本的功能,但我們意識(shí)到了自己有太多的不足。
以后還會(huì)有很多的課程設(shè)計(jì),一定要吸取這次的教訓(xùn),把知識(shí)學(xué)懂學(xué)透學(xué)精,真
正的為我所用,這樣走上社會(huì)我們才能真正的發(fā)揮所長(zhǎng)。
我們?nèi)齻€(gè)人分工合作,組長(zhǎng)彭愛賢負(fù)責(zé)對(duì)程序的編譯,通過不斷的嘗試和學(xué)習(xí),
最終制成程序的最初模式!謝經(jīng)緯負(fù)責(zé)對(duì)程序的修改。沈維健負(fù)責(zé)后期制作,總結(jié)組內(nèi)
的制作經(jīng)驗(yàn)!通過努力,得以在規(guī)定的時(shí)間內(nèi)完成任務(wù)。
這一次的C++課程設(shè)計(jì)讓我們學(xué)到了很多知識(shí),懂得如何發(fā)現(xiàn)問題,并解決!
非常感謝老師及同學(xué)們的幫助,讓我們有這一個(gè)機(jī)會(huì)好好學(xué)習(xí)C++的更廣泛的知
識(shí)。
7、
7.1源程序清單:
#include<iostream>
#include<iomanip>//定義控制符
#include<string>//包含string的頭文件
#include<fstream>//用來支持對(duì)磁盤文件的輸入輸出
usingnamespacestd;
constintMaxr=100;
constintMaxb=100;
constintMaxbor=5;//以上三行聲明Maxr、Maxb、Maxbor為常數(shù)據(jù)成員
classReader//聲明類類型為讀者
{
private://聲明以下部分為私有的
inttag;//
intno;//定義編號(hào)為整型
charname[10];//定義長(zhǎng)度為10的名字?jǐn)?shù)組字符串
intborbook[Maxbor];//定義整型借書數(shù)組
public://聲明以下部分為公用的
Reader(){}//Reader類構(gòu)造函數(shù)
char*getname(){returnname;}//虛函數(shù),返回name
intgettag(){returntag;}//虛函數(shù),返回tag
intgetno(){returnno;}//虛函數(shù),返回No.
voidsetname(charna[])//設(shè)置讀者姓名函數(shù)
{
strcpy(name,na);//復(fù)制字符串
}
voiddelbook(){tag=1;}//刪去圖書信息
voidaddreader(intn,char*na)//增加讀者信息
{
tag=0;
no=n;
strcpy(name,na);
for(inti=0;i<Maxbor;i++)
borbook[i]=0;
}
voidborrowbook(intbookid)//定義借書函數(shù),且借圖書編號(hào)為整型
{
for(inti=0;i<Maxbor;i++)
{
if(borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
intretbook(intbookid)
{
for(inti=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return1;
}
}
return0;
}
voiddisp()//成員函數(shù),輸出基類數(shù)據(jù)成員
{
cout<<setw(5)<<no<<setw(10)<<name<<"借書編號(hào):[";/*設(shè)置編號(hào)字段寬度為5位,
設(shè)置名字字段寬度為10位*/
for(inti=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout<<borbook[i]<<"|";
cout<<"]"<<endl;
}
};
classRDatabase//定義RDatabase類
{
private:
inttop;
Readerread[Maxr];
public:
RDatabase()//構(gòu)造函數(shù)
{
Readers;
top=-1;
fstreamfile("reader.txt",ios::in);//在reader.txt以輸入方式打開文件
while(1)
{
file.read((char*)&s,sizeof(s));
if(!file)break;//如果非file,結(jié)束循環(huán)
top++;
read[top]=s;
}
file.close();
}
voidclear()
{
top=-1;
}
intaddreader(intn,char*na)
{
Reader*p=query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
return1;
}
return0;
}
Reader*query(intreaderid)//定義query指針,且讀者編號(hào)為整型
{
for(inti=0;i<=top;i++)
if(read[i].getno()==readerid&&
read[i].gettag()==0)
{
return&read[i];//指向read[i]
}
returnNULL;
}
voiddisp()
{
for(inti=0;i<=top;i++)
read[i].disp();
}
voidreaderdata();
~RDatabase()
{
fstreamfile("reader.txt",ios::out);//使用文件與reader.txt文件建立關(guān)聯(lián)
for(inti=0;i<=top;i++)
if(read[i].gettag()==0)
file.write((char*)&read[i],sizeof(read[i]));
file.close();
}
};
voidRDatabase::readerdata()
{
charchoice;
charrname[20];
intreaderid;
Reader*r;
while(choice!='0')
{
cout<<"\n\n\t\t\t讀者維護(hù)\n\n\n\t\t1新增\n\n\t\t2更改\n\n\t\t3刪除\n\n\t\t4查
找\n\n\t\t5顯示\n\n\t\t6全刪\n\n\t\t0退出"<<endl;//輸出子菜單
cin>>choice;
switch(choice)
{
case'1':
cout<<"輸入讀者學(xué)號(hào):";
cin>>readerid;//輸入讀者編號(hào)
cout<<"輸入讀者姓名:";
cin>>rname;//輸入讀者姓名
addreader(readerid,rname);
break;
case'2':
cout<<"輸入讀者學(xué)號(hào):";
cin>>readerid;//輸入讀者編號(hào)
r=query(readerid);
if(r==NULL)
{
cout<<"該讀者不存在"<<endl;
break;
}
cout<<"輸入新的姓名:";
cin>>rname;
r->setname(rname);
break;
case'3':
cout<<"輸入讀者學(xué)號(hào):";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"該讀者不存在"<<endl;
break;
}
r->delbook();
break;
case'4':
cout<<"讀入讀者學(xué)號(hào):";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"該讀者不存在"<<endl;
break;
}
r->disp();
break;
case'5':
disp();
break;
case'6':
clear();
break;
default:cout<<"輸入錯(cuò)誤,請(qǐng)重新輸入:";break;
}
}
}
classBook//定義Book類
{
private:
intprice;
charauthor[10];
inttag;
intno;
charname[20];
intonshelf;
public:
Book(){}
char*getname(){returnname;}
intgetno(){returnno;}
intgettag(){returntag;}
char*getauthor(){returnauthor;}
chargetprice(){returnprice;}
voidsetname(charna[])
{
strcpy(name,na);
}
voidsetauthor(charau[])
{
strcpy(author,au);}
voiddelbook(){tag=1;}
voidaddbook(intn,char*na,char*au,intpr)
{
tag=0;
no=n;
price=pr;
strcpy(author,au);
strcpy(name,na);
onshelf=1;
}
intborrowbook()
{
if(onshelf==1)
{
onshelf=0;
return1;
}
return0;
}
voidretbook()
{
onshelf=1;
}
voiddisp()
{
cout<<setw(6)<<"圖書編號(hào):"<<no<<setw(18)<<"圖書名:"<<name<<setw(10)<<"
作者名:"<<author<<setw(18)<<"圖書單價(jià):"<<price<<setw(10)
<<(onshelf==1?"在架":"已借")<<endl;
}
};
classBDatabase//定義BDatabase類
{
private:
inttop;
Bookbook[Maxb];
public:
BDatabase()
{
Bookb;
top=-1;
fstreamfile("book.txt",ios::in);
while(1)
{
file.read((char*)&b,sizeof(b));
if(!file)break;
top++;
book[top]=b;
}
file.close();
}
voidclear()
{
top=-1;
}
intaddbook(intn,char*na,char*au,intpr)
{
Book*p=query(n);
if(NULL==p)
{
top++;
book[top].addbook(n,na,au,pr);
return1;
}
return0;
}
Book*query(intbookid)
{
for(inti=0;i<=top;i++)
if(book[i].getno()==bookid&&book[i].gettag()==0)
{
return&book[i];
}
returnNULL;
}
voidbookdata();
voiddisp()
{
for(inti=0;i<=top;i++)
if(book[i].gettag()==0)
book[i].disp();
}
~BDatabase()
{
fstreamfile("book.txt",ios::out);//使文件流與book.txt文件建立關(guān)聯(lián)
for(inti=0;i<=top;i++)
if(book[i].gettag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
voidBDatabase::bookdata()
{
charchoice;
charbauthor[10];
intbprice;
charbname[40];
intbookid;
Book*b;
while(choice!='0')
{
cout<<"\n\n\n\t\t\t圖書維護(hù)"<<endl<<endl;
cout<<"\t\t1新增\n\t\t2更改\n\t\t3刪除\n\t\t4查找\n\t\t5顯示\n\t\t6全刪\n\t\t0
退出"<<endl;//輸出子菜單
cin>>choice;
switch(choice)
{
case'1':
cout<<"輸入圖書編號(hào):"<<endl;
cin>>bookid;
cout<<"輸入圖書書名:"<<endl;
cin>>bname;cout<<"輸入作者名:";
cin>>bauthor;
cout<<"輸入價(jià)格:";
cin>>bprice;
addbook(bookid,bname,bauthor,bprice);
break;//結(jié)束循環(huán)
case'2':
cout<<"輸入圖書編號(hào):"<<endl;
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在"<<endl;
break;
}
cout<<"輸入新的書名:"<<endl;
cin>>bname;
b->setname(bname);
break;
case'3':
cout<<"讀入圖書編號(hào):"<<endl;
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在"<<endl;
break;
}
b->delbook();
break;
case'4':
cout<<"讀入圖書編號(hào):"<<endl;
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在"<<endl;
break;
}
b->disp();
break;
case'5':
disp();
break;
case'6':
clear();
break;
default:cout<<"輸入錯(cuò)誤,請(qǐng)從新輸入:";
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 某著名企業(yè)五局鋼筋工程施工技術(shù)管理要點(diǎn)
- 《CBT 3517-2013船用真空輔冷凝器》專題研究報(bào)告:技術(shù)深度解讀與行業(yè)前瞻
- 道路安全培訓(xùn)的收獲課件
- 2026年魯教版四年級(jí)數(shù)學(xué)上冊(cè)期末試題解析+答案
- 2026年甘肅省慶陽市高職單招職業(yè)技能測(cè)試題庫及答案
- 道教觀堂禮儀培訓(xùn)課件
- 返礦人員安全教育培訓(xùn)課件
- 中考語文文言文對(duì)比閱讀(全國)17《得道多助失道寡助》對(duì)比閱讀(15組76題)(解析版)
- 特殊及非常規(guī)作業(yè)許可試題
- 車險(xiǎn)安全培訓(xùn)課件
- 《齊魯文化》期末筆記
- 非煤地下礦山機(jī)電知識(shí)
- 化工原理課程設(shè)計(jì)說明書-2778kg-h苯-甲苯篩板式精餾塔設(shè)計(jì)
- 97S501-1-井蓋及踏步圖集
- 設(shè)備清包工合同模板
- GB 30254-2024高壓三相籠型異步電動(dòng)機(jī)能效限定值及能效等級(jí)
- 鹽酸、硫酸產(chǎn)品包裝說明和使用說明書
- 汽車線束DFMEA設(shè)計(jì)失效模式和影響分析
- plc電梯設(shè)計(jì)的參考文獻(xiàn)
- 中偉西部基地液氨制氨水項(xiàng)目環(huán)評(píng)報(bào)告
- 地下室消防安全制度
評(píng)論
0/150
提交評(píng)論