반응형
소스 코드
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# > 실습으로 다지는 C#' 카테고리의 다른 글
[C# 소스] 21. 콘솔 응용의 기본 제어 – 메뉴로 상호 작용 (0) | 2020.04.14 |
---|---|
[C# 소소] 콘솔 글자 색 바꾸기 - Windows API 사용 (0) | 2020.04.13 |
[018] C# 실현 관계(Realization) 실습 (0) | 2020.04.10 |
[016] 의존(Dependency) 관계 실습 (0) | 2020.04.09 |
[015] C# 연관 관계(Association) 실습 – 의사, 약사 (0) | 2020.04.09 |