Java 实现注册类
嗨,我是一个全新的JAVA OO概念的人,这是我第一次编程,我目前一直在研究如何创建一个注册类和一个存储所有注册信息的类,这就是我所做的,4个类,一个帐户类,一个职员类扩展帐户,一个学生类扩展帐户,和一个数据存储类来存储信息并在需要时提取它们Java 实现注册类,java,Java,嗨,我是一个全新的JAVA OO概念的人,这是我第一次编程,我目前一直在研究如何创建一个注册类和一个存储所有注册信息的类,这就是我所做的,4个类,一个帐户类,一个职员类扩展帐户,一个学生类扩展帐户,和一个数据存储类来存储信息并在需要时提取它们 public class Account { private String name; private String department; private String username; private String password;
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
}
/**/
/**/
/****/
导入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;
}
}
公共类数据存储
{
ArrayList staff=新的ArrayList();
ArrayList student=新的ArrayList();
公共数据存储(员工aAcc)
{
新增(aAcc);
}
公共数据存储(学生aAcc)
{
学生。添加(aAcc);
}
公共字符串msg()
{
Staff sf=Staff.get(0);
返回工作人员;
}
}
您的数据存储类需要一些更正:
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 staffMembers=新的ArrayList();
ArrayList students=新ArrayList();
//默认构造函数
公共数据存储(){
}
公职人员(工作人员aAcc)
{
添加(aAcc);
}
公共无效添加学生成员(学生aAcc)
{
学生。添加(aAcc);
}
公共学生getStudentById(字符串id)
{
}
//更多检索方法
}
您通常希望有更多的检索方法(按部门、名称、id获取)。有些返回单个项目,有些返回列表。如果您只对按id检索帐户感兴趣,那么可以使用映射而不是列表。事实上,要支持所有检索方法,您需要某种关系数据库。如果您正在寻找一个简单的解决方案,请保留ArrayList并遍历所有成员以找到您要查找的成员。您的数据存储类需要一些更正:
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 staffMembers=新的ArrayList();
ArrayList students=新ArrayList();
//默认构造函数
公共数据存储(){
}
公职人员(工作人员aAcc)
{
添加(aAcc);
}
公共无效添加学生成员(学生aAcc)
{
学生。添加(aAcc);
}
公共学生getStudentById(字符串id)
{
}
//更多检索方法
}
您通常希望有更多的检索方法(按部门、名称、id获取)。有些返回单个项目,有些返回列表。如果您只对按id检索帐户感兴趣,那么可以使用映射而不是列表。事实上,要支持所有检索方法,您需要某种关系数据库。如果您正在寻找一个简单的解决方案,请保留ArrayList并遍历所有成员以找到您正在寻找的成员。目前为止,它看起来不错。您可以做的一件事是将ID(
staffID
和studentID
)向上移动到Account
类,称之为类似于accountID
。似乎您创建的所有帐户都需要ID,因此将其上移是有意义的
这样做的一个好处是通过拥有一个
集合来简化数据存储
类。即使您希望将您的员工
和学生
分开,您也可以使用映射
而不是数据存储
中的列表
,因为这将使查找更快、更容易。目前看来效果不错。您可以做的一件事是将ID(staffID
和studentID
)向上移动到Account
类,称之为类似于accountID
。似乎您创建的所有帐户都需要ID,因此将其上移是有意义的
这样做的一个好处是通过拥有一个集合来简化数据存储
类。即使您希望将您的员工
和学生
分开,您也可以使用映射
而不是数据存储
中的列表
,因为这将使查找更快更容易。多亏了这些答案,我提出了一个带有HashMap对象的新数据存储类,请注意,我还没有完全掌握HashMap的工作原理,这是我所做的部分工作,我想问一下我的方向是否正确?一个测试类的创建工作,我能够得到A值
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());
}
}
多亏了这些答案,我用HashMap对象创建了一个新的DataStorage类,请注意,我还没有完全掌握HashMap是如何工作的,这是我部分完成的,我想问一下,我的方向正确吗?一个测试类的创建工作,我能够得到A值
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());
}
}
这里是一些测试类,因为它是用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...
}
这里是一些测试类,因为它是用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...
}
a) 现在你想被评分吗?或者问题是什么?b) 您的DataStorage类可以重命名为AccountDAO,其中DAO是数据访问对象的通用缩写,是一种通用模式。。。不过数据存储有点奇怪。否添加(帐户a)
或获取帐户(字符串nm)
?msg()
应该做什么?a)我不知道如何继续,datastorage类尚未完成我想知道是否可以检查传递的帐户是Staff类型还是Student类型,以便我可以将Staff帐户添加到Staff arraylist中,将Student帐户添加到Student arraylist中,我还对如何创建一个可以从arraylist中检索教职员工或学生信息的方法感兴趣。b) 我读了一本关于head first java的书,还没有遇到DAO,所以我不知道它,但我会去了解它是什么。谢谢)现在你想被评分吗?或者问题是什么?b) 您的DataStorage类可以重命名为AccountDAO,其中DAO是数据访问对象的通用缩写,是一种通用模式。。。不过数据存储有点奇怪。不
// 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() {
...
}
}