package controller;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class SE1919_NgoThiKimNgan_SE200973_LAB2 {
public static void main(String[] args) {
Menu menu = new Menu();
BrandList brand = new BrandList();
CarList car = new CarList(brand);
//Inputter input = new Inputter(brand, car);
Inputter input = new Inputter(brand);
readWrite save = new readWrite();
if ([Link]("Do you want to continue with the previous
data?(Y/N)").equalsIgnoreCase("y")) {
[Link]();
[Link]();
}
int choice = -1;
do {
[Link](true);
[Link](true);
[Link]();
choice = [Link]("Enter your choice");
switch (choice) {
case 1:
[Link]();
break;
case 2:
[Link]([Link]());
if ([Link]("Do you want to save this brand
?(Y/N)").equalsIgnoreCase("Y")) {
[Link]();
}
break;
case 3:
[Link]([Link]("Brand ID"));
break;
case 4:
[Link]([Link]());
break;
case 5:
[Link]([Link]("Enter price you want"));
break;
case 6:
[Link]();
break;
case 7:
[Link]([Link]("Brand Name"));
break;
case 8:
[Link]([Link]());
if ([Link]("Do you want to save this car ?(Y/N):
").equalsIgnoreCase("Y")) {
[Link]();
}
break;
case 9:
[Link]([Link]("Car ID to remove"));
break;
case 10:
[Link]([Link]());
break;
case 11:
[Link]([Link]("Color"));
break;
case 12:
[Link]();
[Link]();
break;
case 13:
if (![Link] && ![Link]) {
if ([Link]("Do you want to save the changes before exiting?
(Y/N)").equalsIgnoreCase("Y")) {
[Link]();
[Link]();
[Link]("Changes saved. Exiting...");
[Link](0);
} else {
if ([Link]("You have unsaved changes. Are you sure you want to
exit without saving? (Y/N)").equalsIgnoreCase("y")) {
[Link]("Exiting without saving...");
[Link](0);
} else {
[Link]("Return menu!");
}
}
} else {
[Link]("No changes to save. Exiting...");
[Link](0);
}
break;
default:
break;
}
} while (choice >= 1 && choice <= 12);
}
package business;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class BrandList extends ArrayList<Brand> {
private String pathFile = "D:\\Ky3\\LAB\\lap\\
SE1919_NgoThiKimNgan_SE200973_LAB2\\[Link]";
public boolean isSaved;
public boolean isIsSaved() {
return isSaved;
}
public void setIsSaved(boolean isSaved) {
[Link] = isSaved;
}
public void listAllBrands() {
if ([Link]()) {
[Link]("There are no brands available. Please add a new brand to get
started.");
return;
}
[Link](this);
}
public void addANewBrand(Brand x) {
if (x != null) {
[Link](x);
[Link]("Brand added successfully!");
setIsSaved(false);
} else {
[Link]("Failed to add brand — invalid data provided");
}
}
public void serachById(String id) {
if (checkID(id) == null) {
[Link]("This brand does not exist!");
} else {
[Link](Menu.HEADER_BRAND);
[Link](checkID(id));
[Link](Menu.FOOTER_BRAND);
}
}
public void updateById(Brand x) {
if (x != null) {
[Link]("Brand information has been successfully updated.");
setIsSaved(false);
}else [Link]("Update failed.");
}
public List<Brand> priceLessThanInput(double value) {
List<Brand> newList = new ArrayList<>();
for (Brand var : this) {
if ([Link]() <= value) {
[Link](var);
}
}
if([Link]()) [Link]("No brands found with price less than or equal
to " + value + ".");
else [Link](newList);
return newList;
}
public void SaveToFile() {
readWrite file = new readWrite();
[Link](this);
setIsSaved(true);
[Link]("Brand list has been successfully saved to file");
}
public List<Brand> loadFile(){
readWrite file = new readWrite();
List<Brand> newList = [Link]();
for(Brand var : newList){
[Link](var);
}
return newList;
}
public Brand checkID(String id) {
for (Brand var : this) {
if ([Link]().toUpperCase().contains([Link]())) {
return var;
}
}
return null;
}
}
package business;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class CarList extends ArrayList<Car> {
private BrandList brandList;
public boolean isSaved;
public boolean isIsSaved() {
return isSaved;
}
public void setIsSaved(boolean isSaved) {
[Link] = isSaved;
}
public CarList(BrandList brandList) {
[Link] = brandList;
}
public void listCarAscending() {
if (![Link]()) {
[Link](brandComparator);
[Link](this);
} else {
[Link]("No cars available. Please add a car first.");
}
}
public void searchCarsByBrandName(String name) {
List<Car> newlist = new ArrayList<>();
for (Car var : this) {
if
([Link]([Link]()).getBrandName().toUpperCase().contains([Link]
rCase())) {
[Link](var);
}
}
if ([Link]()) {
[Link]("No cars found matching this brand name.");
} else {
[Link](newlist);
}
}
public void addANewCar(Car x) {
if (x != null) {
[Link](x);
setIsSaved(false);
[Link]("Car added successfully!");
} else {
[Link]("Unable to add car. Please check the input and try again.");
}
}
public void deleteById(String id) {
if (checkId(id) != null) {
[Link](Menu.HEADER_CAR);
[Link](checkId(id));
[Link](Menu.FOOTER_CAR);
if ([Link]("Are you sure you want to delete this
car?").equalsIgnoreCase("y")) {
[Link](checkId(id));
setIsSaved(false);
[Link]("Car has been removed.");
}
} else {
[Link]("No car found.");
}
}
public void updateById(Car x) {
if (x != null) {
setIsSaved(false);
[Link]("Car information has been updated successfully.");
}
}
public List<Car> listAllCarsByColor(String color) {
List<Car> newList = new ArrayList<>();
for (Car var : this) {
if ([Link]().equalsIgnoreCase(color)) {
[Link](var);
}
}
if ([Link]()) {
[Link]("No cars found with color " + color);
} else {
[Link](newList);
}
return newList;
}
public void SaveToFile() {
readWrite file = new readWrite();
[Link](this);
setIsSaved(true);
}
public Car checkId(String id) {
for (Car var : this) {
if ([Link]().toUpperCase().equalsIgnoreCase(id)) {
return var;
}
}
return null;
}
public boolean loadFile() {
readWrite file = new readWrite();
if ([Link]().isEmpty()) {
return false;
}
for (Car var : [Link]()) {
[Link](var);
// [Link](var);
}
// [Link]("mm");
return true;
}
public boolean checkFrameId(String frame) {
for (Car var : this) {
if ([Link]().equalsIgnoreCase(frame)) {
return true;
}
}
return false;
}
public boolean checkEngineId(String engine) {
for (Car var : this) {
if ([Link]().equalsIgnoreCase(engine)) {
return true;
}
}
return false;
}
public Comparator<Car> brandComparator = new Comparator<Car>() {
@Override
public int compare(Car o1, Car o2) {
Brand b1 = [Link]([Link]());
Brand b2 = [Link]([Link]());
int b = [Link]().compareTo([Link]());
if (b == 0) {
b = [Link]([Link](), [Link]());
}
return b;
}
};
package model;
public class Brand {
private String brandId;
private String brandName;
private String sound;
private double price;
public Brand() {
}
public Brand(String brandId, String brandName, String sound, double price) {
[Link] = brandId;
[Link] = brandName;
[Link] = sound;
[Link] = price;
}
public String getBrandId() {
return brandId;
}
public void setBrandId(String brandId) {
[Link] = brandId;
}
public String getBrandName() {
return brandName;
}
public void setBrandName(String brandName) {
[Link] = brandName;
}
public String getSound() {
return sound;
}
public void setSound(String sound) {
[Link] = sound;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
[Link] = price;
}
@Override
public String toString() {
return [Link]("%-16s|%-30s|%-14s|
%fB",getBrandId(),getBrandName(),getSound(),getPrice());
}
package model;
public class Car {
private String carId;
private String brandId;
private String color;
private String frameId;
private String engineID;
public Car() {
}
public Car(String carId, String brandId, String color, String frameId, String engineID) {
[Link] = carId;
[Link] = brandId;
[Link] = color;
[Link] = frameId;
[Link] = engineID;
}
public String getCarId() {
return carId;
}
public void setCarId(String carId) {
[Link] = carId;
}
public String getBrandId() {
return brandId;
}
public void setBrandId(String brandId) {
[Link] = brandId;
}
public String getColor() {
return color;
}
public void setColor(String color) {
[Link] = color;
}
public String getFrameId() {
return frameId;
}
public void setFrameId(String frameId) {
[Link] = frameId;
}
public String getEngineID() {
return engineID;
}
public void setEngineID(String engineID) {
[Link] = engineID;
}
@Override
public String toString() {
return [Link]("%-16s|%-28s|%-13s|%-14s|%s",
getCarId(),getBrandId(),getColor(),getEngineID(),getFrameId());
}
}
package fileIO;
import [Link];
import [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 readWrite implements readWriteFile {
BrandList brandList = new BrandList();
private final String brandsPath = "E:\\Ky3\\LAB\\lap\\
SE1919_NgoThiKimNgan_SE200973_LAB2\\[Link]";
private final String carsPath = "E:\\Ky3\\LAB\\lap\\
SE1919_NgoThiKimNgan_SE200973_LAB2\\[Link]";
@Override
public List<Car> readFileCar() {
List<Car> listFile = new ArrayList<>();
File f = null;
FileInputStream file = null;
BufferedReader myInput = null;
try {
f = new File(carsPath);
file = new FileInputStream([Link]());
myInput = new BufferedReader(new InputStreamReader(file));
String line = "";
while ((line = [Link]()) != null) {
[Link](converseToCar(line));
}
[Link]();
[Link]();
} catch (Exception e) {
[Link]("wrong");
}
return listFile;
}
public Car converseToCar(String line) {
String[] s = [Link](",");
String carId = s[0].trim();
String brandId = s[1].trim();
String color = s[2].trim();
String frame = s[3].trim();
String engine = s[4].trim();
return new Car(carId, brandId, color, frame, engine);
}
@Override
public void writeFileCar(List<Car> list) {
File f = null;
FileOutputStream file = null;
BufferedWriter myOutput = null;
try {
f = new File(carsPath);
file = new FileOutputStream([Link]());
myOutput = new BufferedWriter(new OutputStreamWriter(file));
for (Car var : list) {
[Link](carConverseToString(var));
[Link]();
}
[Link]();
[Link]();
} catch (Exception e) {
[Link]("HEhe");
}
}
public String carConverseToString(Car x) {
String line = [Link]("%s,%s,%s,%s,%s", [Link](), [Link](),
[Link](), [Link](), [Link]());
return line;
}
@Override
public List<Brand> readFileBrand() {
File f = null;
FileInputStream file = null;
BufferedReader myInput = null;
List<Brand> newList = new ArrayList<>();
try {
f = new File(brandsPath);
file = new FileInputStream([Link]());
myInput = new BufferedReader(new InputStreamReader(file));
String line = "";
while ((line = [Link]()) != null) {
Brand brandHehe = converseToBrand(line);
if (brandHehe == null || [Link]().contains("duplicate test")) {
continue;
} else {
[Link](brandHehe);
}
}
[Link]();
[Link]();
} catch (Exception e) {
[Link](e);
[Link]("huhu");
}
return newList;
}
public Brand converseToBrand(String line) {
String[] s = [Link](",");
String brandId = s[0].trim();
if ([Link](brandId) != null || [Link]()) {
return null;
}
String brandName = s[1].trim();
String[] thu3 = s[2].trim().split(":");
String sound = thu3[0].trim();
String price = thu3[1].trim().substring(0, thu3[1].length() - 2);
return new Brand(brandId, brandName, sound, [Link](price));
}
@Override
public void writeFileBrand(List<Brand> list) {
File f;
FileOutputStream file = null;
BufferedWriter myOutput = null;
try {
f = new File(brandsPath);
file = new FileOutputStream([Link]());
myOutput = new BufferedWriter(new OutputStreamWriter(file));
for (Brand var : list) {
[Link](brandConverseToString(var));
[Link]();
}
[Link]();
[Link]();
} catch (Exception e) {
[Link]("hihi");
}
}
public String brandConverseToString(Brand x) {
String s = [Link]("%s,%s,%s:%f", [Link](), [Link](),
[Link](), [Link]());
return [Link]();
}
}
package fileIO;
import [Link];
import [Link];
import [Link];
public interface readWriteFile {
public List<Car> readFileCar();
public void writeFileCar(List<Car> list);
public List<Brand> readFileBrand();
public void writeFileBrand(List<Brand> list);
}
package neutral;
public interface Acceptable {
public final String DOUBLE_VALID = "^[0-9]+(\\.[0-9]+)?$";
public final String INT_VALID = "^[0-9]+$";
public final String ID_VALID_F = "^[Ff]\\d{5}$";
public final String ID_VALID_E = "^[Ee]\\d{5}$";
public final String CAR_VALID = "^[cC](\\d{1,5})$";
public final String BRAND_VALID = "^[bB]((?i)[a-z0-9._%+-])+$";
public static boolean isValid(String data, String pattern){
return [Link](pattern);
}
}
package neutral;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class Inputter {
private BrandList brandList;
CarList carList = new CarList(brandList);
public Inputter() {
}
public Inputter(BrandList brandList) {
[Link] = brandList;
}
public static String getString(String mess) {
Scanner hihi = new Scanner([Link]);
[Link](mess + ": ");
return [Link]();
}
public double getDouble(String mess) {
String temp = getString(mess);
double result = 0;
if ([Link](temp, Acceptable.DOUBLE_VALID)) {
result = [Link](temp);
}
return result;
}
public int getInt(String mess) {
String temp = getString(mess);
int result = 0;
if ([Link](temp, Acceptable.INT_VALID)) {
result = [Link](temp);
}
return result;
}
public String inputAndLoop(String mess, String pattern) {
String result = "";
boolean check = true;
do {
result = getString(mess);
check = [Link](result, pattern);
if (!check) {
[Link]("Data is invalid!. Re-enter: ");
}
} while (!check);
return [Link]();
}
public Brand addBrand() {
String brandId;
String brandname;
String sound;
double price;
do {
brandId = getString("Brand ID");
if ([Link](brandId) != null) {
[Link]("That ID is already in use. Please enter a different ID.");
}
} while ([Link](brandId) != null);
brandname = getString("Brand Name");
sound = getString("Sound system brand");
price = getDouble("Price");
return new Brand(brandId, brandname, sound, price);
}
public Brand updateBrand() {
String brandId;
String brandname;
String sound;
double price;
do {
brandId = getString("Brand ID");
//[Link]([Link](brandId));
if ([Link](brandId) == null) {
[Link]("No brand found with that ID.");
if (getString("Do you want to continue or return menu ?
(C/R)").equalsIgnoreCase("R")) {
return null;
}
}
} while ([Link](brandId) == null);
Brand upBrand = [Link](brandId);
Brand temp = [Link](brandId);
brandname = getString("Brand Name");
if ([Link]()) {
brandname = [Link]();
} else {
[Link](brandname);
}
sound = getString("Sound system brand");
if ([Link]()) {
sound = [Link]();
} else {
[Link](sound);
}
String price1 = getString("Price");
if ([Link]()) {
price = [Link]();
} else {
price = [Link](price1);
[Link](price);
}
[Link]("Brand Information after update: ");
[Link]("------------------------------------");
[Link]("Brand ID: " + [Link]());
[Link]("Brand Name: " + [Link]());
[Link]("Sound: " + [Link]());
[Link]("Price: " + [Link]());
if(!getString("Do you confirm to change (Y/N)? ").equalsIgnoreCase("Y")){
upBrand = temp;
}
return upBrand;
}
public Car addCar() {
String carId, brandId, color, frameId, engineId;
do {
carId = inputAndLoop("Car ID(Begin with 'C')", Acceptable.CAR_VALID);
//if timf thaay
if ([Link]([Link]()) != null) {
[Link]("That Car ID already exists. Please enter a different ID.");
}
} while ([Link]([Link]()) != null);
if (getString("Do you want to show Brand tables ? (Y/N)").equalsIgnoreCase("Y")) {
[Link]();
}
do {
brandId = inputAndLoop("Brand ID (Begin with 'B')", Acceptable.BRAND_VALID);
if ([Link]([Link]()) == null) {
[Link]("No brand found with that ID. Please enter a valid Brand ID.");
}
} while ([Link]([Link]()) == null);
color = getString("Color");
do {
frameId = inputAndLoop("Frame ID(fomat: F#####)", Acceptable.ID_VALID_F);
//if timf thaay
if ([Link](frameId)){
[Link]("That Frame ID already exists. Please enter a different ID.");
}
} while ([Link](frameId));
do {
engineId = inputAndLoop("Engine ID(fomat: E#####)", Acceptable.ID_VALID_E);
if ([Link](engineId)){
[Link]("That Engine ID already exists. Please enter a different ID.");
}
} while ([Link](engineId));
return new Car([Link](), [Link](), color,
[Link](), [Link]());
}
public Car updateCar() {
String carId, brandId, color, frameId, engineId;
do {
carId = inputAndLoop("Car ID(Begin with 'C')", Acceptable.CAR_VALID);
if ([Link]([Link]()) == null) {
[Link]("No car found with that ID.");
if (!getString("Do you want to continue or return menu ?
(C/R)").equalsIgnoreCase("C")) {
return null;
}
}
} while ([Link]([Link]()) == null);
Car upCar = [Link]([Link]());
brandId = getString("Brand ID");
if (![Link]()) {
[Link]([Link]());
}
color = getString("Color");
if (![Link]()) {
[Link](color);
}
frameId = getString("Frame ID(fomat: F#####)").toUpperCase();
if (![Link]()) {
if ( ||
[Link](frameId) ) {
frameId = inputAndLoop("Frame ID(fomat: F#####)", Acceptable.ID_VALID_F);
if([Link](frameId)){
do{
frameId = getString("Frame ID(fomat: F#####)").toUpperCase();
}while ([Link](frameId));
}
}
[Link](frameId);
}
engineId = getString("Engine ID(fomat: E#####)".toUpperCase());
if (![Link]()) {
if ( ||
[Link](engineId)) {
engineId = inputAndLoop("Engine ID(fomat: E#####)",
Acceptable.ID_VALID_E);
if([Link](engineId)){
do{
engineId = getString("Engine ID(fomat: E#####)").toUpperCase();
}while ([Link](engineId));
}
}
[Link](engineId);
}
return upCar;
}
}
package view;
import [Link];
import [Link];
import [Link];
public class Menu {
public Menu() {
}
public void showMain() {
String[] menuMain = {
"List all brands",
"Add a new brand",
"Search for a brand by ID",
"Update a brand by ID",
"List all brands with prices less than or equal to an input value",
"List all cars in ascending order of brand names",
"Search cars by partial brand name match",
"Add a new car",
"Remove a car by ID",
"Update a car by ID",
"List all cars by a specific color",
"Save data to files",
"Quit program"
};
showMenu(menuMain);
}
public void showMenu(Object[] option) {
[Link]();
for (int i = 0; i < [Link]; i++) {
[Link](i + 1 + " - " + option[i]);
}
}
public static final String HEADER_BRAND
=
"==================================================================
=========================\n"
+ " BRAND ID | BRAND NAME | SOUND | PRICE \n"
+
"==================================================================
=========================\n";
public static final String FOOTER_BRAND
=
"==================================================================
=========================";
public static final String HEADER_CAR
=
"==================================================================
=========================\n"
+ " CAR ID | BRAND ID | COLOR | FRAME ID | ENGINE
ID \n"
+
"==================================================================
=========================\n";
public static final String FOOTER_CAR
=
"==================================================================
=========================";
public static void priBrand(List<Brand> list){
[Link](HEADER_BRAND);
for(Brand var : list) {
[Link](var);
}
[Link](FOOTER_BRAND);
}
public static void priCar(List<Car> list){
[Link](HEADER_CAR);
for(Car var : list){
[Link](var);
}
[Link](FOOTER_CAR);
}
}