به نام خدا
برنامه ای بنویسید که اسامی دانشجویان یک کلاس به همراه شماره دانشجویی و نمرات 2 درس آن را از طریق محیط کاربردی گرفته و بنا به درخواست کاربر برحسب نام و نام خانوادگی یا شماره ی دانشجویی یا نمرات هر درس مرتب سازی کنید و سپس آن ها را چاپ کنید
Printable View
به نام خدا
برنامه ای بنویسید که اسامی دانشجویان یک کلاس به همراه شماره دانشجویی و نمرات 2 درس آن را از طریق محیط کاربردی گرفته و بنا به درخواست کاربر برحسب نام و نام خانوادگی یا شماره ی دانشجویی یا نمرات هر درس مرتب سازی کنید و سپس آن ها را چاپ کنید
این رو با جاوا نوشتم، امیدوارم به کارت بیاد.نقل قول:
کدش شاید خیلی تر تمیز نباشه و شاید بهینه هم نباشه ولی خب کار میکنه (رو چند تا ورودی تست کردم، اوکی بود)
فقط بخش sort نمرات رو دیگه ننوشتم اون هم فکر کنم خودت بتونی.
فهم کدش هم ساده هست. مشکلی بود بگو کمکت کنم.
اون بخش Comparator ها رو هم میتونی با Lambda بنویسی اگر دوست داری.
ادیت: راستی، نمرات رو بصورت int میگیره، اگر میخوای ممیز دار وارد کنی، int ها رو به double تغییر بده و ورودی رو هم به input.nextDouble; تغییر بده.
کد:
import java.util.*;
public class StudentsTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String studentName;
int studentNumber;
int gradeA;
int gradeB;
LinkedList<Student> students = new LinkedList<>();
System.out.print("Do you like to add student? ");
int choice = input.nextInt();
while (choice != 0) {
System.out.print("Enter Student name: ");
studentName = input.next();
System.out.print("Enter student number: ");
studentNumber = input.nextInt();
System.out.print("Enter grade a: ");
gradeA = input.nextInt();
if (!isGradeValid(gradeA)) {
System.out.println("Entered grade is NOT valid.");
continue;
}
System.out.print("Enter grade b: ");
gradeB = input.nextInt();
if (!isGradeValid(gradeA)) {
System.out.println("Entered grade is NOT valid.");
continue;
}
students.add(new Student(studentName, studentNumber, gradeA, gradeB));
System.out.print("-----");
System.out.print("Do you like to add another student: ");
System.out.print("If yes enter any number BUT 0 -> ");
choice = input.nextInt();
}
// System.out.println("Your class contains: ");
// System.out.println(students.toString());
System.out.println("SORT BY STUDENT NAME");
System.out.println("********************************************");
Collections.sort(students, Student.studentNameComparator);
for (Student s : students) {
System.out.println(s);
}
System.out.println("********************************************");
System.out.println("SORT BY STUDENT NUMBER");
Collections.sort(students, Student.studentNumberComparator);
for (Student s : students) {
System.out.println(s);
}
}
private static boolean isGradeValid(double grade) {
return (grade >= 0 && grade <= 20);
}
}
class Student {
private String studentName;
private int studentNumber;
private int gradeA;
private int gradeB;
Student(String studentName, int studentNumber, int gradeA, int gradeB) {
this.studentName = studentName;
this.studentNumber = studentNumber;
this.gradeA = gradeA;
this.gradeB = gradeB;
}
String getStudentName() {
return studentName;
}
int getStudentNumber() {
return studentNumber;
}
int getGradeA() {
return gradeA;
}
int getGradeB() {
return gradeB;
}
@ [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ride
public String toString() {
return "\nstudentName=" + studentName + "\n" +
"studentNumber=" + studentNumber + "\n" +
"gradeA=" + gradeA + "\n" +
"gradeB=" + gradeB + "\n" +
"****************";
}
public static Comparator<Student> studentNameComparator =
new Comparator<Student>() {
@ [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ride
public int compare(Student s1, Student s2) {
String s1Name = s1.getStudentName();
String s2Name = s2.getStudentName();
return s1Name.compareTo(s2Name);
}
};
public static Comparator<Student> studentNumberComparator =
new Comparator<Student>() {
@ [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ride
public int compare(Student s1, Student s2) {
int s1Number = s1.getStudentNumber();
int s2Number = s2.getStudentNumber();
return s2Number - s1Number;
}
};
}
کد رو نشستم یکم تر تمیز تر کردم و بهبود دادم. الان نمره های ممیز دار هم میتونی وارد کنی. (فقط حواست باشه، ورودی های درست بدی)
کد:
import java.util.*;
public class StudentsTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String studentName;
int studentNumber;
double gradeA;
double gradeB;
LinkedList<Student> students = new LinkedList<>();
System.out.print("Do you like to add student (y/N) -> ");
String choice = input.nextLine();
while (choice.toLowerCase().startsWith("y")) {
System.out.print("Enter Student name: ");
studentName = input.nextLine().toLowerCase();
System.out.print("Enter student number: ");
studentNumber = input.nextInt();
System.out.print("Enter grade a: ");
gradeA = input.nextDouble();
while (!isGradeValid(gradeA)) {
System.out.println(gradeA + " is NOT a valid grade.");
System.out.println("It must be between 0 and 20");
System.out.print("Enter grade a: ");
gradeA = input.nextInt();
}
System.out.print("Enter grade b: ");
gradeB = input.nextDouble();
while (!isGradeValid(gradeB)) {
System.out.println(gradeB + " is NOT a valid grade.");
System.out.println("It must be between 0 and 20");
System.out.print("Enter grade a: ");
gradeB = input.nextInt();
}
students.add(new Student(studentName, studentNumber, gradeA, gradeB));
System.out.println("---------------------");
System.out.print("Do you like to add another student (y/N) -> ");
input.nextLine();
choice = input.nextLine();
}
boolean notDone = true;
while (notDone) {
printChoices();
int sortingChoice = input.nextInt();
switch (sortingChoice) {
case 1:
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
System.out.println("Sorting by student name");
Collections.sort(students, Student.studentNameComparator);
for (Student s : students) System.out.println(s);
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
break;
case 2:
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
System.out.println("Sorting by student number");
Collections.sort(students, Student.studentNumberComparator);
for (Student s : students) System.out.println(s);
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
break;
case 3:
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
System.out.println("Sorting by grade a");
Collections.sort(students, Student.gradeAComparator);
for (Student s : students) System.out.println(s);
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
break;
case 4:
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
System.out.println("Sorting by grade b");
Collections.sort(students, Student.gradeBComparator);
for (Student s : students) System.out.println(s);
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
break;
default:
System.out.println("GOOD BYE!");
notDone = false;
}
}
}
private static boolean isGradeValid(double grade) {
return (grade >= 0 && grade <= 20);
}
private static void printChoices() {
System.out.println("How should I sort? ");
System.out.println("1. By student name? ");
System.out.println("2. By student number? ");
System.out.println("3. By student grade a? ");
System.out.println("4. By student grade b? ");
}
}
class Student {
private String studentName;
private int studentNumber;
private double gradeA;
private double gradeB;
Student(String studentName, int studentNumber, double gradeA, double gradeB) {
this.studentName = studentName;
this.studentNumber = studentNumber;
this.gradeA = gradeA;
this.gradeB = gradeB;
}
String getStudentName() {
return studentName;
}
int getStudentNumber() {
return studentNumber;
}
double getGradeA() {
return gradeA;
}
double getGradeB() {
return gradeB;
}
public static Comparator<Student> studentNameComparator =
new Comparator<Student>() {
@ [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ride
public int compare(Student s1, Student s2) {
String s1Name = s1.getStudentName();
String s2Name = s2.getStudentName();
return s1Name.compareTo(s2Name);
}
};
public static Comparator<Student> studentNumberComparator =
new Comparator<Student>() {
@ [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ride
public int compare(Student s1, Student s2) {
int s1Number = s1.getStudentNumber();
int s2Number = s2.getStudentNumber();
return s2Number - s1Number;
}
};
public static Comparator<Student> gradeAComparator = new Comparator<Student>() {
@ [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ride
public int compare(Student s1, Student s2) {
double s1gradeA = s1.getGradeA();
double s2gradeA = s2.getGradeA();
return Double.compare(s2gradeA, s1gradeA);
}
};
public static Comparator<Student> gradeBComparator = new Comparator<Student>() {
@ [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ride
public int compare(Student s1, Student s2) {
double s1gradeB = s1.getGradeB();
double s2gradeB = s2.getGradeB();
return Double.compare(s2gradeB, s1gradeB);
}
};
@ [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ride
public String toString() {
return "\nStudent Name is -> " + studentName + "\n" +
"Student Number is -> " + studentNumber + "\n" +
"Grade A is -> " + gradeA + "\n" +
"Grade B -> " + gradeB + "\n";
}
}
سلام ممنونم ولی با سی پلاس پلاس می خواهم