導航:首頁 > 編程語言 > cs圖書館管理系統代碼

cs圖書館管理系統代碼

發布時間:2024-03-03 12:13:23

⑴ 急求C語言圖書管理系統代碼

#include#includeclassBook{//書籍基類protected:charTitle[40];//書名longCode;//條碼intType;//0表示書,1表示雜志public:Book();Book(char*title,longcode);voidSetCode(longcode){Code=code;}voidSetTitle(char*tl){strcpy(Title,tl);}voidSetType(booltype){Type=type;}intGetType(){returnType;}longGetCode(){returnCode;}virtualvoidShow();//顯示書的信息friendostream&operator>(istream&is,Book&);//重載提取運算符Book*Next;//為創建每個讀者所借書鏈表而定義指針};classItem:publicBook{//書的款目//charTitle[40];//書名charAuthor[20];//著者名charIndexCode[10];//分類號//longCode;//條碼public:Item();Item(char*author,char*title,char*index,intcode);Item(Item&);voidSetAuthor(char*);voidSetIndexCode(char*);virtualvoidShow();//顯示書的信息friendostream&operator>(istream&is,Item&);//重載提取運算符public:};classMagazine:publicBook{//雜志類intVolume;enumLANG{CHINESE=1,ENGLISH}Lang;//枚舉變數,確定語言類別public:Magazine():Book(){Volume=0;Lang=CHINESE;Type=1;}Magazine(char*title,intvol,LANGlang,intcode);Magazine(Magazine&);voidSetVolume(intvol){Volume=vol;}voidSetLang(intlang){Lang=(LANG)lang;}virtualvoidShow();//顯示雜志的信息friendostream&operator>(istream&is,Magazine&);//重載提取運算符};classReader{//讀者信息類charName[20];//姓名charPosition[20];//職務intAge;//年齡longCode;//借書證號Book*items;//所借書鏈表public:Reader();Reader(char*name,char*posi,intage,intcode);//Reader(Reader&);~Reader();longGetCode(){returnCode;}voidSetName(char*);voidSetPosition(char*);voidSetAge(int);voidSetCode(long);voidAddBook(Item);//添加所借書voidAddBook(Magazine);//添加所借雜志voidDelBook(Bookit);//還書後減少所借書voidShowBooks();//顯示所借書voidShow();//顯示讀者信息friendostream&operator>(istream&is,Reader&);//重載提取運算符public:intCounter;//計數器,統計所借書數目};classManager{//管理員類charName[20];//姓名intAge;//年齡intCode;//工號friendclassLibrary;//將圖書館類聲明為友元public:Manager(){}Manager(char*,int,int);longGetCode(){returnCode;}voidShow();friendostream&operator>(istream&is,Manager&);//重載提取運算符};classLoan{//借閱信息類intType;//0表示書,1表示雜志Itemitem;//借閱書Magazinemag;//借閱雜志Readerreader;//借閱者Managermanager;//借書操作員intCode;friendclassLibrary;//將圖書館類聲明為友元public:Loan(){}Loan(Loan&l);intGetCode(){returnCode;}voidShow();friendostream&operator>(istream&is,Loan&);//重載提取運算符};、、、、、、、、、、、、、、、、、、、、、、、#include#includeclassReader;templateclassDblList;templateclassDblNode{public:TInfo;//數據域DblNode*llink,*rlink;//前驅(左鏈)、後繼(右鏈)指針public:DblNode(Tdata);//一般結點DblNode();//頭結點TGetInfo(){returnInfo;};friendclassDblList;friendclassLibrary;};templateclassDblList{DblNode*head,*current;public:DblList();~DblList();voidInsert(constT&data);DblNode*Remove(DblNode*p);voidPrint();intLength();//計算鏈表長度DblNode*Find(Tdata);//搜索數據與定值相同的結點DblNode*Find(intdata);//按某個關鍵字查找voidMakeEmpty();//清空鏈表voidShowList();//顯示鏈表各結點friendistream&operator>>(istream&,DblList&);//重載輸入流運算符friendostream&operator&dlist);//重載輸出流運算符friendclassLibrary;//其它操作};templateDblNode::DblNode(){llink=rlink=NULL;}templateDblNode::DblNode(Tdata){info=data;llink=NULL;rlink=NULL;}templateDblList::DblList(){//建立表頭結點head=newDblNode();head->rlink=head->llink=head;current=NULL;}templateDblList::~DblList(){MakeEmpty();//清空鏈表deletehead;}templatevoidDblList::MakeEmpty(){DblNode*tempP;while(head->rlink!=head){tempP=head->rlink;head->rlink=tempP->rlink;//把頭結點後的第一個節點從鏈中脫離tempP->rlink->llink=head;//處理左指針deletetempP;//刪除(釋放)脫離下來的結點}current=NULL;//current指針恢復}templatevoidDblList::Insert(constT&data){//新節點在鏈尾current=newDblNode;current->Info=data;current->rlink=head;//注意次序current->llink=head->llink;head->llink->rlink=current;head->llink=current;//最後做}templateDblNode*DblList::Remove(DblNode*p){//刪除結點current=head->rlink;while(current!=head&¤t!=p)current=current->rlink;if(current==head)current=NULL;else{//結點摘下p->llink->rlink=p->rlink;p->rlink->llink=p->llink;p->rlink=p->llink=NULL;}returncurrent;}templateDblNode*DblList::Find(Tdata){//按結點查找current=head->rlink;while(current!=head&¤t->Info!=data)current=current->rlink;if(current==head)current=NULL;returncurrent;}templateDblNode*DblList::Find(intdata){//按數據值查找結點current=head->rlink;inttemp=current->Info.GetCode();while(current!=head&&temp!=data){current=current->rlink;temp=current->Info.GetCode();}if(current==head)current=NULL;returncurrent;}templatevoidDblList::Print(){//輸出鏈表current=head->rlink;while(current!=head){coutInforlink;}coutintDblList::Length(){//取得鏈表長度intcount=0;current=head->rlink;while(current!=head){count++;current=current->rlink;}returncount;}templatevoidDblList::ShowList(){//輸出鏈表各結點intcount=0;current=head->rlink;while(current!=head){current->GetInfo().Show();current=current->rlink;}return;}templateistream&operator>>(istream&is,DblList&dlist){intlen;Ttt;//定義局部變數讀入一個結點is>>len;for(inti=0;i>tt;dlist.Insert(tt);}returnis;}templateostream&operator&dlist){DblNode*tempP;intlen=dlist.Length();osrlink;while(tempP!=dlist.head){//循環輸出鏈表各結點osInfo;tempP=tempP->rlink;}returnos;}#include"class.h"#include"dblist.h"#includeclassLibrary{//封裝圖書館流通業務的類DblListitem;//在館圖書鏈表DblListmag;//在館雜志鏈表DblListreader;//讀者鏈表DblListloan;//借閱信息鏈表DblListmanager;//管理員信息鏈表intitemNum;//記錄在館圖書數目intmagNum;//記錄在館雜志數目intreaderNum;//記錄讀者數目intloanNum;//記錄借閱信息數目intmanagerNum;//記錄管理員數目ofstreamitemFileOut;//文件流對象,保存圖書館書籍數據ifstreamitemFileIn;//文件流對象,讀入圖書館書籍數據ofstreammagFileOut;//文件流對象,保存圖書館雜志數據ifstreammagFileIn;//文件流對象,讀入圖書館雜志數據ofstreamreaderFileOut;//文件流對象,保存圖書館讀者數據ifstreamreaderFileIn;//文件流對象,讀入圖書館讀者數據ofstreamloanFileOut;//文件流對象,保存圖書館借閱信息數據ifstreamloanFileIn;//文件流對象,讀入圖書館借閱信息ofstreammanagerFileOut;//文件流對象,保存圖書館管理員數據ifstreammanagerFileIn;//文件流對象,讀入圖書館管理員數據public:Library();//構造函數~Library();//析構函數voidRun();//圖書館類的運行函數voidCreateBibliotheca();//創建書目voidCreateReader();//創建讀者庫voidCreateManager();//創建管理員信息intShowMainMenu();//顯示主菜單函數voidBorrow();//借書操作voidReturn();//還書操作voidRequire();//查詢操作voidSaveInfo();//保存圖書館信息voidOpenInfo();//讀入圖書館信息};

