Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 154 additions & 0 deletions problem-set/SchoolGraphics.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
/*
* File: SchoolGraphics.java
* ----------------------------
* ამოცანის პირობა:
* ჩათვალეთ რომ წინა ამოცანაში აღწერილი School კლასი უკვე არსებობს და შეგიძლიათ
* გამოყენება. დაწერეთ გრაფიკული პროგრამა რომელიც მოგვცემს საშუალებას დავამატოთ
* სკოლის შესახებ მონაცემები და შემდეგ გავფილტროთ. სურათზე ნაჩვენებია თუ როგორ უნდა
* გამოიყურებოდეს გრაფიკული პროგრამა:
*/
import java.awt.event.ActionEvent;
import java.util.Iterator;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;

import acm.graphics.GLabel;
import acm.program.*;

public class SchoolGraphics extends GraphicsProgram {

private final int RESULT_X = 40;
private final int LINE_H = 30;

private JTextField teachField = new JTextField(15);
private JTextField subjField = new JTextField(15);
private JTextField pupilField = new JTextField(15);

private JButton addTeachButton = new JButton("Add Teach");
private JButton addSubjButton = new JButton("Add Subj");
private JButton addPupilButton = new JButton("Add Pupil");

private JButton displayPupilsButton = new JButton("Display Pupils");
private JButton displayTeachersButton = new JButton("Display Teachers");

private School school = new School();

public void init() {
setSize(1300, 800);

initFields();

addActionListeners();
}


@Override
public void actionPerformed(ActionEvent e) {

if (e.getSource() == addTeachButton) {
onAddTeachButtonCLicked();

} else if (e.getSource() == addSubjButton) {
onAddSubjButtonCLicked();

} else if (e.getSource() == addPupilButton) {
onAddPupilButtonCLicked();

} else if (e.getSource() == displayPupilsButton) {
onDisplayPupilsClicked();

} else if (e.getSource() == displayTeachersButton) {
onDisplayTeachersClicked();
}
}

private void onDisplayTeachersClicked() {
String pupil = pupilField.getText();
Iterator<String> it = school.getTeachers(pupil);
drawIterator(it);
clearFields();
}

private void onDisplayPupilsClicked() {
String teacher = teachField.getText();
Iterator<String> it = school.getPupils(teacher);
drawIterator(it);
clearFields();
}

private void onAddTeachButtonCLicked() {
String teacher = teachField.getText();
if (!teacher.isEmpty()) {
school.addTeacher(teacher);
clearFields();
}
}

private void onAddSubjButtonCLicked() {
String teacher = teachField.getText();
String subject = subjField.getText();

if (!teacher.isEmpty() && !subject.isEmpty()) {
school.addSubject(teacher, subject);
clearFields();
}
}


private void onAddPupilButtonCLicked() {
String subject = subjField.getText();
String pupil = pupilField.getText();

if (!subject.isEmpty() && !pupil.isEmpty()) {
school.addPupil(pupil, subject);
clearFields();
}

}

private void initFields() {
JLabel teachLabel = new JLabel("Teach:");
JLabel subjLabel = new JLabel("Subj:");
JLabel pupilLabel = new JLabel("pupil:");

add(teachLabel, SOUTH);
add(teachField, SOUTH);

add(subjLabel, SOUTH);
add(subjField, SOUTH);

add(pupilLabel, SOUTH);
add(pupilField, SOUTH);

add(addTeachButton, SOUTH);
add(addSubjButton, SOUTH);
add(addPupilButton, SOUTH);

add(displayPupilsButton, SOUTH);
add(displayTeachersButton, SOUTH);
}

private void clearFields() {
teachField.setText("");
subjField.setText("");
pupilField.setText("");
}

private void drawIterator(Iterator<String> it) {
if (it == null)
return;

removeAll();

GLabel result = new GLabel("Results: ");
int y = LINE_H;
add(result, RESULT_X,y);
while (it.hasNext()) {
GLabel label = new GLabel(it.next());
y += LINE_H;
add(label, RESULT_X, y);
}
}
}
34 changes: 34 additions & 0 deletions problem-set/SchoolGraphics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# SchoolGraphics

პრობლემა:
```
ჩათვალეთ რომ წინა ამოცანაში აღწერილი School კლასი უკვე არსებობს და შეგიძლიათ
გამოყენება. დაწერეთ გრაფიკული პროგრამა რომელიც მოგვცემს საშუალებას დავამატოთ
სკოლის შესახებ მონაცემები და შემდეგ გავფილტროთ. სურათზე ნაჩვენებია თუ როგორ უნდა
გამოიყურებოდეს გრაფიკული პროგრამა:
```



## პრობლემის გადაჭრის გზა:
გრაფიკული მხარის დასამატებლად, საჭიროა, 3 ეტაპი:
*ინიციალიზაცია გავუკეთოთ ჩვენი პროგრამის ინტერფეისის კომპონენტებს;
*ინტერფეისი დავუკავშიროთ School ამოცანაში დაწერილ ლოგიკას.
---

### I. ინიციალიზაცია:
* თავდაპირველად ქვედა ბარის გასაკეთებლად (როგორც ეს სურათზეა ნაჩვენები) დაგვჭირდება :
** 3 JLabel (Teach: Subj: Pupil:)
** 3 JTextField - ლეიბლების შესაბამისად
** 5 JButton.
Text Field-ებისა და Button-ების აღწერა ინსტანს ცვლადებად ჯობია, რადგან სხვა მეთოდებშიც (ინიტის გარდა) დაგვჭირდება მათი გამოყენება, ხოლო Label-ები შეგვიძლია ლოკალურად შევქმნათ ერთხელ. კომპონენტებს ინიციალიზაცია რომ გავუკეთოთ ამისათვის გავაკეთოთ ცალკე მეთოდი initFields() რომელშიც ჩვენს ლეიბლებს აღვწერთ და დავამატებთ, ასევე ტექსტურ ველებსა და ღილაკებს დავამატებთ SOUTH რეგიონში, სურათში მოცემული მიმდევრობის მიხედვით. (ანუ ჯერ teachLabel, შემდეგ teachField, შემდეგ subjLabel და ა.შ.)

### II. დამატებულ ღილაკებზე მოსმენა:
* ღილაკებზე დაჭერისას ჩვენს პროგრამას რეაგირება რომ ჰქონდეს, გამოვიყენოთ actionPerformed მეთოდი და ვნახოთ event-ის source, რა არის (e.getSource() ) და შევამოწმოთ რომელიმე ღილაკს თუ ემთხვევა source, მაშინ გამოვიძახოთ მაგ ღილაკის შესაბამისი ლოგიკა, ხოლო საამისოდ ჯერ უნდა დავწეროთ ეს ლოგიკა.

### III. დამხმარე მეთოდი drawIterator() :
* ყოველი ღილაკის დაჭერის შემდეგ ჩვენმა პროგრამამ გარკვეული სია უნდა დაბეჭდოს, იქნება ეს მოსწავლეების თუ მასწავლებლების, ამიტომ გავაკეთოთ დამხმარე მეთოდი, რომელსაც გადაეცემა String-ებზე iterator-ი (ჩვენ მხოლოდ ამ iterator-ზე გადაყოლა გვჭირდება, ამიტომ ვიყენებთ უფრო აბსტრაქტულ ტიპს ვიდრე ArrayList, ან მსგავსი სხვა ტიპია). თავდაპირველად ვამატებთ result ლეიბლს და შემდგომ LINE_H-ის დაშორებით ვერტიკალურად ვაჩენთ ეკრანზე ჩვენს შედეგს.

### IV. ღილაკების ლოგიკა :
* display teachers-ზე დაჭერისას უბრალოდ სკოლიდან ვიძახებთ მეთოდს getTeachers და გადავცემთ ჩვენს დამხმარე მეთოდ drawIterator-ს პასუხს. ანალოგიურად ვიქცევით display pupils- ღილაკზე დაჭერისას. add teacher-ზე დაჭერისას ვამოწმებთ ჩვენს teach-ის შესაბამის ტექსტურ ველს ცარიელი არის თუ არა და მხოლოდ იმ შემთხვევაში თუკი არაა ცარიელი ვიძახებთ School ტიპის ობიექტზე მეთოდს addTeacher-ს და არ უნდა დაგვავიწყდეს ველების გასუფთავება. add subj ღილაკზე დაჭერისას გვჭირდება მასწავლებლის და საგნის ტექსტური ველების მნიშვნელობების ამოღება, შემდგომ შემოწმება ცარიელები არიან თუ არა და თუ არ არიან, ამ შემთხვევაში ვიძახებთ addSubject მეთოდს და ისევ ვასუფთავებთ field-ებს. ანალოგიურად, add pupil-ს შემთხვევაში ვიღებთ subject და pupil ველებს და ამჯერად ვიძახებთ addPupil() მეთოდს, ხოლო საბოლოოდ ვასუფთავებთ field-ებს.

29 changes: 29 additions & 0 deletions problem-set/Sum1N.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* File: Sum1N.java
* ----------------------------
* Sum1N დაბეჭდავს 1 დან მომხმარებლის რიცხვამდე ყველა ნატურალური რიცხვის ჯამს.
*
* ამოცანის პირობა:
* მომხმარებელს შეყავს მთელი რიცხვი n, პროგრამამ უნდა დაბეჭდოს 1 დან n მდე რიცხვების ჯამი
*/
import acm.program.*;


public class Sum1N extends ConsoleProgram {

public void run() {
int sum = 0;
while(true){
int num = readInt("Enter n: ");
if(num > 0){
for(int i = 1; i < num;i++){
sum = sum + i;
}
break;
}
}

println( "Sum of natural numbers untill n is : " + sum);
}

}
Loading