图书管理系统数据结构课程设计报告.docx_第1页
图书管理系统数据结构课程设计报告.docx_第2页
图书管理系统数据结构课程设计报告.docx_第3页
图书管理系统数据结构课程设计报告.docx_第4页
图书管理系统数据结构课程设计报告.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1课题1图书管理系统21.1 设计要求21.2 创作的思路31.3 创作和调试41.4 心得体会9附录101. 设计要求小型图书购销管理系统1、需要处理的基础数据 图书资料基本信息:图书编号、书名、作者、出版社、出版日期、定价等。 图书库存信息:图书编号、书名、作者、库存数量等。 图书采购信息:采购单号、图书编号、采购日期、采购数量、单价、采购金额等。 图书销售信息:销售单号、图书编号、销售日期、销售数量、单价、销售金额等。2、系统的基本功能 图书基本信息的录入和查询 图书采购(1)输入要采购的图书编号,自动从图书基本资料中把相关信息提取出来。(2)根据采购数量和单价,自动计算采购金额。(3)根据采购数量,增加图书库存量。 图书销售 (1)输入要采购的图书编号(或书名)、销售数量,从图书库存信息中查找是否合法,合法时进行销售,否则报错。(2)根据采购数量和单价,自动计算销售金额。(3)销售时,从库存中减去相应的数量。 利润计算:根据全部的采购金额和销售金额,计算书店的利润情况。2. 思路:1.基本模块:根据要求,应该有三个封装的类,包括:书籍信息,采购信息和销售信息。其中以书籍信息为核心,在书籍信息中建立关于其它两类的友元函数,达到信息交流的目的。2.功能实现:要求实现的功能有:对于书籍信息:录入,查询,采购和销售导致存量的改变 对于采购信息:实施采购,查询采购 对于销售信息:实施销售(需要判断是否合法),查询销售 总利润的计算所以草图如下考虑到购买和销售时要输入书籍号,并且更改基本库存信息。不如将销售和采购函数作为友元函数,或许能减少函数个数。3. 建立程序和调试改错因为是在模块的建设中边建设边调试,所以容易发现错误原因。开始先建设基本类:Book,公有成员为:public: void set_book();录入功能函数 void display_book();反馈功能函数 void buy_book(Buy&);/此项在Buy类建立后再输入,为采购函数 void sale_book(Sale&);/此项在Sale类建立后再输入,为销售函数 int bianhao;书籍编号(设为公有是为了方便进行对比时调用,不然或许要一个公有函数来实现“查询是否有此书”的功能,if(i=bi1.bianhao)可能比写函数更加简短。)私有成员为private:string name;/书名string writername; 作者名string publisher;出版社int time;出版时间int price;价格int bnum;存量在主函数中大框架是一个选择结构,选择想要执行的功能,由于选项多,所以选择swich.而进行完一个功能后,考虑到依然有其他功能待执行,所以又用goto回到初始界面。由于goto,所以case分支后面没有break,在调试过程中也没有发现问题用类数组定义了书籍类数组后,用 for 循环进行录入,每次录入后,如果全部录入完毕,有一个选择,可以跳出for循环,同时记下录入函数执行的循环次数,方便反馈时控制反馈函数的执行次数。可是在实际调试中发现,由于忽略了for循环中循环条件的等号,使得次数丢失。于是补上。在建立Buy模块后,发现程序报错,结尾处有非法字符,原来是在打中文的时候顺带打了个“;”,结果非法。在建立完Sale模块后,发现选择执行销售功能时,程序直接结束,再试销售查询,结果也是结束,再试利润计算,也是如此。但其他功能正常开始以为是case的问题,于是加入一个default:cout”请输入正确编码”来测试是否是进入case选择时未能成功匹配到选项,结果不是,输入4,选择销售功能时,依然是直接结束,看来是成功执行到了case 4:以后的语句。在关掉VC后,删除所有生成的文件,再重新打开刚才的CPP后,发现无法构建,结果显示一个Sale的display()函数出现了问题。再仔细看,原来由于Sale模块我是直接copy再修改的Buy模块,结果粗心忘了说明Sale:display()*这个函数于是将上面的函数进行说明后,程序完成,最终调试界面:登录界面录入查询(全体展示在任意一次录入完成后选择“N”后自动进行)采购销售采购查询采购多项后查询(后来的多次采购未截屏)同样的,销售多次后(这多次销售未截屏)最后计算利润调试结束4心得程序心得:首先是对这个程序来说,结构简单,也只有大概300行,但是实际写却写了4个小时,首先是因为很多小细节上的语法错误难以控制,又难以寻找,而且到后来很难去检查一个很长的程序哪个细节错了。不过,利用一些小技巧,比如隔离法:用/*/来隐藏一个独立的模块,看是否依然报错,如果没有报错了,那显然错误出现在被隐藏的地方。还有,针对性纠错,比如看看“;”是否是用中文输入法时输入的。而且,养成了括号,引号必定成对打的习惯也让我减少了很多失误。程序的思路不难,但是思路还有很多,比如可以用类中函数来判断输入的书籍编码是否和Book类组中的书籍码相同,比如友元函数可以是在销售和采购类中定义的,或者不使用友元函数,但是我认为自己做的程序是我能独立想到的最简洁了,对于一个不长又计算量不大的程序来说,也不必太过苛求。不过写完报告后,听听其他同学的思路,或许也是一种学习方式。C+心得:对于这个新接触的概念,在进行了适量的实践后,发现确实比C好用多了,比如,刚编完的课程设计1,如果要用C来做,就很难检查结构性错误了,因为编了三个小时之后,就发现头脑茫然,看着长长的连成一片的语句很难寻找关键。但是有类之后,就只要寻找错误出在哪个类上,再在对应的类或者主函数里排查,大大降低了调试难度。而且,由于进行了封装,也很难出现张冠李戴的错误,每一个数据的作用都一目了然。最关键的是,这样的编程更加模块化,我可以先编出关于某一个功能的模块,再编写另一个,最后关联起来,思路清晰,难以犯下结构性错误。而且,由于丰富了语法,编写也更加随心所欲,不会纠结着用很多句子实现一个简单的功能。附录 课程设计,课题1(图书管理系统)源代码#include#includeusing namespace std;int dis=0;int gain=0;int total=0;int i1=0;int i2=0;/全局变量 总支出 总收入 净收益 采购次数 销售次数class Sale;class Buy;class Book/定义图书类public: void set_book(); void display_book(); void buy_book(Buy&); void sale_book(Sale&); int bianhao;private:string name;string writername;string publisher;string time;int price;int bnum;class Buy/购买类public:friend void Book:buy_book(Buy&) ;void display();private:int shuliang;int dprice;int buy_bianhao;int total;int b_bianhao;string time;class Sale/销售类public:friend void Book:sale_book(Sale&);void display();private:int shuliang;int dprice;int sale_bianhao;int total;int b_bianhao;string time;void Sale:display()/采购查询函数cout 销售编号:sale_bianhao 书籍编号:b_bianhao 销售时间:time 销售单价:dprice 销售数量:shuliang 销售单项收益:totalendl;void Buy:display()/采购查询函数cout 买单编号:buy_bianhao 书籍编号:b_bianhao 购买时间:time 购买单价:dprice 采购数量:shuliang 采购单项支出:totalendl;void Book:set_book() /录入函数 coutbianhao; coutname; coutwritername; coutpublisher; couttime; coutprice; coutbnum; void Book:buy_book(Buy&d) /购买函数d.b_bianhao=bianhao;coutd.buy_bianhao;coutd.time;coutd.shuliang;bnum=bnum+d.shuliang;coutd.dprice;d.total=d.shuliang*d.dprice;cout单项支出为d.total;dis=dis+d.total;cout 已成功采购!;void Book:sale_book(Sale&d)/销售函数d.b_bianhao=bianhao;coutd.shuliang;if(d.shuliang=bnum)bnum=bnum-d.shuliang;coutd.sale_bianhao;coutd.time;coutd.dprice;d.total=d.shuliang*d.dprice;cout单项收益为d.total;gain=gain+d.total;i2+;cout 已成功销售!;else cout库存不足,无法销售endl;void Book:display_book() /展示函数cout图书编号bianhao 图书名:name 作者名writername 出版社publisher 出版时间time 定价price存量bnumendl;int main()int m=0;Book b300;Buy a200;Sale c200;int d=0;int k=1;int l;a:cout*endl;cout* tsy 图书购销系统 *endl;cout*1.创建图书 2.图书查询 *endl;cout*3.采购图书 4.销售图书 *endl;cout*5.采购信息 6.销售信息 *endl;cout*7.统计利润 *endl; cout* 请输入将执行操作对应的数字 *d;switch(d)case 1:/执行创建int i;for(i=(m+1);i301;i+)cout第i组; bi.set_book(); bi.display_book(); coutchoice1; if(choice1=y)continue; if(choice1=n) m=i;break; for(l=1;l=m;l+) bl.display_book(); system(pause);system(cls);goto a;case 2:/执行查询coutl;for(i=1;i=m;i+)if (l=bi.bianhao)k=0;bi.display_book();if(k)cout所查询的图书不存在!; system(pause);system(cls);goto a;case 3:/执行采购coutl;k=1;for(i=1;i=m;i+)if (l=bi.bianhao)k=0;cout所采购书籍为;bi.display_book();bi.buy_book(ai1);i1+;if(k)cout所购买的图书不存在!请先录入!;system(pause);system(cls);goto a;case 4:/执行销售coutl;k=1;for(i=1;i=m;i+)if (l=bi.bianhao)k=0;cout所销售书籍为;bi.display_book();bi.sale_book(ci2);if(k)cout所销售的图书不存在!请检查错误后重试!;system(pause);system(cls);goto a;case 5:cout采购查询;for(i=0;ii1;i+)ai.display();cout 总支出:disendl;system(pause);system(cls);goto a;case 6:cout销售查询;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论