Beispiel #1
0
        /// <summary>
        /// Fixes the type arguments of a generic method implementing a MatLab function.
        /// </summary>
        /// <param name="method">The generic method for a MatLab function.</param>
        /// <returns>A sequence of instantiation with the different MatLab types supported by the method.</returns>
        public static IEnumerable <MethodInfo> InstantiateGenericMethod(MethodInfo method)
        {
            Contract.Requires(method != null && method.IsGenericMethodDefinition);

            var genericArguments = method.GetGenericArguments();

            Contract.Assert(genericArguments.Length == 1);

            var genericMType = genericArguments[0].GetCustomAttribute <GenericMTypeAttribute>();

            if (genericMType == null)
            {
                var message = string.Format(CultureInfo.InvariantCulture,
                                            "Generic method {0} must have generic parameter attribute {1} for instantiation as MatLab functions.",
                                            method.Name, typeof(GenericMTypeAttribute).Name);
                throw new ArgumentException(message, "method");
            }

            for (int i = 1; i < 0x40000000; i <<= 1)
            {
                var classKind = (MClassKinds)i;
                if ((classKind & genericMType.ClassKinds) == 0)
                {
                    continue;
                }

                var @class = MClass.FromKind(classKind);
                yield return(method.MakeGenericMethod(@class.CliType));

                if (genericMType.AllowComplex && (classKind & MClassKinds.SupportsComplexMask) != 0)
                {
                    yield return(method.MakeGenericMethod(((MPrimitiveClass)@class).Complex.CliType));
                }
            }
        }
Beispiel #2
0
        public MClass GetDeepCopy()
        {
            MClass deepCopy = new MClass();

            deepCopy.classCode    = this.classCode;
            deepCopy.classTeacher = this.classTeacher;
            deepCopy.classWeekDay = this.classWeekDay;
            deepCopy.classTime    = this.classTime;
            deepCopy.type         = this.type;
            deepCopy.genre        = this.genre;
            deepCopy.className    = this.className;

            return(deepCopy);
        }
        public string InsertNewPlayer(string name, int score)
        {
            try
            {
                string db_path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
                                              "Game_DataBase.sqlite");
                var db   = new SQLiteConnection(db_path);
                var item = new MClass();
                item.Name  = name;
                item.Score = score;

                db.Insert(item);
                return("Data Saved");
            }
            catch (Exception ex)
            {
                return("Error : " + ex.Message);
            }
        }
        public string DeletePlayer(int id)
        {
            try
            {
                string db_path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
                                              "Game_DataBase.sqlite");
                var db   = new SQLiteConnection(db_path);
                var item = new MClass();
                item.Id = id;


                db.Delete(item);
                return("Daleted");
            }
            catch (Exception ex)
            {
                return("Error : " + ex.Message);
            }
        }
Beispiel #5
0
        private static Variable ReadVariable(XElement variableElement)
        {
            var name = (string)variableElement.Attribute("name");

            MType type      = null;
            var   className = (string)variableElement.Attribute("class");

            if (className != null)
            {
                type = MClass.FromName((string)className);
                if (type.IsPrimitive)
                {
                    // If we don't have complex information, then the variable's value
                    // is sometimes real and sometimes complex, which we approximate
                    // by making it always complex, though this can be incorrect.
                    var complex = (bool?)variableElement.Attribute("complex") ?? true;
                    if (complex)
                    {
                        type = ((MPrimitiveClass)type).Complex;
                    }
                }
            }

            bool scalar   = ((bool?)variableElement.Attribute("scalar")).GetValueOrDefault();
            bool initOnly = ((bool?)variableElement.Attribute("final")).GetValueOrDefault();

            string constantString = (string)variableElement.Attribute("constant");
            object constantValue  = null;

            if (constantString != null)
            {
                if (type.IsReal && type.IsNumeric)
                {
                    constantValue = double.Parse(constantString, CultureInfo.InvariantCulture);
                }
                // TODO: Implement strings
            }

            var staticRepr = new MRepr(type, scalar ? MStructuralClass.Scalar : MStructuralClass.FullArray);

            return(new Variable(name, staticRepr, constantValue, initOnly));
        }
Beispiel #6
0
 private void EmitLoadConstant(double value, MClass mclass)
 {
     if (mclass.IsInteger)
     {
         // IntOK'd variable
         if (mclass == MClass.Int64)
         {
             Contract.Assert((long)value == value);
             cil.LoadInt64((long)value);
         }
         else if (mclass == MClass.Int32)
         {
             Contract.Assert((int)value == value);
             cil.LoadInt32((int)value);
         }
     }
     else if (mclass == MClass.Double)
     {
         cil.LoadFloat64(value);
     }
 }
        public string UpdateScore(int id, string name, int score)
        {
            try
            {
                string db_path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
                                              "Game_DataBase.sqlite");
                var db   = new SQLiteConnection(db_path);
                var item = new MClass();

                item.Id    = id;
                item.Name  = name;
                item.Score = score;

                db.Update(item);
                return("Updated...");
            }
            catch (Exception ex)
            {
                return("Error : " + ex.Message);
            }
        }
        //Sắp xếp tất cả các lịch có thể
        public void GetAllPossibleArrangement(List <Subject> subjects, ref List <List <List <MClass> > > results, List <List <MClass> > currentWeek, int index, string genre)
        {
            var checkedEnglishClasses = new List <MClass>();

            for (int mclassCounter = 0; mclassCounter < subjects[index].classes.Count; mclassCounter++)
            {
                var mclass = subjects[index].classes[mclassCounter];
                if (mclass.genre != genre || checkedEnglishClasses.Contains(mclass))
                {
                    continue;
                }
                List <List <MClass> > cloneCurrentWeek = null;
                //Nếu dãy hiện tại là null, khởi tạo 1 dãy mới
                if (currentWeek == null)
                {
                    cloneCurrentWeek = new List <List <MClass> >();

                    for (int i = 0; i < 9; i++)
                    {
                        List <MClass> day = new List <MClass>()
                        {
                            null, null, null, null, null, null, null, null, null, null, null
                        };
                        cloneCurrentWeek.Add(day);
                    }
                }
                else
                {
                    cloneCurrentWeek = CopyWeek(currentWeek);
                }

                //Bỏ qua các lớp thực hành
                if (mclass.type == "TH")
                {
                    continue;
                }

                else
                {
                    Console.WriteLine(mclass.classCode);
                    //Nếu thời gian là *, thêm lớp vào dãy hiện tại tại vị trí số 8 (không thuộc ngày nào cả)
                    if (mclass.classTime == "*" || mclass.classWeekDay == "*")
                    {
                        var currentWeekDay = cloneCurrentWeek[8];
                        var mclassTime     = mclass.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList();

                        for (int time = 0; time < mclassTime.Count; time++)
                        {
                            currentWeekDay.Add(mclass);
                        }
                    }

                    else
                    {
                        //Ngày học của lớp đang xét
                        var mclassWeekDay = Int32.Parse(mclass.classWeekDay);
                        //Thời gian học của lớp đang xét
                        var mclassTime = mclass.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList();
                        //Lấy ngày học đó trong chuỗi
                        var currentWeekDay = cloneCurrentWeek[mclassWeekDay];

                        //Tìm xem có lớp thực hành nào tương ứng với lớp đang xét không
                        var THmclasses = subjects[index].classes.Where(item => item.classCode.Substring(0, item.classCode.Length - 2) == mclass.classCode);
                        Console.WriteLine("Class time: " + mclass.classTime);
                        Console.WriteLine("Class day: " + mclass.classWeekDay);
                        //Nếu đây là vòng lặp đầu tiên, thêm lớp vào dãy mà không cần xét điều kiện
                        if (index == subjects.Count - 1)
                        {
                            //Xét lớp Anh văn, có thể có nhiều tiết 1 tuần
                            MClass mclass2 = null;
                            if (mclass.classCode.Substring(0, 3).Equals("ENG"))
                            {
                                Console.WriteLine("This is English");
                                for (int mclass2Counter = 0; mclass2Counter < subjects[index].classes.Count; mclass2Counter++)
                                {
                                    if ((subjects[index].classes[mclass2Counter].classCode == mclass.classCode) &&
                                        (subjects[index].classes[mclass2Counter] != mclass))
                                    {
                                        mclass2 = subjects[index].classes[mclass2Counter];
                                        break;
                                    }
                                }
                            }
                            //Gán giá trị các tiết học của lớp đang xét vào ngày học
                            for (int time = 0; time <= mclassTime.Count - 1; time++)
                            {
                                var classTime = mclassTime[time];
                                currentWeekDay[classTime] = mclass;
                            }
                            //Xét tiết học thứ 2 của lớp Anh văn nếu tồn tại
                            if (mclass2 != null)
                            {
                                Console.WriteLine("Class 2 available");
                                checkedEnglishClasses.Add(mclass2);
                                //Ngày học của lớp đang xét
                                var mclass2WeekDay = Int32.Parse(mclass2.classWeekDay);
                                //Thời gian học của lớp đang xét
                                var mclass2Time = mclass2.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList();
                                //Lấy ngày học đó trong chuỗi
                                var current2WeekDay = cloneCurrentWeek[mclass2WeekDay];

                                //Gán giá trị các tiết học của lớp đang xét vào ngày học
                                for (int time = 0; time <= mclass2Time.Count - 1; time++)
                                {
                                    var class2Time = mclass2Time[time];
                                    current2WeekDay[class2Time] = mclass2;
                                }
                            }
                            Visualization(cloneCurrentWeek);

                            if (THmclasses.Count() > 0)
                            {
                                foreach (MClass THmclass in THmclasses)
                                {
                                    var THCurrentWeek = CopyWeek(cloneCurrentWeek);
                                    if (THmclass.classTime == "*")
                                    {
                                        THCurrentWeek[8].Add(THmclass);
                                    }
                                    else
                                    {
                                        //Thêm ngày TH vào dãy
                                        var THmclassWeekDay  = Int32.Parse(THmclass.classWeekDay);
                                        var THmclassTime     = THmclass.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList();
                                        var THcurrentWeekDay = THCurrentWeek[THmclassWeekDay];

                                        for (int time = 0; time <= THmclassTime.Count - 1; time++)
                                        {
                                            var classTime = THmclassTime[time];
                                            THcurrentWeekDay[classTime] = THmclass;
                                        }
                                    }
                                    GetAllPossibleArrangement(subjects, ref results, THCurrentWeek, index - 1, genre);
                                }
                            }
                            else
                            {
                                GetAllPossibleArrangement(subjects, ref results, cloneCurrentWeek, index - 1, genre);
                            }
                        }

                        //Nếu đang xét các vòng lặp tiếp theo, cần xét điều kiện để thêm lớp vào dãy
                        else
                        {
                            var mclassTimeIsAvailable   = true;
                            var THmclassTimeIsAvailable = true;

                            //Kiểm tra xem có thể xếp lớp vào chuỗi đc không
                            for (int time = 0; time <= mclassTime.Count - 1; time++)
                            {
                                var classTime = mclassTime[time];
                                if (currentWeekDay[classTime] != null)
                                {
                                    mclassTimeIsAvailable = false;
                                    break;
                                }
                            }
                            if (!mclassTimeIsAvailable)
                            {
                                continue;
                            }
                            else
                            {
                                Console.WriteLine("This class is available");
                                //Gán giá trị các tiết học của lớp đang xét vào ngày học
                                for (int time = 0; time <= mclassTime.Count - 1; time++)
                                {
                                    var classTime = mclassTime[time];
                                    currentWeekDay[classTime] = mclass;
                                }
                                //Xét lớp Anh văn, có thể có nhiều tiết 1 tuần
                                MClass mclass2 = null;
                                if (mclass.classCode.Substring(0, 3).Equals("ENG"))
                                {
                                    Console.WriteLine("This is English");
                                    for (int mclass2Counter = 0; mclass2Counter < subjects[index].classes.Count; mclass2Counter++)
                                    {
                                        if ((subjects[index].classes[mclass2Counter].classCode == mclass.classCode) &&
                                            (subjects[index].classes[mclass2Counter] != mclass))
                                        {
                                            mclass2 = subjects[index].classes[mclass2Counter];
                                            break;
                                        }
                                    }
                                }

                                //Nếu ngày học Anh văn thứ 2 tồn tại
                                if (mclass2 != null)
                                {
                                    var mclass2TimeIsAvailable = true;
                                    Console.WriteLine("ENG Class 2 exists");
                                    checkedEnglishClasses.Add(mclass2);
                                    //Ngày học của lớp đang xét
                                    var mclass2WeekDay = Int32.Parse(mclass2.classWeekDay);
                                    //Thời gian học của lớp đang xét
                                    var mclass2Time = mclass2.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList();
                                    //Lấy ngày học đó trong chuỗi
                                    var current2WeekDay = cloneCurrentWeek[mclass2WeekDay];

                                    //Kiểm tra xem có thể xếp lớp vào chuỗi đc không
                                    for (int time = 0; time <= mclass2Time.Count - 1; time++)
                                    {
                                        var class2Time = mclass2Time[time];
                                        if (current2WeekDay[class2Time] != null)
                                        {
                                            mclass2TimeIsAvailable = false;
                                            break;
                                        }
                                    }
                                    if (!mclass2TimeIsAvailable)
                                    {
                                        continue;
                                    }

                                    Console.WriteLine("ENG Class 2 is available");
                                    //Gán giá trị các tiết học của lớp đang xét vào ngày học
                                    for (int time = 0; time <= mclass2Time.Count - 1; time++)
                                    {
                                        var class2Time = mclass2Time[time];
                                        current2WeekDay[class2Time] = mclass2;
                                    }
                                }


                                Visualization(cloneCurrentWeek);
                                //Xét lớp thực hành
                                if (THmclasses.Count() > 0)
                                {
                                    foreach (MClass THmclass in THmclasses)
                                    {
                                        var THCurrentWeek = CopyWeek(cloneCurrentWeek);
                                        Console.WriteLine("TH class: " + THmclass.classCode);
                                        if (THmclass.classTime == "*")
                                        {
                                            THCurrentWeek[8].Add(THmclass);
                                            if (index != 0)
                                            {
                                                GetAllPossibleArrangement(subjects, ref results, THCurrentWeek, index - 1, genre);
                                            }
                                            else
                                            {
                                                Console.WriteLine("add to results");
                                                results.Add(THCurrentWeek);
                                            }
                                        }

                                        //Kiểm tra xem có thể xếp lớp vào chuỗi đc không

                                        else
                                        {
                                            var THmclassWeekDay  = Int32.Parse(THmclass.classWeekDay);
                                            var THmclassTime     = THmclass.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList();
                                            var THcurrentWeekDay = THCurrentWeek[THmclassWeekDay];

                                            Console.WriteLine("TH Class time: " + THmclass.classTime);
                                            Console.WriteLine("TH Class day: " + THmclass.classWeekDay);

                                            for (int time = 0; time <= THmclassTime.Count - 1; time++)
                                            {
                                                int classTime = THmclassTime[time];
                                                if (THcurrentWeekDay[classTime] != null)
                                                {
                                                    THmclassTimeIsAvailable = false;
                                                    break;
                                                }
                                            }

                                            if (THmclassTimeIsAvailable)
                                            {
                                                Console.WriteLine("This TH class is available");

                                                for (int time = 0; time <= THmclassTime.Count - 1; time++)
                                                {
                                                    THcurrentWeekDay[THmclassTime[time]] = THmclass;
                                                }

                                                Visualization(THCurrentWeek);

                                                if (index != 0)
                                                {
                                                    GetAllPossibleArrangement(subjects, ref results, THCurrentWeek, index - 1, genre);
                                                }
                                                else
                                                {
                                                    Console.WriteLine("add to results");
                                                    results.Add(THCurrentWeek);
                                                }
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    if (index != 0)
                                    {
                                        GetAllPossibleArrangement(subjects, ref results, cloneCurrentWeek, index - 1, genre);
                                    }
                                    else
                                    {
                                        Console.WriteLine("add to results");
                                        results.Add(cloneCurrentWeek);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        //Đọc file excel danh sách lớp để tạo thành object
        public Root ReadExcelFile()
        {
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
            using (var stream = System.IO.File.Open("/test.xlsx", FileMode.Open, FileAccess.Read))
            {
                //Object chứa tất cả dữ liệu
                Root root = new Root();
                using (var reader = ExcelReaderFactory.CreateReader(stream))
                {
                    do
                    {
                        while (reader.Read())
                        {
                            var subjectCode = reader.GetValue(1);
                            if (subjectCode != null)
                            {
                                // Dữ liệu lớp
                                MClass classData = new MClass();
                                classData.classCode    = reader.GetValue(2).ToString();
                                classData.classTeacher = reader.GetValue(5) != null?reader.GetValue(5).ToString() : "*";

                                classData.classWeekDay = reader.GetValue(10) != null?reader.GetValue(10).ToString() : "*";

                                classData.classTime = reader.GetValue(11) != null?reader.GetValue(11).ToString() : "*";

                                classData.className = reader.GetValue(3) != null?reader.GetValue(3).ToString() : "*";

                                if (classData.classCode.Substring(classData.classCode.Length - 2) == ".1" || classData.classCode.Substring(classData.classCode.Length - 2) == ".2")
                                {
                                    classData.type = "TH";
                                }
                                else
                                {
                                    classData.type = "LT";
                                }

                                if (classData.type == "LT")
                                {
                                    if (classData.classCode.Substring(classData.classCode.Length - 2) == "TT")
                                    {
                                        classData.genre = "TT";
                                    }
                                    else if ((classData.classCode.Substring(classData.classCode.Length - 3) == "CLC") || (
                                                 classData.classCode.Substring(classData.classCode.Length - 2) == "CL"))
                                    {
                                        classData.genre = "CLC";
                                    }
                                    else if (classData.classCode.Substring(classData.classCode.Length - 2) == "TN")
                                    {
                                        classData.genre = "TN";
                                    }
                                    else
                                    {
                                        classData.genre = "CQ";
                                    }
                                }

                                // Thêm dữ liệu lớp học
                                Subject subjectData = null;
                                if (root.subjects == null)
                                {
                                    subjectData = new Subject();

                                    List <MClass> classes = new List <MClass>();
                                    classes.Add(classData);
                                    subjectData.classes = classes;

                                    List <Subject> subjects = new List <Subject>();
                                    subjects.Add(subjectData);
                                    root.subjects = subjects;
                                }

                                //Tìm xem mã môn học đã tồn tại chưa, nếu có thì thêm lớp vào môn học có sẵn
                                for (int i = 0; i < root.subjects.Count; i++)
                                {
                                    if (root.subjects[i].subjectCode == subjectCode.ToString())
                                    {
                                        subjectData = root.subjects[i];
                                        subjectData.classes.Add(classData);
                                        root.subjects[i] = subjectData;
                                        break;
                                    }
                                }

                                //Nếu mã môn học chưa tồn tại, tạo môn học mới
                                if (subjectData == null)
                                {
                                    subjectData             = new Subject();
                                    subjectData.subjectCode = subjectCode.ToString();
                                    List <MClass> classes = new List <MClass>();
                                    classes.Add(classData);
                                    subjectData.classes = classes;

                                    var subjects = root.subjects;
                                    subjects.Add(subjectData);
                                }
                            }
                        }
                    } while (reader.NextResult());
                }
                return(root);
            }
        }