To solve this optimization problem, we need to define the decision variables, objective function, and constraints. 

Let's denote:
- $x$ as the number of dining tables produced,
- $y$ as the number of coffee tables produced.

The profit on each dining table is $200, and on each coffee table is $100. So, the total profit can be represented as $200x + 100y$.

There are two main constraints:
1. The total monthly demand for both types of tables combined will not exceed 200 units: $x + y \leq 200$.
2. The monthly manufacturing budget on tables is $20,000, with the cost to make a dining table being $250 and a coffee table being $150: $250x + 150y \leq 20,000$.

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

# Create a model
m = Model("Furniture_Production")

# Define the decision variables
x = m.addVar(vtype=GRB.CONTINUOUS, name="dining_tables")
y = m.addVar(vtype=GRB.CONTINUOUS, name="coffee_tables")

# Set the objective function to maximize profit
m.setObjective(200*x + 100*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x + y <= 200, "demand_constraint")
m.addConstr(250*x + 150*y <= 20000, "budget_constraint")
m.addConstr(x >= 0, "non_negativity_x")
m.addConstr(y >= 0, "non_negitivity_y")

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of dining tables: {x.x}")
    print(f"Number of coffee tables: {y.x}")
    print(f"Maximum profit: ${200*x.x + 100*y.x:.2f}")
else:
    print("No optimal solution found.")
```
```python
from gurobipy import *

# Create a model
m = Model("Furniture_Production")

# Define the decision variables
x = m.addVar(vtype=GRB.CONTINUOUS, name="dining_tables")
y = m.addVar(vtype=GRB.CONTINUOUS, name="coffee_tables")

# Set the objective function to maximize profit
m.setObjective(200*x + 100*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x + y <= 200, "demand_constraint")
m.addConstr(250*x + 150*y <= 20000, "budget_constraint")
m.addConstr(x >= 0, "non_negativity_x")
m.addConstr(y >= 0, "non_negitivity_y")

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of dining tables: {x.x}")
    print(f"Number of coffee tables: {y.x}")
    print(f"Maximum profit: ${200*x.x + 100*y.x:.2f}")
else:
    print("No optimal solution found.")
```