2016-11-30 163 views
0

我一直在为此工作了两个星期,而且我知道我错过了一些小事。我必须将旧项目修改为新项目。第一个项目是如果有人进入他们的工作类型(例如:工作人员,主管人员,经理人员等),他们的年龄和经验。该计划会告诉他们他们是否可以退休。如果他们不能退休,它会告诉他们他们需要修复以便退休。fileIn,fileOut错误 - 我无法弄清楚

新程序必须带一个fileIn并使文件显示工人ID,年龄,经验和资格。毕竟是显示,然后他们想要的平均年龄和经验。

我的老师是一个模块化标题和主顶上的标尺。我在下面的代码中输入了我的2015工作室,最终我得到了三条错误消息。 fileIn也在下面。该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)''Item1'对应的地方年龄和'Item2'对应的经验。 – Abion47

+0

@ Abion47 - 如果是这种情况,那么这将是一个更好的设计。 – Igor

+0

我还没有学过数组,'get'和'set'代表什么? WAge和WExp是相关的。为了显示平均年龄和经验,我必须弄清楚如何累积年龄,经验值和员工人数。我想使用“void UpdateTotals(double [] WAges);”但它不喜欢'WAges' – Cat