基于c++的影院购票系统

#include<bits/stdc++.h>
#include<stdio.h>  
#include <string.h>  
#include <stdbool.h>  
#include <cstring>
#include<limits>
#define N 50

//定义Movie结构体
struct Movie        
{  
    char name[50];  
    int time;  
    double price;  
    int hall;  
    int seat;  
};
  
//定义全局Movie数组 
Movie movies[20];              
//定义全局变量记录影片数量    
int movieCount=0;                

void entrance();                        //系统欢迎界面 
void chance();                          //模式选择界面
int choice();                           //操作选择

// 函数声明  
//定义类 
class User
{
public:
	void user_welcome();                //普通用户选择界面
	void user_login();                  //普通用户登录界面 
	void user_menu();                   //普通用户菜单
	bool purchase(const char* movieName,int numSeat);              //普通用户购票 
	bool refund(const char* movieName,int numSeat);                //普通用户退票 
	void print();                       //普通用户打印影票
};                      

//定义类
//继承 
class Administrator:public User 
{
public:
	void administrator_welcome();       //管理员选择界面
	void administrator_login();         //管理员登录界面 
	void administrator_menu();          //管理员菜单
    void add();                         //管理员添加影片 
	void show();                        //管理员查看影片 
	void search();                      //管理员查找影片 
	void expurgate();                   //管理员删除影片 
	void modify();                      //管理员修改影片 
};

//定义类名 
Administrator administrator;
User user;
 
//系统欢迎界面
void entrance()
{
	std::cout<<"**************************************************"<<std::endl;
    std::cout<<"*        欢迎进入影院购票系统,请选择你的身份    *"<<std::endl;  
    std::cout<<"*                1:管理员模式                    *"<<std::endl;   
    std::cout<<"*                2:用户模式                      *"<<std::endl; 
    std::cout<<"*                3:直接退出                      *"<<std::endl;  
    std::cout<<"**************************************************"<<std::endl;
}  

//模式选择界面 
void chance()
{
	int num;
	std::cin>>num;
	
	switch(num)
	{
	    case 1:
	    	//选择1,则进入管理员模式 
		    administrator.administrator_welcome();
		    break;            
	    case 2:
	    	//选择2,则进入普通用户模式
		    user.user_welcome();
		    break;            
		case 3:
			//退出 
		    return; 
        default:  
            std::cout<<"选择无效,请重新输入"<<std::endl; 
	}
}

//管理员添加影片
void Administrator::add()
{  
    if(movieCount>=20)
	{   
	    //最多可在系统中添加20个影片 
        std::cout<<"影片存储列表已满,无法继续添加影片"<<std::endl;  
        return;  
    }  
    
    //管理员添加的影片所具有的信息 
    std::cout<<"请输入影片名字:";  
    std::cin.getline(movies[movieCount].name,sizeof(movies[movieCount].name));  
    std::cout<<"请输入影片时长(分钟):";  
    std::cin>>movies[movieCount].time;  
    std::cin.ignore();  
    std::cout<<"请输入影片价格:";  
    std::cin>>movies[movieCount].price;  
    std::cin.ignore();  
    std::cout<<"请输入影厅号:";  
    std::cin>>movies[movieCount].hall;  
    std::cin.ignore();  
    std::cout<<"请输入剩余座位数量:";  
    std::cin>>movies[movieCount].seat;  
    std::cin.ignore();  
    movieCount++;  
    std::cout<<"影片添加成功!"<<std::endl;  
}  

//管理员查看影片
void Administrator::show() 
{  
    std::cout<<"所有影片列表:"<<std::endl;  
    for(int i=0;i<movieCount;i++) 
	{  
	    //查看当前影片所具有的信息 
        std::cout<<"名字: "<<movies[i].name<<std::endl;  
        std::cout<<"时长: "<<movies[i].time<<"分钟"<<std::endl;  
        std::cout<<"价格: "<<movies[i].price<<"元"<<std::endl;  
        std::cout<<"影厅号: "<<movies[i].hall<<std::endl;  
        std::cout<<"剩余座位: "<<movies[i].seat<<std::endl;  
        //添加空行,使输出更清晰  
        std::cout<<std::endl;             
    }  
}  

