联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> Java编程Java编程

日期:2019-11-07 09:42

Programming Fundamentals, SP5 2019

Assignment 2

October 9, 2019

Introduction

Assignment Structure

One thing that I have learnt in life is that farming simulators are the best strategy for

making money as a game dev. Clearly, simulated hard work is much more fun than actual

hard work. I have not had any success yet from selling ABS to venture capitalists, so this

time I will get my army of junior programmers to build me the ultimate farming simulator!

I have been told that we are now in a post-graphics era, where text-based games are the

modern standard. With all that in mind, follow this specification to create Mawson Valley.

Figure 1: The ultimate, most lucrative game type

1

Importing into eclipse

The assignment has been provided as an eclipse project. You just need to import the project

into an existing workspace. See Figure 2 for a visual guide. Make sure that your Java JDK

has been set, as well as the two jar files that you need for junit to function. This can be

found in Project → Properties → Java Build Path → Libraries. The jar files have been

provided within the project; there is no need to download any other version and doing so

may impact the testing environment.

Figure 2: Importing the project through File → Import

Part A

Your first task is to create all of the classes shown in Figure 3. If you do not know how

to read a UML diagram, then think of this as a research task. Using your knowledge of

classes and inheritance, you must create all of the classes shown, exactly to spec. You are

not provided with these classes—you must make them from scratch—so read this section

carefully.

2

+Plant()

+Plant(name: String, symbol: char, maturationTime: int, yield: int)

Figure 3: UML diagram representing your plant class structure

Plant

This is the parent class of the whole hierarchy. Create this class first in the plants package.

This class must be made abstract and feature two abstract methods: sell() and

getPlantType(). It must also have all the other instance variables, constructors, and methods,

as shown in Figure 3. Pay attention to the visibility notation, which will tell you if they

are to be made public or private.

Other child classes

Now create all of the other child classes, as indicated in Figure 3. You must implement the

two abstract methods that were inherited from Plant.

Default constructor

The default constructor for each plant type should create an object of the respective type

with the correct default values, as indicated in Table 1. The Weed class should not have a

default constructor.

3

Table 1: Default values for the respective instance variables in the default constructor

Plant name symbol maturationTime yield

Flower Daisy * 7 3

Fruit Apple @ 14 1

Grain Wheat ! 4 8

Vegetable Capsicum ^ 8 2

Weed N/A N/A N/A N/A

sell()

This method must calculate the current sell price of the respective plant type, following

Table 2. The price range indicates that the returned price must be a random integer from

within that range, inclusive. For example, the sell price of a flower could be $7, $8, $9, $10,

or $11, which then would be multiplied by its yield of 3.

Table 2: The harvest sell price for each plant type

Type Sell Price

Flower $7–11 * yield

Fruit $40–60 * yield

Grain $2–4 * yield

Vegetable $6–15 * yield

Weed $0

getPlantType()

This method should return a String that is the name of the class, in all lowercase. For

example, in the Flower class, it should return "flower".

Part B

In this section, you should create and complete the following five custom exception classes,

all in the exceptions package.

• BeyondStockException

• FieldNotTilledException

• InsufficientFundsException

• NoAvailableSeedlingException

• OutOfStockException

4

The general format of your exception classes should be as follows:

package exceptions;

public class MyException extends Exception {

public MyException(String message) {

super(message);

}

}}

The expected output at the end of this document will show you how the messages are

expected to be formatted.

Part C

Next, you should move to the Player class, as there are some methods you need to complete.

getPlant

This method should return a Plant object and take one argument, a single String. The purpose

of this method is to loop over the player’s seedlings list and return the first Plant object

that matches the type that is passed in. For example, if looking for a flower, the method

should return the first Flower object that it finds in the seedling list. If there is no matching

plant in the seedling list, the method should throw a NoAvailableSeedlingException.

You will need to understand polymorphism in order to solve this method. One strategy

would be to first determine which of the four plant sub-types the passed in string represents,

make a temporary object of that type, and then use the getClass() method in your loop

to see if the object in the seedlings list matches. For example,

if (a.getClass() == b.getClass()).

Finally, keep in mind that it may be easier to expect the shorthand name for each of the

plants: ‘fl’, ‘fr’, ‘g’, ‘v’.

pay

This method should be void and take one argument, a single int. This is the method that

you will later call to buy plants from the nursery. All it needs to do is subtract the purchase

amount, passed into the method, from the player’s funds instance variable. If there is not

enough money in the funds, this method should return an InsufficientFundsException.

Part D

In this section, you’ll complete some methods that will allow you to represent the farm field.

The Field class creates a 10 ∗ 10 grid (in the form of a 2D Plant array), giving you 100

spaces in which to plant crops. You are responsible for implementing the following methods.

5

plantSeed

