Премини към съдържанието

Препоръчан отговор


Здравейте съфорумници.Имам да направя следния код на Java:

Проектирайте Java приложение (аплет или фрейм), което обработва студентска информация.

      1.Декларирайте интерфейс Person(Личност) с методи getName() и setName(),които връщат/установяват име от тип String.

      2.Декларирайте клас Student(Студент),който наследява интерфейса Person и съдържа private полета за факултетен номер,име и успех;конструктор за инициализиране на полетата;предефиниран метод toString().

      3.В класа на приложението(аплет или фрейм) използвайте колекция за съхраняване на информация за студентска група.Дефинирайте графичен потребителски интерфейс за реализиране на следните функционалностти:

 а)добавяне на студент към колекцията:

-етикети и текстови полета за въвеждане на факултетния номер,името и успеха на студент;

-етикет „Търсене по факултетен номер“ и падащ списък;

-бутон „Добави“-при въвеждане на коректни данни в текстовите полета добавя новия студент с въведените данни в колекцията;добавя факултетния номер на студента към елементите на падащия списък;изчиства текстовите полета за въвеждане на данни;

б)търсене по факултетен номер:

-при избор на факултетен номер от падащия списък намира студента с този факултетен номер и изобразява данните за намерения студент в трите текстови полета.

За момента съм направил следното:

1. package venci006;

    public interface Person {

    public String getName();

    public void setName (String name);

}

 

2. package venci006;

    public class Student implements Person {  

    private long FakultetenNomer;

    private String Name;

    private float grade;

    public Student(long FakultetenNomer,String name,float grade) {

        this.FakultetenNomer=FakultetenNomer;

        this.Name=name;

        this.grade=grade;

    }

    @Override

    public String getName() {

        return Name;

    }

    @Override

    public void setName(String Name) {

        this.Name=Name;

    }

    @Override

    public String toString() {

        return "Фак. номер" + FakultetenNomer + ";" + "Име" + Name + ";" + "оценка" + grade;

    }

}   

 

 

3. package venci006;

import javax.swing.*;

import javax.swing.border.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

public class ProektVenci006 extends javax.swing.JFrame implements ActionListener {

    private ArrayList<Student> group;

    private JPanel p1,p2;

    private JLabel l1,l2,l3,l4,l5;

    private JTextField t1,t2,t3;

    private JTextArea area;

    private JScrollPane scroll;

    private JButton add;

    private JComboBox search;

    public ProektVenci006() {

        super("Проект");

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container container=this.getContentPane();

        p1 = new JPanel();

           p1.setLayout(new GridLayout(3, 3));

           l1 = new JLabel ("Факултетен номер");

           p1.add(l1);

           t1 = new JTextField (20);

           t1.addActionListener(this);

           p1.add(t1);

           l2 = new JLabel ("Име");

           p1.add(l2);

           t2 = new JTextField (20);

           t2.addActionListener(this);

           p1.add(t2);

           l3 = new JLabel ("Оценка");

           p1.add(l3);

           t3 = new JTextField (20);

           t3.addActionListener(this);

           p1.add(t3);

           container.add(p1, BorderLayout.PAGE_START);

           area= new JTextArea(8,12);

            scroll = new JScrollPane (area, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

            container.add(scroll, BorderLayout.CENTER);

            p2=new JPanel();

            p2.setLayout(new GridLayout(2,2));

            l4=new JLabel("Добави студент");

            p2.add(l4);

            add=new JButton("Добави");

            add.addActionListener(this);

            p2.add(add);

            l5=new JLabel("Търсене по факултетен номер");

            p2.add(l5);

            search=new JComboBox();

            search.addActionListener(this);

            p2.add(search);

            container.add(p2, BorderLayout.PAGE_END);

            group=new ArrayList<>();

            this.setSize(600,400);

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        Object source=e.getSource();

        if(source==add){

            try{

                Student s=new Student(Long.parseLong(t1.getText()),t2.getText(),Float.parseFloat(t3.getText()));

                group.add(s);

                search.addItem(s.getName());

                area.setText("");

                area.append("Добави студент\n" + s.toString() + "\n");

                t1.setText("");

                t2.setText("");

                t3.setText("");

            }

            catch(NumberFormatException ex){

                area.setText("");

                area.append("Грешка при въвеждане на данните!\n");

            }

        }

        else if(source==search){

            long FakultetenNomer=(Long)search.getSelectedItem();

            area.setText("");

            for(Person s: group){

                if(s.getName().equals(FakultetenNomer)){

                    area.append("Намери студент\n" + s.toString() + "\n");

                    break;

                }

            }

        }

    }

    public static void main(String args[]){

        EventQueue.invokeLater(new Runnable(){

            @Override

            public void run(){

                new ProektVenci006().setVisible(true);

            }

        });

    }

}

Програмата успява да ми започне но при първото въвеждане на данните ми дава грешка,но след това въвеждането работи.Но Търсенето не ми работи и в него трябва да пише фак. номер,а не името.ще може ли да ми помогнете да оправя грешките.От няколко дена си играя с този код но не успявам да го оправя.Ще кача и снимка на показаната грешка при първо въвеждане

pic1.png

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не може да кастваш стринг към число. Вместо кастване използвай Long::valueOf

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Пробвай да смениш това:

в Student си добави метод, който да ти връща ФН:

@Override
    public long getNomer() {
        return FakultetenNomer;
    }

и към края на тестовия метод, където търсиш FN:

 long FakNomer = Long.parseLong((String) search.getSelectedItem());

            area.setText("");

            for (Person s : group) {

                if (s.getNomer() == FakNomer) {

                    area.append("Find student\n" + s.toString() + "\n");

 

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 27 минути, Raze написа:

Пробвай да смениш това:

в Student си добави метод, който да ти връща ФН:


@Override
    public long getNomer() {
        return FakultetenNomer;
    }

и към края на тестовия метод, където търсиш FN:


 long FakNomer = Long.parseLong((String) search.getSelectedItem());

            area.setText("");

            for (Person s : group) {

                if (s.getNomer() == FakNomer) {

                    area.append("Find student\n" + s.toString() + "\n");

 

На същото мнение съм.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

благодаря за помощта.програмата проработи чудесно и си работи идеално.


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Обръщай внимание на грешките, които ти връща компилатора - ако нещо не разбираш, търси ги в Google - излизат в повечето случаи с примери как да се оправят. Също така наблегни на английския език - в самата грешка си пише къде е проблема и на кой ред. Пиши си променливите по възможност на английски език - избягвай имена като "getNomer" - замени го с "getNumber", също и това "FakultetenNomer" - направи го "sudentNumber" или нещо такова, при наименуване на променливи имената им почват с малки букви, следващата буква, ако са 2 думи е с голяма буква и всяка следваща също. Слагай ясни имена, за да се знае кое какво е. Избягвай кирилица или писане на български думи с латиница - ако този код го дадеш в някой чужд форум, хората ще се чудят какво става и нищо няма да разберат. Също така класа "ProektVenci006" по-добре го напиши "StudentTest" или нещо подобно, както и пакетите - това "ProektVenci006" ако е общ става, но ако правиш други проекти по-добре пиши кое за какво става въпрос - така като търсиш нещо и на теб ще ти е по-лесно да го намериш. Даже горе с това "FakNomer" и  аз съм се подвел, но пробвах да го сменя докато измисля как да оправя кода и не съм се занимавал да го оправям.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 3 часа, Raze написа:

Обръщай внимание на грешките, които ти връща компилатора - ако нещо не разбираш, търси ги в Google - излизат в повечето случаи с примери как да се оправят. Също така наблегни на английския език - в самата грешка си пише къде е проблема и на кой ред. Пиши си променливите по възможност на английски език - избягвай имена като "getNomer" - замени го с "getNumber", също и това "FakultetenNomer" - направи го "sudentNumber" или нещо такова, при наименуване на променливи имената им почват с малки букви, следващата буква, ако са 2 думи е с голяма буква и всяка следваща също. Слагай ясни имена, за да се знае кое какво е. Избягвай кирилица или писане на български думи с латиница - ако този код го дадеш в някой чужд форум, хората ще се чудят какво става и нищо няма да разберат. Също така класа "ProektVenci006" по-добре го напиши "StudentTest" или нещо подобно, както и пакетите - това "ProektVenci006" ако е общ става, но ако правиш други проекти по-добре пиши кое за какво става въпрос - така като търсиш нещо и на теб ще ти е по-лесно да го намериш. Даже горе с това "FakNomer" и  аз съм се подвел, но пробвах да го сменя докато измисля как да оправя кода и не съм се занимавал да го оправям.

благодаря за съвета.ще се поуча от грешките си за да не ги допускам в бъдеще.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.