⑵ c語言圖書管理系統程序設計

一 程序設計說明書
【設計題目】 圖書館借閱管理
【問題描述】圖書館,適合用C++面向對象的功能來描述。圖書館管理系統分為借書、還書、圖書管理和讀者服務等四個部分。設計一個讀者類Reader,記錄每個讀者基本信息;讀者庫類Rdatabase,記錄所有讀者信息;圖書類Book, 記錄每本書的基本信息;圖書庫類Bdatabase, 記錄所有圖書信息。
【基本要求】
1讀者庫類RDatabase中,其構造函數中,將read.txt文件中所有讀入讀者記錄rede[]中。處理完畢,在析構函數中將read[]中的所有未刪記錄寫入到read.txt中。
2圖書庫類BDatabase中,其構造函數中,將book.txt文件中所有讀入圖書記錄book[]中。處理完畢,在析構函數中將book[]中的所有未刪記錄寫入到book.txt中。
3 利用構造函數完成讀者和圖書數據初始化,完成內存分配。程序結束前,析構函數完成所申請的堆內存空間。
4 編寫主函數,對所編寫的矩陣類進行全面測試。要求用戶界面採用菜單方式。測試中需要讀者和圖書數據通過I/O流從磁碟文件讀入,同時顯示在屏幕上。得到的數據通過I/O流寫入磁碟文件保存,同時顯示在屏幕上。
5 源程序中要有充分的注釋,報告中要有詳細的流程圖和文字材料。
【類的設計】
該程序包含了四個類,如下:
1.Reader類,有讀者的基本管理功能,具有以下私有數據:
int tag;//刪除標記 1:已刪;0:未刪
int no;//讀者編號
char name[10];//讀者姓名
int borbook[Maxbor];//所借圖書
2.讀者庫類Rdatabase, 具有以下私有數據:
int top;//讀者記錄指針
Reader read[Maxr];//讀者記錄
3.圖書庫類Book,有一本圖書的基本功能,有以下私有數據:
int tag;//刪除標記 1:已刪;0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否在架 1在架 0已借
4.圖書庫類BDatabase,有以下私有數據:
int top;//圖書記錄指針
Book book[Maxb];//圖書記錄
【特殊函數的設計說明】
構造函數
1.Reader類中構造函數Reader(),初始化函數;
2.讀者庫類RDatabase中,其構造函數Rdatabase(),將read.txt文件中所有讀入讀者記錄rede[]中。
3.Book類中構造函數Book(),初始化函數;
4.圖書庫類BDatabase中,其構造函數中,將book.txt文件中所有讀入圖書記錄book[]中。

