c++实现值机系统

本项目为大家分享了c++实现值机系统的具体代码,供大家参考,具体内容如下

前言

上周帮同学做了一个项目作业,具体要求见下图,实现语言为c++。
今天决定在此复盘这个程序编写的思路,具体完整代码实现在文末

需求分析——编程思路

结构体、类对象——座位

按照题目的描述,我们对于一个座位类,其至少有4个属性,所以我们实现的思路有:
1、根据菜单中的c)按字母顺序(编号)来显示座位表,所以我们可以使用字符形式来存储编号;
2、使用一个bool值来判断座位是否被预定;
3、使用两个字符串分别表示预定人的性和名。
然后由于题目中,一共有12个座位,我们不妨使用一个座位数组,作者在代码使用了类嵌套的手法,当时是想通过座位表类对象指针去访问节省传入空间,同时,由于后边的统计座位数量的时候的会比较好用。

初始化

创建座位表对象时,不妨对其初始化,用一个循环按A—L赋值给座位表的对应对象座位编号属性赋值。

功能实行——菜单

1、菜单显示,和之前做过的通讯录差不多,只需要在外部封装一个函数,循环调用即可,同时为了一定的视觉效果,每次循环做一次按任意键继续 + 清屏 操作。
2、调用结构,首先如上面提到的,循环,然后使用另一个判别分支结构——switch,每个选项对应一个函数调用。
3、删除座位和预定座位的功能实现逻辑:
对于删除,需要注意判断是否座位匹配(即此时座位是否空,和客户姓名是否匹配)
对于预定,则需要判断输入是否合乎要求(是否座位编号是空座)

代码

#include<iostream>
#include<string>
using namespace std;

#define Max_size 12

// 座位类
class Seat
{
public:
    char number;        // 座位编号 A - L
    bool is_empty;        // 判断是否空    false-满,true-空
    string name;        // 预定人的名
    string lastname;    // 预定人的姓 
};

// 座位表——座位数组
class seats_table
{
public:
    // 座位表
    Seat Seats[Max_size];

    // 座位表中实际座位被坐的数量
    int m_size;
};

// 菜单显示
void show_menu()
{
    cout << "To choose a functions, enter its letter label:" << endl
        << "a) Show number of empty seats" << endl
        << "b) Show list of empty seats" << endl
        << "c) Show alphabetical list of seats" << endl
        << "d) Assign a customer to seat assignment" << endl
        << "e) Delete a seat assignment" << endl
        << "f) Quit" << endl;
}

// 显示空座的数量
void show_num_of_empty(seats_table* Seats)
{
    cout << "Numer of empty seats: " << Max_size - Seats->m_size << endl;

    system("pause");    // 任意键继续
    system("cls");        // 清屏操作
}

// 显示空座列表即显示座位编号
void show_Listofempty(seats_table* S)
{
    cout << "List of empty seats:" << endl;
    for (int i = 0; i < Max_size; ++i)
    {
        if (S->Seats[i].is_empty)
        {
            cout << S->Seats[i].number << "\t";
        }
    }
    cout << endl;

    /*system("pause");
    system("cls");*/
}

// 按字母顺序输出座位列表(即输出所有(12个)座位的信息)
void show_ListofSeats(seats_table* St)
{
    cout << "List of Seats:" << endl;
    for (int i = 0; i < Max_size; ++i)
    {
        cout << St->Seats[i].number << "\t";
        if (St->Seats[i].is_empty)
        {
            cout << "Empty" << endl;
        }
        else
        {
            cout << "Not empty" << "\t"
                << St->Seats[i].name << "\t"
                << St->Seats[i].lastname << endl;
        }
    }
    system("pause");
    system("cls");
}

// Assign a customer to a seat assignment(就是订座)
void assign_seats(seats_table* St)
{
    // 调用一下显示空座列表函数
    show_Listofempty(St);
    char judge;
    do
    {
        // 输出提示信息
        cout << "Please choose the num of seat you want choose:" << endl;
        char sel;
        cin >> sel;
        // 先判断是否是正确输入
        if (sel < 'A' || sel > 'L')
        {
            cout << "Input Error!" << endl;
        }
        else
        {
            // 再判断该座位是否为空座
            if (!St->Seats[sel - 'A'].is_empty)
            {
                // 非空
                cout << "The seat is not empty!" << endl;
            }
            else
            {
                // 按照字母编号将对应座位置人(即非空,置否),并将实际座位(非空座)总数+1
                St->Seats[(int)(sel - 'A')].is_empty = false;
                St->m_size++;

                // 输出提示信息(提醒用户输入名字)
                cout << "Please input your name:" << endl;
                string na;
                cin >> na;
                St->Seats[(int)(sel - 'A')].name = na;

                cout << "Please input your lastname:" << endl;
                string ln;
                cin >> ln;
                St->Seats[(int)(sel - 'A')].lastname = ln;

                // 输出订票成功的提示
                cout << "Successful reservation!" << endl;
            }
        }
        cout << "Continue? (Y/N)" << endl;
        cin >> judge;
    } while (judge == 'Y');

    system("pause");
    system("cls");
}

