巩义企业网站快速优化多少钱,网站设计要求有哪些,织梦手机网站模板,软件管理工程师#x1f31f; 嗨#xff0c;我是LucianaiB#xff01;
#x1f30d; 总有人间一两风#xff0c;填我十万八千梦。
#x1f680; 路漫漫其修远兮#xff0c;吾将上下而求索。 C语言之饭店外卖信息管理系统
目录
设计题目设计目的设计任务描述设计要求输入和输出要求验… 嗨我是LucianaiB 总有人间一两风填我十万八千梦。 路漫漫其修远兮吾将上下而求索。 C语言之饭店外卖信息管理系统
目录
设计题目设计目的设计任务描述设计要求输入和输出要求验收要求进度安排系统分析总体设计详细设计程序实现测试数据和运行结果日志总结与思考参考文献 设计题目
饭店外卖信息管理系统 设计目的
加深学生对课程基础知识和基本理论的理解培养学生独立分析和解决问题的能力。培养学生在计算机软硬件开发、理论计算、查阅资料等方面的能力树立正确的设计思想。加强理论联系实际培养学生科学严谨、实事求是的工作作风和创新精神。 设计任务描述
某饭店为了扩大营业范围增加了外卖送餐业务。同城顾客可以通过移动端订餐饭店按照顾客的订单要求及时送餐上门。外卖点餐的主要信息包括订单号、顾客电话、姓名、地址、订餐时间、所订菜单信息、订餐总金额等。设计一个饭店外卖信息管理系统要求完成以下功能
菜单信息管理录入、修改饭店菜单的相关信息编号、菜名、单价。订餐业务顾客查看菜单信息完成订餐并付费。 订单号由系统自动生成。付费金额在100200元之间餐费打9.5折200300元打9折300元以上打8.5折。 取消订餐若饭店在规定时间内如2小时未能及时送餐顾客可取消订餐。订单查询饭店可按订单号、订餐时间、电话等多种形式查询订单信息。统计查询统计显示当日菜单上所有菜的订单数统计并显示当日外卖的营业额。 设计要求
按照分析、设计、编码、调试和测试的软件开发过程独立完成系统。应用模块化编程思想各项功能分别用函数实现。系统功能设计成菜单形式用户通过菜单选择操作。 输入和输出要求
系统界面友好、直观、易操作。用户根据提示输入数据。输入数据时提供清晰的提示信息。处理完成后清楚地显示运行结果。 验收要求
运行所设计的系统。回答有关问题。提交课程设计报告。提交源程序。 进度安排
系统分析、设计准备阶段6学时编程调试阶段26学时总结和书写报告阶段6学时考核阶段2学时 系统分析
饭店外卖信息管理系统旨在简化外卖订单的处理流程提高饭店的运营效率同时为顾客提供便捷的订餐服务。系统需要实现以下功能
菜单信息管理订餐业务取消订餐订单查询统计查询 总体设计
系统采用模块化设计主要模块包括
菜单信息管理模块添加、修改和删除菜单项。顾客信息管理模块管理顾客的基本信息。订单处理模块处理顾客的订餐请求。订单取消模块允许顾客在规定时间内取消订单。订单查询模块按订单号、订餐时间、电话等查询订单。营业统计模块统计当日订单数量和营业额。折扣应用模块根据订单金额自动应用折扣。用户界面模块提供友好的用户界面。数据持久化模块将数据存储到文件系统。安全与权限模块实现用户权限控制。 详细设计
3.1 数据结构设计
typedef struct {int id; // 菜品IDchar name[50]; // 菜品名称float price; // 菜品价格
} MenuItem;typedef struct {int order_id; // 订单IDchar customer_phone[20]; // 顾客电话char customer_name[50]; // 顾客姓名char address[100]; // 顾客地址char order_time[20]; // 订单时间MenuItem items[MAX_MENU]; // 订单包含的菜品列表int items_count; // 订单中菜品的数量float total_amount; // 订单总金额
} Order;3.2 函数接口设计
void addMenuItem(); // 添加菜单项
void modifyMenuItem(int id); // 修改菜单项
void displayMenu(); // 显示菜单
void placeOrder(); // 下订单
void cancelOrder(int order_id); // 取消订单
void searchOrderByID(int order_id); // 通过订单ID搜索订单
void searchOrderByPhone(const char *phone); // 通过电话号码搜索订单
void statistics(); // 统计信息
void applyDiscount(float *amount); // 应用折扣
void printOrder(const Order *order); // 打印订单详情
void clearOrder(Order *order); // 清除订单数据3.3 主要函数流程图 #mermaid-svg-fRHiViqYLK8ffalP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fRHiViqYLK8ffalP .error-icon{fill:#552222;}#mermaid-svg-fRHiViqYLK8ffalP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fRHiViqYLK8ffalP .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-fRHiViqYLK8ffalP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fRHiViqYLK8ffalP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fRHiViqYLK8ffalP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fRHiViqYLK8ffalP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fRHiViqYLK8ffalP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fRHiViqYLK8ffalP .marker.cross{stroke:#333333;}#mermaid-svg-fRHiViqYLK8ffalP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fRHiViqYLK8ffalP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fRHiViqYLK8ffalP .cluster-label text{fill:#333;}#mermaid-svg-fRHiViqYLK8ffalP .cluster-label span{color:#333;}#mermaid-svg-fRHiViqYLK8ffalP .label text,#mermaid-svg-fRHiViqYLK8ffalP span{fill:#333;color:#333;}#mermaid-svg-fRHiViqYLK8ffalP .node rect,#mermaid-svg-fRHiViqYLK8ffalP .node circle,#mermaid-svg-fRHiViqYLK8ffalP .node ellipse,#mermaid-svg-fRHiViqYLK8ffalP .node polygon,#mermaid-svg-fRHiViqYLK8ffalP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fRHiViqYLK8ffalP .node .label{text-align:center;}#mermaid-svg-fRHiViqYLK8ffalP .node.clickable{cursor:pointer;}#mermaid-svg-fRHiViqYLK8ffalP .arrowheadPath{fill:#333333;}#mermaid-svg-fRHiViqYLK8ffalP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fRHiViqYLK8ffalP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fRHiViqYLK8ffalP .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-fRHiViqYLK8ffalP .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-fRHiViqYLK8ffalP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fRHiViqYLK8ffalP .cluster text{fill:#333;}#mermaid-svg-fRHiViqYLK8ffalP .cluster span{color:#333;}#mermaid-svg-fRHiViqYLK8ffalP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fRHiViqYLK8ffalP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1 2 3 4 5 6 开始 显示主菜单 用户选择 添加/修改菜单项 下订单 取消订单 搜索订单 统计信息 退出系统 结束 程序实现
4.1 源代码
#include stdio.h
#include stdlib.h
#include string.h#define MAX_MENU 100
#define MAX_ORDER 100typedef struct {int id;char name[50];float price;
} MenuItem;typedef struct {int order_id;char customer_phone[20];char customer_name[50];char address[100];char order_time[20];MenuItem items[MAX_MENU];int items_count;float total_amount;
} Order;MenuItem menu[MAX_MENU] {0};
Order orders[MAX_ORDER] {0};
int menu_count 0;
int order_count 0;void addMenuItem() {if (menu_count MAX_MENU) {printf(菜单已满无法添加更多菜品。\n);return;}printf(输入菜品ID名称和价格: );scanf(%d %49s %f, menu[menu_count].id, menu[menu_count].name, menu[menu_count].price);menu_count;
}void displayMenu() {printf(菜单:\n);for (int i 0; i menu_count; i) {printf(%d. %s - $%.2f\n, menu[i].id, menu[i].name, menu[i].price);}
}void placeOrder() {if (order_count MAX_ORDER) {printf(订单数量已达上限无法下新订单。\n);return;}int item_id;float total 0;orders[order_count].items_count 0;displayMenu();printf(输入顾客的电话、姓名、地址和下单时间: );scanf(%19s %49s %9
9s %19s, orders[order_count].customer_phone, orders[order_count].customer_name, orders[order_count].address, orders[order_count].order_time);while (1) {printf(输入菜品ID0结束: );scanf(%d, item_id);if (item_id 0) break;for (int i 0; i menu_count; i) {if (menu[i].id item_id) {if (orders[order_count].items_count MAX_MENU) {orders[order_count].items[orders[order_count].items_count] menu[i];total menu[i].price;} else {printf(一个订单中不能添加超过 %d 个菜品。\n, MAX_MENU);break;}}}}applyDiscount(total);orders[order_count].total_amount total;orders[order_count].order_id order_count 1;printf(订单成功创建。订单ID: %d\n, orders[order_count].order_id);order_count;
}void applyDiscount(float *amount) {if (*amount 300) *amount * 0.85f;else if (*amount 200) *amount * 0.9f;else if (*amount 100) *amount * 0.95f;
}void printOrder(const Order *order) {if (order NULL) {printf(订单为空。\n);return;}printf(订单ID: %d\n, order-order_id);printf(顾客电话: %s\n, order-customer_phone);printf(顾客姓名: %s\n, order-customer_name);printf(地址: %s\n, order-address);printf(下单时间: %s\n, order-order_time);if (order-items_count 0) {printf(该订单没有包含任何菜品。\n);} else {printf(订单项:\n);for (int i 0; i order-items_count; i) {printf( - %s ($%.2f)\n, order-items[i].name, order-items[i].price);}}printf(总金额: $%.2f\n, order-total_amount);
}int main() {int choice;do {printf(\n1. 添加/修改菜单项\n2. 下订单\n3. 取消订单\n4. 搜索订单\n5. 统计信息\n6. 退出\n);printf(输入你的选择: );scanf(%d, choice);switch (choice) {case 1:addMenuItem();break;case 2:placeOrder();break;case 3:printf(输入要取消的订单ID: );scanf(%d, choice);cancelOrder(choice);break;case 4:printf(通过 (1) 订单ID 或 (2) 电话号码搜索: );scanf(%d, choice);if (choice 1) {int order_id;printf(输入订单ID: );scanf(%d, order_id);searchOrderByID(order_id);} else if (choice 2) {char phone[20];printf(输入电话号码: );scanf(%s, phone);searchOrderByPhone(phone);}break;case 5:statistics();break;case 6:printf(退出系统.\n);break;default:printf(无效选择请重新输入.\n);}} while (choice ! 6);return 0;
}4.2 测试数据和运行结果
测试数据 添加菜单项 输入菜品ID名称和价格: 1 Pizza 15.99
输入菜品ID名称和价格: 2 Burger 9.99下订单 输入顾客的电话、姓名、地址和下单时间: 1234567890 John Doe 123 Main St 2024-06-01 12:00
输入菜品ID0结束: 1
输入菜品ID0结束: 2
输入菜品ID0结束: 0查询订单 输入订单ID: 1取消订单 输入要取消的订单ID: 1统计信息 今日总收入: $25.98
Pizza 被订购了 1 次。
Burger 被订购了 1 次。总结与思考
优点
功能完善系统涵盖了菜单管理、订单处理、订单查询、统计信息等核心功能。数据持久化程序利用文件系统实现了数据的持久化存储。
改进方向
数据完整性系统尚未实现将所有相关信息存储到文件中导致后台查询时需要额外调用计费函数。安全性问题当前系统缺乏密码机制存在安全隐患。用户体验系统界面需要进一步优化提升用户体验。 参考文献
C语言课程设计 第3版C程序设计实训教程 第2版C语言从入门到项目实战
附录代码
#include stdio.h#include stdlib.h#include string.h#define MAX_MENU 100 // 定义菜单项的最大数量#define MAX_ORDER 100 // 定义订单的最大数量// 定义菜单项结构体typedef struct {int id; // 菜品IDchar name[50]; // 菜品名称float price; // 菜品价格} MenuItem;// 定义订单结构体typedef struct {int order_id; // 订单IDchar customer_phone[20]; // 顾客电话char customer_name[50]; // 顾客姓名char address[100]; // 顾客地址char order_time[20]; // 订单时间MenuItem items[MAX_MENU]; // 订单包含的菜品列表int items_count; // 订单中菜品的数量float total_amount; // 订单总金额} Order;// 定义全局变量MenuItem menu[MAX_MENU] {0};Order orders[MAX_ORDER] {0};int menu_count 0;int order_count 0;// 函数声明void addMenuItem(); // 添加菜单项void modifyMenuItem(int id); // 修改菜单项void displayMenu(); // 显示菜单void placeOrder(); // 下订单void cancelOrder(int order_id); // 取消订单void searchOrderByID(int order_id); // 通过订单ID搜索订单void searchOrderByPhone(const char *phone); // 通过电话号码搜索订单void statistics(); // 统计信息void applyDiscount(float *amount); // 应用折扣void printOrder(const Order *order); // 打印订单详情void clearOrder(Order *order); // 清除订单数据// 主函数int main() {int choice;do {printf(\n1. 添加/修改菜单项\n2. 下订单\n3. 取消订单\n4. 搜索订单\n5. 统计信息\n6. 退出\n);printf(输入你的选择: );scanf(%d, choice);switch (choice) {case 1:addMenuItem();break;case 2:placeOrder();break;case 3:printf(输入要取消的订单ID: );scanf(%d, choice);cancelOrder(choice);break;case 4:printf(通过 (1) 订单ID 或 (2) 电话号码搜索: );scanf(%d, choice);if (choice 1) {int order_id;printf(输入订单ID: );scanf(%d, order_id);searchOrderByID(order_id);} else if (choice 2) {char phone[20];printf(输入电话号码: );scanf(%s, phone);searchOrderByPhone(phone);}break;case 5:statistics();break;case 6:printf(退出系统.\n);break;default:printf(无效选择请重新输入.\n);}} while (choice ! 6);return 0;}// 添加菜单项void addMenuItem() {if (menu_count MAX_MENU) {printf(菜单已满无法添加更多菜品。\n);return;}printf(输入菜品ID名称和价格: );scanf(%d %49s %f, menu[menu_count].id, menu[menu_count].name, menu[menu_count].price);menu_count;}// 修改菜单项void modifyMenuItem(int id) {for (int i 0; i menu_count; i) {if (menu[i].id id) {printf(输入新的名称和价格: );scanf(%49s %f, menu[i].name, menu[i].price);return;}}printf(未找到菜品。\n);}// 显示菜单void displayMenu() {printf(菜单:\n);for (int i 0; i menu_count; i) {printf(%d. %s - $%.2f\n, menu[i].id, menu[i].name, menu[i].price);}}// 下订单void placeOrder() {if (order_count MAX_ORDER) {printf(订单数量已达上限无法下新订单。\n);return;}int item_id;float total 0;orders[order_count].items_count 0;displayMenu();printf(输入顾客的电话、姓名、地址和下单时间: );scanf(%19s %49s %99s %19s, orders[order_count].customer_phone, orders[order_count].customer_name, orders[order_count].address, orders[order_count].order_time);while (1) {printf(输入菜品ID0结束: );scanf(%d, item_id);if (item_id 0) break;for (int i 0; i menu_count; i) {if (menu[i].id item_id) {if (orders[order_count].items_count MAX_MENU) {orders[order_count].items[orders[order_count].items_count] menu[i];total menu[i].price;} else {printf(一个订单中不能添加超过 %d 个菜品。\n, MAX_MENU);break;}}}}applyDiscount(total);orders[order_count].total_amount total;orders[order_count].order_id order_count 1; // 简单的订单ID生成逻辑printf(订单成功创建。订单ID: %d\n, orders[order_count].order_id);order_count;}// 取消订单void cancelOrder(int order_id) {for (int i 0; i order_count; i) {if (orders[i].order_id order_id) {printf(订单 %d 已取消。\n, order_id);clearOrder(orders[i]); // 清除订单数据for (int j i; j order_count - 1; j) {memcpy(orders[j], orders[j 1], sizeof(Order));}order_count--;return;}}printf(未找到订单。\n);}// 通过订单ID搜索订单void searchOrderByID(int order_id) {int found 0; // 用于标记是否找到订单for (int i 0; i order_count; i) {if (orders[i].order_id order_id) {printOrder(orders[i]);found 1; // 标记找到订单break;}}if (!found) {printf(没有找到订单。\n);}}// 通过电话号码搜索订单void searchOrderByPhone(const char *phone) {int found 0; // 用于标记是否找到订单for (int i 0; i order_count; i) {if (strcmp(orders[i].customer_phone, phone) 0) {printOrder(orders[i]);found 1; // 标记找到订单}}if (!found) {printf(没有找到该电话号码的订单。\n);}}// 统计信息void statistics() {// 示例统计信息 - 可以根据实际需求扩展int order_count_per_item[MAX_MENU] {0};float total_revenue 0;for (int i 0; i order_count; i) {total_revenue orders[i].total_amount;for (int j 0; j orders[i].items_count; j) {int item_id orders[i].items[j].id;order_count_per_item[item_id];}}printf(今日总收入: %.2f\n, total_revenue);for (int i 0; i menu_count; i) {if (order_count_per_item[menu[i].id] 0) {printf(%s 被订购了 %d 次。\n, menu[i].name, order_count_per_item[menu[i].id]);}}}// 应用折扣void applyDiscount(float *amount) {if (*amount 300) *amount * 0.85f;else if (*amount 200) *amount * 0.9f;else if (*amount 100) *amount * 0.95f;}// 打印订单详情void printOrder(const Order *order) {if (order NULL) {printf(订单为空。\n);return;}// 打印订单头部信息printf(订单ID: %d\n, order-order_id);printf(顾客电话: %s\n, order-customer_phone);printf(顾客姓名: %s\n, order-customer_name);printf(地址: %s\n, order-address);printf(下单时间: %s\n, order-order_time);// 检查是否有订单项if (order-items_count 0) {printf(该订单没有包含任何菜品。\n);} else {printf(订单项:\n);for (int i 0; i order-items_count; i) {// 打印每个订单项的名称和价格printf( - %s ($%.2f)\n, order-items[i].name, order-items[i].price);}}// 打印订单总金额printf(总金额: $%.2f\n, order-total_amount);}// 清除订单数据void clearOrder(Order *order) {memset(order, 0, sizeof(Order));}嗨我是LucianaiB。如果你觉得我的分享有价值不妨通过以下方式表达你的支持 点赞来表达你的喜爱 关注以获取我的最新消息 评论与我交流你的见解。我会继续努力为你带来更多精彩和实用的内容。 点击这里LucianaiB 获取最新动态⚡️ 让信息传递更加迅速。