首页 > > 详细

Programming讲解、Java编程设计调试、讲解Java、Structure留学生辅导讲解SPSS|辅导R语言程序

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 typ
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.
+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.
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
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

联系我们
  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp
热点标签

联系我们 - QQ: 99515681 微信:codinghelp
程序辅导网!