点菜吧——随便点 C#生成套餐

前言

一到食堂发现有多种选择,但是有一个固定的套路,只能是一个荤,二个小荤,菜品数量也不少,任君选择,如果是一个选择困难症,就有点烦了,所以出品这个自动生成套餐软件。各位老板可以选菜了,还可以拆除一些不想要的菜,不勾选的菜就不会被选择。

一、效果展示

二、代码实现

1、WPF前台代码

<StackPanel x:Name="OptionalMenu" Orientation="Horizontal" Grid.RowSpan="2"><GroupBox Header="组别1" x:Name="group1" Margin="0,5,50,0" FontSize="20"><ScrollViewer VerticalScrollBarVisibility="Auto" ><StackPanel x:Name="groupPanel1"  /></ScrollViewer></GroupBox><GroupBox Header="组别2" x:Name="group2" Margin="0,5,50,0" FontSize="20"><ScrollViewer x:Name="scrList" Margin="0" VerticalScrollBarVisibility="Auto"  ><StackPanel x:Name="groupPanel2"></StackPanel></ScrollViewer></GroupBox>
</StackPanel><Button Grid.Column="1" Height="30" Width="100" Click="Button_Click" Background="Cyan" FontSize="20"Foreground="ForestGreen">选择</Button>
<RichTextBox Grid.Column="1" Grid.Row="1" Background="BlanchedAlmond" Name="logInfo" FontSize="18"></RichTextBox>

2、后台业务

1)、初始化数据

主要是从XML加载菜单,这个XML后期可以根据实际情况进行调整。

public void InitToolInfo(string filename)
{XmlDocument doc = new XmlDocument();doc.Load(filename);XmlNode xn = doc.SelectSingleNode("Mean");//要读取xml子目录路径XmlNodeList xnl = xn.ChildNodes;foreach (var item in xnl){string sts = "";XmlElement xe = (XmlElement)item;sts = xe.GetAttribute("id");XmlNodeList xnl0 = xe.ChildNodes;List<MeanItem> newList = new List<MeanItem>();for (int i = 0; i < xnl0.Count; i++){string info = xnl0.Item(i).InnerText;MeanItem data = new MeanItem(info,sts);newList.Add(data);}mainMeanColls[sts] = newList;}
}
2)、绑定控件与数据源
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{keys = mainMeanColls.Keys.ToArray();if (keys.Length!=2){MessageBox.Show("菜单加载异常!");return;}group1.Header = keys[0];foreach (var item in mainMeanColls[keys[0]]){CheckBox checkBox = new CheckBox();checkBox.Style =(Style) this.FindResource("ckbStyle");checkBox.Content = item.Name;LinkContrToObj(checkBox, item);groupPanel1.Children.Add(checkBox);}group2.Header = keys[1];foreach (var item in mainMeanColls[keys[1]]){CheckBox checkBox = new CheckBox();checkBox.Style = (Style)this.FindResource("ckbStyle");checkBox.Content = item.Name;LinkContrToObj(checkBox, item);groupPanel2.Children.Add(checkBox);}
}
3)、筛选框与源关联
 private void LinkContrToObj(CheckBox box,MeanItem obj){var myBinding = new Binding("IsHave"){Source = obj};// Bind the data source to the TextBox control's Text dependency propertybox.SetBinding(CheckBox.IsCheckedProperty, myBinding);}
4)、选菜逻辑

当然有心的同学可能会发现一个问题,这个选择一个菜品与上一个不重复的逻辑有点哪啥了 ,可以考虑先剔除上菜单中的一个菜品,再去选择这样就发型Whie循环了。

 private void GetResult(){string res1 = ExecuChoose(mainMeanColls[keys[0]].Where(t => t.IsHave == true).ToList(),1);string res2 = ExecuChoose(mainMeanColls[keys[1]].Where(t => t.IsHave == true).ToList(),2);string res3 = ExecuChoose(mainMeanColls[keys[1]].Where(t => t.IsHave == true).ToList(),3);while (res2==res3){res3 = ExecuChoose(mainMeanColls[keys[1]].Where(t => t.IsHave == true).ToList(), 3);}string res4 = ExecuChoose(mainMeanColls[keys[1]].Where(t => t.IsHave == true).ToList(),4);while (res4 == res2||res4==res3){res4 = ExecuChoose(mainMeanColls[keys[1]].Where(t => t.IsHave == true).ToList(), 4);}OutInfo($"结果>>:{keys[0]}-{res1};{keys[1]}-{res2},{res3},{res4}");}private string ExecuChoose(List<MeanItem> items,int num){Random random = new Random(int.Parse(DateTime.Now.ToString("HHmmssfff"))+num);int a = random.Next(1, items.Count);return items[a - 1].Name;}
