You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术需求:显示特定类型变量及为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;
3. 实现WriteFoodMenu交互式菜单

这个菜单支持用户选择「显示全部食物项」或「按场地筛选显示」,完整逻辑如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:05:37