Skip to content

Commit 7c6345a

Browse files
authored
First commit (#1)
* ignore csv file used for data storage * Initial commit
1 parent bda165a commit 7c6345a

17 files changed

Lines changed: 747 additions & 0 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@
2121

2222
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
2323
hs_err_pid*
24+
/members.csv

pom.xml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--suppress MavenPackageUpdate -->
3+
<project xmlns="http://maven.apache.org/POM/4.0.0"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
6+
<modelVersion>4.0.0</modelVersion>
7+
8+
<groupId>org.example</groupId>
9+
<artifactId>FitnessClub</artifactId>
10+
<version>1.0-SNAPSHOT</version>
11+
<dependencies>
12+
<dependency>
13+
<groupId>org.junit.jupiter</groupId>
14+
<artifactId>junit-jupiter</artifactId>
15+
<version>5.9.1</version>
16+
<scope>test</scope>
17+
</dependency>
18+
</dependencies>
19+
20+
<properties>
21+
<maven.compiler.source>19</maven.compiler.source>
22+
<maven.compiler.target>19</maven.compiler.target>
23+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
24+
</properties>
25+
26+
</project>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.example;
2+
3+
public interface Calculator<T extends Number> {
4+
5+
double calculateFees(T clubID);
6+
7+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.example;
2+
3+
import java.io.*;
4+
import java.nio.file.Files;
5+
import java.nio.file.Path;
6+
import java.nio.file.Paths;
7+
import java.nio.file.StandardCopyOption;
8+
import java.util.LinkedList;
9+
10+
public class FileHandler {
11+
12+
public static final String MEMBERS_TEMP = "members.temp";
13+
protected Path csvFileName;
14+
15+
public FileHandler() {
16+
csvFileName = Paths.get("members.csv");
17+
}
18+
19+
public LinkedList<Member> readFile() {
20+
LinkedList<Member> members = new LinkedList<>();
21+
22+
Member memberPlaceholder;
23+
24+
try (BufferedReader reader = new BufferedReader(new FileReader(csvFileName.toString()))) {
25+
26+
String lineRead = reader.readLine();
27+
28+
while (lineRead != null) {
29+
30+
String[] fields = lineRead.split(", ");
31+
32+
//TODO index fields or something
33+
//TODO errors
34+
35+
if (fields[0].equals("S")) {
36+
memberPlaceholder = new SingleMember(Integer.parseInt(fields[1]), fields[2], Double.parseDouble(fields[3]), Integer.parseInt(fields[4]));
37+
} else {
38+
memberPlaceholder = new MultiClubMember(Integer.parseInt(fields[1]), fields[2], Double.parseDouble(fields[3]), Integer.parseInt(fields[4]));
39+
}
40+
members.add(memberPlaceholder);
41+
lineRead = reader.readLine();
42+
}
43+
44+
} catch (IOException e) {
45+
System.out.println("Failed to parse data: " + e.getMessage());
46+
members.clear();
47+
}
48+
49+
return members;
50+
}
51+
52+
public void appendFile(String member) {
53+
54+
try (BufferedWriter writer = new BufferedWriter(new FileWriter(csvFileName.toString(), true))) {
55+
writer.write(member + '\n');
56+
57+
} catch (IOException e) {
58+
System.out.println("Failed to update membership file: " + e.getMessage());
59+
}
60+
61+
}
62+
63+
public void overwriteFile(LinkedList<Member> members) {
64+
65+
boolean moveFile = false;
66+
67+
try (BufferedWriter writer = new BufferedWriter(new FileWriter(MEMBERS_TEMP))) {
68+
69+
for (Member member : members) {
70+
writer.write(member.toCSV());
71+
writer.newLine();
72+
}
73+
74+
moveFile = true;
75+
} catch (IOException e) {
76+
System.out.println("Failed to write data: " + e.getMessage());
77+
}
78+
79+
if (moveFile) {
80+
Path tempFile = Paths.get(MEMBERS_TEMP);
81+
82+
try {
83+
Files.move(tempFile, csvFileName, StandardCopyOption.REPLACE_EXISTING);
84+
} catch (IOException e) {
85+
System.out.println("Failed to move temporary data file: " + e.getMessage());
86+
}
87+
}
88+
89+
}
90+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.example;
2+
3+
import java.util.LinkedList;
4+
import java.util.Scanner;
5+
6+
public class Main {
7+
public static void main(String[] args) {
8+
String memberString;
9+
10+
MembershipManagement membershipManagement = new MembershipManagement(new Scanner(System.in));
11+
FileHandler fileHandler = new FileHandler();
12+
13+
LinkedList<Member> members = fileHandler.readFile();
14+
int choice;
15+
16+
do {
17+
18+
choice = membershipManagement.getChoice();
19+
20+
switch (choice) {
21+
case 1 -> {
22+
memberString = membershipManagement.addMembers(members);
23+
fileHandler.appendFile(memberString);
24+
}
25+
case 2 -> {
26+
membershipManagement.removeMember(members);
27+
fileHandler.overwriteFile(members);
28+
}
29+
case 3 -> membershipManagement.printMemberInfo(members);
30+
case -1 -> System.out.println("Exiting");
31+
default -> System.out.println("Invalid option selected");
32+
}
33+
34+
35+
} while (choice != -1);
36+
37+
}
38+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package org.example;
2+
3+
public class Member {
4+
5+
protected MemberType memberType;
6+
protected int memberID;
7+
protected String name;
8+
protected double fees;
9+
10+
public Member(MemberType pMemberType, int pMemberID, String pName, double pFees) {
11+
memberType = pMemberType;
12+
memberID = pMemberID;
13+
name = pName;
14+
fees = pFees;
15+
}
16+
17+
public MemberType getMemberType() {
18+
return memberType;
19+
}
20+
21+
public void setMemberType(MemberType memberType) {
22+
this.memberType = memberType;
23+
}
24+
25+
public int getMemberID() {
26+
return memberID;
27+
}
28+
29+
public void setMemberID(int memberID) {
30+
this.memberID = memberID;
31+
}
32+
33+
public String getName() {
34+
return name;
35+
}
36+
37+
public void setName(String name) {
38+
this.name = name;
39+
}
40+
41+
public double getFees() {
42+
return fees;
43+
}
44+
45+
public void setFees(double fees) {
46+
this.fees = fees;
47+
}
48+
49+
@Override
50+
public String toString() {
51+
return "Membership type: " + memberType.toString() + "; Member ID: " + memberID
52+
+ "; Member: " + name + "; Fee: £" + String.format("%.2f", fees);
53+
}
54+
55+
public String toCSV() {
56+
return memberType.constant + ", " + memberID + ", " + name + ", " + fees;
57+
}
58+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.example;
2+
3+
public enum MemberType {
4+
SingleBranch("Single branch", "S"),
5+
MultiBranch("All branches", "M");
6+
7+
final String description;
8+
final String constant;
9+
10+
MemberType(String desc, String pConstant) {
11+
description = desc;
12+
constant = pConstant;
13+
}
14+
15+
@Override
16+
public String toString() {
17+
return description;
18+
}
19+
}

0 commit comments

Comments
 (0)