There is the Magma calculator which can be used to do calculations in finite groups.

One problem is that you have to type in all of your input before executing it, but with practice you can do quite complicated calculations.

For example, you can carry out the calculation from my answer to this question (which was actually about infinite groups). Typing in the following code

```
G<x,y,z>:=Group<x,y,z|x*y^-1*x^-1=z^2*y, x*z^-2=z^2*x, x*y*x^-1*y=z^2,
y^2*x*z=z*x >;
K<a,b,c,d> := sub<G | x^2, z^2, x*z*y^-1, y^2>;
Index(G,K);
Rewrite(G,~K);
K;
Transversal(G,K);
PK, phi := ElementaryAbelianQuotient(K,2);
Order(PK);
K2 := Kernel(phi);
Index(K,K2);
T2 := Transversal(K,K2);
exists{k : k in T2 | (x*k)^2 in K2 };
exists{k : k in T2 | (y*k)^2 in K2 };
exists{k : k in T2 | (z*k)^2 in K2 };
```

results in the output:

```
4
Finitely presented group K on 4 generators
Index in group G is 4 = 2^2
Generators as words in group G
a = x^2
b = z^2
c = x * z * y^-1
d = y^2
Relations
(c^-1, a) = Id(K)
(a^-1, b) = Id(K)
(a^-1, d^-1) = Id(K)
(d^-1, b^-1) = Id(K)
(b, c) = Id(K)
d * c * b^-1 * d^-1 * c^-1 * b^-1 = Id(K)
b^-1 * a * c^-1 * a^-1 * b * c = Id(K)
{@ Id(G), x, y, z @}
Mapping from: GrpFP: G to {@ Id(G), x, y, z @}
16
16
false
false
false
```