[Cần Giúp Đỡ]... Vấn đề về chương trình quản lý sinh viên

kaihide

New Member
8/4/15
4
0
1
27
Nha Trang
Các anh chị nào pro có thể giúp em với :
Thầy cho em 1 bài tập về Quản lý SV, em làm đã được 60% rồi, mà phần còn lại thì em bí bí bí....
https://drive.google.com/file/d/0B8nLDcGaqKUab1dvNXprdUdwOEU/view?usp=sharing
... Vấn đề em gặp ở đây là 2 nút >> và <<.. Thầy kêu em lấy dữ liêu từ 1 file txt, trong file txt đó có chưa nội dung bao gồm danh sách các sinh viên, nhưng em chẳng biết tải làm sao lên trên Frame được...???
và khi nhấn nút >> và << thì lần lượt đi qua các danh sách sinh viên, ấn button SV đậu để xem danh sách SV đâu và ngược lại... Mong các anh chị chỉ bảo em thêm, em mới học JAVA được hơn 2 tuần :-??:-??
 

Joe

Thành viên VIP
21/1/13
2,951
1,318
113
Post your codes. No body can guess what problem you have. It's one of the rules (click HERE). Pls. follow them.
 
Sửa lần cuối:

kaihide

New Member
8/4/15
4
0
1
27
Nha Trang
Đây là bài làm của em... !​
Gồm có 2 class và 1 packes.. vì do em chưa học JFrame nên em vẫn phải đang làm Frame.​
Main​
Java:
[/INDENT]
package SinhVien;



import java.awt.Button;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.Label;

import java.awt.Panel;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.StringTokenizer;



public class Main extends Frame implements ActionListener {



    Panel pn1;

    Label lbma, lbten, lbdiem, lbkq, lbbt, lbgk, lbck;

    Button btnlop, btndat, btnkdat, btnthoat, btnnext, btnback, btntitle;

    TextField txtma ,txtten, txtbt, txtgk, txtck, txtkq;

    SinhVien currRow=null,backRow=null,preRow=null;

    boolean blNext=false,dat=false,kdat=false,tatca=false;

    Main()

    {

        pn1=new Panel();

        this.add(pn1);

        this.setLayout(new GridLayout(1,1));

        this.setResizable(false);

     

        pn1.setLayout(null);

        btntitle=new Button("CHUONG TRINH QUAN LI SINH VIEN");

        pn1.add(btntitle);

        btntitle.setBounds(5, 5, 800, 30);

     

        btnlop=new Button("Lop Sinh Vien");

        btnlop.addActionListener(this);

        pn1.add(btnlop);

        btnlop.setBounds(5,40,100, 35);

     

        btndat=new Button("Sinh Vien Dat");

        btndat.addActionListener(this);

        pn1.add(btndat);

        btndat.setBounds(5,80,100, 35);

     

        btnkdat=new Button("SV Khong Dat");

        btnkdat.addActionListener(this);

        pn1.add(btnkdat);

        btnkdat.setBounds(5,120,100, 35);

     

        btnthoat=new Button("Thoat");

        btnthoat.addActionListener(this);

        pn1.add(btnthoat);

        btnthoat.setBounds(5,160,100, 35);

     

        lbma=new Label("Ma sinh vien");

        pn1.add(lbma);

        lbma.setBounds(110,40, 150, 35);

     

        lbten=new Label("Ho va ten");

        pn1.add(lbten);

        lbten.setBounds(110,80, 150, 35);

     

        lbdiem=new Label("Diem thi");

        pn1.add(lbdiem);

        lbdiem.setBounds(110,120, 150, 35);

     

        lbkq=new Label("Ket qua");

        pn1.add(lbkq);

        lbkq.setBounds(110,160, 150, 35);

     

        txtma=new TextField();

        pn1.add(txtma);

        txtma.setBounds(260,45, 490, 30);

     

        txtten=new TextField();

        pn1.add(txtten);

        txtten.setBounds(260,80, 490, 30);

     

        lbbt=new Label("Bai tap");

        pn1.add(lbbt);

        lbbt.setBounds(260,120, 60, 30);

     

        txtbt=new TextField();

        pn1.add(txtbt);

        txtbt.setBounds(320,120, 80, 30);

     

        lbgk=new Label("Giua ki");

        pn1.add(lbgk);

        lbgk.setBounds(410,120, 60, 30);

     

        txtgk=new TextField();

        pn1.add(txtgk);

        txtgk.setBounds(470,120, 80, 30);

     

        lbck=new Label("Cuoi ki");

        pn1.add(lbck);

        lbck.setBounds(590,120, 60, 30);

     

        txtck=new TextField();

        pn1.add(txtck);

        txtck.setBounds(650,120, 80, 30);

     

        txtkq=new TextField();

        pn1.add(txtkq);

        txtkq.setBounds(260,160, 490, 30);

     

        btnback=new Button("<<");

        btnback.addActionListener(this);

        pn1.add(btnback);

        btnback.setBounds(300,200,100, 35);

     

        btnnext=new Button(">>");

        btnnext.addActionListener(this);

        pn1.add(btnnext);

        btnnext.setBounds(450,200,100, 35);

    }

