/// <summary>
        /// 从PlanCourse取出一个当前累积权值最小,并且没有被处理过的节点
        /// </summary>
        /// <returns></returns>
        private Node GetMinWeightRudeNode(PlanCourse planCourse, List <Node> nodeList, string originID)
        {
            double weight   = double.MaxValue;
            Node   destNode = null;

            foreach (Node node in nodeList)
            {
                if (node.ID == originID)
                {
                    continue;
                }

                PassedPath pPath = planCourse[node.ID];
                if (pPath.BeProcessed)
                {
                    continue;
                }

                if (pPath.Weight < weight)
                {
                    weight   = pPath.Weight;
                    destNode = node;
                }
            }

            return(destNode);
        }
Beispiel #2
0
        public RoutePlanResult GetShortestTimePath(string originID, string destID)
        {
            PlanCourse planCourse = new PlanCourse(nodeList, originID);
            Node curNode = GetMinWeightRudeNode(planCourse, originID);
            #region 计算过程
            while (curNode != null)
            {
                PassedPath curPath = planCourse[curNode.ID];
                foreach (Edge edge in curNode.EdgeList)
                {
                    //已选取的顶点则不必考虑
                    if (curPath.PassedIDList.Contains(edge.EndNodeID)) continue;

                    PassedPath targetPath = planCourse[edge.EndNodeID];
                    double tempWeight = curPath.Weight + edge.Weight;
                    if (tempWeight < targetPath.Weight)
                    {
                        targetPath.Weight = tempWeight;
                        targetPath.PassedIDList.Clear();
                        for (int i = 0; i < curPath.PassedIDList.Count; i++)
                        {
                            targetPath.PassedIDList.Add(curPath.PassedIDList[i].ToString());
                        }
                        targetPath.PassedIDList.Add(curNode.ID);
                    }
                }
                //标志为已处理
                planCourse[curNode.ID].BeProcessed = true;
                //获取下一个未处理节点
                curNode = GetMinWeightRudeNode(planCourse, originID);
            }
            #endregion
            //表示规划结束
            return this.GetResult(planCourse, destID);
        }
Beispiel #3
0
        //从PlanCourse取出一个当前累积权值最小,并且没有被处理过的节点
        private UnitStar GetMinWeightRudeNode(PlanCourse planCourse, List <UnitStar> nodeList, int originID)
        {
            double   weight   = double.MaxValue;
            UnitStar destNode = null;

            foreach (UnitStar node in nodeList)
            {
                if (node.UnitId == originID)
                {
                    continue;
                }

                PassedPath pPath = planCourse[node.UnitId];
                if (pPath.BeProcessed)
                {
                    continue;
                }

                if (pPath.Weight < weight)
                {
                    weight   = pPath.Weight;
                    destNode = node;
                }
            }

            return(destNode);
        }
        private void ChangeDegreeProgram(Plan plan)
        {
            List <PlanCourse> plans = Request <PlanCourse> .GetAll("A", "B").Where(i => i.planID == plan.ID).ToList();//planCourses.Where(i => i.planID == plan.ID).ToList();

            foreach (PlanCourse planCourse in plans)
            {
                Request <PlanCourse> .Delete(planCourse.ID, "A", "B");
            }
            Dictionary <int, int> semesterOrders = new Dictionary <int, int>();
            Dictionary <int, int> semesterMap    = new Dictionary <int, int>();
            int             nowSem       = 1;
            List <Semester> semesterList = Request <Semester> .GetAll("A", "B").Where(i => i.ID >= plan.semesterID).ToList();

            foreach (Semester sem in semesterList)
            {
                if (sem.standard == true)
                {
                    semesterMap.Add(nowSem, sem.ID);
                    semesterOrders.Add(nowSem, 0);
                    nowSem++;
                }
            }

            List <RequiredCourse> requirements = plan.degreeProgram.requiredCourses.ToList();

            foreach (RequiredCourse req in requirements)
            {
                PlanCourse pcourse = new PlanCourse();
                pcourse.planID = plan.ID;
                int order = semesterOrders[req.semester];
                pcourse.order = order;
                semesterOrders[req.semester] = order + 1;
                pcourse.semesterID           = semesterMap[req.semester];
                pcourse.courseID             = req.courseID;
                pcourse.credits = req.course.courseHours;
                Request <PlanCourse> .Add(pcourse, "A", "B");
            }

            List <ElectiveCourse> elects = plan.degreeProgram.electiveCourses.ToList();

            foreach (ElectiveCourse elect in elects)
            {
                PlanCourse pcourse = new PlanCourse();
                pcourse.planID = plan.ID;
                int order = semesterOrders[elect.semester];
                pcourse.order = order;
                semesterOrders[elect.semester] = order + 1;
                pcourse.semesterID             = semesterMap[elect.semester];
                pcourse.electiveListID         = elect.electiveListID;
                pcourse.credits = elect.credits.ToString();
                Request <PlanCourse> .Add(pcourse, "A", "B");
            }
        }
