Exemplo n.º 1
0
        private static string ExtractAnswers(string[] answers, ref ExamsRow r)
        {
            int AIDcorrecto = Convert.ToInt32(answers[1]); //toma la respuesta correcta

            answers = answers[0].Split(SEP);               //the array of answers ID

            QuestionsRow q = r.QuestionsRow;

            IEnumerable <AnswersRow> answ = q.GetAnswersRows();
            int    option = 0;
            string examen;

            examen = string.Empty;
            foreach (string s in answers)
            {
                char       letra = Tools.Alpha[option];
                int        aid   = Convert.ToInt32(s);
                AnswersRow a     = answ.FirstOrDefault(o => o.AID == aid); //selectivamente en el mismo orden en que fue generada

                string respuesta = a.Answer;
                examen += letra;
                examen += ") " + respuesta + "\n"; //respuesta
                option++;
            }

            return(examen);
        }
Exemplo n.º 2
0
        /// <summary>
        /// PERHAPS THE MOST IKPORTAN, WHERE QAS ARE GENERATED AND PASSWORDS TOO
        /// </summary>
        /// <param name="exams">         </param>
        /// <param name="pr">            </param>
        /// <param name="questionAnswer"></param>
        /// <returns></returns>
        private static string[] makeQAs(ref IEnumerable <ExamsRow> exams, ref PreferencesRow pr, out IList <string[]> questionAnswer)
        {
            bool   showPoints  = pr.showPoints;
            double pointFactor = pr.Factor;

            questionAnswer = new List <string[]>();

            int pregunta   = 1;
            int claveCount = 1;

            string Clave;
            string questionWeight;
            string qidString;

            Clave          = string.Empty;
            questionWeight = string.Empty;
            qidString      = string.Empty;

            foreach (DataRow row in exams)
            {
                string[] qAns   = new string[2];
                ExamsRow r      = (ExamsRow)row;
                string   examen = string.Empty;

                examen  = ExtractQuestionAndWeight(ref questionWeight, ref qidString, ref pregunta, showPoints, pointFactor, ref r);
                qAns[0] = examen;

                string[] answers = ExtractAnswersArray(ref r);

                examen  = ExtractAnswers(answers, ref r);
                qAns[1] = examen;

                ExtractKey(ref Clave, ref claveCount, answers, ref r);

                questionAnswer.Add(qAns);
            }

            if (qidString[qidString.Length - 1].Equals(SEP))
            {
                qidString = qidString.Substring(0, qidString.Length - 1); //erase last separator
            }

            if (questionWeight[questionWeight.Length - 1].Equals(SEP))
            {
                questionWeight = questionWeight.Substring(0, questionWeight.Length - 1); //erase last separator
            }

            questionWeight += SEP2.ToString() + pointFactor.ToString(); //KEEP THE FACTOR IN THE STRING!!!

            if (Clave[Clave.Length - 1].Equals(SEP))
            {
                Clave = Clave.Substring(0, Clave.Length - 1); //erase last separator
            }

            ///IMPORTANT CUMJULATIVE INFO
            return(new string[3] {
                Clave, questionWeight, qidString
            });                                                        // LAnswer , LQuestion,
        }
Exemplo n.º 3
0
        /// <summary>
        /// MAIN FILE FOR GENERATING AN EXAM
        /// </summary>
        /// <param name="p"></param>
        private ExamsListRow doOneExam(ref PreferencesRow p)
        {
            inter.Status = Resources.Creando + inter.IdB.Questions.Count + Resources.PregAleatorias;

            Func <DB.QuestionsRow, bool> selector = x =>
            {
                bool?ok = x.TopicsRow?.UseIt;
                if (ok == null)
                {
                    ok = false;
                }
                return((bool)ok);
            };
            ///RANDOMNIZE RAW QUESTIONS
            IEnumerable <DB.QuestionsRow> questions = inter.IdB.Questions.Where(selector).ToArray(); //toma todas las preguntas

            if (questions.Count() == 0)
            {
                inter.Status = "No hay preguntas seleccionadas";
                return(null);
            }

            int times = 3;

            questions = Tools.RandomnizeStringsTimes(questions, times);

            IList <ExamsRow> exams = new List <ExamsRow>(); //todas las preguntas randomnizadas seran guardadas primero en esta lista

            foreach (QuestionsRow q in questions)
            {
                ExamsRow er = inter.IdB.Exams.NewExamsRow(); //crea rows pero no los metas en la tabla
                er.QID = q.QID;                              //dales el id de la pregunta
                exams.Add(er);                               //agregalos a la lista
            }

            inter.Status = Resources.Filtrando;

            IEnumerable <ExamsRow> join = weightThem(ref p, ref exams); //not re-ordered // preguntas seleccionadas y filtradas

            Application.DoEvents();

            inter.Status = Resources.OrderAleatorio; // de las preguntas del examen ya pesadas (filtradaS)

            join = Tools.RandomnizeStringsTimes(join, times);

            inter.Status = Resources.Seleccionando + join.Count() + Resources.PregAleatorias;
            Application.DoEvents();

            foreach (ExamsRow ex in join)
            {
                inter.IdB.Exams.AddExamsRow(ex); //agregalas a la tabla para salvarlas

                DB.QuestionsRow          q    = ex.QuestionsRow;
                IEnumerable <AnswersRow> answ = q.GetAnswersRows();
                ///RANDOMIZE RAW ASWERS
                answ = Tools.RandomnizeStringsTimes(answ, times);
                //CREATE EXAM QUESTION CODE! AIDSTRING
                string code = CreateExamQuestionCode(ref answ);
                ex.AIDString = code;
                ExamsRow auxiliar = ex;
                MakeTableBytes(ref auxiliar, examsPath);
            }

            DB.TAM.ExamsTableAdapter.Update(inter.IdB.Exams);
            Application.DoEvents();

            ExamsListRow ls = inter.IdB.AddExam(ref p);

            // Image img = Tools.CreateQRCode(ls.GUID, qrSizeDB); ls.QRCode = Tools.imageToByteArray(img);
            DB.TAM.ExamsListTableAdapter.Update(inter.IdB.ExamsList);
            Application.DoEvents();
            //este orden es importante

            foreach (DB.ExamsRow re in join)
            {
                re.EID = ls.EID;                              //ahora asocia las preguntas a cada examen generado
            }
            DB.TAM.ExamsTableAdapter.Update(inter.IdB.Exams);
            Application.DoEvents();

            return(ls);
        }