//管理员查找影片
void Administrator::search() 
{  
    char nameToFind[20];  
    std::cout<<"请输入要查找的影片名字:";  
    std::cin.getline(nameToFind,sizeof(nameToFind));  
    bool found=false;  
    
    for(int i=0;i<movieCount;i++)
	{  
	    //要查找的影片名字与系统中的匹配 
        if(strcmp(movies[i].name,nameToFind)==0)
		{   
		    //若匹配即可查找成功 
            found=true;  
            std::cout<<"找到影片:"<<std::endl;  
            std::cout<<"名字: "<<movies[i].name<<std::endl;  
            std::cout<<"时长: "<<movies[i].time<<"分钟"<<std::endl;  
            std::cout<<"价格: "<<movies[i].price<<"元"<<std::endl;  
            std::cout<<"影厅号: "<<movies[i].hall<<std::endl;  
            std::cout<<"剩余座位数量: "<<movies[i].seat<<std::endl;  
            //找到后退出循环 
            break;            
        }  
    }  
    
    //不匹配 
    if(!found)
	{  
        std::cout<<"未找到名为 "<<nameToFind<<" 的影片"<<std::endl;  
    }  
}  

//管理员删除影片 
void Administrator::expurgate() 
{  
    std::string nameToDelete;  
    std::cout<<"请输入要删除的影片名字:";  
    std::cin>>nameToDelete;  
    std::cin.ignore();  
    
    for(int i=0;i<movieCount;i++)
	{   
     	//要查找的影片名字与系统中的匹配 
        if(strcmp(movies[i].name,nameToDelete.c_str())==0)
		{  
            for(int j=i;j<movieCount-1;j++)
			{  
                movies[j]=movies[j+1];  
            }  
            movieCount--;  
            std::cout<<"影片删除成功!"<<std::endl;  
            return;  
        }  
    }  
    
    std::cout<<"未找到影片"<<std::endl;  
}  

//管理员修改影片
void Administrator::modify() 
{  
    std::string nameToModify;  
    std::cout<<"请输入要修改的影片名字:";  
    std::cin>>nameToModify;  
    std::cin.ignore();  
    bool found=false;  
    
    for(int i=0;i<movieCount;i++)
	{  
	    //要查找的影片名字与系统中的匹配 
        if(strcmp(movies[i].name,nameToModify.c_str())==0)
		{  
            found=true;  
            std::cout<<"请输入新的影片名字:";  
            std::cin.getline(movies[i].name, sizeof(movies[i].name));  
            std::cout<<"请输入新的影片时长(分钟):";  
            std::cin>>movies[i].time;  
            std::cin.ignore();  
            std::cout<<"请输入新的影片价格:";  
            std::cin>>movies[i].price;  
            std::cin.ignore();  
            std::cout<<"请输入新的影厅号:";  
            std::cin>>movies[i].hall;  
            std::cin.ignore();  
            std::cout<<"请输入新的剩余座位数量:";  
            std::cin>>movies[i].seat;  
            std::cin.ignore();  
            std::cout<<"影片信息修改成功!"<<std::endl;  
            break;  
        }  
    }  
    //未找到 
    if(!found) 
	{  
        std::cout<<"未找到影片"<<std::endl;  
    }  
}  

//普通用户购票 
bool User::purchase(const char* movieName,int numSeat)  
{   
    //使用movieCount作为循环条件  
    for(int i=0;i<movieCount;i++)         
    {  
        //要查找的影片名字与系统中的匹配 ,且座位数量充足 
        if(strcmp(movies[i].name,movieName)==0&&movies[i].seat>=numSeat)  
        {  
            movies[i].seat-=numSeat;  
            std::cout<<"购票成功,剩余座位数: "<<movies[i].seat<<std::endl;  
            return true;  
        }  
    }  
    
    std::cout<<"购票失败,未找到影片或座位不足"<<std::endl;  
    return false;  
}

//普通用户退票
bool User::refund(const char* movieName,int numSeat)
{  
    for(int i=0;i<movieCount;i++)
	{  
	    //名字匹配则可退票 
        if(strcmp(movies[i].name,movieName)==0&&movies[i].seat+numSeat<=movies[i].seat+numSeat) 
		{  
            movies[i].seat+=numSeat;  
            std::cout<<"退票成功,剩余座位数: "<<movies[i].seat<<std::endl;  
            return true;  
        }  
    }  
    
    std::cout<<"退票失败,未找到影片或座位数不正确"<<std::endl;  
    return false;  
}  

//普通用户打印影票
void User::print()
{  
    for(int i=0;i<movieCount;i++)
    {
    	//打印影片所具有的信息 
        std::cout<<"电影票信息:"<<std::endl;  
        std::cout<<"电影名字: "<<movies[i].name<<std::endl; 
	    std::cout<<"电影时长: "<<movies[i].time<<std::endl; 
	    std::cout<<"影票价格: "<<movies[i].price<<std::endl; 
	    std::cout<<"播放所在影厅号: "<<movies[i].hall<<std::endl; 
        std::cout<<"座位数量: "<<movies[i].seat<<std::endl;    
    }
}  