This method should be void and take three arguments, a Plant object that is the seedling to

plant, an int to represent the row, and another int to represent the column. Your singular

task is to plant the provided Plant object in the provided field space. If the space is not

null, you should throw a FieldNotTilledException.

toString

This method should return a String and take no arguments. It should build a string

representation of the field grid. You should use the symbol character from each of the plant

objects and a plain ‘.’ for any null space. For example:

writeToFile

This method should be void and take no arguments. It should write out the field to a file

called “field.txt”. This may sound difficult, but all you need to do is create the file and write

the output of your toString method to it.

Part E

The Main class is where you will do the bulk of work. If you run the Main class, you will

see that the game loop has been implemented for you. All you have to do is complete the

code inside the following methods. As always, you are free to add any private methods or

variables that you want, but you should not need to.

buyPlants

This method should be void and take one argument, a single String that contains input

from the console. The input will be in the following format: ‘fr,3 v,2 fl,1 g,6’. That

string should be parsed, one token at a time, to purchase:

To parse the string, you should make good use of the split() method, using the documentation

to research how to change the delimiter. Secondly, you will want to to convert the

number to an integer so that you can use it as a quantity (instead of just a string). Research

how to use Integer.parseInt().

To actually buy the plants from the nursery, you should make use of the static method

Nursery.buyPlant(). Provided that buyPlant() returns true, you should add the newly

purchased plant(s) to the player’s seedlings list.

plantPlants

This method should be void and take one argument, a single String that contains input

from the console. The input will be in the following format: ‘fl,1,4 g,5,7’. That string

would plant a Flower object in row 1, column 4 of the field spaces 2D array, and a Grain

object in row 5, column 7. You should parse the string in much the same way as buyPlants.

Finally, you will need to catch any exceptions raised from the plantSeed method that

you should use from the Field class.

Assume you start with this field:

Then you enter this command into the plant plants menu: ‘fl,1,4 fr,7,3 fr,7,4 fr,8,3 g,3,8

v,9,0’ (assume that you have all of these plants in the seedlings list). Your field print out

would look like the following:

tillSoil

This method should be void and take one argument, a single String that contains input

from the console. The input will be in the following format ‘0,4 2,5’, where this would till

the spaces at row 0, column 4, and row 2, column 5, respectively. By tilling the soil, any

Plant object on this space is removed, replacing it with null. This is the only way to clear

weeds, since they should be ignored at harvest. You could also use it to remove other plant

types.

Assume you start with this field:

Then you enter this command into the till soil menu: ‘0,4 2,5’. Your field print out would

look like the following:

maturePlants

This method should be void and take no arguments. All that it needs to do is mature every

valid Plant object in the field by one day. To do this, you should increment each plant’s

daysPlanted instance variable. Upon harvest, a plant will only be harvested if it is at or

beyond the maturationTime.

harvestPlants

This method should return a Plant array and take no arguments. The purpose of the

method is to check for mature plants in the field. If you find a mature plant, you should do

the following steps:

• Iterate over the field spaces

• Check that there is a plant in each space

• Check that the plant is mature

• If mature, add to a list/array

• Replace plant with null

• Once all spaces have been checked, return your list/array of mature plants

sellHarvest

This method should return an int and take one argument, an array of Plant objects. There

are two main parts of this method.

1. Sell all of the plants.

All you need to do is iterate over the provided array of Plant objects and sell them for

their going price. You should recall from Part A which method to use. The one catch

is that you need to somehow keep track of how much money you are making from each

plant type. This will come in handy for the second part of this method. You should

add the total income to the player’s funds.

9

2. Generate a receipt. This part is responsible for building a String to represent a receipt.

It needs to be itemised so that you can see how much money you made for each plant

type. It should include a $0 amount for plant types that were not sold in the harvest.

The format should look like this:

Harvest receipt:

Flowers: $78

Fruit: $0

Grain: $96

Vegetables: $56

You need to save this receipt string into the provided harvestReceipt instance variable.

Marking Scheme

The marking of this assignment will work a little differently to that of the first assignment.

You have been given a very detailed specification and you must use it to implement your

classes and methods as closely as possible. Where you are specifically told to handle events

and exceptions, you must do exactly that. Where you find an unmentioned fringe-case, your

task is to handle it as best as possible. For this assignment, your main task is to

deliver a fully playable game, in accordance with the specification document.

To test that everything is working, you have three options:

1. Follow this specification and sample output

2. Investigate your code in the Eclipse/IntelliJ debugger

3. Write your own unit tests, like the first assignment

This situation is very common in the industry. A client will come to you with a set of

requirements, and your job is to implement something to meet those requirements. You will

not always have a neatly-bundled testing suite.

The style marks will specifically look at the following:

• Solution follows the assignment specification

• Clear and adequate commenting of all logic and code flow

