【问题标题】:Payroll System using custom LinkedList Class使用自定义 LinkedList 类的薪资系统
【发布时间】:2014-03-23 22:28:54
【问题描述】:

我正在使用链表编写工资单应用程序。目的是读取多个文件并将其内容存储在链表中。然后程序将使用另一个类从链接到另一个文本文件中输出所需的数据。稍后这些文件将被替换为数据库表。

我的 TestReadFile 类读取数据并存储在链表中,然后应该读取它。 LinkedListClass 和 LinkedListNode 类应该是通用的。

我想将每个部门的对象存储在单独的对象中,然后将其放置在链表中,并在需要时从链表中检索对象。

任何帮助将不胜感激! 非常感谢

package payroll;
public class Department implements iDepartment
{
    private int deptID;
    private String deptName, deptLoc;

    public Department()
    {
        deptID = 0;
        deptName = "";
        deptLoc = "";
    }

    public Department(int deptID, String deptName, String deptLoc)
    {
        setDeptID(deptID);
        setDepName(deptName);
        setDeptLoc(deptLoc);
    }

    public void setDeptID(int deptID)
    {
        this.deptID = deptID;
    }

    public void setDepName(String deptName)
    {
        this.deptName = deptName;
    }

    public void setDeptLoc(String deptLoc)
    {
        this.deptLoc = deptLoc;
    }

    public int getDeptID()
    {
        return deptID;
    }

    public String getDeptName()
    {
        return deptName;
    }

    public String getDeptLoc()
    {
        return deptLoc;
    }
}

package payroll;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class TestReadFile 
{
    private static Scanner inFile;    
    private static Department department;
    public static void main(String[] args) throws FileNotFoundException
    {
        inFile = new Scanner(new FileReader("Department.in"));

        LinkedListClass dept = new LinkedListClass();        

        inFile.useDelimiter(";");
//        while(inFile.hasNextLine())
//        {            
            department = new Department();
            department.setDeptID(inFile.nextInt());
            department.setDepName(inFile.next());
            department.setDeptLoc(inFile.next());            
            dept.addLast(department);                        
//        }
//

//      dept.outputObject();    
        System.out.println("Department ID: " + dept.outputObject().toString());             
    }
}

public class LinkedListClass<T> implements iLinkedListClass<T>
{
    private LinkedListNode<T> head, tail, trav, p;
    private int count;


    public LinkedListClass()
    {
        head = null;
        tail = null;
        count = 0;
    }

    public void addFirst(T data)
    {
        p = new LinkedListNode<T>(data, null);
        p.setLink(head);
        head = p;
    }

    public void addLast(T data)
    {
        p = new LinkedListNode<T>(data, null);

        if(head == null)
        {
            head = p;
            tail = p;
        }
        else
        {
            tail.setLink(p);
            tail = p;
        }
    }

    public void removePosition(int pos)
    {
        LinkedListNode<T> prev;
        count = 0;

        if(pos == 0)
        {
            head = head.getLink();
        }

        else if(pos < size())
        {
            prev = head;
            for (int i = 1; i <= (pos - 1); i++)
            {
                prev = prev.getLink();
            }
            prev.setLink(prev.getLink().getLink());

            //if last one to be deleted
            if (prev.getLink() == null)
            {
                tail = prev;
            }
        }
    }

    public void print()
    {
        trav = head;

        while(trav != null)
        {
            System.out.println("Value: " + trav.getInfo());
            trav = trav.getLink();
        }
    }

    public int size()
    {
        trav = head;
        count = 0;

        while(trav != null)
        {
            count++;
            trav = trav.getLink();
        }
        return count;
    }

    public boolean search(T data)
    {
        boolean found = false;
        trav = head;

        while(trav != null)
        {
            if(trav.getLink() != null)
            {
                found = true;
            }
            trav = trav.getLink();
        }
        if(found)
        {
            System.out.println("Value searched is: " + data);
        }
        else
        {
            System.out.println("Value does not exist in the list");
        }
        return found;
    }

    public void insert(T data, int pos)
    {
        trav = head;

        if((pos <= size()) && (pos > 0))
        {
            count = 1;
            while(count <= pos)
            {
                if(count == pos)
                {
                    p = new LinkedListNode(data , null);
                    p.setLink(trav.getLink());
                    trav.setLink(p);
                }
                trav = trav.getLink();
                count++;
            }
        }
        else if(pos <= 0)
        {
            addFirst(data);
        }
        else if(pos > size())
        {
            addLast(data);
        }        
    }

    public int position(T data)
    {
        int pos = -1;
        trav = head;
        while(trav != null)
        {
            if(trav.getInfo() != null)
            {
                return pos;
            }
            pos++;
            trav = trav.getLink();
        }
        return -1;
    }    

    public T outputObject()
    {
        trav = head;
        return trav.getInfo();
    }
}


package payroll;
public class LinkedListNode<T>
{
    private T data;
    private LinkedListNode<T> link;

    public LinkedListNode(T info, LinkedListNode<T> link)
    {
        this.data = info;
        this.link = link;
    }

    public void setInfo(T info)
    {
        this.data = info;
    }

    public void setLink(LinkedListNode<T> link)
    {
        this.link = link;
    }

    public T getInfo()
    {
        return this.data;
    }

    public LinkedListNode<T> getLink()
    {
        return this.link;
    }
}

【问题讨论】:

    标签: java class generics linked-list


    【解决方案1】:

    你应该通过你将创建的类(对象)来分解你的问题,而不是你想要做的程序性工作。示例:在您的情况下,您似乎拥有一家由一个或多个部门组成的公司。所以..创建一个公司类,并给它一个读取部门的方法,等等。

    例如,考虑下面的代码。

    主类

    package com.example.accounting;
    import java.util.LinkedList;
    public class Main {
    // Object fields
    private static Main me;
    private Company company;
    private LinkedList<Department> departments;
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        me = new Main();
        me.doWork(args);
    
    }
    
    private void doWork(String[] args) {
        //TODO accept file name as an argument?!
    
        company = new Company();
        company.addDepartment("Department.in");
        company.listDepartments();
    
        departments = company.getDepartments();
    }
    }
    

    公司类

    package com.example.accounting;
    
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.util.LinkedList;
    import java.util.Scanner;
    
    public class Company {
    // Object fields
    LinkedList<Department> departments = null;
    
    public Company() {
        departments = new LinkedList<Department>();
    }
    
    public boolean addDepartment(String file) {
        Scanner source = null;
    
        try {
            source = new Scanner(new FileReader(file));
        } catch (FileNotFoundException e) {
            System.out.println("Error trying to read " + file + ": " + e.getMessage());
            e.printStackTrace();
            return false;
        }
        source.useDelimiter(";");
    
        while(source.hasNextLine()) {
            int departmentId = source.nextInt();
            String departmentName = source.next();
            String departmentLocation = source.next();
            departments.add(new Department(departmentId, departmentName, departmentLocation));
        }
        source.close();
        return true;
    }
    
    public LinkedList<Department> getDepartments() {
        return departments;
    }
    
    public void listDepartments() {
    
        for (Department dept : departments) {
            System.out.println(" " + dept.getDeptId() + ". " + dept.getDeptName() + ", " + dept.getDeptLoc());
        }
    }
    }
    

    部门类

    package com.example.accounting;
    
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.util.LinkedList;
    import java.util.Scanner;
    

    公共类公司{ // 对象字段 链表部门 = null;

    public Company() {
        departments = new LinkedList<Department>();
    }
    
    public boolean addDepartment(String file) {
        Scanner source = null;
    
        try {
            source = new Scanner(new FileReader(file));
        } catch (FileNotFoundException e) {
            System.out.println("Error trying to read " + file + ": " + e.getMessage());
            e.printStackTrace();
            return false;
        }
        source.useDelimiter(";");
    
        while(source.hasNextLine()) {
            int departmentId = source.nextInt();
            String departmentName = source.next();
            String departmentLocation = source.next();
            departments.add(new Department(departmentId, departmentName, departmentLocation));
        }
        source.close();
        return true;
    }
    
    public LinkedList<Department> getDepartments() {
        return departments;
    }
    
    public void listDepartments() {
    
        for (Department dept : departments) {
            System.out.println(" " + dept.getDeptId() + ". " + dept.getDeptName() + ", " + dept.getDeptLoc());
        }
    }
    }
    

    【讨论】:

    • 感谢 ErstwhileIII 的回答。我会做一些修改,稍后重新发布。
    • 非常感谢您指出我的问题。我必须指定哪些对象将被放置在链表中。现在,在放置将在链表中使用的类之后,我可以访问属于部门的方法。在我刚刚获得对该对象的引用之前。 LinkedListClass dept = new LinkedListClass(); dept.outputObject().getDeptID();
    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多