1
class Program
{
    static string strFile = "Student Database.txt";

    static void Main(string[] args)
    {

        string strInput = null; // user input string

    start:
        System.IO.DirectoryInfo dir = new DirectoryInfo("student_results.txt");

        // Request user input as to actions to be carried out
        Console.WriteLine("\nWhat do you want to do?\n" +
            " 1.View Student(s)\n 2.Add a New Student\n 3.Exit program");
        // Save user input to make decision on program operation
        strInput = Console.ReadLine();

        // Switch statement checking the saved user input to decide the action
        // to be carried out
        switch (strInput)
        {
            case "1": // choice for view file
                Console.Clear();

                string file = AppDomain.CurrentDomain.BaseDirectory +
                    @"student_results.txt";
                StreamReader sr = new StreamReader(file);
                string wholeFile = sr.ReadToEnd();
                Console.Write(wholeFile + "");
                sr.Close();

                goto start;
            ...
        }
        ...
    }
    ...
}

コードのこの部分で、生徒を個別に読み取って、生徒を私に中継するようにします。現時点では、「1)生徒を表示」を押すと、生徒全員が私にコールバックするだけでした。 「見たい学生の名前やID番号を入力してください」とよく言われます。私は現在、乱数ジェネレーターからID番号を実行しています。

お時間をいただきありがとうございます。

4

3 に答える 3

1

SO へようこそ。まず第一にgoto、C# では 99% のケースで適切な選択ではありません。ループを使用することをお勧めします。あなたのコードでは、各学生を1行に保存し、学生を読むときに、学生が見つかるまで1行ずつ読みます。

class Program
{
    static string strFile = "Student Database.txt";
    static void Main(string[] args)
    {
        string strInput = ""; // user input string

        while (strInput != "3")
        {
            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("student_results.txt");
            Console.WriteLine("\nWhat do you want to do?\n 1.View Student(s)\n 2.Add a New Student\n 3.Exit program"); // request user input as to actions to be carried out
            strInput = Console.ReadLine(); //save user input to make decision on program operation

            switch (strInput)
            {
                case "1":
                    Console.Clear();
                    Console.WriteLine("Enter Student ID: \n");
                    string file = AppDomain.CurrentDomain.BaseDirectory + @"student_results.txt";
                    StreamReader sr = new StreamReader(file);
                    string StudentID = Console.ReadLine();
                    string line = "";
                    bool found = false;
                    while((line = sr.ReadLine()) != null)
                    {
                        if (line.Split(',')[0] == StudentID)
                        {
                            found = true;
                            Console.WriteLine(line);
                            break;
                        }
                    }
                    sr.Close();
                    if (!found)
                    {
                        Console.WriteLine("Not Found");
                    }
                    Console.WriteLine("Press a key to continue...");
                    Console.ReadLine();
                    break;
                case "2":
                    Console.WriteLine("Enter Student ID : ");
                    string SID = Console.ReadLine();
                    Console.WriteLine("Enter Student Name : ");
                    string SName = Console.ReadLine();
                    Console.WriteLine("Enter Student Average : ");
                    string average = Console.ReadLine();
                    string wLine = SID + "," +SName+":"+average;
                    file = AppDomain.CurrentDomain.BaseDirectory + @"student_results.txt";
                    StreamWriter sw = File.Exists(file) ? File.AppendText(file) : new StreamWriter(file);
                    sw.WriteLine(wLine);
                    sw.Close();
                    Console.WriteLine("Student saved on file, press a key to continue ...");
                    Console.ReadLine();
                    Console.Clear();
                    break;
                case "3":
                    return;
                default:
                    Console.Clear();
                    Console.WriteLine("Invalid Command!\n");
                    break;
            }
        }
    }
}

このコードは完全ではない可能性があります。アイデアを提供したかったので、お役に立てば幸いです。

于 2012-12-10T20:31:09.787 に答える
0

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ReadStudents
{
    class Program
    {
        static string _filename = "students.txt";

        static void Main(string[] args)
        {
            List<Student> students = new List<Student>();

            // Load students.
            StreamReader reader = new StreamReader(_filename);
            while (!reader.EndOfStream)
                students.Add( new Student( reader.ReadLine()));
            reader.Close();

            string action; 
            bool showAgain = true;

            do
            {
                Console.WriteLine("");
                Console.WriteLine("1. See all students.");
                Console.WriteLine("2. See student by ID.");
                Console.WriteLine("3. Add new student.");
                Console.WriteLine("0. Exit.");
                Console.WriteLine("");

                action = Console.ReadLine();

                switch (action)
                {
                    case "1":
                        foreach (Student item in students)
                            item.Show();
                        break;

                    case "2":
                        Console.Write("ID = ");
                        int id = int.Parse( Console.ReadLine() ); // TODO: is valid int?

                        foreach (Student item in students)
                            if (item.Id == id)
                                item.Show();
                        break;

                    case "3":
                        Console.WriteLine("ID-Name");

                        Student newStudent = new Student(Console.ReadLine());
                        students.Add(newStudent);

                        StreamWriter writer = new StreamWriter(_filename, true);
                        writer.WriteLine(newStudent);
                        writer.Close();

                        break;

                    case "0":
                        Console.WriteLine("Bye!");
                        showAgain = false;

                        break;

                    default:
                        Console.WriteLine("Wrong action!");
                        break;

                }
            }
            while (showAgain);
        }
    }

    class Student
    {
        public int Id;
        public string Name;

        public Student(string line)
        {
            string[] fields = line.Split('-');

            Id = int.Parse(fields[0]);
            Name = fields[1];
        }

        public void Show()
        {
            Console.WriteLine(Id + ". " + Name);
        }
    }
}

たとえば、データが「ID名」形式であると仮定します。

1-Alexander
2-Brian
3-Christian

ファイルを1行ずつロードし、コンストラクターのテキストデータをよりわかりやすい形式に変換するStudentクラスに渡します。次に、ユーザーが「0」を書き込むまで、アプリケーションはインターフェースを表示します。

于 2012-12-10T20:59:00.560 に答える
0

学生の巨大なファイルを扱っていないと仮定し、複数のクエリを作成することに基づいて、毎回テキストファイルを1行ずつ読み取ることはありません。

代わりに、学生クラスを作成し、init で一度ファイルを読み取り、データから list< student > を作成します。次に、LinQ でクエリを実行できます

于 2012-12-10T20:48:28.010 に答える