Beispiel #1
0
        /*!
         *  \brief Draw a winning number for the lottery.
         *
         *  The draw number is ensured to not have bee drawn before in this lottery,
         *  and to have been sold for a ticket.
         *
         *  \return null if no lottery numbers have been sold, or all tickets have won;
         *  otherwise the ticket with the winning number is returned.
         */
        public Ticket DrawWinningNumber()
        {
            // If there are no sold tickets, don't draw a number.
            if (Tickets.Count < 1)
            {
                return(null);
            }
            // If every sold ticket has won, don't draw a number.
            if (WinningLotteryNumbers.Count == Tickets.Count)
            {
                return(null);
            }

            // Pick a winning number, checking that it's not still availibe
            // (i.e. a ticket has this number) and it's not already been picked.
            var winningNumber = Rng.Next(LotteryNumberMin, LotteryNumberMax + 1);

            while (LotteryNumbers[winningNumber] != InvalidLotteryNumber || WinningLotteryNumbers.Contains(winningNumber))
            {
                winningNumber = Rng.Next(LotteryNumberMin, LotteryNumberMax + 1);
            }

            // Store winning number and return the winning ticket.
            WinningLotteryNumbers.Add(winningNumber);
            return(Tickets.Find(T => T.LotteryNumber == winningNumber));
        }
Beispiel #2
0
        /*!
         *  \brief Remove a ticket from the lottery.
         *
         *  If the ticket has not been sold no action will be made.
         *  Otherwise, the ticket's number will be added to the availible numbers again,
         *  and if it was a winning number it will be removed from the list of winners as well.
         */
        public void RemoveTicket(Ticket ticket)
        {
            var target = Tickets.Find(T => T.LotteryNumber == ticket.LotteryNumber);

            if (target == null)
            {
                return;
            }

            // Remove the number from winners (if there) and add it to the availible numbers again,
            // before removing it from the list of sold tickets.
            WinningLotteryNumbers.Remove(target.LotteryNumber);
            ++NumLotteryNumbersLeft;
            LotteryNumbers[target.LotteryNumber] = target.LotteryNumber;
            Tickets.Remove(target);
        }
Beispiel #3
0
        /*!
         *  \brief Export the lottery session to a given file.
         *  \param exportFile String stream denoting target export file.
         */
        public void ExportToFile(Stream exportFile)
        {
            var xmlRoot = new XElement(XmlTagNames.Root,
                                       new XElement(XmlTagNames.MaxLotteryNumber, LotteryNumberMax),
                                       new XElement(XmlTagNames.Tickets, new XAttribute(XmlTagNames.TicketsPriceAttribute, TicketPrice),
                                                    Tickets.Select(t => new XElement(XmlTagNames.Ticket,
                                                                                     // Only lottery number is mandatory. Owner and comment are only included if not empty.
                                                                                     new XElement(XmlTagNames.TicketLotteryNumber, t.LotteryNumber),
                                                                                     (string.IsNullOrEmpty(t.Owner) ? null : new XElement(XmlTagNames.TicketOwner, t.Owner)),
                                                                                     (string.IsNullOrEmpty(t.Comment) ? null : new XElement(XmlTagNames.TicketComment, t.Comment))
                                                                                     ))
                                                    ),
                                       // Winners are optional. If none have been drawn, don't empty tag.
                                       (WinningLotteryNumbers.Any() ? new XElement("Winners",
                                                                                   WinningLotteryNumbers.Select(w => new XElement("Winner", new XAttribute("LotteryNumber", w))))
                : null)
                                       );

            xmlRoot.Save(exportFile);
        }
Beispiel #4
0
 /*!
  *  \brief Remove a winning lottery number, if it's in the collection.
  *
  *  NOTE that this DOES NOT delete the ticket with the winning number,
  *  it simply removes the winning association.
  */
 public void RemoveWinningTicket(int winningLotteryNumber)
 {
     WinningLotteryNumbers.Remove(winningLotteryNumber);
 }