Beispiel #5
0
        PlanCourse _planCourseQueue_Get(PlanCourse partialPlanCourse)
        {
            PlanCourse PlanCourse = _context.PlanCourses.Where(c => c.ID == partialPlanCourse.ID)
                                    .Include(pc => pc.plan)
                                    .Include(pc => pc.plan.degreeProgram)
                                    .Include(pc => pc.plan.planCourses.Select(s => s.course.prerequisites))
                                    .Include(pc => pc.plan.planCourses.Select(s => s.course.prerequisiteFor))
                                    .Include(pc => pc.plan.semester)
                                    .Include(pc => pc.plan.user)
                                    .Include(pc => pc.semester)
                                    .Include(pc => pc.electiveList)
                                    .Include(pc => pc.course)
                                    .First();

            return(PlanCourse);
        }
Beispiel #6
0
        //获取权值最小的路径
        public RoutePlanResult Paln(List <UnitStar> nodeList, int originID, int destID)
        {
            PlanCourse planCourse = new PlanCourse(nodeList, originID);

            UnitStar curNode = this.GetMinWeightRudeNode(planCourse, nodeList, originID);

            #region 计算过程

            while (curNode != null)
            {
                PassedPath curPath = planCourse[curNode.UnitId];//获取当前计算节点的路径
                foreach (Edge edge in curNode.EdgeList)
                {
                    //Debug.Log("curPath:" + curPath.CurNodeID + "    targetPath:" + edge.EndNodeID);
                    PassedPath targetPath = planCourse[edge.EndNodeID]; //获取目标计算节点的路径
                    if (targetPath == null)                             //回溯到原点,没有意义
                    {
                        continue;
                    }
                    double tempWeight = curPath.Weight + edge.Weight; //算出当前计算节点的权重加上边的权重

                    if (tempWeight < targetPath.Weight)               //如果小于直接到目标节点的权重,则更新
                    {
                        targetPath.Weight = tempWeight;               //
                        targetPath.PassedIDList.Clear();

                        for (int i = 0; i < curPath.PassedIDList.Count; i++)
                        {
                            targetPath.PassedIDList.Add(curPath.PassedIDList[i]);
                        }

                        targetPath.PassedIDList.Add(curNode.UnitId);
                    }
                }

                //标志为已处理
                planCourse[curNode.UnitId].BeProcessed = true;
                //获取下一个未处理节点
                curNode = this.GetMinWeightRudeNode(planCourse, nodeList, originID);
            }

            #endregion 计算过程

            //表示规划结束
            return(this.GetResult(planCourse, destID));
        }
        /// <summary>
        /// 获取权值最小的路径
        /// </summary>
        /// <param name="nodeList"></param>
        /// <param name="originID"></param>
        /// <param name="destID"></param>
        /// <returns></returns>
        public RoutePlanResult Paln(List <Node> nodeList, string originID, string destID)
        {
            //初始化起始节点到其他节点的路径表(权值,经过的节点,是否被处理)
            //同时初始化其他节点的路径表
            PlanCourse planCourse = new PlanCourse(nodeList, originID);

            Node curNode = this.GetMinWeightRudeNode(planCourse, nodeList, originID);


            #region 计算过程

            while (curNode != null)
            {
                PassedPath curPath = planCourse[curNode.ID];
                foreach (Edge edge in curNode.EdgeList)
                {
                    PassedPath targetPath = planCourse[edge.EndNodeID];
                    double     tempWeight = curPath.Weight + edge.Weight;

                    if (tempWeight < targetPath.Weight)
                    {
                        targetPath.Weight = tempWeight;
                        targetPath.PassedNodeList.Clear();

                        for (int i = 0; i < curPath.PassedNodeList.Count; i++)
                        {
                            targetPath.PassedNodeList.Add(curPath.PassedNodeList[i]);
                        }

                        targetPath.PassedNodeList.Add(curNode);
                    }
                }

                //标志为已处理
                planCourse[curNode.ID].BeProcessed = true;
                //获取下一个未处理节点
                curNode = this.GetMinWeightRudeNode(planCourse, nodeList, originID);
            }

            #endregion

            //表示规划结束
            return(this.GetResult(planCourse, destID));
        }
        public ActionResult SaveCourseInfo(int ID, int?courseID, string notes)
        {
            if (ModelState.IsValid)
            {
                PlanCourse pcourseAttached = Request <PlanCourse> .GetItemByID(ID, "A", "B");

                Plan planAttached = Request <Plan> .GetItemByID(pcourseAttached.planID, "A", "B");

                if (webSecurity.CurrentUser.IsInRole("Advisor") || planAttached.userID == webSecurity.CurrentUserId)
                {
                    pcourseAttached.notes    = notes;
                    pcourseAttached.courseID = courseID;
                    Request <PlanCourse> .Update(pcourseAttached, pcourseAttached, "A", "B");

                    return(new HttpStatusCodeResult(HttpStatusCode.OK));
                }
            }
            return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
        }
