浙江理工大学C++程序设计课程设计

C++程序设计课程设计

2021/2022学年第一学期)

指导教师: 庄巧莉、霍戌文

班级:20计算机科学与技术(3)班

学号:2020329621193

姓名:杨正龙

工作内容及工作计划

时间

地点

工作内容

指导教师

12月

11日

506寝室

完成类的设计

庄巧莉、霍戌文

25日

506寝室

完成除数据库以外的所有c++部分代码

庄巧莉、霍戌文

1月

1日

506寝室

连接数据库并且开始调试

庄巧莉、霍戌文

3日

506寝室

完成全部内容,做好准备4日找老师答辩

庄巧莉、霍戌文

 

目    录

  • 任务要求
  • 业务流程图
  • 系统功能结构图
  • 类的设计
  • 数据库设计
  • 程序代码与说明
  • 运行结果与分析
  • 心得与体会

一、任务要求

【题目】自助点餐系统

【目的】

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

【要求】

1、每个学生必须独立完成;

2、课程设计时间为 1 周分散进行;

3、设计语言采用 C++,程序设计方法必须采用面向对象的程序设计方法;

4、课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,未按规定上交实验报告的学生,其成绩按不及格处理。

【内容简介】

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

【考核标准】

该系统为两种角色的用户提供服务,一种是餐厅管理员,一种是顾客。餐厅管理 员根据账号、密码登录系统。顾客无需登录即可使用系统。

1、 顾客通过该餐厅在系统中提供的菜单为自己点餐。系统能够根据顾客的要求 正确打出订单,订单内容包括订单编号、菜品名称、每个菜品的价格、份数、 折扣等;订单分两种,一种是在店消费,在店消费要求包括餐桌号,是否有 包厢费,另一种是外卖,外卖要求包括送餐时间,送餐地点,客户手机号,外卖服务费,成绩≥60;

2、订单、用户信息保存在数据库中,其中,连接数据库所需信息(数据库服务 器地址、用户名、密码、数据库名)存放在文件中,程序通过从文件中读取 这些信息获得与数据库的连接。餐厅管理员可以根据订单编号或手机号查找、 删除或修改某个订单,查询到的订单按照下单时间先后显示,成绩≥70;

3、 菜单信息保存在数据库中,能够实现对餐厅菜式和价格的管理,包括对菜品 和对应价格的增加、修改、删除、查找,折扣的设置,设置后,顾客在点餐时看到的是新设置后的菜单,成绩≥80;

4、 系统可根据数据库中保存的订单记录对销售情况进行统计,根据餐厅管理员 的输入日期统计某天的销售情况(包括一共接了多少单,销售额是多少,各个菜品的销售情况,外卖和在店销售的占比)并显示订单详情,成绩≥90;

要求:

数据库管理系统自由选择,推荐使用 MySQL 数据库。对图形化 UI 接口有 兴趣的同学推荐选用Qt 进行开发,使用方法可参考 https://blog.csdn.net/qq_46018418/article/details/107919933,不做强制性要求。

用面向对象的程序设计方法设计该系统。本系统涉及的基本对象有订单对象 (包括外卖订单和在店消费订单,可以考虑采用继承机制,提高代码的重用性)、 订单管理对象、菜单对象、菜品对象、菜品管理对象、界面对象等。实现对这些 对象的合理抽象和封装,正确定义类之间的关系。界面合理,代码文件组织清晰, 命名符合规范,代码注释清楚,课设报告书质量高。

二、业务流程图

三、系统功能结构图

 

四、类的设计

 

五、数据库设计

 

六、程序代码与说明

DbConnection.h:

#ifndef DBCONNECTION_H_INCLUDED

#define DBCONNECTION_H_INCLUDED

#include"mysql.h"

#include"DbException.h"

class DbConnection{

public:

    DbConnection();

    ~DbConnection();

    MYSQL_RES executeQuery(const char* sql);//查询成功,返回结果集,失败,抛出异常

    int executeSQL(const char* sql);

private:

    MYSQL connection;

};





#endif // DBCONNECTION_H_INCLUDED

DbException.h:

#include<exception>

using namespace std;



class DbExcepiton: public exception

{

public:

    DbExcepiton(const char* msg):err_msg(msg){}

    const char* what() const throw(){return err_msg;}

private:

    const char* err_msg;

};

Food.h:

#pragma once

#include<iostream>

#include<vector>

#include<fstream>

#include<algorithm>

#include <string>

using namespace std;





//菜品类

class FoodManage

{

private:

    //菜品名称

    string m_FoodName;



    //菜品价格

    int m_FoodPrice;



    //菜品份数

    int m_FoodNum;



    //折扣

    double m_FoodDiscount;



    //菜品编号

    string m_FoodId;



public:



    //构造函数

    FoodManage();



    //打印菜单

    void ShowMenu();



    //查找菜品

    void SeekFood();



    //修改菜品

    void ModifyFood();



    //增加菜品

    void AddFood();



    //删除菜品

    void DeleteFood();



    //设置折扣

    void SetDiscount();

};

Menu.h:

#pragma once

#include<iostream>

#include<algorithm>

#include<fstream>

#include"Food.h"

using namespace std;



//菜单对象,价格,折扣

class Menu

{

public:



    //默认构造

    Menu();



    //显示菜单

    void ShowMenu();



};



Order.h:

#pragma once

#include<iostream>

#include<vector>

#include<ctime>

#include<sstream>

#include<algorithm>

#include<map>

#include <string>

#include <sstream>



#include"Food.h"

#include"System.h"

#include"Menu.h"



using namespace std;



//订单对象,包括外卖和堂食

class Order

{

protected:



    //订单编号

    string OrderId;



    //菜品名称

    string FoodName;



    //菜品价格

    int FoodPrice;



    //菜品份数

    int FoodNumber;



    //菜品折扣

    double FoodDiscount;

};





//堂食

class OrderIn :public Order

{

private:



    //餐桌号

    int TableId;



    //包厢费

    int BoxPrice;



public:



    //添加订单

    void AddInInfo();



};



//外卖

class OrderOut :public Order

{

private:



    //送餐地点

    string OrderPlace;



    //客户手机号

    string CustomerPhone;



    //外卖服务费

    int ExtraTips;



    //送餐时间   默认格式:23:13

    int Time_Hour;

    int Time_Minute;



public:



    //添加订单

    void AddOutInfo();



};



//订单管理对象,对订单进行查找,修改,删除

class OrderManage

{

public:



    //构造函数

    OrderManage();



    //查找订单

    void SeekOrder();



    //修改订单信息

    void ModifyOrder();



    //删除订单

    void DeleteOrder();



    //查询历史信息

    void AllInfo();



};

System.h:

#pragma once

#pragma once

#include<iostream>

