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