// 练习: 收银程序

// 声明变量保存商品的单价 数量 总价   如果总价满90 打8折 如果钱不够 提示还差多少
// 钱多了提示 找零多少  如果钱刚好 提示正好 如果钱不够 提示还差多少
var price = 10;
var num = 8;
var mon = 100;
var count = price * num;

if (count >= 90) {
    console.log('打8折:', count * 0.8);
} else {
    console.log('钱不够还差:', 90 - count);
}

if (count == mon) {
    console.log('刚好够');
} else if (count < mon) {
    console.log('找零:', mon - count);
} else if (count > mon) {
    console.log('还差:', count - mon);
}
// 机票业务
// 北京飞往印尼 原价4000块, 4月到10月是旺季, 其他均为淡季
// 旺季 头等舱9折, 经济舱8折
// 淡季 头等舱8折, 经济舱5折
// 给定一个月份 分别计算2个舱位的价格
var month = 10;
if (month >= 4 && month <= 10) {
    console.log('头等舱:', 4000 * 0.9);
    console.log('经济舱:', 4000 * 0.8);
} else if ((month >= 1 && month < 4) || (month > 10 && month <= 12)) {
    console.log('头等舱:', 4000 * 0.8);
    console.log('经济舱:', 4000 * 0.5);
} else {
    console.log('参数非法');
}
// 练习: 满减30减15 利用三元运算符
var mon = 30;
if (mon >= 30) {
    mon -= 15;
} else {
    console.log('不满足');
}
mon >= 30 ? (mon -= 15) : console.log('不满足'); //三目运算

// 声明2个变量存储身高 和 性别

// 如果小于180 输出小文,否则就继续查看是不是性别男,如果是输出能哥,否者输出小文的闺蜜
var h = 183;
var sex = '男';

if (h >= 183) {
    if (sex == '男') {
        console.log('能哥');
    } else {
        console.log('小文的闺蜜');
    }
} else {
    console.log('小文')
}
// 改成三元 可读性差,多条件判断仍然使用if嵌套
console.log(h >= 183 ? sex == '男' ? '申哥' : '小艺的闺蜜' : '小艺');

 

// 第三种情况
// 订单状态  1 未付款  2未发货  3运输中 4签收 其他状态非法
var sta = 3;
switch (sta) {
    case 1:
        console.log('未付款');
        break;
    case 2:
        console.log('未发货');
        break;
    case 3:
        console.log('运输中');
        break;
    case 4:
        console.log('签收');
        break;
    default:
        console.log('状态非法');
        break;
}

  

// 声明2个变量,保存年份和月份,显示当月的天数,2月的话需要考虑闰年问题 闰年2月有29天
// 闰年: 能被4整除,不能被100整数,或者能被400整数
 
var month = 2;
var year = 2020;

switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        console.log('31天')
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        console.log('30天')
        break;
    case 2:
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            console.log('29天');
        } else {
            console.log('28天');
        }
        break;
    default:
        console.log('月份有误');
        break;
}

// 猜数字游戏

 // 声明变量保存用户输入的数字和要猜的数字 提示猜大了和猜小了 一直到猜对了才终止循环
     
    var i = 15;
        while (true) {
            var num = prompt('请输入数字:');
            if (num == i) {
                alert('猜对了');
                break;
            } else if (num > i) {
                alert('猜大了');
            } else if (num < i) {
                alert('猜小了');
            }
        }

 <!-- 给出2个提示框让用户输入用户名和密码,如果正确提示登录成功,不正确就一直输入 -->

    <!-- 账号: admin   密码: 123 -->
  var count = 0;
        while (true) {
            count++;
            var uname = prompt('请输入账号:');
            var upwd = prompt('请输入密码:');

            if (uname == 'admin' && upwd == '123') {
                alert('登录成功');
                break;
            }
            if (count >= 5) {
                alert('账号密码尝试次数过多,闪电五连鞭即将对你进行抓捕~~');
                break;
            }
        }

// 有一对幼兔,一个月成长为小兔,小兔一个月后可以长为成兔,

// 成兔会生下一对小兔,问10个月后有多少只兔子(自己不会死)
var yt = 1;
var xt = 0;
var ct = 0;
var count = 0;
// 月份    幼兔     小兔   成兔      生的小兔
// 1       2         0     0           0
// 2       0         2     0           0
// 3       0         0     2           2
// 4       0         0     4           8
// 5       0          0    12          24
// 每个月成兔的对数= 上个月小兔+ 上个对成兔
// 每个月小兔的对数等于上个月幼兔(没有幼兔概念)
// 幼兔的对数 等于上个月成兔的对数
注释:先思考在解题
// 1. 打印一个星星
var str = '';
console.log(str);
// 2. 把1执行10次 打印10个星星 并且打印空行
for (var i = 0; i < 10; i++) {
    str += "*";
}
str += '\n';
console.log(str);
console.log('---------------------------------------------------------------');

// 3. 把2执行10遍
for (var j = 0; j < 10; j++) {
    for (var i = 0;  i < 10 ; i++) {
        str += "*";
    }
    str += '\n';
}
console.log(str);
// 分析过程
// 循环次数   j值  外层判断            内层i值      内层判断      执行     内层增量i     内层判断
// 1          0      T                  0            T          *          1            T
// 2          0     ...                 1            T          **         2            T
// 3          ...
// ...
// 9          0      ...                 9            T          9*         10           F(跳出内层循环)
// 10         1      T又一次进内层循环    0             T          *          1            T
// 11         1      ...
// ...
//           10      F(不满足条件终止循环)

// 输出下方金字塔

// *
// **
// ***
// ****
// *****
// 分析: 星星的数量 = 行数    外层循环控制行 内层控制列 现有行才有列
for (var i = 1, str = ''; i <= 5; i++) {
    for (var j = 1; j <= i; j++) {
        str += '*';
    }
    str += '\n';
}
console.log(str);

  // 经典案例9 * 9 乘法表

        // 1 * 1 = 1
        // 1 * 2 = 2   2 * 2 = 4
        // 1 * 3 = 3   2 * 3 = 6 3 * 3 = 9 
        // 每一行开始的数字都是1 ,第二个数字会根据 列数会随着行数的变化而变化
        // 外层控制行, 内层控制列
 var str=''
 for(var i=1;i<=9;i++){
     for(var j=1;j<=i;j++){
        str+=j+'*'+i+'='+(j*i)+' '
     }
    str+='\n'
 }
 console.log(str);
 倒置的九九乘法表;
 var str=''
 for(var i=9;i>=1;i--){
     for(var j=1;j<=i;j++){
        str+=j+'*'+i+'='+(j*i)+' '
     }
    str+='\n'
 }
 console.log(str);
 // 输出下列形状 
   //       *
   //     * * *
   //   * * * * *
   // * * * * * * *
   // 1  1     1 * 2 - 1
   // 2  3     2 * 2 - 1
   // 3  5     3 * 3 - 1 
   // 4  7     4 * 4 - 1
  以及倒置的等腰三角形
  //    第一种方法
   var str = '';
   // i 外层的循环控制行数
   for (var i = 1; i <= 4; i++) {
       // j 控制前面的空格数 空格数等于总行数减去当前行数
       for (var j = 1; j <= 4 - i; j++) {
           str += ' ';
       }
       // k 控制星星 星星个数 = 当前行数 * 2 -1
       for (var k = 1; k <= i * 2 - 1; k++) {
           str += '*';
       }
       str += '\n';
   }
   console.log(str);
   
   //    第二种方法
   //  偶数行跳出当前循环

   //  第三种方法
   for (var v = 1, start = '*'; v < 5; v++) {
       //    console.log(v);
       console.log(" ".repeat(5 - v) + start.repeat(v) + start.repeat(v - 1 > 0 ? v - 1 : 0));
   }
倒置的等腰三角形
     var str=''
    for(var i=6;i>=1;i--){
     for(var j=1;j<=i;j++){
        str+=' '
     }
     for(k=1;k<=2*(6-i)-1;k++){
         str+='*';
     }
    str+='\n'
 }
 console.log(str);

  //输出菱形

for(var i=1,str='';i<=5;i++){
     for(a=0;a<=5-i;a++){
          str+=' ';
     }
     for(b=1;b<=2*i-1;b++){
        str+='*';
     }
     str+='\n'
 }
  for(var i=1;i<=5;i++){
      for(c=1;c<=i;c++){
          str+=' '

      }
      for(d=1;d<=2*(5-i)+1;d++){
          str+='*'

      }
      str+='\n'

  }
  console.log(str);

  //函数

//创建函数,计算1-n之间所有整数的和,调用多次
function getsm(n){//形参
for(var i=1,sum=0;i<=n;i++){
    sum+=i;
}
console.log(sum);
}

getsm(100);

//创建函数,计算n1~n2 之间闰年的数量;

function getrun(n1,n2){
for(var count=0;n1<=n2;n1++){
        if(n1%4===0 && n1%100!==0 || n1%400===0){
            count++;
        }
    }
    console.log(count);
}
    getrun(2000,2100)
//创建函数,比较任意两个数字的大小,返回最大值
function getMax1 (a,b){
   if(a>b){
        return a ;

    }else(a<b)
    return b;
     //return a > b ? a : b//三目运算法
}
 console.log(getMax(8,9));

//创建函数,比较任意三个数字的大小,返回最大值

function getMax2(a,b,c ){
    var max;
    if(a>b){
        max=a;
    }else{
        max=b;
    }
    if(max>c){
        return max;
    }else{
        return c
    }
/* var   max = a>b ? a : b;        //三木运算法//
    return res = max>c ? max : c */
}
 consoel.log(getMax2(2,7,4));
 
//创建函数 模拟购物流程
 
function bvr(n){
    switch(n){
        case 1:
        return '等待付款';
        case 2:
        return '卖家待发货';
        case 3:
        return '运输中';
        case 4:
        return '已签收';
        case 5:
        return '已取消';

        default :
        return '网络逃到外星球了~~~';
    }

}
var res=bvr(5);
console.log(res)

//创建函数 ,传递任意一个年份,如果闰年返回true,否则返回false;

function year (v){
    if( v%4===0 && v%100!==0 || v%400===0 ){
        return 'true';

    }else{
        return 'false';
    }
  
}
var opk=year (2028);
console.log(opk);

   if( year(2100)){
       console.log(366);

   }else if(year(2028)){
       console.log(365);
   }

//创建函数,调用 的时候,传递两个匿名函数,每个匿名函数中都是返回一个数字,要计算两个数字相加的和

//回调函数(匿名函数以实参形式传递)
function far(a,b) {  //形参

    var number1=a( );  //调用匿名函数
    var number2=b( );
    console.log(number1+number2);
}
far(function ( ) {  //实参
    return 6;
},
function ( ) {
    return 7;
})