#include"Food.h"

using namespace std;



//系统界面

class System

{

public:



    //显示主界面

    void ShowMainSystem();



    //显示顾客登陆界面

    void ShowCustomerSystem();



    //显示管理员登陆界面

    void ShowAdminSystem();



    //显示管理员进行操作菜单界面

    void ShowAdminOpMenu();



    //显示管理员进行操作订单界面

    void ShowAdminOpOrder();



    //显示整合信息的操作界面

    void ShowAll();

};



DbConnection.cpp:

#include<iostream>

#include<fstream>

#include<string>

#include"DbConnection.h"

DbConnection::DbConnection()

{

    DbExcepiton(mysql_error(&connection));

     //初始化MySQL连接对象

     mysql_init(&connection);

     ifstream infile;

     infile.open("sqladmin.txt", ios::in);

     if (!infile.is_open())

     {

         cout << "读取文件失败" << endl;

         return;

     }

     //读取文件信息

     string buf[4];

     for (int i = 0; i < 4; i++) {

         getline(infile, buf[i]);

     }

     //建立MySQL连接

     const char* host = buf[0].c_str();

     const char* username = buf[1].c_str();

     const char* password = buf[2].c_str();

     const char* database = buf[3].c_str();

     //连接成功

     if(NULL == mysql_real_connect(&connection, host, username, password, database, 3306, nullptr, 0))

        throw DbExcepiton(mysql_error(&connection));

    //设置查询编码为gbk,以支持中文

    mysql_query(&connection, "set names gbk");

}

DbConnection::~DbConnection(){

    mysql_close(&connection);

}

MYSQL_RES  DbConnection::executeQuery(const char* sql)

{

    //执行SQL命令

    int res = mysql_query(&connection, sql);

    if(res) //执行失败

        throw DbExcepiton(mysql_error(&connection));

    else

    {

        //获取结果集

        MYSQL_RES* res_ptr = mysql_store_result(&connection);

        //如果获取成功

        if(res_ptr)

            return *res_ptr;

        else throw DbExcepiton(mysql_error(&connection));

    }

}

 int DbConnection::executeSQL(const char* sql)

 {

    //执行SQL命令

    int res = mysql_query(&connection, sql);

    if(res) //执行失败

        throw DbExcepiton(mysql_error(&connection));

    else

    {

        return mysql_affected_rows(&connection);

    }

 }

Food.cpp:

#include"Food.h"

#include"DbConnection.h"



//构造函数

FoodManage::FoodManage() { DbConnection db;}



//查找菜单

void FoodManage::ShowMenu()

{

    DbConnection db;

    try {

        //执行select命令,获取结果集

        const char* sql;

        sql = "select * from menu";

        MYSQL_RES res = db.executeQuery(sql);



        //输出字段名

        unsigned int num_fields = mysql_num_fields(&res);

        MYSQL_FIELD* fields = mysql_fetch_fields(&res);

        for (unsigned int i = 0; i < num_fields; i++) {

             cout.width(20); cout.setf(ios::left);

             cout << fields[i].name;

        };

        cout << endl;



        //输出查询出的结果集中的每条记录中的数据

        MYSQL_ROW row;

        while ((row = mysql_fetch_row(&res)))

        {

             for (unsigned int i = 0; i < num_fields; i++)

             {

                 cout.width(20); cout.setf(ios::left);

                 cout << row[i] ? row[i] : "NULL";

             }

             cout << endl;

        }

    }

    catch (DbExcepiton exp) {

        cout << exp.what() << endl;

    }

}



//查找菜品

void FoodManage::SeekFood()

{

    cout << "请输入您的操作:1、打印所有菜单! 2、查找特定菜品  0、退出" << endl;

    int op;

    cin >> op;

    string seekid;

    DbConnection db;



    if (op == 0)

    {

        system("pause");

        system("cls");

        return;

    }

    else if (op == 1)

    {

        try {

             //执行select命令,获取结果集

             const char* sql;

             sql = "select * from menu";

             MYSQL_RES res = db.executeQuery(sql);



             //输出字段名

             unsigned int num_fields = mysql_num_fields(&res);

             MYSQL_FIELD* fields = mysql_fetch_fields(&res);

             for (unsigned int i = 0; i < num_fields; i++) {

                 cout.width(20); cout.setf(ios::left);

                 cout << fields[i].name;

             };

             cout << endl;



             //输出查询出的结果集中的每条记录中的数据

             MYSQL_ROW row;

             while ((row = mysql_fetch_row(&res)))

             {

                 for (unsigned int i = 0; i < num_fields; i++)

                 {

                     cout.width(20); cout.setf(ios::left);

                     cout << row[i] ? row[i] : "NULL";

                 }

                 cout << endl;

             }

        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }

    }



    else if (op == 2)

    {

        cout << "请输入您要查找的菜品编号!" << endl;

        cin >> seekid;



        try {

             //执行select命令,获取结果集



             string sql;

             sql = sql + "select * from menu where FoodId = " +seekid;

             const char* sql2=sql.c_str(); //把string类型转成const char* 类型

             MYSQL_RES res = db.executeQuery(sql2);



             //输出字段名

             unsigned int num_fields = mysql_num_fields(&res);

             MYSQL_FIELD* fields = mysql_fetch_fields(&res);

             for (unsigned int i = 0; i < num_fields; i++) {

                 cout.width(20); cout.setf(ios::left);

                 cout << fields[i].name;

             };

             cout << endl;



             //输出查询出的结果集中的每条记录中的数据

             MYSQL_ROW row;

             while ((row = mysql_fetch_row(&res)))

             {

                 for (unsigned int i = 0; i < num_fields; i++)

                 {

                     cout.width(20); cout.setf(ios::left);

                     cout << row[i] ? row[i] : "NULL";

                 }

                 cout << endl;

             }

        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }



    }



}



//修改菜品

void FoodManage::ModifyFood()

{

    cout << "修改菜品" << endl;

    int modifyprice,mdifynum;

    double modifydis;

    string modifyid, modifyname;

    DbConnection db;



    cout << "请输入您要修改菜品的编号、名称、价格、数量、折扣!" << endl;

    cin >> modifyid >> modifyname >> modifyprice >> mdifynum >>modifydis;



    try {

        string sql;



        //构建SQL语句

        sql = "UPDATE menu SET FoodPrice = " + to_string(modifyprice);

        sql = sql + ", FoodDiscount = " + to_string(modifydis);

        sql = sql + ", FoodNum = " + to_string(mdifynum);

        sql = sql + ", FoodName = " + modifyname;

        sql = sql + " where FoodId = " + modifyid;

        sql = sql + ";";

        db.executeSQL(sql.c_str());

    }

    catch (DbExcepiton exp) {

        cout << exp.what() << endl;

    }



    cout << "修改成功!" << endl;

}



