运维开发网

c语言编写实现图书管理系统

运维开发网 https://www.qedev.com 2022-10-13 15:42 出处:网络
这篇文章主要为大家详细介绍了C++编写实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

这篇文章主要为大家详细介绍了C++编写实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一个用C++写的图书管理系统,供你参考。具体情况如下

2018大一班,搬到这里纪念,一共1200多行代码。

为图书馆员写一个图书管理系统。图书管理系统的设计主要实现对图书的管理和相关操作,包括三个表:
图书信息表;;存储图书的基本信息,包括书号、书名、作者、出版社、出版日期、存储数量、定价等。
读者信息表;;存储读者的基本信息,包括学号,姓名,学院,专业课等。
图书借阅表;;存储读者借阅图书的信息,包括学号、姓名、书号、书名、借阅日期、归还日期、归还日期等。

通过菜单选择完成以下功能:

1.图书馆信息添加功能:包括书号、书名、作者、出版社、出版日期、托存图书馆数量、定价等。

2.图书信息查询:按书名、作者姓名、
出版社等查询。

3.图书信息排序:按书号、书名等升序排序。

4.图书信息的修改和删除:按书号或书名修改和删除图书。

5.读者信息添加功能:包括学号、姓名、学院、专业、班级等。

6.读者信息查询:根据学号、姓名、班级等进行查询。

7.读者信息排序:按学号、学院等升序排序。

8.修改和删除读者信息:根据学号+姓名修改和删除读者信息。

9.借书:输入学号+书号。如果图书信息表中的图书数量大于0,则可以借出。借阅相应的数量后,修改图书信息表中的图书数量,将学生的借阅添加到图书借阅表中。

10.还书:输入学号+书号,在图书信息表中修改图书数量,在图书借阅表中记录该同学的还书时间。

1.图书借阅查询:根据学号、书名、学院等进行查询。