//管理员菜单
void Administrator::administrator_menu()
{   
    //菜单 
    std::cout<<"**************************************************"<<std::endl;
    std::cout<<"*                请选择你想要操作:              *"<<std::endl;  
    std::cout<<"*                1. 添加影片                     *"<<std::endl;   
    std::cout<<"*                2. 显示影片                     *"<<std::endl; 
    std::cout<<"*                3. 查找影片                     *"<<std::endl;  
    std::cout<<"*                4. 删除影片                     *"<<std::endl;
   	std::cout<<"*                5. 修改影片                     *"<<std::endl;    
    std::cout<<"*                6. 退出程序                     *"<<std::endl; 
    std::cout<<"**************************************************"<<std::endl;
    
    int number;  
    number=choice();  
    
    switch(number)
	{  
        case 1:  
            //管理员添加 
            add();  
            break;  
        case 2:  
            //管理员显示 
            show();  
            break;  
        case 3:  
            //管理员查找 
            search();  
            break;  
        case 4:  
            //管理员退出 
            expurgate();  
            break;  
        case 5:  
            //管理员修改 
            modify();  
            break; 
        case 6:  
            //退出 
            std::cout<<"退出程序"<<std::endl;  
            break;  
        default:  
           std::cout<<"选择无效,请重新输入"<<std::endl;  
    }  
    
    std::cout<<"**************************************************"<<std::endl;
    std::cout<<"*                是否要继续进行操作:            *"<<std::endl;  
    std::cout<<"*                1:是                            *"<<std::endl;   
    std::cout<<"*                2:否                            *"<<std::endl;  
    std::cout<<"**************************************************"<<std::endl;
	
	int number4;
	std::cin>>number4;
	
	if(number4==1)
	{
		//重复上述选择过程
		administrator_menu();          
	}
	else if(number4==2)     
	{
		//退出
		std::cout<<"选择退出"<<std::endl; 
		entrance(); 
		int num;
	    std::cin>>num;
	    
	    switch(num)
	    {
	        case 1:                  
	            //选择1,则进入管理员模式 
		        administrator.administrator_welcome();
		        break;            
	        case 2:                 
	            //选择2,则进入普通用户模式
		        user.user_welcome();
		        break;           
		    case 3:
		    	//退出 
		        return; 
            default:  
                std::cout<<"选择无效,请重新输入"<<std::endl; 
	    }
	}
} 

//管理员选择界面
void Administrator::administrator_welcome()
{
	std::cout<<"**************************************************"<<std::endl;
    std::cout<<"*            是否选择登录管理员系统:            *"<<std::endl;  
    std::cout<<"*            1:登入                              *"<<std::endl;   
    std::cout<<"*            2:退出                              *"<<std::endl;  
    std::cout<<"**************************************************"<<std::endl;
	
    int number2;
    std::cin>>number2;
    
    switch(number2)
    {
    	case 1:
    		//选择登入管理员页面 
    		administrator.administrator_login(); 
    		break;            
    	case 2:
    		//不登入管理员页面,选择退出
    		return;           
	}	
} 

//管理员登录界面
void Administrator::administrator_login() 
{
    //管理员登录页面   
    std::cout<<"欢迎进入管理员登录界面"<<std::endl;  
    
    std::cout<<"你有三次输入机会!"<<std::endl;    
    //默认的正确用户名为admin
    const std::string str1="admin";       
	//默认的正确密码为123456      
    const std::string str2="123456";                     
    std::string cusername;  
    std::string cpassword;    
    
    int attempts=0;    
    while(attempts<3)
	{    
        std::cout<<"请输入你的用户名:";    
        std::cin>>cusername;       
        //清除输入缓冲区
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');         
        std::cout<<"请输入你的密码:";    
        std::cin>>cpassword;        
        //清除输入缓冲区
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');  
		      
	    //输入的用户名和密码与管理员系统默认的匹配 
        if(cusername==str1&&cpassword==str2)
		{    
            std::cout<<"登陆成功!"<<std::endl;                           
            administrator_menu();   
            return;  
        }   
        
        else 
		{    
            std::cout<<"登录失败,请重试"<<std::endl;    
        }    
        attempts++;   
    }    
    //只有三次登录机会,用完则登陆失败 
    std::cout<<"您的登录次数已用完"<<std::endl;    
}  

