首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

分不多了,时间段算法

2013-11-23 
分不多了,求一个时间段算法是一个停车场的算法,有一种停车卡:早7:00~23:00免费,其他时间2元一小时,每超过1

分不多了,求一个时间段算法
是一个停车场的算法,有一种停车卡:早7:00~23:00免费,其他时间2元一小时,每超过15分钟算一小时整。总停车费为all_fee,开始时间为start_time,离开时间为end_time。求这个算法。。。
[解决办法]


没听说。我们这里白天4元/小时。夜间0.5元/小时。
一个停车场可以停几百辆车,每个车每小时即便只收0.5元,如果一直处在满载状态,一天也有几千收入,养活几个看护者绰绰有余。费用的大头还是场地本身。
[解决办法]
//时间平移7个小时,将免费时段变成是0到16时,计费时段则为16到24时
startTime = startTime-7;
endTime = endTime-7;
//停车时间超过24小时
int parkDay = (int)((endTime - startTime) / 24);//每超过24小时意味着要收费8小时
startTime = startTime > 0 && startTime < 16 ? 16 : startTime;
endTime = endTime > 0 && endTime < 16 ? 0 : endTime;
//算总价
all_fee = 2 * ((int)(endTime - startTime) + parkDay * 8) + ((endTime - startTime) % 1 > 0.25 ? 2 : 0);
[解决办法]
修改一下:
endTime = endTime > 0 && endTime < 16 ? 24 : endTime;

[解决办法]
        System.Timers.Timer Timer = new System.Timers.Timer(1000);
        List<StopCarInfo> CarList = new List<StopCarInfo>();

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
            this.Timer.Start();
        }

        private void Timer_Elapsed(object sender, EventArgs e)
        {
            foreach (var car in CarList)
            {

                if (car.CarState == StopCarInfo.State.Out)
                {
                    var hh = (car.PassTime - car.StopTime).Seconds;
                    var mm = (car.PassTime - car.StopTime).Milliseconds;
                    if (hh > 1)
                    {
                        car.All_Fee = hh * 2;
                    }
                    if (mm > 15)
                    {
                        car.All_Fee += 2;
                    }
                    System.Console.WriteLine(car.All_Fee);
                    car.CarState = StopCarInfo.State.Finish;
                }

                car.PassTime = car.PassTime.AddSeconds(1);
            }           


        }

        private void button1_Click(object sender, EventArgs e)
        {
            StopCarInfo stopCar = new StopCarInfo();
            stopCar.CarState = StopCarInfo.State.In;
            stopCar.CarId = "527";
            stopCar.StopTime = DateTime.Now;
            stopCar.PassTime = DateTime.Now;
            CarList.Add(stopCar);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            var taretCar = this.CarList.FirstOrDefault((item) => item.CarId == "527"&& item.CarState == StopCarInfo.State.In);
            if (taretCar != null)
            {
                taretCar.CarState = StopCarInfo.State.Out;
            }
        }

        public class StopCarInfo
        {
            public string CarId
            {
                get;
                set;
            }

            public DateTime StopTime
            {
                get;
                set;
            }

            public DateTime PassTime
            {
                get;
                set;
            }

            public int All_Fee
            {
                get;
                set;
            }

            public State CarState
            {
                get;
                set;
            }

            public enum State
            { 
                In,
                Out,
                Finish
            }
        }
[解决办法]
            if (DateTime.Now.Hour > 7 && DateTime.Now.Hour < 23)
                stopCar.CarState = StopCarInfo.State.Free;
[解决办法]
你都没有看这两部内容呀

int parkDay = (int)((endTime - startTime) / 24);//每超过24小时意味着要收费8小时

+ parkDay * 8
[解决办法]
        private void Timer_Elapsed(object sender, EventArgs e)
        {
            //收费时间段


            if (DateTime.Now.Hour < 7 && DateTime.Now.Hour > 23)
            {
                foreach (var car in CarList)
                {
                    if (car.CarState == StopCarInfo.State.Free)
                    {
                        car.CarState = StopCarInfo.State.In;
                    }
                     // 离开停车场
                    if (car.CarState == StopCarInfo.State.Out)
                    {
                        var hh = (car.PassTime - car.StopTime).Seconds;
                        var mm = (car.PassTime - car.StopTime).Milliseconds;
                        if (hh > 1)
                        {
                            car.All_Fee = hh * 2;
                        }
                        if (mm > 15)
                        {
                            car.All_Fee += 2;
                        }
                        // 停车费用
                        System.Console.WriteLine(car.All_Fee);
                        // 收费完成
                        car.CarState = StopCarInfo.State.Finish;
                    }
                      //收费的经过时间
                    car.PassTime = car.PassTime.AddSeconds(1);
                }
            }
        }
[解决办法]
                    var hh = (car.PassTime - car.StopTime).Hours;
                        var mm = (car.PassTime - car.StopTime).Minutes;
[解决办法]


        static void Main(string[] args)
        {
            //输入的开始时间和结束时间
            DateTime dtStart = DateTime.Parse("2013-11-03 12:30:10");
            DateTime dtEnd = DateTime.Parse("2013-11-07 1:20:00");

            //一共多少天
            int iDays = (dtEnd.Date - dtStart.Date).Days + 1;


            //总金额
            int all_fee = 0;
            if (iDays > 1)
            {
                //跨天的每天8小时
                all_fee += (iDays - 1) * 8 * 2;
            }
            //取出考虑免费后的时间
            DateTime dtStartRevision = GetRevisionTime(dtStart);
            DateTime dtEndRevision = GetRevisionTime(dtEnd);
            TimeSpan ts = dtEndRevision - dtStartRevision;

            all_fee += ts.Hours * 2;

            //多退少补
            if (ts.Minutes >= 15)
            {
                all_fee += 2;
            }
            else if (ts.Minutes < -45)
            {
                all_fee -= 2;
            }
        }

        private static DateTime GetRevisionTime(DateTime dt)
        {
            DateTime dtRevision = new DateTime(1900, 1, 1, dt.Hour,dt.Minute,dt.Second);
            if (dt.Hour > 23)
            {
                dtRevision = dtRevision.AddHours(-16);
            }
            else if (dt.Hour > 7)
            {
                dtRevision = new DateTime(dtRevision.Year, dtRevision.Month, dtRevision.Day, 7, 0, 0);
            }
            return dtRevision;
        }


[解决办法]
引用
请问这个1900,1,1是什么意思呢?

没有什么意思,只是想让开始时间和结束时间在同一天,方便2个时间相减。

[解决办法]
我发现很多程序员小学数学都没学过一样,数钱都数不清。

热点排行