#include lt;iostreamgt;#include lt;stringgt;#include lt;cstringgt;#include lt;fstreamgt;#include lt;cstdlibgt;#include lt;windows.hgt;#include lt;winbase.hgt;const int INC=20;using namespace std;class Date{ //Date类 :日期类public: int day; //日 int month; //月 int year; //年 Date(int d=1,int m=1,int y=2012){ //构造函数 默认初始日期2012.1.1 //判断日期的合法性 if(dgt;0amp;amp;dlt;32)day=d;else day=1; if(mgt;0amp;amp;mlt;13)month=m;else m=1; if(ygt;0)year=y;else year=2012; } void setDay(int d){day=d;} //设置日 void setMonth(int m){month=m;} //设置月 void setYear(int y){year=y;} //年 int getDay(){return day;} //获取年月日 int getMonth(){return month;} int getYear(){return year;} void disp(){coutlt;lt;yearlt;lt;"/"lt;lt;monthlt;lt;"/"lt;lt;day;} //显示日期 Date operator+(int dtmp); bool isLeapYear(int yy); //判断是否为闰年};bool Date::isLeapYear(int yy){ //判断是否为闰年 if(yy%400==0) return true; else if(yy%100!=0amp;amp;yy%4==0) return true; else return false;}Date Date::operator+(int dtmp){ //重载+运算符 //bool Date::isLeapYear(int yy); int yy=year,mm=month,dd=day,mtmp,m2; //年份yy 月份mm 日dd 借阅天数 dtmp bool flag; while(dtmpgt;=0) { if(isLeapYear(yy)) { dtmp-=366; flag=true; } else { dtmp-=365; flag=false; } yy++; } if(flag) dtmp+=366; else dtmp+=365; yy--; if(isLeapYear(yy)) { m2=29; } else { m2=28; } mtmp=dtmp+dd; int m_day[]={0,31,m2,31,30,31,30,31,31,30,31,30,31}; //每月天数 for(;mtmpgt;m_day[mm];) { mtmp-=m_day[mm]; if(mm==12) { mm=0; yy++; } mm++; } dd=mtmp; Date dt(yy,mm,dd); return dt; //返回一个新日期}class Book{//书号、书名、作者、出版社、出版日期、出版定价、存馆数量private: string num; //s书号 string title; //标题 string author; //作者 string publisher; //出版社 Date publishdate; //Date类:出版日期 float price; //价格 int howmany; //存馆数量 public: Book(string num0="24416-5",string title0="数据结构",string author0="王红梅,胡明,王涛", string pub0="清华大学出版社",int bd=1,int bm=1,int by=2012,float pr=29.0,int ct=10):publishdate((bd,bm,by)){ num=num0;title=title0;author=author0;publisher=pub0;price=pr;howmany=ct;} void setNum(string num0){num=num0;} //设置书号 void setTitle(string title0){title=title0;} //设置标题 void setAuthor(string author0){author=author0;} //设置作者 void setPublisher(string publisher0){publisher=publisher0;} //设置出版社 void setPublishdate(int bd,int bm,int by){Date d(bd,bm,by);publishdate=d;} //设置出版日期,先构造在复制 void setHowmany(int ct){howmany=ct;} //设置库存 void setPrice(float pr){price=pr;} //设置价格 string getNum(){return num;} // 获取 书号 标题 作者 等信息 string getTitle(){return title;} string getAuthor(){return author;} string getPublisher(){return publisher;} Date getPublishdate(){return publishdate;} int getHowmany(){return howmany;} float getPrice(){return price;} void dispABook(){ cout lt;lt;numlt;lt; '\t'lt;lt;titlelt;lt; '\t'lt;lt;authorlt;lt; '\t'lt;lt;publisherlt;lt; '\t'; //获取Book信息 :书号标题 作者 出版社 日期 getPublishdate().disp(); //获取日期信息 coutlt;lt; '\t'lt;lt;pricelt;lt; '\t'lt;lt;howmany lt;lt; '\n' ; } friend class InBook; //友元类 friend class ReaderBorrowBook;};class Reader{//学号、姓名、学院、专业班级 读者类private: string num; //学号 string name; //姓名 string college; //专业 string classno; //班级public: Reader(string num0="20150000",string name0="NoName",string college0="信息学院",string clsn="网络工程15-1"){ num=num0;name=name0;college=college0; classno=clsn;} //构造函数初始化信息 void setNum(string num0){num=num0;} //功能函数 设置信息 void setName(string name0){name=name0;} void setCollege(string college0){college=college0;} void setClassno(string clsn){classno=clsn;} string getNum(){return num;} //功能函数 获取信息 string getName(){return name;} string getCollege(){return college;} string getClassno(){return classno;} void dispAReader(){ //显示信息 cout lt;lt;numlt;lt; "\t"lt;lt;namelt;lt; "\t"lt;lt;collegelt;lt; "\t"lt;lt;classnolt;lt; "\n"; } friend class Inreader; friend class ReaderBorrowBook;};class BorrowBook{ //借阅的书类private: string num; //学号、姓名、书号、书名、借阅日期、应还日期、归还日期 string name; string booknum; string title; Date borrowdate; Date toreturndate; Date returndate; BorrowBook(string num0="20150000",string name0="NoName",string booknum0="24416-5", string title0="数据结构",int bd=1,int bm=1,int by=2012,int td=1,int tm=5,int ty=2012,int rd=1,int rm=3,int ry=2012) :borrowdate(bd,bm,by),toreturndate(td,tm,ty),returndate(rd,rm,ry) { num=num0;name=name0; booknum=booknum0;title=title0; //初始化 } void setNum(string num0){num=num0;} //设置学号 void setName(string name0){name=name0;}//设置名字 void setBookNum(string num0){booknum=num0;}//设置书号 void setTitle(string title0){title=title0;}//书名 void setBorrowdate(int bd,int bm,int by){Date d(bd,bm,by);borrowdate=d;}//借阅日期 void setToreturndate(int td,int tm,int ty){Date d(td,tm,ty);toreturndate=d;}// void setReturndate(int rd,int rm,int ry){Date d(rd,rm,ry);returndate=d;}//归还日期 string getNum(){return num;} //获取学号 string getName(){return name;}//获取名字 string getBookNum(){return booknum;}//书号 string getTitle(){return title;}//书名 Date getBorrowdate(){return borrowdate;}//得到日期 Date getReturndate(){return returndate;} Date getToreturndate(){return toreturndate;} void dispBorrowBook() //显示值 { cout lt;lt;numlt;lt; "\t"lt;lt;namelt;lt; "\t"lt;lt;booknumlt;lt; "\t"lt;lt;titlelt;lt; "\t"; borrowdate.disp();coutlt;lt;"\t"; toreturndate.disp();coutlt;lt;"\t"; returndate.disp();coutlt;lt; "\n"; } friend class InBorrowBook; friend class ReaderBorrowBook;};void string2date(string pdates,int d[]) { int k=0,by,bm,bd; while((pdates[k]lt;'0'||pdates[k]gt;'9')amp;amp;klt;pdates.length())k++; by=0; for(;pdates[k]!='/'amp;amp;klt;pdates.length();k++) by=by*10+pdates[k]-'0'; k++;bm=0; for(;pdates[k]!='/'amp;amp;klt;pdates.length();k++) bm=bm*10+pdates[k]-'0'; if(pdates[k]=='/'){ k++;bd=0; for(;klt;pdates.length();k++) bd=bd*10+pdates[k]-'0'; } else bd=1; d[0]=by;d[1]=bm;d[2]=bd; }class InBook{ public: Book *book; //book[n],很多本书 int bookcount; //记数 void write2Bookfile() { string num,title,author,publisher,pdates; Date pdate; int i,bd,bm,by,ct; //多余变量吧 float price; ofstream outf( "d:\\book.txt", ios::out ) ; //写入的文件名应该与读出的文件名相同;调试时可以取不同的文件名,以免覆盖掉原文件 if ( !outf ) { cerr lt;lt; "File could not be open." lt;lt; endl ; } outflt;lt;"图书信息\n"; for(int i=0;ilt;bookcount;i++) //写入图书信息 { Date pd=book[i].getPublishdate(); outflt;lt;book[i].getNum()lt;lt; '\t'lt;lt;book[i].getTitle()lt;lt; '\t'; outflt;lt;book[i].getAuthor()lt;lt; '\t'lt;lt;book[i].getPublisher()lt;lt; '\t'; outflt;lt;pd.getYear()lt;lt;"/"lt;lt;pd.getMonth()lt;lt;"/"lt;lt;pd.getDay(); outflt;lt; '\t'lt;lt;book[i].getPrice()lt;lt; '\t'lt;lt;book[i].getHowmany()lt;lt; '\n' ; } outf.close() ; //关闭文件 }int inbookFile( char * fileName, int delLine) //获取图书信息{coutlt;lt;1lt;lt;endl; string num,title,author,publisher,pdates; Date pdate; int i,bd,bm,by,ct; float price; ifstream inf( fileName, ios::in ) ; if ( !inf ) { cerr lt;lt; "File could not be open." lt;lt; endl ; return 1; } char s[80]; for ( i=1; i lt;= delLine; i++ ) inf.getline( s, 80 ) ; i=0; while( !inf.eof() )// { inf.getline( s, 80 ) ; cout lt;lt; s lt;lt; endl ; } { inf.getline( s, 80,'\t' ) ;//num=s; inf.getline( s, 80,'\t' ) ;title=s; inf.getline( s, 80,'\t' ) ;//author=s; inf.getline( s, 80,'\t' ) ;//publisher=s; inf.getline( s, 80,'\t' ) ;//pdates=s; infgt;gt;pricegt;gt;ct; if(title.length()gt;0) i++; } bookcount=i; coutlt;lt;bookcountlt;lt;endl; inf.clear(); inf.seekg(0,ios::beg); for ( i=1; i lt;= delLine; i++ ) inf.getline( s, 80 ) ; book=new Book[bookcount+INC]; for ( i=0; i lt;bookcount; i++ ) { inf.getline( s, 80,'\t' ) ;num=s; inf.getline( s, 80,'\t' ) ;title=s; inf.getline( s, 80,'\t' ) ;author=s; inf.getline( s, 80,'\t' ) ;publisher=s; inf.getline( s, 80,'\t' ) ;pdates=s; infgt;gt;pricegt;gt;ct;//inf,getchar(); if(title.length()gt;0){ int d[3]; if(num[0]==10)num=num.substr(1); string2date(pdates,d); by=d[0];bm=d[1];bd=d[2]; book[i]=Book(); book[i].setNum(num); book[i].setTitle(title); book[i].setAuthor(author); book[i].setPublisher(publisher); book[i].setPrice(price); book[i].setHowmany(ct); book[i].setPublishdate(bd,bm,by); } } inf.close() ; return bookcount; } friend class ReaderBorrowBook; int addbook(string num,string title,string author,string publisher,int bd,int bm,int by,float price,int ct)//添加图书信息 { int i=bookcount; book[i]=Book(); book[i].setNum(num); book[i].setTitle(title); book[i].setAuthor(author); book[i].setPublisher(publisher); book[i].setPrice(price); book[i].setHowmany(ct); book[i].setPublishdate(bd,bm,by); ++bookcount; return bookcount; } void searchbookbytitle(string title) //按照书名查找 { bool found=false; for(int i=0;ilt;bookcount;i++) if((book[i].getTitle()).find(title)!= string::npos) { //coutlt;lt;book[i].getTitle()lt;lt; book[i].getTitle().find(title)lt;lt;endl; coutlt;lt;ilt;lt;"\t"; book[i].dispABook(); found=true; //return i; } if(!found)coutlt;lt;"book title:"lt;lt;titlelt;lt;" not found."lt;lt;endl; //return -1; } int searchbookbytitlep(string title){ //精确查找 for(int i=0;ilt;bookcount;i++) if(book[i].getTitle()==title) { //coutlt;lt;book[i].getTitle()lt;lt; book[i].getTitle().find(title)lt;lt;endl; coutlt;lt;ilt;lt;"\t"; book[i].dispABook(); return i; } coutlt;lt;"book title:"lt;lt;titlelt;lt;" not found."lt;lt;endl; return -1; } void searchbookbyauthor(string author) //按照作者查找 { bool found=false; for(int i=0;ilt;bookcount;i++) if((book[i].getAuthor()).find(author)!= string::npos) { //coutlt;lt;book[i].getTitle()lt;lt; book[i].getTitle().find(title)lt;lt;endl; coutlt;lt;ilt;lt;"\t"; book[i].dispABook(); found=true; //return i; } if(!found)coutlt;lt;"book author:"lt;lt;authorlt;lt;" not found."lt;lt;endl; //return -1; } int searchbookbyauthorp(string author) //精确查找 { for(int i=0;ilt;bookcount;i++) if(book[i].getAuthor()==author) { //coutlt;lt;book[i].getTitle()lt;lt; book[i].getTitle().find(title)lt;lt;endl; coutlt;lt;ilt;lt;"\t"; book[i].dispABook(); return i; } coutlt;lt;"book author:"lt;lt;authorlt;lt;" not found."lt;lt;endl; return -1; } void searchbookbypub(string pub) //按照出版社查找 { bool found=false; for(int i=0;ilt;bookcount;i++) if((book[i].getPublisher()).find(pub)!= string::npos) { //coutlt;lt;book[i].getTitle()lt;lt; book[i].getTitle().find(title)lt;lt;endl; coutlt;lt;ilt;lt;"\t"; book[i].dispABook(); found=true; //return i; } if(!found)coutlt;lt;"book publisher:"lt;lt;publt;lt;" not found."lt;lt;endl; //return -1; } int searchbookbypubp(string pub) { for(int i=0;ilt;bookcount;i++) if(book[i].getPublisher()==pub) { //coutlt;lt;book[i].getTitle()lt;lt; book[i].getTitle().find(title)lt;lt;endl; coutlt;lt;ilt;lt;"\t"; book[i].dispABook(); return i; } return -1; } void searchbookbynum(string num) {//模糊查找包含num的串 bool found=false; for(int i=0;ilt;bookcount;i++) if((book[i].getNum()).find(num)!= string::npos) { //coutlt;lt;book[i].getTitle()lt;lt; book[i].getTitle().find(title)lt;lt;endl; coutlt;lt;ilt;lt;"\t"; book[i].dispABook(); found=true; // return i; } if(!found)coutlt;lt;"book num:"lt;lt;numlt;lt;" not found."lt;lt;endl; // return -1; } int searchbookbynump(string num) {//精确查找等于num的串 for(int i=0;ilt;bookcount;i++) if((book[i].getNum())==num) { //coutlt;lt;book[i].getTitle()lt;lt; book[i].getTitle().find(title)lt;lt;endl; coutlt;lt;ilt;lt;"\t"; book[i].dispABook(); return i; } return -1; } void sortbookbynum() //按照书号排序 { for(int i=0;ilt;bookcount;i++){ int k=i; for(int j=i+1;jlt;bookcount;j++) if(book[j].getNum()lt;book[k].getNum()) k=j; //coutlt;lt;klt;lt;" kamp;i "lt;lt;ilt;lt;" :"lt;lt;book[i].getNum()lt;lt;"---"lt;lt;book[k].getNum()lt;lt;endl; if(k!=i){ Book t=book[i];book[i]=book[k];book[k]=t; } } } void sortbookbytitle() //按照标题排序 { for(int i=0;ilt;bookcount;i++) { int k=i; for(int j=i+1;jlt;bookcount;j++) if(book[j].getTitle()lt;book[k].getTitle()) k=j; if(k!=i){ Book t=book[i];book[i]=book[k];book[k]=t; } } } void changebookbynum(string oldnum,string newnum) //按书号改信息 { int k=searchbookbynump(oldnum); if(kgt;=0) { book[k].setNum(newnum); coutlt;lt;"changebookbynum successed:"lt;lt;endl; book[k].dispABook(); } else coutlt;lt;"changebook failed. No book of num="lt;lt;oldnumlt;lt;endl; } void deletebookbynum(string num) //按书号删除书目 { int k=searchbookbynump(num); if(kgt;=0) { coutlt;lt;"Book to be deleted :"lt;lt;endl; book[k].dispABook(); book[k]=book[bookcount-1]; coutlt;lt;"deletebookbynum successed:"lt;lt;endl; bookcount--; //return bookcount; } else coutlt;lt;"deletebook failed. No book of num="lt;lt;numlt;lt;endl; } void changebookbytitle(string oldtitle,string newtitle) { //按标题修改书目 int k=searchbookbytitlep(oldtitle); if(kgt;=0) { book[k].setTitle(newtitle); coutlt;lt;"changebookbytitle successed:"lt;lt;endl; book[k].dispABook(); } else coutlt;lt;"changebook failed. No book of title="lt;lt;oldtitlelt;lt;endl; } void deletebookbytitle(string title){ //按书名删除书 int k=searchbookbytitlep(title); if(kgt;=0) { coutlt;lt;"Book to be deleted :"lt;lt;endl; book[k].dispABook(); book[k]=book[bookcount-1]; coutlt;lt;"deletebookbytitle successed:"lt;lt;endl; bookcount--; //return bookcount; } else coutlt;lt;"deletebook failed. No book of title="lt;lt;titlelt;lt;endl; }};class InReader{ public: Reader *reader;int readercount; //reader[n],读者总数 void write2Readerfile() //写入读者信息 { string a1,b1,c1,d1; ofstream fout( "d:\\reader.txt", ios::out ); if ( !fout ) { cerr lt;lt; "File could not be open." lt;lt; endl ; } foutlt;lt;"读者信息\n"; for(int i=0;ilt;readercount;i++) foutlt;lt;reader[i].getNum()lt;lt;'\t'lt;lt;reader[i].getName()lt;lt;'\t'lt;lt;reader[i].getCollege()lt;lt;'\t'lt;lt;reader[i].getClassno()lt;lt;endl; fout.close(); }int inreaderFile( char * fileName, int delLine) //获取读者信息{coutlt;lt;1lt;lt;endl; string num,name,college,classno; int i; ifstream inf( fileName, ios::in ) ; if ( !inf ) { cerr lt;lt; "File could not be open." lt;lt; endl ; return 1; } char s[80]; for ( i=1; i lt;= delLine; i++ ) inf.getline( s, 80 ) ; i=0; while( !inf.eof() )// { inf.getline( s, 80 ) ; cout lt;lt; s lt;lt; endl ; } { inf.getline( s, 80,'\t' ) ;//num=s; inf.getline( s, 80,'\t' ) ;name=s; inf.getline( s, 80,'\t' ) ;//college=s; inf.getline( s, 80 ) ;//classno=s; if(name.length()gt;0) i++; } readercount=i; coutlt;lt;readercountlt;lt;endl; inf.clear(); inf.seekg(0,ios::beg); for ( i=1; i lt;= delLine; i++ ) inf.getline( s, 80 ) ; reader=new Reader[readercount+INC]; for ( i=0; i lt;readercount; i++ ) { inf.getline( s, 80,'\t' ) ;num=s; inf.getline( s, 80,'\t' ) ;name=s; inf.getline( s, 80,'\t' ) ;college=s; inf.getline( s, 80 ) ;classno=s; if(name.length()gt;0){ if(num[0]==10)num=num.substr(1); reader[i]=Reader(); reader[i].setNum(num); reader[i].setName(name); reader[i].setCollege(college); reader[i].setClassno(classno); } } inf.close() ; return readercount; } int addreader(string num,string name,string college,string classno) //添加读者 { int i=readercount; reader[i]=Reader(); reader[i].setNum(num); reader[i].setName(name); reader[i].setCollege(college); reader[i].setClassno(classno); ++readercount; return readercount; } void searchreaderbynum(string num){ //按学号查询读者 bool found=false; for(int i=0;ilt;readercount;i++) if((reader[i].getNum()).find(num)!= string::npos) { coutlt;lt;ilt;lt;"\t"; reader[i].dispAReader(); found=true; //return i; } if(!found)coutlt;lt;"reader of num: "lt;lt;numlt;lt;" not found"lt;lt;endl; //return -1; } int searchreaderbynump(string num){ //按学号精确查询读者 for(int i=0;ilt;readercount;i++) if(reader[i].getNum()==num) { coutlt;lt;ilt;lt;"\t"; reader[i].dispAReader(); return i; } return -1; } void searchreaderbyname(string nnname) //按名字查询读者 { for(int i=0;ilt;readercount;i++) if(reader[i].getName()==nnname) { coutlt;lt;ilt;lt;"\t"; reader[i].dispAReader(); // return i; } // return -1; } int searchreaderbynamep(string nnname){//模糊查找 for(int i=0;ilt;readercount;i++) if(reader[i].getName()==nnname) { coutlt;lt;ilt;lt;"\t"; reader[i].dispAReader(); return i; } return -1; } void searchreaderbyzybj(string zzy) //按学院查找 { for(int i=0;ilt;readercount;i++) if(reader[i].getCollege()==zzy) { coutlt;lt;ilt;lt;"\t"; reader[i].dispAReader(); // return i; } // return -1; } int searchreaderbyzybjp(string zzy){ //精确查找 for(int i=0;ilt;readercount;i++) if(reader[i].getCollege()==zzy) { coutlt;lt;ilt;lt;"\t"; reader[i].dispAReader(); return i; } return -1; } int searchreaderbyzybjjp(string bbj){ //按专业班级查找 for(int i=0;ilt;readercount;i++) if(reader[i].getClassno()==bbj) { coutlt;lt;ilt;lt;"\t"; reader[i].dispAReader(); return i; } return -1; } void searchreaderbyzybjj(string bbj) //模糊查找 { for(int i=0;ilt;readercount;i++) if(reader[i].getClassno()==bbj) { coutlt;lt;ilt;lt;"\t"; reader[i].dispAReader(); // return i; } // return -1; } void deletereaderbyxuehao(string xxhh){ //按学号删除读者 int k=searchreaderbynump(xxhh); if(kgt;=0) { coutlt;lt;"reader to be deleted :"lt;lt;endl; reader[k].dispAReader(); reader[k]=reader[readercount-1]; coutlt;lt;"deletereaderbyxuehao successed:"lt;lt;endl; readercount--; //return bookcount; } else coutlt;lt;"deletereader failed. No reader of xuehao="lt;lt;xxhhlt;lt;endl; } void deletereaderbyxingming(string xxh1h){ //按姓名删除读者 int k=searchreaderbynamep(xxh1h); if(kgt;=0) { coutlt;lt;"reader to be deleted :"lt;lt;endl; reader[k].dispAReader(); reader[k]=reader[readercount-1]; coutlt;lt;"deletereaderbyxingming successed:"lt;lt;endl; readercount--; //return bookcount; } else coutlt;lt;"deletereader failed. No reader of xingming="lt;lt;xxh1hlt;lt;endl; } void sortreaderbyxuahao() //按学号排序 { for(int i=0;ilt;readercount;i++) { int k=i; for(int j=i+1;jlt;readercount;j++) if(reader[j].getNum()lt;reader[k].getNum()) k=j; if(k!=i){ Reader t=reader[i];reader[i]=reader[k];reader[k]=t; } } } void sortreaderbyxueyuan() //按学院排序 { for(int i=0;ilt;readercount;i++) { int k=i; for(int j=i+1;jlt;readercount;j++) if(reader[j].getCollege()lt;reader[k].getCollege()) k=j; if(k!=i){ Reader t=reader[i];reader[i]=reader[k];reader[k]=t; } } } void changereaderbyxuehao(string old,string news) //修改学号 { int k=searchreaderbynump(old); if(kgt;=0) { reader[k].setNum(news); coutlt;lt;"changereaderbyxuehao successed:"lt;lt;endl; reader[k].dispAReader(); } else coutlt;lt;"changereader failed. No reader of num="lt;lt;oldlt;lt;endl; } void changereaderbyxingming(string old,string news) //修改姓名 { int k=searchreaderbynamep(old); if(kgt;=0) { reader[k].setName(news); coutlt;lt;"changereaderbyxuehao successed:"lt;lt;endl; reader[k].dispAReader(); } else coutlt;lt;"changereader failed. No reader of num="lt;lt;oldlt;lt;endl; } void changereaderbyxueyuan(string old,string news) //修改学院 { int k=searchreaderbyzybjp(old); if(kgt;=0) { reader[k].setCollege(news); coutlt;lt;"changereaderbyxuehao successed:"lt;lt;endl; reader[k].dispAReader(); } else coutlt;lt;"changereader failed. No reader of num="lt;lt;oldlt;lt;endl; } void changereaderbyzybj(string old,string news) //修改专业班级 { int k=searchreaderbyzybjjp(old); if(kgt;=0) { reader[k].setClassno(news); coutlt;lt;"changereaderbyxuehao successed:"lt;lt;endl; reader[k].dispAReader(); } else coutlt;lt;"changereader failed. No reader of num="lt;lt;oldlt;lt;endl; } friend class ReaderBorrowBook;};class InBorrowBook{ public: friend class ReaderBorrowBook; BorrowBook *borrowbook;int borrowbookcount; //borrowbook[n],借书总数 void searchborrowbookbyxuehao(string b) { for(int i=0;ilt;borrowbookcount;i++) if(borrowbook[i].getNum()==b) { coutlt;lt;ilt;lt;"\t"; borrowbook[i].dispBorrowBook(); // return i; } // return -1; } void searchborrowbookbysm(string b) //按书名查找借阅书 { for(int i=0;ilt;borrowbookcount;i++) if(borrowbook[i].getTitle()==b) { coutlt;lt;ilt;lt;"\t"; borrowbook[i].dispBorrowBook(); // return i; } // return -1; } void write2BorrowBookfile() //写入借书文件 { ofstream ffout( "d:\\borrowbook.txt", ios::out ); if ( !ffout ) { cerr lt;lt; "File could not be open." lt;lt; endl ; } ffoutlt;lt;"借阅信息\n"; for(int i=0;ilt;borrowbookcount;i++) { Date bbb=borrowbook[i].getBorrowdate(); Date ddd=borrowbook[i].getToreturndate(); Date ccc=borrowbook[i].getReturndate(); ffoutlt;lt;borrowbook[i].getNum()lt;lt;'\t'lt;lt;borrowbook[i].getName()lt;lt;'\t'lt;lt;borrowbook[i].getBookNum()lt;lt;'\t'lt;lt;borrowbook[i].getTitle()lt;lt;'\t'lt;lt;bbb.getYear()lt;lt;"/"lt;lt;bbb.getMonth()lt;lt;"/"lt;lt;bbb.getDay()lt;lt;'\t'lt;lt;ddd.getYear()lt;lt;"/"lt;lt;ddd.getMonth()lt;lt;"/" lt;lt;ddd.getDay()lt;lt;'\t'lt;lt;ccc.getYear()lt;lt;"/"lt;lt;ccc.getMonth()lt;lt;"/" lt;lt;ccc.getDay()lt;lt;endl; } }int inborrowbookFile( char * fileName, int delLine) //获取借阅图书信息{coutlt;lt;1lt;lt;endl; string num,name,booknum,title; string borrowdates; string toreturndates; string returndates; int i; ifstream inf( fileName, ios::in ) ; if ( !inf ) { cerr lt;lt; "File could not be open." lt;lt; endl ; return 1; } char s[80]; for ( i=1; i lt;= delLine; i++ ) inf.getline( s, 80 ) ; i=0; while( !inf.eof() ) { inf.getline( s, 80,'\t') ; inf.getline( s, 80,'\t' ) ; inf.getline( s, 80,'\t' ) ; inf.getline( s, 80 ) ; if(strlen(s)gt;1) i++; } borrowbookcount=i; coutlt;lt;borrowbookcountlt;lt;endl; inf.clear(); inf.seekg(0,ios::beg); for ( i=1; i lt;= delLine; i++ ) inf.getline( s, 80 ) ; borrowbook=new BorrowBook[borrowbookcount+INC]; for ( i=0; i lt;borrowbookcount; i++ ) { inf.getline( s, 80,'\t' ) ;num=s; inf.getline( s, 80,'\t' ) ;name=s; inf.getline( s, 80,'\t' ) ;booknum=s; inf.getline( s, 80,'\t' ) ;title=s; inf.getline( s, 80,'\t' ) ;borrowdates=s; inf.getline( s, 80,'\t' ) ;toreturndates=s; inf.getline( s, 80,'\n' ) ;returndates=s; if(name.length()gt;0){ if(num[0]==10)num=num.substr(1); borrowbook[i]=BorrowBook(); int d[3]; string2date(borrowdates,d); int by=d[0],bm=d[1],bd=d[2]; borrowbook[i].setBorrowdate(bd,bm,by); string2date(toreturndates,d); by=d[0];bm=d[1];bd=d[2]; borrowbook[i].setToreturndate(bd,bm,by); string2date(returndates,d); by=d[0];bm=d[1];bd=d[2]; borrowbook[i].setReturndate(bd,bm,by); borrowbook[i].setNum(num); borrowbook[i].setName(name); borrowbook[i].setBookNum(booknum); borrowbook[i].setTitle(title); } } inf.close() ; return borrowbookcount; } friend class ReaderBorrowBook; int searchbyreaderbook(string readernum,string booknum) //按学号查询 { for(int i=0;ilt;borrowbookcount;i++) if((borrowbook[i].getNum())==readernumamp;amp;(borrowbook[i].getBookNum())==booknum) { coutlt;lt;ilt;lt;"\t"; borrowbook[i].dispBorrowBook(); return i; } return -1; }};class ReaderBorrowBook{ InBook bk; //声明三个类 InReader rd; InBorrowBook bb; public: void write2file(){ bk.write2Bookfile(); //写入文件保存信息 rd.write2Readerfile(); bb.write2BorrowBookfile(); } void init(){ //打开三个文件 bk.inbookFile( "d:\\book.txt", 1); rd.inreaderFile( "d:\\reader.txt", 1); bb.inborrowbookFile( "d:\\borrowbook.txt", 1); } void dispBook(){ //显示书信息 for ( int i=0; i lt;bk.bookcount; i++ ) {cout lt;lt;ilt;lt;":"; bk.book[i].dispABook();} } void dispReader(){ //显示读者信息 for ( int i=0; i lt;rd.readercount; i++ ) {cout lt;lt;ilt;lt;":";rd.reader[i].dispAReader();} } void dispBorrowbook(){ //借书信息查询 for ( int i=0; i lt;bb.borrowbookcount; i++ ) {cout lt;lt;ilt;lt;":";bb.borrowbook[i].dispBorrowBook();} } void dispCount(){ //总数显示 coutlt;lt;bk.bookcountlt;lt;endl;coutlt;lt;rd.readercountlt;lt;endl;coutlt;lt;bb.borrowbookcountlt;lt;endl; } void addbook() //添加书 { string num,title,author,publisher; char num0[80],tit[80],auth[80],pub[80]; int pd,pm,py,howmany; float price; Date publishdate; coutlt;lt;"书号、书名、作者、出版社、出版日期(yyyy mm dd)、定价、存馆数量"lt;lt;endl; string num1="24416-5",title0="数据结构",author0="王红梅,胡明,王涛",pub0="清华大学出版社"; int pd0=1,pm0=1,py0=2012; float price0=29.0; int howmany0=10; //bookcount= cingt;gt;num1gt;gt;title0gt;gt;author0gt;gt;pub0gt;gt;pd0gt;gt;pm0gt;gt;py0gt;gt;price0gt;gt;howmany0; bk.addbook(num1,title0,author0,pub0,pd0,pm0,py0,price0,howmany0); bk.write2Bookfile(); int i=bk.bookcount-1; cout lt;lt;ilt;lt;":"; bk.book[i].dispABook(); } void addreader(){ //添加读者 string num,name,college,classno; char num0[80],nam[80],coll[80],clas[80]; coutlt;lt;"学号\t姓名\t学院\t专业班级:"lt;lt;endl; string num1="20151000",name0="王涛",college0="computer",class0="network class 1"; cingt;gt;num1gt;gt;name0gt;gt;college0gt;gt;class0; rd.addreader(num1,name0,college0,class0); rd.write2Readerfile(); int i=rd.readercount-1; cout lt;lt;ilt;lt;":"; rd.reader[i].dispAReader(); } void searchBook(){ //查书 coutlt;lt;"2.图书信息查询:分别按书名, 按作者名, 按出版社进行查询。"lt;lt;endl; char tit[80]; string title="数据结构",author="胡明",pub="机械工业"; int i,j,k,select; while(1){ coutlt;lt;"图书信息查询:"lt;lt;endl; coutlt;lt;"1.按书名查询"lt;lt;endl; coutlt;lt;"2.按作者名查询"lt;lt;endl; coutlt;lt;"3.按出版社查询"lt;lt;endl; coutlt;lt;"0. return"lt;lt;endl; cingt;gt;select; cin.get(); switch(select){ case 1: coutlt;lt;"书名:"; getline(cin,title,'\n'); bk.searchbookbytitle(title); break; case 2: coutlt;lt;"作者名:"; getline(cin,author,'\n'); bk.searchbookbyauthor(author); break; case 3: coutlt;lt;"出版社:"; getline(cin,pub,'\n'); bk.searchbookbypub(pub);break; case 0:return; } } } void sortbook(){ //排序 int select; coutlt;lt;"3.图书信息排序:按书号、书名等按升序进行排序。"lt;lt;endl; coutlt;lt;"图书信息排序:"lt;lt;endl; coutlt;lt;"1.按书号排序"lt;lt;endl; coutlt;lt;"2.按书名排序"lt;lt;endl; coutlt;lt;"0. return"lt;lt;endl; cingt;gt;select; switch(select){ case 1: coutlt;lt;"书号:"; bk.sortbookbynum(); dispBook(); break; case 2: coutlt;lt;"书名:"; bk.sortbookbytitle(); dispBook(); break; case 0:return; } } void editbook(){ //编辑书 string oldtitle="VisualBasic 程序设计教程",newtitle="VisualBasic 程序设计教程-C",oldnum="40667",newnum="40667-C"; int select; coutlt;lt;"4.图书信息的修改、删除:按书号或书名进行图书的修改和删除。"lt;lt;endl; while(1){ coutlt;lt;"图书信息的修改、删除:"lt;lt;endl; coutlt;lt;"1.按书号修改"lt;lt;endl; coutlt;lt;"2.按书号删除"lt;lt;endl; coutlt;lt;"3.按书名修改"lt;lt;endl; coutlt;lt;"4.按书名删除"lt;lt;endl; coutlt;lt;"0. return"lt;lt;endl; cingt;gt;select; cin.get(); switch(select){ case 1: coutlt;lt;"old书号:"; getline(cin,oldnum,'\n'); coutlt;lt;"new书号:"; getline(cin,newnum,'\n'); coutlt;lt;"changebookbynum: "lt;lt;oldnumlt;lt;" to "lt;lt;newnumlt;lt;endl; bk.changebookbynum(oldnum,newnum); //dispBook(); break; case 2: coutlt;lt;"delete书号:"; getline(cin,oldnum,'\n'); coutlt;lt;"delete书号:"lt;lt;oldnumlt;lt;endl; bk.deletebookbynum(oldnum); //dispBook(); break; case 3: coutlt;lt;"old书名:"; getline(cin,oldtitle,'\n'); coutlt;lt;"new书名:"; getline(cin,newtitle,'\n'); coutlt;lt;"changebookbytitle: "lt;lt;oldtitlelt;lt;" to "lt;lt;newtitlelt;lt;endl; bk.changebookbytitle(oldtitle,newtitle); //dispBook(); break; case 4: coutlt;lt;"delete书名:"; getline(cin,oldtitle,'\n'); coutlt;lt;"deletebookbytitle: "lt;lt;oldtitlelt;lt;endl; bk.deletebookbytitle(oldtitle); //dispBook(); break; case 0: bk.write2Bookfile(); coutlt;lt;"修改成功"lt;lt;endl; return; } } } void readerborrowabook(){ //借阅 coutlt;lt;"9.图书借阅:输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,"lt;lt;endl; string rdnum="20061709",booknum="33071",name,title; int select,rdpos,bookpos,y,m,d; while(1){ coutlt;lt;"图书借阅:"lt;lt;endl; coutlt;lt;"1.借书"lt;lt;endl; coutlt;lt;"0.return"lt;lt;endl; cingt;gt;select; cin.get(); if(select==0)return; coutlt;lt;"borrow学号:"; getline(cin,rdnum,'\n'); coutlt;lt;"borrow书号:"; getline(cin,booknum,'\n'); bookpos=bk.searchbookbynump(booknum); rdpos=rd.searchreaderbynump(rdnum); if(bookposgt;0amp;amp;rdposgt;0){ int hm=bk.book[bookpos].getHowmany(); if(hmgt;0){ name=rd.reader[rdpos].getName(); title=bk.book[bookpos].getTitle(); bk.book[bookpos].setHowmany(hm-1); //修改图书信息表中的存馆数量 bb.borrowbook[bb.borrowbookcount].setNum(rdnum); bb.borrowbook[bb.borrowbookcount].setBookNum(booknum); bb.borrowbook[bb.borrowbookcount].setName(name); bb.borrowbook[bb.borrowbookcount].setTitle(title); SYSTEMTIME ct; GetLocalTime(amp;ct);//取系统时间,如果用GetSystemTime(amp;ct);那么获取的是格林尼治标准时间 y=ct.wYear; m=ct.wMonth; d=ct.wDay; Date toret=Date(d,m,y)+60; bb.borrowbook[bb.borrowbookcount].setBorrowdate(d,m,y); bb.borrowbook[bb.borrowbookcount].setToreturndate(toret.getDay(),toret.getMonth(),toret.getYear()); bb.borrowbook[bb.borrowbookcount].setReturndate(1,1,1); bb.borrowbookcount++; } else coutlt;lt;booknumlt;lt;" 存馆数量=0"lt;lt;". can't be borrowed. "lt;lt;endl; } else{ if(bookposlt;0)coutlt;lt;"No book "lt;lt;booknumlt;lt;". can't borrow!"lt;lt;endl; if(rdposlt;0)coutlt;lt;"No reader "lt;lt;rdnumlt;lt;". can't borrow!"lt;lt;endl; } } } void readerreturnabook(){ //归还 coutlt;lt;"10.图书归还:输入学号+书名,修改图书信息表中的存馆数量,图书借阅表中记录该同学的归还日期。"lt;lt;endl; char tit[80]; string rdnum="20061709",booknum="33071",name,title; int selectttt,rdpos,bookpos,y,m,d; while(1){ coutlt;lt;"图书归还:"lt;lt;endl; coutlt;lt;"1.还书"lt;lt;endl; coutlt;lt;"0.return"lt;lt;endl; cingt;gt;selectttt; cin.get(); if(selectttt==0) {return;} coutlt;lt;"return学号:"lt;lt;endl; getline(cin,rdnum,'\n'); coutlt;lt;"return书号:"; getline(cin,booknum,'\n'); bookpos=bk.searchbookbynump(booknum); rdpos=rd.searchreaderbynump(rdnum); int k; k=bb.searchbyreaderbook(rdnum,booknum); if(kgt;=0){ if(bookposgt;0amp;amp;rdposgt;0){ bk.book[bookpos].setHowmany(bk.book[bookpos].getHowmany()+1); SYSTEMTIME ct; GetLocalTime(amp;ct);//取系统时间 y=ct.wYear; m=ct.wMonth; d=ct.wDay; bb.borrowbook[k].setReturndate(d,m,y); } else{ if(bookposlt;0)coutlt;lt;"No book "lt;lt;booknumlt;lt;". can't return!"lt;lt;endl; if(rdposlt;0)coutlt;lt;"No reader "lt;lt;rdnumlt;lt;". can't return!"lt;lt;endl; }} else coutlt;lt;"No borrowbook "lt;lt;endl; } } void searchreader() { string xuehao ,xingming,zzy,bbj; coutlt;lt;"6.读者信息查询:分别按学号、姓名、班级等进行查询。"lt;lt;endl; int selectt; while(1){ coutlt;lt;"读者信息查询:"lt;lt;endl; coutlt;lt;"1.按学号查询"lt;lt;endl; coutlt;lt;"2.按姓名查询"lt;lt;endl; coutlt;lt;"3. 按学院查询"lt;lt;endl; coutlt;lt;"4. 按专业班级查询"lt;lt;endl; coutlt;lt;"0. return"lt;lt;endl; cingt;gt;selectt; cin.get(); switch(selectt) { case 1: coutlt;lt;"学号:"lt;lt;endl; getline(cin,xuehao,'\n'); coutlt;lt;1lt;lt;endl; rd.searchreaderbynum(xuehao); break; case 2:coutlt;lt;"姓名:"lt;lt;endl; getline(cin,xingming,'\n'); rd.searchreaderbyname(xingming); break; case 3:coutlt;lt;"学院: "lt;lt;endl; getline(cin,zzy,'\n'); rd.searchreaderbyzybj(zzy); break; case 4:coutlt;lt;"专业班级: "lt;lt;endl; getline(cin,bbj,'\n'); rd.searchreaderbyzybjj(bbj); break; case 0: return; } } } void sortreader() { int selectt1; coutlt;lt;"7:读者信息排序:按学号、学院等按升序进行排序。"lt;lt;endl; coutlt;lt;"读者信息排序:"lt;lt;endl; coutlt;lt;"1.按学号排序"lt;lt;endl; coutlt;lt;"2.按学院排序"lt;lt;endl; coutlt;lt;"0. return"lt;lt;endl; cingt;gt;selectt1; switch(selectt1){ case 1: coutlt;lt;"学号:"; rd.sortreaderbyxuahao(); dispReader(); break; case 2: coutlt;lt;"学院:"; rd.sortreaderbyxueyuan(); dispReader(); break; case 0:return; } }void editreader(){ string xh,xm,xy,bj,newxh,newxm,newxy,newbj; int select2; coutlt;lt;"8.学生信息的修改、删除:。"lt;lt;endl; while(1){ coutlt;lt;"学生信息的修改、删除:"lt;lt;endl; coutlt;lt;"1.按学号修改"lt;lt;endl; coutlt;lt;"2.按学号删除"lt;lt;endl; coutlt;lt;"3.按姓名修改"lt;lt;endl; coutlt;lt;"4.按姓名删除"lt;lt;endl; coutlt;lt;"0. return"lt;lt;endl; cingt;gt;select2; cin.get(); switch(select2) { case 1:coutlt;lt;"要修改学生的学号为:"lt;lt;endl; cingt;gt;xh; coutlt;lt;"请输入新学号"lt;lt;endl; cingt;gt;newxh; rd.changereaderbyxuehao(xh,newxh); break; case 2:coutlt;lt;"要删除的学生学号为:"lt;lt;endl; cingt;gt;xh; rd.deletereaderbyxuehao(xh); break; case 3:coutlt;lt;"修改的学生姓名为:"lt;lt;endl; cingt;gt;xm; coutlt;lt;"请输入修改后的姓名:"lt;lt;endl; cingt;gt;newxm; rd.changereaderbyxingming(xm,newxm); break; case 4:coutlt;lt;"要删除的学生姓名为:"lt;lt;endl; cingt;gt;xm; rd.deletereaderbyxingming(xm); break; case 0: rd.write2Readerfile(); coutlt;lt;"修改成功"; return; }}} void searchreaderborrowbook() { int bz; string xxh,ssm; while(1) {coutlt;lt;"11.图书借阅查询:分别按学号、书名、学院等进行查询。"lt;lt;endl; coutlt;lt;"1.按学号查询"lt;lt;endl; coutlt;lt;"2.按书名查询"lt;lt;endl; coutlt;lt;"0.return"lt;lt;endl; cingt;gt;bz; switch(bz) { case 1:coutlt;lt;"请输入学号"lt;lt;endl; cingt;gt;xxh; bb.searchborrowbookbyxuehao(xxh);break; case 2:coutlt;lt;"请输入书名"lt;lt;endl; cingt;gt;ssm;bb.searchborrowbookbysm(ssm);break; case 0: return; } } }};int main(){ ReaderBorrowBook rbb; rbb.init(); rbb.dispBook(); rbb.dispReader(); rbb.dispBorrowbook(); rbb.dispCount(); int select; while(1){ coutlt;lt;"菜单选择功能:"lt;lt;endl; coutlt;lt;"1.图书信息添加功能:包括书号、书名、作者、出版社名称、存馆数量、定价等"lt;lt;endl; coutlt;lt;"2.图书信息查询:分别按书名, 按作者名, 按出版单位等进行查询。"lt;lt;endl; coutlt;lt;"3.图书信息排序:按书号、书名等按升序进行排序。"lt;lt;endl; coutlt;lt;"4.图书信息的修改、删除:按书号或书名进行图书的修改和删除。"lt;lt;endl; coutlt;lt;"5.读者信息添加功能:包括学号、姓名、学院、专业班级等。"lt;lt;endl; coutlt;lt;"6.读者信息查询:分别按学号、姓名、班级等进行查询。"lt;lt;endl; coutlt;lt;"7.读者信息排序:按学号、学院等按升序进行排序。"lt;lt;endl; coutlt;lt;"8.读者信息的修改、删除:按学号+姓名进行读者信息的修改和删除。"lt;lt;endl; coutlt;lt;"9.图书借阅:输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,"lt;lt;endl; coutlt;lt;"借出相应数量后修改图书信息表中的存馆数量,在图书借阅表添加该同学的借阅。"lt;lt;endl; coutlt;lt;"10.图书归还:输入学号+书名,修改图书信息表中的存馆数量,在图书借阅表中记录该同学的归还时间。"lt;lt;endl; coutlt;lt;"11.图书借阅查询:分别按学号、书名、学院等进行查询。"lt;lt;endl; coutlt;lt;"0. exit"lt;lt;endl; cingt;gt;select; switch(select){ case 1:rbb.addbook(); rbb.dispCount();break; case 2:rbb.searchBook();break; case 3:rbb.sortbook();break; case 4:rbb.editbook();break; case 5:rbb.addreader(); rbb.dispCount();break; case 6:rbb.searchreader();break; case 7:rbb.sortreader();break; case 8:rbb.editreader();break; case 9:rbb.readerborrowabook();break; case 10:rbb.readerreturnabook();break; case 11:rbb.searchreaderborrowbook();break; case 0:rbb.write2file();exit(0); } } return 0;}

部分截图

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号