// delete a seat assignment(删除一个座位的合约)
// 说实话,这个机制有点问题,应该不是给客户操作, 应该是工作人员操作
void d_seat(seats_table* St)
{
    
    char num;
    char judge;
    do
    {
        // 输出提示信息(要删除的座位编号)
        cout << "Please input the number(A-L) of seat you want delete:" << endl;
        cin >> num;
        // 先判断是否是正确输入
        if (num < 'A' || num > 'L')
        {
            cout << "Input Error!" << endl;
        }
        else
        {
            // 判断是否是空座
            // 空座
            if (St->Seats[num - 'A'].is_empty)
            {
                
                cout << "The seat is empty." << endl;
            }
            else
            {
                cout << "Please input your name and lastname:" << endl;
                string na, lna;
                cin >> na >> lna;
                // 判断座位的名字和姓是否匹配
                if (St->Seats[num - 'A'].name == na && St->Seats[num - 'A'].lastname == lna)
                {
                    St->Seats[num - 'A'].is_empty = true;
                    St->m_size--;
                    St->Seats[num - 'A'].name = "";
                    St->Seats[num - 'A'].lastname = "";
                    cout << "Seat withdrawal succeeded!" << endl;
                }
                else
                {
                    cout << "The name or lastname is not matchied!" << endl;
                }
            }
        }

        cout << "Continue? (Y/N)" << endl;
        cin >> judge;
    } while (judge == 'Y');
    system("pause");
    system("cls");
}

