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个表,表的详细设计如下: