图书销售管理系统设计说明书.docx
- 文档编号:10240265
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:35
- 大小:489.87KB
图书销售管理系统设计说明书.docx
《图书销售管理系统设计说明书.docx》由会员分享,可在线阅读,更多相关《图书销售管理系统设计说明书.docx(35页珍藏版)》请在冰豆网上搜索。
图书销售管理系统设计说明书
图书销售管理系统设计说明书
一、设计目的
本图书销售管理系统,主要用于小型的书店,进行简单的图书的管理,为了能够更好的管理书店的销售的情况和库存的情况书店销售管理系统主要的功能有:
(1)图书入库管理:
维护入库图书信息,图书编号、书名、价格等,自动计算库存。
(2)图书查询统计:
可以根据图书分类、、书名、作者等条件查询图书的详细信息。
(3)销售管理:
销售过的图书都记录在销售列表中,方便统计收入。
图书销售后,要记录图书库存,按每天统计销售额、每个月或季度生成报表,并生成畅销书单。
二、设计容
(1)图书信息包括书名、书号、作者、、单价、库存数量、进价、售价、利润;
(2)用户登录界面设计
(3)信息维护:
包括子模块有增加图书信息、删除图书信息、修改图书信息
(4)查询功能:
可按书名查询、作者查询、或查询
(5)排序功能:
能实现按图书销售利润进行排序的功
三、设计要求
(1)只能使用C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档
四、设计过程
1、面向对象分析
(1)对象模型设计
(2)各个类设计
系统中说明了4个类,每个类的详细设计如下:
1.Book类
classbook{//book基类
protected:
stringname;//名称
floatprice;//价格
intnum;//编号
intkucun,xcl,salel;//库存,现存量,销售量
public:
intgetnum(){
returnnum;}//编号接口函数
stringgetname(){//名称接口函数
returnname;}
floatgetprice(){returnprice;}//价格接口函数
intgetkucun(){returnkucun;}//库存量接口函数
intgetxcl(){returnxcl;}//现存量接口函数
intgetsalel(){returnsalel;}//销售量接口函数
virtualvoidinput()=0;//输入虚函数
virtualvoidoutput()=0;//输出虚函数
说明:
Book类是一个基类,用于定义图书基本的信息。
例如:
其中stringgetname()是一个接口函数,能获得图书的。
2.Yule(娱乐类)
classyule:
publicbook{//娱乐的派生类
public:
voidinput(){//输入
cin>>name;
cin>>num;
cin>>price;
cin>>kucun;
cin>>salel;
cin>>xcl;
}
voidoutput(){//输出
cout<<"Yule:
"< cout< } voidcompute(){//计算售出剩余函数 intcounts; cout<<"输入售出的图书的本数"< cin>>counts; cout<<"售后剩余: "< kucun=kucun-counts;//计算库存量 salel=salel+counts;//计算销售量 xcl=xcl-counts;//计算剩余量 说明: yule类用于定义娱乐图书的信息,它是Book类的公有派生类。 其中: Compute()是一个计算售出图书数量和剩余的函数,input()和output()函数是对图书信息的输入和输出而且他们是在基类中定义的纯虚函数。 study(学习类图书) classstudy: publicbook{//学习类 public: voidinput(){ cin>>name; cin>>num; cin>>price; cin>>kucun; cin>>salel; cin>>xcl; } voidoutput(){ cout<<"Learn: "< cout< } voidcompute1(){ intcounts; cout<<"输入售出的图书的本数"< cin>>counts; cout<<"售后剩余: "< kucun=kucun-counts; salel=salel+counts; xcl=xcl-counts; study类用于定义学习类图书的信息,它是Book类的公有派生类。 其中: Compute1()是一个计算售出图书数量和剩余的函数,input()和output()函数是对图书信息的输入和输出而且他们是在基类中定义的纯虚函数。 operate(功能类) typedefvector typedefvector classoperate{//定义功能类 STRVECstrvec; STRVEC1strvec1; public: voidsearch_yulenum(intm)//娱乐类图书按编号查找 voidsearch_yulename(strings)//查找娱乐类图书按名称 voiddel_yulenum(intn)//删除娱乐类图书按编号 voiddel_yulename(stringp)//按图书名称删除 voidadd_study()//添加学习类图书的基本信息 voidadd_yule()//添加娱乐类图书的基本信息 voidsearch_studynum(intm)//查找学习类图书的编号 voidsearch_studyname(strings)//查找学习类图书的名称 voidxiugai_yule(intm)//修改娱乐类图书的剩余量 voidxiugai_study(intm)//修改学习类图书的剩余量 voiddel_studynum(intn)//删除售完图书 voiddel_studyname(stringp)//按名称删除图书 voidshow_yule()//显示娱乐类图书 voidshow_study()//显示学习类图书 voidsaleamounts()//计算销售额 voidchangxiao1()//娱乐类图书畅销 voidchangxiao()//学习类图书畅销 voidsave()//娱乐类入库单 voidsave1()//学习类入库单 voidload()//读取娱乐类文件 voidload1()//读取学习类文件 voidMenu()//应用菜单 说明: operate类用来实现图书管理系统的功能,它是用来查找、添加、删除图书的信息的基本点的信息,对系统进行维护,生成入库单、畅销书和一天的销售额。 2、数据结构分析 书店销售管理系统的数据结构: 英文名称 中文名称 Book 图书类 Yule 娱乐类图书 Study 学习类图书 Strvec 娱乐类的STL模版 Strvec1 学习类的STL模版 Operate 运算类 search_yulenum 娱乐类编号查找 search_yulename 娱乐类书名查找 del_yulenum 娱乐类编号删除 del_yulename 娱乐类书名删除 add_study 添加学习类图书 add_yule 添加娱乐类图书 search_studynum 学习类编号查询 search_studyname 学习类书名查询 del_studynum 学习类编号删除 del_studyname 学习类书名删除 show_yule 显示娱乐类信息 show_study 显示学习类信息 save 保存娱乐类文件 load 显示娱乐类文件 Menu 菜单 main 主函数 Save1 保存学习类文件 Load1 显示娱乐类文件 saleamounts 销售量的计算 xiugai_yule 娱乐类图书的修改 xiugai_study 学习类图书的修改 changxiao 娱乐类畅销图书 Changxiao1 学习类畅销图书 3、系统执行流程 (1)主页面流程图如图 (1) 图 (1)主页面流程图 (2)顾客登陆 简述: 用户在图书销售系统里顾客登陆并查询图书容。 基本流程: 1顾客: 在图书销售系统画面,选择顾客登陆,显示图书基本信息,按提示容进行查找 2查询: 顾客在图书销售系统中能查询图书的信息; 3显示: 顾客能在顾客界面能看到最近的图书; 4结束。 流程图如图 (2) 图 (2)顾客登录流程图 (3)收银员登陆 简述: 收银员在图书销售系统里能看到图书信息并能修改出售图书的数量。 基本流程: 1收银员: 在图书销售系统画面,选择收银员登陆,输入密码,进入收银员界面。 2修改: 收银员在图书销售系统中能修改图书的售出情况; 3显示: 收银员能在顾客界面能看到最近录入的图书; 4结束。 流程图如图(3) 图(3)收银员登录流程图 管理员登陆 简述: 管理员在图书销售系统填加、删除和查找图书信息,并能显示销售额。 基本流程: 1管理员: 在图书销售系统画面,选择管理员登陆,输入密码,进入收银员界面。 2添加: 管理员在图书销售系统中能填加图书的基本情况; 3删除: 管理员在图书销售系统中能删除图书的基本信息; 4查找: 管理员在图书销售系统中能查找图书的基本信息。 5销售额: 管理员在图书销售系统中能看到销售额的输出 6畅销书: 管理员在图书销售系统中能查询畅销书 7结束 流程图如图(4) 图(4)管理员登录流程图 5、程序运行结果 管理员登录 在书店开始售书之前先由管理员添加书籍容,在管理员将需要添加的书籍添加完毕后顾客还有收银员才能执行自己相应的功能。 选择管理员功能会进入登陆界面;密码输入正确方能进入使用,错误则会返回输入密码界面,直到密码正确,进入使用界面。 按1添加娱乐类的图书及相关容 添加成功后好可以继续按1添加娱乐类书籍相关容,也可按5继续添加学习类的图书 添加完毕后可返回主菜单(11选项) 收银员登录 在主界面按2可进入收银员的登录界面,同管理员一样,收银员也一样需要输入密码,密码对方可进入修改界面,在这里收银员可以对图书的销售情况进行修改,以便以后对图书销售情况便于管理 输入图书编号(娱乐类/学习类)并且输入将要售出的本数,系统将会显示图书(娱乐类/学习类)的售后情况 顾客登录(负责) 在主界面选择1可以进入顾客的使用界面,在这里顾客可以看到所以书籍(娱乐类和学习类),并可以按照编号或者图书名称查询相应图书的详细容 到此顾客使用功能结束。 当然管理员也有对图书查询的功能,对图书的销售情况时时了解 娱乐类图书查询: 学习类图书查询: 销售额显示 在一段时间后书籍可能售完,这样管理员需要将此类书籍删除,以免误导顾客,在图书删除后,顾客在查询系统中将不会再查询到相关的容 娱乐类图书删除 学习类图书删除 管理员在执行完所有的步骤后可以选择回到住界面,也可以选择退出系统 回到主界面选择: 退出系统选择: 6、设计总结 (1)完成本课题花了很长的时间,真正体会了作为一个程序员的辛苦,并且必须具备细心、耐心的品质,想要完成一项出色的项目,必须精益求精,反复操作与实践。 (2)在做了本课程设计以后,我对C++的了解更深了,很多知识得到了巩固,一些不懂的知识也渐渐明了! 这其中主要是对指针的使用收获很多,在指针使用的过程中,对指针的指向以及对各函数中指针的赋值会影响到整个程序的运行;还有就是对文件的输入输出流了解得更透彻了,知道了打开一个文件后必须还要对其关闭,否则程序无法运行,对各种文件的输入输出控制符都能基本融会贯通。 (3)虽然本课题已完成,可是还是存在一些问题,比如说界面还不够好看,为了用户用得舒服,界面是很重要的。 参考文献 莉等编著.《C++语言程序设计》.清华大学 莉等编著.《C++语言程序设计习题与实验指导》.清华大学 基温编著.《C++程序设计基础例题与习题》.高等教育 黄明等编著.《面向对象程序设计习题详解》.机械工业 附录 源代码: #include #include #include #include usingnamespacestd; constintMaxr=100; constintMaxb=100; constintMaxbor=5; classReader { private: inttag; intno; charname[10]; intborbook[Maxbor]; public: Reader(){} char*getname(){returnname;} intgettag(){returntag;} intgetno(){returnno;} voidsetname(charna[]) { strcpy(name,na); } voiddelbook(){tag=1;} voidaddreader(intn,char*na) { tag=0; no=n; strcpy(name,na); for(inti=0;i borbook[i]=0; } voidborrowbook(intbookid) { for(inti=0;i { if(borbook[i]==0) { borbook[i]=bookid; return; } } } intretbook(intbookid) { for(inti=0;i { if(borbook[i]==bookid) { borbook[i]=0; return1; } } return0; } voiddisp() { cout< ["; for(inti=0;i if(borbook[i]! =0) cout< cout<<"]"< } }; classRDatabase { private: inttop; Readerread[Maxr]; public: RDatabase() { 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(); } 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() { 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<<"******欢迎使用图书销售管理系统终极版******”< 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<<"******顾客******"< break; } cout<<"输入新的: "; cin>>rname; r->setname(rname); break; case'3': cout<<"输入图书编号: "; cin>>readerid; r=query(readerid); if(r==NULL) { cout<<"该图书不存在"< break; } r->delbook(); break; case'4': cout<<"读入图书编号: "; cin>>readerid; r=query(readerid); if(r==NULL) { cout<<"该图书不存在"< break; } r->disp(); break; case'5': disp(); break; case'6': clear(); break; default: cout<<"输入错误,请从新输入: ";break; } } } classBook { private: inttag; intno; charname[20]; intonshelf; 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==1) { onshelf=0; return1; } return0; } voidretbook() { onshelf=1; } voiddisp() { cout< <<(onshelf==1? "缺货")< } }; classBDatabase { private: inttop; Bookbook[Maxb]; public: BDatabase() { Bookb; top=-1; fstreamfile("book.txt",ios: : in); while (1) { file.read((char*)&b,sizeof(b)); if(! file)break; top++; book[top]=b; } file.close(); } voidclear() { top=-1; } intaddbook(intn,char*na) { Book*p=query(n); if(NULL==p) { top++; book[top].addbook(n,na); return1; } return0; } Book*query(intbookid) { for(inti=0;i<=top;i++) if(book[i].getno()==bookid&&book[i].gettag()==0) { return&book[i]; } returnNULL; } voidbookdata(); voiddisp() { for(inti=0;i<=top;i++) if(book[i].gettag()==0) book[i].disp(); } ~BDatabase() { fstreamfile("book.txt",ios: : out); for(inti=0;i<=top;i++) if(book[i].gettag()==0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 销售 管理 系统 设计 说明书