2017-01-22 103 views
0

我已經編寫了一個相當簡單的程序,該程序顯示選項菜單並根據用戶輸入執行計算。我想使程序運行,以便詢問用戶是否希望繼續返回菜單或退出程序。我在想它可能需要某種循環,但我不確定如何實現它。如何讓用戶選擇繼續執行程序還是退出程序(C#)

這裏是我的代碼

using System; 

namespace WarmUpCalculations 

{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      Console.Clear(); 
      Console.WriteLine("Welcome to the Chemistry Formula Calculator!\n\n\n"); 

      Console.WriteLine("Press 1 for the Density Calculator"); 
      Console.WriteLine("Press 2 for the Moles Calculator"); 
      Console.WriteLine("Press 3 for the Energy of a Wave Calculator"); 
      Console.WriteLine("Press 4 for the Ideal Gas Law Calculator\n\n"); 
      Console.WriteLine("Please enter a Number from the Options above"); 
      string choice = Console.ReadLine(); 

      switch (choice) 
      { 
       case "1": 
        DensityCalculator(); 
        break; 
       case "2": 
        MolesCalculator(); 
        break; 
       case "3": 
        EnergyOfWaveCalculator(); 
        break; 
       case "4": 
        IdealGasLawCalculator(); 
        break; 
      } 
     } 

     static void DensityCalculator() 
     { 
      Console.Clear(); 
      Console.WriteLine("Density Calaculator\n\n"); 
      Console.WriteLine("Will this be for Grams or Kilograms?"); 
      Console.WriteLine("Type 'g' for Grams or 'kg' for Kilograms"); 
      string unitMass = Console.ReadLine(); 

      Console.WriteLine("Please Enter Your Mass"); 
      Decimal Mass = Convert.ToDecimal(Console.ReadLine()); 
      Console.WriteLine("Enter units for Volume"); 
      string unitVolume = Console.ReadLine(); 
      Console.WriteLine("Please Enter Your Volume"); 
      Decimal Volume = Convert.ToDecimal(Console.ReadLine()); 
      Decimal Density = Mass/Volume; 
      Math.Round(Density, 4); 
      Console.Clear(); 
      Console.WriteLine("Moles Calaculator\n\n"); 
      Console.Write("Your Density is "); 
      Console.Write(Density); 
      Console.Write(unitMass); 
      Console.Write("/"); 
      Console.WriteLine(unitVolume); 
      Console.Write(" \n\n"); 

     } 

     static void MolesCalculator() 
     { 
      Console.Clear(); 
      Console.WriteLine("Moles Calaculator\n\n"); 
      Console.WriteLine("Please enter mass of sample"); 
      Decimal Mass = Convert.ToDecimal(Console.ReadLine()); 
      Console.WriteLine("Please Enter Your molar mass"); 
      Decimal MolarMass = Convert.ToDecimal(Console.ReadLine()); 
      Decimal Moles = Mass/MolarMass; 
      Console.Clear(); 
      Console.WriteLine("Moles Calaculator\n\n"); 
      Console.Write("Your sample has "); 
      Console.Write(Moles); 
      Console.Write(" moles\n\n"); 

     } 

     static void EnergyOfWaveCalculator() 
     { 
      Console.Clear(); 
      Console.WriteLine("Energy of Wave Calaculator\n\n"); 
      Console.WriteLine("Please enter the frequency"); 
      double Frequency = Convert.ToDouble(Console.ReadLine()); 
      double PlancksConstant = 6.626e-34; 
      double Energy = PlancksConstant * Frequency; 
      Console.Clear(); 
      Console.WriteLine("Energy of Wave Calaculator\n\n"); 
      Console.Write("The answer is "); 
      Console.Write(Energy); 
      Console.Write(" \n\n"); 

     } 

     static void IdealGasLawCalculator() 
     { 
      Console.Clear(); 
      Console.WriteLine("Ideal Gas Law Calaculator\n\n"); 
      Console.WriteLine("Would you like to solve the following equation for Pressure or Volume? Press v for Volume or p for Pressure"); 
      string Frequency = Console.ReadLine(); 

      if (Frequency == "v"){ 
       Console.Clear(); 
       Console.WriteLine("Ideal Gas Law Calaculator\n\n"); 
       Console.WriteLine("Please enter the pressure"); 
       decimal Pressure = Convert.ToDecimal(Console.ReadLine()); 
       Console.WriteLine("Please enter the the number of moles"); 
       decimal NumberOfMoles = Convert.ToDecimal(Console.ReadLine()); 
       Console.WriteLine("Please enter the the temperature in degrees Kelvin"); 
       decimal TemperatureKelvin = Convert.ToDecimal(Console.ReadLine()); 
       decimal GasLawConstant = Convert.ToDecimal(8.314); 
       decimal IdealGasLaw = NumberOfMoles * GasLawConstant * TemperatureKelvin/Pressure; 
       Console.Clear(); 
       Console.WriteLine("Energy of Wave Calaculator\n\n"); 
       Console.Write("Your answer is "); 
       Console.Write(IdealGasLaw); 
       Console.Write(" \n\n"); 
      } 
      else 
      { 
       Console.Clear(); 
       Console.WriteLine("Ideal Gas Law Calaculator\n\n"); 
       Console.WriteLine("Please enter the volume"); 
       decimal Volume = Convert.ToDecimal(Console.ReadLine()); 
       Console.WriteLine("Please enter the the number of moles"); 
       decimal NumberOfMoles = Convert.ToDecimal(Console.ReadLine()); 
       Console.WriteLine("Please enter the the temperature in degrees Kelvin"); 
       decimal TemperatureKelvin = Convert.ToDecimal(Console.ReadLine()); 
       decimal GasLawConstant = Convert.ToDecimal(8.314); 
       decimal IdealGasLaw = NumberOfMoles * GasLawConstant * TemperatureKelvin/Volume; 
       Console.Clear(); 
       Console.WriteLine("Energy of Wave Calaculator\n\n"); 
       Console.Write("Your answer is "); 
       Console.Write(IdealGasLaw); 
       Console.Write(" \n\n"); 
      } 

     } 
    } 
} 
+0

