-
Notifications
You must be signed in to change notification settings - Fork 0
/
PersonGraph.cs
99 lines (83 loc) · 3.08 KB
/
PersonGraph.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System.Collections.Generic;
// Class containing people and their attributes
// This is just a data containing class for now
public class PersonNode {
public int id {get; set;}
public PersonAttributes attributes {get; set;}
public DateTime lastUpdated {get;}
private Dictionary<string, List<PersonNode>> relationships;
// Contructors for new and previously saved nodes
public PersonNode() {
this.id = 0;
this.attributes = new PersonAttributes();
this.relationships = new Dictionary<string, List<PersonNode>>();
}
public PersonNode(PersonAttributes attr) {
this.id = 0;
this.attributes = attr;
this.relationships = new Dictionary<string, List<PersonNode>>();
}
public PersonNode(int ident) {
this.id = ident;
this.attributes = new PersonAttributes();
this.relationships = new Dictionary<string, List<PersonNode>>();
}
public PersonNode(int ident, PersonAttributes attr) {
this.id = ident;
this.attributes = attr;
this.relationships = new Dictionary<string, List<PersonNode>>();
}
public PersonNode(int ident, PersonAttributes attr, Dictionary<string, List<PersonNode>> relations) {
this.id = ident;
this.attributes = attr;
this.relationships = relations;
}
}
// Manages people (nodes) and relationships between them
public class RelationshipGraph {
private Dictionary<int, PersonNode> node_map;
// Constructors for new and previously saved graphs
public RelationshipGraph() {
this.node_map = new Dictionary<int, PersonNode>();
}
public RelationshipGraph(List<PersonNode> people_list) {
this.node_map = new Dictionary<int, PersonNode>();
foreach (PersonNode person in people_list) {
this.AddCreatedPerson(person);
}
}
// Make a unique ID that doesn't already exist in the graph
private int GenerateID() {
Random rng = new Random();
int new_id;
do {
new_id = rng.Next();
} while (this.node_map.ContainsKey(new_id));
return new_id;
}
// Add a new person with a random ID
public void AddNewPerson(PersonNode person) {
person.id = this.GenerateID();
this.node_map.Add(person.id, person);
}
// Add a previously created person to the map
public void AddCreatedPerson(PersonNode person) {
this.node_map.Add(person.id, person);
}
// Remove a person from the map
public void RemovePerson(int ident) {
if (node_map.ContainsKey(ident)) {
this.node_map.Remove(ident);
}
}
// Print a summary of every person contained in the graph
public void PrintAllNodes() {
foreach (PersonNode peop in this.node_map.Values) {
Console.WriteLine($"Internal ID: {peop.id}");
Console.WriteLine($"Name: {peop.attributes.name}");
Console.WriteLine($"Age: {peop.attributes.age.GetAgeString()}");
Console.WriteLine($"Gender: {peop.attributes.gender}");
Console.WriteLine("\n");
}
}
}