//增加菜品

void FoodManage::AddFood()

{

    cout << "增加菜品" << endl;



    int modifyprice, modifynum;

    double modifydis;

    string modifyid, modifyname;



    cout << "请输入您要增加菜品的编号、名称、价格、数量、折扣!" << endl;

    cin >> modifyid >> modifyname >> modifyprice >> modifynum >> modifydis;



    DbConnection db;

    try {

        string sql;



        //构建SQL语句

        sql = "insert into menu (FoodId,FoodName,FoodPrice,FoodNum,FoodDiscount) values (";

        sql = sql + modifyid + ",'" + modifyname + "'," + to_string(modifyprice) + "," + to_string(modifynum) + "," + to_string(modifydis) + ");";



        //执行insert命令,返回成功插入的记录个数

        int num_add = db.executeSQL(sql.c_str());

        cout << num_add << "份菜品添加完成!" << endl;

    }

    catch (DbExcepiton exp) {

        cout << exp.what() << endl;

    }



}



//删除菜品

void FoodManage::DeleteFood()

{

    cout << "删除菜品" << endl;



    cout << "请输入您要删除菜品的编号!" << endl;

    string deleteid;

    cin >> deleteid;



    DbConnection db;

    try {

        string sql;

        //构建SQL语句

        sql = "delete from menu where FoodId =" + deleteid;



        //执行delete命令,返回成功删除的记录个数

        int num_add = db.executeSQL(sql.c_str());

        if (num_add != 0)

             cout << num_add << "项菜品删除成功!" << endl;

        else cout << "The updated user does not exist" << endl;

    }

    catch (DbExcepiton exp) {

        cout << exp.what() << endl;

    }

}



//修改折扣

void FoodManage::SetDiscount()

{

    DbConnection db;

    cout << "修改折扣" << endl;

    double modifydis;

    string modifyid;



    cout << "请输入需要修改折扣菜品的编号、新的折扣!" << endl;

    cin >> modifyid >> modifydis;



    //写入折扣

    try {

        string sql;



        //构建SQL语句

        sql = "UPDATE menu SET FoodDiscount = " + to_string(modifydis);

        sql = sql + " where FoodId = " + modifyid;

        sql = sql + ";";

        db.executeSQL(sql.c_str());

    }

    catch (DbExcepiton exp) {

        cout << exp.what() << endl;

    }



    cout << "修改成功!" << endl;

}

main.cpp:

#include<iostream>

#include"System.h"

#include"Order.h"

#include"Food.h"

#include"DbConnection.h"

using namespace std;



int choose, option;

System s;

FoodManage FM;

OrderIn OI;

OrderOut OO;

OrderManage OM;

Menu m;



//管理员操作函数

void AdminOperator()

{

    int choice;



    while (true)

    {

        s.ShowAdminSystem();



        cout << "请输入您要进行的选择!" << endl;

        cin >> option;

        system("cls");

        //进入菜单、订单修改界面

        if (option == 1)

        {

             //修改订单

             s.ShowAdminOpOrder();

             cin >> choice;

             if (choice == 1)

             {

                 //查找

                 OM.SeekOrder();



                 system("pause");

                 system("cls");

             }

             else if (choice == 2)

             {

                 //修改

                 OM.ModifyOrder();



                 system("pause");

                 system("cls");

             }

             else if (choice == 3)

             {

                 //删除

                 OM.DeleteOrder();



                 system("pause");

                 system("cls");

             }

             else if (choice == 0)

             {

                 system("pause");

                 system("cls");

                 return;

             }

        }



        //修改菜单

        else if (option == 2)

        {

             while (true)

             {

                 s.ShowAdminOpMenu();

                 cin >> choice;



                 if (choice == 1)

                 {

                     //增加菜品

                     FM.AddFood();



                     system("pause");

                     system("cls");

                 }

                 else if (choice == 2)

                 {

                     //修改菜品

                     FM.ModifyFood();



                     system("pause");

                     system("cls");

                 }

                 else if (choice == 3)

                 {

                     //删除菜品

                     FM.DeleteFood();



                     system("pause");

                     system("cls");

                 }

                 else if (choice == 4)

                 {

                     //查找菜品

                     FM.SeekFood();



                     system("pause");

                     system("cls");

                 }

                 else if (choice == 5)

                 {

                     //设置折扣

                     FM.SetDiscount();



                     system("pause");

                     system("cls");

                 }

                 else if (choice == 0)

                 {



                     system("pause");

                     system("cls");



                     return;

                 }





             }



        }

        //查询当日信息

        else if (option == 3)

        {

             OM.AllInfo();

        }

        else

        {

             return;

        }



    }



}



//验证管理员账号密码

int CheckAdmin()

{

    ifstream ifs;

    string name, Fname;

    string password, FPW;



    ifs.open("admin.txt", ios::in);



    cout << "请输入管理员的账号:" << endl;

    cin >> name;

    cout << "请输入管理员的密码:" << endl;

    cin >> password;

    while (ifs >> Fname && ifs >> FPW)

    {

        if (name == Fname && password == FPW)

        {

             return 1;

        }

    }

    cout << "账号或密码错误!" << endl;



    return 0;



}



int main()

{



    while (true)

    {

        s.ShowMainSystem();

        //选择身份:顾客/管理员



        cin >> choose;

        system("cls");



        if (choose == 1)

        {

             s.ShowCustomerSystem();

             m.ShowMenu();

             cout << "请选择您的就餐方式:1、堂食  2、外卖  0、退出" << endl;

             cin >> option;

             if (option == 1)

             {

                 OI.AddInInfo();

             }

             else if (option == 2)

             {

                 OO.AddOutInfo();

             }

             else if (option == 0)

             {

                 system("pause");

                 system("cls");

             }

             else

             {

                 cout << "输入错误,请重新输入!" << endl;

             }



        }

        else if (choose == 2)

        {



            cout << "欢迎管理员登陆!" << endl;

             if (CheckAdmin())

             {

                 s.ShowAdminSystem();

                 system("cls");

                 AdminOperator();

             }

             else

             {

                 system("pause");

                 system("cls");

             }





        }

        else if (choose == 0)

        {

             cout << "欢迎下次使用!" << endl;

             system("pause");

             system("cls");

        }

        else

        {

             cout << "输入错误,请重新输入!" << endl;

        }

    }



}

Menu.cpp:

#include"Menu.h"

#include"DbConnection.h"

using namespace std;



//默认构造

Menu::Menu(){}



//显示菜单

void Menu::ShowMenu()

