面向对象程序设计(C++语言)课程设计设计说明书图书管理系统的设计与实现起止日期:年月日至年月日学生姓名班级学号成绩指导教师(签字)计算机与通信学院年月日图书管理系统一.需求分析图书馆是目前生活中除了网络外的另一个获取知识的重要场所。
利用图书管理系统对图书记录进行统一管理,包括新增图书记录,更改图书记录,删除图书记录等功能,实现图书管理工作的系统化,规范化和自动化,为图书管理提供便利。
同时是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。
有助于加深对面向对象程序设计中基础理论和基本知识的理解,培养了实践能力,促进理论与实践的结合。
二.设计要求:1.图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:2.系统以菜单方式工作3.图书信息录入功能(图书信息用文件保存)--输入4.图书信息浏览功能--输出5.查询和排序功能:(至少一种查询方式)--算法6.按书名查询7.按作者名查询8.图书信息的删除与修改(可选项)三.概要设计1、类的设计①、Book类的设计(内部函数流程图):②、BDatabase类的设计:③、主函数流程图:4多态的实现class People{public:virtual void card(){cout<<"card people"<<endl;} };class Student:public People{public:virtual void card(){cout<<"card student"<<endl;} };四、详细设计:#define StrNum 20#define Type 20#include <iostream>#include <iomanip>#include <string>#include <fstream> //输入/输出文件流类using namespace std;const int Maxb=100; //最多可存储的图书class People{public:virtual void card(){cout<<"card people"<<endl;}};class Student:public People{public:virtual void card(){cout<<"card student"<<endl;} };class Book{private:int lab; //删除标记int num; //图书编号int add; //增加标记char number[StrNum]; //编号char bookname[StrNum]; //书名char bookkind[Type]; //图书类型public:Book(){}char getkind() //获取图书类型{return bookkind[Type];}char getname() //获取书名{return bookname[StrNum];}int getnum() //获取图书编号{return num;}int getlab() //获取删除标记{return lab;}void setname(char na[]) //设置书名{strcpy(bookname,na);}void setkind(char kin[]) //设置类型{strcpy(bookkind,kin);}void delbook() //删除图书{lab=1;}void addbook(int n,char *na,char *kin) //增加图书{lab=0;num=n;strcpy(bookname,na);strcpy(bookkind,kin);}void disp() //输出图书{cout.flags (ios::left); //设置对齐的标志位为左cout<<setw(15)<<num<<setw(20)<<bookname<<setw(15)<<bookkind<<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,char *kin) //增加图书{Book *p=query(n);if(NULL==p){top++;book[top].addbook(n,na,kin);return 1;}return 0;}Book *query(int bookid) //查找图书{for (int i=0;i<=top;i++)if (book[i].getnum()==bookid &&book[i].getlab()==0){return &book[i];}return NULL;}void disp() //图书库{for (int i=0;i<=top;i++)if (book[i].getlab()==0)book[i].disp();}~BDatabase() //析构函数,将book[]写到book.txt文件中,实现文本的写入{fstream file("book.txt",ios::out);for (int i=0;i<=top;i++)if (book[i].getlab()==0)file.write((char *)&book[i],sizeof(book[i]));file.close();}};void main(){BDatabase BookDB;char choice;char bname[40];char bkind[40];char newType[20];int bookid;Book *b;while (choice!='0'){cout<<"\t******************************************************************\n";cout<<" \n\n";cout<<"\t\t\t图书管理系统\n\n";cout<<"\t\t\t1 新增图书记录\n";cout<<"\t\t\t2 更改图书记录\n";cout<<"\t\t\t3 删除图书记录\n";cout<<"\t\t\t4 查找图书记录\n";cout<<"\t\t\t5 显示图书记录\n";cout<<"\t\t\t6 清空全部记录(慎用)\n";cout<<"\t\t\t0 退出系统\n";cout<<"\t\t\t7 人员\n";cout<<" \n\n";cout<<"\t******************************************************************\ n";cout<<"请选择(1,2,3,4,5,6,0):";cin>>choice;switch (choice){case '1':cout<<"输入图书编号:"<<endl;cin>>bookid;cout<<"输入图书类型:"<<endl;cin>>newType;cout<<"输入图书书名:"<<endl;cin>>bname;BookDB.addbook(bookid,bname,newType);break;case '2':cout<<"输入图书编号:"<<endl;cin>>bookid;b=BookDB.query(bookid);if(b==NULL){cout<<"该图书不存在"<<endl;break;}cout<<"输入新的书名:"<<endl;cin>>bname;b->setname(bname);cout<<"输入新的类型:"<<endl;cin>>bkind;b->setkind(bkind);break;case '3':cout<<"读入图书编号:"<<endl;cin>>bookid;b=BookDB.query(bookid);if(b==NULL){cout<<"该图书不存在"<<endl;break;}char tg1;cout<<"确定要删除此记录吗?(Y/N)"<<endl;cin>>tg1;if(tg1!='n'&&tg1!='N'){b->delbook();cout<<"已成功删除该书记录!"<<endl;break;}case '4':cout<<"读入图书编号:"<<endl;cin>>bookid;b=BookDB.query(bookid);if (b==NULL){cout<<"该图书不存在"<<endl;break;}cout<<"图书编号图书名称图书类型\n";b->disp();break;case '5':cout<<"图书编号图书名称图书类型\n";b=BookDB.query(bookid);b->disp();break;case '6':char tg2;cout<<"确定要清空所有记录吗?(Y/N)"<<endl;cin>>tg2;if(tg2!='n'&&tg2!='N'){BookDB.clear();cout<<"已成功清空记录!"<<endl;break;}case '0':break;default:cout<<"输入错误,请从新输入(数字为0~6):";case'7':Student student;People *ppeople=&student;People &ref=student;ppeople->card();ref.card();break;}}}五.用户使用说明本系统实现了图书管理系统的典型功能,包括查询所有记录的信息,添加查找等功能,基本符合设计要求,利用类的封装实现了一定的安全性,函数的实现与调用在主函数中实现。