圖書管理系統(tǒng)設(shè)計
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于圖書管理系統(tǒng)設(shè)計的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀企業(yè),服務(wù)客戶遍布全國,相關(guān)業(yè)務(wù)請撥打175-8598-2043,或微信:1454722008
本文目錄:
一、c語言課程設(shè)計 圖書管理系統(tǒng)
高級語言程序設(shè)計(2)課程設(shè)計
一 程序設(shè)計說明書
【設(shè)計題目】 圖書館借閱管理
【問題描述】圖書館,適合用C++面向?qū)ο蟮墓δ軄砻枋?。圖書館管理系統(tǒng)分為借書、還書、圖書管理和讀者服務(wù)等四個部分。設(shè)計一個讀者類Reader,記錄每個讀者基本信息;讀者庫類Rdatabase,記錄所有讀者信息;圖書類Book, 記錄每本書的基本信息;圖書庫類Bdatabase, 記錄所有圖書信息。
【基本要求】
1讀者庫類RDatabase中,其構(gòu)造函數(shù)中,將read.txt文件中所有讀入讀者記錄rede[]中。處理完畢,在析構(gòu)函數(shù)中將read[]中的所有未刪記錄寫入到read.txt中。
2圖書庫類BDatabase中,其構(gòu)造函數(shù)中,將book.txt文件中所有讀入圖書記錄book[]中。處理完畢,在析構(gòu)函數(shù)中將book[]中的所有未刪記錄寫入到book.txt中。
3 利用構(gòu)造函數(shù)完成讀者和圖書數(shù)據(jù)初始化,完成內(nèi)存分配。程序結(jié)束前,析構(gòu)函數(shù)完成所申請的堆內(nèi)存空間。
4 編寫主函數(shù),對所編寫的矩陣類進(jìn)行全面測試。要求用戶界面采用菜單方式。測試中需要讀者和圖書數(shù)據(jù)通過I/O流從磁盤文件讀入,同時顯示在屏幕上。得到的數(shù)據(jù)通過I/O流寫入磁盤文件保存,同時顯示在屏幕上。
5 源程序中要有充分的注釋,報告中要有詳細(xì)的流程圖和文字材料。
【類的設(shè)計】
該程序包含了四個類,如下:
1.Reader類,有讀者的基本管理功能,具有以下私有數(shù)據(jù):
int tag;//刪除標(biāo)記 1:已刪;0:未刪
int no;//讀者編號
char name[10];//讀者姓名
int borbook[Maxbor];//所借圖書
2.讀者庫類Rdatabase, 具有以下私有數(shù)據(jù):
int top;//讀者記錄指針
Reader read[Maxr];//讀者記錄
3.圖書庫類Book,有一本圖書的基本功能,有以下私有數(shù)據(jù):
int tag;//刪除標(biāo)記 1:已刪;0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否在架 1在架 0已借
4.圖書庫類BDatabase,有以下私有數(shù)據(jù):
int top;//圖書記錄指針
Book book[Maxb];//圖書記錄
【特殊函數(shù)的設(shè)計說明】
構(gòu)造函數(shù)
1.Reader類中構(gòu)造函數(shù)Reader(),初始化函數(shù);
2.讀者庫類RDatabase中,其構(gòu)造函數(shù)Rdatabase(),將read.txt文件中所有讀入讀者記錄rede[]中。
3.Book類中構(gòu)造函數(shù)Book(),初始化函數(shù);
4.圖書庫類BDatabase中,其構(gòu)造函數(shù)中,將book.txt文件中所有讀入圖書記錄book[]中。
拷貝構(gòu)造函數(shù)
Reader類中的拷貝構(gòu)造函數(shù)將getname()的返回值讀者姓名拷貝到setname()中,Book類中的拷貝構(gòu)造函數(shù)將getname()函數(shù)的返回值圖書名拷貝到圖書名設(shè)置函數(shù)setname()中。
析構(gòu)函數(shù)
1.讀者庫類RDatabase中,其析構(gòu)函數(shù)~Rdatabase(),將read[]中的所有未刪記錄寫入到read.txt中;
2.圖書庫類BDatabase中,其析構(gòu)函數(shù)~Bdatabase(),將book[]中的所有未刪記錄寫入到book.txt中。
運(yùn)算符重載
重載了“=”,當(dāng)比較讀者編號和圖書編號時,重載;重載位運(yùn)算符“〈〈”和“〉〉”等。
【主要函數(shù)算法流程圖】
【程序的使用方法】
1.進(jìn)入操作頁面,按提示操作;
2.首先,新增圖書和讀者信息,之后就可以對以存在的信息進(jìn)行操作;
3.操作當(dāng)中,可以隨時增加,更改和刪除圖書或讀者信息;
4.當(dāng)選擇退出時,進(jìn)行清屏。
二 程序上機(jī)調(diào)試報告
【語法錯誤及其排除】
1.在敲程序時,有很多拼寫錯誤,例好多處把Readdata()誤打Readdate();結(jié)束的分號,在不同的輸入法狀態(tài)下輸入,這些小錯誤剛開始很難發(fā)現(xiàn),不過有了經(jīng)驗,就很容易了。
2.創(chuàng)建新的構(gòu)造函數(shù)時,使用出現(xiàn)了錯誤。重載構(gòu)造函數(shù)要注意函數(shù)的訪問權(quán)限,結(jié)果就不會出現(xiàn)錯誤。
【算法錯誤及其排除】
1.讀者類中借書操作函數(shù)中,采用循環(huán)語句時判斷讀者已借圖書量時for(int i=0;i<Maxbor;i++)誤寫為for(int i=1;i<Maxbor;i++),使循環(huán)發(fā)生錯誤。
2.指針使用錯誤,指針b和r混淆,導(dǎo)致編譯錯誤得到“error C2660: 'retbook' : function does not take 1 parameters”錯誤報告。
三 程序測試結(jié)果
【收獲及體會】
除了課堂外,課程設(shè)計是最能學(xué)到東西的,最考驗人的。在做課程設(shè)計這段時間,時刻都感覺自己有好多不懂,要學(xué)的太多了!經(jīng)過這次課程設(shè)計,讓我對C++這門語言有了更深的認(rèn)識,操作能力有了提高。要想得到敲的代碼運(yùn)行出來后的滿足感,需要耐心細(xì)心,毅力以及充沛的體力。只有經(jīng)過多次編輯,多次編譯,再多次運(yùn)行,才能編寫出更好的程序,有時候需要多次的更正才達(dá)到所要的運(yùn)行結(jié)果。學(xué)習(xí)編程,需要多揣摩,實(shí)踐,實(shí)踐,再實(shí)踐,編程技能才能更上一層樓,此外還得多向高手請教!
【源程序代碼】
//********************
//圖書館借閱管理
//班級:
//學(xué)號:
//姓名:
//********************
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
const int Maxr=1000;//最多的讀者
const int Maxb=10000;//最多的圖書
const int Maxbor=8;//每位讀者最多借8本書
class Reader //讀者類
{
int tag;//刪除標(biāo)記 1已刪;0未刪
int no;//讀者編號
char name[10];//讀者姓名
int borbook[Maxbor];//所借圖書
public :
Reader(){}//構(gòu)造函數(shù)
char *getname(){return name;}//獲取讀者姓名
int gettag(){return tag;}//獲取刪除標(biāo)記
int getno(){return no;}//獲取讀者編號
void setname(char na[])//設(shè)置讀者姓名
{
strcpy(name,na);
}
void delbook(){tag=1;}//設(shè)置刪除標(biāo)記
void addreader(int n,char *na)//增加讀者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借書操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==0)
{
borbook[i]=bookid;
}
}
}
int retbook(int bookid)//還書操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//輸出讀者信息
{
cout<<setw(5)<<no<<setw(10)<<name<<"借書編號:";
for(int i=0;i,Maxbor;i++)
if(borbook[i]!=0)
cout<<borbook[i]<<endl;
}
};
class RDatabase//讀者庫類
{
int top;//讀者記錄指針
Reader read[Maxr];//讀者記錄
public:
RDatabase()//構(gòu)造函數(shù),將reader.txt讀到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);
while(1)
{
file.read((char*)&s,sizeof(s));
if(!file)break;
top++;
read[top]=s;
}
file.close();
}
void clear()//刪除所有讀者信息
{
top=-1;
}
int addreader(int n,char *na)//添加讀者,檢查是否已存在
{
Reader *p=query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader*query(int readerid)//按編號查找
{
for(int i=0;i<=top;i++)
if(read[i].getno()==readerid&&read[i].gettag==0)
return &read[i];
return NULL;
}
void disp()//刪除讀者所有信息
{
for(int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//讀者庫維護(hù)
~RDatabase()//析構(gòu)函數(shù),將read[]寫入reader.txt文件中
{
fstream file("reader.txt",ios::out);
for(int i=0;i<=top;i++)
if(read[i].gettag()==0)
file.write((char*)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
int choice=1;
char rname[20];
int readerid;
Reader*r;
while(choice!=0)
{
cout<<"讀者服務(wù) 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"請輸入讀者編號:";
cin>>readerid;
cout<<"讀入讀者姓名:";
cin>>rname;
addreader(readerid,rname);
break;
case 2:
cout<<"請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"讀者不存在"<<endl;
break;
}
cout<<"請輸入新讀者姓名:";
cin>>rname;
r->setname(rname);
break;
case 3:
cout<<"請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"讀者不存在"<<endl;
break;
}
r->delbook();
break;
case 4:
cout<<"請輸入讀者編號:";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"該讀者編號不存在"<<endl;
break;
}
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
class Book//圖書類
{
int tag;//刪除標(biāo)記 1:已刪;0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否在架 1在架 0已借
public:
Book(){}
char*getname(){return name;}//獲取讀者姓名
int getno(){return no;}//獲取圖書編號
int gettag(){return tag;}//獲取刪除標(biāo)記
void setname(char na[])//設(shè)置書名
{
strcpy(name,na);
}
void delbook(){tag=1;}//刪除圖書
void addbook(int n,char*na)//增加圖書
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借書操作
{
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//還書操作
{
onshelf=1;
}
void disp()//輸出圖書
{
cout<<setw(6)<<no<<setw(18)<<name<<setw(10)<<(onshelf==1?"在架":"已借")<<endl;
}
};
class BDatabase//圖書庫類
{
int top;//圖書記錄指針
Book book[Maxb];//圖書記錄
public:
BDatabase()//構(gòu)造函數(shù),將book.txt讀到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while(1)
{
file.read((char*)&b,sizeof(b));
if(!file)break;
top++;
book[top]=b;
}
file.close();
}
void clear()//全刪
{
top=-1;
}
int addbook(int n,char*na)//增加圖書
{
Book*p=query(n);
if(p==NULL)
{
top++;
book[top].addbook(n,na);
return 1;
}
cout<<"新增成功!"<<endl;
}
Book*query(int bookid)//查找圖書
{
for(int i=0;i<=top;i++)
if(book[i].getno()==bookid&&book[i].gettag()==0)
return NULL;
}
void bookdata();//圖書庫維護(hù)
void disp()
{
for(int i=0;i<=top;i++)
if(book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析構(gòu)函數(shù),將book[]寫入book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if(book[i].gettag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
int choice;
char bname[40];
int bookid;
Book *b;
while(choice!=0)
{
cout<<"圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"輸入圖書編號:";
cin>>bookid;
cout<<"輸入圖書書名:";
cin>>bname;
addbook(bookid,bname);
break;
case 2:
cout<<"輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在"<<endl;
break;
}
cout<<"輸入新書名:";
cin>>bname;
b->setname(bname);
cout<<"更名成功!"<<endl;
break;
case 3:
cout<<"輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在!"<<endl;
break;
}
b->delbook();
break;
case 4:
cout<<"請輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該書不存在!"<<endl;
break;
}
b->disp();
break;
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
void main()
{
int choice=1,bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!=0)
{
cout<<" 1借書 "<<endl;
cout<<" 2還書 "<<endl;
cout<<" 3圖書維護(hù) "<<endl;
cout<<" 4讀者維護(hù) "<<endl;
cout<<" 0離開 "<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"借書,請輸入讀者編號:";
cin>>readerid;
cout<<"圖書編號:";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"哈哈,借書成功!";
break;
}
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"不存在該書!"<<endl;
break;
}
if(b->borrowbook()==0)
{
cout<<"該書已借"<<endl;
break;
}
r->borrowbook(b->getno());
break;
cout<<"借書成功!"<<endl;
case 2:
cout<<"還書,請輸入讀者編號:";
cin>>readerid;
cout<<"請輸入圖書編號;";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"不存在該讀者!"<<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
cout<<"還書成功!"<<endl;
case 3:
BookDB.bookdata();
break;
case 4:
ReaderDB.readerdata();
break;
}
}
}
【輸出結(jié)果】
1借書
2還書
3圖書管理
4讀者服務(wù)
0退出
3
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
輸入圖書編號:1111
輸入圖書書名:武林外傳
新增成功!
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
輸入圖書編號:2222
輸入圖書書名:今夜無眠
新增成功!
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
0
1借書
2還書
3圖書管理
4讀者服務(wù)
0退出
4
讀者服務(wù) 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
請輸入讀者編號:001
讀入讀者姓名:周強(qiáng)
讀者服務(wù) 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
0
1借書
2還書
3圖書管理
4讀者服務(wù)
0退出
1
借書,請輸入讀者編號:001
圖書編號:1111
哈哈,借書成功! 1借書
2還書
3圖書管理
4讀者服務(wù)
0退出
2
還書,請輸入讀者編號:001
請輸入圖書編號;1111
還書成功!
1借書
2還書
3圖書管理
4讀者服務(wù)
0退出
3
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
2
輸入圖書編號:2222
輸入新書名:金庸全集
更名成功!
Press any key to continue
這樣可以么?
二、如何設(shè)計一個圖書借閱管理系統(tǒng)數(shù)據(jù)庫ER圖?
1、要了解ER圖的核心要素:實(shí)體,屬性,關(guān)系,實(shí)體就是一個個對象,比如貓,屬性就是實(shí)體所有的某個屬性,比如貓的性別,關(guān)系就是實(shí)體和實(shí)體之間或者實(shí)體內(nèi)部之間的關(guān)系。
2、要了解ER圖中怎么表示1中描述的三個核心要素:在ER圖中矩形代表實(shí)體,橢圓代表屬性,菱形代表關(guān)系,各個形狀之間用線段連接。
3、以同樣的方式定義課程實(shí)體后建關(guān)系表,拖進(jìn)關(guān)系線段,連接兩個實(shí)體,注意兩頭都是紅色才是真正的連接起來了。會自動在關(guān)系屬性里建立起連接。
擴(kuò)展資料:
圖書借閱管理系統(tǒng)注意事項:
一個實(shí)體型轉(zhuǎn)換為一個關(guān)系模式。關(guān)系的屬性:實(shí)體型的屬性,關(guān)系的碼:實(shí)體型的碼。
一個1:1聯(lián)系可以轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,也可以與任何一端對應(yīng)的關(guān)系模式合并。一個1:n聯(lián)系可以轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,也可以與n端對應(yīng)的關(guān)系模式合并。一個m:n聯(lián)系轉(zhuǎn)換為一個關(guān)系模式。
三個或三個以上實(shí)體間的一個多元聯(lián)系可以轉(zhuǎn)換為一個關(guān)系模式,具有相同碼的關(guān)系模式可合并,同一實(shí)體集的實(shí)體之間的聯(lián)系即自聯(lián)系,也可以按1:1,1:n和m:n三種情況分別處理。
參考資料來源:百度百科-圖書管理系統(tǒng)
三、C語言程序設(shè)計的圖書管理系統(tǒng)
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>//輸入/輸出文件流類
using namespace std;
const int Maxr=100;//最多的讀者
const int Maxb=100;//最多的圖書
const int Maxbor=5;//每位讀者最多借五本書
//讀者類,實(shí)現(xiàn)對讀者的信息的描述
class Reader
{
private:
int tag; //刪除標(biāo)記 1:已刪 0:未刪
int no; //讀者編號
char name[10]; //讀者姓名
int borbook[Maxbor];//所借圖書
public:
Reader() {}
char *getname() //獲取姓名
int gettag() //獲取刪除標(biāo)記
int getno() //獲取讀者編號
void setname(char na[]) //設(shè)置姓名
{
strcpy(name,na);
}
void delbook()//設(shè)置刪除標(biāo)記 1:已刪 0:未刪
void addreader(int n,char *na)//增加讀者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借書操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
int retbook(int bookid)//還書操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//讀出讀者信息
{
cout << setw(5) << no <<setw(10) << name<<"借書編號:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] << "|";
cout << "]"<<endl;
}
};
//讀者類庫,實(shí)現(xiàn)建立讀者的個人資料
class RDatabase
{
private:
int top; //讀者記錄指針
Reader read[Maxr];//讀者記錄
public:
RDatabase() //構(gòu)造函數(shù),將reader.txt讀到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);//打開一個輸入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
file.close(); //關(guān)閉 reader.txt
}
void clear()//刪除所有讀者信息
{
top=-1;
}
int addreader(int n,char *na)//添加讀者時先查找是否存在
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader *query(int readerid)//按編號查找
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid &&
read[i].gettag()==0)
{
return &read[i];
}
return NULL;
}
void disp() //輸出所有讀者信息
{
for (int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//讀者庫維護(hù)
~RDatabase() //析構(gòu)函數(shù),將read[]寫到reader.txt文件中
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
char choice;
char rname[20];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t讀 者 維 護(hù)\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 刪 除\n\n\t\t 4 查 找\n\n\t\t 5 顯 示\n\n\t\t 6 全 刪\n\n\t\t 0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "輸入讀者編號:";
cin >> readerid;
cout << "輸入讀者姓名:";
cin >> rname;
addreader (readerid,rname);
break;
case '2':
cout << "輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout << " 該讀者不存在 "<<endl;
break;
}
cout << "輸入新的姓名:";
cin >> rname;
r->setname(rname);
break;
case '3':
cout << " 輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 該讀者不存在" << endl;
break;
}
r->delbook();
break;
case '4':
cout << "讀入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"該讀者不存在"<< endl;
break;
}
r->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"輸入錯誤,請從新輸入:";break;
}
}
}
//圖書類,實(shí)現(xiàn)對圖書的描述,圖書的編號,書名,借出,還入等
class Book
{
private:
int tag;//刪除標(biāo)記 1:已刪 0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() //獲取姓名
int getno()//獲取圖書編號
int gettag()//獲取刪除標(biāo)記
void setname(char na[])//設(shè)置書名
{
strcpy(name,na);
}
void delbook()//刪除圖書
void addbook(int n,char *na)//增加圖書
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借書操作
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//還書操作
{
onshelf=1;
}
void disp()//輸出圖書
{
cout << setw(6) << no << setw(18) << name << setw(10)
<<(onshelf==1? "在架":"已借") <<endl;
}
};
//圖書庫類,實(shí)現(xiàn)對圖書的維護(hù),查找,刪除等
class BDatabase
{
private:
int top; //圖書記錄指針
Book book[Maxb]; //圖書記錄
public:
BDatabase()//構(gòu)造函數(shù),將book.txt讀到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
void clear()//全刪
{
top=-1;
}
int addbook(int n,char *na)//增加圖書
{
Book *p=query(n);
if (NULL==p)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
Book *query(int bookid)//查找圖書
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
void bookdata();//圖書庫維護(hù)
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析構(gòu)函數(shù),將book[]寫到book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
char choice;
char bname[40];
int bookid;
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 << "輸入圖書編號:"<<endl;
cin >> bookid;
cout << "輸入圖書書名:"<<endl;
cin >> bname;
addbook(bookid,bname);
break;
case '2':
cout << "輸入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout << " 該圖書不存在 "<<endl;
break;
}
cout << "輸入新的書名:"<<endl;
cin >> bname;
b->setname(bname);
break;
case '3':
cout <<" 讀入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 該圖書不存在" << endl;
break;
}
b->delbook();
break;
case '4':
cout << " 讀入圖書編號:"<<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<<"輸入錯誤,請從新輸入:";
}
}
}
//main() 函數(shù)的實(shí)現(xiàn),程序的主界面的引導(dǎo)
void main()
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t 圖 書 管 理 系 統(tǒng)\n\n\n";
cout <<"\t\t\t1 借 書\n\n\t\t\t2 還 書 \n\n\t\t\t3 圖 書 維 護(hù)\n\n\t\t\t4 讀 者 維 護(hù)\n\n\t\t\t0 離 開"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout <<" 借書 讀者編號:";
cin >>readerid;
cout <<" 圖書編號: ";
cin >>bookid;
r=ReaderDB.query(readerid);//按編號查找
if (NULL==r)
{
cout <<" 不存在該讀者,不能借書"<< endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能借書"<< endl;
break;
}
if (b->borrowbook()==0)
{
cout << " 該圖書已借出,不能借書"<< endl;
break;
}
r->borrowbook(b->getno());
break;
case '2':
cout<<"還書\n 讀者編號:";
cin >>readerid;
cout << " 圖書編號:";
cin >>bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout <<" 不存在該讀者,不能還書" << endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能還書" <<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
case '3':
BookDB.bookdata();
break;
case '4':
ReaderDB.readerdata();
break;
default:cout<<"輸入錯誤,請從新輸入:";
}
}
}
四、c語言 圖書信息管理系統(tǒng)設(shè)計
通過測試!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 100
struct Student
{
int num;/*登錄號*/
char name[100];/*書名*/
char author[100];/*作者名*/
char fn[100];/*分類號*/
char place[100];/*出版單位*/
char day[100];/*出版時間*/
float money;/*價格*/
}stu[MAX];
main()/*主函數(shù)*/
{
void Input();/*輸入*/
void Display();/*輸出*/
void Find();/*查找*/
void Modify();/*刪除*/
void Change();/*修改*/
int n;
for(;;)
{
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 歡迎來到圖書信息管理系統(tǒng) ※\n");
printf("※ ※\n");
printf("※ ※\n");
printf("※ 主菜單 ※\n");
printf("※ ※\n");
printf("※ ▲1.圖書信息錄入 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲2.圖書信息瀏覽 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲3.圖書信息查詢 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲4.圖書信息刪除 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲5.圖書信息修改 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲6.退出系統(tǒng) ▲ ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
printf("請輸入選擇項(1-6):");
scanf("%d",&n);
printf("\n\n\n\n");
if(n>0&&n<7)
{
switch(n)
{
case 1:Input();break;
case 2:Display();break;
case 3:Find();break;
case 4:Modify();break;
case 5:Change();break;
case 6:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 謝謝使用! ※\n");
printf("※ 再見! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
exit(0);
}
}
else
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 輸入錯誤! ※\n");
printf("※ 請退出! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
break;
}
}
}
void Find()/*查找*/
{
FILE *fp;
int i;
int choose,t;
char ans[100];
do
{
printf("1.按書名查找\n");
printf("2.按作者名查找\n");
printf("返回主菜單(其他數(shù)字)\n");
scanf("%d",&choose);
if(choose==1)
{
printf("輸入所查書名:\n");
scanf("%s",ans);
t=-1;
if(choose==1)
{
for(i=0;i<MAX;i++) if(strcmp(ans,stu[i].name)==0)
{
t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1) printf("不存在該信息\n");
}
else if(choose==2)
{
printf("輸入所查作者名:\n");
scanf("%s",ans);
t=-1;
if(choose==2)
{
for(i=0;i<MAX;i++)
if(strcmp(ans,stu[i].author)==0)
{ t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1) printf("不存在該信息\n");
}
else return;
}while(1);
}
void Display()/*輸出*/
{
FILE *fp;
int i;
fp=fopen("student","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號 書名 作者名 分類號 出版單位 出版時間 價格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
}
fclose(fp);
}
void Input()/*輸入*/
{
FILE *fp;
int n;
fp=fopen("student","wb");
for(n=0;n<MAX;n++)
{
printf("n=%d 輸入序號n(當(dāng)輸入n=-1時,返回),n=",n++);
scanf("%d",&n);
if(n==-1)
{
fclose(fp);
return;
}
else
{
printf("請輸入登錄號 書名 作者名 分類號 出版單位 出版時間 價格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[n],sizeof(struct Student),1,fp);
}
}
fclose(fp);
}
void Modify()/*刪除*/
{
FILE *fp;
int i,flag,n,s,j;
fp=fopen("student","rb+");
rewind(fp);
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號 書名 作者名 分類號 出版單位 出版時間 價格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
n=i;
printf("輸入待刪除圖書號:\n");
scanf("%d",&s);
for(i=0,flag=1;flag&&i<n;i++)
{
if(s==stu[i].num)
{
for(j=i;j<n-1;j++)
{
stu[j].num=stu[j+1].num;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].author,stu[j+1].author);
strcpy(stu[j].fn,stu[j+1].fn);
strcpy(stu[j].place,stu[j+1].place);
strcpy(stu[j].day,stu[j+1].day);
stu[j].money=stu[j+1].money;
}
flag=0;
}
}
if(!flag)
n=n-1;
else
printf("沒有此號\n");
fp=fopen("student","wb");
for(i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct Student),1,fp);
fclose(fp);
fp=fopen("student","r");
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號 書名 作者名 分類號 出版單位 出版時間 價格\n");
printf("-----------------------------------------------------------\n");
for(i=0;i<n;i++)
{
fread(&stu[i],sizeof(struct Student),1,fp);
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
fclose(fp);
}
void Change()/*修改*/
{
FILE *fp;
int i,num,n;
int flag=0;
printf("請輸入要修改的圖書號:");
scanf("%d",&num);
for(i=0;i<=MAX;i++)
if(stu[i].num==num)
{
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號 書名 作者名 分類號 出版單位 出版時間 價格\n");
printf("-----------------------------------------------------------\n");
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("-----------------------------------------------------------\n\n");
n=i;
flag=1;
break;
}
if(flag==0)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 輸入錯誤!\n");
printf(" 請返回!\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
return;
}
printf("\n\n\n");
fp=fopen("student","rb+");
fseek(fp,n*sizeof(struct Student),0);
printf("登錄號 書名 作者名 分類號 出版單位 出版時間 價格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[i],sizeof(struct Student),1,fp);
fclose(fp);
fp=fopen("student","rb");
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號 書名 作者名 分類號 出版單位 出版時間 價格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);;
}
printf("-----------------------------------------------------------\n\n");
fclose(fp);
}
以上就是關(guān)于圖書管理系統(tǒng)設(shè)計相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
廢墟圖書館進(jìn)去就黑屏(廢墟圖書館 進(jìn)不去)
自媒體真能月入上萬嗎-(自媒體真能月入上萬嗎現(xiàn)在)