C#/실습으로 다지는 C#

19. 택배 요금 계산 시뮬레이션 C#

언제나휴일 2020. 4. 12. 19:17
반응형

택배 요금 계산 시뮬레이션 클래스 다이어그램

소스 코드

City.cs

using System;

namespace 택배_요금_계산_시뮬레이션
{
    public class City
    {
        readonly double relative_position;
        public string Name
        {
            get;
            private set;
        }
        public City(string name, double relative_position)
        {
            Name = name;
            this.relative_position = relative_position;
        }
        public double CalculateDistance(City city)
        {
            double distance = relative_position - city.relative_position;
            return Math.Abs(distance);
        }
    }
}

 


Parcel.cs

namespace 택배_요금_계산_시뮬레이션
{
    public class Parcel
    {
        public const int base_fee = 100;
        double weight;
        public Parcel(double weight)
        {
            this.weight = weight;
        }
        public double CalculateFee(double distance)
        {
            return weight * base_fee * distance;
        }
    }
}

Appliation.cs

using System;
using System.Collections.Generic;

namespace 택배_요금_계산_시뮬레이션
{
    class Application
    {
        #region 단일체 패턴
        static Application application;
        static Application()
        {
            application = new Application();
        }
        Application()
        {
        }
        #endregion
        List<City> cities = new List<City>();
        internal static void Run()
        {
            application.Init();
            application.Simulation();
        }

        private void Simulation()
        {
            City dep_city = SelectCity("도착 도시");
            if(dep_city == null)
            {
                Console.WriteLine("잘못 선택하였습니다.");
                return;
            }
            City arr_city = SelectCity("출발 도시");
            if(arr_city == null)
            {
                Console.WriteLine("잘못 선택하였습니다.");
                return;
            }
            Parcel parcel = MakeParcel();
            PrintDeliveryFee(dep_city, arr_city, parcel);
        }

        private void PrintDeliveryFee(City dep_city, City arr_city, Parcel parcel)
        {
            double distance = dep_city.CalculateDistance(arr_city);
            Console.WriteLine("택배 요금:{0}원", parcel.CalculateFee(distance));
        }

        private Parcel MakeParcel()
        {
            Console.WriteLine("무게 (Kg):");
            double weight = 0;
            double.TryParse(Console.ReadLine(), out weight);
            return new Parcel(weight);
        }

        private City SelectCity(string msg)
        {
            Console.Write("{0} (", msg);
            for(int i = 0; i<cities.Count; i++)
            {
                Console.Write("{0}:{1} ", i, cities[i].Name);
            }
            Console.Write("):");

            int index = 0;
            if(int.TryParse(Console.ReadLine(), out index)==false)
            {
                return null;
            }
            if((index<0)||(index>=cities.Count))
            {
                return null;
            }
            return cities[index];
        }

        private void Init()
        {
            cities.Add(new City("부산", 0));
            cities.Add(new City("대구", 105.84));
            cities.Add(new City("대전", 259.24));
            cities.Add(new City("서울", 397.40));
        }
    }
}

Program.cs

//http://ehpub.co.kr
//실습으로 다지는 C#
//택배 요금 계산 시뮬레이션

namespace 택배_요금_계산_시뮬레이션
{
    class Program
    {
        static void Main(string[] args)
        {
            Application.Run();
        }
    }
}
 

[실습으로 다지는 C#] 19.택배 요금 계산 시뮬레이션 – 언제나 휴일

[실습으로 다지는 C# 동강] 19.택배 요금 계산 시뮬레이션  이번 강의에서는 택배 요금을 계산하는 시뮬레이션을 만들어 봅시다.  City, Parcel, Application 세 개의 클래스로 구성하고 있습니다.  City 클래스는 도시 이름과 (기준 도시에서) 상대적 거리를 멤버로 갖습니다.  그리고 다른 도시와의 거리를 계산하는 메서드를 제공합니다.  Parcel 클래스는 기준 요금과 무게를 멤버로 갖고 요금을 계산하는 메서드를 제공합니다.  Ap

ehpub.co.kr

 

반응형