Example #1
0
        private void Form1_Load(object sender, EventArgs e)
        {
            //Manual Creation
            Schedule sManual = new Schedule(DateTime.Now.Date, 1);

            var pEntry = sManual.AddEntry(ScheduleEntry.ScheduleEntryTypeEnum.Pay, DateTime.Now.Date.AddMonths(3));

            pEntry.AddScheduleEntryTransaction(ScheduleEntryTransaction.TransactionType.Capital, 100);

            var rEntry = sManual.AddEntry(ScheduleEntry.ScheduleEntryTypeEnum.Repay, DateTime.Now.AddYears(1));

            rEntry.AddScheduleEntryTransaction(ScheduleEntryTransaction.TransactionType.Capital, 100);
            rEntry.AddScheduleEntryTransaction(ScheduleEntryTransaction.TransactionType.Interest, 8.25m);

            Refresh(sManual);

            cmbfreq.Items.AddRange(Enum.GetValues(typeof(Common.Frequency)).Cast <Common.Frequency>().Select(n => n.ToString()).ToArray());
            cmbfreq.Text = Common.Frequency.MONTHLY.ToString();
            cmbDaysInYear.SelectedIndex = 0;
        }
Example #2
0
        static void Main()
        {
            #region Single Responsability Principle

            var homework = new Homework();
            homework.AddEntry(new Task(Discipline.Math, new DateTime(2019, 1, 1), "Solve the equation: x^2 + 2x + 8"));
            homework.AddEntry(new Task(Discipline.History, new DateTime(2019, 1, 3), "Research of the World War II"));
            homework.AddEntry(new Task(Discipline.English, new DateTime(2019, 2, 3), "An essay about the film industry"));

            Console.WriteLine(homework.ToString());

            Console.WriteLine();

            homework.RemoveEntry(1);

            Console.WriteLine(homework.ToString());

            Console.WriteLine();

            FileSaver.SaveToFile("Homeworks", "homework.txt", homework);
            Console.WriteLine("Homework saved to file!");

            Console.WriteLine();

            var schedule = new Schedule();
            schedule.AddEntry(new Appointment(new DateTime(2019, 2, 1), new TimeSpan(0, 30, 0), "Hospital", "Medical Check up"));
            schedule.AddEntry(new Appointment(new DateTime(2019, 2, 5), new TimeSpan(2, 15, 0), "Sports Club", "Soccer Match"));

            Console.WriteLine(schedule.ToString());

            Console.WriteLine();

            FileSaver.SaveToFile("Schedules", "schedule.txt", schedule);
            Console.WriteLine("Schedule saved to file!");

            Console.WriteLine();

            #endregion
        }
Example #3
0
        public void Test_Schedule_All()
        {
            List <ScheduleEntry> entries = new List <ScheduleEntry>()
            {
                new ScheduleEntry()
                {
                    DayOfWeek = 1, StartSlot = 2, EndSlot = 4
                },
                new ScheduleEntry()
                {
                    DayOfWeek = 2, StartSlot = 1, EndSlot = 2
                },
                new ScheduleEntry()
                {
                    DayOfWeek = 2, StartSlot = 3, EndSlot = 4
                },
                new ScheduleEntry()
                {
                    DayOfWeek = 2, StartSlot = 5, EndSlot = 6
                },
                new ScheduleEntry()
                {
                    DayOfWeek = 3, StartSlot = 1, EndSlot = 4
                },
                new ScheduleEntry()
                {
                    DayOfWeek = 4, StartSlot = 2, EndSlot = 3
                },
                new ScheduleEntry()
                {
                    DayOfWeek = 5, StartSlot = 1, EndSlot = 2
                },
                new ScheduleEntry()
                {
                    DayOfWeek = 5, StartSlot = 7, EndSlot = 9
                },
            };

            ScheduleWeek week3 = new ScheduleWeek()
            {
                WeekNumber = 3,
                Entries    = entries
            };
            ScheduleWeek week5 = new ScheduleWeek()
            {
                WeekNumber = 5,
                Entries    = entries
            };
            ScheduleWeek week1 = new ScheduleWeek()
            {
                WeekNumber = 1,
                Entries    = entries
            };


            Schedule schedule = new Schedule();

            schedule.AddWeek(week3);
            Assert.AreEqual(3, schedule.Count);
            Assert.AreEqual(2, schedule.Weeks[1].WeekNumber);

            schedule.AddWeek(week5);
            Assert.AreEqual(5, schedule.Count);
            Assert.AreEqual(4, schedule.Weeks[3].WeekNumber);

            schedule.AddWeek(week1);
            Assert.AreEqual(5, schedule.Count);
            Assert.AreEqual(4, schedule.Weeks[3].WeekNumber);
            Assert.AreEqual(8, schedule.Weeks[0].Count);
            Assert.AreEqual(8, schedule.Weeks[4].Count);
            Assert.AreEqual(0, schedule.Weeks[1].Count);

            Assert.AreEqual(1, schedule.GetDaySchedule(2).Count);
            Assert.AreEqual(3, schedule.GetDaySchedule(1).Count);
            Assert.AreEqual(1, schedule.GetDaySchedule(0).Count);
            Assert.AreEqual(0, schedule.GetDaySchedule(5).Count);
            Assert.AreEqual(3, schedule.GetDaySchedule(15).Count);
            Assert.AreEqual(0, schedule.GetDaySchedule(120).Count);
            Assert.AreEqual(0, schedule.GetDaySchedule(-20).Count);

            schedule.AddWeek(week5);
            Assert.AreEqual(5, schedule.Count);
            Assert.AreEqual(16, schedule.Weeks[4].Count);
            schedule.AddEntry(5, week5.Entries[0]);
            Assert.AreEqual(17, schedule.Weeks[4].Count);
        }