Beispiel #9
0
 public ActionResult UpdateCourseInfo(int id = 0)
 {
     if (id > 0)
     {
         //PlanCourse pcourse = planCourses.Find(id);
         PlanCourse pcourse = _planCourseProducer.Get(new PlanCourse()
         {
             ID = id
         });
         if (pcourse != null)
         {
             //Plan planAttached = plans.Find(pcourse.planID);
             Plan planAttached = pcourse.plan;
             if (webSecurity.CurrentUser.IsInRole("Advisor") || planAttached.userID == webSecurity.CurrentUserId)
             {
                 if (pcourse.electiveListID != null)
                 {
                     List <DropdownCourse>     courses      = new List <DropdownCourse>();
                     List <ElectiveListCourse> elistCourses = pcourse.electiveList.courses.ToList();
                     foreach (ElectiveListCourse elistc in elistCourses)
                     {
                         DropdownCourse now = new DropdownCourse();
                         now.ID           = elistc.courseID;
                         now.courseHeader = elistc.course.courseHeader;
                         courses.Add(now);
                     }
                     if (pcourse.courseID != null)
                     {
                         ViewBag.courseID = new SelectList(courses.AsEnumerable(), "ID", "courseHeader", pcourse.courseID);
                     }
                     else
                     {
                         ViewBag.courseID = new SelectList(courses.AsEnumerable(), "ID", "courseHeader");
                     }
                 }
                 return(PartialView("PlanCourseFormPartial", new PlanCourseEdit(pcourse)));
             }
         }
     }
     return(HttpNotFound());
 }
        /// <summary>
        /// 从PlanCourse表中取出目标节点的PassedPath,这个PassedPath即是规划结果
        /// </summary>
        /// <returns></returns>
        private RoutePlanResult GetResult(PlanCourse planCourse, string destID)
        {
            PassedPath pPath = planCourse[destID];

            if (pPath.Weight == int.MaxValue)
            {
                RoutePlanResult result1 = new RoutePlanResult(null, int.MaxValue);
                return(result1);
            }


            Node[] passedNodeIDs = new Node[pPath.PassedNodeList.Count];

            for (int i = 0; i < passedNodeIDs.Length; i++)
            {
                passedNodeIDs[i] = pPath.PassedNodeList[i];
            }

            RoutePlanResult result = new RoutePlanResult(passedNodeIDs, pPath.Weight);

            return(result);
        }
