当前位置:文档之家› C++图书管理系统课程设计报告

C++图书管理系统课程设计报告

目录第一章需求分析3(一) 系统总体功能需求2〔二〕图书借书模块功能分析3〔四〕图书维护模块功能的需求4(七) 离开功能6第二章图书管理系统界面设计6(一) 初始界面6(二) 图书维护7(三) 读者维护界面7(四) 图书借还8〔五〕不存在提示8〔六〕离开8第三章图书管理系统应用程序代码9(一) 读者模块91〕读者类,实现对读者的信息的描述 (9)2〕读者类库,实现建立读者的个人资料 (11)(二) 图书模块141〕图书类,实现对图书的描述,图书的编号,书名,借出,还入等 (14)2〕图书库类,实现对图书的维护,查找,删除等 (15)(三) 主程序模块18main() 函数的实现,程序的主界面的引导 (18)〔四〕完整程序19第四章完毕语29第五章参考文献30*******************************图书馆管理系统运用面向对象方法对图书馆管理系统进展分析图书馆管理系统是我国大局部院校或其它部门不可缺少的局部,书籍是人类精神食粮,尤其对一些学校,图书馆来说,非常重要。

在软件开发中,以计算机图书为主,称"计算机图书管理系统〞。

计算机图书管理系统能够为用户实现借阅图书、管理等,随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一局部,使用计算机对图书资源信息进展管理,具有着手工管理所无法比较的优点.例如:查阅迅速、平安性高、可靠性高、存储量大、性好、本钱低等。

计算机图书管理系统能够单一定向计算机图书方面,具有实用,精简功能等效率,这些优点能够极提高图书馆管理的效率,也是企业、学校的科学化、正规化管理,与世界接轨的重要条件。

因此,开发这样一套管理软件是很有必要. 本案例开发的是"计算机图书管理系统〞================================================= ===第一章需求分析(一) 系统总体功能需求图书馆可以为借阅者提供借还书、查询书目等效劳。

借阅者每次最多能借5本书。

借书员主要负责借还及新增更改书目读者,查询等工作,图书管理员负责图书信息的增减及读者信息的维护。

所有人员都可以浏览和查询图书信息。

经过初步分析,图书馆管理系统应该具有以下几个模块:1〕借书模块2〕还书模块3〕图书维护模块4〕读者维护模块5〕提示6〕离开〔二〕图书借书模块功能分析图书借阅功能需要完成借阅者对相应图书的借阅。

借阅者的借阅数量是有限定的,系统会自动检查是超过限定借阅的数量,假设超过限定数量则不允许借阅。

假设当前要借阅的图书已经被其他人预约,读者也无法完成借阅。

〔三〕图书还书模块功能分析图书归还功能需要完成图书的归还工作。

〔四〕图书维护模块功能的需求实现对图书的描述,图书的编号,书名,借出,还入等,需要实现的功能为:图书编目,图书注册,更新书目,图书删除。

1)登记新书:将图书的特征信息〔书名、图书编号等〕存储在数据库中,图书的借阅、图书信息的查询都是以其作为根底的。

2)更新书目:当发现图书信息错误时,可以进展图书信息的修改。

3)图书查找:对图书馆新引进的书进展编制唯一的(图书编号),以便于图书的管理和查找。

4) 图书删除:将废旧的或丧失的图书信息删除,以减少数据库中的无用信息,也会减少图书查询中的错误信息。

(五) 读者维护模块功能的需求对读者信息描述,建立读者个人资料,借阅者管理需要实现的功能包括:借阅者注册,借阅者信息更新,借阅者注销,借阅者信息的查询。

1)读者新增:借阅者作为图书馆流通的主体,其信息的注册〔将读者的特征信息存储在数据库中〕也是图书馆自动化必须完成的任务。

2)读者信息更改:当发现借阅者信息错误或者当借阅者的*些信息发生变动时,可以对读者信息进展修改。

3) 读者删除:由于*些原因需要对该借阅者注销,只有满足条件的借阅者才能进展注销。

4〕读者查找:借阅者借阅书籍的历史查询。

(六) 提示功能当出现库存查无此书或读者时,给予相应提示。

(七)离开功能实现管理后的系统退出。

================================================= ===第二章图书管理系统界面设计(一)初始界面键盘输入相应数字进入相应界面。

