更新数量并将数组保存到文本文件

时间:2018-11-23 23:10:13

标签: c#

比方说,给出了可用物品数量的数组。

int [,] AvailableQuantity= new int[3,4]
{
    { 4, 5, 2, 3 },
    { 2, 7, 3, 4 },
    { 9, 3, 5, 6 }
};

如果用户购买了3件商品[0,0],则必须使用以下可用的当前数量更新AvailableQuantity数组:

{
    { 1, 5, 2, 3 },
    { 2, 7, 3, 4 },
    { 9, 3, 5, 6 }
};

同样,如果购买了2件商品,例如[0,1],则数组应如下所示:

{
    { 1, 3, 2, 3 },
    { 2, 7, 3, 4 },
    { 9, 3, 5, 6 }
};

每次购买和更新任何物品时,必须更新数量。然后,当应用程序关闭时,必须将数组保存在文本文件中,如下所示。

1 3 2 3
2 7 3 4
9 3 5 6

如何执行?

2 个答案:

答案 0 :(得分:3)

答案似乎太明显了,所以我可能会遗漏一些东西。如果用户选择以1,3的价格购买商品,则可以相应地以1,3的数量减少数量。这就是为什么有两个数组,所以可以重新使用索引的原因-还是不可以?

但是这种设计似乎也有缺陷。通常,您不会像这样放置两个并行数组。取而代之的是,创建一个自定义类“产品”,其中包含价格,数量,名称以及以后可能需要使用的所有其他内容的字段(例如用于显示它的名称)。然后,您创建该Product[] Products = new Products[10];的数组。但是,您可能仍在学习如何编写课程之前。

关于将整个内容保存到文本文件中:XML和CSV是此类简单数据的常用格式。对于少量数据,CSV甚至可能更具可读性。但这通常是一个单独的问题。

答案 1 :(得分:0)

using System;
using System.IO;
using System.Text;

class Program

{
    /// <summary>
    /// Static Multidimensional Array what have products quantity.
    /// </summary>
    static int [,] AvailableQuantity = new int[3,4]
    {
        { 4, 5, 2, 3 },
        { 2, 7, 3, 4 },
        { 9, 3, 5, 6 }
    };

    /// <summary>
    /// Main Console Call.
    /// </summary>
    /// <param name="args"></param>
    public static void Main(string[] args)
    {

        string path = Environment.CurrentDirectory + "\\file.txt";

        // TEST
        Purchase_Item(3, 0, 0);
        Purchase_Item(2, 0, 1);

        Save_File(path, Generate_String_File());

        System.Diagnostics.Process.Start("notepad.exe", path);

        Console.Write("Press any key to continue . . . ");
        Console.ReadKey(true);
    }

    /// <summary>
    /// Edit static int Multidimensional Array. (M.A)
    /// </summary>
    /// <param name="cuantity">The cuantity of the item what has ben purchased.</param>
    /// <param name="row">Row that you want to edit in the M.A.</param>
    /// <param name="column">Column that you want to edit in the M.A.</param>
    private static void Purchase_Item(int cuantity, int row, int column){

        try {

            if(row > AvailableQuantity.GetLength(0) || row < 0){
                Console.WriteLine("Row - Out of Range");
                return;
            }

            if(column > AvailableQuantity.GetLength(1) || column < 0){
                Console.WriteLine("Column - Out of Range");
                return;
            }

            int cuantity_in_row = AvailableQuantity[row, column];

            if(cuantity > cuantity_in_row){
                Console.WriteLine("Not enough items!");
                return;
            }

            AvailableQuantity[row, column] = cuantity_in_row - cuantity;

        } catch (Exception eX) {

            Console.WriteLine(eX.ToString());
        }

    }

    /// <summary>
    /// Generate string file, with the format (worst format ever).
    /// </summary>
    /// <returns>text that will be saved.</returns>
    private static string Generate_String_File(){

        string line = string.Empty;
        string full_text = string.Empty;

        for (int row = 0; row < AvailableQuantity.GetLength(0); row++) {

            line = string.Empty;

            for (int column = 0; column < AvailableQuantity.GetLength(1); column++) {

                line += AvailableQuantity[row, column].ToString() + " ";
            }

            line = line.Remove(line.Length-1);

            full_text += line + Environment.NewLine;
        }

        full_text = full_text.Remove(full_text.Length-1);

        return full_text;
    }

    /// <summary>
    /// Save the file at the asing path.
    /// </summary>
    /// <param name="path">location where will go the file.</param>
    /// <param name="text">text that will be included at the file.</param>
    private static void Save_File(string path, string text){

        try {

            File.WriteAllText(path, text);

        } catch (Exception eX) {

            Console.WriteLine(eX.ToString());
        }


    }

}

我不是专家,但我想那一定是那样的... 请不要为此而杀了我,这只是您想要的最糟糕的实现。