用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

影碟出租

2017-04-18 作者: 空空112举报

[c++]代码库

#ifndef VIDEO_H
#define VIDEO_H
#include<iostream>
#include<string>
using namespace std;
//class video
string vidname;
class video{              //影碟类 
    friend ostream &operator<<(ostream &os,video &vi);
    friend class application;
public:
    video(string="",string="",int=0,string="",string="",string="",int=0);
    video(video &vi);
    void input();
//private:
    string Vname;        //碟片名称
    string Country;      //国家
    int Type;            //类型
    string Producer;     //制片人
    string Director;     //导演
    string Star;         //主演明星
    int Number;          //库存量
    video *next;
};
video::video(string vname,string country,int type,string producer,string director,string star,int number){
    Vname=vname;
    Country=country;
    Type=type;
    Producer=producer;
    Director=director;
    Star=star;
    Number=number;
}
video::video(video &vi){
    Vname=vi.Vname;
    Country=vi.Country;
    Type=vi.Type;
    Producer=vi.Producer;
    Director=vi.Director;
    Star=vi.Star;
    Number=vi.Number;
}
ostream &operator<<(ostream &os,video *vi){
    os<<"****************************************************************"<<endl;
    os<<"该影碟信息为:"<<endl;
    os<<"名称:"<<vi->Vname<<"国家:"<<vi->Country<<"类型:";
    if(vi->Type==1)os<<"喜剧";
    else{
        if(vi->Type==2)os<<"悲剧";
        else{
            if(vi->Type==3)os<<"科幻片";
            else{
                if(vi->Type==4)os<<"悬疑剧";
                else{
                    if(vi->Type==5)os<<"惊悚片";
                    else{
                        if(vi->Type==6)os<<"其他";
                    }
                }
            }
        }
    }
    os<<endl;
    os<<"制片人:"<<vi->Producer<<"导演:"<<vi->Director<<"主演:"<<vi->Star<<"库存量:"<<vi->Number<<endl;
    return os;
}
#endif
 
#ifndef CUSTOMER_H
#define CUSTOMER_H
#include<iostream>
#include<string>
#include"video.h"
using namespace std;
//class Customer
struct VideoInfo{                       //碟片信息
    string VideoName;                       //影片名称
    int BeginTime;                      //影片借阅日期
    int EndTime;                        //影片归还日期
};
string Cname;
class Customer{                             //顾客类
    friend ostream & operator<< (ostream &os,const Customer &cu);
    friend class application;
    friend class video;
public:
    Customer(string="",string="",int=0,int=0,string="",int=0,int=0);                        //构造函数
    int DeclineMoney(int );         //扣取消费额
    bool RentVideo(string );        //出租影碟
    bool ReturnVideo(string );      //归还影片
//private:
    string idPerson;                //会员账号
    string Name;                    //会员姓名
    int LeftMoney;                  //会员剩余金额
    int nCount;                     //所借碟片数量
    VideoInfo Video[10];            //每个会员最多借10张影碟
    Customer *next1;
};
Customer::Customer(string idperson,string name,int leftmoney,int ncount,string videoname,int begintime,int endtime){
    idPerson=idperson;
    Name=name;
    LeftMoney=leftmoney;
    nCount=ncount;
    for(int i=0;i<nCount;i++){
        Video[i].VideoName=videoname;
        Video[i].BeginTime=begintime;
        Video[i].EndTime=endtime;
    }
}
ostream & operator<< (ostream &os,const Customer *cu){
    os<<"会员编号为:\t"<<cu->idPerson<<"会员姓名为:\t"<<cu->Name<<"会员剩余会费余额为:\t"<<cu->LeftMoney<<endl;
    for (int i=0;i<cu->nCount;i++){
        os<<"所借影片名为:\t"<<cu->Video[i].VideoName<<endl;
        os<<"影片借阅日期为:\t"<<cu->Video[i].BeginTime<<endl;
        os<<"影片归还日期为:\t"<<cu->Video[i].EndTime<<endl;
        os<<"--------------------------------------------\n";
    }
    return os;
}
#endif
 
#ifndef MENU_H
#define MENU_H
#include<iostream>
using namespace std;
//class menu
class menu{                  //菜单类
public:
    int showMainMenu();
private:
};
int menu::showMainMenu(){
    system("cls");
    cout<<" ————————————————————————"<<endl;
    cout<<"|               欢迎使用影碟出租系统             |"<<endl;
    cout<<"|************************************************|"<<endl;
    cout<<"|               1.影碟租赁                       |"<<endl;
    cout<<"|               2.影碟归还                       |"<<endl;
    cout<<"|               3.查看各类型影碟信息             |"<<endl;
    cout<<"|               4.查询碟片信息                   |"<<endl;
    cout<<"|               5.添加新影碟                     |"<<endl; 
    cout<<"|               6.删除碟片信息                   |"<<endl;
    cout<<"|               7.修改碟片信息                   |"<<endl;
    cout<<"|               8.查看会员信息                   |"<<endl;
    cout<<"|               9.注册会员                       |"<<endl;
    cout<<"|               10.注销会员                      |"<<endl;
    cout<<"|               11.更新会员信息与充值            |"<<endl;
    cout<<"|               12.退出系统                      |"<<endl;
    cout<<" ————————————————————————"<<endl;
    cout<<"请选择1-12:"<<endl;
    int select;
    cin>>select;
    while(select<1||select>12){
        cout<<"选择错误,请重新选择1-12"<<endl;
        cin.clear();     //当输入字符,清空流错误状态
        cin.sync();      //清空数据流
        cin>>select;
    }
    return select;
}
#endif
 
