c++课程设计自助点餐系统

【题目】自助点餐系统

【目的】
通过设计一个小型的自助点餐系统,训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念,使自己的程序设计与调试水平有一个明显的提高。

【要求】
1、每个学生必须独立完成;
2、课程设计时间为1周;
3、设计语言采用C++;
4、学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,未按规定上交实验报告的学生,其成绩按不及格处理。

【内容简介】
有一个小型餐厅,现在这个餐厅打算使用自助点餐系统,方便顾客自己点餐,并提供对餐厅销售情况的统计和管理功能。

【考核标准】
该系统为两种角色的用户提供服务,一种是餐厅管理员,一种是顾客。餐厅管理员根据账号、密码登录系统。顾客无需登录即可使用系统。
1、顾客通过该餐厅在系统中提供的菜单为自己点餐,菜单以文件形式保存。系统能够根据顾客的要求正确打出订单,订单内容包括订单编号、菜品名称、每个菜品的价格、份数、折扣等;订单分两种,一种是在店消费,在店消费要求包括餐桌号,是否有包厢费,另一种是外卖,外卖要求包括送餐时间,送餐地点,客户手机号,外卖服务费。(要求用继承和多态实现),成绩≥60;
2、系统退出后能保存当天的订单信息,要求每天一个文档,文档名按照日期命名。餐厅管理员可以根据订单编号查找删除修改某个订单,订单可以按照下单时间先后排序,成绩≥70;
3、能够实现对餐厅菜式和价格的管理,包括对菜品和对应价格的增加、修改、删除、查找,折扣的设置,成绩≥80;
4、系统可根据历史记录对销售情况进行统计,根据餐厅管理员的输入日期统计某天的销售情况并显示(包括一共接了多少单,销售额是多少,各个菜品的销售情况,外卖和在店销售的占比),成绩≥90;
要求:
用面向对象的程序设计方法设计该系统。本系统涉及的基本对象有订单对象(包括外卖订单和在店消费订单)、订单管理对象、菜单对象、菜品对象、菜品管理对象、系统界面。实现对这些对象的合理抽象和封装,正确定义类之间的关系。界面合理,代码文件组织清晰,命名符合规范,代码注释清楚,课设报告书质量高。

面向对象程序课程设计
目 录

一、题目
二、需求分析
三、系统结构图
四、类的设计
五、程序代码与说明
六、运行结果与分析
七、心得与体会

一、 题目
自助点餐系统
二、 需求分析
1.管理员管理
a.订单管理
管理员对订单的管理包括订单的查询、修改和删除。
b.菜单管理
管理员对菜单的管理包括对菜单中各项信息的增加、修改、删除和查找。
c.历史销售情况统计
2.客户点餐
a.设置订单
客户点菜,以及选择是在店消费还是外卖,都是通过设置订单来实现。
b.订单打印
在客户设置订单即点餐结束后,需要将订单各项信息打印出来即显示到屏幕上。
c.订单保存
在客户设置订单结束后,需要将订单保存至当天建立的以日期为文件名的文档当中,以便管理员的其他操作。
3.界面管理
a.用户身份选择
用户需选择客户/管理员身份,若是管理员还需要输入账号密码验证。
三、 系统结构图
在这里插入图片描述
四、 类的设计
在这里插入图片描述
五、业务流程图
在这里插入图片描述
六、 程序代码与说明

system.h:
#ifndef SYSTEM_H_INCLUDED
#define SYSTEM_H_INCLUDED
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <time.h>
using namespace std;

class Menu      //菜单类
{
   
public:
    string number;
    string name;
    string price;
    string discount;
    Menu(string a,string b,string c,string d) {
   number=a,name=b,price=c,discount=d;}
    void out_file(string file_name);
    void cout_menu();
    bool operator < (const Menu& a) const{
   
        return atoi(number.c_str())<atoi((a.number).c_str());
    }
};

class Base_orders   //订单基类
{
   
public:
    string order_number;
    string dish_number;
    string dish_name;
    string dish_price;
    string dish_discount;
    int amount;
    double total_price=0;
    void out_file_eachDish(string file_name);
    void cout_orders();
};

class Takeaway_orders:public Base_orders    //外卖订单类
{
   
public:
    string takeaway_time,takeaway_place,takeaway_phone;
    int takeaway_delivery_fee=10;
    Takeaway_orders(string a,string b,string c,string d,string e,int j) {
   order_number=a,dish_number=b,dish_name=c,dish_price=d,dish_discount=e,amount=j;}
    bool operator < (const Takeaway_orders& a) const{
   
        return atoi(dish_number.c_str())<atoi((a.dish_number).c_str());
    }
};

class Atshop_orders:public Base_orders      //在店消费订单类
{
   
public:
    int atshop_room_fee=0;
    string atshop_table;
    Atshop_orders(string a,string b,string c,string d,string e,int h) {
   order_number=a,dish_number=b,dish_name=c,dish_price=d,dish_discount=e,amount=h;}
    bool operator < (const Atshop_orders& a) const{
   
        return atoi(dish_number.c_str())<atoi((a.dish_number).c_str());
    }
};

class Interface     //交互界面类
{
   
public:
    static int choose();
    static void administrator_show();
    static void customer_show();
};

class Customer      //顾客类
{
   
private:
    vector<Takeaway_orders> vec_Takeaway_orders;
    vector<Atshop_orders> vec_Atshop_orders;
public:
    string order_number;
    void order();
};

class Administrator //管理员类
{
   
private:
    vector <Menu> vec_menu;
    vector<Takeaway_orders> total_Takeaway_orders;
    vector<Atshop_orders> total_Atshop_orders;
public:
    void find_orders();
    void modify_orders();
    void delete_orders();
    void import_menu();
    void add_menu();
    void modify_menu();
    void delete_menu();
    void find_menu();
    void sales_statistics();
};

class Manage    //系统类
{
   
private:
    Customer customer;
    Administrator administrator;
public:
    void manage();
};


#endif // SYSTEM_H_INCLUDED
system.cpp:
#include <iostream>
#include <fstream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <time.h>
#include <windows.h>
#include <iomanip>
#include <algorithm>
#include "system.h"

void Manage::manage()
{
   
    administrator.import_menu();    //菜单全部从文件写入到vector容器中
    int today_order_number=0;       //记录日销售编号,后面生成订单编号有用
    for(;;)
    {
   
        int Return=Interface::choose();
        if(Return==1)
        {
   
            Interface::administrator_show();
            int admin_op;
            cin>>admin_op;
            if(admin_op==1)
                administrator.find_orders();
            if(admin_op==2)
            {
   
                administrator.modify_orders();
                remove("temp.txt");
            }
            if(admin_op==3)
            {
   
                administrator.delete_orders();
                remove("temp.txt");
            }
            if(admin_op==4)
                administrator.add_menu();
            if(admin_op==5)
                administrator.modify_menu();
            if(admin_op==6)
                administrator.delete_menu();
            if(admin_op==7)
                administrator.find_menu();
            if(admin_op==8)
                administrator.sales_statistics();
            if(admin_op==9)
                Interface::customer_show();
        }

        else if(Return==2)
        {
   
            today_order_number++;
            if(today_order_number<10)
                customer.order_number="00"+to_string(today_order_number);
            else if(today_order_number>=10&&today_order_number<100)
                customer.order_number="0"+to_string(today_order_number);
            else if(today_order_number>=100&&today_order_number<1000)
                customer.order_number=to_string(today_order_number);

            Interface::customer_show(
  • 70
    点赞
  • 551
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值