《C 課程設(shè)計(jì)圖書管理系統(tǒng)-(完整版)》_第1頁
《C 課程設(shè)計(jì)圖書管理系統(tǒng)-(完整版)》_第2頁
《C 課程設(shè)計(jì)圖書管理系統(tǒng)-(完整版)》_第3頁
《C 課程設(shè)計(jì)圖書管理系統(tǒng)-(完整版)》_第4頁
《C 課程設(shè)計(jì)圖書管理系統(tǒng)-(完整版)》_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

評(píng)論

0/150

提交評(píng)論