//普通用户选择界面 
void User::user_welcome()
{
	//普通用户选择界面 
	std::cout<<"**************************************************"<<std::endl;
    std::cout<<"*            是否选择登录普通用户系统:          *"<<std::endl;  
    std::cout<<"*            1:登入                              *"<<std::endl;   
    std::cout<<"*            2:退出                              *"<<std::endl;  
    std::cout<<"**************************************************"<<std::endl;
	
    int number3;
    std::cin>>number3;
    
    switch(number3)
    {
    	case 1:
    		//选择登入店员页面 
    		user.user_login(); 
    		break;              
    	case 2:
    		//不登入店员页面,选择退出
    		return;             
	}	
} 

//普通用户登录界面 
void User::user_login()
{  
    std::string uusername;  
    std::string upassword;  
    //已注册的用户名 
    std::string str3;        
	//已注册的密码    
    std::string str4;           
    int attempts=0;  
    
    //用户注册部分,可随意注册 
    std::cout<<"欢迎进入普通用户注册界面"<<std::endl;  
    std::cout<<"请注册你的用户名:"<<std::endl;  
    std::cin>>str3;  
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');  
    std::cout<<"请注册你的密码:"<<std::endl;  
    std::cin>>str4;  
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');  
    
    //用户登录部分 
    std::cout<<"欢迎进入普通用户登录界面"<<std::endl;  
    std::cout<<"你有三次输入机会!"<<std::endl;  
    
    while(attempts<3)
	{  
        std::cout<<"请输入你的用户名:"<<std::endl;  
        std::cin>>uusername;  
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');  
        std::cout<<"请输入你的密码:"<<std::endl;  
        std::cin>>upassword;  
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');  
        
        //输入的用户名和密码与管理员系统默认的匹配 
        if(uusername==str3&&upassword==str4)
		{  
            std::cout<<"登陆成功"<<std::endl;  
            //跳转到用户菜单 
            user.user_menu();          
			//登录成功后退出函数    
            return;                     
        } 
		else 
		{  
            std::cout<<"登录失败,请重试"<<std::endl;  
        }  
        attempts++;  
    }  
    
    //只有三次登录机会,用完则登陆失败 
    std::cout<<"您的登录次数已用完"<<std::endl;  
}  

//操作选择
int choice()
{  
    int choice;  
    std::cin>>choice;  
    //清除输入缓冲区  
    std::cin.ignore();     
    return choice;  
}  

//普通用户菜单
void User::user_menu()
{  
    //菜单 
    std::cout<<"**************************************************"<<std::endl;
    std::cout<<"*                请选择你想要操作:              *"<<std::endl;  
    std::cout<<"*                1. 购票                         *"<<std::endl;   
    std::cout<<"*                2. 退票                         *"<<std::endl; 
    std::cout<<"*                3. 打印影票                     *"<<std::endl;     
    std::cout<<"*                4. 退出程序                     *"<<std::endl; 
    std::cout<<"**************************************************"<<std::endl;
    
    int sum;
	char movieName[20];  
    int numSeat=0; 
    std::cin>>sum;
    std::cin>>movieName;
    std::cin>>numSeat;
    
    switch(sum)
	{  
        case 1:            
            //选择购票操作 
            purchase(movieName,numSeat); 
            break;   
        case 2:  
            //选择退票操作 
	        refund(movieName,numSeat); 
            break;  
        case 3:  
            //选择打印操作 
            print();
            break;  
        case 4:  
            //选择退出 
            std::cout<<"退出程序"<<std::endl;
            break;  
        default:  
            std::cout<<"选择无效,请重新输入"<<std::endl;  
    }  
    
    std::cout<<"**************************************************"<<std::endl;
    std::cout<<"*                是否要继续进行操作:            *"<<std::endl;  
    std::cout<<"*                1:是                            *"<<std::endl;   
    std::cout<<"*                2:否                            *"<<std::endl;  
    std::cout<<"**************************************************"<<std::endl;
	
	
	int number5;
	std::cin>>number5;
	if(number5==1)
	{
		//重复上述选择过程 
		user_menu();           
	}
	else if(number5==2)       
	{
		//退出 
		std::cout<<"选择退出"<<std::endl; 
		return;
	}
}  

//主函数 
int main()
{    
    //调用系统欢迎界面 
	entrance();
	//调用模式选择界面 
	chance();
}

全部评论
写的很好,加上soket和mysql就更好了
1 回复
分享
发布于 03-15 19:19 湖北

相关推荐

1 1 评论
分享
牛客网
牛客企业服务