1.图书管理系统(1)系统介绍本图书信息管理系统包括图书的编号、书名、作者、分类号、出版单位、出版时间和价格,可实现新建图书信息管理文件、录入图书信息、查询图书信息、删除图书信息、浏览图书信息。(2)类的设计classreader//读者类classrdatabase//读者库类classBook//图书类classbdatabase//图书库类(3)功能设计用户设置:对软件使用者进行管理,此软件有管理员和普通用户,不同用户有不同的权限及登录密码。(管理员用户名:gly,密码:1234;普通用户用户名:ptyh,密码:4321)用户权限:A.管理员可使用软件内的所有功能,如:①新建图书信息管理文件;②录入图书信息;③查询图书信息;④删除图书信息;⑤浏览图书信息。B.普通用户只能使用部分功能,如:①查询图书信息;②浏览图书信息。(管理员可看到每本书的价格,但普通用户不能查看)2.网上购书结账系统(1)系统介绍要解决的问题是用户在网上购书时,可查询要够买的书的信息,系统根据购书人的不同类型,计算出购书人的费用。网上购书的流程是:用户首先输入自己的会员号和密码,然后选择想买的书籍放到购书筐中,选择购买,系统要求结账,并计算出费用通知用户。购书人分为3类:普通人、会员、贵宾。“普通人”的购书费用按照书原价的95%收取。“会员”购书费用的计算方法:五星级会员按照原价的70%收取,四星级会员按照原价的75%收取,三星级会员按照原价的80%收取,二星级会员按照原价的85%收取,一星级会员按照原价的90%收取。“贵宾”的购书费用按照原价的60%收取。(2)类的设计建立购书人类:根据分析,需要设计一个基类CBuyer和它的3个派生类CLayfolk(普通人)、CMember(会员)、CHonoured_guest()。CBuyer类中包括数据成员有购书人编号、姓名、地址和购书金额,成员函数有获取各数据成员的函数及显示对象和计算购书金额函数。CLayfolk类中没有增加新的数据成员。CMember类中增加了会员级别leaguer_grade成员。CHonoured_guest类中增加了折扣率discount_rate成员。建立书类:用户买了那些书书以及书的价格是多少,所以需要建立一个CBook类,其数据成员有书号、书名、作者、出版社和定价,成员函数有构造函数、获取数据成员的函数等。所有类的结构如图下图所示:(3)功能设计定义类的对象或对象指针;建立选择菜单;输入购书人编号,判断购书人类别及信息是否存在;查询购书信息及价格,当前是否有存货;计算金额及结账。提供书的价格CBuyer(基类)stringbuyerID;stringname;stringaddress;sStringpay;CBuyer();CBuyer(stringID,stringname1,stringaddr,floatpay1);stringgetBuyerID();stringgetBuyerName();stringgetBuyerAddress();floatgetBuyerPay();voiddisplay(){};voidsetpay(floatpay1){};CLayfolk(普通人类)没有新增加数据成员CLayfolk(stringID,stringname1,stringaddr,floatpay1):CBuyer(ID,name1,addr,pay1){}voiddisplay();voidsetpay(floatpay1);CMember(会员类)intleaguer_grade;CMember(stringID,stringname1,stringaddr,floatpay1,intleaguer):CBuyer(ID,name1,addr,pay1);voiddisplay();voidsetpay(floatpay1);CHonoured_guest(贵宾类)floatdiscount_rate;CHonoured_guest(stringID,stringname1,stringaddr,floatpay1,floatdiscount):CBuyer(ID,name1,addr,pay1);voiddisplay();voidsetpay(floatpay1);CBook(书类)stringbook_ID;stringbook_name;stringauther;stringpublishing;floatprice;CBook();CBook(stringID,stringname1,stringauther1,stringpublish1,floatprice1);voiddisplay();stringgetbook_ID();stringgetbook_name();stringgetbook_auther();stringgetbook_publish();float继承基类特性类的声明#includeiostream#includeiomanip#includestring#includefstream//输入/输出文件流类usingnamespacestd;constintMaxr=100;//最多的读者constintMaxb=100;//最多的图书constintMaxbor=5;//每位读者最多借五本书//读者类,实现对读者的信息的描述classReader{private:inttag;//删除标记1:已删0:未删intno;//读者编号charname[10];//读者姓名intborbook[Maxbor];//所借图书public:Reader(){}char*getname(){returnname;}//获取姓名intgettag(){returntag;}//获取删除标记intgetno(){returnno;}//获取读者编号voidsetname(charna[])//设置姓名{strcpy(name,na);}voiddelbook(){tag=1;}//设置删除标记1:已删0:未删voidaddreader(intn,char*na)//增加读者{tag=0;no=n;strcpy(name,na);for(inti=0;iMaxbor;i++)borbook[i]=0;}voidborrowbook(intbookid)//借书操作{for(inti=0;iMaxbor;i++){if(borbook[i]==0){borbook[i]=bookid;return;}}}intretbook(intbookid)//还书操作{for(inti=0;iMaxbor;i++){if(borbook[i]==bookid){borbook[i]=0;return1;}}return0;}voiddisp()//读出读者信息{coutsetw(5)nosetw(10)name借书编号:[;for(inti=0;iMaxbor;i++)if(borbook[i]!=0)coutborbook[i]|;cout]endl;}};//读者类库,实现建立读者的个人资料classRDatabase{private:inttop;//读者记录指针Readerread[Maxr];//读者记录public:RDatabase()//构造函数,将reader.txt读到read[]中{Readers;top=-1;fstreamfile(reader.txt,ios::in);//打开一个输入文件while(1){file.read((char*)&s,sizeof(s));if(!file)break;top++;read[top]=s;}file.close();//关闭reader.txt}voidclear()//删除所有读者信息{top=-1;}intaddreader(intn,char*na)//添加读者时先查找是否存在{Reader*p=query(n);if(p==NULL){top++;read[top].addreader(n,na);return1;}return0;}Reader*query(intreaderid)//按编号查找{for(inti=0;i=top;i++)if(read[i].getno()==readerid&&read[i].gettag()==0){return&read[i];}returnNULL;}voiddisp()//输出所有读者信息{for(inti=0;i=top;i++)read[i].disp();}voidreaderdata();//读者库维护~RDatabase()//析构函数,将read[]写到reader.txt文件中{fstreamfile(reader.txt,ios::out);for(inti=0;i=top;i++)if(read[i].gettag()==0)file.write((char*)&read[i],sizeof(read[i]));file.close();}};voidRDatabase::readerdata(){charchoice;charrname[20];intreaderid;Reader*r;while(choice!='0'){cout\n\n\t\t\t读者维护\n\n\n\t\t1新增\n\n\t\t2更改\n\n\t\t3删除\n\n\t\t4查找\n\n\t\t5显示\n\n\t\t6全删\n\n\t\t0退出endl;cinchoice;switch(choice){case'1':cout输入读者编号:;cinreaderid;cout输入读者姓名:;cinrname;addreader(readerid,rname);break;case'2':cout输入读者编号:;cinreaderid;r=query(readerid);if(r==NULL){cout该读者不存在endl;break;}cout输入新的姓名:;cinrname;r-setname(rname);break;case'3':cout输入读者编号:;cinreaderid;r=query(readerid);if(r==NULL){cout该读者不存在endl;break;}r-delbook();break;case'4':cout读入读者编号:;cinreaderid;r=query(readerid);if(r==NULL){cout该读者不存在endl;break;}r-disp();break;case'5':disp();break;case'6':clear();break;default:cout输入错误,请从新输入:;break;}}}//图书类,实现对图书的描述,图书的编号,书名,借出,还入等classBook{private:inttag;//删除标记1:已删0:未删intno;//图书编号charname[20];//书名intonshelf;//是否再架1:再架2:已借public:Book(){}char*getname(){returnname;}//获取姓名intgetno(){returnno;}//获取图书编号intgettag(){returntag;}//获取删除标记voidsetname(charna[])//设置书名{strcpy(name,na);}voiddelbook(){tag=1;}//删除图书voidaddbook(intn,char*na)//增加图书{tag=0;no=n;strcpy(name,na);onshelf=1;}intborrowbook()//借书操作{if(onshelf==