Example #1
0
        /// <summary>
        /// 获得各个学号的课表
        /// </summary>
        private async void initFree()
        {
            for (int i = 0; i < muIdList.Count; i++)
            {
                int issuccess = 0;
                List <ClassListLight> clist = new List <ClassListLight>();
                while (issuccess < 2) //失败后重试两次
                {
                    List <KeyValuePair <String, String> > paramList = new List <KeyValuePair <String, String> >();
                    paramList.Add(new KeyValuePair <string, string>("stuNum", muIdList[i].uId));
                    string kbtemp = await NetWork.getHttpWebRequest("redapi2/api/kebiao", paramList); //新

                    if (kbtemp != "")
                    {
                        JObject job = JObject.Parse(kbtemp);
                        if (Int32.Parse(job["status"].ToString()) == 200)
                        {
                            JArray jarry = Utils.ReadJso(kbtemp);
                            for (int j = 0; j < jarry.Count; j++)
                            {
                                ClassListLight cll      = new ClassListLight();
                                var            istriple = cll.getattribute((JObject)jarry[j]);
                                cll.Name = new string[] { muIdList[i].uName }; // muIdList[i].uName;
                                if (istriple != null)
                                {
                                    clist.Add(istriple);
                                    istriple.Name = cll.Name;
                                }
                                clist.Add(cll);
                            }
                        }
                        issuccess = 2;
                    }
                    else
                    {
                        issuccess++;
                    }
                }
                forsearchlist.Add(muIdList[i].uName, clist);
                FreeLoddingProgressBar.Value = FreeLoddingProgressBar.Value + 100.0 / muIdList.Count;
                Debug.WriteLine(FreeLoddingProgressBar.Value);
            }
            //查无课表,参数第几周==
            EmptyClass ec = new EmptyClass(week, forsearchlist);

            ec.getfreetime(result, termresult);
            //freetime(11, forsearchlist);
            FreeLoddingStackPanel.Visibility   = Visibility.Collapsed;
            FreeKBTableGrid.Visibility         = Visibility.Visible;
            ShowWeekendAppBarButton.Visibility = Visibility.Visible;
            if (result.Count != 0)
            {
                showFreeKB(result);
            }
            else
            {
                showFreeKB(termresult);
            }
        }