Beispiel #11
0
 public ActionResult SaveCourseInfo(int ID, int?courseID, string notes)
 {
     if (ModelState.IsValid)
     {
         //PlanCourse pcourseAttached = planCourses.Find(ID);
         PlanCourse pcourseAttached = _planCourseProducer.Get(new PlanCourse()
         {
             ID = ID
         });
         //Plan planAttached = plans.Find(pcourseAttached.planID);
         Plan planAttached = pcourseAttached.plan;
         if (webSecurity.CurrentUser.IsInRole("Advisor") || planAttached.userID == webSecurity.CurrentUserId)
         {
             pcourseAttached.notes    = notes;
             pcourseAttached.courseID = courseID;
             //planCourses.UpdateValues(pcourseAttached, pcourseAttached);
             //planCourses.SaveChanges();
             _planCourseProducer.Update(pcourseAttached);
             return(new HttpStatusCodeResult(HttpStatusCode.OK));
         }
     }
     return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
 }
Beispiel #12
0
 public PlanCourseEdit(PlanCourse pcourse)
 {
     ID = pcourse.ID;
     if (pcourse.courseID != null)
     {
         courseID     = (int)pcourse.courseID;
         courseHeader = pcourse.course.courseHeader;
     }
     else
     {
         courseID     = null;
         courseHeader = null;
     }
     if (pcourse.electiveListID != null)
     {
         electiveListName = pcourse.electiveList.electiveListName;
     }
     else
     {
         electiveListName = null;
     }
     notes = pcourse.notes;
 }