    public static void main(String[] args) throws NumberFormatException, IOException {

        // TODO Auto-generated method stub

        Main _main=new Main();

        _main.setSize(820, 270);

        _main.setVisible(true);

     

     

    }

    public List<SinhVien> danhsachSV() throws NumberFormatException, IOException

    {

        FileReader fr2=new FileReader("SV.txt");

        BufferedReader br2=new BufferedReader(fr2);

        List<SinhVien>  sv= new ArrayList<SinhVien>();

        int dem=0;

        while(br2.ready())

        {

            String str;

            str=br2.readLine();

            StringTokenizer st=new StringTokenizer(str,":");

            while(st.hasMoreTokens())

            {

                SinhVien tmpSv=new SinhVien();

                tmpSv.masv=st.nextToken();

                tmpSv.hoten=st.nextToken();

                tmpSv.baitap=Double.parseDouble(st.nextToken());

                tmpSv.giuaki=Double.parseDouble(st.nextToken());

                tmpSv.cuoiki=Double.parseDouble(st.nextToken());

                sv.add(tmpSv);

            }

            dem++;

        }

        return sv;

    }

    public void actionPerformed(ActionEvent e) {

        // TODO Auto-generated method stub

        List<SinhVien> sv=new ArrayList<SinhVien>();

        try {

            sv=danhsachSV();

        } catch (NumberFormatException e1) {

            // TODO Auto-generated catch block

            e1.printStackTrace();

        } catch (IOException e1) {

            // TODO Auto-generated catch block

            e1.printStackTrace();

        }

        if(e.getSource()==btnthoat)

        {

            System.exit(0);

        }

        if(e.getSource()==btnlop)

        {

            kdat=false;

            dat=false;

            tatca=true;

            for (SinhVien tmpSV : sv) {

                System.out.println("MASV: "+tmpSV.masv+" Hoten: "+tmpSV.hoten+" Diem Thuyet Trinh: "+String.valueOf(tmpSV.baitap)+" Diem giua ki: "+String.valueOf(tmpSV.giuaki)+" Diem cuoi ki: "+String.valueOf(tmpSV.cuoiki));

                currRow=tmpSV;

                break;

            }

            txtma.setText(currRow.masv);

            txtten.setText(currRow.hoten);

            txtbt.setText(String.valueOf(currRow.baitap));

            txtgk.setText(String.valueOf(currRow.giuaki));

            txtck.setText(String.valueOf(currRow.cuoiki));

            txtkq.setText(currRow.XepLoai());

        }

        if(e.getSource()==btnnext)

        {

                preRow=currRow;

            for (SinhVien tmpSV : sv) {

                System.out.println("MASV: "+tmpSV.masv+" Hoten: "+tmpSV.hoten+" Diem Thuyet Trinh: "+String.valueOf(tmpSV.baitap)+" Diem giua ki: "+String.valueOf(tmpSV.giuaki)+" Diem cuoi ki: "+String.valueOf(tmpSV.cuoiki));

                if(tatca)

                {

                    if(blNext)

                    {

                        currRow=tmpSV;

                        break;

                    } 

                    if(preRow.masv.equals(tmpSV.masv))

                    {

                        blNext=true;

                    }

                }

                if(dat)

                {

                    if(blNext)

                    {

                        currRow=tmpSV;

                        if(currRow.DTB()>4)

                        break;

                    } 

                    if(preRow.masv.equals(tmpSV.masv))

                    {

                        blNext=true;

                    }

                }

            }

            blNext=false;

            txtma.setText(currRow.masv);

            txtten.setText(currRow.hoten);

            txtbt.setText(String.valueOf(currRow.baitap));

            txtgk.setText(String.valueOf(currRow.giuaki));

            txtck.setText(String.valueOf(currRow.cuoiki));

            txtkq.setText(currRow.XepLoai());

        }

        if(e.getSource()==btnback)

        {

                preRow=currRow;

            for (SinhVien tmpSV : sv) {

                System.out.println("MASV: "+tmpSV.masv+" Hoten: "+tmpSV.hoten+" Diem Thuyet Trinh: "+String.valueOf(tmpSV.baitap)+" Diem giua ki: "+String.valueOf(tmpSV.giuaki)+" Diem cuoi ki: "+String.valueOf(tmpSV.cuoiki));

                 

                if(blNext)

                {

                    break;

                } 

                if(preRow.masv.equals(tmpSV.masv))

                {

                    blNext=true;

                }

                else

                {

                    backRow=tmpSV;

                }

            }

            currRow=backRow;

            blNext=false;

            txtma.setText(currRow.masv);

            txtten.setText(currRow.hoten);

            txtbt.setText(String.valueOf(currRow.baitap));

            txtgk.setText(String.valueOf(currRow.giuaki));

            txtck.setText(String.valueOf(currRow.cuoiki));

            txtkq.setText(currRow.XepLoai());

        }

        if(e.getSource()==btndat)

        {

            kdat=false;

            dat=true;

            tatca=false;

            for (SinhVien tmpSV : sv) {

                if(tmpSV.DTB()>=4)

                {

                    System.out.println("MASV: "+tmpSV.masv+" Hoten: "+tmpSV.hoten+" Diem Thuyet Trinh: "+String.valueOf(tmpSV.baitap)+" Diem giua ki: "+String.valueOf(tmpSV.giuaki)+" Diem cuoi ki: "+String.valueOf(tmpSV.cuoiki));

                    currRow=tmpSV;

                    break;

                }

            }

            txtma.setText(currRow.masv);

            txtten.setText(currRow.hoten);

            txtbt.setText(String.valueOf(currRow.baitap));

            txtgk.setText(String.valueOf(currRow.giuaki));

            txtck.setText(String.valueOf(currRow.cuoiki));

            txtkq.setText(currRow.XepLoai());

        }

        if(e.getSource()==btnkdat)

        {

            kdat=true;

            dat=false;

            tatca=false;

            for (SinhVien tmpSV : sv) {

                if(tmpSV.DTB()<4)

                {

                    System.out.println("MASV: "+tmpSV.masv+" Hoten: "+tmpSV.hoten+" Diem Thuyet Trinh: "+String.valueOf(tmpSV.baitap)+" Diem giua ki: "+String.valueOf(tmpSV.giuaki)+" Diem cuoi ki: "+String.valueOf(tmpSV.cuoiki));

                    currRow=tmpSV;

                    break;

                }

            }

            txtma.setText(currRow.masv);

            txtten.setText(currRow.hoten);

            txtbt.setText(String.valueOf(currRow.baitap));

            txtgk.setText(String.valueOf(currRow.giuaki));

            txtck.setText(String.valueOf(currRow.cuoiki));

            txtkq.setText(currRow.XepLoai());

        }

    }

 

}
SinhVien



