面向对象实验报告.docx
《面向对象实验报告.docx》由会员分享,可在线阅读,更多相关《面向对象实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
![面向对象实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/30/98d85b99-da44-453c-a4c0-09a8bc1a148e/98d85b99-da44-453c-a4c0-09a8bc1a148e1.gif)
面向对象实验报告
面
向
对
象
程
序
设
计
学号:
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