主页 > 编程资料 > C# >
发布时间:2015-09-26 作者:网络 阅读:216次


using System;
using System.Collections;
using System.IO;

namespace SEI.DL88250.SourceCodes.CSharp
{
 public interface IStudent
 {
 // Properties
  string ID
  {
   get;
   set;
  }

  string Name
  {
   get;
   set;
  }

  string Gender
  {
   get;
   set;
  }

  string ClassNum
  {
   get;
   set;
  }

  string Specialty
  {
   get;
   set;
  }

  string BDay
  {
   get;
   set;
  }
 }

 public interface IStudentIMP
 {
 // Methods
  // Add a new student's info into ArrayList
  void AddInfo();
  // Print out all students' info to console
  void DisplayInfo();
  // Delete a student's info
  void DropInfo();
  // Save all students' info into disk
  void SaveFile();
  // Search a student's info by ID
  // If find info return the student's ID hash code,
  // otherwise return reserved ID(20051120000) hash code
  int SearchInfo(string ID);
 }


 class Student
 {
 // Fields
  private string _ID;
  private string _name;
  private string _gender;
  private string _classNum;
  private string _specialty;
  private System.DateTime _bday;
 
 // Properties
  public string ID
  {
   get
   {
    return _ID;
   }
   set
   {
    _ID = value;
   }
  }

  public string Name
  {
   get
   {
    return _name;
   }
   set
   {
    _name = value;
   }
  }

  public string Gender
  {
   get
   {
    return _gender;
   }
   set
   {
    _gender = value;
   }
  }

  public string ClassNum
  {
   get
   {
    return _classNum;
   }
   set
   {
    _classNum = value;
   }
  }

  public string Specialty
  {
   get
   {
    return _specialty;
   }
   set
   {
    _specialty = value.ToString();
   }
  }

  public string BDay
  {
   get
   {
    return _bday.ToShortDateString();
   }
   set
   {
    _bday = System.DateTime.Parse(value);
   }
  }
 
 // Constructors
  public Student(string id, string name, string gender,
          string classNum, string specialty, string bday)
  {
   _ID = id;
   _name = name;
   _gender = gender;
   _classNum = classNum;
   _specialty = specialty;
   _bday = System.DateTime.Parse(bday);
  }
 

 }

 class StudentIMP : IStudentIMP
 {
 // Fileds
  private static string[] _mainMenu; // function description
  private static string[] _addInfo; // add info prompt
  private static string[] _saveInfo; // save file prompt
  private static string[] _modifyInfo; // modify menu prompt
  private static string[] _helpInfo; // help infomation
  private Hashtable _stdInfo;  // store student info
 // Consturctors
  StudentIMP()
  {
   // initial some prompt info
   _mainMenu = new string[]{
    "1. Add",
    "2. Modify",
    "3. Drop",
    "4. Save file",
    "5. Display info",
    "6. Help",
    "7. Exit"
   };
   _helpInfo = new string[]{
    "1. ID must unique.",
    "2. Modify function can't change ID. If you want to change the ID, \n   please drop this record and new one again.",
    "3. Birthday format is keep to ISO standard."};
   _addInfo = new string[]{
    "Please type in some infomation of this student.",
    "ID: ",
    "Name: ",
    "Gender: ",
    "ClassNum: ",
    "Specialty: ",
    "Birthday(198x/xx/xx): "
   };
   _saveInfo = new string[]{
    "Please input save file name: "
   };
   _modifyInfo = new string[]{
    "Please choose the attribute you want to modify.",
    "1. Name",
    "2. Gender",
    "3. ClassNum",
    "4. Specialty",
    "5. Birthday"
   };
   // initial storage space
   this._stdInfo = new Hashtable();
  }
 // Indexers
  public Student this[string ID]
  {
   get
   {
    if (_stdInfo.Contains(ID))
    {// exists the student's info
     return (Student)_stdInfo[ID];
    }
    else
    {
     return null;
    }
   }
  }
 // Methods
  // Store student info into disk file
  public void SaveFile()
  {
   string fileName;

   Console.WriteLine(_saveInfo[0]);
   fileName = Console.ReadLine();
   StreamWriter fwriter = File.CreateText(fileName);
   IEnumerator e = _stdInfo.GetEnumerator();
   Student std;
   fwriter.WriteLine("ID           Name             Gender  Class   Specialty   Birthday");
   while (e.MoveNext())
   {
    DictionaryEntry de = (DictionaryEntry)(e.Current);
    std = (Student)de.Value;
    fwriter.WriteLine("{0, -13}{1, -17}{2, -10}{3, -6}{4, -12}{5, -10}",
        std.ID, std.Name,
        std.Gender, std.ClassNum,
        std.Specialty, std.BDay);
   }
   fwriter.WriteLine("\t\t\t\t\t\tStudents total: {0}", _stdInfo.Count);
   fwriter.Close();
  }

  // Add a new student's info
  public void AddInfo()
  {
   string ID, name, gender, classNum, specialty, bday;
  
   Console.WriteLine(_addInfo[0]);
   Console.WriteLine(_addInfo[1]);
   ID = Console.ReadLine();
   Console.WriteLine(_addInfo[2]);
   name = Console.ReadLine();
   Console.WriteLine(_addInfo[3]);
   gender = Console.ReadLine();
   Console.WriteLine(_addInfo[4]);
   classNum = Console.ReadLine();
   Console.WriteLine(_addInfo[5]);
   specialty = Console.ReadLine();
   Console.WriteLine(_addInfo[6]);
   bday = Console.ReadLine();
   Student tmpStd = new Student(ID, name, gender, classNum, specialty, bday);

   _stdInfo.Add(tmpStd.ID, tmpStd); // store

  }

