面向对象实验报告.docx
- 文档编号:8311868
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:29
- 大小:74.82KB
面向对象实验报告.docx
《面向对象实验报告.docx》由会员分享,可在线阅读,更多相关《面向对象实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
面向对象实验报告
面
向
对
象
程
序
设
计
学号:
1041090104810410901044
姓名:
葛建涛王登普
班级:
10级计科
(1)班
时间:
2011年10月16日
音像店管理系统程序设计
实验项目名称:
音像店管理系统
课程名称:
面向对象程序设计
面向专业:
计算机科学与技术
实验目的:
利用面向对象程序设计思想编写一个程序使得音像店可以正常工程。
实验目标与要求:
程序应该执行以下操作:
1、出租影碟。
2、返还影碟。
3、创建音像商店拥有的影碟清单。
4、打印商店所有硬碟的清单。
5、显示某张特定影碟的清单。
6、检查某张影碟是否在商店中。
7、维护顾客的数据库。
8、打印每位顾客所租的所有影碟清单。
实验环境要求:
VC++6.0
实验仪器设备:
一台计算机
实验语言:
C++
实验内容:
程序需求表明音像店有2个主要组成部分:
影碟和顾客。
程序在描述这2个组成部分的同时还需要生成以下2个列表:
1.商店所有影碟的列表。
2.商店所有顾客的列表。
在这里分2个部分分析,第1部分设计、实现和测试影碟部分,第2部分设计和实现顾客部分并加入到第1部分开发的影碟部分。
1、影碟
影碟对象描述影碟相关的通常属性,如下:
stringvideoTitle;//片名
stringmovieStar1;//明星1
stringmovieStar2;//明星2
stringmovieProducer;//制片人
stringmovieDirector;//导演
stringmovieProductionCo;//制片公司
intcopiesInStock;//列表中拷贝的数量
intVideoID;//影碟的编号
音像店系统管理程序中有关影碟的类:
类
基类
说明
VideoType
无
一张影碟
VideoListType
list
影碟列表,VideoType对象的列表,继承于STL标准列表容器
VideType类:
函数模块
功能
成员
说明
stringvideoTitle
片名
stringmovieStar1
明星1
stringmovieStar2
明星2
stringmovieProducer
制片人
stringmovieDirector
导演
stringmovieProductionCo
制片公司
intcopiesInStock
列表中拷贝的数量
intVideoID
影碟的编号
voidsetVideoInfo(stringtitle,stringstar1,stringstar2,stringproducer,
stringdirector,stringproductionCo,intsetInStock,intvideoid)
设置硬碟的属性
intgetNoOfCopiesInStock()
取得硬碟的拷贝数量
voidcheckOut()
借出一张硬碟,列表中拷贝的数量减1
voidcheckIn()
登记一张硬碟,列表中拷贝的数量加1
voidprintTitle()
输出硬碟的片名
voidprintInfo()
输出硬碟的细节信息
boolcheckTitle(stringtitle)
检查片名是否与硬碟的片名相同
voidupdateInStock(intnum)
按数量增加列表中硬碟拷贝数
voidsetCopiesInStock(intnum)
设置列表中硬碟拷贝的数量
VideoListType类:
函数模块
功能
boolvideoSearch(stringtitle);
按片名查找影碟是否在商店中
boolisVideoAvailable(stringtitle);
若某张影碟至少有一个拷贝在商店中则返回true
voidvideoCheckOut(stringtitle);
取出一张要借出的影碟,拷贝数减1,即copiesInStock=copiesInStock-1
voidvideoCheckIn(stringtitle);
归还一张影碟,拷贝数加1
boolvideoCheckTitle(stringtitle);
若某张影碟在商店中则返回true,即copiesInStock=copiesInStock+1
voidvideoUpdateInStock(stringtitle,intnum);
按数值增加某张影碟的拷贝数,即copiesInStock=copiesInStock+num
voidvideoSetCopiesInStock(stringtitle,intnum);
重新设置某张影碟的拷贝数,即copiesInStock=num
voidvideoPrintTitle();
输出影碟的片名
voidprint();
输入库中所有的影碟信息
voidvideoInformation(stringtitle);
输出某影碟的具体信息
intVideoID(stringtitle);
返回编号
voidsearchVideoList(stringtitle,bool&found,list
:
iterator¤t);
在影碟列表中,按照影碟名查找特定的影碟,如果找到则设置found为true,否则为false
2、顾客
顾客对象描述影碟相关的通常属性,如下:
stringName;//姓名
intNumber;//账号
intVideoID[50];//此顾客所出租的影碟
音像店系统管理程序中有关顾客的类:
类
基类
说明
CustomerType
无
一位顾客
CustomerListType
list
顾客列表,CustomerType对象的列表,
继承于STL标准列表容器
CustomerType类:
函数模块
功能
voidsetCustomerInfo(stringname,intnumber,intvideoid[]);
设置属性
boolcheckName(stringname);
检测是否有这名顾客
intgetName();
显示账号
voidRental(intid);
出租影碟
voidBack(intid);
返回影碟
voidShow();
显示顾客的信息
CustomerListType类:
函数模块
功能
voidCustomerShowNumber(stringname);
显示账号
voidCustomerRental(stringname,intID);
出租一张影碟
voidCustomerBack(stringname,intID);
返回一张影碟
voidCustomerShow(stringtitle);
显示顾客的信息
boolCustomerJudge(stringname);
判断顾客是否为会员
voidsearchCustomerList(stringtitle,bool&found,list
:
iterator¤t);
在顾客列表中,按照特定姓名查找特定的账号如果找到则设置found为true,否则为false
设计方案:
首先设置4个类,然后利用case语句对各个函数进行调用。
在这里过程中,保存顾客类的数据。
当输入15时,结束程序。
系统主要流程图:
实现记录:
1、进入主界面:
2、各个功能的实现:
(这里只是显示部分功能)
C++源代码主程序:
#include
#include
#include
#include"VideoType.h"
#include"VideoListType.h"
#include"CustomerType.h"
#include"CustomerListType.h"
usingnamespacestd;
//从输入文件中读取数据并创建影碟列表
voidcreateVideoList(ifstream&infile,VideoListType&videolist)
{
chartitle[50],star1[50],star2[50],producer[50],director[50],productionco[70],ch;
intinstock,videoid;
VideoTypenewvideo;
infile.get(title,50);
infile.get(ch);
while(infile)
{
infile.get(star1,50);
infile.get(ch);
infile.get(star2,50);
infile.get(ch);
infile.get(producer,50);
infile.get(ch);
infile.get(director,50);
infile.get(ch);
infile.get(productionco,50);
infile.get(ch);
infile>>instock;
infile.get(ch);
infile>>videoid;
infile.get(ch);
newvideo.setVideoInfo(title,star1,star2,producer,director,productionco,instock,videoid);
videolist.push_back(newvideo);
infile.get(title,50);
infile.get(ch);
}
}
voiddisplayMenu()
{
cout<<"选择下列一项:
"< cout<<"1: 查找影碟"< cout<<"2: 借出影碟"< cout<<"3: 归还影碟"< cout<<"4: 库存查询"< cout<<"5: 打印所有影碟名称"< cout<<"6: 打印所有影碟详情"< cout<<"7: 显示某张特定影碟的影碟清单"< cout<<"8: 重新设置某张影碟的数量"< cout<<"9: 增加某张影碟的数量"< cout<<"10: 查询顾客的信息"< cout<<"11: 注册新顾客"< cout<<"12: 顾客出租一张影碟"< cout<<"13: 顾客返回一张影碟"< cout<<"14: 顾客账号查询"< cout<<"15: 退出"< } intMember=0; //从文件中写入注册的新会员 voidlogin(CustomerListType&customerlist) { Member++; charname[50]; inttitle[50]={0}; CustomerTypecustomer; cout<<"输入新会员的名字: "< cin>>name; customer.setCustomerInfo(name,Member,title); customerlist.push_back(customer); cout<<"注册成功! 会员号为: "< } intmain() { VideoListTypevideolist; CustomerListTypecustomerlist; intchoice,number; charch,title[50],name[50]; ifstreaminfile; //打开输入文件 infile.open("VideoData.txt"); if(! infile) { cout<<"输入文件不存在! "< return1; } //创建影碟列表 createVideoList(infile,videolist); infile.close(); //显示菜单 displayMenu(); cout<<"输入选项: "< cin>>choice; //处理输入 while(choice! =15) { switch(choice) { case1: cout<<"输入影碟名称: "< cin.get(ch); cin.get(title,50); if(videolist.videoSearch(title)) { cout<<"找到该影碟。 "< } else { cout<<"该影碟不在库中。 "< } break; case2: cout<<"输入影碟名称: "< cin.get(ch); cin.get(title,50); if(videolist.videoSearch(title)) { if(videolist.isVideoAvailable(title)) { videolist.videoCheckOut(title); cout<<"借出影碟: "< } else { cout<<"该影碟库存不足。 "< } } else { cout<<"库中没有该影碟。 "< } break; case3: cout<<"输入影碟名称: "< cin.get(ch); cin.get(title,50); if(videolist.videoSearch(title)) { videolist.videoCheckIn(title); cout<<"感谢归还影碟"< } else { cout<<"库中没有该影碟。 "< } break; case4: cout<<"输入影碟名称: "< cin.get(ch); cin.get(title,50); if(videolist.videoSearch(title)) { if(videolist.isVideoAvailable(title)) { cout<<"该影碟还有库存。 "< } else { cout<<"该影碟已经借光。 "< } } else { cout<<"库中没有该影碟。 "< } break; case5: videolist.videoPrintTitle(); break; case6: videolist.print(); break; case7: cout<<"输入影碟名称: "< cin.get(ch); cin.get(title,50); videolist.videoInformation(title); break; case8: cout<<"输入影碟名称: "< cin.get(ch); cin.get(title,50); cout<<"请输入影碟最新的数量数: "< cin>>number; videolist.videoSetCopiesInStock(title,number); cout< break; case9: cout<<"输入影碟的名称: "< cin.get(ch); cin.get(title,50); cout<<"请输入<<"< "< cin>>number; videolist.videoUpdateInStock(title,number); cout< break; case10: cout<<"输入顾客的名字: "< cin.get(ch); cin.get(name,50); customerlist.CustomerShow(name); cout< break; case11: login(customerlist); break; case12: cout<<"输入顾客的名字: "< cin.get(ch); cin.get(name,50); if(customerlist.CustomerJudge(name)) { cout<<"输入需借出的影碟名称: "< cin.get(ch); cin.get(title,50); if(videolist.videoCheckTitle(title)) { videolist.videoCheckOut(title); number=videolist.VideoID(title); customerlist.CustomerRental(name,number); } else { cout<<"对不起,音像店没有此"<<"<<"< "< } } else { cout<<"对不起,请注册成为会员! "< } cout< break; case13: cout<<"输入顾客的名字: "< cin.get(ch); cin.get(name,50); cout<<"输入返回的影碟名称: "< cin.get(ch); cin.get(title,50); videolist.videoCheckIn(title); number=videolist.VideoID(title); customerlist.CustomerBack(name,number); cout< break; case14: cout<<"输入顾客名字: "< cin.get(ch); cin.get(name,50); customerlist.CustomerShowNumber(name); cout< break; default: cout<<"输入错误! "< } displayMenu(); cout<<"输入选项: "< cin>>choice; } return0; } 实验心得: 此次实验是自己第一次利用面向对象程序设计思想来编写程序。 在整个过程中是十分成功的。 不但完成了实验的要求,而且还更加深刻了自己对面向对象编程的思想: 面向对象程序设计是对数据的封装;范式(模板)的程序设计是对算法的封装。 利用面向对象思想编程是可以简化程序员的懒惰,无论是对象,还是函数,如果你输入有问题,那么都会在编译的时候报告出来,方便你修改,而不是在执行的时候出错,害的你到处去捉虫子。 这就是用面向对象思想编程的好处。 通过此次实验,学到了许多知识。 在这,十分感谢赵玉明老师的指导! 附录: 各类的源代码: #include #include #include"VideoListType.h" voidVideoListType: : searchVideoList(stringtitle,bool&found,list : iterator¤t) { found=false; if(empty()) { cout<<"影碟列表为空! "< } else { current=begin(); found=false; while(! found&¤t! =end()) { if(current->checkTitle(title)) { found=true; } else { current++; } } } } boolVideoListType: : isVideoAvailable(stringtitle) { boolfound; list : iteratorlocation
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 实验 报告