技术需求:显示特定类型变量及为WriteFoodMenu添加筛选菜单
嘿,我来帮你搞定这两个需求!基于你提到的枚举类型Venues,我先补全相关的类型定义,然后一步步实现功能:
1. 补全核心类型定义
首先我们完善记录类型(你提到的Mfo...应该是存储食物信息的记录),再用动态数组来管理所有食物项:
type Venues = (cafe, restaurant, bakery, milkbar, fastfood); TFoodItem = record foodtype: string; // 食物类型 chef: string; // 厨师名称 venue: Venues; // 所属场地 end; TFoodList = array of TFoodItem; // 动态数组存储所有食物项
2. 实现「显示特定场地所有变量」的功能
写一个专用过程,接收食物列表和目标场地,遍历筛选并输出符合条件的项:
procedure ShowFoodByVenue(const FoodList: TFoodList; TargetVenue: Venues); var i: Integer; VenueStr: string; begin // 将枚举值转换为易读的字符串 case TargetVenue of cafe: VenueStr := 'Cafe'; restaurant: VenueStr := 'Restaurant'; bakery: VenueStr := 'Bakery'; milkbar: VenueStr := 'Milkbar'; fastfood: VenueStr := 'Fast Food'; end; Writeln('=== 场地: ', VenueStr, ' 的食物项 ==='); for i := 0 to High(FoodList) do begin if FoodList[i].venue = TargetVenue then Writeln(FoodList[i].foodtype, ' - ', FoodList[i].chef, ' - ', VenueStr); end; Writeln; // 空行分隔,提升可读性 end;
这个菜单支持用户选择「显示全部食物项」或「按场地筛选显示」,完整逻辑如下:
procedure WriteFoodMenu(const FoodList: TFoodList); var Choice: Integer; TargetVenue: Venues; VenueStr: string; i: Integer; begin repeat // 显示主菜单 Writeln('=== 食物菜单选择 ==='); Writeln('1. 显示所有可用食物项'); Writeln('2. 按场地筛选显示'); Writeln('3. 退出'); Writeln('请输入你的选择 (1-3): '); Readln(Choice); case Choice of 1: // 显示全部食物项 begin Writeln('=== 所有食物项 ==='); for i := 0 to High(FoodList) do begin // 转换当前项的场地为字符串 case FoodList[i].venue of cafe: VenueStr := 'Cafe'; restaurant: VenueStr := 'Restaurant'; bakery: VenueStr := 'Bakery'; milkbar: VenueStr := 'Milkbar'; fastfood: VenueStr := 'Fast Food'; end; Writeln(FoodList[i].foodtype, ' - ', FoodList[i].chef, ' - ', VenueStr); end; Writeln; end; 2: // 按场地筛选 begin Writeln('=== 选择场地 ==='); Writeln('1. Cafe'); Writeln('2. Restaurant'); Writeln('3. Bakery'); Writeln('4. Milkbar'); Writeln('5. Fast Food'); Writeln('请输入场地编号 (1-5): '); Readln(Choice); // 映射用户选择到枚举类型 case Choice of 1: TargetVenue := cafe; 2: TargetVenue := restaurant; 3: TargetVenue := bakery; 4: TargetVenue := milkbar; 5: TargetVenue := fastfood; else Writeln('无效选择,请重新输入!'); Continue; // 回到主菜单循环 end; // 调用之前写的筛选过程 ShowFoodByVenue(FoodList, TargetVenue); end; 3: // 退出菜单 Writeln('退出菜单...'); else Writeln('无效选择,请输入1-3之间的数字!'); end; until Choice = 3; // 用户选择退出时结束循环 end;
测试示例
你可以用下面的代码初始化测试数据,然后调用菜单功能:
var TestFoods: TFoodList; begin // 初始化测试食物数据 SetLength(TestFoods, 5); TestFoods[0] := (foodtype: 'Croissant'; chef: 'Jean'; venue: bakery); TestFoods[1] := (foodtype: 'Latte'; chef: 'Lisa'; venue: cafe); TestFoods[2] := (foodtype: 'Burger'; chef: 'Mike'; venue: fastfood); TestFoods[3] := (foodtype: 'Steak'; chef: 'John'; venue: restaurant); TestFoods[4] := (foodtype: 'Milkshake'; chef: 'Amy'; venue: milkbar); // 启动交互式菜单 WriteFoodMenu(TestFoods); end.
这样当用户选择Bakery时,就只会输出场地为bakery的食物项啦~
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

