ref: dd82d34b0fb7572f9525ba52642cc460ba9cf4f6
dir: /Main.java/
//package BookProj;
import java.util.*;
import java.time.*;
enum Types
{
Status,
AgeGroup,
Abstract,
Author,
Name,
ISBN,
}
enum Role
{
Admin,
User,
}
interface Prog
{
boolean logon(Admin u);
boolean logon(RegularUser u);
/* askpass(User u); */
void logout(Admin u);
void setup();
/* void logout(User u);
void menu();
// Book FindBook(type key, String value); // Pointer to whole book
String FindBook(type key, String value); // Pointer to ISBN
void ReturnBook(String ISBN);
void ReturnBook(Book b); */
static boolean askpass(Admin u)
{
String t;
Scanner s = new Scanner(System.in);
/* oh yeah, console and stuff
if(System.console() != null)
char passwd[], esc = 'q';
// oh yeah, password and stuff
if(passwd = cons.readPassword("[%s]", "Password:")) != null)
{
if(u.checkPass(passwd))
t = true;
java.util.Arrays.fill(passwd, ' ');
} */
System.out.print("password?> ");
t = s.nextLine();
if(u.checkPass(t))
return true;
else
return false;
}
}
class Book
{
/* hashmap, array list here */
private boolean Status;
private String Abstract, Author, Name, ISBN;
// Register()
// List()
// WriteStatus()
// String LastStatus();
// boolean AgeOk(int age);
}
abstract class User
{
private Role role;
private String Username, Reserved;
private int ID;
private LocalDateTime RegTime;
// abstract boolean IsReserved(String ISBN);
User(Role r, String u, int id, LocalDateTime rt)
{
this.role = r;
this.Username = u;
this.ID = id;
this.RegTime = rt;
}
Role getRole()
{
return this.role;
}
String getUsername()
{
return this.Username;
}
int getID()
{
return this.ID;
}
boolean setReserved(String n)
{
/* ensure he has no books */
if(this.Reserved == null)
{
this.setReserved(n);
return true;
}
// XXX add case if that book doesn't exist
else
{
System.err.println("the user already have a book");
return false;
}
}
String getReserved()
{
/* ISBN */
return this.Reserved;
}
LocalDateTime getRegTime()
{
return this.RegTime;
}
}
class Admin extends User
{
private Role role = Role.Admin;
private String Password;
public static boolean Active = false;
Admin(String user, String pass)
{
// XXX, make an ID range for admins?
super(Role.Admin, user, 1, LocalDateTime.now());
/* maybe check if password is too easy? */
this.Password = pass;
}
boolean setReserved(Book b)
{
return false; /* XXX */
}
boolean setReserved(String ISBN)
{
return false; /* XXX */
}
boolean isReserved(String ISBN)
{
return false; /* XXX */
}
boolean checkPass(String pass)
{
if(this.Password.equals(pass))
return true;
else
return false;
}
}
class RegularUser extends User
{
private Role role = Role.User;
private int Age;
RegularUser(String username, int age)
{
super(Role.User, username, (int)Math.random()*100, LocalDateTime.now());
this.Age = age;
}
/*
boolean IsReserved(Book b)
{
if(this.Reserved == b.getISBN())
return true;
else
return false;
} */
boolean IsReserved(String ISBN)
{
if(this.getReserved() == ISBN)
return true;
else
return false;
}
}
class Lib implements Prog
{
// XXX think more, make read.password work if it can,
ArrayList<RegularUser> UsersList = new ArrayList<RegularUser>();
ArrayList<Book> BooksList = new ArrayList<Book>();
static Admin adm;
public boolean logon(Admin u)
{
while(!Prog.askpass(u))
{
System.err.println("Please try again");
}
System.out.println("Login as " + u.getUsername() + " successful");
u.Active = true;
return true;
}
public boolean logon(RegularUser u)
{
/* maybe later i want to do more stuff here */
System.out.println("Login as " + u.getUsername() + " successful");
return true;
}
public void logout(Admin u)
{
System.out.println("Logging out...");
u.Active = false;
}
public void setup()
{
/* isn't java wonderful? */
String user = "", pass = "";
Scanner s = new Scanner(System.in);
System.out.println("Setting up Admin:");
while(user == "")
{
System.out.print("Admin username?> ");
user = s.nextLine();
}
while(pass == "")
{
System.out.print("Admin password?> ");
pass = s.nextLine();
}
adm = new Admin(user, pass);
}
public void menu()
{
System.out.printf(
"1) new book\n" +
"2) new user\n" +
"3) find book\n" +
"4) take book\n" +
"5) return book\n" +
"6) add new admin\n" +
"7) quit!\n" +
"8) logout\n");
}
public void getInput()
{
int in;
boolean flag = true;
Scanner s = new Scanner(System.in);
while(flag)
{
System.out.print("menu> ");
in = s.nextInt();
switch(in)
{
/* XXX
case 1:
l.addbook();
break;
case 2:
l.adduser();
break;
case 3:
l.findbook();
break;
case 4:
l.takebook();
break;
case 5:
l.returnbook();
break;
*/
case 6:
this.logout(this.adm);
flag = false;
break;
/*
case 7:
l.quit();
break;
case 8:
this.newadm(this.adm);
break;
*/
default:
System.out.println("Invalid answer!, please try again.");
break;
}
}
}
}
public class Main
{
public static void main(String args[])
{
int in;
Scanner s = new Scanner(System.in);
// Scanner sf = New Scanner(file)? XXX
Lib l = new Lib();
l.setup();
while(true)
{
l.logon(l.adm);
while(l.adm.Active)
{
l.menu();
/* only exists if user either logs out or smh */
l.getInput();
/* user wants to quit */
if(l.adm.Active)
return;
}
}
}
}