课程论文.docx
- 文档编号:24696427
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:37
- 大小:154KB
课程论文.docx
《课程论文.docx》由会员分享,可在线阅读,更多相关《课程论文.docx(37页珍藏版)》请在冰豆网上搜索。
课程论文
西北林科技大学信息工程学院
面向对象编程实习报告
题目:
网上购物管理系统
学号
2013012972
姓名
申金顺
专业班级
计算机科学与技术131
指导教师
胡少军
实践日期
2015年3月2日—3月13日
目录
一、综合训练目的与要求1
二、综合训练任务1
三、总体设计1
四、详细设计说明1
五、调试与测试1
六、实习日志1
七、实习总结1
八、附录:
核心代码清单1
一、综合训练目的与要求
1.通过团队协作,采用面向对象程序设计思想(类的设计,抽象,封装,包含与继承,多态性,简易UML图)进行项目开发,并能够解决一定的实际问题;
2.掌握撰写规范程序设计文档的能力,训练语言组织与表达能力。
3.通过综合实训,使我们更加牢固的掌握有关面向对象的知识,同时加深对面向对象和C++编程技术的理解和掌握,培养实际的应用程序开发能力。
4.培养我们使用MFC或者QT设计程序,使我们学会用这些工具去开发软件
二、综合训练任务
1.网上购物管理系统中存在如下业务实体:
顾客(编号、名称、级别、email、注册时间等),商品(编号、名称、价格、库存量、分类、上架时间等),商品分类目录(编号、名称、级别、创建时间、其他说明等,该目录需要支持嵌套亦即目录下面还可以设定子目录),购物车(编号、顾客编号、创建时间、失效时间、商品清单信息等),购物车商品信息(流水号、购物车编号、商品编号、数量、单价、应付款、添入时间等);
2.支持对以上相关业务实体的新增、删除、属性编辑、查询等操作;
3.网上购物管理中以上所有业务实体的保存与打开等文件操作。
4.我的主要任务是:
购物单类的设计,manage类中有关顾客的操作,还有文件的读写,以及main函数的结构设计和代码编写。
三、总体设计
我们做的网上购物管理系统,主要功能有:
对顾客和商品的查询,添加,删除,信息更改,以及查看销售总额和购买记录等。
我们做的这个一共有五个类分别有:
普通顾客类,VIP类,管理员类,购物清单类和货物类。
我设计的类有:
购物清单类和管理员类的一部分。
四、详细设计说明
(1)购物单类UML图:
buy_list
#product_id:
long
#product_discount:
double
#product_price:
double
#once_used_money:
double
+buy_list()
+~buy_list()
+set_buy_list(id:
long,discount,price,money:
double):
void
+show_buy_list():
void
1set_buy_list()函数说明:
在购物单中创建一条新的记录,入口参数为商品编号id,折扣
discount,价格price,和应付金额money。
②show_buy_list()函数说明
分别输出每条记录中的product_id,product_discount,product_price,
once_used_money
(2)管理员类UML图:
manage
-provec:
vector
-cusvec:
vector
-nomvec:
vector
-list:
buy_list
+total_money:
double
+cus:
customer
+vip:
vip_customer
manage()
+~manage()
+add_product(pro:
product):
void
+add_product():
void
+delete_product():
void
+show_product(id:
long)void
+change_product():
void
+show_product_amount_smaller():
void
+add_vip_customer(vip:
vip_customer):
void
+add_vip_customer():
void
+show_vip_customer(vip_id:
string):
void
+delete_vip():
void
+buy_product():
void
+buy_product_vip(vipid:
string):
void
+deal_end_buy(once_used_money:
double):
void
+deal_end_buy_vip(once_used_money:
double):
void
+show_vip_buy_history(vipid:
string):
void
+show_total_money():
void
+check():
bool
+product_load():
void
+product_write(productpro):
void
+vip_load():
void
+vip_write(vip:
vip_customer):
void
1buy_product()函数说明
此函数用来普通顾客购买商品,不需要入口参数,调用此函数时,函数内部需要你输入商品编号和商品数量,并且计算出应付金额,在购物单内建一条新的记录,将该商品的库存量相应的减少
2buy_product_vip(vipid:
string)函数说明
此函数用来VIP购买商品,入口参数为vip号,函数内部功能和普通顾客的区别是计算应付金额时要打九折,还要增加一条购物历史
3deal_end_buy(once_used_money:
double)函数说明
当普通顾客选择结束购买时,就会调用此函数,入口参数为一次的消费金额,在函数内部判断once_used_money是否大于1000,如果大于1000,就将该顾客添加为会员,否则输出消费金额
4deal_end_buy_(once_used_money:
double)函数说明
当顾客选择结束购买时,将消费总额输出
5product_load(),vip_load()函数说明
这两个函数用来将文件中的数据读到product和vip的容器之中,方便以后的使用
6product_write(productpro),vip_write(vip_customervip)函数说明
这两个函数用来将pro和vip中的数据写入到文件当中,并使用追加模式
(3)主函数设计结构图
在main函数的设计中,我使用了switch层层嵌套;
虽然goto语句不被提倡,但是为了菜单的跳转,在main函数中我使用了goto语句.
五、调试与测试
(1)普通顾客购买商品
显示所有商品:
购买商品:
结束购买:
如果消费金额大于1000,提示你加入会员:
查看会员名单:
(2)VIP购买商品
结束购买:
还可以查看购物历史:
(3)main函数的调试
main函数没办法截图,所以不再截图。
在main函数调试过程之中因为switch之间的层层嵌套,以至于有时候会出现混乱,发生编译错误,如果不认真查看,是没办法找出来的。
虽然goto不被看好,但是为了菜单的跳转,也只能使用了goto。
六、实习日志
今天是开学的第一天,当然也是实习开始的第一天,似乎有点受不了,但是也没有办法。
早上,我和我的伙伴李承阳选好了题目——《网上购物管理系统》。
之所以选这个题目,是因为我们在数据库实习的时候,我和他做的就是网上销售的题目,所以c++实习的时候应该也会简单一些吧!
下午,我和他先把实习计划书写好,将进度划分好,而且分析了题目,我们应该做哪些工作。
2015.3.2
昨天我们只是进行了初步的分析,今天我们进行了更深一步的交流和分析。
网上购物管理系统,不仅要有管理员的操作而且要有顾客购买商品的操作。
由此可见,我们可以从管理员和顾客两个角度来写。
但是对类的设计,我们却还没有一个明确的目标,只有把类搞清楚了,网上管理系统的功能模块才能出来。
2015.3.3
今天我们一起进行了研究,做了关于类的分析和设计。
我们一共要写五个类,分别为管理员类,货物类,购物清单类,顾客类,以及VIP类。
我和他讨论了一下,决定我写购物清单类和管理员类中的有关顾客购物的函数,还有最终主函数的编写,主函数的编写主要是各种菜单之间的跳转。
其他的有李承阳来编写。
准备工作做了好几天,明天就可以编写代码了,何况还要用QT做界面,时间真的是有点紧啊!
2015.3.4
昨天我们已经分工明确,所以今天我们开始各干各的。
今天我先编写buy_list类,其中有四个数据成员,分别为商品编号,折扣,商品价格和应付金额。
还有构造函数,析构函数和购物单记录的添加,以及购物单的输出。
虽然看起来并不难,但是这也让我编写了整整一天。
2015.3.5
既然购物单类我已经编写好了,那么我就开始着手编写顾客购买商品的函数。
顾客分为普通顾客和VIP,那自然他们的购买方式也是不一样的,我决定让VIP可以享受九折的优惠,普通顾客是没有的。
但是当普通顾客购买金额达到1000元时,就可以成为VIP,从此享受优惠。
2015.3.6
一周已经过去了,可我们程序还有好多都没有做。
老师看我们的进度有点慢,所以我们不用做界面了,只要把网上购物的基本功能实现就行了,看来也只能这样了。
幸亏我和李承阳在周六周日的时候加了班,不然的话真的做不完了。
现在,我就剩下main函数还没有写,要想写main函数必须把我的李承阳的代码合在一起才行,不然我是没办法写的。
2015.3.9
今天我和李承阳将我们编写的代码合在一起,由于不是同一个人写的,所以在命名上有一些差异,以至于编译不能通过,今天一整天我们将我们的代码进行了一些小小的修改。
在生成VIP编号的时候,我们需要将long类型变成string类型,我们两个人都不会,只能网上去查,最后我们才搞明白,需要一个
2015.3.10
本来按老师的要求今天应该应该写实习论文了,可是我们的主函数还没有写呢,只能先缓缓了。
今天做了整整一天才把main函数做好,本来也并不难,可是由于switch之间的层层嵌套,很容易发生混乱。
我也算是认真细心地人了,可是也会弄错。
一般来说,goto语句是不被提倡的,可是为了菜单之间的跳转,我也就用了,实在是没办法,迫不得已。
2015.3.11
由于明天就要开始答辩了,而且我们就是第二个,所以我们决定先把PPT做好,等到明天答辩结束和星期六再写实习论文,不然的话连明天的答辩都没办法。
因为我们只在PPT里展示我们自己的内容,所以我在ppt里写了类图,还有主函数中的菜单之间的关系图,以及我们这个程序存在的缺陷。
2015.3.12
今天早上我们先进行了答辩,答辩还可以吧!
想一想实习就要结束了,还是比较高兴的。
不过我们的论文还没有完成,那就今天下午和明天写吧,反正老师留的时间还是比较充裕的!
2015.3.13
七、实习总结
通过完成本次面向对象程序设计的任务,使我熟练和掌握了上学期所学的有关c++中的一些主要知识点和应用点,如类的定义,类的实现,对象的定义,类的继承等等。
可以所学有所学,所有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。
面向对象程序设计作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识的能力及面向对象程序设计技能。
这次网上购物管理系统的设计和创建,经历了平时在课堂中和考试中,决不会有的重重难题和问题。
而这些问题,又都是课本上很少提到的、更深一层的知识领域和应用领域。
这些问题,并不是我们平时只靠课本,就可以轻易解决的。
所以,锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的能力。
当然,此次任务的完成,也体现出同学之间的团结精神。
所遇种种难以解决的问题,大家都会把它当作共同遇到的问题,在一起共同探讨,共同发挥自己所学和所知,投入式的互相帮助和解决困难。
八、附录:
核心代码清单
我写的类和主函数代码:
classbuy_list//购买清单类
{
public:
buy_list();
~buy_list();
voidset_buy_list(longid,doublediscount,doubleprice,doublemoney);
voidshow_buy_list();
protected:
longproduct_id;
doubleproduct_discount;
doubleproduct_price;
doubleonce_used_money;
};
buy_list:
:
buy_list(){}
buy_list:
:
~buy_list(){}
voidbuy_list:
:
set_buy_list(longid,doublediscount,doubleprice,doublemoney)
{
product_id=id;
product_discount=discount;
product_price=price;
once_used_money=money;
}
voidbuy_list:
:
show_buy_list()
{
printf("%-12s","商品ID");
printf("%-17s","销售折扣");
printf("%-12s","商品价格");
printf("%-12s\n","应付总额");
cout< } classmanage//管理员类 { public: manage(); virtual~manage(); staticdoubletotal_money; voidadd_product(product&pro); voidadd_product(); voiddelete_product(); voidshow_product(longid=0); voidchange_product(); voidshow_product_amount_smaller(); voidadd_vip_customer(vip_customer&vip); voidadd_vip_customer(); voidshow_vip_customer(stringvip_id="0"); voiddelete_vip(); voidbuy_product(); voidbuy_product_vip(stringvipid); voiddeal_end_buy(doubleonce_used_money); voiddeal_end_buy_vip(doubleonce_used_money); voidshow_vip_buy_history(string); voidshow_total_money(); voidproduct_load(); voidproduct_write(productpro); boolcheck(); voidvip_load(); voidvip_write(vip_customervip); customercus; vip_customervip; doubleonce_used_money; public: vector vector vector buy_listlist; }; voidmanage: : buy_product() { longid; longamount; cout<<"请输入你需要购买商品的编号: "; cin>>id; cout<<"请输入你需要购买商品的数量: "; cin>>amount; for(vector : iteratori=provec.begin();i { if((*i).product_show_id()==id) { if((*i).product_show_amount()-amount<0) { cout< cout<<"==========================="< cout<<"对不起,该商品数量不够! "< cout<<"请重新操作,谢谢! "< cout<<"==========================="< break; } (*i).reduce_product_amount(amount); total_money+=amount*((*i).product_show_price()); once_used_money+=amount*((*i).product_show_price()); list.set_buy_list((*i).product_show_id(),0,(*i).product_show_price(),once_used_money); list.show_buy_list(); } } } voidmanage: : buy_product_vip(stringvipid) { longid; longamount; cout<<"请输入你需要购买商品的编号: "; cin>>id; cout<<"请输入你需要购买商品的数量: "; cin>>amount; vector : iteratoriter=nomvec.begin(); for(;iter { if((*iter).show_vip_id()==vipid) { break; } } vector : iteratori=provec.begin(); for(;i { if((*i).product_show_id()==id) { if((*i).product_show_amount()-amount<0) { cout< cout<<"==========================="< cout<<"对不起,该商品数量不够! "< cout<<"请重新操作,谢谢! "< cout<<"==========================="< break; } (*i).reduce_product_amount(amount); total_money+=(amount*((*i).product_show_price()))*0.9; once_used_money+=(amount*((*i).product_show_price()))*0.9; (*iter).historyvec.push_back(product((*i).product_show_id(),(*i).product_show_name(),(*i).product_show_price(),amount)); list.set_buy_list((*i).product_show_id(),0.9,(*i).product_show_price(),once_used_money); list.show_buy_list(); (*iter).have_bought=true; } } } voidmanage: : deal_end_buy(doubleonce_used_money) { cout<<"---------------------------"< cout<<"你消费了"< if(once_used_money>=1000) { cout<<"恭喜您! ! ! 您已经成为我们的会员! "< stringtemp_name,temp_tel,temp_id,temp_address; cout< cout<<"请告诉我们一些您的信息,谢谢"< cout< cout<<"您的名字: "; cin>>temp_name; cout<<"您的电话: "; cin>>temp_tel; longm=customer: : customer_id; stringstreamstream; stringresult; stream< stream>>result; temp_id="VIP"; temp_id+=result; cout<<"这是您的ID----"< cout<<"您的地址: "; cin>>temp_address; nomvec.push_back(vip_customer(temp_name,temp_tel,temp_id,temp_address)); vip_write(vip_customer(temp_name,temp_tel,temp_id,temp_address)); } once_used_money=0; } voidmanage: : deal_end_buy_vip(doubleonce_used_money) { cout<<"======================================="< cout<<"你消费了"< } voidmanage: : product_load() { ifstreamin("product.txt"); productpro; if(in) { while(in>>pro.product_id>>pro.product_name>>pro.product_price>>pro.product_amount) { add_product(pro); } in.close(); } else { cerr<<"打开文件失败! "< } } voidmanage: : vip_load(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程 论文