{

    DbConnection db;



    try {

        //执行select命令,获取结果集

        const char* sql;

        sql = "select * from menu";

        MYSQL_RES res = db.executeQuery(sql);



        //输出字段名

        unsigned int num_fields = mysql_num_fields(&res);

        MYSQL_FIELD* fields = mysql_fetch_fields(&res);

        for (unsigned int i = 0; i < num_fields; i++) {

             cout.width(20); cout.setf(ios::left);

             cout << fields[i].name;

        };

        cout << endl;



        //输出查询出的结果集中的每条记录中的数据

        MYSQL_ROW row;

        while ((row = mysql_fetch_row(&res)))

        {

             for (unsigned int i = 0; i < num_fields; i++)

             {

                 cout.width(20); cout.setf(ios::left);

                 cout << row[i] ? row[i] : "NULL";

             }

             cout << endl;

        }

    }

    catch (DbExcepiton exp) {

        cout << exp.what() << endl;

    }

}

Order.cpp:

#include"Order.h"

#include"DbConnection.h"

using namespace std;



//******************************* OrderIn **********************************//

//添加订单---堂食

void OrderIn::AddInInfo()

{

    //订单编号:年月日+时分秒

    ostringstream number;

    //o+订单名

    ostringstream onumber;

    onumber << "i";

    //cout << "订单编号为: ";

    const time_t t = time(NULL);

    struct tm systemtime;

    localtime_s(&systemtime, &t);



    //年

    number << 1900 + systemtime.tm_year;

    onumber << 1900 + systemtime.tm_year;

    //月

    if (systemtime.tm_mon < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_mon + 1;

    onumber << systemtime.tm_mon + 1;

    //日

    if (systemtime.tm_mday < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_mday;

    onumber << systemtime.tm_mday;

    //时

    if (systemtime.tm_hour < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_hour;

    onumber << systemtime.tm_hour;

    //分

    if (systemtime.tm_min < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_min;

    onumber << systemtime.tm_min;

    //秒

    if (systemtime.tm_sec < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_sec;

    onumber << systemtime.tm_sec;





    string n;

    int count = 0;

    string ordernumber = number.str();

    string orderonumber = onumber.str();





    cout << "请输入您要点的菜品编号!" << endl;

    while (cin >> n && n != "0")

    {



        //菜品名称、价格、份数、折扣

        cout << "请输入您要预定的该菜品的份数:" << endl;

        cin >> count;



        DbConnection db;

        try {

             string sql;



             //构建SQL语句

             sql = "insert into `order`(OrderId, FoodName, FoodPrice, FoodNumber, FoodDiscount) select ";

             sql = sql + ordernumber + ", FoodName, FoodPrice, " + to_string(count) + ", FoodDiscount from menu where FoodId = '" + n + "';";



             //执行insert命令,返回成功插入的记录个数

             int num_add = db.executeSQL(sql.c_str());

             cout << num_add << "份菜品添加完成!" << endl;



             stringstream stream;

             int temp;



        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }



        cout << "请输入您要点的菜品编号!0:退出" << endl;



    }



    cout << "请输入您要选择的房间,1-10需要包间费50元,11-50大厅位子不需要包间费" << endl;

    int TableId;

    cin >> TableId;



    DbConnection db;

    try {

        string sql;



        //构建SQL语句

        sql = "insert into orderin (OrderId,TableId,BoxPrice) VALUES(";

        if(TableId<=10) sql = sql + ordernumber + "," + to_string(TableId) + "," + to_string(50) + ");";

        else sql = sql + ordernumber + "," + to_string(TableId) + "," + to_string(0) + ");";

        int num_add = db.executeSQL(sql.c_str());

    }

    catch (DbExcepiton exp) {

        cout << exp.what() << endl;

    }



    cout << "════════════════════════════════════" << endl;

    cout << "您的订单信息为:" << endl;

    cout << "订单编号:" << ordernumber << endl;

    cout << "餐桌号:" << TableId << endl;

    if(TableId <= 10) cout << "需要承担的包厢费是:50元" << endl;

    else              cout << "无需承担包厢费" << endl;

    cout << "════════════════════════════════════" << endl;



    system("pause");

    system("cls");

}





//******************************* OrderOut **********************************//

//添加订单---外卖

void OrderOut::AddOutInfo()

{

    //订单编号:年月日+时分秒

    ostringstream number;

    //o+订单名

    ostringstream onumber;

    onumber << "i";

    //cout << "订单编号为: ";

    const time_t t = time(NULL);

    struct tm systemtime;

    localtime_s(&systemtime, &t);



    //年

    number << 1900 + systemtime.tm_year;

    onumber << 1900 + systemtime.tm_year;

    //月

    if (systemtime.tm_mon < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_mon + 1;

    onumber << systemtime.tm_mon + 1;

    //日

    if (systemtime.tm_mday < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_mday;

    onumber << systemtime.tm_mday;

    //时

    if (systemtime.tm_hour < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_hour;

    onumber << systemtime.tm_hour;

    //分

    if (systemtime.tm_min < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_min;

    onumber << systemtime.tm_min;

    //秒

    if (systemtime.tm_sec < 10)

    {

        number << 0;

        onumber << 0;

    }

    number << systemtime.tm_sec;

    onumber << systemtime.tm_sec;





    string n;

    int count = 0;

    string ordernumber = number.str();

    string orderonumber = onumber.str();





    cout << "请输入您要点的菜品编号!" << endl;

    while (cin >> n && n != "0")

    {



        //菜品名称、价格、份数、折扣

        cout << "请输入您要预定的该菜品的份数:" << endl;

        cin >> count;



        DbConnection db;

        try {

             string sql;



             //构建SQL语句

             sql = "insert into `order`(OrderId, FoodName, FoodPrice, FoodNumber, FoodDiscount) select ";

             sql = sql + ordernumber + ", FoodName, FoodPrice, " + to_string(count) + ", FoodDiscount from menu where FoodId = '" + n + "';";



             //执行insert命令,返回成功插入的记录个数

             int num_add = db.executeSQL(sql.c_str());

             cout << num_add << "份菜品添加完成!" << endl;



             stringstream stream;

             int temp;



        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }



        cout << "请输入您要点的菜品编号!0:退出" << endl;



    }



    string ordertime;

    cout << "请输入您的送餐时间:" << endl;

    cin >> ordertime;



    string place;

    cout << "请输入您的送餐地点:" << endl;

    cin >> place;



    int phonenumber;

    cout << "请输入您的手机号:" << endl;

    cin >> phonenumber;



    DbConnection db;

    try {

        string sql;



        //构建SQL语句

        //insert into orderout (OrderId,Time,OrderPlace,CustomPhone,ExtraTips) VALUES(10001,'ssss','time',100000,23);

        sql = "insert into orderout (OrderId,Time,OrderPlace,CustomPhone,ExtraTips) VALUES(";

        sql = sql + ordernumber + ",'" + ordertime + "','" + place + "'," + to_string(phonenumber) + ",10);";

        int num_add = db.executeSQL(sql.c_str());

    }

    catch (DbExcepiton exp) {

        cout << exp.what() << endl;

    }



    //输出订单信息

    cout << "════════════════════════════════════" << endl;

    cout << "您的订单信息为:" << endl;

    cout << "订单编号:" << ordernumber << endl;

    cout << "送餐时间:" << ordertime << endl;

    cout << "送餐地点:" << place << endl;

    cout << "手机号:" << phonenumber << endl;

    cout << "外卖配送费是:10元" << endl;

    cout << "════════════════════════════════════" << endl;





    system("pause");

    system("cls");

}





//****************************** OrderManage ********************************//

//构造函数

OrderManage::OrderManage()

{



}



//查找订单

void OrderManage::SeekOrder()

{



    string temp = "0";





    cout << "欢迎您使用查找订单功能!注意:只可查找当日订单" << endl;



    cout << "请输入您要查找的方式!1、按照订单编号查找 2、按照手机号查找! 0、退出" << endl;



    int op;

    string seekid;

    string seeknumber;

    cin >> temp;

    if (temp == "1" || temp == "2" || temp == "0")

    {

        op = int(temp[0] - '0');

    }

    else

    {

        cout << "输入错误!" << endl;

        return;

    }

    //使用外卖单号查找

    if (op == 1)

    {

        cout << "请输入您要查找的订单编号!" << endl;

        cin >> seekid;

        DbConnection db;



        try {

             //执行select命令,获取结果集



             string sql;

             sql = sql + "select * from `order` where OrderId = " + seekid;

             const char* sql2 = sql.c_str(); //把string类型转成const char* 类型

             MYSQL_RES res = db.executeQuery(sql2);



             //输出字段名

             unsigned int num_fields = mysql_num_fields(&res);

             MYSQL_FIELD* fields = mysql_fetch_fields(&res);

             for (unsigned int i = 0; i < num_fields; i++) {

                 cout.width(20); cout.setf(ios::left);

                 cout << fields[i].name;

             };

             cout << endl;



             //输出查询出的结果集中的每条记录中的数据

             MYSQL_ROW row;

             while ((row = mysql_fetch_row(&res)))

             {

                 for (unsigned int i = 0; i < num_fields; i++)

                 {

                     cout.width(20); cout.setf(ios::left);

                     cout << row[i] ? row[i] : "NULL";

                 }

                 cout << endl;

             }

        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }

    }



    //使用手机号查找

    else if (op == 2)

    {



        cout << "请输入您要查找的手机号!" << endl;

        cin >> seeknumber;

        cout << "此订单的具体信息如下!" << endl;

        DbConnection db;

        try {

             //执行select命令,获取结果集



             string sql;

             sql = sql + "select * from `orderout` where CustomPhone = " + seeknumber + ";";

             const char* sql2 = sql.c_str(); //把string类型转成const char* 类型

             MYSQL_RES res = db.executeQuery(sql2);



             //输出字段名

             unsigned int num_fields = mysql_num_fields(&res);

             MYSQL_FIELD* fields = mysql_fetch_fields(&res);

             for (unsigned int i = 0; i < num_fields; i++) {

                 cout.width(20); cout.setf(ios::left);

                 cout << fields[i].name;

             };

             cout << endl;



             //输出查询出的结果集中的每条记录中的数据

             MYSQL_ROW row;

             while ((row = mysql_fetch_row(&res)))

             {

                 for (unsigned int i = 0; i < num_fields; i++)

                 {

                     cout.width(20); cout.setf(ios::left);

                     cout << row[i] ? row[i] : "NULL";

                 }

                 cout << endl;

             }

        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }

    }

    else

    {

        cout << "输入错误!" << endl;

        return;

    }

}



//修改订单信息

void OrderManage::ModifyOrder()

{

    OrderIn oi;

    OrderOut oo;

    FoodManage fm;

    Menu m;



    string temp = "0";





    cout << "欢迎修改订单" << endl;

    cout << "请输入您要修改的订单种类!1、堂食  2、外卖" << endl;







    //记录用户选择

    int op;

    //记录订单编号

    string tempid, n;

    int count;



    cin >> temp;

    if (temp == "1" || temp == "2" || temp == "0")

    {

        op = int(temp[0] - '0');

    }

    else

    {

        cout << "输入错误!" << endl;

        return;

    }



    //记录堂食订单信息

    if (op == 1)

    {

        cout << "请输入您要修改的订单编号!" << endl;

        cin >> tempid;



        DbConnection db;

        try {

             string sql;

             //构建SQL语句

             sql = "delete from `order` where OrderId =" + tempid;

             //执行delete命令,返回成功删除的记录个数

             int num_add1 = db.executeSQL(sql.c_str());

             if (num_add1 != 0)

                 cout << num_add1 << "项总订单删除成功!" << endl;

             else cout << "The updated user does not exist" << endl;



             //构建SQL语句

             sql = "delete from `orderin` where OrderId =" + tempid;

             //执行delete命令,返回成功删除的记录个数

             int num_add2 = db.executeSQL(sql.c_str());

             if (num_add2 != 0)

                 cout << num_add2 << "项堂食订单删除成功!" << endl;



             //构建SQL语句

             sql = "delete from `orderout` where OrderId =" + tempid;

             //执行delete命令,返回成功删除的记录个数

             int num_add3 = db.executeSQL(sql.c_str());

             if (num_add3 != 0)

                 cout << num_add3 << "项外卖订单删除成功!" << endl;

        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }



        cout << "以下是本店的菜单!" << endl;

        m.ShowMenu();

        cout << "请输入新的菜品编号" << endl;

        while (cin >> n && n != "0")

        {



             //菜品名称、价格、份数、折扣

             cout << "请输入该菜品的份数:" << endl;

             cin >> count;



             DbConnection db;

             try {

                 string sql;



                 //构建SQL语句

                 sql = "insert into `order`(OrderId, FoodName, FoodPrice, FoodNumber, FoodDiscount) select ";

                 sql = sql + tempid + ", FoodName, FoodPrice, " + to_string(count) + ", FoodDiscount from menu where FoodId = '" + n + "';";



                 //执行insert命令,返回成功插入的记录个数

                 int num_add = db.executeSQL(sql.c_str());

                 cout << num_add << "份菜品添加完成!" << endl;



                 stringstream stream;

                 int temp;



             }

             catch (DbExcepiton exp) {

                 cout << exp.what() << endl;

             }



             cout << "请输入菜品编号!0:退出" << endl;



        }



        cout << "请输入您要选择的房间,1-10需要包间费50元,11-50大厅位子不需要包间费" << endl;

        int TableId;

        cin >> TableId;





        try {

             string sql;



             //构建SQL语句

             sql = "insert into orderin (OrderId,TableId,BoxPrice) VALUES(";

             if (TableId <= 10) sql = sql + tempid + "," + to_string(TableId) + "," + to_string(50) + ");";

             else sql = sql + tempid + "," + to_string(TableId) + "," + to_string(0) + ");";

             int num_add = db.executeSQL(sql.c_str());

        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }



        cout << "════════════════════════════════════" << endl;

        cout << "新的订单信息为:" << endl;

        cout << "订单编号:" << tempid << endl;

        cout << "餐桌号:" << TableId << endl;

        if (TableId <= 10) cout << ",需要承担的包厢费是:50元" << endl;

        else              cout << ",无需承担包厢费" << endl;

        cout << "════════════════════════════════════" << endl;



        system("pause");

        system("cls");

    }



    else if (op == 2)

    {



        cout << "请输入您要修改的订单编号!" << endl;

        cin >> tempid;



        DbConnection db;

        try {

             string sql;

             //构建SQL语句

             sql = "delete from `order` where OrderId =" + tempid;

             //执行delete命令,返回成功删除的记录个数

             int num_add1 = db.executeSQL(sql.c_str());

             if (num_add1 != 0)

                 cout << num_add1 << "项总订单删除成功!" << endl;

             else cout << "The updated user does not exist" << endl;



             //构建SQL语句

             sql = "delete from `orderin` where OrderId =" + tempid;

             //执行delete命令,返回成功删除的记录个数

             int num_add2 = db.executeSQL(sql.c_str());

             if (num_add2 != 0)

                 cout << num_add2 << "项堂食订单删除成功!" << endl;



             //构建SQL语句

             sql = "delete from `orderout` where OrderId =" + tempid;

             //执行delete命令,返回成功删除的记录个数

             int num_add3 = db.executeSQL(sql.c_str());

             if (num_add3 != 0)

                 cout << num_add3 << "项外卖订单删除成功!" << endl;

        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }



        cout << "以下是本店的菜单!" << endl;

        m.ShowMenu();

        cout << "请输入新的菜品编号" << endl;

        while (cin >> n && n != "0")

        {



             //菜品名称、价格、份数、折扣

             cout << "请输入该菜品的份数:" << endl;

             cin >> count;



             DbConnection db;

             try {

                 string sql;



                 //构建SQL语句

                 sql = "insert into `order`(OrderId, FoodName, FoodPrice, FoodNumber, FoodDiscount) select ";

                 sql = sql + tempid + ", FoodName, FoodPrice, " + to_string(count) + ", FoodDiscount from menu where FoodId = '" + n + "';";



                 //执行insert命令,返回成功插入的记录个数

                 int num_add = db.executeSQL(sql.c_str());

                 cout << num_add << "份菜品添加完成!" << endl;



                 stringstream stream;

                 int temp;



             }

             catch (DbExcepiton exp) {

                 cout << exp.what() << endl;

             }



             cout << "请输入菜品编号!0:退出" << endl;



        }



        string ordertime;

        cout << "请输入送餐时间:" << endl;

        cin >> ordertime;



        string place;

        cout << "请输入送餐地点:" << endl;

        cin >> place;



        int phonenumber;

        cout << "请输入手机号:" << endl;

        cin >> phonenumber;



        try {

             string sql;



             //构建SQL语句

             //insert into orderout (OrderId,Time,OrderPlace,CustomPhone,ExtraTips) VALUES(10001,'ssss','time',100000,23);

             sql = "insert into orderout (OrderId,Time,OrderPlace,CustomPhone,ExtraTips) VALUES(";

             sql = sql + tempid + ",'" + ordertime + "','" + place + "'," + to_string(phonenumber) + ",10);";

             int num_add = db.executeSQL(sql.c_str());

        }

        catch (DbExcepiton exp) {

             cout << exp.what() << endl;

        }



        //输出订单信息

        cout << "════════════════════════════════════" << endl;

        cout << "新的订单信息为:" << endl;

        cout << "订单编号:" << tempid << endl;

        cout << "送餐时间:" << ordertime << endl;

        cout << "送餐地点:" << place << endl;

        cout << "手机号:" << phonenumber << endl;

        cout << "外卖配送费是:10元" << endl;

        cout << "════════════════════════════════════" << endl;



        system("pause");

        system("cls");



    }

    else

    {

        return;

    }

}



//删除订单

void OrderManage::DeleteOrder()

{

    cout << "删除订单:" << endl;





    string temp = "0";



    //删除的订单编号

    string deleteid;



    cout << "请输入您要删除的订单编号!" << endl;

    cin >> deleteid;



    DbConnection db;

    try {

        string sql;

        //构建SQL语句

        sql = "delete from `order` where OrderId =" + deleteid;

        //执行delete命令,返回成功删除的记录个数

        int num_add1 = db.executeSQL(sql.c_str());

        if (num_add1 != 0)

             cout << num_add1 << "项总订单删除成功!" << endl;

        else cout << "The updated user does not exist" << endl;



        //构建SQL语句

        sql = "delete from `orderin` where OrderId =" + deleteid;

        //执行delete命令,返回成功删除的记录个数

        int num_add2 = db.executeSQL(sql.c_str());

        if (num_add2 != 0)

             cout << num_add2 << "项堂食订单删除成功!" << endl;



        //构建SQL语句

        sql = "delete from `orderout` where OrderId =" + deleteid;

        //执行delete命令,返回成功删除的记录个数

        int num_add3 = db.executeSQL(sql.c_str());

        if (num_add3 != 0)

             cout << num_add3 << "项外卖订单删除成功!" << endl;

    }

    catch (DbExcepiton exp) {

        cout << exp.what() << endl;

    }

}



//查询历史信息

void OrderManage::AllInfo()

{

    string seekdate;

    cout << "请输入您要查询的日期,格式为:20220101(只允许8位)" << endl;

    cin >> seekdate;

    int op;



    while (true)

    {

        System s;

        s.ShowAll();

        cin >> op;



        if (op == 1)

        {

             //查询总接单数

             DbConnection db;

             try {

                 //执行select命令,获取结果集



                 string sql;

                 sql = "SELECT COUNT(DISTINCT OrderId) FROM `order` WHERE LEFT(OrderId, 8)= " + seekdate + ";";

                 const char* sql2 = sql.c_str(); //把string类型转成const char* 类型

                 MYSQL_RES res = db.executeQuery(sql2);



                 cout << "总接单数为:" << endl;

                 //输出查询出的结果集中的每条记录中的数据

                 unsigned int num_fields = mysql_num_fields(&res);

                 MYSQL_ROW row;

                 while ((row = mysql_fetch_row(&res)))

                 {

                     for (unsigned int i = 0; i < num_fields; i++)

                     {

                         cout.width(20); cout.setf(ios::left);

                         cout << row[i] ? row[i] : "NULL";

                     }

                     cout << endl;

                 }

             }

             catch (DbExcepiton exp) {

                 cout << exp.what() << endl;

             }

             system("pause");

             system("cls");

        }



        else if (op == 2)

        {

             //查询总销售额

             DbConnection db;

             try {

                 //执行select命令,获取结果集



                 string sql;

                 sql ="SELECT sum(FoodPrice*FoodNumber*FoodDiscount) FROM `order` WHERE LEFT(OrderId, 8)= " + seekdate;

                 const char* sql2 = sql.c_str(); //把string类型转成const char* 类型

                 MYSQL_RES res = db.executeQuery(sql2);



                 cout << "当天的总销售额为:";

                 unsigned int num_fields = mysql_num_fields(&res);



                 //输出查询出的结果集中的每条记录中的数据

                 MYSQL_ROW row;

                 while ((row = mysql_fetch_row(&res)))

                 {

                     for (unsigned int i = 0; i < num_fields; i++)

                     {

                         cout.width(20); cout.setf(ios::left);

                         cout << row[i] ? row[i] : "NULL";

                     }

                     cout << endl;

                 }

             }

             catch (DbExcepiton exp) {

                 cout << exp.what() << endl;

             }

             system("pause");

             system("cls");

        }



        else if (op == 3)

        {

             //查询外卖堂食占比

             DbConnection db;

             try {

                 //堂食占比

                 cout << "堂食占比为:" ;

                 string sql;

                 sql = "SELECT COUNT( LEFT(OrderId, 8)= " + seekdate + ") FROM `orderin`;";

                 const char* sql2 = sql.c_str(); //把string类型转成const char* 类型

                 MYSQL_RES res = db.executeQuery(sql2);

                 //输出查询出的结果集中的每条记录中的数据

                 unsigned int num_fields = mysql_num_fields(&res);

                 MYSQL_ROW row;

                 while ((row = mysql_fetch_row(&res)))

                 {

                     for (unsigned int i = 0; i < num_fields; i++)

                     {

                         cout << row[i] ? row[i] : "NULL";

                     }

                 }

                 cout << "/";//分隔分子分母

                 //SELECT COUNT(DISTINCT OrderId) FROM `order` WHERE LEFT(OrderId, 8)= 20220102;

                 sql = "SELECT COUNT(DISTINCT OrderId) FROM `order` WHERE LEFT(OrderId, 8)= " + seekdate + ";";

                 const char* sql3 = sql.c_str(); //把string类型转成const char* 类型

                 MYSQL_RES res2 = db.executeQuery(sql3);

                 //输出查询出的结果集中的每条记录中的数据

                 unsigned int num_fields2 = mysql_num_fields(&res2);

                 MYSQL_ROW row2;

                 while ((row2 = mysql_fetch_row(&res2)))

                 {

                     for (unsigned int i = 0; i < num_fields2; i++)

                     {

                         cout << row2[i] ? row2[i] : "NULL";

                     }

                     cout << endl;

                 }



                 //外卖占比

                 cout << "外卖占比为:";

                 sql = "SELECT COUNT( LEFT(OrderId, 8)= " + seekdate + ") FROM `orderout`;";

                 const char* sql4 = sql.c_str(); //把string类型转成const char* 类型

                 MYSQL_RES res3 = db.executeQuery(sql4);

                 //输出查询出的结果集中的每条记录中的数据

                 unsigned int num_fields3 = mysql_num_fields(&res3);

                 MYSQL_ROW row3;

                 while ((row3 = mysql_fetch_row(&res3)))

                 {

                     for (unsigned int i = 0; i < num_fields3; i++)

                     {

                         cout << row3[i] ? row3[i] : "NULL";

                     }

                 }

                 cout << "/";//分隔分子分母

                 sql = "SELECT COUNT(DISTINCT OrderId) FROM `order` WHERE LEFT(OrderId, 8)= " + seekdate + ";";

                 const char* sql5 = sql.c_str(); //把string类型转成const char* 类型

                 MYSQL_RES res4 = db.executeQuery(sql5);

                 //输出查询出的结果集中的每条记录中的数据

                 unsigned int num_fields4 = mysql_num_fields(&res4);

                 MYSQL_ROW row4;

                while ((row4 = mysql_fetch_row(&res4)))

                 {

                     for (unsigned int i = 0; i < num_fields4; i++)

                     {

                         cout << row4[i] ? row4[i] : "NULL";

                     }

                     cout << endl;

                 }

             }

             catch (DbExcepiton exp) {

                 cout << exp.what() << endl;

             }



             system("pause");

             system("cls");

        }



        else if (op == 4)

        {

             //查询各个菜品销售情况

             cout << "各个菜品销售情况如下:"  << endl;

             DbConnection db;

             try {

                 //执行select命令,获取结果集



                 string sql;

                 sql ="select FoodName,sum(FoodNumber) from `order` WHERE LEFT(OrderId, 8)= " + seekdate;

                 sql = sql + " group by FoodName order by FoodName,FoodNumber desc;";

                 const char* sql2 = sql.c_str(); //把string类型转成const char* 类型

                 MYSQL_RES res = db.executeQuery(sql2);



                 //输出字段名

                 unsigned int num_fields = mysql_num_fields(&res);

                 MYSQL_FIELD* fields = mysql_fetch_fields(&res);

                 for (unsigned int i = 0; i < num_fields; i++) {

                     cout.width(20); cout.setf(ios::left);

                     cout << fields[i].name;

                 };

                 cout << endl;



                 //输出查询出的结果集中的每条记录中的数据

                 MYSQL_ROW row;

                 while ((row = mysql_fetch_row(&res)))

                 {

                     for (unsigned int i = 0; i < num_fields; i++)

                     {

                         cout.width(20); cout.setf(ios::left);

                         cout << row[i] ? row[i] : "NULL";

                     }

                     cout << endl;

                 }

             }

             catch (DbExcepiton exp) {

                 cout << exp.what() << endl;

             }

             system("pause");

             system("cls");



             system("pause");

             system("cls");

        }



        else if (op == 5) {

             //显示订单详情

             DbConnection db;

             try {

                 //执行select命令,获取结果集



                 string sql;

                 sql ="SELECT * FROM `order` WHERE LEFT(OrderId, 8)= " + seekdate;

                 const char* sql2 = sql.c_str(); //把string类型转成const char* 类型

                 MYSQL_RES res = db.executeQuery(sql2);



                 cout << "当天的订单详情为:" << endl;



                 //输出字段名

                 unsigned int num_fields = mysql_num_fields(&res);

                 MYSQL_FIELD* fields = mysql_fetch_fields(&res);

                 for (unsigned int i = 0; i < num_fields; i++) {

                     cout.width(20); cout.setf(ios::left);

                     cout << fields[i].name;

                 };

                 cout << endl;



                 //输出查询出的结果集中的每条记录中的数据

                 MYSQL_ROW row;

                 while ((row = mysql_fetch_row(&res)))

                 {

                     for (unsigned int i = 0; i < num_fields; i++)

                     {

                         cout.width(20); cout.setf(ios::left);

                         cout << row[i] ? row[i] : "NULL";

                     }

                     cout << endl;

                 }

             }

             catch (DbExcepiton exp) {

                 cout << exp.what() << endl;

             }

             system("pause");

             system("cls");

        }



        else

        {

             system("pause");

             system("cls");



             break;

        }

    }



}

System.cpp:

#include"System.h"

#include"DbConnection.h"



//显示主界面

void System::ShowMainSystem()

{

    cout << "╔════════════════════════════════════╗" << endl;

    cout << "║ 欢迎登陆自助点餐系统!             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            请输入身份:            ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║  1、顾客    2、管理员        ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "╚════════════════════════════════════╝" << endl;

}



//显示顾客登陆界面

void System::ShowCustomerSystem()

{

    cout << "欢迎您登陆外卖预订系统!" << endl;

    cout << "以下是本店的菜单:" << endl;



}



//显示管理员登陆界面

void System::ShowAdminSystem()

{

    cout << "╔════════════════════════════════════╗" << endl;

    cout << "║ 请输入管理员操作:                 ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            1、订单管理             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            2、菜单管理             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            3、查询历史信息         ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            0、退出                 ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "╚════════════════════════════════════╝" << endl;

}





//显示菜单管理界面

void System::ShowAdminOpMenu()

{

    cout << "╔════════════════════════════════════╗" << endl;

    cout << "║ 请输入菜单管理操作:               ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            1、增加菜品             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            2、修改菜品             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            3、删除菜品             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            4、查找菜品             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            5、设置折扣             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            0、退出                 ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "╚════════════════════════════════════╝" << endl;



}



//显示订单管理界面

void System::ShowAdminOpOrder()

{

    cout << "╔════════════════════════════════════╗" << endl;

    cout << "║ 请输入订单管理操作:               ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            1、查找订单             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            2、修改订单             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            3、删除订单             ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║            0、退出                 ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "╚════════════════════════════════════╝" << endl;



}



//显示历史信息操作界面

void System::ShowAll()

{

    cout << "╔════════════════════════════════════╗" << endl;

    cout << "║ 请输入查询历史信息操作:           ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║          1、查询总接单数           ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║          2、查询总销售额           ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║          3、查询外卖堂食占比       ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║          4、查询各个菜品销售情况   ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║          5、显示订单详情           ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "║          0、退出                   ║" << endl;

    cout << "║                                    ║" << endl;

    cout << "╚════════════════════════════════════╝" << endl;

}

七、运行结果与分析

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

八、心得与体会

在这次的实验中,我设计并实现了一个通过c++连接数据库实现自助点餐的系统。在这次的实验中,我深刻理解了面向对象和面向过程设计的不同。比如在之前单纯通过c或者c++进行设计时,对函数的每一个细节进行处理,比如以什么顺序,如何通过容器对数据进行操作。但是通过关系数据库,我们只需要通过sql语言对数据库说我们需要进行什么操作,直接输出即可,极大的方便了程序设计人员。

此外,在这次的实验中我突然发现策略其实是很重要的。类的设计、数据库设计一定要提前做好,不同的类之间的关系要明确,要把数据封装起来而把函数接口留在外面供我们调用。在遇到困难时不妨转变下思路,把准备通过c++实现的部分分配到数据库实现,减小难度的同时还能加快编译速度。就用我这次实验中的一个小细节举个例子,在实验中我最后遇到的困难就是计算输出总销售额。我以前的思路一直是如何把数据库中的string类型的数据转成int类型读入c++的变量里,数据到底是const char*、string还是int类型要时刻明确,不然就会报错;还要精准的计算行数列数,创建二位数组储存这些数据,异常复杂,并且困扰了我很久。但是在一天上午,我突然想到能不能通过数据库进行计算,c++只输出结果,而且这不正是面向对象的程序设计思路的精髓吗,我们只通过接口告诉计算机我们需要什么,而不去烦心到底如何实现这个功能。

最后,连接数据库也给了我不小的挑战,从尝试连接到强迫自己理解老师发的代码再到最后能够看懂并运用,我觉得这是对我的挑战,也让我学到了很多新的知识。在过程中我也想过放弃,因为考试加复习,所有的事情都堆在一起,时间过于紧张。我也想过要不要只完成70、80%就好?但是在最后我还是坚持了下来,每天挤出时间完成设计,最终完成了全部的内容。总而言之,这次的课程设计真的是一次很不错的经历,加深了我对两门课程的理解,自己的技术还得到了提升。衷心感谢c++老师庄老师和实验老师霍老师,感谢那些和我讨论、帮我解答问题的同学,让我为这一个学期做了一次完美的收尾,感谢各位!

九、帮助文档

本c++课程设计采用与数据库连接的方式,

其中数据库采用Navicat Permium与MySql建立连接,共建立4个表,表的详细设计如下:

 

 

 

 

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
南京理工大学是一所位于中国南京市的高等学府,该校开设了计算机科学与技术专业,其中包括了C 程序设计课程。 C 程序设计作为计算机科学与技术专业的基础性课程之一,是为了培养学生的编程思维和解决实际问题的能力。通过学习C 程序设计,学生将掌握C语言基本知识和编程技巧,能够用C语言进行简单程序设计和开发。 南京理工大学C 程序设计课程的内容涵盖了C语言基础语法、流程控制、函数和指针、数组和字符串、结构体和文件操作等方面的知识。课程内容既包括理论学习,也包括实践操作,通过编写实际程序来加深对C语言的理解和应用。 学生在C 程序设计课程中将学到如何进行程序的逻辑设计、编码和调试,掌握如何使用C语言解决实际问题。通过课程的学习和实践,学生将培养扎实的编程基础和良好的编程习惯,为以后的学习和工作打下坚实的基础。 南京理工大学C 程序设计课程注重理论与实践相结合,教学中往往会结合具体案例和项目来进行教学,使学生能够更好地理解和掌握C语言的使用。同时,课程还会引导学生学习相关的编程工具和技术,如调试工具和版本管理工具等,提升学生的综合能力和实际应用水平。 总之,南京理工大学的C 程序设计课程是一门基础性且实用性较强的课程,通过学习该课程,学生将培养编程思维和实际问题解决能力,为以后的学习和工作打下良好的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值