C# 编程练习:ArrayList 背包管理类(完整实现物品购买、卖出、显示功能与金钱变化逻辑)

一、任务:实现ArrayList 背包管理类

实现目标:

(1)完整实现物品购买

(2)卖出

(3)显示功能

(4)金钱变化逻辑


二、核心类设计

1. Item物品类

class Item
{
    public int index;    // 物品唯一标识
    public int price;    // 物品单价
    public int num;      // 物品数量
    public string name;  // 物品名称
    
    // 购买构造函数
    public Item(int index, int price, int num, string name)
    {
        this.index = index;
        this.price = price;
        this.num = num;
        this.name = name;
    }
    
    // 出售构造函数
    public Item(int index, int num)
    {
        this.index = index;
        this.num = num;
    }
}

2. BagManager背包管理类

class BagManager
{
    private int money;           // 背包金币
    private ArrayList items;     // 物品列表
    
    public BagManager(int money) // 构造函数
    {
        this.money = money;
        items = new ArrayList();
    }
}

三、核心功能实现

1. 购买功能 Buy()

public void Buy(Item item)
{
    int cost = item.price * item.num;
    
    if (cost > money)
    {
        Console.WriteLine("钱不够");
        return;
    }
    
    money -= cost;
    // 遍历查找是否已有该物品
    foreach (Item existingItem in items)
    {
        if (existingItem.index == item.index)
        {
            existingItem.num += item.num; // 叠加数量
            return;
        }
    }
    items.Add(item); // 新物品添加
}

2. 出售功能 Sell()

public void Sell(Item item)
{
    foreach (Item existingItem in items)
    {
        if (existingItem.index == item.index)
        {
            int sellNum = Math.Min(item.num, existingItem.num);
            int income = (int)(sellNum * existingItem.price * 0.8f);
            
            money += income;
            existingItem.num -= sellNum;
            
            if (existingItem.num <= 0)
                items.Remove(existingItem);
            
            return;
        }
    }
    Console.WriteLine("物品不存在");
}

3. 按序号出售(重载)

public void Sell(int index, int num)
{
    Sell(new Item(index, num)); // 重用Sell逻辑
}

四、完整实现代码

using System;
using System.Collections;
using System.Diagnostics;
using System.Xml.Linq;

namespace 进阶测试
{
    class BagManager
    {
        private int money;//背包中剩余的钱
        private ArrayList items;//物品的数组列表

        /// <summary>
        /// 购买函数
        /// </summary>
        /// <param name="item">购买的商品信息</param>
        public void Buy(Item item)
        {
            int paymoney = item.price * item.num;//需要支付的钱
            //判断钱够不够
            if (paymoney > money)//不够,直接打印买不起,退出
            {
                Console.WriteLine("背包钱不够,买不起");
            }
            else//够,则买
            {
                money -= paymoney;
                Console.WriteLine("购买成功,剩余的钱为{0}", money);
                for (int i = 0; i < items.Count; i++)
                {
                    //如果已经有了需要叠加商品
                    if ((items[i] as Item).index == item.index)
                    {
                        (items[i] as Item).num += item.num;
                        return;
                    }
                }
                //如果没有,则需要添加到数组列表中
                items.Add(item);
            }
        }

        /// <summary>
        /// 显示函数
        /// </summary>
        public void Show()
        {
            for (int i = 0; i < items.Count; i++)
            {
                Console.WriteLine("物品:{0},数量为:{1}", (items[i] as Item).name, (items[i] as Item).num);
            }
            Console.WriteLine("**********************************");
        }

        /// <summary>
        /// 根据物品出售物品函数
        /// </summary>
        /// <param name="item"></param>
        public void Sell(Item item)
        {
            //首先得遍历判断是否存在该item物品
            for(int i = 0;i<items.Count;i++)
            {   //存在则进行出售数量判断
                if ((items[i] as Item).index==item.index)
                {
                    int num = 0;//出售的物品数量
                    int sellmoney = 0;//出售的钱
                    //出售数量小于背包中的数量,正常出售
                    if ((items[i] as Item).num >= item.num)
                    {
                        num = item.num;
                        (items[i] as Item).num -= num;
                    }
                    //出售数量大于背包中的数量,出售背包中所有该类物品,并移除该物品
                    else
                    {
                        num = (items[i] as Item).num;
                        items.RemoveAt(i);
                    }
                    sellmoney = (int)(item.price * num * 0.8f);
                    money += sellmoney;
                    Console.WriteLine("出售成功,现在余额为{0}",money);
                    return;
                }
            }
            //不存在则打印不存在该物品
            Console.WriteLine("背包中不存在该物品");
        }

        /// <summary>
        /// 根据序号出售函数
        /// </summary>
        /// <param name="index"></param>
        public void Sell(int index,int num)
        {
            Item item=new Item(index,num);
            Sell(item);
        }



        public BagManager(int money)
        {
            this.money = money;
            items = new ArrayList();
        }

        private BagManager()//设置为私有的:可以保证外部不会调用,避免出现错误
        {
            items = new ArrayList();
        }
    }
    /// <summary>
    /// 物品类
    /// </summary>
    /// <param name="index">物品类别的编号</param>
    /// <param name="price">物品的价格</param>
    /// <param name="num">第一次购买作为物品的数量保存到列表,后续作为购买或者卖出的数量</param>
    /// <param name="name">物品的名称</param>
    class Item
    {
        public int index;
        public int price;
        public int num;
        public string name;
        
        public Item(int index,int price,int num,string name)//物品购买的构造函数
        {
            this.index = index;
            this.price = price;
            this.num = num;
            this.name = name;
        }

        public Item(int index,int num)//物品出售的构造函数
        {
            this.index = index;
            this.num = num;
        }
    }

    class Program
    {
        static void Main()
        {
            Item item1 = new Item(1, 25, 10, "血量药剂");
            Item item2 = new Item(2, 35, 10, "体力药剂");
            Item item3 = new Item(1, 25, 5, "血量药剂");
            Item item4 = new Item(2, 35, 5, "体力药剂");
            Item item5 = new Item(3, 35, 5, "体力药剂");

            BagManager bagManager = new BagManager(1000);


            bagManager.Buy(item1);
            bagManager.Show();
            bagManager.Buy(item2);
            bagManager.Show();

            bagManager.Sell(item3);
            bagManager.Show();
            bagManager.Sell(item4);
            bagManager.Show();
            bagManager.Sell(item5);
            bagManager.Show();
            bagManager.Sell(item1.index, 2);
            bagManager.Show();
        }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值