Example #2
0
        public void getfreetime(ObservableCollection <ClassListLight> weekresult, ObservableCollection <EmptyTable> termresult)
        {
            //所有人的名字
            string[] names = (from n in Searchlist.Keys select n).ToArray();
            //星期,时间段,人名数组
            List <ClassListLight> clist = new List <ClassListLight>();

            if (Weeknum != -100)
            {
                foreach (var key in Searchlist.Keys)
                {
                    //找到该周的所有课程
                    clist.AddRange((from n in Searchlist[key] where n.Week.Contains(Weeknum) select n).ToList());
                }
                //添加都没课的时间
                //day和lesson都没有在clist里出现过就添加一个classlistlight对象
                for (int i = 0; i < 7; i++)     //一周
                {
                    for (int j = 0; j < 6; j++) //一天
                    {
                        //查时间有没有在集合里出现过
                        ClassListLight ourfreetime = new ClassListLight()
                        {
                            Hash_day = i, Hash_lesson = j
                        };
                        if (!clist.Contains(ourfreetime, new ClassListLigthCompare()))
                        {
                            ourfreetime.Name = names;
                            clist.Add(ourfreetime);
                        }
                    }
                }
                //clist = clist.OrderBy(x => x.Hash_day).ToList();
                //筛选出该周内所有不在同一时间上课的课
                var diisclist = from n in clist group n by new { n.Hash_day, n.Hash_lesson } into g where g.Count() < names.Length select g;
                var ll = diisclist.ToList();
                for (int i = 0; i < ll.Count; i++)
                {
                    var            len       = ll[i].ToList();
                    ClassListLight tobeadded = len[0].Clone();
                    if (len.Count == 1)
                    {
                        tobeadded.Name = len[0].Name;
                        Debug.WriteLine("长度是" + len.Count);
                    }
                    if (len.Count > 1)
                    {
                        string[] haveclassname = new string[len.Count];
                        //获得一个ClassListLight的深复制
                        tobeadded.Name = haveclassname;
                        for (int k = 0; k < len.Count; k++)
                        {
                            tobeadded.Name[k] = len[k].Name[0];
                        }
                    }
                    if (tobeadded.Name.Length != names.Length)
                    {
                        tobeadded.Name = names.Except(tobeadded.Name).ToArray();
                    }
                    weekresult.Add(tobeadded);
                }
                //大家都没课的时间
            }
            else
            {
                //todo学期空课表
                //我要怎么做呢,怎么做呢,既然要查学期,那么就按课的时间差吧,从星期一第一节到星期天
                //查每个人,每个时间段有课情况
                //查到所有这个时间段的周:EX :星期一第一二节课,  得到一个周的列表   1,2,3,4,5,6     得到每个人的周列表,2,4,6,8    1,3,5,7 ,找出都没课的周
                //怎么找呢
                //找出每个人没课的周 7,8,9,10  1,3,4,7,9,10  2,4,5,8,10
                //那么就得到了           张三            历史           王五
                //那么这个类就应该是 周,时间,姓名[],那几周空[]----周,时间,  键值对(名字,有空的周[])
                //前面挖了个坑,这里又要一个类,EmptyTable,不兼容啊卧槽。
                int[] allweeks = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 };
                for (int i = 0; i < 7; i++)     //星期
                {
                    for (int j = 0; j < 6; j++) //时段
                    {
                        EmptyTable temp = new EmptyTable {
                            Hash_day = i, Hash_lesson = j
                        };
                        temp.nameweek = new Dictionary <string, int[]>();
                        foreach (var key in Searchlist.Keys)
                        {
                            IEnumerable <int[]> a = from n in Searchlist[key] where n.Hash_day == i && n.Hash_lesson == j select n.Week;
                            //var b=from x in Searchlist group x.Value by x.Key into g
                            List <int[]> listweek = a.ToList();
                            List <int>   onweeks  = new List <int>();
                            for (int m = 0; m < listweek.Count; m++)
                            {
                                onweeks.AddRange(listweek[m]);
                            }
                            int[] free = allweeks.Except(onweeks.ToArray()).ToArray();
                            free = free.Distinct().ToArray();
                            if (listweek.Count == 0)//这个时候我没课
                            {
                                temp.nameweek.Add(key, allweeks);
                            }
                            else if (free.Length == 18)
                            {
                                //这个时候我一学期都有课
                                continue;
                            }
                            else//这个时候我有课,找出我没课的周
                            {
                                temp.nameweek.Add(key, free);
                            }
                        }
                        termresult.Add(temp);
                    }
                }
            }
        }
