public DataReader() { Corses = new List <CorseItem>(); FileStream fs = File.OpenRead(filename); StreamReader sr = new StreamReader(fs); // StuNum = sr.ReadLine().Trim(); // Password = sr.ReadLine().Trim(); CorseItem c = new CorseItem(); while (!sr.EndOfStream) { string line = sr.ReadLine(); if (line.Length > 1) { string[] arr = line.Split(new char[] { ' ', '\t', ',' }, StringSplitOptions.RemoveEmptyEntries); c.CorseId = arr[0]; c.SeqNo = arr[1]; Corses.Add(c); } } }
public static CorseItem Parse(string webpart) { if (string.IsNullOrEmpty(webpart)) { return(null); } CorseItem c = new CorseItem(); Regex regex = new Regex(@"</thead>[\s\S]*?<tr .+>[\s\S]*?((<td .+>[\s\S]*?</td>[\s\S]*?)+)</tr>", RegexOptions.Multiline); Regex r2 = new Regex(@"<td [^/]+>([\s\S]*?)</td>"); MatchCollection matches = regex.Matches(webpart); if (matches.Count > 0) { foreach (Match m in matches) { string subpart = m.Groups[1].ToString(); MatchCollection mc2 = r2.Matches(subpart); int cnt = mc2.Count; if (cnt > 10) { c.Depart = mc2[1].Groups[1].ToString().Trim(); c.CorseId = mc2[2].Groups[1].ToString().Trim(); c.CorseName = mc2[3].Groups[1].ToString().Trim(); c.SeqNo = mc2[4].Groups[1].ToString().Trim(); c.Credits = mc2[5].Groups[1].ToString().Trim(); c.TestType = mc2[6].Groups[1].ToString().Trim(); c.Teacher = mc2[7].Groups[1].ToString().Trim(); string ts = mc2[8].Groups[1].ToString().Trim(); int d = 0; int.TryParse(ts, out d); c.PeopleCnt = d; return(c); } } } return(null); }
public bool BeginRequest() { HttpWebResponse res = null; try { OnStatusChange(1); OnMessageRecieved("正在连接选课服务器..."); act = new PreLoginAction(Host); res = (HttpWebResponse)act.DoAction(Host, cookies); if (res.Cookies.Count <= 0) { res.Close(); act = new PreLoginAction(Host); res = (HttpWebResponse)act.DoAction(Host, cookies); } if (res.Cookies.Count <= 0) { throw new Exception("无法获取连接信息,请稍后再试"); } foreach (Cookie cook in res.Cookies) { cookies.Add(cook); //if (cook.Name == "JSESSIONID") // JSessionCookie = cook.Value; } res.Close(); OnStatusChange(2); OnMessageRecieved("正在登录(" + UserName + ")"); act = new LoginAction(Host, UserName, Password); result = act.DoAction(cookies); OnMessageRecieved(result); OnStatusChange(3); OnMessageRecieved("正在获得课程信息..."); act = new GetAction("/menu/mainFrame.jsp"); res = (HttpWebResponse)act.DoAction(Host, cookies); res.Close(); //if (res.StatusCode == HttpStatusCode.OK) //{ // //result = new StreamReader(res.GetResponseStream(), Encoding.Default).ReadToEnd(); //} OnStatusChange(4); act = new GetAction("/xkAction.do?actionType=17"); res = (HttpWebResponse)act.DoAction(Host, cookies); res.Close(); //act = new GetAction("/xkAction.do?actionType=2&pageNumber=-1&oper1=ori"); //res = (HttpWebResponse)act.DoAction(Host, cookies); res.Close(); for (int i = 0; i < Corses.Count; i++) { string c1 = Corses[i].CorseId; string c2 = Corses[i].SeqNo; OnMessageRecieved("正在选课(" + c1 + "-" + c2 + ")"); act = new SearchAction(Host, c1, c2); result = act.DoAction(cookies); CorseItem ci = CorseParser.Parse(result); if (ci == null) { throw new NullReferenceException("无法得到课程信息,请稍后再试"); } if (ci.CorseId == Corses[i].CorseId && ci.SeqNo == Corses[i].SeqNo) { Corses[i] = ci; OnMessageRecieved("本课的基本信息:" + Environment.NewLine + ci.ToString()); if (ci.PeopleCnt > 0) { act = new SelectAction(Host, c1, c2); result = act.DoAction(cookies); } else { result = "选课失败[课程(" + c1 + "-" + c2 + ")的课余量为0]!"; } OnMessageRecieved(result); } } OnMessageRecieved("正在注销登录..."); act = new GetAction("/logout.do"); res = (HttpWebResponse)act.DoAction(Host, cookies); res.Close(); return(true); } catch (Exception ex) { OnStatusChange(-3); OnMessageRecieved(ex.Message); return(false); } finally { if (res != null) { res.Close(); } OnMessageRecieved("完成"); } // return false; }