Example #1
0
        private bool CheckFormat(LotteryFormInputData lotteryFormData)
        {
            //^[0-9]+$
            //直接把數字轉出來,存入實體變數
            _tempNumberSourceType = lotteryFormData.NumberSourceTypeTuple.Item2;
            if (_tempNumberSourceType == EnumNumberSourceType.Count)
            {
                if (!VerifyTupleAndGetNumber(lotteryFormData.SourceNumberCountTuple, ref _tempSourceNumberCount))
                {
                    return(false);
                }
            }
            else if (_tempNumberSourceType == EnumNumberSourceType.NumberRange)
            {
                if (!(VerifyTupleAndGetNumber(lotteryFormData.StartNumberTuple, ref _tempStartNumber) &&
                      VerifyTupleAndGetNumber(lotteryFormData.EndNumberTuple, ref _tempEndNumber)))
                {
                    return(false);
                }
            }
            else
            {
                //除非程式異常,否則不可能出現的錯誤
                _errorMessages.Add(_validatorMessage.Field + " " + lotteryFormData.NumberSourceTypeTuple.Item1 + " " + _validatorMessage.InputDataAbnormal);
                return(false);
            }
            if (!VerifyTupleAndGetNumber(lotteryFormData.GettingNumberCountTuple, ref _tempGettingNumberCount))
            {
                return(false);
            }

            //此項目沒有格式的驗證
            _tempHasSpecialNumber = lotteryFormData.HasSpecialNumberTuple.Item2;
            return(true);
        }
Example #2
0
        /// <summary>
        /// 產生存放輸入資料的物件
        /// </summary>
        /// <returns></returns>
        private LotteryFormInputData GenerateInputData()
        {
            //LotteryFormInputData是共用同一個還是用完就丟,由此method決定
            LotteryFormInputData lotteryFormInputData = new LotteryFormInputData();
            EnumNumberSourceType inputType            = radioButtonCount.Checked
                ? EnumNumberSourceType.Count : EnumNumberSourceType.NumberRange;

            lotteryFormInputData.NumberSourceTypeTuple   = new Tuple <string, EnumNumberSourceType>(grpgroupBoxSource.Text + grpgroupBoxSourceType.Text, inputType);
            lotteryFormInputData.SourceNumberCountTuple  = new Tuple <string, string>(grpgroupBoxSource.Text + LabelNumberCount.Text, textBoxNumberCount.Text);
            lotteryFormInputData.StartNumberTuple        = new Tuple <string, string>(grpgroupBoxSource.Text + LabelStartNumber.Text, textBoxStartNumber.Text);
            lotteryFormInputData.EndNumberTuple          = new Tuple <string, string>(grpgroupBoxSource.Text + LabelEndNumber.Text, textBoxEndNumber.Text);
            lotteryFormInputData.HasSpecialNumberTuple   = new Tuple <string, bool>(CheckBoxSpecialNumber.Text, CheckBoxSpecialNumber.Checked);
            lotteryFormInputData.GettingNumberCountTuple = new Tuple <string, string>(grpgroupBoxNumberGet.Text + LabelGettingCount.Text, textBoxGetCount.Text);
            return(lotteryFormInputData);
        }
Example #3
0
        public LotteryFormOutputData GenerateLotteryNumber(LotteryFormInputData lotteryFormData)
        {
            var            outputData = new LotteryFormOutputData();
            IList <String> errorList;

            if (!_inputDataValidator.Validate(lotteryFormData, out errorList))
            {
                outputData.ErrorMessageList = errorList;
                outputData.IsSuccess        = false;
                //做失敗處理
            }
            else
            {
                //因為已經對資料做過驗證,所以不做資料異常的判斷與錯誤處理
                IEnumerable <int>    gettingNumbers;
                EnumNumberSourceType numberSourceType = lotteryFormData.NumberSourceTypeTuple.Item2;
                int  gettingNumberCount = int.Parse(lotteryFormData.GettingNumberCountTuple.Item2);
                bool hasSpecialNumber   = lotteryFormData.HasSpecialNumberTuple.Item2;
                gettingNumberCount = hasSpecialNumber
                                         ? gettingNumberCount + 1
                                         : gettingNumberCount;
                if (numberSourceType == EnumNumberSourceType.Count)
                {
                    int sourceNumberCount = int.Parse(lotteryFormData.SourceNumberCountTuple.Item2);
                    gettingNumbers = _generateNumbersService.GenerateRandomsNumbersByCount(sourceNumberCount,
                                                                                           gettingNumberCount);
                }
                else
                {
                    int startNumber = int.Parse(lotteryFormData.StartNumberTuple.Item2);
                    int endNumber   = int.Parse(lotteryFormData.EndNumberTuple.Item2);
                    gettingNumbers = _generateNumbersService.GenerateRandomNumbersByNumberRange(startNumber, endNumber,
                                                                                                gettingNumberCount);
                }

                List <int> randomList = gettingNumbers.ToList();
                if (hasSpecialNumber)
                {
                    //取出亂數一開始的寫法是
                    //取出的亂數結果本身是沒有經過排序的
                    //所以隨便取固定位置(如第一個)就可以了
                    //但是取出亂數的實作方式應該要是可以改變的
                    //不該假定結果一定沒有排序過
                    //所以這裡還是用比較麻煩的方式:使用亂數抽一個數出來當特別號
                    int removeIndex   = _random.Next(randomList.Count);
                    int specialNumber = randomList[removeIndex];
                    //這裡不驗證是否移除成功
                    randomList.RemoveAt(removeIndex);
                    outputData.HasSpecialNumber = true;
                    outputData.SpecialNumber    = specialNumber;
                }
                else
                {
                    outputData.HasSpecialNumber = false;
                }
                randomList.Sort();
                outputData.LotteryNumbers = randomList;
                //計算結果
                outputData.IsSuccess = true;
            }
            return(outputData);
        }