图书管理系统数据结构课程设计报告.docx

上传人:b****2 文档编号:1825267 上传时间:2022-10-24 格式:DOCX 页数:16 大小:274KB
下载 相关 举报
图书管理系统数据结构课程设计报告.docx_第1页
第1页 / 共16页
图书管理系统数据结构课程设计报告.docx_第2页
第2页 / 共16页
图书管理系统数据结构课程设计报告.docx_第3页
第3页 / 共16页
图书管理系统数据结构课程设计报告.docx_第4页
第4页 / 共16页
图书管理系统数据结构课程设计报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

图书管理系统数据结构课程设计报告.docx

《图书管理系统数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《图书管理系统数据结构课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。

图书管理系统数据结构课程设计报告.docx

图书管理系统数据结构课程设计报告

图书管理系统数据结构课程设计报告

 

1.设计要求

小型图书购销管理系统

1、需要处理的基础数据

✧图书资料基本信息:

图书编号、书名、作者、出版社、出版日期、定价等。

✧图书库存信息:

图书编号、书名、作者、库存数量等。

✧图书采购信息:

采购单号、图书编号、采购日期、采购数量、单价、采购金额等。

✧图书销售信息:

销售单号、图书编号、销售日期、销售数量、单价、销售金额等。

2、系统的基本功能

✧图书基本信息的录入和查询

✧图书采购

(1)输入要采购的图书编号,自动从图书基本资料中把相关信息提取出来。

(2)根据采购数量和单价,自动计算采购金额。

(3)根据采购数量,增加图书库存量。

✧图书销售

(1)输入要采购的图书编号(或书名)、销售数量,从图书库存信息中查找是否合法,合法时进行销售,否则报错。

(2)根据采购数量和单价,自动计算销售金额。

(3)销售时,从库存中减去相应的数量。

✧利润计算:

根据全部的采购金额和销售金额,计算书店的利润情况。

 

2.思路:

1.基本模块:

根据要求,应该有三个封装的类,包括:

书籍信息,采购信息和销售信息。

其中以书籍信息为核心,在书籍信息中建立关于其它两类的友元函数,达到信息交流的目的。

2.功能实现:

要求实现的功能有:

对于书籍信息:

录入,查询,采购和销售导致存量的改变

对于采购信息:

实施采购,查询采购

对于销售信息:

实施销售(需要判断是否合法),查询销售

总利润的计算

所以草图如下

考虑到购买和销售时要输入书籍号,并且更改基本库存信息。

不如将销售和采购函数作为友元函数,或许能减少函数个数。

 

3.建立程序和调试改错

因为是在模块的建设中边建设边调试,所以容易发现错误原因。

开始先建设基本类:

Book,公有成员为:

public:

voidset_book();录入功能函数

voiddisplay_book();反馈功能函数

voidbuy_book(Buy&);//此项在Buy类建立后再输入,为采购函数

voidsale_book(Sale&);//此项在Sale类建立后再输入,为销售函数

