Avatar billede michelle_mikkelsen Nybegynder
16. januar 2003 - 11:11 Der er 13 kommentarer og
1 løsning

Hjælp til Applet

Sådan som programmet er nu, kan man taste et hvilket som helst tegn i feltet cpr.nr: og derefter vil alle oplysninger dukke op i de resterende felter.. Det jeg vil have programmet til at gøre er, at programmet kun skyder oplysninger, såfremt cpr.nr er rigtigt, hvis ikke det er tilfældet så skal der dukke en meddelse op med, at cpr.nr ikke er gyldigt... Men før det kan lade sig gøre, så skal personen også have tildelt et cpr.nr... og det ved jeg hellere ikke helt, hvordan jeg skal gøre...

import java.awt.event.*;
import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.applet.Applet;

public class OB4 extends JApplet implements ActionListener
{
        JButton søgKnap = new JButton("Søg");
        JButton annulerKnap = new JButton("Annuler");

        JTextField text  = new JTextField(15);
        JTextField text1 = new JTextField(30);
        JTextField text2 = new JTextField(30);
        JTextField text3 = new JTextField(30);
        JTextField text4 = new JTextField(30);
        JTextField text5 = new JTextField(30);

        JLabel cprnr = new JLabel    ("Indtast Cpr.nr.:");
        JLabel fornavn = new JLabel  ("Fornavn    :");
        JLabel efternavn = new JLabel("Efternavn  :");
        JLabel addresse = new JLabel ("Adresse    :");
        JLabel postnr = new JLabel  ("Postnr.    :");
        JLabel by = new JLabel      ("By        :");
        JLabel advarsel = new JLabel ("Det soegende post gav ingen resultater!");


            public void init()
            {
            FlowLayout flo = new FlowLayout();
            Container felt = getContentPane();
            felt.setLayout(flo);
            felt.add(cprnr);
            felt.add(text);
            felt.add(søgKnap);
            felt.add(annulerKnap);
            felt.add(fornavn);
            felt.add(text1);
            felt.add(efternavn);
            felt.add(text2);
            felt.add(addresse);
            felt.add(text3);
            felt.add(postnr);
            felt.add(text4);
            felt.add(by);
            felt.add(text5);
            setContentPane(felt);
            søgKnap.addActionListener(this);
            }
                public void actionPerformed(ActionEvent e)
                {
                    if (e.getSource() == søgKnap)
                    {
                        text1.setText("Christina");
                        text2.setText("Nielsen");
                        text3.setText("Strandboulevarden 166, 3 Tv");
                        text4.setText("2100");
                        text5.setText("København Ø");

                    }
                    else if (e.getSource() != søgKnap)
                    {
                        FlowLayout flo = new FlowLayout();
                        Container felt = getContentPane();
                        felt.add(advarsel);
                        setContentPane(felt);
                        søgKnap.addActionListener(this);
                    }
                }
}
Avatar billede arne_v Ekspert
16. januar 2003 - 11:17 #1
Følgende kode kan bruges til at checke et CPR nummer med:

import java.util.*;

public class CPR {
  // format of danish CPR number:
  //  ddmmyy-nnnc
  // where:
  //  dd  = day
  //  mm  = month
  //  yy  = year
  //  nnn = sequence (includes century)
  //  c  = checksum (includes sex)
  private String number;

  // constructor
  public CPR(String number) {
      this.number = number;
  }

  // check validity
  public boolean isValid() {
      int[] ix = { 0, 1, 2, 3, 4, 5, 7, 8, 9, 10 };
      int[] c = { 4, 3, 2, 7, 6, 5, 4, 3, 2, 1 };
      if (number.length() != 11) {
        return false;
      }
      if (number.charAt(6) != '-') {
        return false;
      }
      for (int i = 0; i < 10; i++) {
        if (!Character.isDigit(number.charAt(ix[i]))) {
            return false;
        }
      }
      if (dd() > 31) {
        return false;
      }
      if (mm() > 12) {
        return false;
      }
      if (century() == 0) {
        return false;
      }
      int temp = 0;
      for (int i = 0; i < 10; i++) {
        temp = temp + c[i] * numericValue(number.charAt(ix[i]));
      }
      return ((temp % 11) == 0);
  }
  // check make/female
  public boolean isMale() {
      return odd(numericValue(number.charAt(10)));
  }
  public boolean isFemale() {
      return even(numericValue(number.charAt(10)));
  }
  // get date of birth
  public Date getBirth() {
      int year = yy() + century();
      int mon = mm() - 1;
      int mday = dd();
      GregorianCalendar temp = new GregorianCalendar();
      temp.set(year, mon, mday);
      return temp.getTime();
  }
  // get age
  public int getAge() {
      Calendar now = GregorianCalendar.getInstance();
      Calendar born = new GregorianCalendar();
      born.setTime(getBirth());
      int result;
      result = now.get(Calendar.YEAR) - born.get(Calendar.YEAR);
      if (now.get(Calendar.DAY_OF_YEAR) < born.get(Calendar.DAY_OF_YEAR)) {
        result--;
      }
      return result;
  }