你在哪裏希望用戶可以選擇? –

+0

這是一個很好的問題Mikael,我不確定在哪裏。我從他們最初的選擇中完成了他們的計算,我想要程序詢問他們是否想回到菜單 – Justin

+0

好吧,我認爲最好的做法是爲計算菜單創建一個新方法,然後直接從主要方法,並在計算結束時重新調用該方法作爲選擇。檢查答案 –

回答

2

這很簡單。你有正確的想法。

bool shouldContinue = true; 
while(shouldContinue){ 
     Console.WriteLine("Press 1 for the Density Calculator"); 
     Console.WriteLine("Press 2 for the Moles Calculator"); 
     Console.WriteLine("Press 3 for the Energy of a Wave Calculator"); 
     Console.WriteLine("Press 4 for the Ideal Gas Law Calculator\n\n"); 
     Console.WriteLine("Press 5 to exit"); 
     Console.WriteLine("Please enter a Number from the Options above"); 
     string choice = Console.ReadLine(); 

     switch (choice) 
     { 
      case "1": 
       DensityCalculator(); 
       break; 
      case "2": 
       MolesCalculator(); 
       break; 
      case "3": 
       EnergyOfWaveCalculator(); 
       break; 
      case "4": 
       IdealGasLawCalculator(); 
       break; 
      case "5": 
      shouldContinue = false; 
       break; 
     } 

} 
+1

非常感謝! – Justin

0

您可以定義一個新的方法Menu

把菜單代碼在那裏,然後就呼籲它當你需要它。在Main()結束時,您可以使用一個簡單的案例

Console.WriteLine("Type 'exit' to quit"); 
if(Console.ReadLine() == "exit") 
{ 

}else 
{ 
    Menu(); 
} 
2

您可以使用相同的邏輯運算的選擇,把所有的代碼中循環。

更改你的代碼Main

char action = 'Y';  //create varible for user choice (continue or not) 
while (action == 'Y') // add loop 
{ 
    Console.Clear(); 
    Console.WriteLine("Welcome to the Chemistry Formula Calculator!\n\n\n"); 

    Console.WriteLine("Press 1 for the Density Calculator"); 
    Console.WriteLine("Press 2 for the Moles Calculator"); 
    Console.WriteLine("Press 3 for the Energy of a Wave Calculator"); 
    Console.WriteLine("Press 4 for the Ideal Gas Law Calculator\n\n"); 
    Console.WriteLine("Please enter a Number from the Options above"); 
    string choice = Console.ReadLine(); 

    switch (choice) 
    { 
     case "1": 
      DensityCalculator(); 
      break; 
     case "2": 
      MolesCalculator(); 
      break; 
     case "3": 
      EnergyOfWaveCalculator(); 
      break; 
     case "4": 
      IdealGasLawCalculator(); 
      break; 
    } 

    //add these lines 
    Console.WriteLine("Do you want to continue!\n\n\n");   
    Console.WriteLine("Press Y to continue"); 
    Console.WriteLine("Press N to finish");  
    action = Console.ReadKey().KeyChar; 
} 

或者更好的選擇是:

把所有代碼Main一些方法內(即Start()),然後在Main

char action = 'Y'; 
while (action == 'Y') 
{ 
    Start(); 

    Console.WriteLine("Do you want to continue!\n\n\n");   
    Console.WriteLine("Press Y to continue"); 
    Console.WriteLine("Press N to finish");  
    action = Console.ReadKey().KeyChar; 
} 
+1

非常感謝! – Justin

0

像這樣改變你的代碼..主要方法中的代碼太多了:

static void Main(string[] args) 
{ 
    ChooseCalculationMenu(); 
} 

public void ChooseCalculationMenu() 
{ 
    // Put the code from Main here instead 
} 

,並在每個計算方法的末尾:

​​