Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Указание данных студентов (https://javascript.ru/forum/misc/84703-ukazanie-dannykh-studentov.html)

RUSNORD 21.11.2022 13:23

Указание данных студентов
 
Вложений: 1
Здравствуйте.

Была ли такая задача, на данном форуме?

Задача:

Приложение, предполагающее указание данных студентов (оценки по предметам) и их анализ (определение числа студентов в каждой из категорий: "отличник", "хорошист" и "неуспевающий"). В форме (анкете) указывается фамилия и пять оценок за дисциплины (от 2 до 5). "Отличник" ‐ если все оценки "5", "хорошист" ‐ оценки "5" и "4", "неуспевающий" ‐ хотя бы одна оценка "2". Необходимо последовательно указать данные для произвольного числа студентов (последовательное заполнение формы данными для разных студентов ‐ внесли для одного, учли, внесли для следующего, учли, и т.д.), после чего вывести сводку о количестве студентов в каждой из категорий и перечислить фамилии неуспевающих. Для упрощения отладки рекомендуется (но для отработки не обязывает!) добавить возможность не заполнять оценки вручную, а использовать генератор случайных чисел.

Благодарю всех за помощь и потраченное время. :)

рони 23.11.2022 21:57

генератор списка студентов
 
RUSNORD,
:)
<pre id="out"></pre>
    <script>
        let a = ["a", "e", "i", "o", "u", "y"]
        let b = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"]
        function random(min, max, arr) {
            if (arr) {
                min = 0;
                max = arr.length - 1
            }
            return function() {
                let index = min + Math.floor(Math.random() * (max - min + 1));
                return arr ? arr[index] : index
            }
        }
        function createNik() {
            let length = random(3, 7)(),
                a_r = random(0, 0, a),
                b_r = random(0, 0, b),
                k = +(Math.random() > .5),
                nik = (k ? a_r() : b_r()).toUpperCase();
            for (let i = 1; i < length; i++) {
                nik += (i % 2 !== k) ? a_r() : b_r()
            }
            return nik
        }
        function createRating() {
            let rating = random(0, 0, [5, 5, 3, 5, 4, 5, 4, 4, 4, 5, 5, 2, 5, 5]),
                length = 5;
            return Array.from({
                length
            }, _ => rating())
        }
        let testScill = [{
            fn: a => a.every(e => e === 5),
            name: "Отличник"
        }, {
            fn: a => a.every(e => [5, 4].includes(e)),
            name: "Хорошист"
        }, {
            fn: a => a.some(e => e === 2),
            name: "Неуспевающий"
        }];
        function _skill(arr) {
            for (let {
                    fn,
                    name
                } of testScill) {
                if (fn(arr)) return name;
            };
            return '---'
        }
        function listOfStudents() {
            let length = random(3, 15)();
            return Array.from({
                length
            }, _ => {
                let rating = createRating(),
                    nik = createNik(),
                    scill = _skill(rating);
                return {
                    nik,
                    rating,
                    scill
                }
            })
        }
        let students = listOfStudents();
        out.append(JSON.stringify(students, function(key, value) {
            if (key === 'rating') {
                return value.toString();
            }
            return value;
        }, 1))
        function searchScill(patern)
        {
           return students.filter(({scill}) => scill === patern).map(({nik}) => nik)
        }
        let listOfFailing = searchScill("Неуспевающий");
        out.append(`\n${listOfFailing.length} underachievers : ${listOfFailing}`);
        let listOfGood = searchScill("Хорошист");
        out.append(`\n${listOfGood.length} goods : ${listOfGood}`);
        let listOfExcellent = searchScill("Отличник");
        out.append(`\n${listOfExcellent.length} excellents : ${listOfExcellent}`);
    </script>

RUSNORD 28.11.2022 12:56

Спасибо Вам, огромное.:)


Часовой пояс GMT +3, время: 13:15.