(二) 图书维护选择3,进入图书维护界面,注册图书;1〕图书新增2〕图书更改3〕图书查找4〕图书删除(三) 读者维护界面选择4,进入读者维护界面,注册读者。

1〕读者新增2〕读者更改3〕读者删除4〕读者查找(四)图书借还1〕图书借阅,选择1,进入借书界面。

2〕图书归还,选择2,进入归还界面。

〔五〕不存在提示进入系统后,如果有不存在的书籍或读者,给予提示。

〔六〕离开管理后的系统退出。

====================================================第三章图书管理系统应用程序代码程序一共分为3个模块:读者模块,图书模块和主程序模块。

读者模块是由鸣静负责的,分为读者类和读者库类。

读者类主要实现对读者的信息的描述。

读者库类主要实现建立读者的个人资料。

图书模块是由悦负责的,分为图书类和图书库类。

图书类主要实现对图书的描述,图书的编号,书名,借出,还入等。

图书库类主要实现对图书的维护,查找,删除等。

主程序模块是由马春艳负责的,主要实现的是程序的主界面的引导。

(一) 读者模块1〕读者类,实现对读者的信息的描述class Reader{private:int tag; //删除标记1:已删0:未删int no; //读者编号char name[10]; //读者int borbook[Ma*bor];//所借图书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<Ma*bor;i++)borbook[i]=0;}void borrowbook(int bookid)//借书操作{for(int i=0;i<Ma*bor;i++){if (borbook[i]==0){borbook[i]=bookid;return;}}}int retbook(int bookid)//还书操作{for(int i=0;i<Ma*bor;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<Ma*bor;i++)if(borbook[i]!=0)cout << borbook[i] << "|";cout << "]"<<endl;}};2〕读者类库,实现建立读者的个人资料class RDatabase{private:int top; //读者记录指针Reader read[Ma*r];//读者记录public:RDatabase() //构造函数,将reader.t*t读到read[]中{Reader s;top=-1;fstream file("reader.t*t",ios::in);//翻开一个输入文件while (1){file.read((char *)&s,sizeof(s));if (!file)break;top++;read[top]=s;}file.close(); //关闭reader.t*t}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.t*t文件中{fstream file("reader.t*t",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;}}}(二) 图书模块1〕图书类,实现对图书的描述,图书的编号,书名,借出,还入等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;}};2〕图书库类,实现对图书的维护,查找,删除等class BDatabase{private:int top; //图书记录指针Book book[Ma*b]; //图书记录public:BDatabase()//构造函数,将book.t*t读到book[]中{Book b;top=-1;fstream file("book.t*t",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.t*t文件中{fstream file("book.t*t",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(){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<<"输入错误,请从新输入:";}}}〔四〕完整程序*include <iostream>*include <iomanip>*include <string>*include <fstream>//输入/输出文件流类using namespace std;const int Ma*r=100;//最多的读者const int Ma*b=100;//最多的图书const int Ma*bor=5;//每位读者最多借五本书//读者类,实现对读者的信息的描述class Reader{private:int tag; //删除标记1:已删0:未删int no; //读者编号char name[10]; //读者int borbook[Ma*bor];//所借图书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<Ma*bor;i++)borbook[i]=0;}void borrowbook(int bookid)//借书操作{for(int i=0;i<Ma*bor;i++){if (borbook[i]==0){borbook[i]=bookid;return;}}}int retbook(int bookid)//还书操作{for(int i=0;i<Ma*bor;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<Ma*bor;i++)if(borbook[i]!=0)cout << borbook[i] << "|";cout << "]"<<endl;}};//读者类库,实现建立读者的个人资料class RDatabase{private:int top; //读者记录指针Reader read[Ma*r];//读者记录public:RDatabase() //构造函数,将reader.t*t读到read[]中{Reader s;top=-1;fstream file("reader.t*t",ios::in);//翻开一个输入文件while (1){file.read((char *)&s,sizeof(s));if (!file)break;top++;read[top]=s;}file.close(); //关闭reader.t*t}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.t*t文件中{fstream file("reader.t*t",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[Ma*b]; //图书记录public:BDatabase()//构造函数,将book.t*t读到book[]中{Book b;top=-1;fstream file("book.t*t",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.t*t文件中{fstream file("book.t*t",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(){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++语言程序设计〔第四版〕主编莉董渊何江舟。

相关主题