Main Activity.
java
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class MainActivity extends AppCompatActivity {
Button btnPatient, btnDoctor, btnAppointment, btnView;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_main);
btnPatient = findViewById([Link]);
btnDoctor = findViewById([Link]);
btnAppointment = findViewById([Link]);
btnView = findViewById([Link]);
Button btnViewPatients = findViewById([Link]);
Button btnViewDoctors = findViewById([Link]);
[Link](v -> startActivity(new Intent(this,
[Link])));
[Link](v -> startActivity(new Intent(this,
[Link])));
[Link](v -> startActivity(new Intent(this,
[Link])));
[Link](v -> startActivity(new Intent(this,
[Link])));
[Link](v ->
startActivity(new Intent([Link], [Link])));
[Link](v ->
startActivity(new Intent([Link], [Link])));
}
}
Activity_Main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp">
<Button
android:id="@+id/btnAddPatient"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add Patient" />
<Button
android:id="@+id/btnAddDoctor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add Doctor"
android:layout_marginTop="10dp" />
<Button
android:id="@+id/btnBook"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Book Appointment"
android:layout_marginTop="10dp" />
<Button
android:id="@+id/btnView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="View Appointments"
android:layout_marginTop="10dp" />
<Button
android:id="@+id/btnViewPatients"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="View Patients"
android:layout_marginTop="10dp"/>
<Button
android:id="@+id/btnViewDoctors"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="View Doctors"
android:layout_marginTop="10dp"/>
</LinearLayout>
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "[Link]";
public static final int DATABASE_VERSION = 2; // 🔥 IMPORTANT
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
[Link](
"CREATE TABLE patient(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT," +
"age TEXT," +
"phone TEXT)"
);
[Link](
"CREATE TABLE doctor(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT," +
"specialization TEXT," +
"availability TEXT)"
);
[Link](
"CREATE TABLE appointment(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"patient TEXT," +
"doctor TEXT," +
"date TEXT," +
"time TEXT)"
);
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
[Link]("DROP TABLE IF EXISTS patient");
[Link]("DROP TABLE IF EXISTS doctor");
[Link]("DROP TABLE IF EXISTS appointment");
onCreate(db);
}
// ✅ Insert Patient
public boolean insertPatient(String name, String age, String phone) {
SQLiteDatabase db = [Link]();
ContentValues cv = new ContentValues();
[Link]("name", name);
[Link]("age", age);
[Link]("phone", phone);
return [Link]("patient", null, cv) != -1;
}
// ✅ FIXED Insert Doctor (WITH availability)
public boolean insertDoctor(String name, String spec, String availability) {
SQLiteDatabase db = [Link]();
ContentValues cv = new ContentValues();
[Link]("name", name);
[Link]("specialization", spec);
[Link]("availability", availability);
return [Link]("doctor", null, cv) != -1;
}
// ✅ Check if doctor already has appointment at same date & time
public boolean isTimeSlotAvailable(String doctor, String date, String time) {
SQLiteDatabase db = [Link]();
Cursor cursor = [Link](
"SELECT * FROM appointment WHERE doctor=? AND date=? AND time=?",
new String[]{doctor, date, time}
);
boolean available = [Link]() == 0;
[Link]();
return available;
}
// ✅ View Doctors
public Cursor getDoctors() {
SQLiteDatabase db = [Link]();
return [Link]("SELECT * FROM doctor", null);
}
// ✅ View Patients
public Cursor getPatients() {
SQLiteDatabase db = [Link]();
return [Link]("SELECT * FROM patient", null);
}
// ✅ Insert Appointment
public boolean insertAppointment(String patient, String doctor, String date, String time) {
SQLiteDatabase db = [Link]();
ContentValues cv = new ContentValues();
[Link]("patient", patient);
[Link]("doctor", doctor);
[Link]("date", date);
[Link]("time", time);
return [Link]("appointment", null, cv) != -1;
}
// ✅ Check if doctor already booked on same date
public boolean isDoctorAvailable(String doctor, String date) {
SQLiteDatabase db = [Link]();
Cursor cursor = [Link](
"SELECT * FROM appointment WHERE doctor = ? AND date = ?",
new String[]{doctor, date}
);
boolean available = [Link]() == 0;
[Link]();
return available;
}
// ✅ View Appointments
public Cursor getAppointments() {
SQLiteDatabase db = [Link]();
return [Link]("SELECT * FROM appointment", null);
}
}
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class AddPatientActivity extends AppCompatActivity {
EditText etName, etAge, etPhone;
Button btnSave;
DatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_add_patient);
db = new DatabaseHelper(this);
etName = findViewById([Link]);
etAge = findViewById([Link]);
etPhone = findViewById([Link]);
btnSave = findViewById([Link]);
[Link](v -> {
String name = [Link]().toString().trim();
String age = [Link]().toString().trim();
String phone = [Link]().toString().trim();
// Empty check
if ([Link]() || [Link]() || [Link]()) {
[Link](this, "Please fill all fields", Toast.LENGTH_SHORT).show();
return;
}
// Mobile number validation (10 digits)
if () {
[Link](this, "Invalid Mobile Number", Toast.LENGTH_SHORT).show();
return;
}
boolean inserted = [Link](name, age, phone);
[Link](this,
inserted ? "Patient Added Successfully" : "Error Adding Patient",
Toast.LENGTH_SHORT).show();
if (inserted) {
[Link]("");
[Link]("");
[Link]("");
}
});
}
}
Activity_add_patient.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp">
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Patient Name"
android:inputType="textPersonName"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " />
<EditText
android:id="@+id/etAge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Age"
android:inputType="number"
android:maxLength="2"/>
<EditText
android:id="@+id/etPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Mobile Number"
android:inputType="phone"
android:maxLength="10"/>
<Button
android:id="@+id/btnSave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save Patient"
android:layout_marginTop="10dp" />
</LinearLayout>
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class AddDoctorActivity extends AppCompatActivity {
EditText etName, etSpec, etAvailability;
Button btnSave;
DatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_add_doctor);
etName = findViewById([Link]);
etSpec = findViewById([Link]);
etAvailability = findViewById([Link]); // ✅ IMPORTANT
btnSave = findViewById([Link]);
db = new DatabaseHelper(this);
[Link](v -> {
String name = [Link]().toString().trim();
String spec = [Link]().toString().trim();
String availability = [Link]().toString().trim();
if ([Link]() || [Link]() || [Link]()) {
[Link](this, "Please fill all fields", Toast.LENGTH_SHORT).show();
return;
}
boolean inserted = [Link](name, spec, availability); // ✅ FIXED
[Link](this, inserted ? "Doctor Added Successfully" : "Error Adding Doctor",
Toast.LENGTH_SHORT).show();
if (inserted) {
[Link]("");
[Link]("");
[Link]("");
}
});
}
}
Activity_add_doctor.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Doctor Name"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " />
<EditText
android:id="@+id/etSpec"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Specialization"
android:layout_marginTop="10dp"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " />
<!-- ✅ ADD THIS -->
<EditText
android:id="@+id/etAvailability"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Availability (Available / Not Available)"
android:layout_marginTop="10dp"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " />
<Button
android:id="@+id/btnSave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add Doctor"
android:layout_marginTop="20dp" />
</LinearLayout>
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class BookAppointmentActivity extends AppCompatActivity {
EditText etPatient, etDate;
Spinner spDoctor, spTime;
Button btnBook;
DatabaseHelper db;
ArrayList<String> doctorList, timeList;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_book_appointment);
db = new DatabaseHelper(this);
etPatient = findViewById([Link]);
etDate = findViewById([Link]);
spDoctor = findViewById([Link]);
spTime = findViewById([Link]);
btnBook = findViewById([Link]);
doctorList = new ArrayList<>();
timeList = new ArrayList<>();
// 📅 Date Picker
[Link](false);
[Link](v -> {
Calendar c = [Link]();
new DatePickerDialog(
this,
(view, year, month, day) ->
[Link](day + "/" + (month + 1) + "/" + year),
[Link]([Link]),
[Link]([Link]),
[Link](Calendar.DAY_OF_MONTH)
).show();
});
loadAvailableDoctors();
loadTimeSlots();
[Link](v -> {
String patient = [Link]().toString().trim();
String date = [Link]().toString().trim();
if ([Link]() || [Link]()) {
[Link](this, "Please fill all fields", Toast.LENGTH_SHORT).show();
return;
}
String doctor = [Link]().toString();
String time = [Link]().toString();
// 🔴 CHECK TIME SLOT
if () {
[Link](this,
"Doctor not available at this time",
Toast.LENGTH_SHORT).show();
return;
}
boolean inserted = [Link](patient, doctor, date, time);
[Link](this,
inserted ? "Appointment Booked" : "Error",
Toast.LENGTH_SHORT).show();
if (inserted) {
[Link]("");
[Link]("");
}
});
}
// ✅ Load AVAILABLE doctors
private void loadAvailableDoctors() {
Cursor cursor = [Link]();
while ([Link]()) {
if ("Available".equalsIgnoreCase([Link](3))) {
[Link]([Link](1));
}
}
[Link]();
[Link](new ArrayAdapter<>(
this,
[Link].simple_spinner_dropdown_item,
doctorList
));
}
// ⏰ Fixed Time Slots
private void loadTimeSlots() {
[Link]("10:00 AM");
[Link]("11:00 AM");
[Link]("12:00 PM");
[Link]("2:00 PM");
[Link]("3:00 PM");
[Link]("4:00 PM");
[Link](new ArrayAdapter<>(
this,
[Link].simple_spinner_dropdown_item,
timeList
));
}
}
activity_book_appointment.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<!-- Patient Name -->
<EditText
android:id="@+id/etPatient"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Patient Name"
android:inputType="textPersonName"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
/>
<!-- Appointment Date -->
<EditText
android:id="@+id/etDate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Select Date"
android:focusable="false"
android:layout_marginTop="10dp" />
<!-- Doctor Spinner -->
<Spinner
android:id="@+id/spDoctor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp" />
<!-- Time Slot Spinner -->
<Spinner
android:id="@+id/spTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp" />
<!-- Book Button -->
<Button
android:id="@+id/btnBook"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Book Appointment"
android:layout_marginTop="20dp" />
</LinearLayout>
</ScrollView>
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class ViewPatientsActivity extends AppCompatActivity {
ListView listView;
DatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_view_patients);
listView = findViewById([Link]);
db = new DatabaseHelper(this);
ArrayList<String> list = new ArrayList<>();
Cursor cursor = [Link]();
while ([Link]()) {
[Link]("Name: " + [Link](1) +
" | Age: " + [Link](2) +
" | Phone: " + [Link](3));
}
[Link](new ArrayAdapter<>(this, [Link].simple_list_item_1,
list));
}
}
Activity_view_patient.xml
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class ViewDoctorsActivity extends AppCompatActivity {
ListView listView;
DatabaseHelper db;
ArrayList<String> doctorList;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_view_doctors);
listView = findViewById([Link]);
db = new DatabaseHelper(this);
doctorList = new ArrayList<>();
Cursor cursor = [Link]();
if (cursor == null || [Link]() == 0) {
[Link](this, "No Doctors Found", Toast.LENGTH_SHORT).show();
return;
}
while ([Link]()) {
String name = [Link](1);
String specialization = [Link](2);
[Link](
"Doctor Name: " + name +
"\nSpecialization: " + specialization
);
}
[Link]();
ArrayAdapter<String> adapter =
new ArrayAdapter<>(this,
[Link].simple_list_item_1,
doctorList);
[Link](adapter);
}
}
activity_view_doctor.xml
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class ViewAppointmentsActivity extends AppCompatActivity {
ListView listView;
DatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_view_appointments);
listView = findViewById([Link]);
db = new DatabaseHelper(this);
ArrayList<String> list = new ArrayList<>();
Cursor cursor = [Link]();
while ([Link]()) {
[Link](
"Patient: " + [Link](1) +
"\nDoctor: " + [Link](2) +
"\nDate: " + [Link](3) +
"\nTime: " + [Link](4)
);
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
[Link].simple_list_item_1, list);
[Link](adapter);
}
}
activity_view_appointment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>