Restaurant Order System
1. Features to Implement
1. Add Order – Allows users to add a new order (OrderID, CustomerName, TableNumber ,Items,
TotalBill).
2. View Orders – Displays a list of all orders.
3. Update Order – Provides an interface to modify order details.
4. Delete Order – Allows users to remove an order record.
5. Search Order (Optional) – Enables searching by customer name or table number.
2. Project Folder Structure
Folder Contents
src/[Link]/ [Link], [Link]
src/[Link]/ [Link]
src/[Link]/ [Link], [Link],
[Link], [Link]
src/[Link]/ [Link]
WebContent/view/ add_order.jsp, view_orders.jsp, update_order.jsp, [Link]
WebContent/css/ [Link]
3. Database Schema
Column Name Data Type Constraints
orderid INT PRIMARY KEY,
AUTO_INCREMENT
customername VARCHAR(100) NOT NULL
tablenumber INT NOT NULL
items TEXT NOT NULL
totalbill DOUBLE NOT NULL
1. MySQL Database Setup:
Create DB & Table:
CREATE DATABASE restaurant_db;
USE restaurant_db;
CREATE TABLE orders (
orderid INT PRIMARY KEY AUTO_INCREMENT,
customername VARCHAR(100) NOT NULL,
tablenumber INT NOT NULL,
items TEXT NOT NULL,
totalbill DOUBLE NOT NULL
);
2. Eclipse Project Setup (Step-by-Step)
Step 1: Create Project
1. Open Eclipse
2. File → New → Dynamic Web Project
3. Project Name: RestaurantApp
4. Target Runtime: Apache Tomcat
5. Finish
Step 2: Add MySQL Connector
1. Download MySQL Connector/J
2. Right click project → Build Path → Configure Build Path
3. Libraries → Add External JARs
4. Add [Link]
3. Project Structure
src/main/java/com/restaurant/
│
├── controller/
│ └── [Link]
│
├── model/
│ └── [Link]
│
├── repository/
│ └── [Link]
│
├── service/
│ ├── [Link]
│ └── [Link]
│
└── [Link]
│
src/main/resources/
├── templates/
│ ├── [Link]
│ ├── add_order.html
│ ├── view_orders.html
│ ├── update_order.html
│ └── search_order.html (optional)
│
└── static/
└── css/
└── [Link]
4. JAVA CODE
[Link] (Dependencies):
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
[Link]:
[Link]=jdbc:mysql://localhost:3306/restaurant_db
[Link]=root
[Link]=root
[Link]-class-name=[Link]
[Link]-auto=update
[Link]-sql=true
[Link]-platform=[Link].MySQL8Dialect
[Link]=8080
5. Java Code
[Link]
package [Link];
import [Link].*;
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = [Link])
private int orderId;
private String customerName;
private int tableNumber;
@Column(columnDefinition = "TEXT")
private String items;
private double totalBill;
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
[Link] = orderId;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
[Link] = customerName;
}
public int getTableNumber() {
return tableNumber;
}
public void setTableNumber(int tableNumber) {
[Link] = tableNumber;
}
public String getItems() {
return items;
}
public void setItems(String items) {
[Link] = items;
}
public double getTotalBill() {
return totalBill;
}
public void setTotalBill(double totalBill) {
[Link] = totalBill;
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Repository
public interface OrderRepository extends JpaRepository<Order, Integer> {
List<Order> findByCustomerNameContainingIgnoreCase(String customerName);
List<Order> findByTableNumber(int tableNumber);
}
[Link]
package [Link];
import [Link];
import [Link];
public interface OrderService {
Order saveOrder(Order order);
List<Order> getAllOrders();
Order getOrderById(int id);
void deleteOrder(int id);
List<Order> searchByCustomerName(String name);
List<Order> searchByTableNumber(int tableNumber);
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderRepository orderRepository;
@Override
public Order saveOrder(Order order) {
return [Link](order);
@Override
public List<Order> getAllOrders() {
return [Link]();
@Override
public Order getOrderById(int id) {
Optional<Order> order = [Link](id);
return [Link](null);
@Override
public void deleteOrder(int id) {
[Link](id);
@Override
public List<Order> searchByCustomerName(String name) {
return [Link](name);
}
@Override
public List<Order> searchByTableNumber(int tableNumber) {
return [Link](tableNumber);
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link].*;
import [Link];
@Controller
public class OrderController {
@Autowired
private OrderService orderService;
@GetMapping("/")
public String home() {
return "index";
}
@GetMapping("/add-order")
public String showAddOrderForm(Model model) {
[Link]("order", new Order());
return "add_order";
}
@PostMapping("/save-order")
public String saveOrder(@ModelAttribute("order") Order order) {
[Link](order);
return "redirect:/view-orders";
}
@GetMapping("/view-orders")
public String viewOrders(Model model) {
List<Order> orders = [Link]();
[Link]("orders", orders);
return "view_orders";
}
@GetMapping("/delete-order/{id}")
public String deleteOrder(@PathVariable("id") int id) {
[Link](id);
return "redirect:/view-orders";
}
@GetMapping("/edit-order/{id}")
public String showUpdateForm(@PathVariable("id") int id, Model model) {
Order order = [Link](id);
[Link]("order", order);
return "update_order";
}
@PostMapping("/update-order")
public String updateOrder(@ModelAttribute("order") Order order) {
[Link](order);
return "redirect:/view-orders";
}
@GetMapping("/search")
public String searchOrder(
@RequestParam(required = false) String customerName,
@RequestParam(required = false) Integer tableNumber,
Model model) {
List<Order> result;
if (customerName != null && ![Link]()) {
result = [Link](customerName);
} else if (tableNumber != null) {
result = [Link](tableNumber);
} else {
result = [Link]();
}
[Link]("orders", result);
return "view_orders";
}
}
[Link]
package [Link];
import [Link];
import [Link];
@SpringBootApplication
public class RestaurantApplication {
public static void main(String[] args) {
[Link]([Link], args);
}
6. FRONTEND
[Link]
<!DOCTYPE html>
<html xmlns:th="[Link]
<head>
<title>Restaurant Order System</title>
<link rel="stylesheet" th:href="@{/css/[Link]}">
</head>
<body>
<div class="container">
<h1>Restaurant Order System</h1>
<a th:href="@{/add-order}">Add Order</a><br><br>
<a th:href="@{/view-orders}">View Orders</a>
</div>
</body>
</html>
add_order.html
<!DOCTYPE html>
<html xmlns:th="[Link]
<head>
<title>Add Order</title>
<link rel="stylesheet" th:href="@{/css/[Link]}">
</head>
<body>
<div class="container">
<h1>Add Order</h1>
<form th:action="@{/save-order}" th:object="${order}" method="post">
<label>Customer Name:</label>
<input type="text" th:field="*{customerName}" /><br>
<label>Table Number:</label>
<input type="number" th:field="*{tableNumber}" /><br>
<label>Items:</label>
<input type="text" th:field="*{items}" /><br>
<label>Total Bill:</label>
<input type="number" step="0.01" th:field="*{totalBill}" /><br>
<button type="submit">Save</button>
</form>
</div>
</body>
</html>
view_orders.html
<!DOCTYPE html>
<html xmlns:th="[Link]
<head>
<title>View Orders</title>
<link rel="stylesheet" th:href="@{/css/[Link]}">
</head>
<body>
<div class="container">
<h1>Orders</h1>
<form th:action="@{/search}" method="get">
<input type="text" name="customerName" placeholder="Search by customer name">
<input type="number" name="tableNumber" placeholder="Search by table number">
<button type="submit">Search</button>
</form>
<br>
<table border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Table</th>
<th>Items</th>
<th>Bill</th>
<th>Action</th>
</tr>
<tr th:each="order : ${orders}">
<td th:text="${[Link]}"></td>
<td th:text="${[Link]}"></td>
<td th:text="${[Link]}"></td>
<td th:text="${[Link]}"></td>
<td th:text="${[Link]}"></td>
<td>
<a th:href="@{'/edit-order/' + ${[Link]}}">Edit</a>
<a th:href="@{'/delete-order/' + ${[Link]}}">Delete</a>
</td>
</tr>
</table>
</div>
</body>
</html>
update_order.html
<!DOCTYPE html>
<html xmlns:th="[Link]
<head>
<title>Update Order</title>
<link rel="stylesheet" th:href="@{/css/[Link]}">
</head>
<body>
<div class="container">
<h1>Update Order</h1>
<form th:action="@{/update-order}" th:object="${order}" method="post">
<input type="hidden" th:field="*{orderId}" />
<label>Customer Name:</label>
<input type="text" th:field="*{customerName}" /><br>
<label>Table Number:</label>
<input type="number" th:field="*{tableNumber}" /><br>
<label>Items:</label>
<input type="text" th:field="*{items}" /><br>
<label>Total Bill:</label>
<input type="number" step="0.01" th:field="*{totalBill}" /><br>
<button type="submit">Update</button>
</form>
</div>
</body>
</html>
[Link]
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f8f8f8;
}
.container {
width: 80%;
margin: auto;
background: white;
padding: 20px;
border-radius: 10px;
}
h1 {
color: #222;
}
input, button {
margin: 5px 0;
padding: 8px;
width: 250px;
}
table {
border-collapse: collapse;
width: 100%;
}
th, td {
padding: 10px;
text-align: center;
}
7. RUN PROJECT
a. Start MySQL
b. Start Tomcat
c. Right click project → Run on Server
d. Open: [Link]
8. Output:
Github link:
[Link]