Lisanas Ответов: 2

Единица измерения и подтверждение


Привет, я работаю над приложением инвентаризации.
я застрял на пересчете единиц измерения , например, если продукт находится в килограмме, мне нужно продавать в граммах или тоннах
, дюжина к ПК и изготовленный на заказ пакет также там как коробка могут содержать 20 ПК и потребность продать ее в ПК или она может содержать 40 ПК. надеюсь, вы поняли мой вопрос,

Таблица продуктов выглядит так

ProductID    Name      Rate   Unit          Baseunit   conversion
1            Item A    100    carton         Pcs             20  
2            item B    120    carton         Doz             10
3            item C    100    Kilogram       Gram             2 

пример: товар а находится в картонной коробке по 20 шт.
пункт с представляет собой мешок весом 2 килограмма

и есть еще одна таблица для измерения единицы измерения

Unit_id      Unit_Name      Parent_ID   Conversion 
1            Pcs              -       1
2            Doz              1       12
3            gram             -       1
4            Kilogram         3       1000


как мудрый



Что я уже пробовал:

я пытался, но не получил полного решения для этого, пожалуйста, помогите

вот что я пытался сделать
public enum Units
    {
        //Mass
        //Hectogram = 0,
        Grams = 1,
        KiloGrams = 2,
        Pounds = 3,
        //Ounces = 4,
        //Tonnes = 5,
        //MilliGram = 6,

        //Length
        Metres = 101,
        Millimetres = 102,
        Centimeters = 103,
        Feet = 106,
        Inches = 107,
        
        //Volume
        Litres = 201,
        Millilitres = 202,
        FluidOunces = 204,
        
        //Quantity
        Numbers = 401,
        Dozen = 402,
        Carton = 400
    }

    class UnitConverter
    {
        public static double CtnCount = 0;

        const int MassRange = 0;
        const int LengthRange = 100;
        const int VolumeRange = 200;
        const int Quantity = 400;

        static double[] ToBaseWeight = new double[7];
        static double[] ToBaseLength = new double[8];
        static double[] ToBaseVolume = new double[10];
        static double[] ToBaseQty = new double[7];


        static UnitConverter()
        {
            //ToBaseWeight[(int)Units.MilliGram] = 1 / 100;
            ToBaseWeight[(int)Units.Grams] = 1;
            //ToBaseWeight[(int)Units.Hectogram] = 100;
            ToBaseWeight[(int)Units.KiloGrams] = 1000;
            //ToBaseWeight[(int)Units.Ounces] = 28.3495231; 
            ToBaseWeight[(int)Units.Pounds] = 453.59237;
            //ToBaseWeight[(int)Units.Tonnes] = 1000000;
            ToBaseLength[(int)Units.Metres - LengthRange] = 1;
            ToBaseLength[(int)Units.Millimetres - LengthRange] = 0.001;
            ToBaseLength[(int)Units.Centimeters - LengthRange] = 0.01;
            ToBaseLength[(int)Units.Feet - LengthRange] = 0.3048;
            ToBaseLength[(int)Units.Inches - LengthRange] = 0.0254;
            ToBaseVolume[(int)Units.Litres - VolumeRange] = 1000;
            ToBaseVolume[(int)Units.Millilitres - VolumeRange] = 1;
            ToBaseVolume[(int)Units.FluidOunces - VolumeRange] = 29.5735296;
            ToBaseQty[(int)Units.Numbers - Quantity] = 1;
            ToBaseQty[(int)Units.Dozen - Quantity] = 12;
            ToBaseQty[(int)Units.Carton - Quantity] = 100;
        }


        public static string ConvertUnits(double amount, Units from, Units to,double cnt)
        {
            CtnCount = cnt;
            if (from == to) return amount.ToString();

            string msg = ValidateUnitMatch(from, to);
            if (msg != "")
            {
                return msg;
            }

            int range = GetConversionRange(from);

            double[] rateArray = GetConversionArray(range);

            double answer = 0;
            //Convert From to base,
            if (CtnCount>0)
            {
                rateArray[0] = CtnCount;
            }
            
            answer = rateArray[(int)from - range] * amount;

            //Convert base to To
            answer = answer * (1.0 / rateArray[(int)to - range]);
            return answer.ToString();
        }

        static string ValidateUnitMatch(Units from, Units to)
        {

            int frange = ((((int)from) / 100) * 100);
            int trange = ((((int)to) / 100) * 100);

            if (frange != trange)
            {
                return "The from unit and to unit are not compatible. They need to be of the same type (Volume/Area/Mass/Length)";

            }
            else
            {
                return "";
            }
        }
        static int GetConversionRange(Units unit)
        {
            int range = ((((int)unit) / 100) * 100);
            return range;
        }

        static double[] GetConversionArray(int range)
        {
            switch (range)
            {
                case VolumeRange: return ToBaseVolume;
                case LengthRange: return ToBaseLength;
                case MassRange: return ToBaseWeight;
                case Quantity: return ToBaseQty;
            }
            throw new ArgumentOutOfRangeException("Unknown unit type");
        }
    }


его работа, но я не смог использовать пользовательский блок.. как я уже сказал выше
если я хочу добавить новый блок, например, мешок содержит 10 кг товара, я не могу сделать это в этом случае.

2 Ответов

Рейтинг:
1

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

И это тоже ... это тривиальное домашнее задание: вы уже знаете, как умножать слишком много чисел вместе, так что это должно быть чрезвычайно просто для вас. Все, что вам нужно сделать, это использовать соединение для объединения таблиц с помощью BaseUnit / Unit и Unit_Name.

Прочтите свои конспекты к последней лекции и попробуйте - это совсем не сложно.


Lisanas

пожалуйста, проверьте приведенный выше код, который я пробовал.. я знаю, как умножить 2 числа.. может быть, то, как я задаю этот вопрос, неправильно ... я должен добавить код, который я пробовал..

Рейтинг:
0

Ralf Meier

У вас нет никаких идей для подхода ...?
Возможно вы могли бы это сделать :
- ваша база - это объект- класс
- этот класс имеет свойства, как показано в вашей таблице-описание
- тип этих свойств может быть перечислением
- в зависимости от выбора с вашими свойствами (объекта) вы можете сделать преобразование непосредственно внутри этого объекта и дать возможный результат в качестве дополнительного свойства.

Дай ему попробовать ...


0x01AA

Да, 5. И более того, "каждая" единица может быть выражена системой "МКС" ;)

Ralf Meier

Спасибо Вам за Ваш голос ... ;-)