Windows_/Windows_C# & App

C# - 학생 성적처리, 관리 프로그램 소스

sosal 2014. 7. 24. 02:02
반응형

/*

 * http://sosal.kr/

 * made by so_Sal

 */


/*
 * C#도 코딩한번 해볼겸, 타학교 과제를 설렁설렁 만든 코드라 부족한점이 많습니다.
 * 학생 정보 삭제기능은 없으며, 학생 성적순으로 sort하는정도입니다.
 * 처음부터 20개의 객체배열을 생성하고 시작합니다.
 */



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);

    } //학생의 성적을 얻어오는 함수

 

}