2016-11-30 5 views
0

Я работаю над этим уже две недели, и я знаю, что мне не хватает чего-то маленького. Мне нужно изменить старый проект на новый. Первый проект состоял в том, что кто-то вошел в их тип работы (например: w для рабочего, s для супервизора, m для менеджера и т. Д.), Их возраст и опыт. Программа сообщила бы им, смогут ли они уйти на пенсию. Если бы они не смогли уйти в отставку, они сказали им, что им нужно исправить, чтобы уйти на пенсию.fileIn, fileOut ошибки - я не могу понять это

Новая программа должна взять файлIn и создать файл, отображающий идентификатор, возраст, опыт и право на работу. После того, как все отображается, они хотят среднего возраста и опыта.

Мой учитель - парикмахер, имеющий модульные заголовки и Main on top. Я ввел код ниже в свою студию 2015 года, и я получаю три сообщения об ошибках. ФайлIn также находится ниже. Util - это ссылка от моего учителя, и я не знаю, как его скопировать.

Может ли кто-нибудь дать мне совет? Я совершенно зеленый и новичок в кодировании, поэтому я не во всех терминах, поэтому заранее извинюсь.

using System; 
using System.IO; 
using System.Text.RegularExpressions; 
using Util; 

namespace Program_9 
{ 
class Program 
{ 
    const string INPUT_FILE_NAME = "C:\\Users\\Programing 1\\Soluation 1\\Program 9\\Retirement Numbers\\Input"; 
    const string OUTPUT_FILE_NAME = "C:\\Users\\Programing 1\\Soluation 1\\Program 9\\Retirement Numbers\\Output"; 

    static string lineIn; 
    static StreamReader fileIn; 
    static StreamWriter fileOut; 
    static char WType, WElig; 
    static uint id; 
    static double WAge, WExp; 
    static double numOfEmployees; 
    static double AvgAge, AvgExp, AgeAvgTotal = 0.0, WAge1Total = 0.0, WAge2Total = 0.0, WAge3Total = 0.0, WAge4Total = 0.0, WAge5Total = 0.0; 
    static double WAge6Total = 0.0, WAge7Total = 0.0, WAge8Total = 0.0, WAge9Total = 0.0, WAge10Total = 0.0, WAge11Total = 0.0, WAge12Total = 0.0; 
    static double ExpAvgTotal = 0.0, WExp1Total = 0.0, WExp2Total = 0.0, WExp3Total = 0.0, WExp4Total = 0.0, WExp5Total = 0.0; 
    static double WExp6Total = 0.0, WExp7Total = 0.0, WExp8Total = 0.0, WExp9Total = 0.0, WExp10Total = 0.0, WExp11Total = 0.0, WExp12Total = 0.0; 

    static void Main() 
    { 
     OpenFiles(); 
     PrintReportHeadings(); 
     while ((lineIn = fileIn.ReadLine()) != null) 
     { 
      ParseLineIn(); 
      PrintDetailLine(); 
      UpdateTotals(); 
     } 
     CalcAvg(); 
     PrintAvg(); 
     CloseFiles(); 
     DspData(); 
    } 

    static void OpenFiles() 
    { 
     if (File.Exists(INPUT_FILE_NAME)) 
     { 
      fileIn = File.OpenText(INPUT_FILE_NAME); 
      Console.WriteLine("{0} was opened", INPUT_FILE_NAME); 
     } 
     else 
     { 
      Console.WriteLine("Error: {0} does not exit\n", INPUT_FILE_NAME); 
      ConIO.Exit(); 
     } 
     if (File.Exists(OUTPUT_FILE_NAME)) 
     { 
      fileOut = File.CreateText(OUTPUT_FILE_NAME); 
      Console.WriteLine("{0} was created\n", OUTPUT_FILE_NAME); 
     } 
     else 
     { 
      Console.WriteLine("Error: {0} could not be created\n", OUTPUT_FILE_NAME); 
      ConIO.Exit(); 
     } 
    } 

    static void PrintReportHeadings() 
    { 
     fileOut.WriteLine("Employee Age Experience Eligibility"); 
     fileOut.WriteLine("{0,9}, {1,7}, {2,7}, {3}", id, WAge, WExp, WElig); 
     fileOut.WriteLine(); 
     fileOut.WriteLine("Average {0,7:}, {1,7}", AvgAge, AvgExp); 
    } 
    static void ParseLineIn() 
    { 
     string[] words = new string[4]; 

     lineIn = lineIn.Trim(); 
     while (Regex.IsMatch(lineIn, "[ ]{2}")) 
      lineIn = lineIn.Replace(" ", " "); 
     words = lineIn.Split(' '); 
     id = UInt32.Parse(words[0]); 
     WType = char.Parse(words[1]); 
     WAge = int.Parse(words[2]); 
     WExp = int.Parse(words[3]); 
    } 