拷貝構造函數
Reader類中的拷貝構造函數將getname()的返回值讀者姓名拷貝到setname()中,Book類中的拷貝構造函數將getname()函數的返回值圖書名拷貝到圖書名設置函數setname()中。

析構函數
1.讀者庫類RDatabase中,其析構函數~Rdatabase(),將read[]中的所有未刪記錄寫入到read.txt中;
2.圖書庫類BDatabase中,其析構函數~Bdatabase(),將book[]中的所有未刪記錄寫入到book.txt中。

運算符重載
重載了「=」,當比較讀者編號和圖書編號時,重載;重載位運算符「〈〈」和「〉〉」等。

【主要函數演算法流程圖】

【程序的使用方法】
1.進入操作頁面,按提示操作;
2.首先,新增圖書和讀者信息,之後就可以對以存在的信息進行操作;
3.操作當中,可以隨時增加,更改和刪除圖書或讀者信息;
4.當選擇退出時,進行清屏。

二 程序上機調試報告
【語法錯誤及其排除】
1.在敲程序時,有很多拼寫錯誤,例好多處把Readdata()誤打Readdate();結束的分號,在不同的輸入法狀態下輸入,這些小錯誤剛開始很難發現,不過有了經驗,就很容易了。
2.創建新的構造函數時,使用出現了錯誤。重載構造函數要注意函數的訪問許可權,結果就不會出現錯誤。
【演算法錯誤及其排除】
1.讀者類中借書操作函數中,採用循環語句時判斷讀者已借圖書量時for(int i=0;i<Maxbor;i++)誤寫為for(int i=1;i<Maxbor;i++),使循環發生錯誤。
2.指針使用錯誤,指針b和r混淆,導致編譯錯誤得到「error C2660: 'retbook' : function does not take 1 parameters」錯誤報告。

