2016-04-07 3 views
0

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

CS0103 Ошибка Название «student1» не существует в текущем контексте
Ошибка CS0103 Название «teacher1» не существует в текущем контексте Error 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'. Обычное старое 'FirstName' будет работать лучше в обоих случаях. –

ответ

2

Все ваши переменные course1, student1 и teacher1 являются локальными методами GetClass, GetStudent и GetTeacher соответственно.

Вам нужно сделать их переменными класса, если вы собираетесь обращаться к ним так. Однако было бы гораздо проще заменить ваше заявление, что выписывает детали с:

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

Однако это не будет работать, как «Get» методы требуют пользовательского ввода. Вам нужно будет сделать переменные, которые содержат вход пользователя в переменные класса.

Появились методы для возврата этих значений, но затем вы их не используете, однако только метод GetClass возвращает значение. Метод GetTeacher считывает значения от пользователя и затем ничего не делает с ним.

Окончательно ваш метод PrintStudent вызывается от GetStudent. Если вы хотите использовать эту структуру, то вам нужно передать имя студента в метод:

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

Однако, если вы хотите распечатать класс и учителей, а также вы будете иметь, чтобы изменить структуру коды довольно радикально - в противном случае вы могли бы завершить бесконечную рекурсию с помощью метода печати, вызывающего методы «Get», которые вызывают метод печати. ​​

Вам нужно решить, как вы хотите, чтобы код был структурирован, а затем был согласован , Сначала напишите логику на нормальном языке - это поможет вам определить, какие методы и структуры вам действительно нужны. Затем вы можете превратить это в псевдокод и, в конечном итоге, код.

+0

он собирается также нужно изменить свой метод getstudent, или вы идете в бесконечный цикл! –

+0

@JoshStevens - пропустил это. – ChrisF

+0

также там все пустоты, поэтому они не вернут значение. –

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