图书管理程序

#include <iostream>  
#include <iomanip>  
#include <string>  
//输入/输出文件流类  
#include <fstream>  
using namespace std;  
//最多的读者  
const int Maxr=100;  
//最多的图书  
const int Maxb=100;  
//每位读者最多借五本书  
const int Maxbor=5; 


//读者类,实现对读者的信息的描述  
class Reader  
{  
private:  
//删除标记 1:已删 0:未删  
int tag;  
//读者编号  
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); 

}  
//设置删除标记 1:已删 0:未删  
void delbook()  
{  
tag=1;  
}  
//增加读者  
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:  
//构造函数,将reader.txt读到read[]中  
RDatabase()  
{  
Reader s;  
top=-1;  
//蚩桓鍪淙胛募?nbsp; 
fstream file("reader.txt",ios::in);  
while (1)  
{  
file.read((char *)&s,sizeof(s));  
if (!file)break;  
top++;  
read[top]=s;  
}  
//关闭 reader.txt  
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();  
//析构函数,将read[]写到reader.txt文件中  
~RDatabase()  
{  
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:  
//删除标记 1:已删 0:未删  
int tag;  
//图书编号  
int no;  
//书名  
char name[20];  
//是否再架 1:再架 2:已借  
int onshelf;  
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:  
//构造函数,将book.txt读到book[]中  
BDatabase()  
{  
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();  
}  
//析构函数,将book[]写到book.txt文件中  
~BDatabase()  
{  
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() 函数的实现,程序的主界面的引导 

void main()  
{  
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<<"输入错误,请从新输入:"; 

}  
}  
}

 


用C++写的图书管理系统源代码 图书馆管理系统要求: 实现的功能为: 1. 整个系统由两个独立的模块组成 1.1 内部管理模块 A 主要对图书馆的进行维护,包括对图书馆使用人员的管理,对图书的管理,对用户以及管理人员的密码管理。同时管理的用户的最大量为100。图书的最大量为500。 1.2 外部服务模块 B 普通图书馆用户的一些日常操作:如借书,还书,查询个人信息,查询图书信息。 2. 系统功能A(内部管理模块) 2.1 用户信息管理模块。可是实现注册新用户,删除用户,修改用户等等。用户信息包括个人信息和借阅信息。个人信息包括姓名、编号、联系方式。借阅信息包括借书总数(规定每个用户最多同时借3本)、欠款额。对于所有已借到的书,可以看到图书的信息、借书日期。 2.2 对图书的管理,也是新增,删除等。图书信息包括书名、作者、编号、出版社。图书可以实现多种方式查询。同时有标识能指出该图书是否已经被借出。 /* 2.5 对图书预订用户进行及时的信息反馈,预约时间最长为一周,如果有书已经可借了,那么通知预订该书的用户。如果该用户在一周内还没来借书的话,那么就通知第二个预订该书的用户。 设计相应的数据结构。 */ 3. 系统功能B 3.1 按多种方式查找图书。(书名、作者、编号、出版社) 3.2 借书 要求输入用户的编号,然后判断该用户是否有欠费(超过30元则不允许借书)或者已经借满。判断要借的书是否已被借出,若未借出,将该书借给用户,修改相应的信息。 3.3 还书 判断是否有欠费(规定每本书可借一个月,超过规定时间按每天0.1元计费。 3.4 查询用户信息。包括个人信息以及借还书信息。 4. 要求 1.界面友好。对于用户输入,要有足够的提示信息,如“请选择(1借书 2 还书……):”提示用户选择。 2.不用因为用户的错误输入而引起程序运行错误而中止执行。对输入值的大小范围、类型等进行正确性检查。对不合法的给出出错信息,指出错误类型,等待重新输入。 3.对删除数据(用户、图书)给出警告。
通过C++实习简单的设计出图书管理系统 class Student { private: int snumber; string sname; string ssex; int sage; string sdapt; string srutime; string sbiyetime; string sjieyuetime; int sjiecount; public: Student(int number=0,string name="0",string sex="0",int age=0,string dapt="0", string rutime="0",string biyetime="0",string jieyuetime="0",int jiecount=0); virtual ~Student(); int Getsnumber(); void Setsnumber(int number); string Getsname(); void Setsname(string name); string Getssex(); void Setssex(string sex); int Getsage(); void Setsage(int age); string Getsdapt(); void Setsdapt(string dapt); string Getsrutime(); void Setsrutime(string rutime); string Getsbiyetime(); void Setsbiyetime(string biyetime); string Getsjieyuetime(); void Setsjieyuetime(string jieyutime); int Getsjiecount(); void Setsjiecount(int jiecount); void Studentshow(); }; 2)将文本文件信息存入Stulist容器 int snumber; string sname; string ssex; int sage; string sdapt; string srutime; string sbiyetime; string sjieyuetime; int sjiecount; //定义Stulist容器和相应迭代器 list<Student> Stulist; list<Student>::iterator s_iter=Stulist.begin(); list<Student>::iterator iter=Stulist.begin(); //定义文件输入流,读取文件 ifstream infile2; infile2.open("Student.txt",ios::in); //将文本文件信息存入Stulist容器中 infile2>>snumber>>sname>>ssex>>sage>>sdapt>>srutime>>sbiyetime>>sjieyuetime>> sjiecount; Student std(snumber,sname,ssex,sage,sdapt,srutime,sbiyetime,sjieyuetime,sjiecount); Stulist.push_back(std); while(infile2>>snumber>>sname>>ssex>>sage>>sdapt>>srutime>>sbiyetime>>sjieyuet ime>>sjiecount) { Student std(snumber,sname,ssex,sage,sdapt,srutime,sbiyetime,sjieyuetime, sjiecount); Stulist.push_back(std); } 3)查询学生信息 cout<<"1、显示所有信息\t\t2、查询某个学生"<<endl; cout<<"请选择······"<<endl; int xuan; cin>>xuan; if(xuan==1) { cout<<"全部学生信息如下:"<<endl; for(s_iter=Stulist.begin(); s_iter!=Stulist.end(); s_iter++) { s_iter->Studentshow(); } } else if(xuan==2) { cout<<"请输入您要查询学生的编号(20100128**)->>"; int xuehao; int judge=0; cin>>xuehao; for(s_iter=Stulist.begin(); s_iter!=Stulist.end(); s_iter++) { if(s_iter->Getsnumber()==xuehao) { cout<<"查询结果如下:"<<endl; s_iter->Studentshow(); judge=1; break; } } if(judge == 0) { cout<<"你要查找的学生不存在!"<<endl; } } else{ cout<<"无此选项!"<<endl;} 4)删除学生信息 cout<<"请输入要删除学生的学号(20100128**)->>"; int number; int judge=0; int ok=0; cin>>number; for(s_iter=Stulist.begin(); s_iter!=Stulist.end(); s_iter++) { if(s_iter->Getsnumber()==number) { iter=s_iter; iter->Studentshow(); judge=1; break; } else{;} } cout<<"是否删除:1、是2、否->>"; cin>>ok; if(judge==1 && ok==1) { Stulist.erase(s_iter); ofstream Delestu; Delestu.open("Student.txt",ios::out); for(s_iter=Stulist.begin(); s_iter!=Stulist.end(); s_iter++) { Delestu<<s_iter->Getsnumber()<<""<<s_iter->Getsname()<<""<<s_iter-> Getssex()<<""<<s_iter->Getsage()<<""<<s_iter->Getsdapt()<<""<<s_iter-> Getsrutime()<<""<<s_iter->Getsbiyetime()<<""<<s_iter->Getsjieyuetime() <<""<<s_iter->Getsjiecount()<<endl; } cout<<"删除成功!"<<endl; } else if(judge==0) { cout<<"未找到相应学生编号,无法删除!"<<endl; } else{;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值