首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交互式拍卖板

交互式拍卖板
EN

Code Review用户
提问于 2019-03-18 09:19:35
回答 1查看 357关注 0票数 3

考试要求我为拍卖的互动板创建一个程序:

一家拍卖公司在他们的拍卖室里有一个交互式拍卖板,允许买家在拍卖过程中的任何时候出价。在拍卖开始之前,卖家把他们的物品放在拍卖室里,每个物品上都有一个独特的编号(项目编号)。在交互式拍卖板系统中,需要建立以下每一项的详细信息:项目编号、投标数量、说明和保留价格。最初的投标数量被设置为零。在拍卖过程中,买家可以查看拍卖室中的物品,然后在拍卖室的交互式拍卖板上出价。每个买方都有一个唯一的号码来识别(买方号码)。买方所需要做的就是输入他们的买家号码,项目编号和他们的出价。他们的出价必须高于任何现有的出价。在拍卖结束时,公司会检查所有的物品,并标记那些标价超过拍卖储备的物品。任何出售的物品将收取最后出价的10%的费用,支付给拍卖公司。为拍卖公司编写和测试一个或多个程序。

  • 您的程序必须包括输入数据的适当提示,数据必须在输入时进行验证。
  • 错误信息和其他输出需要清楚易懂地列出。
  • 所有变量、常量和其他标识符都必须有有意义的名称。

您需要完成这三项任务。每项任务都必须经过充分的测试。任务1-拍卖成立。对拍卖中的每一件物品,应记录项目编号、说明和保留价格。投标数量设置为零。拍卖中必须至少有10件物品。任务2-买方出价。买方应该能够找到一个项目,并查看项目编号,描述和目前的最高出价。买方然后可以输入他们的买方号码和出价,这必须高于任何以前记录的出价。每次一个新的出价被记录,该项目的投标次数增加一个。买家可以多次出价一个项目,他们可以出价许多项目。任务3-在拍卖结束时。使用任务2的结果,识别已达到预定价格的项目,将其标记为已售出,将最后出价的10%计算为拍卖公司的费用,并将其添加到所有已售出项目的总费用中。显示此费用总额。显示所有未达到预定价格的项目的项目编号和最终出价。显示没有收到标书的任何项目的项目编号。显示已售出的物品数量、未达到预定价格的物品数量和没有投标的物品数量。

这是我在VB.net控制台中的解决方案。我怎么能做得更好?

代码语言:javascript
复制
'Task 1'
Dim enteries, d As Integer
d = 1

Console.WriteLine("How many total entries?")
enteries = Console.ReadLine
While enteries < 10
    Console.WriteLine("Number of enteries should be greater than 10, please try again")
    enteries = Console.ReadLine
End While
Dim item_num(enteries), num_bids(enteries) As Integer
Dim reserve_price(enteries) As Single
Dim description(enteries) As String
For c = 1 To enteries
    Console.WriteLine("Enter item description")
    description(c) = Console.ReadLine
    Console.WriteLine("Enter the item number")
    item_num(c) = Console.ReadLine
    Console.WriteLine("Enter reserve price") 'The reserve price is the minimum amount the seller is willing to accept' 
    reserve_price(c) = Console.ReadLine
    num_bids(c) = 0
Next
For c = 1 To enteries
    For d = 1 To enteries - 1
        If item_num(d) = item_num(d + 1) Then
            While item_num(d) = item_num(d + 1)
                Console.Write("Value " & d + 1)
                Console.WriteLine(" Is duplicate, enter a new value")
                item_num(d + 1) = Console.ReadLine
            End While
        End If
    Next