Java:
package SinhVien;



import java.io.BufferedReader;

import java.io.InputStreamReader;



public class SinhVien {

    String masv;

    String hoten;

    double baitap;

    double giuaki,cuoiki;

    public String getMasv() {

        return masv;

    }

    public void setMasv(String masv) {

        this.masv = masv;

    }

    public String getHoten() {

        return hoten;

    }

    public void setHoten(String hoten) {

        this.hoten = hoten;

    }

    public double getBaitap() {

        return baitap;

    }

    public void setBaitap(double baitap) {

        this.baitap = baitap;

    }

    public double getGiuaki() {

        return giuaki;

    }

    public void setGiuaki(double giuaki) {

        this.giuaki = giuaki;

    }

    public double getCuoiki() {

        return cuoiki;

    }

    public void setCuoiki(double cuoiki) {

        this.cuoiki = cuoiki;

    }

 

 

 

    public double DTB()

    {

        return (baitap+giuaki+cuoiki)/3.0f;

    }

    public String XepLoai()

    {

        String str;

        if(DTB()<4) str="YEU";

        else if(DTB()<7) str="TRUNG BINH";

        else if(DTB()<8) str="KHA";

        else str="GIOI";

        return str;

    }

    public String KetQua()

    {

        String str;

        if(DTB()<4) str="Khong Dat";

        else str="Dat";

        return str;

    }

}
...Mong anh chị giúp đỡ, em bị sai ở chỗ nút >> và << ... Ngoài ra còn bị ở cả nút Không đạt và đạt​
 