5)、数据结构
/// <summary>/// 菜单节点项/// </summary>internal class MeanItem : INotifyPropertyChanged{public string Name { get; set; }private bool isHave;public bool IsHave{get => isHave;set{if (value == isHave){return;}isHave = value;OnPropertyChanged("IsHave");}}public string GroupName { get; set; }public MeanItem(){IsHave = true;}public MeanItem(string name, string groupName) : this(){this.Name = name;this.GroupName = groupName;}public MeanItem(string name, bool isHave, string groupName): this(name, groupName){this.IsHave = isHave;}public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged(string propertyName){if (PropertyChanged != null){PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));}}}
6)、XML菜单配置
<?xml version="1.0" encoding="utf-8" ?><Mean><group id="大荤"><item >土豆牛肉</item><item >红烧鸭块</item><item >梅干菜肉</item><item >狮子头</item><item >蛋饺</item><item >凉拌猪头肉</item><item >口水鸡</item><item >炒猪肝</item><item >回锅肉</item><item >尖椒鸡丁</item><item >青椒猪肚</item><item >排骨</item><item >虾</item><item >香肠</item></group><group id="小荤"><item >凉拌豆皮</item><item >凉拌海带</item><item >皮蛋豆腐</item><item >凉拌粉皮</item><item >凉拌黄瓜</item><item >雪菜蚕豆</item><item >红烧豆腐</item><item >毛豆肉丝</item><item >花菜</item><item >竹笋肉丝</item><item >豆芽粉丝</item><item >海鲜菇肉丝</item><item >西葫芦肉丝</item><item >土豆丝</item><item >青菜</item><item >尖椒炒蛋</item><item >芹菜肉丝</item><item >韭菜炒蛋</item><item >包菜</item><item >番茄炒蛋</item><item >凉拌木耳</item><item >青椒香干</item><item >青菜</item><item >尖椒炒蛋</item><item >芹菜肉丝</item><item >韭菜炒蛋</item><item >包菜</item><item >番茄炒蛋</item><item >凉拌木耳</item><item >青椒香干</item></group>
</Mean>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/387627.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…

在手机查看笔记本电脑上的便签 笔记本电脑和手机共享便签方法

在这个信息时代&#xff0c;笔记本电脑已成为我们工作和学习中不可或缺的工具。我经常在笔记本上记录各种便签&#xff0c;无论是工作中的待办事项&#xff0c;还是生活中的小提醒&#xff0c;都依赖于这些小小的便签。它们轻便、灵活&#xff0c;可以随时随地提醒我接下来要做…

TongHttpServer 简介

1. 概述 随着网络技术的飞速发展,高并发大用户场景越来越普遍,单一应用服务节点已经不能满足并发需求,为了提高整个系统可靠性,扩展性,吞吐率,通常将多个应用服务器通过硬负载/软负载组成集群,负载均衡器根据不同负载算法将请求分发到各个应用服务器节点。 Tong…

花几千上万学习Java,真没必要!(三十六)

1、File类&#xff1a; 测试代码1&#xff1a; package filetest.com; import java.io.File; import java.io.IOException; public class FileOperations { public static void main(String[] args) { // 创建新文件File file new File("example.txt"); tr…

Prometheus+Grafana+Alertmanager监控告警

PrometheusGrafanaAlertmanager告警 Alertmanager开源地址&#xff1a;github.com/prometheus Prometheus是一款基于时序数据库的开源监控告警系统&#xff0c;它是SoundCloud公司开源的&#xff0c;SoundCloud的服务架构是微服务架构&#xff0c;他们开发了很多微服务&#xf…

TCP为什么需要四次挥手?

tcp为什么需要四次挥手&#xff1f; 答案有两个&#xff1a; 1.将发送fin包的权限交给被动断开方的应用层去处理&#xff0c;也就是让程序员处理 2.接第一个答案&#xff0c;应用层有了发送fin的权限&#xff0c;可以在发送fin前继续向对端发送消息 为了搞清楚这个问题&…

前端开发知识-vue

大括号里边放键值对&#xff0c;即是一个对象。 一、vue可以简化前端javascript的操作。 主要特点是可以实现视图、数据的双向绑定。 使用vue主要分为三个步骤&#xff1a; 1.javascript中引入vue.js 可以src中可以是vue的网址&#xff0c;也可以是本地下载。 2.在javasc…