Next
'Task 2'
Dim buyer_num(enteries) As Integer
Dim bid(enteries), highest(enteries) As Single
Dim extra_bids As String
For c = 1 To enteries
    Console.WriteLine("Enter number of the item from 1-" & enteries)
    d = Console.ReadLine
    Console.WriteLine("Product is: " & description(d))
    Console.WriteLine("Item number is: " & item_num(d))
    Console.WriteLine("Current highest bid: " & bid(d))
    Console.WriteLine("Enter buyer number")
    buyer_num(d) = Console.ReadLine
    Console.WriteLine("Enter your bid")
    bid(d) = Console.ReadLine
    If bid(d) > highest(d) Then
        highest(d) = bid(d)
    End If
    num_bids(d) = num_bids(d) + 1
    Console.WriteLine("Make more bids? Enter Yes/No")
    extra_bids = Console.ReadLine
    While extra_bids = "Yes"
        Console.WriteLine("Current highest bid is " & highest(c))
        Console.WriteLine("Enter bid")
        bid(d) = Console.ReadLine
        If bid(d) > highest(d) Then
            highest(d) = bid(d)
        Else
            While bid(d) < highest(d)
                Console.WriteLine("Bid cannot be less than the previous bid, please enter a higher value")
                bid(d) = Console.ReadLine
            End While
            highest(d) = bid(d)
        End If
        Console.WriteLine("Make more bids? Enter Yes/No")
        extra_bids = Console.ReadLine
    End While
Next
'Task 3'
Dim final_price(enteries), comp_fee(enteries), total_fee As Single
Dim items_sold, not_sold, no_bids As Integer
Dim sold_status(enteries) As String
For c = 1 To enteries
    If highest(c) >= reserve_price(c) Then
        sold_status(enteries) = "Sold"
        comp_fee(c) = 10 / 100 * highest(c)
        final_price(c) = highest(c) + comp_fee(c)
        total_fee = total_fee + final_price(c)
        items_sold = items_sold + 1

    Else
        not_sold = not_sold + 1
        Console.WriteLine(item_num(c) & " Did not reach reserve price")
        Console.WriteLine("Their final bid was " & highest(c))
    End If
    If num_bids(c) = 0 Then
        Console.WriteLine(item_num(c) & "recieved no bids")
        no_bids = no_bids + 1
    End If
Next
Console.WriteLine("Total fee for all sold items is " & total_fee)
Console.WriteLine("Number of items sold = " & items_sold)
Console.WriteLine("Number of items not sold = " & not_sold)
Console.WriteLine("Number of items with no bids = " & no_bids)
Console.ReadKey()
EN

回答 1

Code Review用户

发布于 2019-03-23 06:03:01

好吧,所以我承认我现在在一些最佳实践上有点生疏,但我还是要这么做。

首先,这整个事情需要包装在一个sub中,我想。

第二,当我读到你需要创作的东西的描述时,它对我大喊“物体!”--我的意思是,你有一个交互式应用程序,需要跟踪拍卖物品。每个项目都有几个属性。听起来像是面向对象设计的基础,不是吗?例如:

代码语言:javascript
复制
Public Class AuctionItem
    Public Property description As String
    Public Property reservePrice As Integer
    Public Property numberOfBids As Integer
    Public Property currentBid As Integer
    Public Property currentBidder As Integer
End Class

所以就在大门外,现在你有了拍卖物品的结构,然后再做其他的事情。每个项目都有属性。现在你只需要处理一下你说的房间的清单

代码语言:javascript
复制
Dim firstRoom As New List(Of AuctionItem)

无视最低的参赛要求,你可以直接创造你的拍卖-

代码语言:javascript
复制
    Dim firstRoom As New List(Of AuctionItem)
    Dim numberOfEntries As Integer
    Console.WriteLine("How many total entries?")
    numberOfEntries = Console.ReadLine
    For i As Integer = 1 To numberOfEntries
        firstRoom.Add(New AuctionItem)
        Console.WriteLine("Enter item description")
        firstRoom(i).description = Console.ReadLine
        Console.WriteLine("Enter reserve price") 'The reserve price is the minimum amount the seller is willing to accept' 
        firstRoom(i).reservePrice = Console.ReadLine
    Next

懂得我的意思吗?现在你分配项目编号,当投标人想要投标的时候,你只需要访问那个对象并得到你需要的东西。

我注意到的另一件小事是,您没有输入检查条目--比如我想说我的项目号是“2”--程序会抛出一个未处理的错误和崩溃。您需要一个整数,所以您需要检查接收到一个整数。

抱歉,我现在只有这些。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/215657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档