реализация класса регистрации - PullRequest
1 голос
/ 12 февраля 2010

Привет, я совершенно новый парень в концепции JAVA OO, и это мой первый раз программирование, я в настоящее время застрял в том, как создать класс регистрации и класс, который будет хранить всю регистрационную информацию, это то, что у меня есть готово, 4 класса, класс Account, учетная запись расширения класса Staff, учетная запись расширения класса Student и класс dataStorage для хранения информации и ее извлечения при необходимости.

public class Account {

 private String name;
 private String department;
 private String username;
 private String password;

 public Account()
 {
 } 
    public Account(String nm,String dep,String user,String pass) 
    {
     name = nm;
       department = dep;
     username = user;
     password = pass;
    }

    public void setName(String nm)
    {
     name = nm;
    }

    public String getName()
    {
    ..... other accessors
}

/ ** /

public class Student extends Account {

 private String studentNRIC;
 private String studentID;

 public Student(String n, String nr, String id, String dep, String user, String pass)
 {
  super(n, dep, user, pass);
  studentNRIC = nr;
  studentID = id;
 }

    public void setStudentNRIC(String nr)
    {
     studentNRIC = nr;
    }

    public String getStudentNRIC()
    {
     return studentNRIC;
    }
    ....accessors

}

/ ** /

public class Staff extends Account {

 private String staffID;

 public Staff(String n, String id, String dep, String user, String pass)
 {
  super(n, dep, user, pass);
  staffID = id; 
 }

    public void setStaffID(String id)
    {
     staffID = id;
    }

    public String getStaffID()
    {
     return staffID;
    }


}

/ **** / импорт java.util. *;

public class DataStorage 
{
    ArrayList<Account> staff = new ArrayList<Account>();      
    ArrayList<Account> student = new ArrayList<Account>();  

    public DataStorage(Staff aAcc) 
    {
     staff.add(aAcc);
    }

    public DataStorage(Student aAcc)
    {
     student.add(aAcc);
    }

    public String msg()
    {
     Staff sf = staff.get(0);


    return staff;
    }
}

Ответы [ 4 ]

1 голос
/ 12 февраля 2010

Пока все выглядит хорошо. Одна вещь, которую вы могли бы сделать, это переместить идентификатор (staffID и studentID) в класс Account, назвав его как accountID. Похоже, что все создаваемые вами учетные записи нуждаются в идентификаторе, поэтому их перемещение имеет смысл.

Одним из преимуществ этого было бы упростить ваш DataStorage класс, имея один Collection. Даже если вы хотите, чтобы ваши Staff и Students были разделены, вы также можете использовать Map вместо List в DataStorage, поскольку это сделает поиск быстрее и проще.

0 голосов
/ 16 февраля 2010

Вот некоторый тестовый класс, как это было бы написано с помощью JUnit.

// Tests related to the Staff class
public class StaffTest {

    // This test should be successful, as all argument are correct
    @Test
    public void testCreateStaffMember() {
        String name = "John";
        String staffId = "0900477A";
        String department = "ENG";
        String username = "john";
        String password = "secret";
        new Staff(name, staffId, department, username, password);
    }

    // This test should throw an IllegalArgumentException, as the name is required.
    @Test(expected=IllegalArgumentException.class)
    public void testCreateStaffMemberNameNull() {
        String name = null;
        String staffId = "0900477A";
        String department = "ENG";
        String username = "john";
        String password = "secret";
        new Staff(name, staffId, department, username, password);
    }

    // This test should throw an IllegalArgumentException, as the name is required.
    @Test(expected=IllegalArgumentException.class)
    public void testCreateStaffMemberNameEmpty() {
        String name = "";
        String staffId = "0900477A";
        String department = "ENG";
        String username = "john";
        String password = "secret";
        new Staff(name, staffId, department, username, password);
    }

    // More constructor test follow