网络爬虫必备工具:代理IP科普指南

文章目录 1. 网络爬虫简介1.1 什么是网络爬虫&#xff1f;1.2 网络爬虫的应用领域1.3 网络爬虫面临的主要挑战 2. 代理IP&#xff1a;爬虫的得力助手2.1 代理IP的定义和工作原理2.2 爬虫使用代理IP的必要性 3. 代理IP的类型及其在爬虫中的应用3.1 动态住宅代理3.2 动态数据中心…

数据挖掘-数据预处理

来自&#x1f96c;&#x1f436;程序员 Truraly | 田园 的博客&#xff0c;最新文章首发于&#xff1a;田园幻想乡 | 原文链接 | github &#xff08;欢迎关注&#xff09; 文章目录 3.3.1 数据的中心趋势平均数和加权平均数众数&#xff0c;中位数和均值描述数据的离散程度 &a…

【MySQL】用户管理连接池原理{数据库权限/连接池/mysql访问逻辑}

文章目录 1.普通用户的引入用户创建用户删除用户修改用户密码 2.数据库的权限给用户授权回收权限实操过程 3.简略介绍mysql连接池3.一个用户注册/登录/使用网页版mysql逻辑 1.普通用户的引入 用户 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中 mysql> use…

uniapp微信小程序本地和真机调试文件图片上传成功但体验版不成功

文章目录 导文是因为要添加服务器域名&#xff01; 导文 uniapp微信小程序本地和真机调试文件图片上传成功但体验版不成功 uniapp微信小程序体验版上传图片不成功 微信小程序本地和真机调试文件图片上传成功但体验版不成功 是因为要添加服务器域名&#xff01; 先看一下 你小程…

解决jenkins配置extendreport不展示样式

下载插件&#xff1a;Groovy 、 HTML Publisher plugin 配置&#xff1a; 1&#xff09;Post Steps &#xff1a; 增加 Execute system Groovy script &#xff0c; 内容&#xff1a; System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "&qu…

C++ | string

前言 本篇博客讲解c中的string类的使用(常用接口) &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee:普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389…

Magento2 常用命令以及技巧

1.Magento 命令行工具 Magento2 带有一个命令行工具&#xff0c;在windows下&#xff0c;用管理员权限打开MS-DOS命令提示符&#xff0c;然后cd到Magento根目录&#xff0c;运行下面命令&#xff0c;就可 以看到这个强大的命令行工具的命令清单&#xff1a; php bin/magentoU…

【C++】C++11中R字符串的作用

在 C11 中添加了定义原始字符串的字面量 1.定义和基本使用 定义方式为&#xff1a; R"xxx(原始字符串)xxx"其中 () 两边的字符串可以省略&#xff0c;R只会处理括号中的字符串。 原始字面量 R 可以直接表示字符串的实际含义&#xff0c;而不需要额外对字符串做转义…

半球房屋:高性价比的创新建筑选择—轻空间

在现代建筑领域&#xff0c;半球房屋因其独特的设计和高性价比受到广泛关注。这种建筑形式不仅在外观上引人注目&#xff0c;更在功能和经济效益上表现出色。以下将介绍半球房屋的主要优势&#xff0c;特别是其在成本和效益方面的突出表现。 降低建造成本&#xff0c;节约资源 …

资金管理平台 -SAP创建凭证测试程序及增强!

文章目录 主要程序创建程序程序 代码解析变量定义抬头和项目初始值表头赋值调用BAPI其他的子例程 核心内表增强部分LFACIF5D程序FI_DOCUMENT_CHECK完整程序 BADI增强 主要程序 创建程序 程序 &---------------------------------------------------------------------* *…

Matplotlib面积图绘制秘籍:让你的数据‘膨胀’起来,但不吹泡泡哦!

1. 引言 嘿&#xff0c;数据迷们&#xff01;想不想让你的数据‘活’起来&#xff0c;跳一曲色彩斑斓的面积舞&#xff1f;Matplotlib面积图&#xff0c;不只是数字的堆砌&#xff0c;它是故事的讲述者&#xff0c;让复杂数据变得一目了然&#xff0c;还带点小幽默。快来一探究…

鸿蒙应用框架开发【首选项】 本地数据与文件

首选项 简介 本示例使用ohos.data.preferences接口&#xff0c;展示了使用首选项持久化存储数据的功能。 效果预览 使用说明 1.点击顶部titleBar的右侧切换按钮&#xff0c;弹出主题菜单&#xff0c;选择任意主题则切换相应的主题界面&#xff1b; 2.退出应用再重新进入&a…