Solution:

public class Joueur
{ private string nomc;
public string NomC { get { return nomc; }set { nomc = value; } }
private DateTime dn;
public DateTime DN { get { return dn; }set { dn = value; } }
 private string position;
public string Position { get { return position; }set { position = value; } }
 private bool reserve;
 public bool Reserve { get { return reserve; }set { reserve = value; } }
public Joueur() { }
public Joueur(string n,DateTime d,string p,bool r)
{ nomc = n;dn = d;position = p;reserve = r; }
public virtual double CalculerPrime(int joue,int gagne)
{ double prime; if (reserve == false)
 { prime = 10000 * (gagne / joue); }
else { prime = 10000 * (gagne / joue) * (50 / 100); }
return prime; } }
public class Entraineur
{ private string nc;
public string Nc { get { return nc; } set { nc = value; } }
private DateTime dated;
public DateTime Dated { get { return dated; } set { dated = value; } }
private int nombred; public int Nombred { get {return nombred; } set{ nombred = value; } }
private double primem; public double Primem { get { return primem; } set{ primem = value; } }
public Entraineur(int nd,DateTime d,string Nc,double p)
{ dated = d;nombred = nd;nc = Nc;
if ((primem<20000)||(primem>30000)) { Console.WriteLine("attention le prime doit etre entre 2000 et 30000"); }
 else { primem = p; } }
public DateTime EstimerFinContrat()
 { return DateTime.Now.AddYears(this.nombred); } }
public class Capitaine:Joueur
{ private int nombrem;
private int Nombrem { get { return nombrem; }set { nombrem = value; } }
 public Capitaine(int no, string n, DateTime d, string p, bool r):base(n,d,p,r)
{ try { if(Nombrem<=100)
nombrem = no; }
 catch(Exception ee) { Console.WriteLine(ee.StackTrace); } }
 public override double CalculerPrime(int joue, int gagne)
{ double Prime;
Prime = base.CalculerPrime(joue, gagne) + 50 * nombrem; return Prime;
} }
public class Equipe
{ private string nom;
public string Nom { get { return nom; } set{ nom = value; } }
 private string ville;
public string Ville { get { return ville; } set{ ville = value; } }
 private int nj;
public int Nj { get { return nj; } set { nj = value; } }
private int ng;
public int Ng { get { return ng; } set { ng = value; } }
private Entraineur en;
private Entraineur En { get { return en; }
set { en = value; } }
private List lj; public List Lj{get{return lj;} set{lj=value;}}
public Equipe() { Lj= new List (); }
 public Equipe(int Nj,int Ng,string Ville,string Nom,Entraineur En )
 { nj = Nj;ng = Ng;ville = Ville;nom = Nom;en = En; Lj = new List (25); } }
public partial class Form1 : Form
{ public Form1()
 { InitializeComponent(); }
 Equipe eq1 = new Equipe();
private void button1_Click_1(object sender, EventArgs e)
{ try { if (eq1.Lj.Count <= 25)
{
if (checkBox1.Checked == true || checkBox1.Checked == false)
{ eq1.Lj.Add(new Joueur(textBox1.Text, dateTimePicker1.Value, textBox2.Text, checkBox1.Checked)); textBox1.Text = textBox2.Text = ""; checkBox1.Checked = false; dateTimePicker1.Value = DateTime.Now; return;
} } }
catch { MessageBox.Show("Attention le nombre dépasse 25"); } }
 private void button2_Click_1(object sender, EventArgs e) {
 SaveFileDialog sd = new SaveFileDialog();
 if (textBox1.Text != "" && textBox2.Text != "")
{
if (checkBox1.Checked == true || checkBox1.Checked == false)
 {
 if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{ StreamWriter sw = new StreamWriter(saveFileDialog1.FileName);
sw.WriteLine(textBox1.Text + "\t" + textBox2.Text + "\t" + dateTimePicker1.Value.ToShortDateString() + "\t" + checkBox1.Checked);
 sw.Close();
saveFileDialog1.ShowDialog(); } } } } }