最新C语言编程--图书馆管理系统.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC语言编程-图书馆管理系统C语言编程-图书馆管理系统#include <iostream.h>#include <iomanip.h>#include <string.h>#include <fstream> /输入/输出文件流类using namespace std;const int Max1=100; /最大学生数const int Max2=100; /最大图书量const int Max3=100; /每个学生最多借2本书class student /学生类,实现对学生的信息的描述 private: int tb; /删除标记 1:已删 0:未删 int no; /学号 char name10; /学生姓名 char yuanxi15; /院系 int ex; int borbookMax3;/所借图书 public: student() char *get_name() return name; /获取姓名 char *get_yuanxi()return yuanxi; /获取院系 int get_tb() return tb; /获取删除标记 int get_no() return no; /获取学号 int getex()return ex; void set_name(char na) /设置学生姓名 strcpy(name,na); void set_yuan(char yu) /设置学生所在院系 strcpy(yuanxi,yu); void set_no(int n) /设置学号 no=n; void delbook() tb=1; /设置删除标记 1:已删 0:未删 void addstudent(int n,int ex1,char *na,char *yu)/增加学生信息 tb=0; no=n; ex=ex1; strcpy(name,na); strcpy(yuanxi,yu); for(int i=0;i<Max3;i+) borbooki=0; void borrowbook(int bookid)/借书操作 for(int i=0;i<ex;i+) if (borbooki=0) borbooki=bookid; return; int retbook(int bookid)/还书操作 for(int i=0;i<Max3;i+) if(borbooki=bookid) borbooki=0; return 1; return 0; void out()/输出学生信息 cout <<"学号:"<< setw(5) << no <<"姓名:"<<setw(10) << name<<"院系:"<<setw(10)<<yuanxi<<"最大借书量:"<<setw(10)<<ex<<"图书号:" for(int i=0;i<ex;i+) if(borbooki!=0) cout << borbooki << "|" cout << ""<<endl; ;/学生类库,用来建立学生的个人资料 class studentbase private: int top; /学生记录指针 student readMax1;/学生记录public: studentbase() /构造函数,将student.txt读到read中 student s; top=-1; fstream file("student.txt",ios:in);/打开一个输入文件 while (1) file.read(char *)&s,sizeof(s); if (!file)break; top+; readtop=s; file.close(); /关闭 student.txt void clear()/删除所有学生信息 top=-1; int addstudent(int n,int ex1,char *na,char *yu)/添加学生时先查找此学生信息是否存在 student *p=query(n); if (p=NULL) top+; readtop.addstudent(n,ex1,na,yu); return 1; return 0; student *query(int kid)/按编号查找学生 for (int i=0;i<=top;i+) if (readi.get_no()=kid && readi.get_tb()=0) return &readi; return NULL; void disp() /输出所有学生信息 for (int i=0;i<=top;i+)if (readi.get_tb()=0) readi.out(); void studentdata();/学生库维护 studentbase() /析构函数,将read写到student.txt文件中 fstream file("student.txt",ios:out); for (int i=0;i<=top;i+) if (readi.get_tb()=0) file.write(char *)&readi,sizeof(readi); file.close(); ;void studentbase:studentdata() char choice;int ex2; char rname20; char ryuan20; int kid; student *r; while (choice!='0') cout <<"nnttt学 生 资 料 库nnntt 1 新 增nntt 2 更 改nntt 3 删 除nntt 4 查 找nntt 5 显 示nntt 6 全 删nntt 0 退 出"<<endl; cin >> choice; switch (choice) case '1': cout << "输入学号:" cin >> kid; cout <<"输入最大借书量:" cin>>ex2; cout << "输入学生姓名:" cin >> rname; cout<<"输入学生所在院系:" cin>>ryuan; addstudent(kid,ex2,rname,ryuan); break; case'2': cout << "输入学号:" cin >> kid; r=query(kid); if (r=NULL) cout << " 没有该学生信息! "<<endl; break; cout << "输入新的学生姓名:" cin >> rname; r->set_name(rname); cout <<"输入新的学生院系:" cin >> ryuan; r->set_yuan(ryuan); break; case '3': cout << " 输入学号:" cin >> kid; r=query(kid); if (r=NULL) cout <<"没有该学生信息!" << endl; break; r->delbook(); break; case '4': cout << "输入学号:" cin >> kid; r=query(kid); if (r=NULL) cout <<"没有该学生信息!"<< endl; break; r->out(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<"输入错误!请重新输入:"break; /图书类,实现对图书的描述,图书的编号,书名,作者,出版社,数量,借出,还入等class Bookprivate: int tb;/删除标记 1:已删 0:未删 int no;/图书编号 char name20;/书名 char zuozhe20;/作者 char chubanshe30;/出版社 int number;/图书数量 int onshelf;/是否再架 1:再架 2:已借public: Book() char *getname() return name; /获取书名 int getno() return no; /获取图书编号 char *getzuozhe()return zuozhe;/获取作者 char *getchubanshe()return chubanshe;/获取出版社 int getnumber()return number;/获取图书数量 int gettb() return tb; /获取删除标记 void setname(char na)/设置书名 strcpy(name,na); void setzuozhe(char zuo) /设置作者 strcpy(zuozhe,zuo); void setchubanshe(char chu) /设置出版社 strcpy(chubanshe,chu); void delbook() tb=1;/删除图书 void addbook(int n,char *na,char *zuo,char *chu)/增加图书 tb=0; no=n; strcpy(name,na); strcpy(zuozhe,zuo); strcpy(chubanshe,chu); 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 BDatabaseprivate: int top; /图书记录指针 Book bookMax2; /图书记录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+; booktop=b; file.close(); void clear()/全删 top=-1; int addbook(int n,char *na,char *zuo,char *chu)/增加图书 Book *p=query(n); if (NULL=p) top+; booktop.addbook(n,na,zuo,chu); return 1; return 0; Book *query(int bookid)/查找图书 for (int i=0;i<=top;i+) if (booki.getno()=bookid &&booki.gettb()=0) return &booki; return NULL; void bookdata();/图书库维护 void disp() for (int i=0;i<=top;i+) if (booki.gettb()=0) booki.disp(); BDatabase()/析构函数,将book写到book.txt文件中 fstream file("book.txt",ios:out); for (int i=0;i<=top;i+) if (booki.gettb()=0) file.write(char *)&booki,sizeof(booki); file.close(); ;void BDatabase:bookdata() char choice; char bname40; char bzuo40; char bchu40; int bookid; Book *b; while (choice!='0') cout <<"nnnttt图 书 资 料 库"<<endl<<endl; cout<<"tt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显 示ntt6 全 删ntt0 退 出"<<endl; cin >> choice; switch (choice) case '1': cout << "请输入图书编号:"<<endl; cin >> bookid; cout << "请输入图书书名:"<<endl; cin >> bname; addbook(bookid,bname,bzuo,bchu); 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,kid; studentbase ReaderDB; student *r; BDatabase BookDB; Book *b; while(choice!='0') ge:cout <<endl<<endl<<"ttt 图 书 管 理 系 统nnn" cout <<"ttt1 学 生nnttt2 图 书 管 理 员nnttt0 离 开"<<endl; cin >> choice; switch (choice) case '1': int a; cout<<"ttt 请 选 择 操 作:"<<endl; cout<<"ttt1 借 书nnttt2 还 书nnttt3 查看借阅数目信息nnttt0 离 开"<<endl; cin>>a; switch(a) case 1: cout <<" 学号:" cin >>kid; cout <<" 图书编号: " cin >>bookid; r=ReaderDB.query(kid);/按编号查找 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<<" 学号:" cin >>kid; cout << " 图书编号:" cin >>bookid; r=ReaderDB.query(kid); 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: r->out(); case 0: goto ge; default: cout<<"请重新选择:"<<endl; case '2': int b,c; cout<<"请输入管理员密码:"<<endl; cin>>c; if(c=123456) cout<<"ttt 请 选 择 操 作:"<<endl; cout<<"ttt1 图 书 资 料 库nnttt2 学 生 资 料 库nnttt0 离 开"<<endl; cin>>b; switch(b) case 1: BookDB.bookdata(); break; case 2: ReaderDB.studentdata(); break; case 0: goto ge; default:cout<<"请重新选择:" else cout<<"密码不正确!"<<endl; break; -