hahahia

C# 콘솔 예제(성적관리 프로그램) 본문

Windows Programming/Windows::C#

C# 콘솔 예제(성적관리 프로그램)

hahahia 2012. 2. 16. 20:33
using System;

class Program
{
    static public void Menu()
    {    //메뉴 출력루틴
        Console.WriteLine("************성적 관리 프로그램***********");
        Console.WriteLine("*******     1.학생 정보 입력      *******");
        Console.WriteLine("*******     2.학생 성적 입력      *******");
        Console.WriteLine("*******     3.학생 성적 계산      *******");
        Console.WriteLine("*******     4.학생 정보 출력      *******");
        Console.WriteLine("*******     5.학생 성적 출력      *******");
        Console.WriteLine("*******     6.종료                *******");
        Console.WriteLine("*****************************************");
    }
    static public void sort(Student[] stu)
    {
        for (int k = 0; k < Student.count; k++)
        {
            if (stu[k].number != 0)
            {
                stu[k].Grade.aver = stu[k].Grade.english +
                      stu[k].Grade.korean + stu[k].Grade.math;
                stu[k].Grade.aver /= (double)3; //언수외 3과목 평균
            }
        } //학생의 평균 계산

        for (int k = 0; k < Student.count; k++)
        {
            for (int j = 0; j < 20 - (k + 1); j++)
                //이미 가장 오른쪽 정렬이 되어있기 때문에 length-(i+1)까지
                if (stu[j].Grade.aver < stu[j + 1].Grade.aver)
                    swap(stu[j], stu[j + 1]);
        } //학생 언수외 평균성적으로 정렬. 거품(버블)정렬

        for (int p = 0; p < Student.count - 1; p++)
        {
            stu[p].number = p + 1;
        } //언수외 성적순으로 학생의 번호도 다시 새로 정렬
    }

    static public void swap(Student stu1, Student stu2)
    {    //성적순으로 sorting 하는 과정에서 사용하는 함수
        Student temp = new Student();
        temp.Insert(stu1);
        stu1.Insert(stu2);
        stu2.Insert(temp);
        //tmp를 이용하여 swap.
    }
    static void Main(string[] args)
    {
        int menu;
        int i;
        Student[] stu;
        stu = new Student[20]; //최대 20개의 객체 생성
        for (i = 0; i < 20; i++)
            stu[i] = new Student();
        bool[] check_gr = new bool[20]; // grade 확인 배열

        while (true)
        {
            i = 0;
            Menu(); // 프로그램이 한번 회전할 때, 메뉴 출력
            Console.Write("메뉴를 입력하세요 : ");
            menu = Convert.ToInt32(Console.ReadLine()); //메뉴 입력
            switch (menu) //메뉴에 따른 case 실행
            {
                case 1:
                    if (Student.count == 21)
                    {    //학생수 최대 20명 생성가능
                        Console.Write("학생수가 20명을 넘었습니다.");
                        continue;
                    }
                    stu[Student.count - 1].Setinfo(); //학생 정보 입력
                    break;
                case 2:
                    Console.Write("학생의 번호를 입력하세요 1~20: ");
                    i = Convert.ToInt32(Console.ReadLine());
                    if (i > Student.count - 1)
                    {
                        Console.WriteLine(i + "번 학생이 존재하지 않습니다.");
                    } //학생 정보가 존재하는 데이터에만 정보 입력 가능
                    else
                    {
                        stu[i - 1].Grade.SetGrade(stu[i - 1]);
                    } //학생 성적 입력
                    check_gr[Student.count] = true;
                    break;
                case 3:
                    sort(stu); // 정렬함수
                    break;
                case 4:
                    Console.WriteLine("************************");
                    Console.WriteLine("n 학번\t이름\t나이\t주소\t성별");
                    Console.WriteLine("************************");
                    for (int k = 0; k < 20; k++)
                    {
                        if (stu[k].number != 0)
                        {
                            Console.Write(stu[k].number + " ");
                            stu[k].Getinfo();
                        }
                    } // 학생의 정보 출력
                    break;
                case 5:
                    Console.WriteLine("************************");
                    Console.WriteLine("n 학번\t이름\t국어\t영어\t수학\t평균");
                    Console.WriteLine("************************");
                    for (int k = 0; k < Student.count; k++)
                    {
                        if (stu[k].number != 0)
                        {
                            Console.Write(stu[k].number + " ");
                            stu[k].Grade.GetGrade();
                        }
                    } //학생의 성적정보 출력

                    break;
                case 6:
                    Console.WriteLine("수고하셨습니다.");
                    return;
                default:
                    continue;
            }
        }
    }
}