• Consistency of indentation

• Consistency of curly brace usage

• Adherence to principles of DRY—don’t repeat yourself.

Following the assignment specification includes exactly matching your Plant inheritance

structure to that of the UML diagram.

As a final note, your code should only be put in the classes and methods that are mentioned

in this document. There should be no need to create other methods and classes.

Good luck!

Round number: 1 | 9 rounds until harvest | Funds: $200

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: b

Welcome to the nursery. What would you like to buy?

We have in stock: Flowers = 10 Fruit = 10 Grain = 10 Vegetables = 10

Our prices are: Flowers = $12 Fruit = $25 Grain = $11 Vegetables = $8

Your available choices are: [fl = Flowers | fr = Fruit | g = Grain | v =

,→ Vegetable | l = leave]

Enter in the form 'v,3 fl,6' to buy 3 vegetables and 6 flowers

Choice: fl,3 fr,3 g,3 v,6

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: t

Which soil plots would you like to till?

Enter in the form '4,7 9,1' to till the soil plots in row 4, column 7 and

,→ row 9, column 1 | l = leave

Choice: 7,5 8,4 9,1

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 2 | 8 rounds until harvest | Funds: $8

What would you like to do?

12

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: p

What would you like to plant?

Your available seedlings are: Flowers = 3 Fruit = 3 Grain = 3 Vegetables = 6

Enter in the form 'v,2,5 fr,5,4' to plant a vegetable in plot row 2, column

,→ 5 | l = leave

Choice: fl,0,0 fl,0,1 fl,0,2 fr,3,0 fr,3,1 fr,3,2 g,6,0 g,6,1 g,6,2 v,9,1

,→ v,9,2 v,9,3 v,9,4 v,9,5 v,9,0

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: b

Welcome to the nursery. What would you like to buy?

We have in stock: Flowers = 7 Fruit = 7 Grain = 7 Vegetables = 4

Our prices are: Flowers = $12 Fruit = $25 Grain = $11 Vegetables = $8

Your available choices are: [fl = Flowers | fr = Fruit | g = Grain | v =

,→ Vegetable | l = leave]

Enter in the form 'v,3 fl,6' to buy 3 vegetables and 6 flowers

Choice: v,1

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: p

What would you like to plant?

Your available seedlings are: Flowers = 0 Fruit = 0 Grain = 0 Vegetables = 1

Enter in the form 'v,2,5 fr,5,4' to plant a vegetable in plot row 2, column

,→ 5 | l = leave

Choice: v,9,6

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 3 | 7 rounds until harvest | Funds: $0

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 4 | 6 rounds until harvest | Funds: $0

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 5 | 5 rounds until harvest | Funds: $0

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 6 | 4 rounds until harvest | Funds: $0

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 7 | 3 rounds until harvest | Funds: $0

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 8 | 2 rounds until harvest | Funds: $0

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 9 | 1 rounds until harvest | Funds: $0

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 10 | Harvest day!

Harvest receipt:

Flowers: $90

Fruit: $0

Grain: $96

Vegetables: $154

Total sales: $340

16

Round end

Round number: 11 | 9 rounds until harvest | Funds: $340

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: t

Which soil plots would you like to till?

Enter in the form '4,7 9,1' to till the soil plots in row 4, column 7 and

,→ row 9, column 1 | l = leave

Choice: 0,1 1,4 2,4 2,5 3,5 4,2 4,8 5,6 5,7 6,2 6,3 6,4 7,0 7,2

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: b

Welcome to the nursery. What would you like to buy?

We have in stock: Flowers = 6 Fruit = 5 Grain = 5 Vegetables = 8

Our prices are: Flowers = $11 Fruit = $21 Grain = $15 Vegetables = $6

Your available choices are: [fl = Flowers | fr = Fruit | g = Grain | v =

,→ Vegetable | l = leave]

Enter in the form 'v,3 fl,6' to buy 3 vegetables and 6 flowers

Choice: fl,6 fr,5

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: p

What would you like to plant?

Your available seedlings are: Flowers = 6 Fruit = 5 Grain = 0 Vegetables = 0

Enter in the form 'v,2,5 fr,5,4' to plant a vegetable in plot row 2, column

,→ 5 | l = leave

Choice: fr,3,0

Field space [3, 0] not empty

What would you like to do?

17

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: b

Welcome to the nursery. What would you like to buy?

We have in stock: Flowers = 0 Fruit = 0 Grain = 5 Vegetables = 8

Our prices are: Flowers = $11 Fruit = $21 Grain = $15 Vegetables = $6

Your available choices are: [fl = Flowers | fr = Fruit | g = Grain | v =

,→ Vegetable | l = leave]

Enter in the form 'v,3 fl,6' to buy 3 vegetables and 6 flowers

Choice: fr,1