Beispiel #13
0
        //从PlanCourse表中取出目标节点的PassedPath,这个PassedPath即是规划结果
        private RoutePlanResult GetResult(PlanCourse planCourse, int destID)
        {
            PassedPath pPath = planCourse[destID];

            if (pPath.Weight == int.MaxValue)
            {
                RoutePlanResult result1 = new RoutePlanResult();
                result1.Weight = int.MaxValue;
                return(result1);
            }

            List <UnitStar> passedStars = new List <UnitStar>();

            for (int i = 0; i < pPath.PassedIDList.Count; i++)
            {
                passedStars.Add(MogoWorld.m_dataMapManager.GetUnitStarById(pPath.PassedIDList[i]));
            }
            RoutePlanResult result = new RoutePlanResult();

            result.PassedStars = passedStars;
            result.Weight      = pPath.Weight;
            return(result);
        }
        public ActionResult MoveCourse(int ID, int semester, int order)
        {
            PlanCourse pcourseAttached = Request <PlanCourse> .GetItemByID(ID, "A", "B");

            Plan planAttached = Request <Plan> .GetItemByID(pcourseAttached.planID, "A", "B");

            if (webSecurity.CurrentUser.IsInRole("Advisor") || planAttached.userID == webSecurity.CurrentUserId)
            {
                if (Request <Semester> .GetItemByID(semester, "A", "B") != null)
                {
                    int oldSemester = pcourseAttached.semesterID;
                    int oldOrder    = pcourseAttached.order;
                    if (semester != oldSemester)
                    {
                        List <PlanCourse> moveUp = planAttached.planCourses.Where(s => s.semesterID == oldSemester).ToList();
                        foreach (PlanCourse pc in moveUp)
                        {
                            if (pc.order > oldOrder)
                            {
                                pc.order = pc.order - 1;
                                Request <PlanCourse> .Update(pc, pc, "A", "B");
                            }
                        }
                        List <PlanCourse> moveDown = planAttached.planCourses.Where(s => s.semesterID == semester).ToList();
                        foreach (PlanCourse pc in moveDown)
                        {
                            if (pc.order >= order)
                            {
                                pc.order = pc.order + 1;
                                Request <PlanCourse> .Update(pc, pc, "A", "B");
                            }
                        }
                    }
                    else
                    {
                        if (oldOrder < order)
                        {
                            List <PlanCourse> moveUp = planAttached.planCourses.Where(s => s.semesterID == oldSemester).ToList();
                            foreach (PlanCourse pc in moveUp)
                            {
                                if (pc.order > oldOrder && pc.order <= order)
                                {
                                    pc.order = pc.order - 1;
                                    Request <PlanCourse> .Update(pc, pc, "A", "B");
                                }
                            }
                        }
                        else if (oldOrder > order)
                        {
                            List <PlanCourse> moveDown = planAttached.planCourses.Where(s => s.semesterID == oldSemester).ToList();
                            foreach (PlanCourse pc in moveDown)
                            {
                                if (pc.order >= order && pc.order < order)
                                {
                                    pc.order = pc.order + 1;
                                    Request <PlanCourse> .Update(pc, pc, "A", "B");
                                }
                            }
                        }
                    }
                    pcourseAttached.semesterID = semester;
                    if (order < 7)
                    {
                        pcourseAttached.order = order;
                    }
                    else
                    {
                        pcourseAttached.order = 7;
                    }
                    Request <PlanCourse> .Update(pcourseAttached, pcourseAttached, "A", "B");

                    return(new HttpStatusCodeResult(HttpStatusCode.OK));
                }
            }
            return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
        }
 public Object Add()
 {
     try
     {
         if (request.Type == ModelType.Course)
         {
             Course value = (request as Request <Course>).RequestedMembers.First();
             return(new Response <Course>(request as Request <Course>, courses.AddAndSave(value)));
         }
         if (request.Type == ModelType.DegreeProgram)
         {
             DegreeProgram value = (request as Request <DegreeProgram>).RequestedMembers.First();
             return(new Response <DegreeProgram>(request as Request <DegreeProgram>, degreePrograms.AddAndSave(value)));
         }
         if (request.Type == ModelType.ElectiveCourse)
         {
             ElectiveCourse value = (request as Request <ElectiveCourse>).RequestedMembers.First();
             return(new Response <ElectiveCourse>(request as Request <ElectiveCourse>, electiveCourses.AddAndSave(value)));
         }
         if (request.Type == ModelType.ElectiveList)
         {
             ElectiveList value = (request as Request <ElectiveList>).RequestedMembers.First();
             return(new Response <ElectiveList>(request as Request <ElectiveList>, electiveLists.AddAndSave(value)));
         }
         if (request.Type == ModelType.ElectiveListCourse)
         {
             ElectiveListCourse value = (request as Request <ElectiveListCourse>).RequestedMembers.First();
             return(new Response <ElectiveListCourse>(request as Request <ElectiveListCourse>, electiveListCourses.AddAndSave(value)));
         }
         if (request.Type == ModelType.Plan)
         {
             Plan value = (request as Request <Plan>).RequestedMembers.First();
             return(new Response <Plan>(request as Request <Plan>, plans.AddAndSave(value)));
         }
         if (request.Type == ModelType.PlanCourse)
         {
             PlanCourse value = (request as Request <PlanCourse>).RequestedMembers.First();
             return(new Response <PlanCourse>(request as Request <PlanCourse>, planCourses.AddAndSave(value)));
         }
         if (request.Type == ModelType.PrerequisiteCourse)
         {
             PrerequisiteCourse value = (request as Request <PrerequisiteCourse>).RequestedMembers.First();
             return(new Response <PrerequisiteCourse>(request as Request <PrerequisiteCourse>, prerequisiteCourses.AddAndSave(value)));
         }
         if (request.Type == ModelType.RequiredCourse)
         {
             RequiredCourse value = (request as Request <RequiredCourse>).RequestedMembers.First();
             return(new Response <RequiredCourse>(request as Request <RequiredCourse>, requiredCourses.AddAndSave(value)));
         }
         if (request.Type == ModelType.Semester)
         {
             Semester value = (request as Request <Semester>).RequestedMembers.First();
             return(new Response <Semester>(request as Request <Semester>, semesters.AddAndSave(value)));
         }
     }
     catch
     {
         return(null);
     }
     return(null);
 }
Beispiel #16
0
        /// <summary>
        /// 从PlanCourse取出一个当前累计权值最小,并且没有被处理过的节点
        /// </summary>
        /// <param name="planCourse">迪克斯特拉(Dikastra)算法中,一个顶点到所有其他顶点的最短路径</param>
        /// <param name="originID">北京地铁所有路线的车站</param>
        /// <returns>从当前站点可达通路的权重最小的边的节点</returns>
        private Node GetMinWeightRudeNode(PlanCourse planCourse, string originID)
        {
            double weight = double.MaxValue;
            Node destNode = null;

            foreach (Node node in nodeList)
            {
                if (node.ID == originID)
                    continue;
                PassedPath pPath = planCourse[node.ID];
                if (pPath.BeProcessed)
                    continue;
                if (pPath.Weight < weight)
                {
                    weight = pPath.Weight;
                    destNode = node;

                }
            }
            return destNode;
        }
 public Object Update()
 {
     try
     {
         if (request.Type == ModelType.Course)
         {
             Course value   = (request as Request <Course>).RequestedMembers[0];
             Course replace = (request as Request <Course>).RequestedMembers[1];
             return(new Response <Course>(request as Request <Course>, courses.UpdateAndSave(value, replace)));
         }
         if (request.Type == ModelType.DegreeProgram)
         {
             DegreeProgram value   = (request as Request <DegreeProgram>).RequestedMembers[0];
             DegreeProgram replace = (request as Request <DegreeProgram>).RequestedMembers[1];
             return(new Response <DegreeProgram>(request as Request <DegreeProgram>, degreePrograms.UpdateAndSave(value, replace)));
         }
         if (request.Type == ModelType.ElectiveCourse)
         {
             ElectiveCourse value   = (request as Request <ElectiveCourse>).RequestedMembers[0];
             ElectiveCourse replace = (request as Request <ElectiveCourse>).RequestedMembers[1];
             return(new Response <ElectiveCourse>(request as Request <ElectiveCourse>, electiveCourses.UpdateAndSave(value, replace)));
         }
         if (request.Type == ModelType.ElectiveList)
         {
             ElectiveList value   = (request as Request <ElectiveList>).RequestedMembers[0];
             ElectiveList replace = (request as Request <ElectiveList>).RequestedMembers[1];
             return(new Response <ElectiveList>(request as Request <ElectiveList>, electiveLists.UpdateAndSave(value, replace)));
         }
         if (request.Type == ModelType.ElectiveListCourse)
         {
             ElectiveListCourse value   = (request as Request <ElectiveListCourse>).RequestedMembers[0];
             ElectiveListCourse replace = (request as Request <ElectiveListCourse>).RequestedMembers[1];
             return(new Response <ElectiveListCourse>(request as Request <ElectiveListCourse>, electiveListCourses.UpdateAndSave(value, replace)));
         }
         if (request.Type == ModelType.Plan)
         {
             Plan value   = (request as Request <Plan>).RequestedMembers[0];
             Plan replace = (request as Request <Plan>).RequestedMembers[1];
             return(new Response <Plan>(request as Request <Plan>, plans.UpdateAndSave(value, replace)));
         }
         if (request.Type == ModelType.PlanCourse)
         {
             PlanCourse value   = (request as Request <PlanCourse>).RequestedMembers[0];
             PlanCourse replace = (request as Request <PlanCourse>).RequestedMembers[1];
             return(new Response <PlanCourse>(request as Request <PlanCourse>, planCourses.UpdateAndSave(value, replace)));
         }
         if (request.Type == ModelType.PrerequisiteCourse)
         {
             PrerequisiteCourse value   = (request as Request <PrerequisiteCourse>).RequestedMembers[0];
             PrerequisiteCourse replace = (request as Request <PrerequisiteCourse>).RequestedMembers[1];
             return(new Response <PrerequisiteCourse>(request as Request <PrerequisiteCourse>, prerequisiteCourses.UpdateAndSave(value, replace)));
         }
         if (request.Type == ModelType.RequiredCourse)
         {
             RequiredCourse value   = (request as Request <RequiredCourse>).RequestedMembers[0];
             RequiredCourse replace = (request as Request <RequiredCourse>).RequestedMembers[1];
             return(new Response <RequiredCourse>(request as Request <RequiredCourse>, requiredCourses.UpdateAndSave(value, replace)));
         }
         if (request.Type == ModelType.Semester)
         {
             Semester value   = (request as Request <Semester>).RequestedMembers[0];
             Semester replace = (request as Request <Semester>).RequestedMembers[1];
             return(new Response <Semester>(request as Request <Semester>, semesters.UpdateAndSave(value, replace)));
         }
     }
     catch
     {
         return(null);
     }
     return(null);
 }