    // This test should be successful, as all getters, should return the given input values.
    @Test
    public void testValidateGetterMethods() {
        String name = "";
        String staffId = "0900477A";
        String department = "ENG";
        String username = "john";
        String password = "secret";
        Staff staff = new Staff(name, staffId, department, username, password);
        Asset.assertEquals(name, staff.getName());
        Asset.assertEquals(staffId, staff.getStaffId());
        Asset.assertEquals(department, staff.getDepartment());
        Asset.assertEquals(username, staff.getUsername());
        Asset.assertEquals(password, staff.getPassword());
    }

    // More tests...
}
// Tests related to the DataStorage class
public class DataStorageTest {

    @Test
    public void testAddStaffMembers() {
        DataStorage ds = new DataStorage();
        ds.addStaff(createJohn());
        ds.addStaff(createAlan());
    }

    // Here you deside, as the designer off the application, what should happen!
    // Will the second John, override the first John? As they have the same ID? 
    // Or will an exception be thrown, because the staff member with that id 
    // already exists?
    @Test
    public void testAddStaffMembersSameName() {
        DataStorage ds = new DataStorage();
        ds.addStaff(createJohn());
        ds.addStaff(createJohn());
    }

    Staff createJohn() {
        String name = "John";
        String staffId = "0900477A";
        String department = "ENG";
        String username = "john";
        String password = "secret";
        return new Staff(name, staffId, department, username, password);
    }

    Staff createAlan() {
        ...
    }
}
0 голосов
/ 12 февраля 2010

благодаря ответам я придумал новый класс DataStorage с объектом HashMap, обратите внимание, что я не совсем понимаю, как работает HashMap, и это то, что я частично сделал, и хотел бы спросить, правильно ли я иду направление? Создание тестового класса работает, я могу получить значение.

import java.util.*;

public class DataStorage 
{
    HashMap<String, Student> students = new HashMap<String, Student>();  
    HashMap<String, Staff> staffMembers = new HashMap<String, Staff>();  
    //Default constructor
    public DataStorage(){
    }

    public void addStaffMember(Staff aAcc) 
    {
     staffMembers.put(aAcc.getAccID(),aAcc);
    }

    public void addStudentMember(Student aAcc)
    {
     students.put(aAcc.getAccID(),aAcc);
    }

   public Staff getStaffMember(Staff aAcc)
   {
   return   staffMembers.get(aAcc.getAccID());
   }

}

/ * тест * /

public class Test {


    public static void main(String[] args) {
        DataStorage ds = new DataStorage();
        String name = "John";
        String ID = "0900477A";
        String Department = "ENG";
        String username = "ky";
        String pass = "ky";

        Staff sf2 = new Staff("Tim","Tim","Tim","Tim","Tim");
       Staff sf = new Staff(name, ID, Department, username, pass);
       ds.addStaffMember(sf2);
       ds.addStaffMember(sf);
      Staff temp = ds.getStaffMember(sf2);

       System.out.println(temp.getName());
    }
}
0 голосов
/ 12 февраля 2010

Ваш класс DataStorage нуждается в некоторых исправлениях:

public class DataStorage 
{
    ArrayList<Account> staffMembers = new ArrayList<Account>();      
    ArrayList<Account> students = new ArrayList<Account>();  

    // Default constructor
    public DataStorage() {
    }

    public void addStaffMember(Staff aAcc) 
    {
     staffMembers.add(aAcc);
    }

    public void addStudentMember(Student aAcc)
    {
     students.add(aAcc);
    }

    public Student getStudentById(String id)
    {
    }

    // More retrieval methods
}

Как правило, вы хотите иметь больше методов поиска (получить по отделу, имени, идентификатору). Некоторые вернут один элемент, а некоторые список. Если вы заинтересованы только в получении учетных записей по идентификатору, вы можете использовать карту вместо списка. Правда в том, что для поддержки всех методов поиска вам понадобится реляционная база данных некоторого вида. Если вы ищете наивное решение, сохраняйте ArrayList и перебирайте все элементы, чтобы найти те, которые вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...