Example #3
0
        /// <summary>
        /// 给一个课程格子设置颜色,并添加到视图中
        /// </summary>
        /// <param name="setcoloritem"></param>
        /// <param name="ClassColor"></param>
        private void SetClassAll(EmptyClassDayLesson setcoloritem, int ClassColor)
        {
            Color[] colors = new Color[] {
                Color.FromArgb(255, 88, 179, 255),  //蓝
                Color.FromArgb(255, 255, 181, 68),  //黄
                Color.FromArgb(255, 172, 222, 76),  //绿
                Color.FromArgb(255, 249, 130, 130), //红
            };
            int       day            = setcoloritem.Hash_day;
            int       lesson         = setcoloritem.Hash_lesson;
            TextBlock ClassTextBlock = new TextBlock();

            if (setcoloritem is ClassListLight)
            {
                ClassListLight item = setcoloritem as ClassListLight;
                ResultName[day, lesson] = item.Name;
                foreach (var nameitem in ResultName[day, lesson])
                {
                    ClassTextBlock.Text = ClassTextBlock.Text + "\n" + nameitem;
                }
            }
            if (setcoloritem is EmptyTable)
            {
                EmptyTable item = setcoloritem as EmptyTable;
                ResultName[day, lesson] = item.nameweek.Keys.ToArray();
                foreach (var nameitem in ResultName[day, lesson])
                {
                    if (item.nameweek[nameitem].Length != 0)
                    {
                        ClassTextBlock.Text = ClassTextBlock.Text + "\n" + nameitem + "\r";
                        ClassTextBlock.Text = ClassTextBlock.Text + WeeknumConverter(item.nameweek[nameitem]);
                    }
                }
            }
            ClassTextBlock.Foreground          = new SolidColorBrush(Colors.White);
            ClassTextBlock.FontSize            = 13;
            ClassTextBlock.TextWrapping        = TextWrapping.WrapWholeWords;
            ClassTextBlock.VerticalAlignment   = VerticalAlignment.Center;
            ClassTextBlock.HorizontalAlignment = HorizontalAlignment.Center;
            if (Utils.getPhoneWidth() < 333)
            {
                ClassTextBlock.Margin = new Thickness(1);
            }
            else
            {
                ClassTextBlock.Margin = new Thickness(3);
            }
            ClassTextBlock.MaxLines = 6;

            Grid BackGrid = new Grid();

            BackGrid.Background = new SolidColorBrush(colors[ClassColor]);
            BackGrid.SetValue(Grid.RowProperty, System.Int32.Parse(lesson * 2 + ""));
            BackGrid.SetValue(Grid.ColumnProperty, System.Int32.Parse(day + ""));
            BackGrid.SetValue(Grid.RowSpanProperty, 2);
            BackGrid.Margin = new Thickness(0.5);

            if ((setcoloritem is ClassListLight) && ResultName[day, lesson].Length == muIdList.Count)
            {
                TextBlock AllPeopleTextBlock = new TextBlock();
                AllPeopleTextBlock.Foreground          = new SolidColorBrush(Colors.White);
                AllPeopleTextBlock.FontSize            = 11;
                AllPeopleTextBlock.Text                = "全";
                AllPeopleTextBlock.VerticalAlignment   = VerticalAlignment.Bottom;
                AllPeopleTextBlock.HorizontalAlignment = HorizontalAlignment.Right;
                AllPeopleTextBlock.Margin              = new Thickness(1);
                BackGrid.Children.Add(AllPeopleTextBlock);
            }

            BackGrid.Children.Add(ClassTextBlock);
            BackGrid.Tapped += BackGrid_Tapped;
            kebiaoGrid.Children.Add(BackGrid);
        }
Example #4
0
        public ObservableCollection <ClassListLight> getweekresult()
        {
            string[] names = (from n in Searchlist.Keys select n).ToArray();
            List <ClassListLight> clist             = new List <ClassListLight>();
            ObservableCollection <ClassListLight> w = new ObservableCollection <ClassListLight>();

            foreach (var key in Searchlist.Keys)
            {
                //找到该周的所有课程
                clist.AddRange((from n in Searchlist[key] where n.Week.Contains(Weeknum) select n).ToList());
            }
            //添加都没课的时间
            //day和lesson都没有在clist里出现过就添加一个classlistlight对象
            for (int i = 0; i < 7; i++)     //一周
            {
                for (int j = 0; j < 6; j++) //一天
                {
                    //查时间有没有在集合里出现过
                    ClassListLight ourfreetime = new ClassListLight()
                    {
                        Hash_day = i, Hash_lesson = j
                    };
                    if (!clist.Contains(ourfreetime, new ClassListLigthCompare()))
                    {
                        ourfreetime.Name = names;
                        clist.Add(ourfreetime);
                    }
                }
            }
            //clist = clist.OrderBy(x => x.Hash_day).ToList();
            //筛选出该周内所有不在同一时间上课的课
            //按上课周几和上课时段分组,如果某个组长度小于总人数则选择这个组//即得到不是所有人都有课的时间,
            var diisclist = from n in clist group n by new { n.Hash_day, n.Hash_lesson } into g where g.Count() < names.Length select g;
            //将结果从IEnumerable<T>转成List
            var ll = diisclist.ToList();

            //遍历这个List
            for (int i = 0; i < ll.Count; i++)
            {
                var            len       = ll[i].ToList();
                ClassListLight tobeadded = len[0].Clone();
                if (len.Count == 1)
                {
                    tobeadded.Name = len[0].Name;
                }
                if (len.Count > 1)
                {
                    string[] haveclassname = new string[len.Count];
                    //获得一个ClassListLight的深复制
                    tobeadded.Name = haveclassname;
                    for (int k = 0; k < len.Count; k++)
                    {
                        tobeadded.Name[k] = len[k].Name[0];
                    }
                }

                if (tobeadded.Name.Length != names.Length)
                {
                    tobeadded.Name = names.Except(tobeadded.Name).ToArray();
                }
                w.Add(tobeadded);
            }
            return(w);
        }