资源描述
中国农业大学
课程论文
(2011-2012学年春季学期)
论文题目: 音像店出租管理系统
课程名称: 面向对象程序设计课程设计
任课教师: 康丽
班 级: 信电114班
学 号: 1108140406
姓 名: 郭晨阳
目录
一、 系统设计目标及意义……………………………… 1
二、 功能介绍…………………………………………… 1
三、 流程图…………………………………………… 2
四、 类图………………………………………… 3
五、 主要运行界面图及运行结果图…………………… 4
六、 系统设计过程中遇到的问题……………………… 11
七、 创新点……………………………………………… 11
八、 课程设计心得体会………………………………… 11
九、 附录………………………………………………… 11
音像出租管理系统
一、系统设计目标及意义
本系统是一个音像出租管理系统,实现任意添加、删除、编辑、找与显示音像资料和顾客信息等功能,为音像出租店的工作提供参考。
二、功能介绍
1、初始化顾客库信息、影碟库信息、租碟库信息的操作
输入1进入系统,输入2退出系统;通过函数的识别,自动判断是否已经初始化顾客库信息、影碟库信息、租碟库信息。若未初始化,则输入这些信息;若已建立,则可直接使用其他功能 。
2、添加和显示信息的操作:分为输入顾客信息,输入碟片信息。输入顾客信息时需要输入编号和名字,输入碟片信息时需要输入编号、名称、主演。输入完信息后可以输出这些信息。
3、删除信息的操作:可以删除所输入的影碟和顾客信息
4、查找顾客信息的操作:通过对顾客编号的输入,实现查看某一位顾客的所有信息。
5、查找碟片的操作:通过对碟片编号的输入,查看是否有这个碟片或者这个碟片是否可借;
6、顾客租碟的操作:顾客可以通过碟片的编号查找碟片,看是否可租,在该过程中需要输入顾客的编号;如果所输入的编号不存在,会提示该碟片不存在;如果租碟成功,会显示该碟片的具体信息。
7、顾客还碟:通过输入所借碟片的编号进行还碟;
8、退出系统:退出音像店出租管理系统界面。
主程序流程图:
开始
显示系统菜单
退出系统
进入系统
顾客还碟
影碟管理
顾客管理
顾客租碟
增加顾客
删除顾客
列出顾客
查找顾客
列出所有影碟
查找影碟
删除影碟
增加影碟
三、类图
Customer
— name[10]:char
— number[5]: char
— phone[20]: char
+ get(): void
+ print(): void
+getnumber(): char*
+getname(): char*
+getphone(): char*
+borrowdie(): void
+Pointborrowdie(): void
+replacedie(): void
+addcustomer(): void
+customerlist(): void
+customerFind_number():void
+customerFind(): void
+customerdelete(): void
+customerdeletefile(): void
+customerguanli(): void
costomerborrowdie
+number[5]: char
+code[20]: char
+zday[15]: char
+hday[15]:char
+time: int
+borrowdie(): void
+print(): void
<<friend>>
die
— code[20]:char
— title[40]:char
— star1[40]:char
— company[40]: char
+ flag: char
+get(): void
+print(): void
+getflag(): void
+getcode(): char*
+gettitle(): char*
+getstar(): char*
+getcompany(): char*
+adddie(): void
+dielist(): void
+dieFind_code: void
+dieFind(): void
+diandelete(): void
+diandeletefile(): void
+dieguanli(): void
四、主要运行界面图及运行结果图
(1)输入1进入系统
(2)输入4进入顾客管理
(3)输入1,添加顾客个人信息,输入编号,姓名,如果不想继续增加顾客输入n
(4)按5返回主界面,进行影碟库的 初始化,输入3
再输入1,增加影碟信息,如编号、名称、主演。
(5)输入5回到主界面,输入1进入顾客租碟部分,其中需要输入顾客编号,所要租的影碟的编号,确认是否要租碟,然后会出现该影碟的信息
确认是否要继续租碟。输入n表示不继续租碟,回到主界面
如果顾客编号或者影碟编号不存在,将出现
(5)输入2,进入“顾客还碟”界面,输入你所需要归还影碟的编号,输入y或者n确定是否归还影碟,然后回到主界面
如果没有此影碟信息,将会有下面
(6)输入3,进入“影碟管理”界面,输入4,列出所有影碟
然后回到影碟管理
输入3,查找影碟,
输入1按影碟编号查找,再输入影碟编号1,输出影碟的详细信息
输入n回到查找界面,再输入0返回影碟管理的界面,
(7)输入2,进入删除影碟界面,输入将要删掉的影碟的编号,再输入y,确认删除影碟,然后又回到影碟管理界面。
(8)输入5,回到主界面
输入4进入顾客管理界面
输入4列出所有顾客信息,然后自动回到顾客管理界面
(9)输入3进入查找顾客的界面,
输入1进行按客户编号查询顾客信息,输入要查找的顾客的编号,
输入n退出查找,回到查找界面
再输入0回到上一级菜单,输入2进行删除顾客操作,输入要删除的顾客的编号,输入y确认删除此顾客,并回到顾客管理界面
输入5退回到主界面,输入2退出系统
五、系统设计过程中遇到的问题
1、本来想编为多文件系统的,但在编译过程出现很多问题,例如在处理非成员函数时总会出现问题
2、功能还不够全面,还不能够解决更多的问题,例如:1不能利用顾客名字和影碟名字进行查询 2、没有对顾客库、碟片库的上限进行检查,有可能会溢出
3操作界面为dos,不够美观,没有能够编成windows操作界面的
六、创新点
1、在删除顾客时增加了判断该顾客是否有租影碟的判断,避免了顾客已删,但他仍有租碟的情况。
七、课程设计心得体会
刚开始的时候有无从下手的感觉,通过去图书馆查阅相关书籍,上网查找相关资料,向学长请教,渐渐的自己也开始明白如何去解决这个问题,但有一些功能的实现还是通过上网查询或学长帮助完成。
通过这次动手编这个比较大型的程序,自己也对C++的知识有了更深的了解,之前在课堂上,知识学习一些理论上的知识,虽然平时也有上机实验,但都是编比较小的程序,而这次真正联系全部的知识,将所有知识融会贯通的运用于一个系统的编程,确实让自己提高了在书本以外的实践动手的能力,相信也会对以后的学习提供很大的帮助。
由于之前忙着期末复习,没时间弄课程设计,所以这次课程设计的时间有点紧张,以至于无法呈现一个更完美的音像出租管理系统。不过,对C++认识的加深和动手能力的提高是自己最大的收获。
八、附录
源文件代码:
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <iomanip.h>
#define S 1
class customer
{
private:
char number[5];
char name[10];
char phone[20];
public:
void get()
{
cout << "请输入顾客编号: ";
cin>>number;
cout << "请输入顾客的姓名: ";
cin>> name;
cout<<"请输入顾客的电话:";
cin>>phone;
}
void print()
{
cout << "顾客编号: " <<number<<endl;
cout << "顾客的姓名: " <<name <<endl;
cout<<"顾客的电话: "<<phone<<endl;
}
char* getnumber()
{
return(number);
}
char* getname()
{
return(name);
}
char* getphone()
{
return(phone);
}
void borrowdie();
void Printborrowdie();
void replacedie();
void addcustomer();
void customerlist();
void customerFind_number();
void customerFind();
void customerdelete();
void customerdeletefile();
void customerguanli();
};
class die
{
private:
char code[20];
char title[40];
char star1[40];
char company[40];
int onshelf;
public:
char flag;
die()
{
flag ='N';
}
void get() {
cout << "请输入影碟编号: ";
cin>> code;
cout << "请输入影碟名称: ";
cin>> title;
cout << "请输入主演: ";
cin>> star1;
cout<<"请输入发行公司: ";
cin>>company;
}
void print()
{
cout << "影碟编号: " <<code <<endl;
cout << "影碟名称: " <<title <<endl;
cout << "主演: " <<star1 <<endl;
cout<<"发行公司: "<<company <<endl;
if(onshelf)
cout<<"可租"<<endl;
else
cout<<"已租出"<<endl;
}
void getflag()
{
cout << "确认要租此碟吗?[Y/N] ";
cin >> flag;
}
char* getcode()
{
return(code);
}
char* gettitle()
{
return(title);
}
char* getstar1()
{
return(star1);
}
char* getcompany()
{
return(company);
}
void adddie() ;
void dielist();
void dieFind_code();
void dieFind() ;
void diandelete();
void diandeletefile();
void dieguanli();
friend class customer;
};
class customerborrowdie {
public:
char number[5];
char code[20];
char zday[15];
char hday[15];
int time;
void borrowdie()
{
cout << "请输入您的编号: ";
cin>>number;
cout << "请输入您要租的影碟的编号: ";
cin>> code;
cout<<"请输入租碟的日期: ";
cin>>zday;
cout<<"请输入归还日期: ";
cin>>hday;
cout<<"租借时间: ";
cin>>time;
}
void print()
{
cout << "您的编号: " << number <<endl;
cout << "您要租的影碟的编号是: " <<code <<endl;
cout<<"您要租借的日期是:"<<zday<<"---"<<hday<<endl;
cout<<"总计"<<time<<"天"<<endl;
if(time<3||time==3)
cout<<"租费:"<<time*S<<"元";
else
cout<<"租费:"<<3*S<<"元"<<"罚款:"<<0.1*(time-3)<<endl;
}
friend class customer;
};
customer customersz[500];
die dian[500];
customerborrowdie gkbd[500];
fstream file_customer;
fstream file_die;
fstream file_gkbd;
customer a;
die n;
customerborrowdie c;
int g=0;
int dd=0;
int b=0;
void cshcustomer()
{
file_customer.open( "customer.txt ", ios::in);
file_customer.read((char*)&customersz[0], sizeof(customersz[0]));
if(strlen(customersz[0].getnumber()) == 0)
{
cout << "请建立顾客信息。 " <<endl;
}
else
{
while(!file_customer.eof()) {
g++; file_customer.read((char*)&customersz[g], sizeof(customersz[g]));
}
cout << "初始化顾客库成功…… " <<endl;
}
file_customer.close();
}
void cshdie(){
file_die.open( "diefile.txt ", ios::in);
file_die.read((char*)&dian[0], sizeof(dian[0]));
if(strlen(dian[0].getcode()) == 0)
{
cout << "请建立影碟信息。 " <<endl;
}
else
{
while(!file_die.eof())
{
dd++;
file_die.read((char*)&dian[dd], sizeof(dian[dd]));
}
cout << "初始化影碟库成功…… " <<endl;
}
file_die.close();
}
void cshgkbd() {
file_gkbd.open( "gkbd.txt ", ios::in);
file_gkbd.read((char*)&gkbd[0], sizeof(gkbd[0]));
if(strlen(gkbd[0].number) == 0)
{
cout << "暂时无租碟情况。 " <<endl;
}
else
{
while (!file_gkbd.eof())
{
b++;
file_gkbd.read((char*)&gkbd[b], sizeof(gkbd[b]));
}
cout << "初始化租碟库成功…… " <<endl;
}
file_gkbd.close();
}
void customer::borrowdie(){
int d = 0; int i = 0;
char flag = 'y';
customerborrowdie temp;
while(flag == 'y' || flag == 'Y')
{
temp.borrowdie();
for (i = 0; i < g; i++) {
if (strcmp(temp.number, customersz[i].getnumber()) == 0)
{
d = 1; break;
}
}
if (d == 0)
{
cout << "对不起!您的编号不存在! " <<endl;
return;
}
int d = 0, i = 0;
for(i = 0; i < dd; i++) {
if(strcmp(temp.code,dian[i].getcode()) == 0)
{
d = 1;
break;
}
}
if(d == 0)
{
cout << "对不起!我们这里没有此影碟! " <<endl;
return;
}
int j = 0;
for(j = 0;j < b; j++)
{
if(strcmp(temp.code, gkbd[j].code) == 0)
{
cout << "非常抱歉,此影碟已经租出。 " <<endl;
return;
}
}
dian[i].getflag();
if (dian[i].flag == 'Y'|| dian[i].flag == 'y')
{
file_gkbd.open( "gkbd.txt ", ios::app);
dian[i].print();
gkbd[b] = temp;
file_gkbd.write((char*)&gkbd[b], sizeof(gkbd[b]));
b++;
cout << "租碟成功!请按时归还! " <<endl;
file_gkbd.close();
n.onshelf=0;
}
else
{
cout << "租碟未成功。 " <<endl;
}
cout << "要继续租影碟吗?[Y/N] ";
cin>> flag;
}
}
void customer::Printborrowdie()
{
int i=0;
for(i=0;i<b;i++)
{
gkbd[i].print ();
cout<<endl;
}
}
void customer::replacedie()
{
char code[20];
int i = 0, d = 0;
cout << "您要还的影碟的编号是: ";
cin>> code;
for (i = 0 ; i < b; i++)
{
if (strcmp(code, gkbd[i].code) == 0)
{
d = 1;
break;
}
}
if (d == 0)
{
cout << "此碟尚未租出或者不存在。 " <<endl;
return;
}
else
{
cout << "此碟租出情况如下: " <<endl;
gkbd[i].print();
}
char flag;
cout << "确认要还此碟吗?[Y/N] ";
cin>> flag;
if (flag == 'y' || flag == 'Y')
{
int p , j = 0;
p = b - i;
for (j = 0 ; j <= p ; j++)
{
gkbd[i] = gkbd[i + 1];
i++;
}
b--; n.onshelf++;
for (i = 0; i < b; i++)
{
gkbd[i].print();
cout <<endl;
}
}
}
void customer::addcustomer()
{
char flag = 'y';
int j = 0 ;
int p = 0 ;
customer temp;
file_customer.open( "customerfile.txt ", ios::app);
while (flag == 'Y' || flag == 'y')
{
p = 0;
temp.get();
for(j = 0; j < g; j++)
{
if(strcmp( temp.getnumber() , customersz[j].getnumber() ) == 0)
{
cout << "对不起!此客户编号已经存在! " <<endl;
p = 1;
}
}
if (p == 0)
{
customersz[g] = temp;
file_customer.write((char*)&customersz[g], sizeof(customersz[g]));
cout << "\t\t写入客户库成功…… " <<endl;
g++;
}
cout << "您还要继续吗?[Y/N] ";
cin>>flag;
}
file_customer.close();
}
void die::adddie()
{
char f = 'Y';
int j = 0;
int p = 0;
die temp;
file_die.open( "diefile.txt ", ios::app);
while ( f == 'Y' || f == 'y')
{
p = 0;
temp.get();
for(j = 0; j < dd; j++)
{
if (strcmp(temp.getcode(), dian[j].getcode()) == 0)
{
cout << "对不起!此影碟编号已经存在! " <<endl;
p = 1;
}
}
if( p == 0)
{
dian[dd] = temp;
file_die.write((char*)&dian[b], sizeof(dian[dd]));
cout << "\t\t写入影碟库成功…… " <<endl;
dd++;
}
cout<<"要继续吗?[Y/N] ";
cin>>f;
}
file_die.close();
};
void customer::customerlist()
{
for (int j = 0; j < g; j++)
{
customersz[j].print();
cout <<endl;
}
}
void die::dielist()
{
for(int j = 0; j < dd; j++)
{
dian[j].print();
cout <<endl;
}
}
void customer::customerFind_number()
{
int j = 0;
int p = 0;
int d = 0;
char flag = 'Y';
char number[5];
while (flag == 'Y' || flag == 'y')
{
d = 0;
cout<< "请输入要查找的客户的客户编号: ";
cin>>number;
for(j = 0 ;j < g; j++)
{
if(strcmp(number, customersz[j].getnumber()) ==0)
{
p = j;
d = 1;
break; }
}
if (d == 1)
{
customersz[p].print();
}
else
{
cout<<"非常抱歉!没有找到你想要的! "<<endl;
}
cout<<"要继续查找吗?[Y/N] ";
cin>> flag;
}
}
void die::dieFind_code()
{
int j = 0;
int p = 0;
int d = 0;
char flag = 'Y';
char code[20];
while (flag == 'Y' || flag == 'y')
{
d = 0;
cout<< "请输入要查找的影碟的编号: ";
cin>> code;
for (j = 0; j < dd; j++)
{
if(strcmp(code, dian[j].getcode()) == 0)
{
p = j;
d = 1;
break;
}
}
if (d == 1)
{
dian[p].print();
}
else
{
cout << "非常抱歉!没有找到你想要的! " <<endl;
}
cout << "要继续查找吗?[Y/N] ";
cin>> flag;
}
}
void customer::customerFind()
{
char flag;
while (1)
{
cout << "1.按客户编号查找 0.返回上一级菜单 " <<endl;
cout << "请输入功能代码: ";
cin>> flag;
switch (flag)
{
case '1':
a.customerFind_number();
break;
case '0':
return;
break;
default:
cout << "输入错误,请重新输入: " <<endl;
}
}
}
void die::dieFind()
{
char flag;
while (1)
{
cout << "1.按影碟编号查找 0.返回上一级菜单 " <<endl;
cout << "请输入功能代码: ";
cin>> flag;
switch (flag)
{
case '1':
n.dieFind_code();
break;
case '0':
return;
break;
default:
cout <
展开阅读全文