    // standard methods
    public int hashCode() {
        return number.hashCode();
    }
    public boolean equals(Object o) {
        if(o instanceof CPR) {
            return number.equals(((CPR)o).number);
        } else {
            return false;
        }
    }
  // get parts
  private int dd() {
      return Integer.parseInt(number.substring(0, 2));
  }
  private int mm() {
      return Integer.parseInt(number.substring(2, 4));
  }
  private int yy() {
      return Integer.parseInt(number.substring(4, 6));
  }
  // calculate century
  private int century() {
      switch (numericValue(number.charAt(7))) {
        case 0 :
        case 1 :
        case 2 :
        case 3 :
            return 1900;
        case 4 :
        case 9 :
            if (yy() < 37)
              return 2000;
            else
              return 1900;
        case 5 :
        case 6 :
        case 7 :
        case 8 :
            if (yy() < 37)
              return 2000;
            else if (yy() > 57)
              return 1800;
            else
              return 0;
        default :
            return 0;
      }
  }
  // odd/even
  private static boolean odd(int v) {
      return ((v & 1) == 1);
  }
  private static boolean even(int v) {
      return ((v & 1) == 0);
  }
  // numeric value of char
  private static int numericValue(char c) {
      return (c - '0');
  }
}
Avatar billede arne_v Ekspert
16. januar 2003 - 11:25 #2
Hvis du erstatter:

                    if (e.getSource() == søgKnap)
                    {
                        text1.setText("Christina");
                        text2.setText("Nielsen");
                        text3.setText("Strandboulevarden 166, 3 Tv");
                        text4.setText("2100");
                        text5.setText("København Ø");
                    }

med:

                    if (e.getSource() == søgKnap)
                    {
                        if((new CPR(text.getText())).isValid()) {
                        text1.setText("Christina");
                        text2.setText("Nielsen");
                        text3.setText("Strandboulevarden 166, 3 Tv");
                        text4.setText("2100");
                        text5.setText("København Ø");
                        }
                    }

så tester du om det valid inden du fylder data ind.
Avatar billede michelle_mikkelsen Nybegynder
16. januar 2003 - 11:25 #3
Programmet kan godt compiles men den kan ikke køres....
Avatar billede arne_v Ekspert
16. januar 2003 - 11:27 #4
Hvad sker der ?
Avatar billede michelle_mikkelsen Nybegynder
16. januar 2003 - 11:34 #5
Der sker ikke noget!!! der kommer et blankt billed!!!
Men jeg tror det sidste du har lavet er godt nok men, der kommer hellere ikke noget frem her, fordi personen ikke har et cpr.nr!!! hvordan gør man det!!!
Avatar billede arne_v Ekspert
16. januar 2003 - 11:51 #6
Hvis du indtaster et valid CPR nummer (hint: brug evt. dit eget),
så skulle testx1-text5 gerne blive sat med Christina's oplysninger.

Din Applet skal vel så ændres så den ikke altid sætter hendes
værdier, men henter de rigtige.

F.eks. noget med at connecte til en database og hente oplysninger
for det pågældende CPR nummer og sætte dem ind.
Avatar billede michelle_mikkelsen Nybegynder
16. januar 2003 - 12:01 #7
Det forstod jeg ikke helt, men altså det behøver vødvendigvis ikke være forbundet med database.. Det skal være nogen oplysninger der er hardkodet direkte i koden der skal visses i felterne.
Avatar billede arne_v Ekspert
16. januar 2003 - 12:08 #8
Så kan du nok nøjes med bare at lave at array af objekter eller
flere arrays af Strings og så så bare søge i det array efter
den rigtige person of fylde de data i.
Avatar billede michelle_mikkelsen Nybegynder
16. januar 2003 - 13:14 #9
Jo jo det lykkedes, jeg fik lavet programmet, men bare på en anden måde... Det kører i hvertfald som den skal.... Men tusind tak for hjælp aligevel..
Avatar billede michelle_mikkelsen Nybegynder
16. januar 2003 - 13:44 #10
Hej Arne..
Der var lige en lille ting mere som jeg håber at du kan hjælpe med.. det er når man taster et forkert cpr, så vil jeg gerne have den til at udskrive meddelse, hvor der stå, f.eks "personen fides ikke!!!!", jeg vil gerne have det til at stå lige under den sidste felt...
Avatar billede arne_v Ekspert
16. januar 2003 - 13:53 #11
Det må jo så blive:

if((new CPR(text.getText())).isValid()) {
  // fyld data i                       
} else {
  // giv fejl-besked
}

Der er så mange forskellige måde at vise den fejl-besked på.
Avatar billede michelle_mikkelsen Nybegynder
16. januar 2003 - 13:59 #12
Kører det hos dig... For jeg kan nemli ikke få det til at køre på den måde som du skriver her...
Avatar billede arne_v Ekspert
16. januar 2003 - 14:14 #13
Hvad mener du med at det ikke kører ?

hvis CPR nummer er validt {
  fyld data i for CPR nummer
} elllers {
  giv fejl-besked
}

må da virke.

Hvordan forsøger du at give den fejl-besked ?
Avatar billede arne_v Ekspert
16. januar 2003 - 14:16 #14
Hvis du poster den kode du bruger, så kan jeg nemmere hjælpe.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester