我是学生,而不是高级开发人员。我遇到了构建程序的问题。我尝试了一些东西,但仍然无法解决它。问题来自考试。 为这篇文章道歉,因为我以前的两篇帖子都没有被接受。这次我试过了,但是我发布的问题仍然没有成功。
a)编写一个名为Document的类来表示打印队列中的文档节点。它应该包含一个返回文档主题的方法名称和一个名为type的抽象方法,它返回文档类型。从文档类派生两个名为word document和pdf document的具体类。
b)另一个名为Print Queue的类,它被实现为Document对象的链接列表。 Print Queue应该有一个名为Push的方法,用于在列表末尾添加文档,一个名为pop的方法,用于从列表中删除第一个文档,以及一个名为DisplayContents的方法,用于列出Print Queue中的所有文档,同时报告两者每个元素的名称和类型Print Queue不应该使用任何标准的库类,它应该是自己的链表实现。
class PrintQueue
{
private Document head;
private int size;
public int Count
{
get
{
return size;
}
}
public void Push(Object data)
{
Document toAdd = new Document();
toAdd.data = data;
Document current = head;
while (current.Next != null)
{
current = current.Next;
}
current.Next = toAdd;
size++;
}
public bool Pop()
{
Document tempNode = head;
Document lastNode = null;
int count = 0;
if (size > 0)
{
while (tempNode != null)
{
if (count == size - 1)
{
lastNode.Next = tempNode.Next;
return true;
}
count++;
lastNode = tempNode;
tempNode = tempNode.Next;
}
}
return false;
}
}
public abstract class Document
{
public Document Next;
public Object data;
public string Subject { get; set; }
public abstract string type();
}
public class WordDocument : Document
{
public override string type()
{
return "docx";
}
}
public class PdfDocument : Document
{
public override string type()
{
return "pdf";
}
}
此行会导致问题Document toAdd = new Document();
但我仍然无法找到 DisplayContents 功能的方法,该功能将列出打印队列中的所有文档,同时报告每个元素打印队列的名称和类型。
任何人都可以查看我的代码并帮助我根据问题对其进行纠正。突出显示我犯错误的区域。
由于
我试图解决的两个问题如下
问题1:编写一个名为Document的类来表示打印队列中的文档节点。它应该包含一个返回文档主题的方法名称和一个名为type的抽象方法,它返回文档类型。从文档类派生出两个名为word document和pdf document的具体类。
问题2:另一个名为Print Queue的类,它被实现为Document对象的链接列表。 Print Queue应该有一个名为Push的方法,用于在列表末尾添加文档,一个名为pop的方法,用于从列表中删除第一个文档,以及一个名为DisplayContents的方法,用于列出Print Queue中的所有文档,同时报告两者每个元素的名称和类型Print Queue不应该使用任何标准的库类,它应该是自己的链表实现。
在这里,我想发布我所取得的最后成就。所以请查看代码和问题,请按照此处粘贴的2个问题告诉我这是否正确。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrintQueueDemo
{
class PrintQueue
{
Node head;
Node tail;
/// <summary>
/// add a document to the print queue
/// </summary>
/// <param name="strType">document type</param>
/// <param name="strName">docunent name</param>
public void Push(string strType, string strName)
{
if (head == null)
{
head = new Node(strType, strName);
tail = head;
}
else
{
Node node = new Node(strType, strName);
tail.setNext(node);
tail = node;
}
}
/// <summary>
/// pop a document from the queue
/// </summary>
/// <returns>null if printqueue is empty, else document</returns>
public Node.Document Pop()
{
if (head == null)
return null;
Node.Document doc = new Node.Document(head.document.Type, head.document.Name);
head = head.nextnode;
if (head == null)
tail = null;
return doc;
}
/// <summary>
/// get the current content of the queue
/// </summary>
/// <returns>string with current content (line per entry)</returns>
public string DisplayContents()
{
string content = "";
Node node = head;
if (node == null)
return "PrintQueue is empty";
content = node.document.Name + ": " + node.document.Type;
while (node.nextnode != null)
{
node = node.nextnode;
content += "\r\n" + node.document.Name + ": " + node.document.Type;
}
return content;
}
public class Node
{
public Document document { get; private set; }
public Node nextnode { get; private set; }
public Node(string strType, string strName)
{
document = new Document(strType, strName);
}
public void setNext(Node node)
{
nextnode = node;
}
public class Document
{
public string Type { get; private set; }
public string Name { get; private set; }
public Document(string strType, string strName)
{
Name = strName;
Type = strType;
}
}
}
}
}
PrintQueue pq = new PrintQueue();
pq.Push("cpp", "main.cpp");
pq.Push("c#", "main.cs");
pq.Push("c", "main.c");
pq.Push("h", "myinclude.h");
Console.WriteLine(pq.DisplayContents());
Console.WriteLine("===");
PrintQueue.Node.Document doc;
doc = pq.Pop();
Console.WriteLine("{0}: {1}", doc.Name, doc.Type);
doc = pq.Pop();
Console.WriteLine("{0}: {1}", doc.Name, doc.Type);
doc = pq.Pop();
Console.WriteLine("{0}: {1}", doc.Name, doc.Type);
doc = pq.Pop();
Console.WriteLine("{0}: {1}", doc.Name, doc.Type);
Console.WriteLine("===");
Console.WriteLine(pq.DisplayContents());
Console.WriteLine("===");
pq.Push("xls", "workbook.xls");
Console.WriteLine(pq.DisplayContents());
告诉我上面的代码将被接受为我粘贴在顶部的2个问题。感谢