标题:黑吧收费问题,难题啊,包夜问题求助
只看楼主
redcar
Rank: 2
等 级:论坛游民
帖 子:210
专家分:60
注 册:2006-9-13
结帖率:100%
已结贴  问题点数:100 回复次数:7 
黑吧收费问题,难题啊,包夜问题求助
具体看附件工程,主要是包夜不知道怎么弄,涉及跨天.........
Money.rar (20.41 KB)
搜索更多相关主题的帖子: 难题 收费 
2009-09-08 11:29
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
得分:23 
把你的思路写出来吧。

实践、学习、再实践、再学习......
2009-09-08 12:12
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
得分:0 
能不能在进入一个时间点后,如12点后,包夜就设置一个时间长度?

实践、学习、再实践、再学习......
2009-09-08 12:13
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
得分:23 
private void Mone()
        {
            //进出时间
            DateTime intime, outtime;
            //免费分钟数
            int nomoney;
            //起价分钟数
            int startTime;
            //起价
            int startMoney;
        }
只有这么几句话,问题不发现.
我猜你是网吧的一种收费吧,
dateTime 中有 年,月,日,小时,分钟,移数 两个相差就可以得到相差多大的时间.
包夜就是一定的时间内特殊处理一下,就行了.

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-09-08 14:07
redcar
Rank: 2
等 级:论坛游民
帖 子:210
专家分:60
注 册:2006-9-13
得分:0 
是这样滴,因为设置里面,就是包夜起始结束时间,这个只是时间段,没有日期,所以,我1开始想用时间段来区别设置,结果失败了,基本不可能.因为包夜有的地方是跨天,23.00-7.00 有的是 1.00-7.30 这个就很罗嗦了
想来想去想不出个好办法
2009-09-08 14:35
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
得分:23 
草,VS2005还打不开!

QQ:81704464
2009-09-09 07:48
redcar
Rank: 2
等 级:论坛游民
帖 子:210
专家分:60
注 册:2006-9-13
得分:0 
程序代码:
        private void Mone()
        {
            //此处,如果出现2个包夜时段,会出错...........就是跨了2天以上........

            try
            {
                //收费多少元
                int money = 0;

                //进出时间
                DateTime intime, outtime;

                intime = inTime.Value;
                outtime = outTime.Value;
                //免费分钟数
                int nomoney;
                nomoney = int.Parse(textBox1.Text);
                //起价分钟数
                int startTime;
                startTime = int.Parse(textBox2.Text);
                //起价
                int startMoney;
                startMoney = int.Parse(textBox3.Text);
                //步进时间
                int stepTime;
                stepTime = int.Parse(textBox4.Text);
                //步进价格
                int stepMoney;
                stepMoney = int.Parse(textBox5.Text);
                //包夜价格
                int nightMoney;
                nightMoney = int.Parse(textBox6.Text);
                //包夜时长
                int nightTime;
                nightTime = int.Parse(textBox9.Text);
                //包夜有隔天
                bool isNextDay;
                isNextDay = checkBox1.Checked;
                //第一次累加
                bool isFirst = true;
                //最小包夜时间
                int minNight;
                minNight = int.Parse(textBox7.Text);

                //包夜开始时间,结束时间
                DateTime bystart, byend;

                if (isNextDay)
                {
                    //包夜时段是隔天的
                    byend = byout.Value; //日期部分,当日
                    bystart = byin.Value; //日期部分,当日

                    if (byend < intime & intime < bystart & byend < outtime & outtime < bystart)
                    {
                        //上机时间没有包夜,正常计费
                        TimeSpan ts = outtime - intime;
                        int minu = (int)ts.TotalMinutes; //用了多少分钟
                        if (minu <= nomoney) //免费分钟内,不收费
                        { money = 0; }
                        else if (minu > nomoney & minu < startTime)//超过免费分钟,小于起价时间
                        {
                            money = startMoney;//起步价
                        }
                        else if (minu > startTime)//超过起价时间
                        {
                            // (总时间-起价时间)/步进时间 向上取整(不足步进时间,按步进时间算) * 步进价格 + 起价
                            // Math.Floor 向下取整
                            money = ((int)Math.Ceiling((double)((minu - startTime) / stepTime))) * stepMoney + startMoney;
                        }
                    }
                    else
                    {
                        //上机时间有包夜
                        //循环累加进场时间,每累加1次,判定各种条件
                        while (intime < outtime)//一直循环,直到等式不成立
                        {
                            if (byend < intime & intime < bystart)//未进入包夜时段的计费
                            {
                                if (isFirst) //第一次累加,要算基本费(起价)
                                {
                                    TimeSpan tp = bystart - intime;
                                    int minu = (int)tp.TotalMinutes; //用了多少分钟
                                    if (minu < nomoney) //免费分钟内,不收费
                                    { money = 0; }
                                    else if (minu > nomoney & minu < startTime)//超过免费分钟,小于起价时间
                                    {
                                        money = startMoney;//起步价
                                        intime = intime.AddMinutes(startTime);
                                    }
                                    else if (minu > startTime)//超过起价时间
                                    {
                                        money = startMoney;
                                        intime = intime.AddMinutes(startTime);
                                    }
                                    isFirst = false;
                                }
                                else //算过起价之后
                                {
                                    TimeSpan tp = bystart - intime;
                                    int minu = (int)tp.TotalMinutes; //用了多少分钟
                                    money += stepMoney;
                                    intime = intime.AddMinutes(stepTime);
                                    isFirst = false;
                                }

                            }
                            else if (intime >= bystart & intime <= byend.AddDays(1) || bystart.AddDays(-1) < intime & intime < byend) //包夜时段跨天,结束包夜时间,日期+1
                            {
                                //进入包夜计费时段
                                //先判定,包夜时间长短,短的按正常计费
                                TimeSpan tn = byend - intime;//此处的intime是累加过的,不是初始的进来时间
                                if ((int)tn.TotalMinutes < minNight) // 在包夜时间段内的停留时间,小于最小包夜时间,按正常收费
                                {
                                    TimeSpan mints = intime - bystart;
                                    int minu = (int)mints.TotalMinutes;
                                    if (minu >= stepTime)//超过步进时间
                                    {
                                        money += stepMoney;
                                    }
                                    //正常收费,每次循环增加标准步进时间间隔
                                    intime = intime.AddMinutes(stepTime);
                                }
                                else//超过最小包夜时间,收取全部包夜费
                                {
                                    money += nightMoney;
                                    intime = intime.AddMinutes((int)(byend - intime).TotalMinutes);
                                }
                            }
                        }//while

                    }
                }
                else //包夜不隔天
                {

                }
                textBox8.Text = money.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


[ 本帖最后由 redcar 于 2009-9-9 11:14 编辑 ]
2009-09-09 11:13
redcar
Rank: 2
等 级:论坛游民
帖 子:210
专家分:60
注 册:2006-9-13
得分:0 
唉,自力更生艰苦奋斗,自己基本搞定了,好难弄阿............
2009-09-11 17:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-285106-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025317 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved