Add OOP/Java/Lab/sample/TheQ.java

This commit is contained in:
Aadit Agrawal 2024-11-09 07:07:04 +05:30
parent 4797abb8b2
commit f1cb7a6c93

View File

@ -0,0 +1,248 @@
import java.util.*;
import java.util.Scanner;
// Generic interface that defines search and display methods for any type T
interface SearchUtility<T> {
T search(int id) throws NotFoundException; // Search by ID, throws exception if not found
void display(T t); // Display the found object
}
// Custom exception class for when items are not found
class NotFoundException extends Exception {
public NotFoundException(String message) {
super(message);
}
}
// Book class to store book details
class Book {
private int bookId; // Unique identifier for books
private String title; // Book title
private String author; // Book author
// Constructor to initialize book properties
public Book(int bookId, String title, String author) {
this.bookId = bookId;
this.title = title;
this.author = author;
}
// Getter for book ID - needed for searching
public int getBookId() {
return bookId;
}
// Override toString for proper display format
@Override
public String toString() {
return (
"Book ID: " + bookId + ", Title: " + title + ", Author: " + author
);
}
}
// Student class to store student details
class Student {
private int regNo; // Registration number for student identification
private String name; // Student name
private String course; // Course enrolled
// Constructor to initialize student properties
public Student(int regNo, String name, String course) {
this.regNo = regNo;
this.name = name;
this.course = course;
}
// Getter for registration number - needed for searching
public int getRegNo() {
return regNo;
}
// Override toString for proper display format
@Override
public String toString() {
return (
"Registration No: " +
regNo +
", Name: " +
name +
", Course: " +
course
);
}
}
// Implementation of SearchUtility for Book class
class BookSearch implements SearchUtility<Book> {
private List<Book> books; // List to store book records
// Constructor allows user to add books
public BookSearch() {
books = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
System.out.println("Enter number of books to add:");
int n = scanner.nextInt();
scanner.nextLine();
for (int i = 0; i < n; i++) {
System.out.println("Enter book ID:");
int id = scanner.nextInt();
scanner.nextLine();
System.out.println("Enter book title:");
String title = scanner.nextLine();
System.out.println("Enter book author:");
String author = scanner.nextLine();
books.add(new Book(id, title, author));
}
}
// Search implementation for books using book ID
@Override
public Book search(int id) throws NotFoundException {
for (Book book : books) {
if (book.getBookId() == id) {
return book;
}
}
throw new NotFoundException("Book not found with ID: " + id);
}
// Display implementation for books
@Override
public void display(Book book) {
System.out.println(book);
}
}
// Implementation of SearchUtility for Student class
class StudentSearch implements SearchUtility<Student> {
private List<Student> students; // List to store student records
// Constructor allows user to add students
public StudentSearch() {
students = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
System.out.println("Enter number of students to add:");
int n = scanner.nextInt();
scanner.nextLine();
for (int i = 0; i < n; i++) {
System.out.println("Enter registration number:");
int regNo = scanner.nextInt();
scanner.nextLine();
System.out.println("Enter student name:");
String name = scanner.nextLine();
System.out.println("Enter course:");
String course = scanner.nextLine();
students.add(new Student(regNo, name, course));
}
}
// Search implementation for students using registration number
@Override
public Student search(int regNo) throws NotFoundException {
for (Student student : students) {
if (student.getRegNo() == regNo) {
return student;
}
}
throw new NotFoundException(
"Student not found with Registration No: " + regNo
);
}
// Display implementation for students
@Override
public void display(Student student) {
System.out.println(student);
}
}
// Thread class for handling book searches
class BookThread extends Thread {
private BookSearch bookSearch; // Reference to book search utility
private int bookId; // Book ID to search for
// Constructor to initialize search parameters
public BookThread(BookSearch bookSearch, int bookId) {
this.bookSearch = bookSearch;
this.bookId = bookId;
}
// Thread execution - searches and displays book details
@Override
public void run() {
try {
Book book = bookSearch.search(bookId);
bookSearch.display(book);
} catch (NotFoundException e) {
System.out.println(e.getMessage());
}
}
}
// Thread class for handling student searches
class StudentThread extends Thread {
private StudentSearch studentSearch; // Reference to student search utility
private int regNo; // Registration number to search for
// Constructor to initialize search parameters
public StudentThread(StudentSearch studentSearch, int regNo) {
this.studentSearch = studentSearch;
this.regNo = regNo;
}
// Thread execution - searches and displays student details
@Override
public void run() {
try {
Student student = studentSearch.search(regNo);
studentSearch.display(student);
} catch (NotFoundException e) {
System.out.println(e.getMessage());
}
}
}
// Main class to demonstrate concurrent book and student searches
public class TheQ {
public static void main(String[] args) {
// Create search utility instances
BookSearch bookSearch = new BookSearch();
StudentSearch studentSearch = new StudentSearch();
Scanner scanner = new Scanner(System.in);
System.out.println("Enter book ID to search:");
int bookId = scanner.nextInt();
System.out.println("Enter student registration number to search:");
int regNo = scanner.nextInt();
// Create and start threads for concurrent searching
BookThread bookThread = new BookThread(bookSearch, bookId);
StudentThread studentThread = new StudentThread(studentSearch, regNo);
bookThread.start();
studentThread.start();
scanner.close();
}
}