c++课程设计图书销售管理系统方案.doc
《c++课程设计图书销售管理系统方案.doc》由会员分享,可在线阅读,更多相关《c++课程设计图书销售管理系统方案.doc(31页珍藏版)》请在咨信网上搜索。
word格式文档 目录 一、 设计目的 2 二、设计内容 2 三、设计要求 2 四、设计过程 3 1、面向对象分析 3 2、数据结构分析 7 3、 系统执行流程 8 五、 程序运行结果 11 六、 设计总结 17 参考文献 17 附录 18 图书销售管理系统 一、 设计目的 本图书销售管理系统,主要用于小型的书店,进行简单的图书的管理,为了能够更好的管理书店的销售的情况和库存的情况书店销售管理系统主要的功能有: (1)图书入库管理:维护入库图书信息,图书编号、书名、价格等,自动计算库存。 (2)图书查询统计:可以根据图书分类、出版社、书名、作者等条件查询图书的详细信息。 (3)销售管理:销售过的图书都记录在销售列表中,方便统计收入。图书销售后,要记录图书库存,按每天统计销售额、每个月或季度生成报表,并生成畅销书单。 二、设计内容 (1) 图书信息包括书名、书号、作者、出版社、单价、库存数量、进价、售价、利润; (2)用户登录界面设计 (3)信息维护:包括子模块有增加图书信息、删除图书信息、修改图书信息 (4 ) 查询功能:可按书名查询、作者查询、或出版社查询 (5) 排序功能:能实现按图书销售利润进行排序的功 三、设计要求 (1) 只能使用C++语言,源程序要有适当的注释,使程序容易阅读 (2) 至少采用文本菜单界面(如果能采用图形菜单界面更好) (3) 学生可自动增加新功能模块(视情况可另外加分) (4) 写出课程设计报告,具体要求见相关说明文档 四、设计过程 1、面向对象分析 (1)对象模型设计 (2)各个类设计 系统中说明了4个类,每个类的详细设计如下: 1.Book类 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;} //库存量接口函数 int getxcl(){return xcl;} //现存量接口函数 int getsalel(){return salel;} //销售量接口函数 virtual void input()=0; //输入虚函数 virtual void output()=0; //输出虚函数 说明:Book类是一个基类,用于定义图书基本的信息。例如:其中string getname()是一个接口函数,能获得图书的姓名。 2.Yule(娱乐类) class yule:public book{//娱乐的派生类 public: void input(){//输入 cin>>name; cin>>num; cin>>price; cin>>kucun; cin>>salel; cin>>xcl; } void output(){//输出 cout<<"Yule:"<<endl; cout<<name<<" "<<num<<" "<<price<<" "<<kucun<<" "<<salel<<" "<<xcl<<endl; } void compute(){//计算售出剩余函数 int counts; cout<<"输入售出的图书的本数"<<endl; cin>>counts; cout<<"售后剩余:"<<endl; kucun=kucun-counts;//计算库存量 salel=salel+counts;//计算销售量 xcl=xcl-counts;//计算剩余量 说明: yule类用于定义娱乐图书的信息,它是Book类的公有派生类。其中: Compute()是一个计算售出图书数量和剩余的函数,input()和 output()函数是对图书信息的输入和输出而且他们是在基类中定义的纯虚函数。 study(学习类图书) class study:public book{//学习类 public: void input(){ cin>>name; cin>>num; cin>>price; cin>>kucun; cin>>salel; cin>>xcl; } void output(){ cout<<"Learn:"<<endl; cout<<name<<" "<<num<<" "<<price<<" "<<kucun<<" "<<salel<<" "<<xcl<<endl; } void compute1(){ int counts; cout<<"输入售出的图书的本数"<<endl; cin>>counts; cout<<"售后剩余:"<<endl; kucun=kucun-counts; salel=salel+counts; xcl=xcl-counts; study类用于定义学习类图书的信息,它是Book类的公有派生类。其中: Compute1()是一个计算售出图书数量和剩余的函数,input()和 output()函数是对图书信息的输入和输出而且他们是在基类中定义的纯虚函数。 operate(功能类) typedef vector<yule> STRVEC;//定义stl模版的容器 typedef vector<study> STRVEC1; class operate{ //定义功能类 STRVEC strvec; STRVEC1 strvec1; public: 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 xiugai_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()//读取娱乐类文件 void load1()//读取学习类文件 void Menu()//应用菜单 说明: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)管理员登录流程图 五、 程序运行结果 管理员登录 在书店开始售书之前先由管理员添加书籍内容,在管理员将需要添加的书籍添加完毕后顾客还有收银员才能执行自己相应的功能。选择管理员功能会进入登陆界面;密码输入正确方能进入使用,错误则会返回输入密码界面,直到密码正确,进入使用界面。 按1添加娱乐类的图书及相关内容 添加成功后好可以继续按1添加娱乐类书籍相关内容,也可按5继续添加学习类的图书 添加完毕后可返回主菜单(11选项) 收银员登录 在主界面按2可进入收银员的登录界面,同管理员一样,收银员也一样需要输入密码,密码对方可进入修改界面,在这里收银员可以对图书的销售情况进行修改,以便以后对图书销售情况便于管理 输入图书编号(娱乐类/学习类)并且输入将要售出的本数,系统将会显示图书(娱乐类/学习类)的售后情况 顾客登录(张海东负责) 在主界面选择1可以进入顾客的使用界面,在这里顾客可以看到所以书籍(娱乐类和学习类),并可以按照编号或者图书名称查询相应图书的详细内容 到此顾客使用功能结束。 当然管理员也有对图书查询的功能,对图书的销售情况时时了解 娱乐类图书查询: 学习类图书查询: 销售额显示 在一段时间后书籍可能售完,这样管理员需要将此类书籍删除,以免误导顾客,在图书删除后,顾客在查询系统中将不会再查询到相关的内容 娱乐类图书删除 学习类图书删除 管理员在执行完所有的步骤后可以选择回到住界面,也可以选择退出系统 回到主界面选择: 退出系统选择: 六、 设计总结 (1)完成本课题花了很长的时间,真正体会了作为一个程序员的辛苦,并且必须具备细心、耐心的品质,想要完成一项出色的项目,必须精益求精,反复操作与实践。 (2)在做了本课程设计以后,我对C++的了解更深了,很多知识得到了巩固,一些不懂的知识也渐渐明了!这其中主要是对指针的使用收获很多,在指针使用的过程中,对指针的指向以及对各函数中指针的赋值会影响到整个程序的运行;还有就是对文件的输入输出流了解得更透彻了,知道了打开一个文件后必须还要对其关闭,否则程序无法运行,对各种文件的输入输出控制符都能基本融会贯通。 (3)虽然本课题已完成,可是还是存在一些问题,比如说界面还不够好看,为了用户用得舒服,界面是很重要的。 参考文献 郑莉等编著.《C++语言程序设计》.清华大学出版社 郑莉等编著.《C++语言程序设计习题与实验指导》.清华大学出版社 张基温编著.《C++程序设计基础例题与习题》.高等教育出版社 黄明等编著.《面向对象程序设计习题详解》.机械工业出版社 附录 源代码: #include <iostream> #include <iomanip> #include <string> #include <fstream> using namespace std; const int Maxr=100; const int Maxb=100; const int Maxbor=5; class Reader { private: int tag; int no; char name[10]; int borbook[Maxbor]; 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;i<Maxbor;i++) borbook[i]=0; } void borrowbook(int bookid) { for(int i=0;i<Maxbor;i++) { if (borbook[i]==0) { borbook[i]=bookid; return; } } } int retbook(int bookid) { for(int i=0;i<Maxbor;i++) { if(borbook[i]==bookid) { borbook[i]=0; return 1; } } return 0; } void disp() { cout << setw(5) << no <<setw(10) << name<<"借书编号:["; for(int i=0;i<Maxbor;i++) if(borbook[i]!=0) cout << borbook[i] << "|"; cout << "]"<<endl; } }; class RDatabase { private: int top; Reader read[Maxr]; public: RDatabase() { Reader s; top=-1; fstream file("reader.txt",ios::in); while (1) { file.read((char *)&s,sizeof(s)); if (!file)break; top++; read[top]=s; } file.close(); } void clear() { top=-1; } int addreader(int n,char *na) { Reader *p=query(n); if (p==NULL) { top++; read[top].addreader(n,na); return 1; } return 0; } Reader *query(int readerid) { for (int i=0;i<=top;i++) if (read[i].getno()==readerid && read[i].gettag()==0) { return &read[i]; } return NULL; } void disp() { for (int i=0;i<=top;i++) read[i].disp(); } void readerdata(); ~RDatabase() { fstream file("reader.txt",ios::out); for (int i=0;i<=top;i++) if (read[i].gettag()==0) file.write((char *)&read[i],sizeof(read[i])); file.close(); } }; void RDatabase::readerdata() { char choice; char rname[20]; int readerid; Reader *r; while (choice!='0') { cout <<"******欢迎使用图书销售管理系统终极版******”<<endl; 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 << " ******顾客****** "<<endl; break; } cout << "输入新的姓名:"; cin >> rname; r->setname(rname); break; case '3': cout << " 输入图书编号:"; cin >> readerid; r=query(readerid); if (r==NULL) { cout <<" 该图书不存在" << endl; break; } r->delbook(); break; case '4': cout << "读入图书编号:"; cin >> readerid; r=query(readerid); if (r==NULL) { cout <<"该图书不存在"<< endl; break; } r->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<"输入错误,请从新输入:";break; } } } class Book { private: int tag; int no; char name[20]; 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,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 book[Maxb]; public: BDatabase() { 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) { Book *p=query(n); if (NULL==p) { top++; book[top].addbook(n,na); return 1; } return 0; } Book *query(int bookid) { for (int i=0;i<=top;i++) if (book[i].getno()==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() { 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]; int bookid; Book *b; while (choice!='0') { cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl; cin >> choice; switch (choice) { case '1': cout << "输入图书编号:"<<endl; cin >> bookid; cout << "输入图书书名:"<<endl; cin >> bname; addbook(bookid,bname); break; case '2': cout << "输入图书编号:"<<endl; cin >> bookid; b=query(bookid); if (b==NULL) { cout << " 该图书缺货 "<<endl; break; } cout << "输入新的书名:"<<endl; cin >> bname; b->setname(bname); break; case '3': cout <<" 读入图书编号:"<<endl; cin >> bookid; b=query(bookid); if (b==NULL) { cout <<" 该图书缺货" << endl; break; } b->delbook(); break; case '4': cout << " 读入图书编号:"<<endl; cin >> bookid; b=query(bookid); if (b==NULL) { cout <<" 该图书不存在"<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<"输入错误,请从新输入:"; } } } void main() { char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') { cout <<endl<<endl<<"\t\t\t 图 书 销售管 理 系 统\n\n\n"; cin >> choice; switch (choice) { case '1': cout <<" 买书 图书编号:"; cin >>readerid; cout <<" 图书编号: "; cin >>bookid; r=ReaderDB.query(readerid); if (NULL==r) { cout <<" 不存在该图书,不能买书"<< endl; break; } b=BookDB.query(bookid); if (b==NULL) { cout <<" 不存在该图书,不能买书"<< endl; break; } if (b->borrowbook()==0) { cout << " 该图书已售完,不能买书"<< endl; break; } r->borrowbook(b->getno()); break; case '2': cout<<"买书\n 图书编号:"; cin >>readerid; cout << " 图书编号:"; cin >>bookid; r=ReaderDB.query(readerid); if (r==NULL) { cout <<" 不存在该图书,不能买书" << endl; break; } b=BookDB.query(bookid); if (b==NULL) { cout <<" 不存在该图书,不能买书" <<endl; break; } b->retbook(); r->retbook(b->getno()); break; case '3': BookDB.bookdata(); break; case '4': ReaderDB.readerdata(); break; default:cout<<"输入错误,请从新输入:"; } } } 专业整理- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 课程设计 图书 销售 管理 系统 方案
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文