2016-04-07 58 views
0

我一直试图通过搜索和阅读来整理这一点,而且我知道它必须是简单的东西,但最后一段代码在底部,我正在尝试创建打印输入内容的方法,并且不断收到此错误。无法访问变量 - 超出范围

错误CS0103名称“student1”不会在目前情况下
错误CS0103名称“teacher1”存在没有在当前的背景下 错误CS0103名称“course1”存在没有在当前的背景下

存在

我会永远感激,如果你能指出我正确的方向或至少给我一个提示。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

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

     Console.WriteLine("What would you like to do? Please choose a number: "); 
     Console.WriteLine(""); 
     Console.WriteLine("1. Enter Student Information"); 
     Console.WriteLine("2. Enter Teacher Information"); 
     Console.WriteLine("3. Enter Class Information"); 
     Console.WriteLine(); 
     int menuOne = Convert.ToInt32(Console.ReadLine()); 

     if (menuOne == 1) 
     { 
      GetStudent(); 
     } 
     else if (menuOne == 2) 
     { 
      GetTeacher(); 
     } 
     else if (menuOne == 3) 
     { 
      GetClass(); 
     } 
     else 
     { 
      Console.WriteLine("Incorrect input. Exiting application."); 
      Console.ReadLine(); 
     } 

    } 


    public class Student 
    { 
     public string fName { get; set; } 
     public string lName { get; set; } 
     public string bDate { get; set; } 
    } 

    public class Teacher 
    { 
     public string tFName { get; set; } 
     public string tLName { get; set; } 
     public string tClass { get; set; } 
    } 

    public class Course 
    { 
     public string cName { get; set; } 
     public string cSubject { get; set; } 
     public string cStart { get; set; } 
    } 

    static void GetTeacher() 
    { 
     Teacher teacher1 = new Teacher(); 

     Console.WriteLine("Enter teacher's first name: "); 
     teacher1.tFName = Console.ReadLine(); 
     Console.WriteLine("Enter teacher's last name: "); 
     teacher1.tLName = Console.ReadLine(); 
     Console.WriteLine("Enter teacher's class name: "); 
     teacher1.tClass = Console.ReadLine(); 


    } 

    static void GetStudent() 
    { 
     Student student1 = new Student(); 

     Console.WriteLine("Enter student's first name: "); 
     student1.fName = Console.ReadLine(); 
     Console.WriteLine("Enter student's last name: "); 
     student1.lName = Console.ReadLine(); 
     Console.WriteLine("Enter student's birthdate: "); 
     student1.bDate = Console.ReadLine(); 
     PrintStudent(); 

    } 

    static string GetClass() 
    { 
     Course course1 = new Course(); 

     Console.WriteLine("Enter class name: "); 
     course1.cName = Console.ReadLine(); 
     Console.WriteLine("Enter class subject: "); 
     course1.cSubject = Console.ReadLine(); 
     Console.WriteLine("Enter class start time: "); 
     course1.cStart = Console.ReadLine(); 
     return course1.cName; 
    } 

    static void PrintStudent()//Going to add PrintTeacher and PrintCourses as well after I figure this out 
    { 
     //string student1.fName = GetStudent(); 
     // Console.WriteLine(fName); 
     Console.WriteLine("{0} and {1} are in {2}", student1.fname, teacher1.tFName, course1.cName); 
    } 

} 
} 
+0

他们是本地变量... –

+0

这段代码需要清理..它的全部联合! –

+0

你应该避免使用诸如'fName'或'cFName'之类的神秘ID。在这两种情况下,一个普通的老名字“FirstName”会更好。 –

回答

2

你的变量course1student1teacher1的全部是本地的方法GetClassGetStudentGetTeacher分别。

如果你要像那样访问它们,你需要使它们成为类变量。但是它会简单得多,以取代您的语句写出来的细节有:

Console.WriteLine("{0} and {1} are in {2}", GetStudent(), GetTeacher(), GetClass()); 

但是这不会作为“获取”的方法要求用户输入工作。您将需要将用户输入保存到类变量中的变量。

您似乎已经创建了方法来返回这些值,但您没有使用它们,但是,只有GetClass方法返回一个值。 GetTeacher方法读入用户的值,然后不执行任何操作。

最后您的PrintStudent方法从GetStudent调用。如果你想使用结构,那么你需要将学生姓名传递给方法:

static void PrintStudent(string studentName) 
{ 
    Console.WriteLine(studentName); // Plus formatting 
} 

但是,如果你要打印出类和老师,以及你将不得不改变你的代码结构相当根本 - 否则你可能会结束与无限递归与调用打印方法调用打印方法的“Get”方法....

您需要决定如何结构,然后是一致的代码。首先用正常语言写出逻辑 - 这将帮助您确定实际需要的方法和结构。然后你可以把它变成伪代码并最终编码。

+0

他要去必须改变他的getstudent方法,否则你会陷入无限循环! –

+0

@JoshStevens - 错过了。 – ChrisF

+0

也有所有空白,所以他们不会返回一个值。 –