You have requested more fruit than we have in stock.

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: b

Welcome to the nursery. What would you like to buy?

We have in stock: Flowers = 0 Fruit = 0 Grain = 5 Vegetables = 8

Our prices are: Flowers = $11 Fruit = $21 Grain = $15 Vegetables = $6

Your available choices are: [fl = Flowers | fr = Fruit | g = Grain | v =

,→ Vegetable | l = leave]

Enter in the form 'v,3 fl,6' to buy 3 vegetables and 6 flowers

Choice: fl,2

You have requested more flowers than we have in stock.

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: b

Welcome to the nursery. What would you like to buy?

We have in stock: Flowers = 0 Fruit = 0 Grain = 5 Vegetables = 8

Our prices are: Flowers = $11 Fruit = $21 Grain = $15 Vegetables = $6

Your available choices are: [fl = Flowers | fr = Fruit | g = Grain | v =

,→ Vegetable | l = leave]

Enter in the form 'v,3 fl,6' to buy 3 vegetables and 6 flowers

Choice: v,8

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: b

Welcome to the nursery. What would you like to buy?

We have in stock: Flowers = 0 Fruit = 0 Grain = 5 Vegetables = 0

Our prices are: Flowers = $11 Fruit = $21 Grain = $15 Vegetables = $6

Your available choices are: [fl = Flowers | fr = Fruit | g = Grain | v =

,→ Vegetable | l = leave]

Enter in the form 'v,3 fl,6' to buy 3 vegetables and 6 flowers

Choice: g,5

18

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 12 | 8 rounds until harvest | Funds: $46

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 13 | 7 rounds until harvest | Funds: $46

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round number: 14 | 6 rounds until harvest | Funds: $46

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 15 | 5 rounds until harvest | Funds: $46

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 16 | 4 rounds until harvest | Funds: $46

20

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 17 | 3 rounds until harvest | Funds: $46

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 18 | 2 rounds until harvest | Funds: $46

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round number: 19 | 1 rounds until harvest | Funds: $46

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 20 | Harvest day!

Harvest receipt:

Flowers: $0

Fruit: $144

Grain: $0

Vegetables: $0

Total sales: $144

Round end

Round number: 21 | 9 rounds until harvest | Funds: $190

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: b

Welcome to the nursery. What would you like to buy?

We have in stock: Flowers = 6 Fruit = 7 Grain = 6 Vegetables = 5

Our prices are: Flowers = $14 Fruit = $24 Grain = $10 Vegetables = $10

Your available choices are: [fl = Flowers | fr = Fruit | g = Grain | v =

,→ Vegetable | l = leave]

Enter in the form 'v,3 fl,6' to buy 3 vegetables and 6 flowers

Choice: fl,6 f,7

You have requested more f than we have in stock.

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: b

Welcome to the nursery. What would you like to buy?

We have in stock: Flowers = 0 Fruit = 7 Grain = 6 Vegetables = 5

Our prices are: Flowers = $14 Fruit = $24 Grain = $10 Vegetables = $10

Your available choices are: [fl = Flowers | fr = Fruit | g = Grain | v =

,→ Vegetable | l = leave]

Enter in the form 'v,3 fl,6' to buy 3 vegetables and 6 flowers

Choice: fr,7

You are trying to pay $168, but only have 106

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: p

What would you like to plant?

Your available seedlings are: Flowers = 12 Fruit = 4 Grain = 5 Vegetables =

,→ 8

Enter in the form 'v,2,5 fr,5,4' to plant a vegetable in plot row 2, column

,→ 5 | l = leave

Choice: l

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: p

What would you like to plant?

Your available seedlings are: Flowers = 12 Fruit = 4 Grain = 5 Vegetables =

,→ 8

23

Enter in the form 'v,2,5 fr,5,4' to plant a vegetable in plot row 2, column

,→ 5 | l = leave

Choice: fr,0,0 fr,0,1 fr,0,2 fr,0,3

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 22 | 8 rounds until harvest | Funds: $106

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: t

Which soil plots would you like to till?

Enter in the form '4,7 9,1' to till the soil plots in row 4, column 7 and

,→ row 9, column 1 | l = leave

Choice: 0,4

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: e

Round end

Round number: 23 | 7 rounds until harvest | Funds: $106

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: p

What would you like to plant?

Your available seedlings are: Flowers = 12 Fruit = 0 Grain = 5 Vegetables =

,→ 8

Enter in the form 'v,2,5 fr,5,4' to plant a vegetable in plot row 2, column

,→ 5 | l = leave

Choice: fr,0,4

No available seedlings of type: fr

What would you like to do?

Your available choices are: [b = Buy Plant | p = Plant plants | t = Till

,→ Soil | e = End Round | q = Quit Game]

Choice: q

Process finished with exit code 0

25


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp