Slackコミュニティに
無料で参加する
Flutterラボの
プレミアム会員になる
Dartで学校のクラス替えプログラムを作ってみた【Dart】
2024.04.10
春の季節ということで学校ではクラス替えが行われます。皆さんはクラス替えがどのように行われているのか疑問に思ったことはありませんか?実際には教員の会議などにより生徒がどのクラスに割り当てられるかが決められているそうです。今回は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学習用のカリキュラムに合わせて、プログラミングの基礎からアプリ開発の応用まで学べるコースです。
プロコース
ご自身で開発したいアプリを、設計からリリースまですべてサポートするコースです。
ぜひ気軽にお問い合わせください。オフラインで受講ご希望の方はこちらからお問い合わせください。

11min
プレミアム会員
見放題
シングルトンとは?
2022.03.26
¥500
18min
プレミアム会員
見放題
クラスとコンストラクタ
2023.05.06
¥500

【Dart】Stringからint, double, DateTimeに変換する
2020.09.14

【Dart】【Flutter】List型(リスト)の使い方とよく使うメソッドまとめ
2020.09.18

【Dart】【Flutter】DateTime型についてのまとめ
2020.10.01

【Dart】Map型の使い方とよく使うメソッドまとめ
2020.09.13