diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 3ed0c92a5fb..f7a4c6408b5 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -83,9 +83,11 @@ Now that you're familiar with the annotations and text styles, we will give you 2. Run the command `java -version` to check if you have Java 11 or above installed in your computer. * Assuming that you have Java installed in your computer, * If you have a Windows, in this case the Java version is 19.0.2. - ![javaWindows](images/javaWindows.png) + ![javaWindows](images/javaWindows.png) + * If you have a Mac, in this case the Java version is 11.0.19. ![javaMac](images/javaMac.png) + 3. If you do not have Java 11 or above installed in your computer, download it from [here](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html). ### Setting up @@ -147,7 +149,7 @@ Now that you're familiar with the annotations and text styles, we will give you Shows a message explaining how to access the help page. -![help message](images/helpMessage.png) +![help message](images/newhelpwindow.png) Format: `help` @@ -158,19 +160,22 @@ Adds a person to ClinicMate. Format: `add n/NAME p/PHONE e/EMAIL i/IC_NUMBER ag/AGE s/SEX a/ADDRESS` * A person will be uniquely identified by his/her personal identification number. -* Clinic mate does not allow the same identification number to be twice. +* ClinicMate does not allow the same identification number to be used twice. -**Tip:** A person can have a note included. +**Tip:** A person can have a note included (See [addnote](#adding-a-note--addnote) command). Examples: * `add n/John Doe p/88888888 e/johndoe@mail.com i/T0123456A ag/12 s/Male a/John street, block 123, #01-01` +What a successful `add` command looks like: +![successful_add](images/successfuladd.png) + ### Adding a note : `addnote` -Add a note to an existing person in CLinicMate. +Add a note to an existing person in ClinicMate. Format: `addnote IC_NUMBER n/NOTE (-replace)` @@ -181,12 +186,15 @@ Format: `addnote IC_NUMBER n/NOTE (-replace)` * The `-replace` flag can be used to replace the current note with the new note. Examples: -* `addnote T0123456A n/Patient has diabetes` Adds a note `Patient has diabetes` to the person with the IC number `T0123456A` in CLinicMate. +* `addnote T0123456A n/Patient has diabetes` Adds a note `Patient has diabetes` to the person with the IC number `T0123456A` in ClinicMate. * `addnote T0123456A n/Patient has diabetes -replace` Replaces the note of the person with the IC number `T0123456A` with `Patient has diabetes`. +What a successful `addnote` command looks like: +![successful_addnote](images/successfuladdnote.png) + ### Locating persons by ic number: `find` -Find an existing person in CinicMate using their IC_NUMBER. +Find an existing person in ClinicMate using their IC_NUMBER. Displays their contact information on the left-hand side of the screen and their full notes on the right-hand side. Format: `find IC_NUMBER` @@ -200,6 +208,9 @@ Format: `find IC_NUMBER` Examples: * `find T0123456A` returns `John Doe`. +What a successful `find` command looks like: +![successful_find](images/successfulfind.png) + ### Deleting a person : `delete` Deletes the specified person from ClinicMate using their IC_NUMBER. @@ -216,6 +227,9 @@ Format: `delete IC_NUMBER` Examples: * `delete T0123456A` deletes `John Doe` who has `IC_NUMBER` of `T0123456A` from ClinicMate. +What a successful `delete` message looks like: +![successful_deletemessage](images/successfuldeletemessage.png) + ### Listing all entries : `list` Lists all entries from the ClinicMate. @@ -249,23 +263,33 @@ If your changes to the data file makes its format invalid, ClinicMate will disca Furthermore, certain edits can cause the ClinicMate to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly. -### Archiving data files `[coming in v2.0]` - -_Details coming soon ..._ - -------------------------------------------------------------------------------------------------------------------- ## FAQ +**Q**: When using multiple screens, moving the application to a secondary screen and later switching to using only the primary screen, the GUI opens off-screen. What do I do?
+**A**: Delete the `preferences.json` file created by the application before running the application again. + +**Q**: Is there a limit to the number of patient records ClinicMate can manage?
+**A**: ClinicMate is designed to handle a large number of patient records efficiently. However, performance may vary depending on the hardware specifications of your computer and the amount of data being managed. + **Q**: How do I transfer my data to another Computer?
-**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous CLinicMate home folder. +**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous ClinicMate home folder. --------------------------------------------------------------------------------------------------------------------- +**Q**: Can I export patient data from ClinicMate for reporting or backup purposes?
+**A**: Currently, ClinicMate does not support direct export of patient data. However, you can manually copy the data from the data file located at `[JAR file location]/data/clinicmate.json` for backup or reporting purposes. + +**Q**: Can I customize the fields for patient records in ClinicMate?
+**A**: ClinicMate currently supports predefined fields for patient records (name, phone, email, IC number, age, sex, address). Customization of fields is not supported in the current version. -## Known issues +**Q**: How secure is the patient data stored in ClinicMate?
+**A**: ClinicMate stores patient data locally on your computer in a JSON file. It is recommended to keep your computer secure and up-to-date with the latest security patches to ensure the safety of patient data. -1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again. +**Q**: Is there a way to import patient data into ClinicMate from other software?
+**A**: ClinicMate does not currently support direct import of patient data from other software. However, you can manually enter patient data using the `add` command. +**Q**: Can I use ClinicMate on multiple computers?
+**A**: Yes, you can use ClinicMate on multiple computers. Simply copy the ClinicMate `.jar` file and the `clinicmate.json` data file to the other computer and run the application as usual. -------------------------------------------------------------------------------------------------------------------- ## Command summary diff --git a/docs/images/newhelpwindow.png b/docs/images/newhelpwindow.png new file mode 100644 index 00000000000..32ec09b9574 Binary files /dev/null and b/docs/images/newhelpwindow.png differ diff --git a/docs/images/successfuladd.png b/docs/images/successfuladd.png new file mode 100644 index 00000000000..644de335226 Binary files /dev/null and b/docs/images/successfuladd.png differ diff --git a/docs/images/successfuladdnote.png b/docs/images/successfuladdnote.png new file mode 100644 index 00000000000..9079de74de3 Binary files /dev/null and b/docs/images/successfuladdnote.png differ diff --git a/docs/images/successfuldeletemessage.png b/docs/images/successfuldeletemessage.png new file mode 100644 index 00000000000..d2554bca456 Binary files /dev/null and b/docs/images/successfuldeletemessage.png differ diff --git a/docs/images/successfulfind.png b/docs/images/successfulfind.png new file mode 100644 index 00000000000..43be61012b1 Binary files /dev/null and b/docs/images/successfulfind.png differ diff --git a/src/main/java/seedu/address/logic/parser/CliSyntax.java b/src/main/java/seedu/address/logic/parser/CliSyntax.java index 86035d68212..a74eb5cb976 100644 --- a/src/main/java/seedu/address/logic/parser/CliSyntax.java +++ b/src/main/java/seedu/address/logic/parser/CliSyntax.java @@ -6,14 +6,14 @@ public class CliSyntax { /* Prefix definitions */ - public static final Prefix PREFIX_NAME = new Prefix("n/"); - public static final Prefix PREFIX_IC_NUMBER = new Prefix("i/"); - public static final Prefix PREFIX_AGE = new Prefix("ag/"); - public static final Prefix PREFIX_SEX = new Prefix("s/"); - public static final Prefix PREFIX_ADDRESS = new Prefix("a/"); - public static final Prefix PREFIX_EMAIL = new Prefix("e/"); - public static final Prefix PREFIX_PHONE = new Prefix("p/"); - public static final Prefix PREFIX_TAG = new Prefix("t/"); - public static final Prefix PREFIX_NOTE = new Prefix("n/"); + public static final Prefix PREFIX_NAME = new Prefix("n\\"); + public static final Prefix PREFIX_IC_NUMBER = new Prefix("i\\"); + public static final Prefix PREFIX_AGE = new Prefix("ag\\"); + public static final Prefix PREFIX_SEX = new Prefix("s\\"); + public static final Prefix PREFIX_ADDRESS = new Prefix("a\\"); + public static final Prefix PREFIX_EMAIL = new Prefix("e\\"); + public static final Prefix PREFIX_PHONE = new Prefix("p\\"); + public static final Prefix PREFIX_TAG = new Prefix("t\\"); + public static final Prefix PREFIX_NOTE = new Prefix("n\\"); public static final Prefix PREFIX_FLAG = new Prefix("-replace"); } diff --git a/src/main/java/seedu/address/model/person/IdentityCardNumber.java b/src/main/java/seedu/address/model/person/IdentityCardNumber.java index c64d7629111..151c6b2a852 100644 --- a/src/main/java/seedu/address/model/person/IdentityCardNumber.java +++ b/src/main/java/seedu/address/model/person/IdentityCardNumber.java @@ -11,7 +11,7 @@ public class IdentityCardNumber { public static final IdentityCardNumber DEFAULT = new IdentityCardNumber("S0000000A"); public static final String MESSAGE_CONSTRAINTS = - "IC number starts with one letter (S,T,F,G,M) followed by seven digits and one letter behind" + "IC number starts with one letter (S,T,F,G,M) followed by seven digits and one letter behind.\n" + " It is case insensitive. An example is S1234567A."; public static final String VALIDATION_REGEX = "[STFGMstfgm][0-9]{7}[A-Z,a-z]"; diff --git a/src/main/java/seedu/address/model/person/Name.java b/src/main/java/seedu/address/model/person/Name.java index 173f15b9b00..40ebc970d8f 100644 --- a/src/main/java/seedu/address/model/person/Name.java +++ b/src/main/java/seedu/address/model/person/Name.java @@ -10,13 +10,14 @@ public class Name { public static final String MESSAGE_CONSTRAINTS = - "Names should only contain alphanumeric characters and spaces, and it should not be blank"; + "Names should only contain alphanumeric characters, special characters ('-', '/', ',') and space.\n" + + "It should also not be blank"; /* * The first character of the address must not be a whitespace, * otherwise " " (a blank string) becomes a valid input. */ - public static final String VALIDATION_REGEX = "[\\p{Alnum}][\\p{Alnum} ]*"; + public static final String VALIDATION_REGEX = "[\\p{Alnum}\\-/,][\\p{Alnum}\\-/, ]*"; public final String fullName; diff --git a/src/main/java/seedu/address/ui/PersonCard.java b/src/main/java/seedu/address/ui/PersonCard.java index 412bbf6861a..9ad3d57b343 100644 --- a/src/main/java/seedu/address/ui/PersonCard.java +++ b/src/main/java/seedu/address/ui/PersonCard.java @@ -55,8 +55,12 @@ public PersonCard(Person person, int displayedIndex) { this.person = person; id.setText(displayedIndex + ". "); name.setText(person.getName().fullName); - phone.setText(person.getPhone().value); - email.setText(person.getEmail().value); + + StringBuilder truncatedPhone = new StringBuilder(); + phone.setText(truncatedPhone.append("Phone: ").append(person.getPhone().value).toString()); + + StringBuilder truncatedEmail = new StringBuilder(); + email.setText(truncatedEmail.append("Email: ").append(person.getEmail().value).toString()); String fullNote = person.getNote().value; int maxLineLength = 30; // Maximum length of each line before truncation @@ -91,6 +95,7 @@ public PersonCard(Person person, int displayedIndex) { ic.setText(person.getIdentityCardNumber().value); age.setText(String.valueOf(person.getAge().value)); sex.setText(person.getSex().value); - address.setText(person.getAddress().value); + StringBuilder truncatedAddress = new StringBuilder(); + address.setText(truncatedAddress.append("Address: ").append(person.getAddress().value).toString()); } } diff --git a/src/main/resources/view/LightTheme.css b/src/main/resources/view/LightTheme.css index a3aea4c09c0..fac701c3fa5 100644 --- a/src/main/resources/view/LightTheme.css +++ b/src/main/resources/view/LightTheme.css @@ -188,7 +188,7 @@ } .context-menu .label { - -fx-text-fill: white; + -fx-text-fill: black; } .menu-bar { diff --git a/src/main/resources/view/PersonListCard.fxml b/src/main/resources/view/PersonListCard.fxml index a19a92f8cae..3594f7d7038 100644 --- a/src/main/resources/view/PersonListCard.fxml +++ b/src/main/resources/view/PersonListCard.fxml @@ -40,15 +40,12 @@