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); }
/// <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); }
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); }