Beispiel #18
0
        /// <summary>
        /// 从PlanCourse表中取出目标及诶单的PassedPath,这个PassedPath即是规划结果
        /// </summary>
        /// <param name="planCourse">迪克斯特拉(Dikastra)算法中,一个顶点到所有其他顶点的最短路径</param>
        /// <param name="destID">目标车站ID</param>
        /// <returns>到达目的站点的路线</returns>
        private RoutePlanResult GetResult(PlanCourse planCourse, string destID)
        {
            PassedPath pPath = planCourse[destID];

            if (pPath.Weight == int.MaxValue)
            {
                RoutePlanResult result1 = new RoutePlanResult(null, int.MaxValue);
                return result1;
            }
            string[] passedNodeIDs = new string[pPath.PassedIDList.Count + 1];
            for (int i = 0; i < passedNodeIDs.Length - 1; i++)
            {
                passedNodeIDs[i] = pPath.PassedIDList[i].ToString();
            }
            passedNodeIDs[passedNodeIDs.Length - 1] = pPath.CurNodeID;

            RoutePlanResult result = new RoutePlanResult(passedNodeIDs, pPath.Weight);

            return result;
        }
Beispiel #19
0
 PlanCourse _planCourseQueue_Create(PlanCourse data)
 {
     return(Create(data));
 }
Beispiel #20
0
 void _planCourseQueue_Update(PlanCourse data)
 {
     Update(data);
 }
Beispiel #21
0
 void _planCourseQueue_Remove(PlanCourse data)
 {
     Remove(data);
 }
Beispiel #22
0
        public ActionResult MoveCourse(int ID, int semester, int order)
        {
            //PlanCourse pcourseAttached = planCourses.Find(ID);
            PlanCourse pcourseAttached = _planCourseProducer.Get(new PlanCourse {
                ID = ID
            });
            //Plan planAttached = plans.Find(pcourseAttached.planID);
            Plan planAttached = pcourseAttached.plan;

            if (webSecurity.CurrentUser.IsInRole("Advisor") || planAttached.userID == webSecurity.CurrentUserId)
            {
                //if (semesters.Find(semester) != null)
                if (_semesterProducer.Get(new Semester()
                {
                    ID = semester
                }) != null)
                {
                    int oldSemester = pcourseAttached.semesterID;
                    int oldOrder    = pcourseAttached.order;
                    if (semester != oldSemester)
                    {
                        List <PlanCourse> moveUp = planAttached.planCourses.Where(s => s.semesterID == oldSemester).ToList();
                        //List<PlanCourse> moveUp =
                        foreach (PlanCourse pc in moveUp)
                        {
                            if (pc.order > oldOrder)
                            {
                                pc.order = pc.order - 1;
                                //planCourses.UpdateValues(pc, pc);
                                _planCourseProducer.Update(pc);
                            }
                        }
                        List <PlanCourse> moveDown = planAttached.planCourses.Where(s => s.semesterID == semester).ToList();
                        foreach (PlanCourse pc in moveDown)
                        {
                            if (pc.order >= order)
                            {
                                pc.order = pc.order + 1;
                                //planCourses.UpdateValues(pc, pc);
                                _planCourseProducer.Update(pc);
                            }
                        }
                    }
                    else
                    {
                        if (oldOrder < order)
                        {
                            List <PlanCourse> moveUp = planAttached.planCourses.Where(s => s.semesterID == oldSemester).ToList();
                            foreach (PlanCourse pc in moveUp)
                            {
                                if (pc.order > oldOrder && pc.order <= order)
                                {
                                    pc.order = pc.order - 1;
                                    //planCourses.UpdateValues(pc, pc);
                                    _planCourseProducer.Update(pc);
                                }
                            }
                        }
                        else if (oldOrder > order)
                        {
                            List <PlanCourse> moveDown = planAttached.planCourses.Where(s => s.semesterID == oldSemester).ToList();
                            foreach (PlanCourse pc in moveDown)
                            {
                                if (pc.order >= order && pc.order < order)
                                {
                                    pc.order = pc.order + 1;
                                    //planCourses.UpdateValues(pc, pc);
                                    _planCourseProducer.Update(pc);
                                }
                            }
                        }
                    }
                    pcourseAttached.semesterID = semester;
                    if (order < 7)
                    {
                        pcourseAttached.order = order;
                    }
                    else
                    {
                        pcourseAttached.order = 7;
                    }
                    //planCourses.UpdateValues(pcourseAttached, pcourseAttached);
                    //planCourses.SaveChanges();
                    _planCourseProducer.Update(pcourseAttached);
                    return(new HttpStatusCodeResult(HttpStatusCode.OK));
                }
            }
            return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
        }
