Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
        }