  // Search a student's info. Time complexity: O(n)
  // If find info return ID hash code,
  // otherwise return reserved hash code
  public int SearchInfo(string ID)
  {
   if ((null != _stdInfo[ID])
       && (ID == ((Student)_stdInfo[ID]).ID))
   {// find it
    return _stdInfo[ID].GetHashCode();
   }
   else
   {// no find
    // return reserved ID hash code
    return "20051120000".GetHashCode();
   }
  
  }

  // Display all students' info
  public void DisplayInfo()
  {
   if (0 == _stdInfo.Count)
   {
    Console.WriteLine("No student info!");
    return;
   }

   IEnumerator e = _stdInfo.GetEnumerator();
   Student std;
   Console.WriteLine("ID           Name             Gender  Class   Specialty   Birthday");
   while (e.MoveNext())
   {
    DictionaryEntry de = (DictionaryEntry)(e.Current);
    std = (Student)de.Value;
    Console.WriteLine( "{0, -13}{1, -17}{2, -10}{3, -6}{4, -12}{5, -10}",
        std.ID, std.Name,
        std.Gender, std.ClassNum,
        std.Specialty, std.BDay);
   }
   Console.WriteLine("\t\t\t\t\t\tStudents total: {0}", _stdInfo.Count);
  }

  // Delete a student's info
  public void DropInfo()
  {
   Console.WriteLine("Please input the student's ID: ");
   string ID = Console.ReadLine();
   if ("20051120000".GetHashCode() == SearchInfo(ID))
   {// no find
    Console.WriteLine("No find!");
    return;
   }
   else
   {// find a student
    Console.WriteLine("Confirm delete it? (Y/n)");
    string confirm = Console.ReadLine();
    if ("y" == confirm.ToLower())
    {// delete it
     _stdInfo.Remove(_stdInfo[ID]);
    }
   }
   return;
  }
 
  // Modify a student's info
  public void ModifyInfo()
  {
   Console.WriteLine("Please input the student's ID: ");
   string ID = Console.ReadLine();
   if ("20051120000".GetHashCode() == SearchInfo(ID))
   {// no find
    Console.WriteLine("No find!");
    return;
   }
   else
   {// find a student
    Student std = (Student)_stdInfo[ID];
    Console.WriteLine("ID           Name             Gender  Class   Specialty   Birthday");
    Console.WriteLine("{0, -13}{1, -17}{2, -10}{3, -6}{4, -12}{5, -10}",
        std.ID, std.Name, std.Gender,
        std.ClassNum, std.Specialty, std.BDay);
    Console.WriteLine("Do you want to modify the info? (Y/n)");
    string choice = Console.ReadLine();
    if (choice.ToLower() == "n")
    {// do not modify
     return;
    }
   
    // display student's attributes
    foreach (string att in _modifyInfo)
    {
     Console.WriteLine(att);
    }
   
    // select a attribute to modify
    string attChoice = Console.ReadLine();
    switch (attChoice)
    {
     case "1":
     {
      Console.WriteLine(_addInfo[2]);
      std.Name = Console.ReadLine();
      break;
     }
     case "2":
     {
      Console.WriteLine(_addInfo[3]);
      std.Gender = Console.ReadLine();
      break;
     }
     case "3":
     {
      Console.WriteLine(_addInfo[4]);
      std.ClassNum = Console.ReadLine();
      break;
     }
     case "4":
     {
      Console.WriteLine(_addInfo[5]);
      std.Specialty = Console.ReadLine();
      break;
     }
     case "5":
     {
      Console.WriteLine(_addInfo[6]);
      std.BDay = Console.ReadLine();
      break;
     }
     default:
     {
      Console.WriteLine("Functioin undefine!");
      break;
     }
    }
   }
  }
 
  // Main menu, display program functions
  private static void MainMenu()
  {
   foreach (string func in _mainMenu)
   {
    Console.WriteLine(func);
   }
  }

  [STAThread] // single-thread model
  // Program entry point
  static void Main()
  {
   Console.ForegroundColor = ConsoleColor.DarkGreen;
   Console.Title = "Student IMP -Lab3   by 88250";
 
   StudentIMP stdIMP = new StudentIMP();
   string funcSelect;
   do
   {
    Console.Clear();
    MainMenu();
    funcSelect = Console.ReadLine();
    switch (funcSelect)
    {
     case "1":
     {
      stdIMP.AddInfo();
      break;
     }
     case "2":
     {
      stdIMP.ModifyInfo();
      break;
     }
     case "3":
     {
      stdIMP.DropInfo();
      break;
     }
     case "4":
     {
      stdIMP.SaveFile();
      break;
     }
     case "5":
     {
      stdIMP.DisplayInfo();
      break;
     }
     case "6":
     {
      foreach (string hlpInfo in _helpInfo)
      {
       Console.WriteLine(hlpInfo);
      }
      break;
     }
     case "7":
     {
      return;
     }
     default:
     {
      Console.WriteLine("Function undefine!");
      break;
     }
    }
    Console.WriteLine("Press any key to continue....");
    Console.ReadLine();
   }
   while (true);
  }
 }
}
 


 

关键字词: