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

如何正确创建C#的Country与City类并建立关联,实现菜单管理功能?

C#国家城市菜单管理项目实现方案

核心类定义

Country类

通过静态字段维护自增编号,保证每个国家的Code唯一且连续:

public class Country
{
    private static int _nextCode = 1;
    public int Code { get; }
    public string Name { get; set; }

    public Country(string name)
    {
        Code = _nextCode++;
        Name = name;
    }
}

City类

同样实现自增Code,新增CountryCode字段关联对应国家,确保城市与国家的关联有效性:

public class City
{
    private static int _nextCode = 1;
    public int Code { get; }
    public string Name { get; set; }
    public int CountryCode { get; }

    public City(string name, int countryCode)
    {
        Code = _nextCode++;
        Name = name;
        CountryCode = countryCode;
    }
}

核心功能函数

使用静态列表存储数据,所有菜单操作封装为独立函数,逻辑解耦便于维护:

// 全局数据存储容器
private static List<Country> _countries = new List<Country>();
private static List<City> _cities = new List<City>();

// 创建国家
private static void CreateCountry()
{
    Console.Write("请输入国家名称:");
    string name = Console.ReadLine().Trim();
    if (string.IsNullOrEmpty(name))
    {
        Console.WriteLine("国家名称不能为空!");
        return;
    }
    _countries.Add(new Country(name));
    Console.WriteLine($"国家「{name}」创建成功,编号:{_countries.Last().Code}");
}

// 创建城市
private static void CreateCity()
{
    if (_countries.Count == 0)
    {
        Console.WriteLine("请先创建国家!");
        return;
    }
    // 显示现有国家列表供选择
    Console.WriteLine("现有国家列表:");
    foreach (var country in _countries)
    {
        Console.WriteLine($"编号:{country.Code},名称:{country.Name}");
    }
    Console.Write("请输入关联的国家编号:");
    if (!int.TryParse(Console.ReadLine(), out int countryCode) || !_countries.Any(c => c.Code == countryCode))
    {
        Console.WriteLine("无效的国家编号!");
        return;
    }
    Console.Write("请输入城市名称:");
    string name = Console.ReadLine().Trim();
    if (string.IsNullOrEmpty(name))
    {
        Console.WriteLine("城市名称不能为空!");
        return;
    }
    _cities.Add(new City(name, countryCode));
    Console.WriteLine($"城市「{name}」创建成功,编号:{_cities.Last().Code}");
}

// 按国家显示城市
private static void DisplayCitiesByCountry()
{
    if (_countries.Count == 0)
    {
        Console.WriteLine("暂无国家数据!");
        return;
    }
    Console.Write("请输入要查询的国家编号:");
    if (!int.TryParse(Console.ReadLine(), out int countryCode) || !_countries.Any(c => c.Code == countryCode))
    {
        Console.WriteLine("无效的国家编号!");
        return;
    }
    var targetCountry = _countries.First(c => c.Code == countryCode);
    var countryCities = _cities.Where(c => c.CountryCode == countryCode).ToList();
    Console.WriteLine($"\n国家「{targetCountry.Name}」的城市列表:");
    if (countryCities.Count == 0)
    {
        Console.WriteLine("暂无城市数据");
    }
    else
    {
        foreach (var city in countryCities)
        {
            Console.WriteLine($"城市编号:{city.Code},名称:{city.Name}");
        }
    }
}

// 显示操作菜单
private static void ShowMenu()
{
    Console.WriteLine("\n===== 国家城市管理系统 =====");
    Console.WriteLine("1. 创建国家");
    Console.WriteLine("2. 创建城市");
    Console.WriteLine("3. 按国家显示城市");
    Console.WriteLine("4. 退出");
    Console.Write("请选择操作:");
}

主程序逻辑

在Main函数中循环处理用户菜单选择,完成交互流程:

static void Main(string[] args)
{
    while (true)
    {
        ShowMenu();
        if (!int.TryParse(Console.ReadLine(), out int choice))
        {
            Console.WriteLine("请输入有效的数字选项!");
            continue;
        }
        switch (choice)
        {
            case 1:
                CreateCountry();
                break;
            case 2:
                CreateCity();
                break;
            case 3:
                DisplayCitiesByCountry();
                break;
            case 4:
                Console.WriteLine("系统退出");
                return;
            default:
                Console.WriteLine("无效的选项,请重新选择!");
                break;
        }
        // 暂停等待用户查看操作结果
        Console.WriteLine("\n按任意键继续...");
        Console.ReadKey();
    }
}

实现说明

  1. 自增Code机制:通过类的静态字段_nextCode维护当前编号,每次创建实例时自动递增,确保编号唯一且连续。
  2. 数据有效性校验:创建城市时先检查国家是否存在,验证输入的国家编号有效性;所有名称输入做非空校验,避免无效数据。
  3. 功能模块化:每个菜单操作对应独立函数,逻辑清晰,后续可快速扩展新功能。
  4. 用户交互优化:操作后给出明确结果提示,查询时显示对应国家名称,错误操作给出清晰指引。

内容的提问来源于stack exchange,提问作者Ron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:31:05