1、 1 / 16 目录目录 1 课题 1图书管理系统.错误错误! !未定义书签。未定义书签。 1.1 设计要求 . 2 1.2 创作的思路 . 3 1.3 创作和调试 . 4 1.4 心得体会 . 9 附录. 10 2 / 16 1.1. 设计要求设计要求 小型图书购销管理系统 1、需要处理的基础数据 图书资料基本信息:图书资料基本信息:图书编号、书名、作者、出版社、出版日期、定价 等。 图书库存信息:图书库存信息:图书编号、书名、作者、库存数量等。 图书采购信息:图书采购信息:采购单号、图书编号、采购日期、采购数量、单价、采 购金额等。 图书销售信息:图书销售信息:销售单号、图书编号、销售日期
2、、销售数量、单价、销 售金额等。 2、系统的基本功能 图书基本信息的录入和查询 图书采购 (1)输入要采购的图书编号,自动从图书基本资料中把相关信息提取出 来。 (2)根据采购数量和单价,自动计算采购金额。 (3)根据采购数量,增加图书库存量。 图书销售 (1)输入要采购的图书编号(或书名) 、销售数量,从图书库存信息中 查找是否合法,合法时进行销售,否则报错。 (2)根据采购数量和单价,自动计算销售金额。 (3)销售时,从库存中减去相应的数量。 利润计算: 根据全部的采购金额和销售金额,计算书店的利润情况。 3 / 16 2.2. 思路:思路: 1.基本模块: 根据要求,应该有三个封装的类,
3、包括:书籍信息,采购信息和销售信息。 其中以书籍信息为核心,在书籍信息中建立关于其它两类的友元函数,达到信息 交流的目的。 2.功能实现: 要求实现的功能有:对于书籍信息:录入,查询,采购和销售导致存量的改变 对于采购信息:实施采购,查询采购 对于销售信息:实施销售(需要判断是否合法) ,查询销售 总利润的计算 所以草图如下 考虑到购买和销售时要输入书籍号,并且更改基本库存信息。不如将销售和采购 函数作为友元函数,或许能减少函数个数。 4 / 16 3. 建立程序和建立程序和调试改错调试改错 因为是在模块的建设中边建设边调试,所以容易发现错误原因。 开始先建设基本类:Book,公有成员为: p
4、ublic: 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 publis
5、her;出版社 int time;出版时间 int price;价格 int bnum;存量 在主函数中大框架是一个选择结构,选择想要执行的功能,由于选项多,所以选 择 swich. 而进行完一个功能后,考虑到依然有其他功能待执行,所以又用 goto 回到初始 界面。 由于 goto,所以 case 分支后面没有 break,在调试过程中也没有发现问题 用类数组定义了书籍类数组后,用 for 循环进行录入,每次录入后,如果全部 录入完毕, 有一个选择, 可以跳出 for 循环, 同时记下录入函数执行的循环次数, 方便反馈时控制反馈函数的执行次数。 可是在实际调试中发现, 由于忽略了 for 循
6、环中循环条件的等号, 使得次数丢失。 于是补上。 在建立 Buy 模块后,发现程序报错,结尾处有非法字符,原来是在打中文的时 候顺带打了个“; ” ,结果非法。 在建立完 Sale 模块后,发现选择执行销售功能时,程序直接结束,再试销售查 询,结果也是结束,再试利润计算,也是如此。但其他功能正常 开始以为是 case 的问题,于是加入一个 default:coutbianhao; coutwritername; couttime; coutbnum; void Book:buy_book(Buy coutd.time; coutd.dprice; d.total=d.shuliang*d.dprice; coutd.shuliang; if(d.shuliangd.sale_bianhao; coutd.dprice; d.total=d.shuliang*d.dprice; coutd; switch(d) case 1:/执行创建 int i; for(i=(m+1);ichoice1; if(choice1=y