├── assets
├── img
│ └── favicon.ico
├── audio
│ └── tingtung.mp3
└── css
│ └── style.css
├── LICENSE.md
├── config
└── database.php
├── pages
├── nomor
│ ├── get_antrian.php
│ ├── insert.php
│ └── index.php
└── panggilan
│ ├── get_jumlah_antrian.php
│ ├── get_sisa_antrian.php
│ ├── update.php
│ ├── get_antrian_sekarang.php
│ ├── get_antrian_selanjutnya.php
│ ├── get_antrian.php
│ └── index.php
├── database
└── db_antrian.sql
├── README.md
└── index.php
/assets/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pustakakoding/aplikasi-antrian-berbasis-web/HEAD/assets/img/favicon.ico
--------------------------------------------------------------------------------
/assets/audio/tingtung.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pustakakoding/aplikasi-antrian-berbasis-web/HEAD/assets/audio/tingtung.mp3
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2021 - Pustaka Koding - Indra Styawantoro. All rights reserved.
2 |
3 |
4 | # Permissions
5 |
6 | - Private use
7 | - Modification
8 | - Distribution
9 |
10 |
11 | # Limitations
12 |
13 | - Commercial use
14 | - Liability
15 | - Warranty
16 |
--------------------------------------------------------------------------------
/config/database.php:
--------------------------------------------------------------------------------
1 | 0) {
22 | // ambil data hasil query
23 | $data = mysqli_fetch_assoc($query);
24 | // buat variabel untuk menampilkan data
25 | $no_antrian = $data['no_antrian'];
26 |
27 | // tampilkan data
28 | echo number_format($no_antrian, 0, '', '.');
29 | }
30 | // jika data "no_antrian" tidak ada
31 | else {
32 | // tampilkan "-"
33 | echo "-";
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/pages/panggilan/get_antrian_selanjutnya.php:
--------------------------------------------------------------------------------
1 | 0) {
22 | // ambil data hasil query
23 | $data = mysqli_fetch_assoc($query);
24 | // buat variabel untuk menampilkan data
25 | $no_antrian = $data['no_antrian'];
26 |
27 | // tampilkan data
28 | echo number_format($no_antrian, 0, '', '.');
29 | }
30 | // jika data "no_antrian" tidak ada
31 | else {
32 | // tampilkan "-"
33 | echo "-";
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/database/db_antrian.sql:
--------------------------------------------------------------------------------
1 | -- phpMyAdmin SQL Dump
2 | -- version 5.1.1
3 | -- https://www.phpmyadmin.net/
4 | --
5 | -- Host: localhost:3306
6 | -- Generation Time: Aug 02, 2021 at 01:42 AM
7 | -- Server version: 5.7.34
8 | -- PHP Version: 8.0.8
9 |
10 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
11 | START TRANSACTION;
12 | SET time_zone = "+00:00";
13 |
14 |
15 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
16 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
17 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
18 | /*!40101 SET NAMES utf8mb4 */;
19 |
20 | --
21 | -- Database: `db_antrian`
22 | --
23 |
24 | -- --------------------------------------------------------
25 |
26 | --
27 | -- Table structure for table `tbl_antrian`
28 | --
29 |
30 | CREATE TABLE `tbl_antrian` (
31 | `id` bigint(20) NOT NULL,
32 | `tanggal` date NOT NULL,
33 | `no_antrian` smallint(6) NOT NULL,
34 | `status` enum('1','0') NOT NULL DEFAULT '0',
35 | `updated_date` datetime DEFAULT NULL
36 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
37 |
38 | --
39 | -- Indexes for dumped tables
40 | --
41 |
42 | --
43 | -- Indexes for table `tbl_antrian`
44 | --
45 | ALTER TABLE `tbl_antrian`
46 | ADD PRIMARY KEY (`id`);
47 |
48 | --
49 | -- AUTO_INCREMENT for dumped tables
50 | --
51 |
52 | --
53 | -- AUTO_INCREMENT for table `tbl_antrian`
54 | --
55 | ALTER TABLE `tbl_antrian`
56 | MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT;
57 | COMMIT;
58 |
59 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
60 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
61 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
62 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Aplikasi Antrian Berbasis Web
2 |
3 | 
4 |
5 | Aplikasi Antrian merupakan sistem manajemen yang digunakan untuk mengelola antrian pengunjung pada suatu perusahaan atau instansi. Aplikasi antrian dapat digunakan sebagai sarana untuk mencapai kinerja efektif dan efisien bagi perusahaan atau instansi dalam melayani pengunjung.
6 |
7 | **Aplikasi ini dibangun dengan :**
8 | - Menggunakan bahasa pemrograman **PHP 8**.
9 | - Menggunakan database management system **MySQL** atau **MariaDB**.
10 | - Menggunakan **MySQLi Extension** untuk berkomunikasi dengan database.
11 | - Menggunakan framework CSS **Bootstrap 5** untuk membuat desain tampilan aplikasi.
12 | - Menggunakan **jQuery AJAX** untuk proses CRUD.
13 | - Menggunakan API teks berbicara dalam bahasa Indonesia dari **ResponsiveVoice.JS** untuk suara panggilan antrian.
14 |
15 | # Fitur Apilkasi
16 | Aplikasi Antrian ini terdiri dari 2 interface, yaitu **Nomor Antrian**, dan **Panggilan Antrian**.
17 |
18 | ### 1. Nomor Antrian
19 | Halaman Nomor Antrian digunakan pengunjung untuk mengambil nomor antrian. Fitur ini bisa Kamu kembangkan lagi dengan menambahkan fungsi cetak nomor antrian secara langsung ke printer, atau memberikan nomor antrian secara online.
20 |
21 | ### 2. Panggilan Antrian
22 | Halaman Panggilan Antrian digunakan petugas loket untuk memanggil antrian pengunjung. Halaman ini menampilkan informasi jumlah antrian, nomor antrian yang sedang dipanggil nomor antrian selanjutnya yang akan dipanggil, sisa antrian yang belum dipanggil. Petugas loket dapat menekan tombol panggilan antrian pada layar untuk memanggil antrian dengan menggunakan suara yang bisa dihubungkan dengan alat pengeras suara.
23 |
--------------------------------------------------------------------------------
/pages/nomor/insert.php:
--------------------------------------------------------------------------------
1 | 0) {
21 | // ambil data hasil query
22 | $data = mysqli_fetch_assoc($query);
23 | // "no_antrian" = "no_antrian" yang terakhir + 1
24 | $no_antrian = $data['nomor'] + 1;
25 | }
26 | // jika "no_antrian" belum ada
27 | else {
28 | // "no_antrian" = 1
29 | $no_antrian = 1;
30 | }
31 |
32 | // sql statement untuk insert data ke tabel "tbl_antrian"
33 | $insert = mysqli_query($mysqli, "INSERT INTO tbl_antrian(tanggal, no_antrian)
34 | VALUES('$tanggal', '$no_antrian')")
35 | or die('Ada kesalahan pada query insert : ' . mysqli_error($mysqli));
36 | // cek query
37 | // jika proses insert berhasil
38 | if ($insert) {
39 | // tampilkan pesan sukses insert data
40 | echo "Sukses";
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/pages/panggilan/get_antrian.php:
--------------------------------------------------------------------------------
1 | 0) {
20 | $response = array();
21 | $response["data"] = array();
22 |
23 | // ambil data hasil query
24 | while ($row = mysqli_fetch_assoc($query)) {
25 | $data['id'] = $row["id"];
26 | $data['no_antrian'] = $row["no_antrian"];
27 | $data['status'] = $row["status"];
28 |
29 | array_push($response["data"], $data);
30 | }
31 |
32 | // tampilkan data
33 | echo json_encode($response);
34 | }
35 | // jika data tidak ada
36 | else {
37 | $response = array();
38 | $response["data"] = array();
39 |
40 | // buat data kosong untuk ditampilkan
41 | $data['id'] = "";
42 | $data['no_antrian'] = "-";
43 | $data['status'] = "";
44 |
45 | array_push($response["data"], $data);
46 |
47 | // tampilkan data
48 | echo json_encode($response);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/assets/css/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: Raleway, sans-serif;
3 | background-color: #f6f8fd;
4 | }
5 |
6 | .p-45 {
7 | padding: 2rem !important;
8 | }
9 |
10 | .bg-success {
11 | background-color: #00aa9d !important;
12 | }
13 |
14 | .text-brand {
15 | color: #ee5050 !important;
16 | }
17 |
18 | .text-success {
19 | color: #00aa9d !important;
20 | }
21 |
22 | .btn-success {
23 | color: #fff;
24 | background-color: #00aa9d;
25 | border-color: #00aa9d;
26 | }
27 |
28 | .btn-success:hover {
29 | color: #fff;
30 | background-color: #00a189;
31 | border-color: #00a491;
32 | }
33 |
34 | .btn-check:focus + .btn-success,
35 | .btn-success:focus {
36 | color: #fff;
37 | background-color: #00a189;
38 | border-color: #00a491;
39 | box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);
40 | }
41 |
42 | .btn-check:checked + .btn-success,
43 | .btn-check:active + .btn-success,
44 | .btn-success:active,
45 | .btn-success.active,
46 | .show > .btn-success.dropdown-toggle {
47 | color: #fff;
48 | background-color: #00a491;
49 | border-color: #00a189;
50 | }
51 |
52 | .btn-check:checked + .btn-success:focus,
53 | .btn-check:active + .btn-success:focus,
54 | .btn-success:active:focus,
55 | .btn-success.active:focus,
56 | .show > .btn-success.dropdown-toggle:focus {
57 | box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);
58 | }
59 |
60 | .btn-success:disabled,
61 | .btn-success.disabled {
62 | color: #fff;
63 | background-color: #00aa9d;
64 | border-color: #00aa9d;
65 | }
66 |
67 | .border-success {
68 | border-color: #00aa9d !important;
69 | }
70 |
71 | .card {
72 | border-radius: 1rem;
73 | }
74 |
75 | .rounded-2 {
76 | border-radius: 1rem !important;
77 | }
78 |
79 | .feature-icon-1 {
80 | display: inline-flex;
81 | align-items: center;
82 | justify-content: center;
83 | width: 5rem;
84 | height: 5rem;
85 | font-size: 3rem;
86 | color: #fff;
87 | border-radius: 100%;
88 | }
89 |
90 | .feature-icon-2 {
91 | display: inline-flex;
92 | align-items: center;
93 | justify-content: center;
94 | width: 7rem;
95 | height: 7rem;
96 | font-size: 4rem;
97 | color: #fff;
98 | border-radius: 100%;
99 | }
100 |
101 | .feature-icon-3 {
102 | display: inline-flex;
103 | align-items: center;
104 | justify-content: center;
105 | width: 5rem;
106 | height: 5rem;
107 | font-size: 3.5rem;
108 | color: #fff;
109 | border-radius: 100%;
110 | }
111 |
112 | .breadcrumb {
113 | font-size: 15px;
114 | }
115 |
116 | .table {
117 | --bs-table-striped-bg: #f9f9f9;
118 | vertical-align: middle;
119 | }
120 |
121 | .table > :not(:last-child) > :last-child > * {
122 | border-bottom-color: #dee2e6;
123 | }
124 |
125 | tbody,
126 | td,
127 | tfoot,
128 | th,
129 | thead,
130 | tr {
131 | border-color: #ebedf2 !important;
132 | }
133 |
134 | div.dataTables_wrapper div.dataTables_paginate ul.pagination {
135 | margin: 20px 0 2px;
136 | white-space: nowrap;
137 | justify-content: flex-end;
138 | }
139 |
140 | div.dataTables_wrapper div.dataTables_info {
141 | padding-top: 1.8em;
142 | }
143 |
144 | table.table-bordered.dataTable th {
145 | border-bottom-width: 2px;
146 | font-weight: 600;
147 | }
148 |
149 | .page-link {
150 | position: relative;
151 | display: block;
152 | color: #00aa9d;
153 | text-decoration: none;
154 | background-color: #fff;
155 | border: 1px solid #dee2e6;
156 | transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,
157 | border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
158 | }
159 |
160 | .page-link:hover {
161 | z-index: 2;
162 | color: #00a189;
163 | background-color: #e9ecef;
164 | border-color: #dee2e6;
165 | }
166 |
167 | .page-link:focus {
168 | z-index: 3;
169 | color: #00a189;
170 | background-color: #e9ecef;
171 | outline: 0;
172 | box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
173 | }
174 |
175 | .page-item.active .page-link {
176 | z-index: 3;
177 | color: #fff;
178 | background-color: #00aa9d;
179 | border-color: #00aa9d;
180 | }
181 |
--------------------------------------------------------------------------------
/index.php:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | Aplikasi Antrian Berbasis Web
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Selamat Datang di Aplikasi Antrian Berbasis Web. Silahkan pilih halaman yang ingin ditampilkan.
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
Nomor Antrian
61 |
Halaman Nomor Antrian digunakan pengunjung untuk mengambil nomor antrian.
62 |
63 | Tampilkan
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
Panggilan Antrian
76 |
Halaman Panggilan Antrian digunakan petugas loket untuk memanggil antrian pengunjung.
77 |
78 | Tampilkan
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
--------------------------------------------------------------------------------
/pages/nomor/index.php:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | Aplikasi Antrian Berbasis Web
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
Nomor Antrian
51 |
52 |
53 |
54 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/pages/panggilan/index.php:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | Aplikasi Antrian Berbasis Web
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
Panggilan Antrian
52 |
53 |
54 |
55 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
Jumlah Antrian
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
Antrian Sekarang
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
Antrian Selanjutnya
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
Sisa Antrian
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 | | Nomor Antrian |
139 | Status |
140 | Panggil |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
278 |
279 |
280 |
--------------------------------------------------------------------------------