Last edited by a moderator:

Joe

Thành viên VIP
21/1/13
2,951
1,318
113
The most important rules are:
- Posting the codes with ALL relevant dependencies. Also, how can people guess what the file SV.txt as following looks like?
PHP:
FileReader fr2=new FileReader("SV.txt");
- If there's an error message or Exception, post the message or exception in its full form
- Finally, post your codes in correct format so that people can read them. What you did blinds the viewers. HOW? Move your mouse to the symbols above the editor and read the displayed text. Chick at the symbol where Code appears and insert your codes between the squared brackets.
I'm so sorry,
because this is my first time participating in the forum , please, admin ignore me
Don't be sorry, it's normal when you ask a question you have to make sure that your question is understood by the questioned. Also, in a forum when you post a question you have to make sure that people who can't ask you directly could CLEARLY understand what you want to know.

NOW to your codes:
1) I show you here how to code in the simplest way. Complicated coding always confuses the coders and produces bugs. Compare this
PHP:
public List<Sinhvien> danhsachSV() throws Exception
{
/*
        FileReader fr2=new FileReader("SV.txt");
        BufferedReader br2=new BufferedReader(fr2);
        List<Sinhvien> sv= new ArrayList<Sinhvien>();
        int dem=0;
        while(br2.ready())
        {
                String str;
                str=br2.readLine();
                StringTokenizer st=new StringTokenizer(str,":");
                while(st.hasMoreTokens())
                {
                        Sinhvien tmpSv=new Sinhvien();
                        tmpSv.masv=st.nextToken();
                        tmpSv.hoten=st.nextToken();
                        tmpSv.baitap=Double.parseDouble(st.nextToken());
                        tmpSv.giuaki=Double.parseDouble(st.nextToken());
                        tmpSv.cuoiki=Double.parseDouble(st.nextToken());
                        sv.add(tmpSv);
                }
                dem++;
         }
        return sv;
*/
        FileInputStream fi = new FileInputStream("SV.txt");
        byte[] cont = new byte[fi.available()];
        int n = fi.read(cont);
        fi.close();
        // remove CR (\r) -because of Windows- and split with NL (\n)
        String[] lines = (new String(cont, 0, n)).replaceAll("\r","").split("\n");
        List<Sinhvien> sv= new ArrayList<Sinhvien>(lines.length);
        // now do the "tokenizing"
        for (String tmp : lines) {
                String[] el = tmp.split(":");
                Sinhvien tmpSv=new Sinhvien();
                tmpSv.masv=el[0];
                tmpSv.hoten=el[1];
                tmpSv.baitap=Double.parseDouble(el[2]);
                tmpSv.giuaki=Double.parseDouble(el[3]);
                tmpSv.cuoiki=Double.parseDouble(el[4]);
                sv.add(tmpSv);
        }
        return sv;
}
2) and the method actionPerformed() is itself an event thread. What does that means? During the processing an event within an event thread the main thread (in this case: your app) is FROZEN. In most case it's undesirable. Furthermore, redundancy should be minimized, not repetitive. Example:
PHP:
if (e.getSource() == xyz)...
if (e.getSource() == abc) ...
...
should be
PHP:
Button but = (Button) e.getSource();
if (but == xyz) ...
if (but == abc)...
...
3) OO Coding ALWAYS requires instantiated objects. Object Reference must always be checked whether it's instantiated or not. Blindly use often leads to NullPointerException. And that is your PROBLEM with << and >>

Check it and answer me where is this object and what is its name...then I'll tell you how to work out with the public void actionPerformed(ActionEvent e)
 
Sửa lần cuối:

kaihide

New Member
8/4/15
4
0
1
27
Nha Trang
Cảm ơn admin rất nhiều, em đã hoàn chỉnh bài của em.. Và điều này thật là tuyệt :x
..Code của admin đưa gợi ý cho em rất ngắn gọn và dễ hiễu, có lẽ do em mới học được 2 tuần mà chương trình của em lại quá dồn dập, nên em vẫn chưa tìm hiểu nhiều về JAVA được !!
Dù gì em cũng cảm ơn admin 1 lần nữa đã giải thích cặn kẻ những vấn đề e thắc mắc
 

Joe

Thành viên VIP
21/1/13
2,951
1,318
113
Xin chào, bạn có thể cho mình tham khảo code được không ạ?
The thread is public. Your notice is sufficient for the author. You could download, copy and modify the codes AND if you are nice you could SHARE your modifications with the others.