我正在研究餐厅 POS (Samba pos) 的源代码,并且在打印票时如何格式化输出有 2 个问题。
下面的代码收集产品的标签,制作它们的标题,并对标题下的产品进行排序。
问题1:我对标题的顺序没有影响,所以输出看起来像:
主菜
牛排 22,50
饮料
可乐 2,00
开胃菜
汤 3,50
正确的顺序应该是 Starters --> Main course --> Desserts --> Drinks 如果我可以按字母顺序对标题进行排序,我会得到很大帮助。我会将组标签更改为:1 Starters、2 Maincourse 等
问题2:
产品在程序的早期阶段进行分组。由于程序员的选择,分组对我来说效果不佳。我的票上有一个很长的清单,例如:
1 x 可乐 2,00
2 x 可乐 4,00
有没有办法在这里对产品进行分组,以便我拥有:
3 x 可乐 6,00
这是一段代码:
if (template.GroupTemplate.Contains("{PRODUCT TAG}"))
{
var groups = lines.GroupBy(GetMenuItemTag);
var result = new List<string>();
foreach (var grp in groups)
{
var grpSep = template.GroupTemplate.Replace("{PRODUCT TAG}", grp.Key);
result.AddRange(grpSep.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
result.AddRange(grp.SelectMany(x => FormatLines(template, x).Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)));
}
return result;
}
我必须排序var groups
。问题是文本 {PRODUCT TAG} 在循环中被替换为grp.Key
,因此在循环之前排序var groups
可能不起作用(我需要一个额外的循环吗?)。
将产品添加到标题中是在循环的第 3 行完成的。可以在这里对项目进行分组吗?
我已经在这里转储了整个文件:http: //pastebin.com/qFr5wN28
编辑:
这段代码用于在票据打印机上生成票据。一张票看起来像这样:
BON
Datum: 2-2-2013
Tijd: 18:35
Tafel nr.: B22
Bon nr: 2
------------------------------------------
Breakfast
- 1 Toast and Jam 1,50
- 1 Egg, Bacon Cheese 3,99
- 1 Toasted Bagel Cheese 2,25
- 1 Toasted Bagel Jam 1,50
- 2 Toast and Jam 1,50
- 1 Egg, Bacon Cheese 3,99
- 1 Bacon and Cheese 3,49
- 1 Bacon and Tomato 3,49
Deserts
- 1 Rice Pudding 2,25
- 1 Fruit Danish 1,50
Main course
- 1 Chicken Garden Wrap 5,25
- 1 Chicken Caesar Wrap 5,75
- 1 Canadian Wrap 6,99
- 1 Chicken Greek Wrap 6,99
标题是我可以添加到产品中的标签。有几处错误:文章(沙漠、主菜)上方的标题随机出现。我想对它们进行排序。并非所有文章都被分组,例如“吐司和果酱”。如果我可以对标题进行排序,我会稍微更改一下标签。所需的输出将是这样的:
------------------------------------------
1 Breakfast
- 3 Toast and Jam 1,50
- 2 Egg, Bacon Cheese 3,99
- 1 Toasted Bagel Cheese 2,25
- 1 Toasted Bagel Jam 1,50
- 1 Bacon and Cheese 3,49
- 1 Bacon and Tomato 3,49
2 Main course
- 1 Chicken Garden Wrap 5,25
- 1 Chicken Caesar Wrap 5,75
- 1 Canadian Wrap 6,99
- 1 Chicken Greek Wrap 6,99
3 Deserts
- 1 Rice Pudding 2,25
- 1 Fruit Danish 1,50