見出し画像

Dartで学校のクラス替えプログラムを作ってみた【Dart】

春の季節ということで学校ではクラス替えが行われます。皆さんはクラス替えがどのように行われているのか疑問に思ったことはありませんか?実際には教員の会議などにより生徒がどのクラスに割り当てられるかが決められているそうです。今回はDartを使用してクラス替え用のプログラムを組んでみようと思います。

Studentクラスの作成

class Student {
  final String name;
  final int score;

  Student(this.name, this.score);
}

Classクラスの作成

StudentクラスをListで格納する学級(Class)というクラスを作成します。classとClassが被るのでややこしいですがこのまま進めます。

class Class {
  final List<Student> students;

  Class(this.students);

  void printClassInfo() {
    students.forEach((student) {
      print('${student.name}: ${student.score}');
    });
    print('-------------');
  }
}

Classクラスにstudentsを代入

今回は20人の生徒がいると仮定して4つの学級に割り当てる形にします。


void main() {
  List<Student> students = [
    Student('Alice', 85),
    Student('Bob', 72),
    Student('Charlie', 90),
    Student('David', 65),
    Student('Eve', 78),
    Student('Frank', 92),
    Student('Grace', 80),
    Student('Henry', 68),
    Student('Ivy', 75),
    Student('Jack', 88),
    Student('Kate', 82),
    Student('Liam', 70),
    Student('Mia', 95),
    Student('Noah', 77),
    Student('Olivia', 84),
    Student('Peter', 73),
    Student('Quinn', 87),
    Student('Ryan', 79),
    Student('Sophia', 91),
    Student('Tyler', 74),
  ];
}

すべてのクラスの生徒の成績が均等になるように分ける

参考資料によると多くの小学校中学校では生徒の成績がすべてのクラスに均等になるようにでクラス分けが行われているようです。


void main() {
  List<Student> students = [
    Student('Alice', 85),
    Student('Bob', 72),
    Student('Charlie', 90),
    Student('David', 65),
    Student('Eve', 78),
    Student('Frank', 92),
    Student('Grace', 80),
    Student('Henry', 68),
    Student('Ivy', 75),
    Student('Jack', 88),
    Student('Kate', 82),
    Student('Liam', 70),
    Student('Mia', 95),
    Student('Noah', 77),
    Student('Olivia', 84),
    Student('Peter', 73),
    Student('Quinn', 87),
    Student('Ryan', 79),
    Student('Sophia', 91),
    Student('Tyler', 74),
  ];
  // 成績順に生徒をソート
  students.sort((a, b) => b.score.compareTo(a.score));

  // クラスごとの生徒リスト
  List<Class> classes = List.generate(4, (_) => Class([]));

  // 成績がすべてのクラスに均等になるように生徒を割り当てる
  for (int i = 0; i < students.length; i++) {
    classes[i % 4].students.add(students[i]);
  }

  // クラス情報を表示
  for (int i = 0; i < classes.length; i++) {
    print('Class ${i + 1}:');
    classes[i].printClassInfo();
  }
}

結果

これで4つすべてのクラスにスコアが90点台の生徒が割り当てられています。

Class 1:
Mia: 95
Jack: 88
Kate: 82
Noah: 77
Bob: 72
-------------
Class 2:
Frank: 92
Quinn: 87
Grace: 80
Ivy: 75
Liam: 70
-------------
Class 3:
Sophia: 91
Alice: 85
Ryan: 79
Tyler: 74
Henry: 68
-------------
Class 4:
Charlie: 90
Olivia: 84
Eve: 78
Peter: 73
David: 65
-------------

全コード

class Student {
  final String name;
  final int score;

  Student(this.name, this.score);
}

class Class {
  final List<Student> students;

  Class(this.students);

  void printClassInfo() {
    students.forEach((student) {
      print('${student.name}: ${student.score}');
    });
    print('-------------');
  }
}

void main() {
  List<Student> students = [
    Student('Alice', 85),
    Student('Bob', 72),
    Student('Charlie', 90),
    Student('David', 65),
    Student('Eve', 78),
    Student('Frank', 92),
    Student('Grace', 80),
    Student('Henry', 68),
    Student('Ivy', 75),
    Student('Jack', 88),
    Student('Kate', 82),
    Student('Liam', 70),
    Student('Mia', 95),
    Student('Noah', 77),
    Student('Olivia', 84),
    Student('Peter', 73),
    Student('Quinn', 87),
    Student('Ryan', 79),
    Student('Sophia', 91),
    Student('Tyler', 74),
  ];
  // 成績順に生徒をソート
  students.sort((a, b) => b.score.compareTo(a.score));

  // クラスごとの生徒リスト
  List<Class> classes = List.generate(4, (_) => Class([]));

  // 成績がすべてのクラスに均等になるように生徒を割り当てる
  for (int i = 0; i < students.length; i++) {
    classes[i % 4].students.add(students[i]);
  }

  // クラス情報を表示
  for (int i = 0; i < classes.length; i++) {
    print('Class ${i + 1}:');
    classes[i].printClassInfo();
  }
}

クラス替えに関する参考資料

まとめ

実際には成績だけではなく、学習態度や生徒同士の相性、特技なども加味されてクラス替えが行われているのだと思います。毎年クラス替えのために会議を行う教員の方々は大変ですね。
今回はクラス替えのプログラムをDartで書いてみました。誰かの学習の助けになれば幸いです。

関連記事

初心者から始めるプログラミングスクールの紹介

我々Flutterラボは、大阪の梅田にあるコワーキングスペース『ONthe UMEDA』の料金プランとしてモバイルアプリ開発が学べるプログラミングスクールを運営しております。
オンラインではなく対面で学びたい方におすすめです。
※オンラインをご希望の方はFlutterラボのオンラインスクールをおすすめします。

以下のような方に適したプログラミングスクールです。

  • 大阪でFlutterを学びたい方

  • オフラインで現役エンジニアに教わりたい方

  • プログラミングの基礎から学びたい方

  • アプリを開発してみたい方

  • 初心者からスマホアプリをリリースしたい方

スタンダードコース

Flutter学習用のカリキュラムに合わせて、プログラミングの基礎からアプリ開発の応用まで学べるコースです。

プロコース

ご自身で開発したいアプリを、設計からリリースまですべてサポートするコースです。
ぜひ気軽にお問い合わせください。オフラインで受講ご希望の方はこちらからお問い合わせください。


この記事が気に入ったらサポートをしてみませんか?