Proiect Inginerie Software
Proiect Inginerie Software
Pentru generarea unor chestionare de examen de carnet auto, sunt generate aleator
liste care includ intrebarea, cele 3 raspunsuri, si indexul care contine raspunsul corect.
Mai intai se genereaza aleatoriu o secventa de numere intregi, care determina ordinea
intrebarilor stocate in clasa Questions, care vor fi folosite mai tarziu in clasa Test, iar clasa
Results va tine cont de numarul de intrebari raspunse corect, utilizatorul fiind admis daca a
raspuns corect la minim 75% de intrebari.
Diagramele UML
Use Case
Secventa
Colaborare
Clase
Prezentarea delaliata a modalitatii de implementare
Clasa Questions
O clasa care stocheaza toate intrebarile, variantele de raspuns si index-urile pentru
generarea chestionarelor.
Clasa Test
Sunt intitializate parametrii pentru numarul de intrebari din chestionar, si liste pentru
stocarea intrebarilor.
Metoda setQuestionOrder():
public void setQuestionOrder() {
Random rng = new Random();
while (gen.size() < test_size){
Integer next = rng.nextInt(questions_size) + 1;
gen.add(next);
}
}
Clasa Random genereaza numere aleatoare in lista gen, fara a se repeta, deoarece lista
este de tip LinkedHashSet, care accepta doar valori unice, deci se adauga valori pana cand
lista are marimea setata de test_size;
Metoda setQuestions():
public void setQuestions(){
Iterator<Integer> itr = gen.iterator();
int i = 0;
while(itr.hasNext()){
int temp = itr.next();
questionList.add(questions.questions[temp]);
choicesList.add(new ArrayList<String>());
choicesList.get(i).add(questions.choices[temp][0]);
choicesList.get(i).add(questions.choices[temp][1]);
choicesList.get(i).add(questions.choices[temp][2]);
correctList.add(questions.correct[temp]);
i++;
}
}
Se foloseste un iterator pentru a se parcurge prin Set-ul de numere intregi, si se adauga
in listele de intrebari, alegeri, si index-uri aleatoare.
Metoda getQuestionIndex():
public String getQuestionIndex(int i){
String str;
str = (
"Intrebarea " + (i + 1) + ":\n " +
questionList.get(i) +
"\nRaspunsuri:\n" +
" A) " + choicesList.get(i).get(0) +
"\n B) " + choicesList.get(i).get(1) +
"\n C) " + choicesList.get(i).get(2)
);
return str;
}
Clasa Result
Metodele pentru incrementarea scorului:
public void setScore(int score) {
this.score = score;
}
Metoda getFinalScoreString():
public void getFinalScoreString(){
float percentage = (float) score / max_score;
System.out.println(
"Scor final: " + score + " din " + max_score +
"\nProcentaj: " + (percentage * 100)
);
if(percentage > 0.75) System.out.println("Admis!");
else System.out.println("Respins");
}
Afisarea scorului final, cu un if-statement pentru a arata daca utilizatorul a trecut de
pragul de 75%.
Clasa Main
public static void main(String[] args){
Test t = new Test();
Result r = new Result();
Scanner cin = new Scanner(System.in);
String[] choices = {"a", "b", "c"};
String ch = cin.next();
clearScreen();
if(ch.toLowerCase().equals(choices[t.getCorrectIndex(i)])){
System.out.println("Corect!\n");
r.setScore(r.incrementScore());
} else {
System.out.println("Incorect!\n");
}
}
r.getFinalScoreString();
}