class Student
{
    public static int count = 1;
    public int number;
    public grade Grade; //성적 객체를 포함한다.
    public string Id;
    public string Name;
    public string Age;
    public string Address;
    public string Sex; //student객체의 변수들

    public Student(Student input)
    {
        //number = input.number;
        Id = input.Id;
        Name = input.Name;
        Age = input.Age;
        Address = input.Address;
        Sex = input.Sex;

        Grade.Id = input.Grade.Id;
        Grade.Name = input.Grade.Name;
        Grade.korean = input.Grade.korean;
        Grade.math = input.Grade.math;
        Grade.english = input.Grade.english;
        Grade.aver = input.Grade.aver;
        Grade = new grade(this); //생성과 동시에 객체 생성
    } //생성자를 오버로딩하여 2개의 경우를 두었다.
    //위 경우는 생성과 동시에 객체를 삽입하는경우.

    public Student()
    {
        Grade = new grade(this); //생성과 동시에 객체 생성
    } //생성자 함수에 오버로딩 사용
    //생성과 동시에 Setinfo()함수를 메인에서 불러주므로
    //따로 초기화하지 않음.

    public void Insert(Student input)
    {
        number = input.number;
        Id = input.Id;
        Name = input.Name;
        Age = input.Age;
        Address = input.Address;
        Sex = input.Sex;

        Grade.Id = input.Grade.Id;
        Grade.Name = input.Grade.Name;
        Grade.korean = input.Grade.korean;
        Grade.math = input.Grade.math;
        Grade.english = input.Grade.english;
        Grade.aver = input.Grade.aver;
    } //객체 복사함수. swap에 사용된다.

    public void Setinfo()
    {
        Console.Write("학번 : ");
        Id = Console.ReadLine();
        Grade.Id = Id;
        Console.Write("이름 : ");
        Name = Console.ReadLine();
        Grade.Name = Name;
        Console.Write("주소 : ");
        Address = Console.ReadLine();
        Console.Write("나이 : ");
        Age = Console.ReadLine();
        Console.Write("성별 : ");
        Sex = Console.ReadLine();
        number = Student.count;
        Student.count++;
    } //학생의 정보를 입력한다.

    public void Getinfo()
    {
        Console.Write(Id + "\t");
        Console.Write(Name + "\t");
        Console.Write(Address + "\t");
        Console.Write(Age + "\t");
        Console.WriteLine(Sex);
    } //학생 정보를 출력한다.
}
class grade
{
    public string Name;
    public string Id;
    public int korean;
    public int english;
    public int math;
    public double aver;

    public grade(Student stu)
    {
        Name = stu.Name;
        Id = stu.Id;
        korean = 0;
        english = 0;
        math = 0;
        aver = 0;
    } //생성과 동시에 변수 초기화
    public void SetGrade(Student stu)
    {
        Console.Write("국어 : ");
        korean = int.Parse(Console.ReadLine());

        Console.Write("영어 : ");
        english = int.Parse(Console.ReadLine());

        Console.Write("수학 : ");
        math = int.Parse(Console.ReadLine());
        Name = stu.Name;
        Id = stu.Id;
    } //학생의 성적 정보를 삽입하는 함수.

    public void GetGrade()
    {

        Console.Write(Name + "\t");
        Console.Write(Id + "\t");
        Console.Write(korean + "\t");
        Console.Write(english + "\t");
        Console.Write(math + "\t");
        Console.WriteLine(aver);
    } //학생의 성적을 얻어오는 함수

}

'Windows Programming > Windows::C#' 카테고리의 다른 글

[C#] 메서드 재정의(virtual, override)  (0) 2013.03.31
[C#] 상속 예제  (0) 2013.03.31
C# GUI 구구단 프로그램  (1) 2012.02.16
윈도우즈 폼 예제  (0) 2012.02.16
Comments