    static void PrintDetailLine() 
    { 
     fileOut.WriteLine("{0} {1,7:d} {2,7:d} {3,7:d} {4,7:d} {5,3}", 
      id, WAge, WExp, WElig); 
    } 

    static void UpdateTotals(int WAge1, double WAge2, double WAge3, double WAge4, double WAge5, double WAge6, double WAge7, double WAge8, double WAge9, double WAge10, double WAge11, double WAge12, double WExp1, double WExp2, double WExp3, double WExp4, double WExp5, double WExp6, double WExp7, double WExp8, double WExp9, double WExp10, double WExp11, double WExp12) 
    { 
     numOfEmployees++; 
     WAge1Total += WAge1; 
     WAge2Total += WAge2; 
     WAge3Total += WAge3; 
     WAge4Total += WAge4; 
     WAge5Total += WAge5; 
     WAge6Total += WAge6; 
     WAge7Total += WAge7; 
     WAge8Total += WAge8; 
     WAge9Total += WAge9; 
     WAge10Total += WAge10; 
     WAge11Total += WAge11; 
     WAge12Total += WAge12; 
     AgeAvgTotal += AvgAge; 
     WExp1Total += WExp1; 
     WExp2Total += WExp2; 
     WExp3Total += WExp3; 
     WExp4Total += WExp4; 
     WExp5Total += WExp5; 
     WExp6Total += WExp6; 
     WExp7Total += WExp7; 
     WExp8Total += WExp8; 
     WExp9Total += WExp9; 
     WExp10Total += WExp10; 
     WExp11Total += WExp11; 
     WExp12Total += WExp12; 
     ExpAvgTotal += AvgExp; 
    } 

    static void CalcAvg(int WAge1, double WAge2, double WAge3, double WAge4, double WAge5, double WAge6, double WAge7, double WAge8, double WAge9, double WAge10, double WAge11, double WAge12) 
    { 
     AgeAvgTotal = (WAge1 + WAge2 + WAge3 + WAge4 + WAge5 + WAge6 + WAge7 + WAge8 + WAge9 + WAge10 + WAge11 + WAge12); 
     AvgAge = AgeAvgTotal/numOfEmployees; 
     AvgExp = ExpAvgTotal/numOfEmployees; 
    } 

    static void PrintAvg() 
    { 
     fileOut.WriteLine(" "); 
     fileOut.WriteLine("Avg {0,7:f} {1,7:f}", AvgAge, AvgExp); 
    } 

    static void CloseFiles() 
    { 
     fileIn.Close(); fileOut.Close(); 
    } 

    static void DspData() 
    { 
     switch (WType=WElig) 
     { 
      case 'W': 
      case 'w': 
       if (WAge >= 63 && WExp >= 25) 
        Console.WriteLine("{0} {1} {2} Employee can retire.", id, WAge, WExp); 
       else if (WAge >= 63 && WExp < 25) 
        Console.WriteLine("{0} {1} {2} Employee cannot retire due to lack of experience.", id, WAge, WExp); 
       else if (WAge < 63 && WExp >= 25) 
        Console.WriteLine("{0} {1} {2} Employee cannot retire due to being underage.", id, WAge, WExp); 
       else if (WAge < 63 && WExp < 25) 
        Console.WriteLine("{0} {1} {2} Employee cannot retire due to being underage and lack of experience.", id, WAge, WExp); 
       break; 
      case 'S': 
      case 's': 
       if (WAge >= 60 && WExp >= 24) 
        Console.WriteLine("{0} {1} {2} Employee can retire.", id, WAge, WExp); 
       else if (WAge >= 60 && WExp < 24) 
        Console.WriteLine("{0} {1} {2} Employee cannot retire due to lack of experience.", id, WAge, WExp); 
       else if (WAge < 60 && WExp >= 24) 
        Console.WriteLine("{0} {1} {2} Employee cannot retire due to being underage.", id, WAge, WExp); 
       else if (WAge < 60 && WExp < 24) 
        Console.WriteLine("{0} {1} {2} Employee cannot retire due to being underage and lack of experience.", id, WAge, WExp); 
       break; 
      case 'M': 
      case 'm': 
       if (WAge >= 55 && WExp >= 20) 
        Console.WriteLine("{0} {1} {2} Employee can retire.", id, WAge, WExp); 
       else if (WAge >= 55 && WExp < 20) 
        Console.WriteLine("{0} {1} {2} Employee cannot retire due to lack of experience.", id, WAge, WExp); 
       else if (WAge < 55 && WExp >= 20) 
        Console.WriteLine("{0} {1} {2} Employee cannot retire due to being underage.", id, WAge, WExp); 
       else if (WAge < 55 && WExp < 20) 
        Console.WriteLine("{0} {1} {2} Employee cannot retire due to being underage and lack of experience.", id, WAge, WExp); 
       break; 
     } 
    } 
} 
} 

Вот fileIn:

1235 W 45 20 
2536 W 55 21 
5894 W 60 30 
4597 W 75 35 
2597 S 35 10 
5689 S 40 20 
5489 W 55 39 
5872 M 60 40 
5569 M 55 25 
5566 W 80 20 
8865 M 59 35 
5598 S 65 35 

Вот ошибки:

Severity Code Description Project File Line Suppression State 
Error CS7036 There is no argument given that corresponds to the required formal parameter 'WAge1' of 'Program.UpdateTotals(int, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)' Program9.1 C:\Users\Programing 1\Soluation 1\Program 9\Program9.1\Program9.1\Program.cs 37 Active 
Severity Code Description Project File Line Suppression State 
Error CS7036 There is no argument given that corresponds to the required formal parameter 'WAge1' of 'Program.CalcAvg(int, double, double, double, double, double, double, double, double, double, double, double)' Program9.1 C:\Users\Programing 1\Soluation 1\Program 9\Program9.1\Program9.1\Program.cs 39 Active 
Severity Code Description Project File Line Suppression State 
Warning CS0649 Field 'Program.WElig' is never assigned to, and will always have its default value Program9.1 C:\Users\Programing 1\Soluation 1\Program 9\Program9.1\Program9.1\Program.cs 20 Active 
+1

'UpdateTotals' определяются как:' UpdateTotals (Int WAge1, двойная WAge2, двойная WAge3, двойная WAge4, двойная WAge5, двойная WAge6, двойная WAge7, двойная WAge8, двойная WAge9, двойная WAge10, двойная WAge11, двойной WAge12, двойной WEXp1, двойной WEXp2, двойной WExp3, двойной WEXp4, двойной WEXp5, двойной WEXp6, двойной WEXp7, двойной WEXp8, двойной WEXp9, двойной WExp10, двойной WExp11, двойной WExp12) '. Вы называете это просто как «UpdateTotals();« ... вам нужно предоставить параметры вызова функции. это всего лишь одна из ошибок, их больше. Компилятор предоставляет вам информацию, необходимую для исправления. – Kritner

+0

Первая ошибка говорит вам, что 'UpdateTotals()' ожидает, что в нее будут переданы аргументы. Таким образом, вам придется изменить строку 'UpdateTotals();' так, чтобы ** каждое ** одно значение, которое она ожидает, передается в: 'UpdateTotals (x, y, z и т. Д.);' Где x, y, z, и т. д. - это правильные имена переменных, которые вы указали. –

+1

24 параметра ... дорогой лорд ... – Abion47

ответ

2
  1. Поступил вызов UpdateTotals(); в основной метод, но это UpdateTotals не является без параметров (далеко от этого фактически требуется куча необходимых параметров.)
  2. То же самое верно для CalcAvg
  3. Это всего лишь предупреждение, код будет компилироваться без фиксации.

Что касается вашего дизайна: я бы выбрал вариант, чтобы ваш метод взял объект и задал этот объект свойства, с которыми вы хотите что-то сделать. Имея это много параметров по одному методу, вы просто задаете проблемы в будущем. Если вы обнаружите, что все они одного типа, а положение параметров не имеет значения, вы должны перейти в массив этого типа.

void UpdateTotals(int WAge1, double WAge2, double WAge3, double WAge4, double WAge5, double WAge6, double WAge7, double WAge8, double WAge9, double WAge10, double WAge11, double WAge12, double WExp1, double WExp2, double WExp3, double WExp4, double WExp5, double WExp6, double WExp7, double WExp8, double WExp9, double WExp10, double WExp11, double WExp12) 

станет

void UpdateTotals(int WAge1, double[] WAges); 

Если WAge1 на самом деле также двойной затем изменить все к

void UpdateTotals(double[] WAges); 

Если у вас есть несколько массивов, то определить новый тип, который имеет те, как свойства и передать это вместо этого.

public class SomeContainer { 
    public double[] WAges {get;set;} 
    public double[] WExps {get;set;} 
} 

void UpdateTotals(SomeContainer wContainer); 

@ Abion47 указал, что, возможно, WAge и WExp связаны между собой. В этом случае обновите модель, чтобы отразить это.

public class WContainer { 
    public double WAge {get;set;} 
    public double WExp {get;set;} 
} 

void UpdateTotals(WContainer[] ws); 
+0

Мое предложение состоит в том, что, поскольку каждый параметр 'Age' имеет соответствующий параметр' Exp', лучшим вариантом было бы использовать нечто вроде 'void UpdateTotals (params Tuple [] employees)' where' Item1' соответствует возраст и 'Item2' соответствуют опыту. – Abion47

+0

@ Abion47 - если это так, тогда это будет лучший дизайн. – Igor

+0

Я еще не изучил массивы, что означает «получить» и «установить»? WAge и WExp связаны между собой. Я должен выяснить, как накопить итоговые значения для возраста, опыта и количества сотрудников, чтобы показать средний возраст и опыт. Я хотел бы использовать «void UpdateTotals (double [] WAges);» но ему не нравится «WAges» – Cat

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