1、word格式文档目录一、 设计目的2二、设计内容2三、设计要求2四、设计过程31、面向对象分析32、数据结构分析73、 系统执行流程8五、 程序运行结果11六、 设计总结17参考文献17附录18图书销售管理系统一、 设计目的本图书销售管理系统,主要用于小型的书店,进行简单的图书的管理,为了能够更好的管理书店的销售的情况和库存的情况书店销售管理系统主要的功能有:(1)图书入库管理:维护入库图书信息,图书编号、书名、价格等,自动计算库存。(2)图书查询统计:可以根据图书分类、出版社、书名、作者等条件查询图书的详细信息。(3)销售管理:销售过的图书都记录在销售列表中,方便统计收入。图书销售后,要记录
2、图书库存,按每天统计销售额、每个月或季度生成报表,并生成畅销书单。二、设计内容(1) 图书信息包括书名、书号、作者、出版社、单价、库存数量、进价、售价、利润;(2)用户登录界面设计(3)信息维护:包括子模块有增加图书信息、删除图书信息、修改图书信息(4 ) 查询功能:可按书名查询、作者查询、或出版社查询(5) 排序功能:能实现按图书销售利润进行排序的功三、设计要求(1) 只能使用C+语言,源程序要有适当的注释,使程序容易阅读(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)(3) 学生可自动增加新功能模块(视情况可另外加分)(4) 写出课程设计报告,具体要求见相关说明文档四、设计过程1
3、、面向对象分析 (1)对象模型设计(2)各个类设计系统中说明了4个类,每个类的详细设计如下:1Book类class book /book基类protected:string name;/名称float price; /价格int num; /编号int kucun,xcl,salel; /库存,现存量,销售量public:int getnum()return num; /编号接口函数string getname()/名称接口函数return name;float getprice()return price; /价格接口函数int getkucun()return kucun; /库存量接口函
4、数int getxcl()return xcl; /现存量接口函数int getsalel()return salel; /销售量接口函数virtual void input()=0; /输入虚函数virtual void output()=0; /输出虚函数说明:Book类是一个基类,用于定义图书基本的信息。例如:其中string getname()是一个接口函数,能获得图书的姓名。2Yule(娱乐类)class yule:public book/娱乐的派生类public:void input()/输入cinname;cinnum; cinprice;cinkucun;cinsalel;ci
5、nxcl;void output()/输出coutYule:endl;coutname num price kucun salel xclendl;void compute()/计算售出剩余函数int counts;cout输入售出的图书的本数counts;cout售后剩余:name;cinnum; cinprice;cinkucun;cinsalel;cinxcl;void output()coutLearn:endl;coutname num price kucun salel xclendl;void compute1()int counts;cout输入售出的图书的本数counts;c
6、out售后剩余:endl; kucun=kucun-counts;salel=salel+counts; xcl=xcl-counts;study类用于定义学习类图书的信息,它是Book类的公有派生类。其中:Compute1()是一个计算售出图书数量和剩余的函数,input()和 output()函数是对图书信息的输入和输出而且他们是在基类中定义的纯虚函数。operate(功能类)typedef vector STRVEC;/定义stl模版的容器typedef vector STRVEC1;class operate /定义功能类 STRVEC strvec;STRVEC1 strvec1;p
7、ublic:void search_yulenum(int m)/娱乐类图书按编号查找void search_yulename(string s)/查找娱乐类图书按名称 void del_yulenum(int n)/删除娱乐类图书按编号void del_yulename(string p)/按图书名称删除void add_study()/添加学习类图书的基本信息void add_yule()/添加娱乐类图书的基本信息void search_studynum(int m)/查找学习类图书的编号void search_studyname(string s)/查找学习类图书的名称void xiug
8、ai_yule(int m)/修改娱乐类图书的剩余量void xiugai_study(int m)/修改学习类图书的剩余量void del_studynum(int n)/删除售完图书void del_studyname(string p) /按名称删除图书void show_yule()/显示娱乐类图书void show_study()/显示学习类图书void saleamounts()/计算销售额void changxiao1()/娱乐类图书畅销void changxiao()/学习类图书畅销void save()/娱乐类入库单void save1()/学习类入库单void load()
9、/读取娱乐类文件void load1()/读取学习类文件void Menu()/应用菜单说明:operate类用来实现图书管理系统的功能,它是用来查找、添加、删除图书的信息的基本点的信息,对系统进行维护,生成入库单、畅销书和一天的销售额。2、数据结构分析书店销售管理系统的数据结构:英文名称中文名称Book 图书类Yule 娱乐类图书Study 学习类图书Strvec 娱乐类的STL模版Strvec1 学习类的STL模版Operate 运算类search_yulenum 娱乐类编号查找search_yulename 娱乐类书名查找del_yulenum 娱乐类编号删除del_yulename 娱
10、乐类书名删除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 娱乐类
11、畅销图书Changxiao1 学习类畅销图书3、 系统执行流程(1)主页面流程图如图(1) 图(1)主页面流程图(2)顾客登陆简述:用户在图书销售系统里顾客登陆并查询图书内容。基本流程:1 顾客:在图书销售系统画面,选择顾客登陆,显示图书基本信息,按提示内容进行查找2 查询:顾客在图书销售系统中能查询图书的信息;3 显示:顾客能在顾客界面能看到最近的图书;4 结束。流程图如图(2)图(2)顾客登录流程图(3)收银员登陆简述:收银员在图书销售系统里能看到图书信息并能修改出售图书的数量。基本流程:1 收银员:在图书销售系统画面,选择收银员登陆,输入密码,进入收银员界面。2 修改:收银员在图书销售系
12、统中能修改图书的售出情况;3 显示:收银员能在顾客界面能看到最近录入的图书;4 结束。流程图如图(3)图(3)收银员登录流程图管理员登陆简述:管理员在图书销售系统填加、删除和查找图书信息,并能显示销售额。基本流程:1 管理员:在图书销售系统画面,选择管理员登陆,输入密码,进入收银员界面。2 添加: 管理员在图书销售系统中能填加图书的基本情况;3 删除: 管理员在图书销售系统中能删除图书的基本信息;4 查找: 管理员在图书销售系统中能查找图书的基本信息。5 销售额:管理员在图书销售系统中能看到销售额的输出6 畅销书:管理员在图书销售系统中能查询畅销书7 结束流程图如图(4)图(4)管理员登录流程
13、图五、 程序运行结果管理员登录在书店开始售书之前先由管理员添加书籍内容,在管理员将需要添加的书籍添加完毕后顾客还有收银员才能执行自己相应的功能。选择管理员功能会进入登陆界面;密码输入正确方能进入使用,错误则会返回输入密码界面,直到密码正确,进入使用界面。按1添加娱乐类的图书及相关内容添加成功后好可以继续按1添加娱乐类书籍相关内容,也可按5继续添加学习类的图书添加完毕后可返回主菜单(11选项)收银员登录在主界面按2可进入收银员的登录界面,同管理员一样,收银员也一样需要输入密码,密码对方可进入修改界面,在这里收银员可以对图书的销售情况进行修改,以便以后对图书销售情况便于管理 输入图书编号(娱乐类/
14、学习类)并且输入将要售出的本数,系统将会显示图书(娱乐类/学习类)的售后情况顾客登录(张海东负责)在主界面选择1可以进入顾客的使用界面,在这里顾客可以看到所以书籍(娱乐类和学习类),并可以按照编号或者图书名称查询相应图书的详细内容到此顾客使用功能结束。当然管理员也有对图书查询的功能,对图书的销售情况时时了解娱乐类图书查询:学习类图书查询: 销售额显示 在一段时间后书籍可能售完,这样管理员需要将此类书籍删除,以免误导顾客,在图书删除后,顾客在查询系统中将不会再查询到相关的内容 娱乐类图书删除学习类图书删除 管理员在执行完所有的步骤后可以选择回到住界面,也可以选择退出系统回到主界面选择:退出系统选
15、择:六、 设计总结(1)完成本课题花了很长的时间,真正体会了作为一个程序员的辛苦,并且必须具备细心、耐心的品质,想要完成一项出色的项目,必须精益求精,反复操作与实践。(2)在做了本课程设计以后,我对C+的了解更深了,很多知识得到了巩固,一些不懂的知识也渐渐明了!这其中主要是对指针的使用收获很多,在指针使用的过程中,对指针的指向以及对各函数中指针的赋值会影响到整个程序的运行;还有就是对文件的输入输出流了解得更透彻了,知道了打开一个文件后必须还要对其关闭,否则程序无法运行,对各种文件的输入输出控制符都能基本融会贯通。 (3)虽然本课题已完成,可是还是存在一些问题,比如说界面还不够好看,为了用户用得
16、舒服,界面是很重要的。参考文献郑莉等编著.C+语言程序设计.清华大学出版社 郑莉等编著.C+语言程序设计习题与实验指导.清华大学出版社 张基温编著.C+程序设计基础例题与习题.高等教育出版社 黄明等编著.面向对象程序设计习题详解.机械工业出版社 附录 源代码:#include #include #include #include using namespace std; const int Maxr=100;const int Maxb=100;const int Maxbor=5;class Reader private: int tag; int no; char name10;int b
17、orbookMaxbor; public: Reader() char *getname() return name; int gettag() return tag; int getno() return no; void setname(char na) strcpy(name,na); void delbook() tag=1; void addreader(int n,char *na) tag=0; no=n; strcpy(name,na); for(int i=0;iMaxbor;i+) borbooki=0; void borrowbook(int bookid) for(in
18、t i=0;iMaxbor;i+) if (borbooki=0) borbooki=bookid; return; int retbook(int bookid) for(int i=0;iMaxbor;i+) if(borbooki=bookid) borbooki=0; return 1; return 0; void disp() cout setw(5) no setw(10) name借书编号:; for(int i=0;iMaxbor;i+) if(borbooki!=0) cout borbooki |; cout endl; ; class RDatabase private
19、: int top; Reader readMaxr;public: RDatabase() Reader s; top=-1; fstream file(reader.txt,ios:in); while (1) file.read(char *)&s,sizeof(s); if (!file)break; top+; readtop=s; file.close(); void clear() top=-1; int addreader(int n,char *na) Reader *p=query(n); if (p=NULL) top+; readtop.addreader(n,na);
20、 return 1; return 0; Reader *query(int readerid) for (int i=0;i=top;i+) if (readi.getno()=readerid & readi.gettag()=0) return &readi; return NULL; void disp() for (int i=0;i=top;i+) readi.disp(); void readerdata();RDatabase() fstream file(reader.txt,ios:out); for (int i=0;i=top;i+) if (readi.gettag(
21、)=0) file.write(char *)&readi,sizeof(readi); file.close(); ; void RDatabase:readerdata() char choice; char rname20; int readerid; Reader *r; while (choice!=0) cout *欢迎使用图书销售管理系统终极版*” choice; switch (choice) case 1: cout readerid; cout rname; addreader (readerid,rname); break; case 2: cout readerid;
22、r=query(readerid); if (r=NULL) cout *顾客* endl; break; cout rname; r-setname(rname); break; case 3: cout readerid; r=query(readerid); if (r=NULL) cout 该图书不存在 delbook(); break; case 4: cout readerid; r=query(readerid); if (r=NULL) cout 该图书不存在disp(); break; case 5: disp(); break; case 6: clear(); break
23、; default:cout输入错误,请从新输入:;break; class Book private: int tag;int no;char name20;int onshelf; public: Book() char *getname() return name; int getno() return no; int gettag() return tag; void setname(char na) strcpy(name,na); void delbook() tag=1; void addbook(int n,char *na) tag=0; no=n; strcpy(name,
24、na); onshelf=1; int borrowbook() if (onshelf=1) onshelf=0; return 1; return 0; void retbook() onshelf=1; void disp() cout setw(6) no setw(18) name setw(10) (onshelf=1? 缺货) endl; ; class BDatabase private: int top; Book bookMaxb; public: BDatabase() Book b; top=-1; fstream file(book.txt,ios:in); whil
25、e (1) file.read(char *)&b,sizeof(b); if (!file) break; top+; booktop=b; file.close(); void clear() top=-1; int addbook(int n,char *na) Book *p=query(n); if (NULL=p) top+; booktop.addbook(n,na); return 1; return 0; Book *query(int bookid) for (int i=0;i=top;i+) if (booki.getno()=bookid &booki.gettag(
26、)=0) return &booki; return NULL; void bookdata();void disp() for (int i=0;i=top;i+) if (booki.gettag()=0) booki.disp(); BDatabase() fstream file(book.txt,ios:out); for (int i=0;i=top;i+) if (booki.gettag()=0) file.write(char *)&booki,sizeof(booki); file.close(); ; void BDatabase:bookdata() char choi
27、ce; char bname40; int bookid; Book *b; while (choice!=0) cout nnnttt图 书 维 护 endl choice; switch (choice) case 1: cout 输入图书编号: bookid; cout 输入图书书名: bname; addbook(bookid,bname); break; case 2: cout 输入图书编号: bookid; b=query(bookid); if (b=NULL) cout 该图书缺货 endl; break; cout 输入新的书名: bname; b-setname(bnam
28、e); break; case 3: cout 读入图书编号: bookid; b=query(bookid); if (b=NULL) cout 该图书缺货 delbook(); break; case 4: cout 读入图书编号: bookid; b=query(bookid); if (b=NULL) cout 该图书不存在disp(); break; case 5: disp(); break; case 6: clear(); break; default:cout输入错误,请从新输入:; void main() char choice; int bookid,readerid;
29、RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!=0) cout endlendl choice; switch (choice) case 1: cout readerid; cout bookid; r=ReaderDB.query(readerid);if (NULL=r) cout 不存在该图书,不能买书 endl; break; b=BookDB.query(bookid); if (b=NULL) cout 不存在该图书,不能买书borrowbook()=0) cout 该图书已售完,不能
30、买书borrowbook(b-getno(); break; case 2: coutreaderid; cout bookid; r=ReaderDB.query(readerid); if (r=NULL) cout 不存在该图书,不能买书 endl; break; b=BookDB.query(bookid); if (b=NULL) cout 不存在该图书,不能买书 retbook(); r-retbook(b-getno(); break; case 3: BookDB.bookdata(); break; case 4: ReaderDB.readerdata(); break; default:cout输入错误,请从新输入:; 专业整理