图书销售管理系统设计说明书Word文档下载推荐.docx
《图书销售管理系统设计说明书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图书销售管理系统设计说明书Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。
floatgetprice(){returnprice;
}//价格接口函数
intgetkucun(){returnkucun;
}//库存量接口函数
intgetxcl(){returnxcl;
}//现存量接口函数
intgetsalel(){returnsalel;
}//销售量接口函数
virtualvoidinput()=0;
//输入虚函数
virtualvoidoutput()=0;
//输出虚函数
说明:
Book类是一个基类,用于定义图书基本的信息。
例如:
其中stringgetname()是一个接口函数,能获得图书的姓名。
2.Yule(娱乐类)
classyule:
publicbook{//娱乐的派生类
voidinput(){//输入
cin>
>
name;
num;
price;
kucun;
salel;
xcl;
}
voidoutput(){//输出
cout<
<
"
Yule:
endl;
name<
"
num<
price<
kucun<
salel<
xcl<
voidcompute(){//计算售出剩余函数
intcounts;
输入售出的图书的本数"
counts;
售后剩余:
kucun=kucun-counts;
//计算库存量
salel=salel+counts;
//计算销售量
xcl=xcl-counts;
//计算剩余量
yule类用于定义娱乐图书的信息,它是Book类的公有派生类。
其中:
Compute()是一个计算售出图书数量和剩余的函数,input()和output()函数是对图书信息的输入和输出而且他们是在基类中定义的纯虚函数。
study(学习类图书)
classstudy:
publicbook{//学习类
voidinput(){
voidoutput(){
Learn:
voidcompute1(){
study类用于定义学习类图书的信息,它是Book类的公有派生类。
Compute1()是一个计算售出图书数量和剩余的函数,input()和output()函数是对图书信息的输入和输出而且他们是在基类中定义的纯虚函数。
operate(功能类)
typedefvector<
yule>
STRVEC;
//定义stl模版的容器
study>
STRVEC1;
classoperate{//定义功能类
STRVECstrvec;
STRVEC1strvec1;
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)
图(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<
iostream>
iomanip>
string>
fstream>
usingnamespacestd;
constintMaxr=100;
constintMaxb=100;
constintMaxbor=5;
classReader
{
private:
inttag;
intno;
charname[10];
intborbook[Maxbor];
Reader(){}
char*getname(){returnname;
}
intgettag(){returntag;
intgetno(){returnno;
voidsetname(charna[])
strcpy(name,na);
voiddelbook(){tag=1;
voidaddreader(intn,char*na)
tag=0;
no=n;
for(inti=0;
i<
Maxbor;
i++)
borbook[i]=0;
voidborrowbook(intbookid)
if(borbook[i]==0)
borbook[i]=bookid;
return;
intretbook(intbookid)
if(borbook[i]==bookid)
return1;
return0;
voiddisp()
cout<
setw(5)<
no<
setw(10)<
name<
借书编号:
["
;
if(borbook[i]!
=0)
borbook[i]<
|"
]"
};
classRDatabase
inttop;
Readerread[Maxr];
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()
intaddreader(intn,char*na)
Reader*p=query(n);
if(p==NULL)
read[top].addreader(n,na);
Reader*query(intreaderid)
for(inti=0;
=top;
if(read[i].getno()==readerid&
&
read[i].gettag()==0)
return&
read[i];
returnNULL;
voiddisp()
read[i].disp();
voidreaderdata();
~RDatabase()
out);
if(read[i].gettag()==0)
file.write((char*)&
read[i],sizeof(read[i]));
voidRDatabase:
readerdata()
charchoice;
charrname[20];
intreaderid;
Reader*r;
while(choice!
='
0'
)
******欢迎使用图书销售管理系统终极版******”<
cin>
choice;
switch(choice)
case'
1'
******操作菜单******:
readerid;
******收银员******"
rname;
addreader(readerid,rname);
break;
2'
******管理员******:
r=query(readerid);
if(r==NULL)
******顾客******"
输入新的姓名:
r->
setname(rname);
3'
输入图书编号:
该图书不存在"
<
endl;
delbook();
4'
读入图书编号:
该图书不存在"
disp();
5'
6'
clear();
default:
cout<
输入错误,请从新输入:
classBook
charname[20];
intonshelf;
Book(){}
char*getname(){returnname;
intgetno(){returnno;
intgettag(){returntag;
voidaddbook(intn,char*na)
onshelf=1;
intborrowbook()
if(onshelf==1)
onshelf=0;
voidretbook()
setw(6)<
setw(18)<
name<
setw(10)
(onshelf==1?
缺货"
)<
classBDatabase
Bookbook[Maxb];
BDatabase()
Bookb;
book.txt"
b,sizeof(b));
file)break;
book[top]=b;
intaddbook(intn,char*na)
Book*p=query(n);
if(NULL==p)
book[top].addbook(n,na);
Book*query(intbookid)
if(book[i].getno()==bookid&
book[i].gettag()==0)
book[i];
voidbookdata();
if(book[i].gettag()==0)
book[i].disp();
~BDatabase()
i