Prechádzať zdrojové kódy

Finished EditStudentCommand & Show Semester

BlackPhreak 5 rokov pred
rodič
commit
86c382840b

+ 6 - 12
src/me/blackphreak/CommandHandling/EditStudentCommand.java

@@ -14,7 +14,7 @@ import static me.blackphreak.Lib.tryParseUInt;
 
 public class EditStudentCommand extends AbstractCommandHandler {
 	private String lastCmd;
-	private List<Integer> selectedStudentID;
+	private List<String> selectedStudentID;
 	private String selectedColumn;
 	
 	public EditStudentCommand(String desc) {
@@ -43,7 +43,7 @@ public class EditStudentCommand extends AbstractCommandHandler {
 		do {
 			nextFlag = selectColumnToBeModified();
 			
-			if (lastCmd.equalsIgnoreCase("exit")) {
+			if (lastCmd != null && lastCmd.equalsIgnoreCase("exit")) {
 				return true;
 			}
 		} while (!nextFlag);
@@ -78,16 +78,10 @@ public class EditStudentCommand extends AbstractCommandHandler {
 			}
 			else
 			{
-				int sid = tryParseUInt(inp);
-				if (sid == -1) {
-					System.out.println("Invalid StudentID, please try again. [Parser Error]");
-					continue;
-				}
-				
 				// query database to confirm that student is exist.
 				try {
 					if (Database.getInstance()
-						.query("SELECT COUNT(*) FROM Student WHERE StudentID = \""+sid+"\";")
+						.query("SELECT COUNT(*) FROM Student WHERE StudentID = \""+inp+"\";")
 						.getInt(1) != 1)
 					{
 						System.out.println("Invalid StudentID, please try again. [Failed to select (!=1)]");
@@ -100,7 +94,7 @@ public class EditStudentCommand extends AbstractCommandHandler {
 					return false;
 				}
 				
-				selectedStudentID.add(sid);
+				selectedStudentID.add(inp);
 			}
 		} while (true);
 	}
@@ -149,8 +143,8 @@ public class EditStudentCommand extends AbstractCommandHandler {
 	
 	private void doEdit() {
 		var newValue = promptQuestion("The value that you want it to be: ");
-		
-		var updated = Database.getInstance().update("UPDATE Student SET " + selectedColumn + " = \""+newValue+"\" WHERE StudentID = \""+selectedStudentID+"\";");
+		var ids = String.join("\",\"", selectedStudentID);
+		var updated = Database.getInstance().update("UPDATE Student SET " + selectedColumn + " = \""+newValue+"\" WHERE StudentID IN (\""+ids+"\");");
 		
 		if (updated <= 0)
 			System.out.println("No changes have been made.");

+ 7 - 5
src/me/blackphreak/CommandHandling/Handlers/CreateStudentCommand.java

@@ -133,14 +133,14 @@ public class CreateStudentCommand extends AbstractCommandHandler {
 		Debug.info("Student["+stu.getStudentID()+"] created. Saving to database...");
 		
 		// save to db (those SQL injection attack, I don't give a f___ in this project)
-		var sb = new StringBuilder("INSERT INTO Student (StudentID, ChtName, EngName, Address, MobileNum, Nationality, ");
+		var sb = new StringBuilder("INSERT INTO Student (StudentID, ChtName, EngName, Address, MobileNum, Nationality, Semester, ");
 		String sql;
 		
 		if (stu instanceof LocalStudent) {
 			var tmpStu = (LocalStudent)stu;
 			
-			//StudentID, ChtName, EngName, Address, MobileNum, Nationality, HKID
-			sb.append("HKID) VALUES (\"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\");");
+			//StudentID, ChtName, EngName, Address, MobileNum, Nationality, Semester, HKID
+			sb.append("HKID) VALUES (\"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\");");
 			
 			sql = String.format(
 					sb.toString(),
@@ -150,14 +150,15 @@ public class CreateStudentCommand extends AbstractCommandHandler {
 					tmpStu.getHomeAddress(),
 					tmpStu.getMobileNumber(),
 					tmpStu.getNationality(),
+					tmpStu.getSemester(),
 					tmpStu.getHKID()
 			);
 		}
 		else if (stu instanceof OverseaStudent) {
 			var tmpStu = (OverseaStudent)stu;
 			
-			//StudentID, ChtName, EngName, Address, MobileNum, Nationality, VISA
-			sb.append("VISA) VALUES (\"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\");");
+			//StudentID, ChtName, EngName, Address, MobileNum, Nationality, Semester, VISA
+			sb.append("VISA) VALUES (\"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\");");
 			
 			sql = String.format(
 					sb.toString(),
@@ -169,6 +170,7 @@ public class CreateStudentCommand extends AbstractCommandHandler {
 					tmpStu.getHomeAddress(),
 					tmpStu.getMobileNumber(),
 					tmpStu.getNationality(),
+					tmpStu.getSemester(),
 					tmpStu.getVisa()
 			);
 		}

+ 25 - 15
src/me/blackphreak/CommandHandling/Handlers/SearchStudentCommand.java

@@ -93,6 +93,13 @@ public class SearchStudentCommand extends AbstractCommandHandler {
 								&& targetCol.matches("\\d+")
 				)
 				.sorted()
+				.filter(targetCol -> {
+					var col = tryParseUInt(targetCol) - 1;
+					if (col == -1)
+						return false;  // filter it out
+					else
+						return col >= 0 && col < colNames.size();
+				})
 				.forEach(targetCol ->
 						selectedCols.put(colNames.get(
 								tryParseUInt(targetCol)-1
@@ -139,14 +146,15 @@ public class SearchStudentCommand extends AbstractCommandHandler {
 		try {
 			do {
 				// read cols
-				String StudentID = rs.getString("StudentID");
-				String HKID = rs.getString("HKID");
-				String VISA = rs.getString("VISA");
-				String Nationality = rs.getString("Nationality");
-				String ChtName = rs.getString("ChtName");
-				String EngName = rs.getString("EngName");
-				String Address = rs.getString("Address");
-				String MobileNum = rs.getString("MobileNum");
+				var StudentID = rs.getString("StudentID");
+				var HKID = rs.getString("HKID");
+				var VISA = rs.getString("VISA");
+				var Nationality = rs.getString("Nationality");
+				var ChtName = rs.getString("ChtName");
+				var EngName = rs.getString("EngName");
+				var Address = rs.getString("Address");
+				var MobileNum = rs.getString("MobileNum");
+				var Semester = rs.getInt("Semester");
 				
 				AbstractStudent stu;
 				if (VISA != null && !VISA.isBlank() && !VISA.isEmpty())
@@ -163,7 +171,7 @@ public class SearchStudentCommand extends AbstractCommandHandler {
 					continue;
 				}
 				
-				stu.assign(StudentID, ChtName, EngName, Address, MobileNum, Nationality);
+				stu.assign(StudentID, ChtName, EngName, Address, MobileNum, Nationality, Semester);
 				students.put(StudentID, stu);
 			} while (rs.next());
 		}
@@ -174,27 +182,29 @@ public class SearchStudentCommand extends AbstractCommandHandler {
 		}
 		
 		System.out.println(String.format(
-				"\nResults:\n+ %-13s | %-13s | %-13s | %-20s | %-30s | %-10s | %s",
+				"\nResults:\n+ %-13s | %-13s | %-13s | %-10s | %-20s | %-30s | %-10s | %s",
 				"StudentID",
 				"HKID/VISA",
 				"Nationality",
+				"Semester",
 				"ChtName",
 				"EngName",
 				"Mobile",
 				"Address"
 		));
-		//                + id            + hkid/visa     + nationality   +
-		System.out.print("+---------------+---------------+---------------+");
+		//                + id            + hkid/visa     + nationality   + semester
+		System.out.print("+---------------+---------------+---------------+------------+");
 		//                   ChtName              + EngName                        + mobile     + addr
 		System.out.println("----------------------+--------------------------------+------------+-->");
 		
 		students.forEach((k, v) -> System.out.println(
-				String.format("+ %-13s | %-13s | %-13s | %-"+(20-v.getChtName().length())+"s | %-30s | %-10s | %s",
+				String.format("+ %-13s | %-13s | %-13s | %-10s | %-"+(20-v.getChtName().length())+"s | %-30s | %-10s | %s",
 						k,
 						(v instanceof LocalStudent)
 								? ((LocalStudent)v).getHKID()
 								: ((OverseaStudent)v).getVisa(),
 						v.getNationality(),
+						v.getSemester(),
 						v.getChtName(),
 						v.getEngName(),
 						v.getMobileNumber(),
@@ -202,8 +212,8 @@ public class SearchStudentCommand extends AbstractCommandHandler {
 				)
 		));
 		
-		//                + id            + hkid/visa     + nationality   +
-		System.out.print("+---------------+---------------+---------------+");
+		//                + id            + hkid/visa     + nationality   + semester
+		System.out.print("+---------------+---------------+---------------+------------+");
 		//                   ChtName              + EngName                        + mobile     + addr
 		System.out.println("----------------------+--------------------------------+------------+-->");
 		

+ 3 - 1
src/me/blackphreak/Student/AbstractStudent.java

@@ -21,7 +21,8 @@ public abstract class AbstractStudent {
 	                       String engName,
 	                       String homeAddress,
 	                       String mobileNumber,
-	                       String nationality)
+	                       String nationality,
+	                       int semester)
 	{
 		this._studentID = stuID;
 		this._chtName = chtName;
@@ -29,6 +30,7 @@ public abstract class AbstractStudent {
 		this._homeAddress = homeAddress;
 		this._mobileNumber = mobileNumber;
 		this._nationality = nationality;
+		this._semester = semester;
 	}
 	
 	public void printInfo() {

BIN
students.db