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