int main()
{
    seats_table S;

    // 初始化,实际被坐的座位为0
    S.m_size = 0;
    // 循环,初始化座位的编号(A - L),并全部置空
    for (int i = 0; i < Max_size; i++)
    {
        // 97--'A'
        S.Seats[i].number = (char)(i + 65);
        S.Seats[i].is_empty = true;
    }
    // 声明选择变量
    char select = 'a';

    // 循环显示菜单进行操作
    while (1)
    {
        // 菜单调用
        show_menu();

        bool b = false;

        cin >> select;

        switch (select)
        {
        case 'a':
            show_num_of_empty(&S);
            break;
        case 'b':
            show_Listofempty(&S);
            system("pause");
            system("cls");
            break;
        case 'c':
            show_ListofSeats(&S);
            break;
        case 'd':
            assign_seats(&S);
            break;
        case 'e':
            d_seat(&S);
            break;
        
        // 放弃操作,退出循环(while循环)
        case 'f':
            b = true;
            break;

        // 其他情况
        default:
            cout << "Input error!" << endl;
            system("pause");
            system("cls");
        }
        if (b)
        {
            break;
        }
    }

    system("pause");
    return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++实现飞机订票系统

    本文实例为大家分享了C++实现飞机订票系统的具体代码,供大家参考,具体内容如下 // 飞机订票系统.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <string.h> #include<stdlib.h> #include<conio.h> #define N 2 typedef struct plane {     char ID[10];

  • c++实现值机系统

    本项目为大家分享了c++实现值机系统的具体代码,供大家参考,具体内容如下 前言 上周帮同学做了一个项目作业,具体要求见下图,实现语言为c++.今天决定在此复盘这个程序编写的思路,具体完整代码实现在文末 需求分析——编程思路 结构体.类对象——座位 按照题目的描述,我们对于一个座位类,其至少有4个属性,所以我们实现的思路有:1.根据菜单中的c)按字母顺序(编号)来显示座位表,所以我们可以使用字符形式来存储编号:2.使用一个bool值来判断座位是否被预定:3.使用两个字符串分别表示预定人的性和名.然

  • vmware12中安装 RedHat RHEL7.2系统的详细步骤(图文)

    本文介绍了vmware12中安装 RedHat RHEL7.2系统的详细步骤(图文),分享给大家,具体如下: 一.开始安装 1)新建虚拟机 RHEL7.2 2)成功引导系统--开机出现此画面 Install Red Hat EnterpriseLinux 7.2 安装RHLE7.2 操作系统 Test this edia & install RedHat Enterprise Linux 7.2 测试安装文件并安装RHLE7.2 操作系统 Troubleshooting 修复故障 3)选择第一项

  • Mac系统下MySql下载MySQL5.7及详细安装图解

    一.在浏览器当中输入以下地址 https://dev.mysql.com/downloads/mysql/ 二.进入以下界面:直接点击下面位置 ,选择跳过登录 点过这后直接下载. 三.下载完成后, 直接双击打开,弹出以下界面,再继续点击即可 下面 一直点继续,和正学安装其它软件一样 四.启动MySQL 安装完毕后,到设置当中查看以下选项,如果里面有MySQL说明已经安装成功 点击后, 启动MySQL 五.修改数据库密码 启动完成后,打开终端 aliasmysql=/usr/local/mysql

  • Mac OS系统下mysql 5.7.20安装教程图文详解

    Mac OS X 下 TAR.GZ 方式安装 MySQL 5.7 与 MySQL 5.6 相比, 5.7 版本在安装时有两处不同: 1:初始化方式改变, 从scripts/mysql_install_db --user=mysql初始化方式变成了bin/mysqld --initialize --user=mysql方式; 2: 初始密码生成改变, 5.6 的版本在 tar gz 方式初始化完成后默认 root 密码为空, 5.7 版本在初始化完成后会生成一个临时的 root 密码: 一.在浏览

  • 秒杀系统Web层设计的实现方法

    秒杀系统Web层设计的实现方法 一.Restful接口设计 使用资源+名词的方式来为url链接命名.例如: 访问详情页的链接可以是: seckill/{seckillId}/detail 二.SpringMVC配置 1.首先要在web.xml中配置中央控制器. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&q

  • 在windows 64位操作系统上运行32位的vbscript的方法

    今天在2008 r2 64位的服务器系统上,运行vbs文件的时候如下提示 --------------------------- Windows Script Host --------------------------- 脚本: C:\Users\Administrator\Desktop\vbs_cf.vbs 行: 10 字符: 1 错误: 未找到提供程序.该程序可能未正确安装. 代码: 800A0E7A 源: ADODB.Connection 在2003上运行正常的程序,为什么在08上不

  • Coldfusion MX广告轮换系统制作教程

    wait 蓝色理想CF里面没有提供象ASP里那样的广告组件,但是这并不能说明就不能做出功能强大的广告系统,这里我放上一个简单的广告轮换系统,也是我CCF论坛里面用的.功能,有显示次数和点击次数.在这基础上扩展比较容易,可以分类显示,下面的代码只是显示 大广告条.只是想抛砖引玉,大家举一反三,就能做出功能更加强大的广告系统出来. <!--- 判断是否有地址传递 ---> <CFIF NOT IsDefined("URL.ADID")> <!--- 默认为显示

  • SQL Server 移动系统数据库

    说到这个问题,基本上有人就会想到三个问题: 1,什么是系统数据? 2,为什么要移动系统数据库? 3,移动系统数据库我们可以用附加和分离,为什么还要单独拿出来说呢? 对于这三个问题我一个一个讲吧,也算是自己做个笔记. 1,什么是系统数据? 所谓系统数据库就是我们在装SQL Server之后,系统自带的数据库(这样的回答是不是很白痴^_^). 如果你装SQL Server2005或2008在打开一个SQL实例后,就会看到一个数据库--->系统数据库文件夹,里边就是系统自带的数据库,如图: 对于每一个

  • access中显示MSysObjects系统表的设置方法

    默认access的系统表MSysObjects等是不显示的,需要手动设置access显示MSysObjects等系统表. 设置方法如下: 1. 打开Access 2. 点击"工具"菜单,选择"选项" 3. 在"视图"页上,将"系统对象"勾上 4. 点击"确定"按钮保存设置 5. 点击"工具"菜单,选择"安全"中的"用户与组权限" 6. 选择&quo

  • Angular.js实现注册系统的实例详解

    前言 相信大家在做项目里经常需要登录注册,那么在用angularjs该如何实现.下面让我们通过angualr.js来实现注册系统表单验证. Angular下载地址:https://code.angularjs.org/1.5.0/angular.js 首先看一下页面效果(通过bootstrap实现的布局样式): 当我们点击提交按钮时,会根据表单验证,若通过,则没有提示语句,若不通过,则会弹出响应提示语句,当然该功能可以通过其他简单方式实现,这里只是通过实战对angular进一步深入理解. 实现方

随机推荐