Example #4
0
        private Schedule ParseSchedule(string page, string signedInUser)
        {
            if (string.IsNullOrWhiteSpace(page))
            {
                throw new FormatException("Page is empty.");
            }
            int             peTable       = -1;
            int             expTable      = -1;
            Regex           headerRegex   = new Regex("<div group=\"group\" class=\"page_group\".*?</div>", RegexOptions.CultureInvariant);
            MatchCollection headerMatches = headerRegex.Matches(page);

            for (int i = 0; i < headerMatches.Count; i++)
            {
                if (headerMatches[i].Value.Contains("体育课"))
                {
                    peTable = i;
                }
                else if (headerMatches[i].Value.Contains("实验"))
                {
                    expTable = i;
                }
            }
            Schedule        schedule     = new Schedule(signedInUser);
            Regex           tableRegex   = new Regex("<tbody>.*?</tbody>", RegexOptions.CultureInvariant);
            Regex           trRegex      = new Regex("<tr >.*?</tr>", RegexOptions.CultureInvariant);
            Regex           tdRegex      = new Regex("<td .*?>(.*?)<br></td>", RegexOptions.CultureInvariant);
            Regex           sessionRegex = new Regex("(.)\\[((.*?)-(.*?)|(.*?))节\\]", RegexOptions.CultureInvariant);
            Regex           weeksRegex   = new Regex("((..?)|(..?)-(..?))[,;]", RegexOptions.CultureInvariant);
            MatchCollection tableMatches = tableRegex.Matches(page);

            for (int i = 0; i < tableMatches.Count; i++)
            {
                MatchCollection rows = trRegex.Matches(tableMatches[i].Value);
                foreach (Match?row in rows)
                {
                    if (row == null)
                    {
                        continue;
                    }
                    MatchCollection cells = tdRegex.Matches(row.Value);
                    ScheduleEntry   entry;
                    string          weeksStr, sessionsStr;
                    if (i == peTable)
                    {
                        entry = new ScheduleEntry(
                            name: GetCellValue(cells[6]),
                            lecturer: GetCellValue(cells[7]),
                            room: GetCellValue(cells[10])
                            );
                        weeksStr    = $"{GetCellValue(cells[8])},";
                        sessionsStr = GetCellValue(cells[9]);
                    }
                    else if (i == expTable)
                    {
                        entry = new ScheduleEntry(
                            name: $"{GetCellValue(cells[1]).Split(']')[1]}实验",
                            lecturer: GetCellValue(cells[7]),
                            room: GetCellValue(cells[11])
                            );
                        weeksStr    = $"{GetCellValue(cells[9])},";
                        sessionsStr = GetCellValue(cells[10]);
                    }
                    else
                    {
                        if (GetCellValue(cells[7]).Equals("实践", StringComparison.Ordinal))
                        {
                            continue;
                        }
                        entry = new ScheduleEntry(
                            name: GetCellValue(cells[1]).Split(']')[1],
                            lecturer: GetCellValue(cells[9]),
                            room: GetCellValue(cells[12])
                            );
                        weeksStr    = $"{GetCellValue(cells[10])},";
                        sessionsStr = GetCellValue(cells[11]);
                    }
                    Match sessionMatch = sessionRegex.Match(sessionsStr);
                    if (!sessionMatch.Success)
                    {
                        throw new FormatException($"Encountered unexpected schedule format while parsing session. Got {sessionsStr}");
                    }
                    entry.DayOfWeek = GetDayOfWeek(sessionMatch.FirstGroupValue());
                    if (sessionMatch.Groups[3].Captures.Count == 0)
                    {
                        entry.StartSession = int.Parse(sessionMatch.Groups[5].Value);
                        entry.EndSession   = entry.StartSession;
                    }
                    else
                    {
                        entry.StartSession = int.Parse(sessionMatch.Groups[3].Value);
                        entry.EndSession   = int.Parse(sessionMatch.Groups[4].Value);
                    }
                    MatchCollection weeksMatch = weeksRegex.Matches(weeksStr);
                    foreach (Match?weekItem in weeksMatch)
                    {
                        if (weekItem == null)
                        {
                            continue;
                        }
                        if (weekItem.Groups[2].Captures.Count == 0)
                        {
                            int startWeek = int.Parse(weekItem.Groups[3].Value);
                            int endWeek   = int.Parse(weekItem.Groups[4].Value);
                            for (int week = startWeek; week <= endWeek; week++)
                            {
                                schedule.AddEntry(week, entry);
                            }
                        }
                        else
                        {
                            int week = int.Parse(weekItem.Groups[2].Value);
                            schedule.AddEntry(week, entry);
                        }
                    }
                }
            }
            schedule.Weeks.Sort((x, y) => x.WeekNumber.CompareTo(y.WeekNumber));
            return(schedule);
        }