图书馆管理系统(作业)

来源:互联网 发布:郭靖对杨过的影响知乎 编辑:程序博客网 时间:2024/04/29 20:25

要求:

设计一个程序来管理图书信息,能实现图书相关信息的具备数据的输入、查找、删除等功能,能实现。具体功能细节可以根据自己理解情况进行增加。

【首先说明:部分程序是参考网上的,但总的来说思路还算蛮清晰的!】

主程序设计思路图:

  

  

(1)函数的设计:

class BDatabase{}  图书管理类的设置,实现对图书的添加,查找,删除等。

int top;           设置图书记录指针。

Book book[Maxb];   设置图书记录(Maxb定义为最多可存储的图书数,定义为整形)。

void clear()         清空图书记录。

int addbook(int n,char *na,char *kin)    增加图书记录。

Book *query(int bookid)       查找图书记录。

void bookdata();              定义图书库。

void disp()                   输出。

~BDatabase()        设置析构函数,将book[]写到book.txt文件中

void BDatabase::bookdata()     由此函数开始对图书管理系统的主菜单进行调用与功能的实现。

最后用main() 函数的实现,程序的主界面的引导

 

数据存放:

char name[StrNum]——用来存放书名

char number[StrNum]——存放图书的编号

char kind[Type]——存放图书类型

int tag——定义删除标记

int num——定义图书标号为整型

int add ——增加标记

Book(){}——无参构造函数,用于为书名和作者姓名设置默认值

char getkind()——用于获取图书类型

char getname()——用于获取书名

intget name()——用于获取图书编号

intgettag()——用于获取删除标志

void setnamechar  na[])——用于设置书名

void setkindchar kin[])——用于设置类型

void delkind()——用于删除图书

void addbookint nchar*nachar*kin)——用于增加图书

void disp()——用于输出图书         

具体程序如下:

/**********图书馆管理系统****************/#define StrNum 20#define Type 20#include <iostream>#include <iomanip>#include <string>#include <fstream>                  //输入/输出文件流类using namespace std;const int Maxb=100;                 //最多可存储的图书class Book{private:    int tag;                        //删除标记int num;                        //图书编号int add;                        //增加标记char number[StrNum];            //编号char name[StrNum];              //书名char kind[Type];                //图书类型public:Book(){}char getkind()                  //获取图书类型{return kind[Type];}                                char getname()                //获取书名{ return name[StrNum]; }int getnum()                     //获取图书编号{ return num; }                  int gettag()                    //获取删除标记{ return tag;}void setname(char na[])         //设置书名{strcpy(name,na);}void setkind(char kin[])        //设置类型{strcpy(kind,kin);}void delbook()                  //删除图书{tag=1;}void addbook(int n,char *na,char *kin)    //增加图书{tag=0;num=n;strcpy(name,na);strcpy(kind,kin);}void disp()                     //输出图书{cout.flags (ios::left);     //设置对齐的标志位为左cout<<setw(15)<<num<<setw(20)<<name<<setw(15)<<kind<<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].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.txt文件中{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];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<<"                                           \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;addbook(bookid,bname,newType);break;            case '2':cout<<"输入图书编号:"<<endl;cin>>bookid;b=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=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=query(bookid);if (b==NULL){cout<<"该图书不存在"<<endl;break;}cout<<"图书编号            图书名称              图书类型         \n";b->disp();                                 break;case '5':cout<<"图书编号            图书名称              图书类型         \n";disp();break;case '6':    char tg2;cout<<"确定要清空所有记录吗?(Y/N)"<<endl;cin>>tg2;if(tg2!='n'&&tg2!='N'){clear();    cout<<"已成功清空记录!"<<endl;break;}case '0':break;default:cout<<"输入错误,请从新输入(数字为0~6):";}}}//main() 函数的实现,程序的主界面的引导void main(){    char choice;BDatabase BookDB;while(choice!='0'){       cout<<"\t***********************私人定制*********************************\n";        cout<<"                                           \n\n";    cout<<"\n\n\t\t\t欢迎使用图书管理系统\n\n";cout<<endl<<endl<<"\t\t\t图  书  管  理  系  统\n\n\n\n";cout<<"                                               "<<endl;cout<<"                                           \n\n";cout<<"                                                 by: 周武武\n\n\n\n";cout<<"\t******************************************************************\n";    cout<<"\t\t\t1    进  入  系  统\n\n\t\t\t0    离       开"<<endl;cout<<"请选择:";cin>>choice;switch(choice){case '1':BookDB.bookdata();break;             case '0': cout<<"\n\n\t\t\t欢迎再次使用图书管理系统\n\n"; break;default:cout<<"输入错误,请从新输入:";}}}

调试运行截图如下:

欢迎界面:


显示所有图书界面:


查找结果:



心得:弄了两三天,上网找资料,找同学讨论,翻看课本相关知识终于在今天调试成功!!但是这只能算作应付之作,我这几天看到有几个同学的作业,感觉自己真的只是学了点皮毛,虽然课程已接近结束,但这C++还得继续学习,勤能补拙!多谢明哥这一学期的辛苦授业!!


0 0
原创粉丝点击