Beispiel #23
0
        private void ChangeDegreeProgram(Plan plan)
        {
            //List<PlanCourse> plans = planCourses.Where(i => i.planID == plan.ID.ToList();
            List <PlanCourse> plans = _planCourseProducer.GetAll().Where(pc => pc.planID == plan.ID).ToList();

            foreach (PlanCourse planCourse in plans)
            {
                _planCourseProducer.Remove(planCourse);
                //planCourses.Remove(planCourse);
                //planCourses.SaveChanges();
            }
            Dictionary <int, int> semesterOrders = new Dictionary <int, int>();
            Dictionary <int, int> semesterMap    = new Dictionary <int, int>();
            int nowSem = 1;
            //List<Semester> semesterList = semesters.Where(i => i.ID >= plan.semesterID).ToList();
            List <Semester> semesterList = _semesterProducer.GetAll().Where(s => s.ID >= plan.semesterID).ToList();

            foreach (Semester sem in semesterList)
            {
                if (sem.standard == true)
                {
                    semesterMap.Add(nowSem, sem.ID);
                    semesterOrders.Add(nowSem, 0);
                    nowSem++;
                }
            }

            List <RequiredCourse> requirements = plan.degreeProgram.requiredCourses.ToList();

            foreach (RequiredCourse req in requirements)
            {
                PlanCourse pcourse = new PlanCourse();
                pcourse.planID = plan.ID;
                int order = semesterOrders[req.semester];
                pcourse.order = order;
                semesterOrders[req.semester] = order + 1;
                pcourse.semesterID           = semesterMap[req.semester];
                pcourse.courseID             = req.courseID;
                pcourse.credits = req.course.courseHours;
                _planCourseProducer.Create(pcourse);
                //planCourses.Add(pcourse);
                //planCourses.SaveChanges();
            }

            List <ElectiveCourse> elects = plan.degreeProgram.electiveCourses.ToList();

            foreach (ElectiveCourse elect in elects)
            {
                PlanCourse pcourse = new PlanCourse();
                pcourse.planID = plan.ID;
                int order = semesterOrders[elect.semester];
                pcourse.order = order;
                semesterOrders[elect.semester] = order + 1;
                pcourse.semesterID             = semesterMap[elect.semester];
                pcourse.electiveListID         = elect.electiveListID;
                pcourse.credits = elect.credits.ToString();
                _planCourseProducer.Create(pcourse);
                //planCourses.Add(pcourse);
                //planCourses.SaveChanges();
            }
        }