⑶ 圖書館管理系統代碼

/*****************************************************************************************/
#include <iostream>
#include <iomanip>
#include <cstring>
#include <fstream>//輸入/輸出文件流類
using namespace std;
const int Maxr=100;//最多的讀者
const int Maxb=100;//最多的圖書
const int Maxbor=5;//每位讀者最多借五本書
//讀者類,實現對讀者的信息的描述

class Reader
{
private:
int tag; //刪除標記 1:已刪 0:未刪
int no; //讀者編號
char name[10]; //讀者姓名
int borbook[Maxbor];//所借圖書
public:
Reader() {}
char *getname() {return name;} //獲取姓名
int gettag() {return tag;} //獲取刪除標記
int getno() {return no;} //獲取讀者編號
void setname(char na[]) //設置姓名
{
strcpy(name,na);

}
void delbook(){ tag=1; }//設置刪除標記 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;

}
};

//讀者類庫,實現建立讀者的個人資料
class RDatabase
{
private:
int top; //讀者記錄指針
Reader read[Maxr];//讀者記錄
public:
RDatabase() //構造函數,將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(); //關閉 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();//讀者庫維護
~RDatabase() //析構函數,將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讀 者 維 護\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;
}
}
}

//圖書類,實現對圖書的描述,圖書的編號,書名,借出,還入等
class Book
{
private:
int tag;//刪除標記 1:已刪 0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() { return name; }//獲取姓名
int getno(){ return no; }//獲取圖書編號
int gettag(){ return tag; }//獲取刪除標記
void setname(char na[])//設置書名
{
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
{
private:
int top; //圖書記錄指針
Book book[Maxb]; //圖書記錄
public:
BDatabase()//構造函數,將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();//圖書庫維護
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析構函數,將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圖 書 維 護 "<<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() 函數的實現,程序的主界面的引導

int main(void)
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t 圖 書 管 理 系 統\n\n\n";

cout <<"\t\t\t1 借 書\n\n\t\t\t2 還 書 \n\n\t\t\t3 圖 書 維 護\n\n\t\t\t4 讀 者 維 護\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<<"輸入錯誤,請從新輸入:";

}
}
return 0;
}
希望能解決您的問題。

閱讀全文

與cs圖書館管理系統代碼相關的資料

熱點內容
手機vmos導入的文件在哪裡 瀏覽:115
蘋果手機可以把文件傳到華為嗎 瀏覽:63
海川化工下載的文件默認到哪裡 瀏覽:343
學唱粵語歌app 瀏覽:975
qq游戲生死狙擊玩不了 瀏覽:120
win10郵件不顯示圖片 瀏覽:922
口袋妖怪所有版本下載 瀏覽:504
我們身邊都有哪些大數據例子 瀏覽:25
震旦adc307掃描的文件在哪裡 瀏覽:999
圖片打開變成文件 瀏覽:194
松下微單電腦傳文件軟體 瀏覽:574
蘋果藍牙鍵盤surface 瀏覽:170
mindmaplinux 瀏覽:733
oppo手機怎麼連接電腦傳輸數據 瀏覽:624
word刪除章節附註分隔符 瀏覽:773
公告質疑需要哪些文件 瀏覽:608
資料庫模型是干什麼的 瀏覽:404
win10的驅動怎麼安裝驅動 瀏覽:320
word文件水印怎麼取消 瀏覽:443
rhel6的鏡像文件在哪裡下載 瀏覽:571

友情鏈接