intbianhao;书籍编号(设为公有是为了方便进行对比时调用,不然或许要一个公有函数来实现“查询是否有此书”的功能,if(i==b[i1].bianhao)可能比写函数更加简短。

私有成员为private:

stringname;//书名

stringwritername;作者名

stringpublisher;出版社

inttime;出版时间

intprice;价格

intbnum;存量

在主函数中大框架是一个选择结构,选择想要执行的功能,由于选项多,所以选择swich.

而进行完一个功能后,考虑到依然有其他功能待执行,所以又用goto回到初始界面。

由于goto,所以case分支后面没有break,在调试过程中也没有发现问题

用类数组定义了书籍类数组后,用for循环进行录入,每次录入后,如果全部录入完毕,有一个选择,可以跳出for循环,同时记下录入函数执行的循环次数,方便反馈时控制反馈函数的执行次数。

可是在实际调试中发现,由于忽略了for循环中循环条件的等号,使得次数丢失。

于是补上。

在建立Buy模块后,发现程序报错,结尾处有非法字符,原来是在打中文的时候顺带打了个“;”,结果非法。

在建立完Sale模块后,发现选择执行销售功能时,程序直接结束,再试销售查询,结果也是结束,再试利润计算,也是如此。

但其他功能正常

开始以为是case的问题,于是加入一个default:

cout<<”请输入正确编码”来测试是否是进入case选择时未能成功匹配到选项,结果不是,输入4,选择销售功能时,依然是直接结束,看来是成功执行到了case4:

以后的语句。

在关掉VC后,删除所有生成的文件,再重新打开刚才的CPP后,发现无法构建,结果显示一个Sale的display()函数出现了问题。

再仔细看,原来由于Sale模块我是直接copy再修改的Buy模块,结果粗心忘了说明Sale:

:

display(){****}这个函数

于是将上面的函数进行说明后,程序完成,最终调试界面:

 

登录界面

录入

查询(全体展示在任意一次录入完成后选择“N”后自动进行)

采购

 

销售

采购查询

采购多项后查询(后来的多次采购未截屏)

同样的,销售多次后(这多次销售未截屏)

最后计算利润

调试结束

 

4心得

程序心得:

首先是对这个程序来说,结构简单,也只有大概300行,但是实际写却写了4个小时,首先是因为很多小细节上的语法错误难以控制,又难以寻找,而且到后来很难去检查一个很长的程序哪个细节错了。

不过,利用一些小技巧,比如隔离法:

用/**/来隐藏一个独立的模块,看是否依然报错,如果没有报错了,那显然错误出现在被隐藏的地方。

还有,针对性纠错,比如看看“;”是否是用中文输入法时输入的。

而且,养成了括号,引号必定成对打的习惯也让我减少了很多失误。

程序的思路不难,但是思路还有很多,比如可以用类中函数来判断输入的书籍编码是否和Book类组中的书籍码相同,比如友元函数可以是在销售和采购类中定义的,或者不使用友元函数,但是我认为自己做的程序是我能独立想到的最简洁了,对于一个不长又计算量不大的程序来说,也不必太过苛求。

不过写完报告后,听听其他同学的思路,或许也是一种学习方式。

C++心得:

对于这个新接触的概念,在进行了适量的实践后,发现确实比C好用多了,比如,刚编完的课程设计1,如果要用C来做,就很难检查结构性错误了,因为编了三个小时之后,就发现头脑茫然,看着长长的连成一片的语句很难寻找关键。

但是有类之后,就只要寻找错误出在哪个类上,再在对应的类或者主函数里排查,大大降低了调试难度。

而且,由于进行了封装,也很难出现张冠李戴的错误,每一个数据的作用都一目了然。

最关键的是,这样的编程更加模块化,我可以先编出关于某一个功能的模块,再编写另一个,最后关联起来,思路清晰,难以犯下结构性错误。

而且,由于丰富了语法,编写也更加随心所欲,不会纠结着用很多句子实现一个简单的功能。

 

附录课程设计,课题1(图书管理系统)源代码

#include

#include

usingnamespacestd;

intdis=0;intgain=0;inttotal=0;inti1=0;inti2=0;//全局变量总支出总收入净收益采购次数销售次数

classSale;

classBuy;

classBook//定义图书类

{public:

voidset_book();

voiddisplay_book();

voidbuy_book(Buy&);

voidsale_book(Sale&);

intbianhao;

private:

stringname;

stringwritername;

stringpublisher;

stringtime;

intprice;

intbnum;

};

 

classBuy//购买类

{

public:

friendvoidBook:

:

buy_book(Buy&);voiddisplay();

private:

intshuliang;intdprice;intbuy_bianhao;inttotal;intb_bianhao;stringtime;

 

};

classSale//销售类

{public:

friendvoidBook:

:

sale_book(Sale&);voiddisplay();

private:

intshuliang;intdprice;intsale_bianhao;inttotal;intb_bianhao;stringtime;

};

voidSale:

:

display()//采购查询函数

{

cout<<"销售编号:

"<

"<

"<

"<

"<

"<

}

voidBuy:

:

display()//采购查询函数

{

cout<<"买单编号:

"<

"<

"<

"<

"<

"<

}

voidBook:

:

set_book()//录入函数

{

cout<<"请输入编号:

";

cin>>bianhao;

cout<<"请输入书名:

";

cin>>name;

cout<<"请输入作者名:

";

cin>>writername;

cout<<"请输入出版社:

";

cin>>publisher;

cout<<"请输入出版时间:

";

cin>>time;

cout<<"请输入定价:

";

cin>>price;

cout<<"请输入数量:

";

cin>>bnum;

}

voidBook:

:

buy_book(Buy&d)//购买函数

{d.b_bianhao=bianhao;

cout<<"请输入买单编号";

cin>>d.buy_bianhao;

cout<<"请输入采购时间";

cin>>d.time;

cout<<"请输入要购买的图书数量";

cin>>d.shuliang;

bnum=bnum+d.shuliang;

cout<<"请输入要购买的图书单价";

cin>>d.dprice;

d.total=d.shuliang*d.dprice;

cout<<"单项支出为"<

dis=dis+d.total;

cout<<"已成功采购!

";

}

voidBook:

:

sale_book(Sale&d)//销售函数

{d.b_bianhao=bianhao;

cout<<"请输入要销售的图书数量";

cin>>d.shuliang;

 

if(d.shuliang<=bnum)

{

bnum=bnum-d.shuliang;

cout<<"请输入销售编号";

cin>>d.sale_bianhao;

cout<<"请输入销售时间";

cin>>d.time;

cout<<"请输入要销售的图书单价";

cin>>d.dprice;

d.total=d.shuliang*d.dprice;

cout<<"单项收益为"<

gain=gain+d.total;

i2++;

cout<<"已成功销售!

";

}

else

{

cout<<"库存不足,无法销售"<

}

}

 

voidBook:

:

display_book()//展示函数

{

cout<<"图书编号"<

"<

}

 

intmain()

{intm=0;Bookb[300];Buya[20

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1