2015-10-10 1 views
1

Мне нужна помощь в оптимизации кода, написанного на C#. Сейчас это очень небрежно. Мне нужно было написать код, который отслеживает сумму денег в больнице в день в зависимости от количества пациентов. Вот некоторые условия и детали:Оптимизация 150 строк кодов для чего-то простого

  • код должен отображать стоимость для пациента и количество денег, сделанное в конце дня

enter image description here

  • Когда радио изображение и консультация проводится за один раз одним и тем же пациентом, есть снижение цены на 25% от цены радиоизображения.
  • Когда пациент проводит консультацию, проверку крови и инъекцию. Этот человек получает 10 $ ПОСЛЕ уплаты налога.
  • Инъекции могут быть либо 30 мл, либо 50 мл, либо 60 мл. Цены пропорциональны количеству вводимого продукта. (Например: кто-то в возрасте 20, который принимает 50мл выстрел должен заплатить 25 $)
  • Налоги составляют 15%

========

Вот код, который я написал для проблема.

 int client; 
     int clientfinal = 0; 
     double injprix = 0; 
     double consprix = 0; 
     double imgradprix = 0; 
     double analyzeprix = 0; 
     double prixtot = 0; 
     double prixclient = 0; 
     double prixfinal = 0; 

     int injtaille = 0; 
     string cons, inj, imgrad, analyze; 
     Console.WriteLine("Combien a t-il de client aujourd'hui?"); 
     client = (Convert.ToInt32(Console.ReadLine())); 

     if (client > 0) 

       do //un client 
       { 
        Console.WriteLine("Quel est l'age du patient?"); 
        client = Convert.ToInt32(Console.ReadLine()); 
        if (client < 12) 
        { 
         client = 1; 
        } 
        if (client >= 12 || client <= 18) 
        { 
         client = 2; 
        } 
        if (client >= 19 || client <= 65) 
        { 
         client = 3; 
        } 
        if (client > 65) 
        { 
         client = 4; 
        } 

        Console.WriteLine("La personne a t-elle choisit une consultation?"); 
        cons = Convert.ToString(Console.ReadLine()).ToLower(); 
        Console.WriteLine("La personne a t-elle choisit une image radio?"); 
        imgrad = Convert.ToString(Console.ReadLine()).ToLower(); 
        Console.WriteLine("La personne a t-elle choisit une analyze de sang?"); 
        analyze = Convert.ToString(Console.ReadLine()).ToLower(); 
        Console.WriteLine("La personne a t-elle choisit une injection?"); 
        inj = Convert.ToString(Console.ReadLine()).ToLower(); 
        if (inj == "oui") 
        { 
         Console.WriteLine("Quel est la taille de l'injection? (30 - 50 - 60) "); 
         injtaille = Convert.ToInt32(Console.ReadLine()); 
        } 
        switch (client) 
        { 
         case 1: 
          consprix = 25; 
          imgradprix = 55; 
          analyzeprix = 28; 
          injprix = 0; 
          break; 
         case 2: 
          consprix = 32; 
          imgradprix = 65; 
          analyzeprix = 32; 
          switch (injtaille) 
          { 
           case 30: 
            injprix = 13; 
            break; 
           case 50: 
            injprix = (650/30); 
            break; 
           case 60: 
            injprix = (780/30); 
            break; 
           default: 
            Console.WriteLine("Taille d'injection inconnue."); 
            break; 
          } 
          break; 

         case 3: 
          consprix = 40; 
          imgradprix = 70; 
          analyzeprix = 40; 
          switch (injtaille) 
          { 
           case 30: 
            injprix = 13; 
            break; 
           case 50: 
            injprix = (750/30); 
            break; 
           case 60: 
            injprix = (900/30); 
            break; 
           default: 
            Console.WriteLine("Taille d'injection inconnue."); 
            break; 
          } 
          break; 

         case 4: 
          consprix = 30; 
          imgradprix = 60; 
          analyzeprix = 35; 
          switch (injtaille) 
          { 
           case 30: 
            injprix = 13; 
            break; 
           case 50: 
            injprix = (600/30); 
            break; 
           case 60: 
            injprix = (720/30); 
            break; 
           default: 
            Console.WriteLine("Taille d'injection inconnue."); 
            break; 
          } 
          break; 
        } 
       //Fin Switch 


        if (imgrad == "non") 
       { 
        imgradprix = 0; 
       } 
        if (cons == "non") 
       { 
        consprix = 0; 
       } 
        if (analyze == "non") 
       { 
        analyzeprix = 0; 
       } 
        if (inj == "non") 
       { 
        injprix = 0; 
       } 
        if (imgrad == "oui" || cons == "oui") 
        { 
         imgradprix = imgradprix * 0.75; 
        } 

        prixclient = consprix + imgradprix + analyzeprix + injprix; 
        prixclient = prixclient * 1.15; 
        if (cons == "oui" || analyze == "oui" || inj == "oui") 
        { 
         prixclient = prixclient - 10; 
        } 
        prixtot += prixclient; 
        clientfinal++; 
        prixfinal = prixtot; 
       Console.WriteLine("Prix du patient " + prixclient); 
       } while (clientfinal != client); 
     Console.WriteLine("Le prix final est" + prixfinal); 
    } 
} 

}

+0

Пожалуйста, простите мое отсутствие в программировании ведома и неаккуратно английском. –

+9

этот вопрос, вероятно, лучше подходит для http://codereview.stackexchange.com/ – Save

+0

Спасибо за подсказку, я тоже там разместил. –

ответ

0

Глядя на ваш код единственная проблема, я вижу, у вас есть утечка памяти, потому что вы выделяющий обработчик событий и никогда не де-распределения его.

prixtot += prixclient; 

Я предложил бы использовать Visual Studio 2015 имеет инструмент профилирования из коробки, которая даст вам взглянуть на проблемы с вашим кодом. Вы можете видеть, сколько времени исполняет функция для выполнения и т. Д.

Видеоролики Andrew Hall на основе MSDN и Microsoft - отличное место для начала. Вот несколько ссылок видео смотреть

https://channel9.msdn.com/Events/Build/2015/3-677 https://channel9.msdn.com/Events/Build/2015/3-731

Смежные вопросы