Exemplo n.º 4
0
        private static string[] ExtractAnswersArray(ref ExamsRow r)
        {
            string[] answers = r.AIDString.Split(SEP2); ///separates de correct value AID, from the array of answers AIDs

            return(answers);
        }
Exemplo n.º 5
0
        private static void MakeTableBytes <T>(ref T l, string examPath)
        {
            Type tipo = l.GetType();

            byte[] arr2 = null;
            // string afile = string.Empty;

            if (tipo.Equals(typeof(ExamsListRow)))
            {
                ExamsListRow ls = l as ExamsListRow;

                IEnumerable <ExamsRow> rows = ls.GetExamsRows();

                ExamsDataTable exdt = new ExamsDataTable();
                foreach (var item in rows)
                {
                    exdt.ImportRow(item);
                }

                // afile = ExasmPath + ls.EID.ToString();

                arr2     = Tables.MakeDTBytes(ref exdt, examPath);
                ls.EData = arr2;
            }
            else if (tipo.Equals(typeof(ExamsRow)))
            {
                //SAVE COPY OF TABLE

                ExamsRow     ex = l as ExamsRow;
                QuestionsRow q  = ex.QuestionsRow;
                // afile = ExasmPath + ex.QID.ToString(); IEnumerable<DB.QuestionsRow> shortQlist =
                // new List<DB.QuestionsRow>(); ((IList<DB.QuestionsRow>)shortQlist).Add(ex.QuestionsRow);
                QuestionsDataTable qdt = new QuestionsDataTable();
                qdt.ImportRow(q);
                byte[] qarray = Tables.MakeDTBytes(ref qdt, examPath);
                ex.QData = qarray;
                Dumb.FD(ref qdt);

                AnswersDataTable         adt  = new AnswersDataTable();
                IEnumerable <AnswersRow> answ = q.GetAnswersRows();
                foreach (var item in answ)
                {
                    adt.ImportRow(item);
                }
                // afile = ExasmPath + ex.QueToString() + ".xml";
                arr2     = Tables.MakeDTBytes(ref adt, examPath);
                ex.AData = arr2;
                Dumb.FD(ref adt);
            }
            else if (tipo.Equals(typeof(PreferencesRow)))
            {
                PreferencesRow p = l as PreferencesRow;              //SAVE A COPY OF EXAMS LISTS
                IEnumerable <DB.ExamsListRow> rows = p.GetExamsListRows();

                ExamsListDataTable dt = new ExamsListDataTable();
                foreach (var item in rows)
                {
                    dt.ImportRow(item);
                }

                // afile = ExasmPath + p.PID.ToString() + ".xml";
                arr2     = Tables.MakeDTBytes(ref dt, examPath);
                p.ELData = arr2;

                Dumb.FD(ref dt);
            }
        }
Exemplo n.º 6
0
        private static string ExtractQuestionAndWeight(ref string questionWeight, ref string qidString, ref int pregunta, bool showPoints, double pointFactor, ref ExamsRow r)
        {
            string       examen;
            QuestionsRow q = r.QuestionsRow;

            qidString += r.QID.ToString() + SEP.ToString();
            Decimal askValue = Convert.ToDecimal(q.Weight * pointFactor);
            string  weight   = Decimal.Round(askValue, 3).ToString();

            examen = pregunta.ToString() + "- " + q.Question; //pregunta

            if (showPoints)
            {
                examen += "\t( " + PUNTOS + ": " + weight + " )";
            }
            examen += "\n";
            pregunta++;                                             //contador

            questionWeight += q.Weight.ToString() + SEP.ToString(); // save a string of questionsWeights
            return(examen);
        }
Exemplo n.º 7
0
        private static void ExtractKey(ref string Clave, ref int claveCount, string[] answers, ref ExamsRow r)
        {
            int AIDcorrecto = Convert.ToInt32(answers[1]); //toma la respuesta correcta

            answers = answers[0].Split(SEP);               //the array of answers ID

            QuestionsRow q = r.QuestionsRow;

            int option2 = 0;
            IEnumerable <AnswersRow> answ2 = q.GetAnswersRows();

            foreach (string s in answers)
            {
                char       letra = Tools.Alpha[option2];
                int        aid   = Convert.ToInt32(s);
                AnswersRow a     = answ2.FirstOrDefault(o => o.AID == aid); //selectivamente en el mismo orden en que fue generada
                a.Char = letra.ToString().ToUpper().Trim();
                if (a.AID == AIDcorrecto)
                {
                    Clave += letra;
                }
                option2++;
            }

            if (claveCount == answers.Count())
            {
                Clave     += SEP.ToString();
                claveCount = 0;
            }

            claveCount++;
        }