#ifndef APPLICATION_H
#define APPLICATION_H
#include<iostream>
#include<string>
#include<fstream>
#include"video.h"
#include"Customer.h"
#include"menu.h"
using namespace std;
class application{     //数据应用类
public:
    application();
    ~application();
    void load();                    //数据输出
    void save();                    //数据保存到文件
    void Rent();                    //1.影碟租赁
    void Return();                  //2.影碟归还
    void Checkall();                //3.查看各类型影碟信息
    void search(int Type);          //根据类型查找
    void Check(string vidname);     //4.查看影碟信息:根据碟片名称查找
    void Addvideo();                //5.添加影碟
    void Deletevideo();             //6.删除影碟
    void Modifyvideo(string Vname); //7.修改影碟信息
    void Customerinfo(string Cname);//8.会员信息:根据姓名查找
    void Add();                     //9.注册会员
    void Delete();                  //10.注销会员
    void Modify(string Name);       //11.更新会员信息与充值
    void run();
private:
    string title;
    menu myMenu;
    video myvideo;
    Customer mycustomer;
    video *vid;
    Customer *cus;
};
application::application(){
    vid=0;
    cus=0;
    load();
}
application::~application(){
    video *v;
    v=vid;
    Customer *c;
    c=cus;
    while(v){
            v=v->next;
            delete vid;
            vid=v;
        }
        vid=0;
    while(c){
            c=c->next1;
            delete cus;
            cus=c;
        }
        vid=0;
}
void application::load(){
    ifstream file;                       //碟片信息
    video *v=vid;
    string Vname;        //碟片名称
    string Country;      //国家
    int Type;            //类型
    string Producer;     //制片人
    string Director;     //导演
    string Star;         //主演明星
    int Number=0;        //库存量          
    file.open("video.txt",ios::in); 
    file>>Vname>>Country>>Type>>Producer>>Director>>Star>>Number;
    while(file.good()){
        v=new video(Vname,Country,Type,Producer,Director,Star,Number);
        v->next=0;
        //碟片结点加入链表
        if(vid) //若已经存在结点
        {
            video *v2;
            v2=vid;
            while(v2->next) //查找尾结点
            {
                v2=v2->next;
            }
            v2->next=v; //连接
        }
        else //若不存在结点(表空)
            vid=v; //连接
        file>>Vname>>Country>>Type>>Producer>>Director>>Star>>Number;
    }
    file.close();
    ifstream file1;                           //会员信息
    Customer *c=cus;
    string idPerson;                //会员账号
    string Name;                    //会员姓名
    int LeftMoney;                  //会员剩余金额
    int nCount;                     //所借碟片数量
    VideoInfo Video[10];            //每个会员最多借10张影碟
    file1.open("Customer.txt",ios::in);  
    file1>>idPerson>>Name>>LeftMoney>>nCount;
    for(int i=0;i<nCount;i++){
        file1>>Video[i].BeginTime>>Video[i].EndTime>>Video[i].VideoName;
    }
    while(file1.good()) {
        for(int i=0;i<nCount;i++){
        c=new Customer(idPerson,Name,LeftMoney,nCount,Video[i].VideoName ,Video[i].BeginTime,Video[i].EndTime);
        c->next1=0;
        //顾客结点加入链表
        if(cus) //若已经存在结点
        {
            Customer *c2;
            c2=cus;
            while(c2->next1) //查找尾结点
            {
                c2=c2->next1;
            }
            c2->next1=c; //连接
        }
        else //若不存在结点(表空)
            cus=c; //连接
        file1>>Video[i].BeginTime>>Video[i].EndTime>>Video[i].VideoName;
        }
    }
    file1.close();
}
void application::save(){
    ofstream file("video.txt",ios::out);
    ofstream file1("Customer.txt",ios::out);
    char c;
    cout<<"\n是否保存数据?[Y/N]:";
    cin>>c;
    if(toupper(c)!='Y')
        return;
    video *v=vid;
    while(v){
        file<<v->Vname<<v->Country<<v->Type<<v->Producer<<v->Director<<v->Star<<v->Number<<endl;
        v=v->next;
    }
    file.close();
     
    Customer *cu=cus;
    while(cu){
        file1<<cu->idPerson<<cu->Name<<cu->LeftMoney<<cu->nCount<<cu->Video<<endl;
        cu=cu->next1;
    }
    file1.close();
    cout<<"\n保存成功...\n";
}
void application::Rent(){
    int number;
    Customer *c1;
    c1=cus;
    cout<<"请输入会员姓名:"<<endl;
    cin>>Cname;
    while(c1){ 
        if(c1->Name==Cname)
            break;
        else{
            c1=c1->next1;
        }
    }
    if(c1!=NULL){
        cout<<c1;
        cout<<"请输入租赁碟片数目:";
        cin>>number;
        if(number>10-c1->nCount)
             cout<<"租赁数目超过限定值!"<<endl;
        else
            if(number*20>c1->LeftMoney)
                cout<<"余额不足,请充值或减少影碟数!"<<endl;
        if(number<=10-c1->nCount&&number*20<=c1->LeftMoney){
            c1->nCount=number;
            for(int i=0;i<number;i++){
                cout<<"请输入租赁日期(例:2013年08月08日写为20130808):";
                cin>>c1->Video[i].BeginTime;
                cout<<"请输入碟片名:";
                cin>>c1->Video[i].VideoName;
            }
            c1->LeftMoney-=number*20;
            cout<<"\t\t租赁成功!"<<endl;
        }
    }
    else
        cout<<"未找到该会员,请先注册!"<<endl;
}
void application::Return(){
    int number,time;
    Customer *c1;
    c1=cus;
    cout<<"请输入会员姓名:"<<endl;
    cin>>Cname;
    while(c1){ 
        if(c1->Name==Cname)
            break;
        else{
            c1=c1->next1;
        }
    }
    if(c1!=NULL){
        cout<<c1;
        Customerinfo(Cname);
        cout<<"请输入归还碟片数目:";
        cin>>number;
        c1->nCount=c1->nCount-number;
        for(int i=0;i<number;i++){  
            cout<<"请输入碟片名称:";
            cin>>c1->Video[i].VideoName;
            cout<<"请输入归还日期:";
            cin>>c1->Video[i].EndTime;
            cout<<"请输入该碟片租赁天数:";
            cin>>time;
            if(time%3==0)
                c1->LeftMoney=c1->LeftMoney+20-time/3;
            else
                c1->LeftMoney=c1->LeftMoney+20-time/3-1;
            cout<<"\t\t扣费成功!"<<endl;
        }
        cout<<"\t\t***归还成功***\n";
    }
    else
        cout<<"未找到该会员,请确认!"<<endl;
}
void application::search(int Type){     //根据类型查找
    video *v1;
    v1=vid;
    while(v1){ 
        if(v1->Type==Type)
            break;
        else{
            v1=v1->next;
        }
    }
    if(v1!=NULL){
        cout<<v1;
    }
    else
        cout<<"未找到该类型的碟片!"<<endl;
}
void application::Checkall(){
    int Type;char c;
    cout<<"选择要查找的碟片类型(1.喜剧2.悲剧3.科幻片4.悬疑剧5.历史剧6.惊悚片7.其他):"<<endl;
    cin>>Type;
    search(Type);
    cout<<"********以上为类型所有碟片*********"<<endl;
    cout<<"是否继续查找【Y/N】?"<<endl;
    cin>>c;
    if(toupper(c)=='Y'){
        Checkall();
        return ;
    }
    else
        return ;
        system("pause");
}
void application::Check(string vidname){
    video *v1;
    v1=vid;
    while(v1){ 
        if(v1->Vname==vidname)
            break;
        else{
            v1=v1->next;
        }
    }
    if(v1!=NULL){
        cout<<v1;
    }
    else
        cout<<"未找到该碟片!"<<endl;
}
void application::Addvideo(){
    system("cls");
    video *v,*v2; //新结点指针
    string Vname;        //碟片名称
    string Country;      //国家
    int Type=7;            //类型
    string Producer;     //制片人
    string Director;     //导演
    string Star;         //主演明星
    int Number=0;        //库存量
    char c;
    cout<<"\n** 新增碟片信息 **\n";
    //输入碟片信息
    cout<<"输入片名:\t";
    cin>>Vname;
    cout<<endl;
    video *v1;
    v1=vid;
    while(v1){ 
        if(v1->Vname==Vname){
            break;
        }
        else{
            v1=v1->next;
        }
    }
    if(v1!=NULL){
        cout<<"该碟片已存在,是否修改该碟片信息(Y/N) "<<endl;
        cin>>c;
        if(toupper(c)=='Y'){
            cout<<"该碟片信息为:"<<endl;
            Check(Vname);
            cout<<endl;
            Modifyvideo(Vname);
            return ;
        }
        else
            return ;
    }
    cout<<"国家:";cin>>Country;
    cout<<"类型(1.喜剧2.悲剧3.科幻片4.悬疑剧5.惊悚片6.其他):";cin>>Type;
    cout<<"制片人:";cin>>Producer;
    cout<<"导演:";cin>>Director;
    cout<<"主演:";cin>>Star;
    cout<<"库存量:";cin>>Number;
    v=new video(Vname,Country,Type,Producer,Director,Star,Number);
    v->next=0;
    //碟片结点加入链表 
    if(vid)             //若已经存在结点
    {
        v2=vid;
        while(v2->next) //查找尾结点
        {
            v2=v2->next;
        }
        v2->next=v;     //连接
    }
    else                //若不存在结点(表空)
    {
        vid=v;          //连接
    }
    save();
    cout<<"\t\t\t   ***添加成功***\n"<<endl;
    cout<<"是否继续添加(Y/N)  "<<endl;
    cin>>c;
    if(toupper(c)=='Y')
            {
                Addvideo();
                return ;
            }
    else
        return ;
}
void application::Deletevideo(){
    system("cls");
    char c;
    string Vname;
    cout<<"\n** 删除信息 **\n";
    cout<<"输入要删除的碟片名:\t";
    cin>>Vname;
    cout<<endl;
    //查找要删除的结点
    video *v1,*v2;
    v1=vid;
    while(v1){
        if(v1->Vname==Vname)
            break;
        else{
            v2=v1;
            v1=v1->next;
        }
    }
    //删除结点
    if(v1!=NULL)//若找到结点,则删除
    {
        cout<<"所要删除的碟片信息如下:\n"<<endl;
        cout<<v1;
        cout<<"确定是否删除(Y/N): ";
        cin>>c;
        if(toupper(c)!='Y')
            return;
        if(v1==vid) //若要删除的结点是第一个结点
        {
            vid=v1->next;
            delete v1;
        }
        else //若要删除的结点是后续结点
        {
            v2->next=v1->next;
            delete v1;
        }
        save();
        cout<<"\t\t***删除成功***\n";
        cout<<"是否继续删除(Y/N)  "<<endl;
        cin>>c;
        if(toupper(c)=='Y')
            {
                Deletevideo();
                return ;
            }
        else
            return ;
    }
    else //未找到结点
        cout<<"未找到该碟片!\n";
}
void application::Modifyvideo(string vidname){
    video *v1;
    char c;
    v1=vid;
    while(v1){
        if(v1->Vname==vidname)
            break;
        else{
            v1=v1->next;
        }
    }
    if(v1!=NULL)//若找到结点
    {
        system("cls");
        cout<<"所要修改的碟片信息如下:\n"<<endl;
        cout<<v1;
        do{
            cout<<"1.修改碟片名称  2.修改国家  3. 修改类型 4.修改制片人"  ;
            cout<<"   5. 修改导演   6.修改主演  7.修改库存量  8. 退出修改 \n"<<endl;
            cout<<"请选择(1-8)要修改的信息\n"<<endl;
            cin>>c;
            if(c!='8')
            cout<<"请输入新的信息:  ";
            switch(c){
            case '1': cin>>v1->Vname; break;
            case '2': cin>>v1->Country; break;
            case '3': cin>>v1->Type; break;
            case '4': cin>>v1->Producer; break;
            case '5': cin>>v1->Director; break;
            case '6': cin>>v1->Star; break;
            case '7': cin>>v1->Number;break;
            default: break;
            }
        }while(c!='8');
        cout<<"\t   ***修改成功***\n"<<endl;
        cout<<"是否继续修改(Y/N):  "<<endl;
        cin>>c;
        if(toupper(c)=='Y'){
            cout<<"请输入要修改碟片的名称:  ";
            cin>>vidname;
            cout<<endl;
            Modifyvideo(vidname);
            return ;
        }
        else
            return ;
    }
    else //未找到结点
        cout<<"未找到!\n";
}
void application::Customerinfo(string Cname){
    Customer *c1;
    c1=cus;
    while(c1){ 
        if(c1->Name==Cname)
            break;
        else{
            c1=c1->next1;
        }
    }
    if(c1!=NULL){
        cout<<c1;
    }
    else
        cout<<"未找到该会员!"<<endl;
}
void application::Add(){
    system("cls");
    Customer *c,*c2; //新结点指针
    string idPerson;                //会员账号
    string Name;                    //会员姓名
    int LeftMoney=0;                //会员剩余金额
    int nCount=0;                   //所借碟片数量
    char a;
    cout<<"\n** 新增会员信息 **\n";
    cout<<"输入会员名:\t";
    cin>>Name;
    cout<<endl;
    Customer *c1;
    c1=cus;
    while(c1){ 
        if(c1->Name==Name){
            break;
        }
        else{
            c1=c1->next1;
        }
    }      
    cout<<"请输入会员编号:\n";
    cin>>idPerson;
    cout<<"初始金额:";
    cin>>LeftMoney;
    nCount=0;
    c=new Customer(idPerson,Name,LeftMoney,nCount);
    c->next1=0;
    if(cus){
        c2=cus;
        while(c2->next1){
            c2=c2->next1;
        }
        c2->next1=c;    
    }
    else{
        cus=c;       
    }
    save();
    cout<<"\t\t\t   ***注册成功***\n"<<endl;
    cout<<"是否继续(Y/N)  "<<endl;
    cin>>a;
    if(toupper(a)=='Y'){
        Add();
        return ;
    }
    else
        return ;
}
void application::Delete(){
    system("cls");
    char a;
    string Name;
    cout<<"\n** 删除信息 **\n";
    cout<<"输入要删除的会员名:\t";
    cin>>Name;
    cout<<endl;
    Customer *c1,*c2;
    c1=cus;
    while(c1){
        if(c1->Name==Name)
            break;
        else{
            c2=c1;
            c1=c1->next1;
        }
    }
    if(c1!=NULL){
        cout<<"所要删除的会员信息如下:\n"<<endl;
        cout<<c1;
        cout<<"确定是否删除(Y/N): ";
        cin>>a;
        if(toupper(a)!='Y')
            return;
        if(c1==cus){
            cus=c1->next1;
            delete c1;
        }
        else{
            c2->next1=c1->next1;
            delete c1;
        }
        save();
        cout<<"\t\t***删除成功***\n";
        cout<<"是否继续删除(Y/N)  "<<endl;
        cin>>a;
        if(toupper(a)=='Y'){
            Delete();
            return ;
        }
        else
            return ;
    }
    else //未找到结点
        cout<<"未找到该会员!\n";
}
void application::Modify(string Cname){
    Customer *c1;
    char a;
    c1=cus;
    while(c1){
        if(c1->Name==Cname)
            break;
        else{
            c1=c1->next1;
        }
    }
    if(c1!=NULL)//若找到结点
    {
        system("cls");
        cout<<"所要修改的会员信息如下:\n"<<endl;
        cout<<c1;
        do{
            cout<<"1.修改姓名  2.修改编号  3.充值  4.退出  \n"<<endl;
            cout<<"请选择(1-4)要修改的信息\n"<<endl;
            cin>>a;
            if(a!='4')
            cout<<"请输入新的信息:  ";
            switch(a){
            case '1': cin>>c1->Name; break;
            case '2': cin>>c1->idPerson; break;
            case '3': cin>>c1->LeftMoney;break;
            default: break;
            }
        }while(a!='4');
        cout<<"\t   ***修改成功***\n"<<endl;
        cout<<"是否继续修改(Y/N):  "<<endl;
        cin>>a;
        if(toupper(a)=='Y'){
            cout<<"请输入要修改会员的姓名:  ";
            cin>>Cname;
            cout<<endl;
            Modify(Cname);
            return ;
        }
        else
            return ;
    }
    else //未找到结点
        cout<<"未找到!\n";
}
void application::run(){
     bool userExcited=false;
    while(!userExcited){
        int userSelection=myMenu.showMainMenu();
        switch(userSelection){
            case 1:
                Rent();         //1.影碟出租
                break;
            case 2:
                Return();       //2.影碟归还
                break;
            case 3:
                Checkall();     //3.查看各类型影碟信息
                break;
            case 4:{
                 system("cls");
                 cout<<"请输入碟片名称:  ";
                 cin>>vidname;
                 cout<<endl;
                 Check(vidname);        //4.查看影碟信息
                   }
                break;
            case 5:
                Addvideo();      //5.添加影碟
                break;
            case 6:
                Deletevideo();   //6.删除影碟
                break;
            case 7:{
                cout<<"请输入要修改碟片的名称:  ";
                cin>>vidname;
                cout<<endl;
                Modifyvideo(vidname);
                   }       //7.修改影碟
                break;
            case 8:{
                 system("cls");
                 cout<<"请输入会员姓名:  ";
                 cin>>Cname;
                 cout<<endl;
                Customerinfo(Cname);
                   }
                break;               //8.查看会员信息
            case 9:
                Add();
                break;               //9.注册会员
            case 10:
                Delete();
                break;               //10.注销会员
            case 11:{
                cout<<"请输入要修改会员的姓名:  ";
                cin>>Cname;
                cout<<endl;
                Modify(Cname);
                    }
                break;               //11.更新会员信息与充值
            case 12:              
                userExcited=true;    //12.退出
        }
        if(userSelection!=12){
            cout<<"流程将返回主界面,";
            system("pause");
        }
        else
             cout<<"你选择了退出功能,程序将结束运行!";
    }
}
#endif
 
#include<iostream>
#include"application.h"
using namespace std;
int main(){
    application myApp;
    myApp.run();
    char s;
    cout<<"是否要保存您的所有操作(Y/N):  "<<endl;
    cin>>s;
    if(toupper(s)=='Y')
        myApp.save();
    return 0;
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...