熬了 三天做出来的 可能还有bug

不过我学习到了很多

其中包括密码不回显

char *passw()
{
 char ch, s[20];
 int i = 0;
 while ((ch = getch()) != '\r')
 {
  
  
   if (ch != 8)
   {
    s[i] = ch;
    putchar('*');
    i++;
   }
   else if (i > 0)
   {
    putchar('\b');
    putchar(' ');
    putchar('\b');
    i--;
   }
  
 }
 s[i] = '\0';
 return s;

}

返回系统时间等 

struct tm gwtiame()
{
 time_t t;
 struct tm*lt;
 t=time(NULL);
 lt = localtime(&t);
 struct tm a = *lt;
 return a;
}

这是我人生第一个千行代码 留作纪念 

 

   1 /*本代码及设计由缪传鹏版权所有 未经允许不得商用 The copyright of the design program belongs to Miaoz, it cannot be used for commerce without permission.*/
   2 #include<stdio.h>
   3 #include<stdlib.h>
   4 #include<string.h>
   5 #include<conio.h>
   6 #include<time.h>
   7 typedef struct cmy {
   8  char cmyID[20];
   9  int money;
  10  int kuchun;
  11  char name[40];
  12  char conment[100][100];
  13  char commentcount;
  14 }cm;
  15 typedef struct shopcar {
  16  int shuliang;
  17  cm cmyi;
  18 }car;
  19 typedef struct gmjl {
  20  car jlsp;
  21  struct tm lt;
  22 }jl;
  23 typedef struct users {
  24  char username[20];
  25  char password[20];
  26  int usermony;
  27  car Shopcar[20];
  28  int shopcount;
  29  char youxiang[30];
  30  jl gmjlu[100];
  31  int jilucount;
  32 }uer;
  33 typedef struct wjpass{
  34  char wjname[20];
  35  char beizhu[200];
  36  char youxiang[30];
  37 }wjp;
  38 typedef struct wenti
  39 {
  40  wjp wangji[100];
  41  int wjcount;
  42 }wt;
  43  
  44  
  45 
  46 cm sp[1000] = { { "1",3,450,"可乐","",0 },{ "2",5,600,"辣条","",0 },{ "3",5,582,"酸奶" ,"",0},{ "4",8,888,"红牛","",0 },{"5",7,481,"夹心饼干","",0 } };
  47 ;//初始化信息
  48 uer kehu[1000];//初始化信息
  49 wt weti = { "0",0 };
  50 
  51 char gb[20] = "缪传鹏最帅";
  52 char adm[20] = "admin";
  53 char admpassword[20] = "admin";
  54 
  55 int count = 0;//用户量
  56 int countsp1 , countsp2 = 5;
  57  
  58 void spxx();//输出商品信息 
  59 void zjiasp();//增加商品
  60 void shanchu();//删除商品
  61 void xiugai();//修改商品
  62 void guangliyuan();//管理员界面
  63 void yonhu(int usi);//用户界面 通过用户下标来标识
  64 void zhuc();//注册界面
  65 void den();//登陆界面
  66 void csjm();//初始界面
  67 void exeit();//播放退出动画然后退出
  68 void shopcar(int usi);//购物车界面
  69 void goshopcar(int usi, int shopi);//其中usi为用户下标shopi为商品下标加入购物车
  70 int nametoid(char name2[20]);//通过名字查找下标
  71 void kehuchakansp(int usi);//客户查看商品
  72 void huangying();//欢迎界面
  73 void exeit();
  74 char *passw();//密码不回显
  75 void zhanghuwenti(int usi);//反馈账户问题
  76 void xiugaipassw(int usi);//修改密码
  77 void kehuwent();//初始界面的反馈账户问题
  78 void gly_zhaohu();//管理员找回用户密码
  79 void gly_shanchuwt();//管理员删除问题
  80 void shezhi();//设置界面
  81 void beijingcolor();//背景颜色  未调用
  82 void ziticolor();//字体颜色  未调用
  83 void comment(int shopi);//对商品进行评论
  84 struct tm gwtiame();//返回当前时间
  85 void gwjl(int shul, int shopi);//记录购物记录
  86 void chakangwjl(int usi);//查看购物记录
  87 void chonzhi(int usi);//充值
  88 int spidtoid(char name3[20]);//商品名称返回商品下标
  89 int spidtoid(char name3[20])
  90 {
  91  int flag4 = 0, t1;
  92  for (int i = 0; i < countsp2; i++)
  93  {
  94   if (!strcmp(name3, sp[i].cmyID))
  95   {
  96    flag4 = 1;
  97    t1 = i;
  98   }
  99  }
 100  if (flag4 == 0)
 101  {
 102   return -1;
 103  }
 104  else
 105   return t1;
 106 }
 107 void chonzhi(int usi)
 108 {
 109  while (1)
 110  {
 111   system("cls");
 112   printf("您的余额是:%d\n1————充值余额\n2————返回上一层\n", kehu[usi].usermony);
 113   char flag22 = getch();
 114   if (flag22 == '1')
 115   {
 116    char flag23[20];
 117    printf("请输入缪传鹏最帅以进行充值\n");
 118    gets_s(flag23);
 119    if (!strcmp(flag23, gb))
 120    {
 121     printf("充值中......");
 122     kehu[usi].usermony += 100;
 123     _sleep(1000);
 124     printf("充值成功......");
 125     _sleep(500);
 126    }
 127    else
 128    {
 129     printf("充值中........\n");
 130     _sleep(2000);
 131     printf("充值失败请重试......");
 132     _sleep(500);
 133    }
 134   }
 135   else if (flag22 == '2')
 136   {
 137    yonhu(usi);
 138   }
 139  }
 140 }
 141 void chakangwjl(int usi)
 142 {
 143  while (1)
 144  {
 145   system("cls");
 146   printf("——————购物记录——————\n");
 147   for (int i = 0; i < kehu[usi].jilucount; i++)
 148   {
 149    printf("编号:%d\t", i + 1);
 150    printf("交易时间:");
 151    printf("%d年%d月%d日%d点%d分%d秒\t", kehu[usi].gmjlu[i].lt.tm_year + 1900, kehu[usi].gmjlu[i].lt.tm_mon, kehu[usi].gmjlu[i].lt.tm_mday, kehu[usi].gmjlu[i].lt.tm_hour, kehu[usi].gmjlu[i].lt.tm_min, kehu[usi].gmjlu[i].lt.tm_sec);
 152    printf("商品名称:%s\n", kehu[usi].gmjlu[i].jlsp.cmyi.name);
 153    printf("数量:%d\n", kehu[usi].gmjlu[i].jlsp.shuliang);
 154    printf("交易额:%d\n", kehu[usi].gmjlu[i].jlsp.shuliang*kehu[usi].gmjlu[i].jlsp.cmyi.money);
 155    printf("——————————————————————————————\n");
 156   }
 157   
 158   //printf("———————输入购物记录编号对该商品进行评论——————\n");
 159   printf("1————评论\n2————退出\n");
 160   char fla4 = getch();
 161   if (fla4 == '1')
 162   {
 163    int t2;
 164    printf("请输入要评论商品所对应的购物记录编号\n");
 165    scanf("%d", &t2);
 166    int i = spidtoid(kehu[usi].gmjlu[t2 - 1].jlsp.cmyi.cmyID);
 167    comment(i);
 168   }
 169   if (fla4 == '2')
 170   {
 171    yonhu(usi);
 172   }
 173  }
 174 }
 175 void gwjl(int shopi,int usi)
 176 {
 177  kehu[usi].gmjlu[kehu[usi].jilucount].jlsp = kehu[usi].Shopcar[shopi];
 178  kehu[usi].gmjlu[kehu[usi].jilucount].lt = gwtiame();
 179  kehu[usi].jilucount++;
 180 }
 181 struct tm gwtiame()
 182 {
 183  time_t t;
 184  struct tm*lt;
 185  t=time(NULL);
 186  lt = localtime(&t);
 187  struct tm a = *lt;
 188  return a;
 189 }
 190 void comment(int shopi)
 191 {
 192  printf("%s%d\n", sp[shopi].name,shopi);
 193  printf("——————请输入评论——————\n");
 194  scanf("%s", sp[shopi].conment[sp[shopi].commentcount++]);
 195  printf("评论成功");
 196  printf("按任意键返回");
 197  getch();
 198 }
 199 void ziticolor()
 200 {
 201  while (1)
 202  {
 203   system("cls");
 204   printf("输入想要的字体颜色\n");
 205   printf("0 ————黑色\n1 ———— 蓝色\n2 ———— 绿色\n3———— 浅绿色\n4 ———— 红色\n5 ———— 紫色\n6 ———— 黄色\n7———— 白色\n");
 206   printf("8 ————灰色\n9 ———— 淡蓝色\nA ———— 淡绿色\nB ———— 淡浅绿色\nC ———— 淡红色\nD————淡紫色\nE ———— 淡黄色\nF ————亮白色\nG————退出\n");
 207   char fla2 = getch();
 208   switch (fla2)
 209   {
 210   case '1':system("color 1"); break;
 211   case '2':system("color 2"); break;
 212   case '3':system("color 3"); break;
 213   case '4':system("color 4"); break;
 214   case '5':system("color 5"); break;
 215   case '6':system("color 6"); break;
 216   case '7':system("color 7"); break;
 217   case '8':system("color 8"); break;
 218   case '9':system("color 9"); break;
 219   case 'A':system("color A"); break;
 220   case 'B':system("color B"); break;
 221   case 'C':system("color C"); break;
 222   case 'D':system("color D"); break;
 223   case 'E':system("color E"); break;
 224   case 'F':system("color F"); break;
 225   case '0':system("color 0"); break;
 226   case 'G':shezhi(); break;
 227   default:
 228    break;
 229   }
 230  }
 231 }
 232 void beijingcolor()
 233 {
 234  while (1)
 235  {
 236   system("cls");
 237   printf("——————先输入想要的背景颜色——————\n");
 238   printf("0 ————黑色\n1 ———— 蓝色\n2 ———— 绿色\n3———— 浅绿色\n4 ———— 红色\n5 ———— 紫色\n6 ———— 黄色\n7———— 白色\n");
 239   printf("8 ————灰色\n9 ———— 淡蓝色\nA ———— 淡绿色\nB ———— 淡浅绿色\nC ———— 淡红色\nD————淡紫色\nE ———— 淡黄色\nF ————亮白色\nG————退出\n");
 240   char fla2 = getch();
 241   switch (fla2)
 242   {
 243   case '1':system("color 17"); break;
 244   case '2':system("color 27"); break;
 245   case '3':system("color 37"); break;
 246   case '4':system("color 47"); break;
 247   case '5':system("color 57"); break;
 248   case '6':system("color 67"); break;
 249   case '7':system("color 77"); break;
 250   case '8':system("color 87"); break;
 251   case '9':system("color 97"); break;
 252   case 'A':system("color A7"); break;
 253   case 'B':system("color B7"); break;
 254   case 'C':system("color C7"); break;
 255   case 'D':system("color D7"); break;
 256   case 'E':system("color E7"); break;
 257   case 'F':system("color F7"); break;
 258   case '0':system("color 07"); break;
 259   case 'G':ziticolor(); break;
 260   default:
 261    break;
 262   }
 263  }
 264 }
 265 void shezhi()
 266 {
 267  while (1)
 268  {
 269   system("cls");
 270   printf("1————设置颜色\n2————返回上一层");
 271   char fla1 = getch();
 272   if (fla1 == '1')
 273   {
 274    while (1)
 275    {
 276     system("cls");
 277     printf("1——————黑底白字\n2——————白底绿字\n3——————黑底黄字\n4——————黑底白字\n5——————紫底白字\n6——————返回\n");
 278     char fla2 = getch();
 279     switch (fla2)
 280     {
 281     case '1':system("color 07"); break;
 282     case '2':system("color 72"); break;
 283     case '3':system("color 06"); break;
 284     case '4':system("color 70"); break;
 285     case '5':system("color 57"); break;
 286     case '6':shezhi(); break;
 287     }
 288    }
 289   }
 290   if (fla1 == '2')
 291   {
 292    csjm();
 293   }
 294  }
 295 }
 296 void gly_shanchuwt()
 297 {
 298  system("cls");
 299  printf("————————客户问题————————\n");
 300  if (weti.wjcount == 0)printf("当前没有客户问题\n");
 301  for (int i = 0; i < weti.wjcount; i++)
 302  {
 303   printf("编号:%d\n名字:%s\n邮箱地址:%s\n问题:%s\n\n", i + 1, weti.wangji[i].wjname, weti.wangji[i].youxiang, weti.wangji[i].beizhu);
 304  }
 305  printf("——————————删除问题——————————\n");
 306  int tempbh;
 307  printf("请输入要删除所对应的编号\n");
 308  scanf("%d", &tempbh);
 309  if (tempbh<1 || tempbh>weti.wjcount)
 310  {
 311   while (1)
 312   {
 313    printf("请输入正确的编号\n");
 314    printf("1————重新输入\n2————退出\n");
 315    char fla4 = getch();
 316    if (fla4 == '1')
 317    {
 318     gly_shanchuwt();
 319    }
 320    if (fla4 == '2')
 321    {
 322     kehuwent();
 323    }
 324   }
 325   
 326  }
 327  else
 328  {
 329   printf("正在删除...\n");
 330   _sleep(800);
 331   weti.wangji[tempbh] = weti.wangji[weti.wjcount];
 332   weti.wjcount--;
 333   printf("删除成功.....\n");
 334   _sleep(800);
 335   printf("按任意键返回\n");
 336   getch();
 337  }
 338 }
 339 void gly_zhaohu()
 340 {
 341  system("cls");
 342  printf("————————客户问题————————\n");
 343  if (weti.wjcount == 0)printf("当前没有客户问题\n");
 344  for (int i = 0; i < weti.wjcount; i++)
 345  {
 346   printf("编号:%d\n名字:%s\n邮箱地址:%s\n问题:%s\n\n", i + 1, weti.wangji[i].wjname, weti.wangji[i].youxiang, weti.wangji[i].beizhu);
 347  }
 348  printf("——————————为客户找回密码——————————\n");
 349  int tempbh;
 350  printf("请输入客户姓名所对应的编号\n");
 351  scanf("%d", &tempbh);
 352  if (tempbh<1 || tempbh>weti.wjcount)
 353  {
 354   while (1)
 355   {
 356    printf("请输入正确的编号\n");
 357    printf("1————重新输入\n2————退出\n");
 358    char fla4 = getch();
 359    if (fla4 == '1')
 360    {
 361     gly_zhaohu();
 362    }
 363    if (fla4 == '2')
 364    {
 365     kehuwent();
 366    }
 367   }
 368  }
 369  else
 370  {
 371   int kehui = nametoid(weti.wangji[tempbh-1].wjname);
 372   printf("客户:%s\n密码:%s\n请通过他的邮箱%s告知。\n", kehu[kehui].username, kehu[kehui].password, kehu[kehui].youxiang);
 373   printf("按任意键返回上一级\n");
 374   getch();
 375  }
 376 }
 377 void kehuwent()
 378 {
 379  while (1)
 380  {
 381   system("cls");
 382   printf("————————客户问题————————\n");
 383   if (weti.wjcount == 0)printf("当前没有客户问题\n");
 384   for (int i = 0; i < weti.wjcount; i++)
 385   {
 386    printf("编号:%d\n名字:%s\n邮箱地址:%s\n问题:%s\n\n", i + 1, weti.wangji[i].wjname, weti.wangji[i].youxiang, weti.wangji[i].beizhu);
 387   }
 388   printf("——————客户是上帝 请解决这些问题——————\n");
 389   printf("1————为客户找回密码\n2————删除问题\n3——————解决其他问题\n4————退出\n");
 390   char flag31 = getch();
 391   if (flag31 == '1')
 392   {
 393    gly_zhaohu();
 394   }
 395   if (flag31 == '3')
 396   {
 397    printf("请手动解决\n");
 398    _sleep(1000);
 399    kehuwent();
 400   }
 401   if (flag31 == '2')
 402   {
 403    gly_shanchuwt();
 404   }
 405   if (flag31 == '4')
 406   {
 407    guangliyuan();
 408   }
 409  }
 410 }
 411 void zhanghuwenti(int usi)
 412 {
 413  while (1)
 414  {
 415   system("cls");
 416   printf("1————修改密码\n2————返回上一层\n");
 417   char flag30 = getch();
 418   if (flag30 == '1')
 419   {
 420    xiugaipassw(usi);
 421   }
 422   else if (flag30 == '3')
 423   {
 424    //待增加
 425   }
 426   else if (flag30 == '2')
 427   {
 428    yonhu(usi);
 429   }
 430  }
 431 }
 432 char *passw()
 433 {
 434  char ch, s[20];
 435  int i = 0;
 436  while ((ch = getch()) != '\r')
 437  {
 438   
 439   
 440    if (ch != 8)
 441    {
 442     s[i] = ch;
 443     putchar('*');
 444     i++;
 445    }
 446    else if (i > 0)
 447    {
 448     putchar('\b');
 449     putchar(' ');
 450     putchar('\b');
 451     i--;
 452    }
 453   
 454  }
 455  s[i] = '\0';
 456  return s;
 457 }
 458 void zhaohuipassw() 
 459 {
 460  system("cls");
 461  char nametemp[20],bztemp[200];
 462  printf("请输入账户名\n");
 463  scanf("%s", nametemp);
 464  if (nametoid(nametemp) == -1)
 465  {
 466   while (1)
 467   {
 468    printf("帐户名不存在\n");
 469    printf("1————重新输入\n2————返回上一层\n");
 470    char fla1 = getch();
 471    if (fla1 == '1')zhaohuipassw();
 472    if (fla1 == '2')den();
 473   }
 474  }
 475  printf("请输入备注\n");
 476  scanf("%s", bztemp);
 477  char yxtemp[30];
 478  while (1)
 479  {
 480   printf("请输入您的邮箱地址\n");
 481   scanf("%s", yxtemp);
 482   if (!strcmp(yxtemp, kehu[nametoid(nametemp)].youxiang))
 483   {
 484    strcpy(weti.wangji[weti.wjcount].beizhu, bztemp);
 485    strcpy(weti.wangji[weti.wjcount].wjname, nametemp);
 486    strcpy(weti.wangji[weti.wjcount].youxiang, yxtemp);
 487    weti.wjcount++;
 488    printf("等待管理员处理,处理成功新密码将发送至您的邮箱\n");
 489    _sleep(1000);
 490    break;
 491   }
 492   else
 493   {
 494    while (1)
 495    {
 496     system("cls");
 497     printf("邮箱地址不正确\n");
 498     
 499     printf("1————重新输入\n2————返回上一层\n");
 500     char fla1 = getch();
 501     if (fla1 == '1')
 502     {
 503      system("cls");
 504      break;
 505     }
 506     if (fla1 == '2')den();
 507    }
 508   }
 509  }
 510  
 511 }
 512 void xiugaipassw(int usi)
 513 {
 514  if (usi == -1)
 515  {
 516   char zhaoname[20];
 517   system("cls");
 518   printf("请输入账户名\n");
 519   scanf("%s", zhaoname);
 520   if (zhaoname == "-1")
 521   {
 522    printf("正在返回....");
 523    _sleep(800);
 524    den();
 525   }
 526   if (nametoid(zhaoname) == -1)
 527   {
 528    printf("此帐户名不存在\n");
 529    printf("请重新输入,输入-1返回上一层\n");
 530    xiugaipassw(-1);
 531   }
 532   else
 533   {
 534    while (1)
 535    {
 536     system("cls");
 537     char zhaopass[20];
 538     printf("请输入修改前密码");
 539     scanf("%s", zhaopass);
 540     if (!strcmp(zhaopass, kehu[nametoid(zhaoname)].password))
 541     {
 542      while (1)
 543      {
 544       char newpass1[20], newpass2[20];
 545       printf("请输入新密码\n");
 546       scanf("%s", newpass1);
 547       printf("请再次输入新密码\n");
 548       scanf("%s", newpass2);
 549       if (!strcmp(newpass1, newpass2))
 550       {
 551        printf("修改密码成功...\n");
 552        _sleep(800);
 553        strcpy(kehu[nametoid(zhaoname)].password, newpass1);
 554        printf("正在返回上一层....\n");
 555        _sleep(600);
 556        den();
 557       }
 558       else
 559       {
 560        printf("两次密码不相同请重新输入\n");
 561        _sleep(800);
 562       }
 563      }
 564     }
 565     else
 566     {
 567      printf("密码错误\n1——————重新输入\n2——————退出\n");
 568      _sleep(800);
 569      while (1)
 570      {
 571       char flag28 = getch();
 572       if (flag28 == '1')break;
 573       if (flag28 == '2')den();
 574      }
 575      
 576     }
 577    }
 578    
 579   }
 580  }
 581  else
 582  {
 583   while (1)
 584   {
 585    system("cls");
 586    char zhaopass[20];
 587    printf("请输入修改前密码\n");
 588    strcpy(zhaopass,passw());
 589    if (!strcmp(zhaopass, kehu[usi].password))
 590    {
 591     while (1)
 592     {
 593      char newpass1[20], newpass2[20];
 594      printf("\n请输入新密码\n");
 595      strcpy(newpass1, passw());
 596      printf("\n请再次输入新密码\n");
 597      strcpy(newpass2, passw());
 598      if (!strcmp(newpass1, newpass2))
 599      {
 600       printf("\n修改密码成功...\n");
 601       _sleep(800);
 602       strcpy(kehu[usi].password, newpass1);
 603       printf("正在返回上一层....\n");
 604       _sleep(600);
 605       yonhu(usi);
 606      }
 607      else
 608      {
 609       printf("\n两次密码不相同请重新输入\n");
 610       _sleep(800);
 611       break;
 612      }
 613     }
 614    }
 615    else
 616    {
 617     printf("密码错误\n1——————重新输入\n2——————退出\n");
 618     _sleep(800);
 619     while (1)
 620     {
 621      char flag28 = getch();
 622      if (flag28 == '1')break;
 623      if (flag28 == '2')yonhu(usi);
 624     }
 625    }
 626   }
 627  }
 628 }
 629 void huangying()
 630 {
 631  printf("——————————_——————————欢迎光临——————————————————————");
 632  _sleep(1000);
 633 }
 634 void shopcar(int usi)
 635 {
 636  while (1)
 637  {
 638   system("cls");
 639   printf("——购物车——\n");
 640   if (kehu[usi].shopcount==0)
 641   {
 642    printf("当前您的购物车是空的\n");
 643    _sleep(1000);
 644    printf("按任意键退出");
 645    getchar();
 646    yonhu(usi);
 647   }
 648   for (int i = 0; i < kehu[usi].shopcount; i++)
 649   {
 650    printf("商品编号:%d\n商品名称:%s\n商品数量:%d\n价格:%d\n\n", i+1,kehu[usi].Shopcar[i].cmyi.name, kehu[usi].Shopcar[i].shuliang, kehu[usi].Shopcar[i].cmyi.money *kehu[usi].Shopcar[i].shuliang);
 651   }
 652   printf("1————结算\n2————删除\n3————退出\n");
 653   char flag18 = getch();
 654   if (flag18 == '2')
 655   {
 656    while (1)
 657    {
 658     system("cls");
 659     printf("请输入所需删除的商品的编号\n");
 660     printf("————————————————————————\n");
 661     for (int i = 0; i < kehu[usi].shopcount; i++)
 662     {
 663      printf("商品编号:%d\n商品名称:%s\n商品数量:%d\n价格:%d\n\n", i+1, kehu[usi].Shopcar[i].cmyi.name, kehu[usi].Shopcar[i].shuliang, kehu[usi].Shopcar[i].cmyi.money *kehu[usi].Shopcar[i].shuliang);
 664     }
 665     printf("————————————————————————\n");
 666     int flag19;
 667     getchar();
 668     scanf("%d", &flag19);
 669     system("cls");
 670     if (flag19 == -1)shopcar(usi);
 671     if (flag19 > kehu[usi].shopcount)
 672     {
 673      printf("编号错误请重新输入\n");
 674      _sleep(1000);
 675     }
 676     else if (flag19 > 0)
 677     {
 678      printf("正在删除......");
 679      _sleep(800);
 680      system("cls");
 681      kehu[usi].Shopcar[flag19] = kehu[usi].Shopcar[kehu[usi].shopcount - 1];
 682      kehu[usi].shopcount--;
 683      printf("删除成功......");
 684      shopcar(usi);
 685     }
 686     else
 687     {
 688      printf("编号错误请重新输入\n");
 689      _sleep(1000);
 690     }
 691    }
 692   }
 693   else if (flag18 == '1')
 694   {
 695    while (1)
 696    {
 697     system("cls");
 698     printf("请输入所需购买的商品的编号\n");
 699     printf("————————————————————————\n");
 700     for (int i = 0; i < kehu[usi].shopcount; i++)
 701     {
 702      printf("商品编号:%d \n商品名称:%s \n商品数量:%d \n价格:%d \n\n", i + 1, kehu[usi].Shopcar[i].cmyi.name, kehu[usi].Shopcar[i].shuliang, kehu[usi].Shopcar[i].cmyi.money *kehu[usi].Shopcar[i].shuliang);
 703     }
 704     printf("————————————————————————\n");
 705     int flag20;
 706     getchar();
 707     scanf("%d", &flag20);
 708     system("cls");
 709     if (flag20 == -1)shopcar(usi);
 710     if (flag20 > kehu[usi].shopcount||flag20<1)
 711     {
 712      printf("编号错误请重新输入\n");
 713      _sleep(1000);
 714     }
 715     else if (flag20 > 0)
 716     {
 717      printf("商品编号:%d\n商品名称:%s\n商品数量:%d\n价格:%d\n\n", flag20, kehu[usi].Shopcar[flag20-1].cmyi.name, kehu[usi].Shopcar[flag20-1].shuliang, kehu[usi].Shopcar[flag20-1].cmyi.money *kehu[usi].Shopcar[flag20-1].shuliang);
 718 
 719      if (kehu[usi].Shopcar[flag20-1].cmyi.money *kehu[usi].Shopcar[flag20-1].shuliang>kehu[usi].usermony)
 720      {
 721       while (1)
 722       {
 723        system("cls");
 724        printf("余额不足请前往充值\n");
 725        _sleep(1000);
 726        printf("1————前往充值\n2————返回上一层\n");
 727        char fal4 = getch();
 728        if (fal4 == '1')
 729        {
 730         chonzhi(usi);
 731        }
 732        if (fal4 == '2')
 733        {
 734         shopcar(usi);
 735        }
 736       }
 737       //选择
 738      }
 739      else
 740      {
 741       while (1)
 742       {
 743        system("cls");
 744        printf("商品名称:%s商品数量:%d\n总价为:%d\nY——确定   N——取消\n", kehu[usi].Shopcar[flag20 - 1].cmyi.name, kehu[usi].Shopcar[flag20 - 1].shuliang, kehu[usi].Shopcar[flag20-1].cmyi.money *kehu[usi].Shopcar[flag20-1].shuliang);
 745        char flag21 = getch();
 746        if (flag21 == 'Y')
 747        {
 748         printf("正在交易......");
 749         _sleep(800);
 750         system("cls");
 751         gwjl(flag20 - 1, usi);
 752         kehu[usi].Shopcar[flag20] = kehu[usi].Shopcar[kehu[usi].shopcount - 1];
 753         kehu[usi].shopcount--;
 754         kehu[usi].usermony -= kehu[usi].Shopcar[flag20].cmyi.money *kehu[usi].Shopcar[flag20].shuliang;
 755         printf("交易成功......");
 756         _sleep(200);
 757         shopcar(usi);
 758        }
 759        if (flag21 == 'N')
 760        {
 761         printf("正在取消......");
 762         _sleep(800);
 763         system("cls");
 764         
 765         printf("已取消......");
 766         _sleep(200);
 767         
 768         shopcar(usi);
 769         //取消交易
 770        }
 771       }
 772      }
 773     }
 774    }
 775   }
 776   else if (flag18 == '3')
 777   {
 778    printf("正在退出购物车.....");
 779    _sleep(600);
 780    yonhu(usi);
 781   }
 782  }
 783 }
 784 void spxx()
 785 {
 786  system("cls");
 787  
 788  for (int i = 0; i < countsp2; i++)
 789  {
 790   printf("商品名称: %s\n商品ID: %s\n商品价格: %d\n商品库存: %d\n", sp[i].name, sp[i].cmyID, sp[i].money, sp[i].kuchun);
 791   for (int j = 0; j < sp[i].commentcount; j++)
 792    printf("第%d评论:%s",j+1,sp[i].conment[j]);
 793   printf("\n\n");
 794  }
 795  
 796 }
 797 void goshopcar(int usi,int shopi)
 798 {
 799  while (1)
 800  {
 801   system("cls");
 802   printf("商品名称:%s\n请输入所需数量:  ", sp[shopi].name);
 803   int sl;
 804   scanf("%d", &sl);
 805   if (sl == -1)kehuchakansp(usi);
 806   if (sl > sp[shopi].kuchun)
 807   {
 808    printf("库存不足 请减少数量\n");
 809    printf("1————重新输入\n2————返回上一层\n");
 810    char fla1 = getch();
 811    if (fla1 == '1')break;
 812    if (fla1 == '2')kehuchakansp(usi);
 813    _sleep(1000);
 814   }
 815   else
 816   {
 817    while (1)
 818    {
 819     system("cls");
 820     printf("商品名称:%s\n所选数量:%d\n", sp[shopi].name,sl);
 821     printf("总价为:%d\nY——确定   N——取消\n", sp[shopi].money*sl);
 822     char flag17 = getch();
 823     if (flag17 == 'Y')
 824     {
 825      printf("正在加入\n");
 826      _sleep(800);
 827      kehu[usi].Shopcar[kehu[usi].shopcount].cmyi = sp[shopi];
 828      kehu[usi].Shopcar[kehu[usi].shopcount].shuliang = sl;
 829      kehu[usi].shopcount++;
 830      printf("加入购物车成功");
 831      _sleep(800);
 832      system("cls");
 833      while (1)
 834      {
 835       system("cls");
 836       printf("1————前往购物车结算\n2————返回商品信息");
 837       char flag18 = getch();
 838       if (flag18 == '1')
 839       {
 840        shopcar(usi);
 841       }
 842       if (flag18 == '2')kehuchakansp(usi);
 843      }
 844     }
 845     else if (flag17 == 'N')
 846     {
 847      printf("正在取消.......");
 848      _sleep(800);
 849      kehuchakansp(usi);
 850      printf("已取消");
 851      _sleep(1000);
 852      kehuchakansp(usi);
 853     }
 854    }
 855    
 856   }
 857  }
 858 }
 859 int nametoid(char name2[20])
 860 {
 861  int flag4 = 0, t1;
 862  for (int i = 0; i < count; i++)
 863  {
 864   if (!strcmp(name2, kehu[i].username))
 865   {
 866    flag4 = 1;
 867    t1 = i;
 868   }
 869  }
 870  if (flag4 == 0)
 871  {
 872   return -1;
 873  }
 874  else
 875   return t1;
 876 }
 877 void kehuchakansp(int usi)
 878 {
 879  while (1)
 880  {
 881   system("cls");
 882   spxx();
 883   printf("——————————————————————欢迎来到本超市————————————————————\n\n");
 884   printf("1————将商品加入购物车\n2————退出超市\n");
 885   char fla2 = getch();
 886   if (fla2 == '1')
 887   {
 888    while (1)
 889    {
 890     spxx();
 891     printf("——————————————————————欢迎来到本超市————————————————————\n");
 892     printf("————————————————————输入商品id以加入购物车——————————————————\n");
 893     char spid5[20];
 894     scanf("%s", spid5);
 895     if (!strcmp(spid5, "-1"))yonhu(usi);
 896     int flag12 = 1, t2;
 897     for (int i = 0; i < countsp2; i++)
 898      if (!strcmp(spid5, sp[i].cmyID))
 899      {
 900       flag12 = 0;
 901       t2 = i;
 902      }
 903     if (flag12)
 904     {
 905      printf("没有此id对应的商品\n");
 906      _sleep(1000);
 907     }
 908     else
 909     {
 910      while (1)
 911      {
 912       system("cls");
 913       printf("————————————\n已选中商品:%s\n价格:%d\n库存:%d\n\n\n", sp[t2].name, sp[t2].money, sp[t2].kuchun);
 914       printf("1——————加入购物车\n2——————返回商品信息\n");
 915       char flag13;
 916       flag13 = getch();
 917       if (flag13 == '1')
 918       {
 919        goshopcar(usi, t2);
 920       }
 921       else if (flag13 == '2')
 922       {
 923        kehuchakansp(usi);
 924       }
 925      }
 926     }
 927    }
 928   }
 929   if (fla2 == '2')
 930   {
 931    yonhu(usi);
 932   }
 933  }
 934  
 935 }
 936 void exeit()
 937 {
 938  system("cls");
 939  printf("——————欢迎下次再来——————");
 940  
 941  FILE*fp;
 942  fp = fopen("chaoshiahuju", "wb");
 943  fwrite(&count, sizeof(int), 1, fp);
 944  fwrite(&countsp2, sizeof(int), 1, fp);
 945  for (int i = 0; i<countsp2; i++)
 946   fwrite(&sp[i], sizeof(cm), 1, fp);
 947  for (int i = 0; i < count; i++)
 948   fwrite(&kehu[i], sizeof(users), 1, fp);
 949  fwrite(&weti, sizeof(wt), 1, fp);
 950  fclose(fp);
 951  _sleep(1000);
 952  exit(0);
 953  
 954 }
 955 void zjiasp()
 956 {
 957  system("cls");
 958  char spid2[20];
 959  getchar();
 960  printf("请输入商品id\n");
 961  
 962  gets_s(spid2);
 963  
 964  
 965  if (spid2 == "-")guangliyuan();
 966  int flag9 = 0, t2;
 967  for (int i = 0; i<countsp2; i++)
 968   if (!strcmp(spid2, sp[i].cmyID))
 969   {
 970    flag9 = 1;
 971    t2 = i;
 972   }
 973  if (flag9)
 974  {
 975   printf("id已存在请重新输入\n");
 976   _sleep(1000);
 977   zjiasp();
 978   
 979  }
 980  else
 981  {
 982   char spname[40];
 983   int spmony,spkuchun;
 984   printf("请输入商品名称\n");
 985   getchar();
 986   scanf("%s", spname);
 987   printf("请输入商品价格\n");
 988   scanf("%d", &spmony);
 989   printf("请输入商品库存\n");
 990   scanf("%d", &spkuchun);
 991   strcpy(sp[countsp2].name, spname);
 992   strcpy(sp[countsp2].cmyID, spid2);
 993   sp[countsp2].kuchun = spkuchun;
 994   sp[countsp2].money = spmony;
 995   sp[countsp2].commentcount = 0;
 996   countsp1++;
 997   countsp2++;
 998   printf("增加商品成功");
 999   _sleep(1000);
1000   guangliyuan();
1001  }
1002 }
1003 void shanchu()
1004 {
1005  system("cls");
1006  spxx();
1007  printf("1——————删除商品\n2——————返回上一层\n");
1008  char ff = getch();
1009  if (ff == '2')guangliyuan();
1010  if (ff == '1')
1011  {
1012   system("cls");
1013   spxx();
1014   char spid2[20];
1015   printf("————————————请输入要删除的商品的id————————————\n");
1016   scanf("%s", spid2);
1017   if (!strcmp(spid2, "-1"))guangliyuan();
1018   int flag9 = 1, t2;
1019   for (int i = 0; i < countsp2; i++)
1020    if (!strcmp(spid2, sp[i].cmyID))
1021    {
1022     flag9 = 0;
1023     t2 = i;
1024    }
1025   if (flag9)
1026   {
1027    printf("没有此id对应的商品\n");
1028    _sleep(1000);
1029    shanchu();
1030   }
1031   else
1032   {
1033    printf("Y——确定   N——取消\n");
1034    char flag21 = getch();
1035    if (flag21 == 'Y')
1036    {
1037     cm temp = sp[t2];
1038     sp[t2] = sp[countsp2 - 1];
1039     sp[countsp2 - 1] = temp;
1040     countsp2--;
1041     printf("正在删除.....\n");
1042     _sleep(1000);
1043     printf("删除成功");
1044     _sleep(1000);
1045     guangliyuan();
1046    }
1047    if (flag21 == 'N')
1048    {
1049     printf("正在取消......");
1050     _sleep(800);
1051     system("cls");
1052     printf("已取消......");
1053     _sleep(200);
1054     guangliyuan();
1055     //取消交易
1056    }
1057   }
1058  }
1059  if (ff != '2'&&ff != '1')shanchu();
1060 }
1061 void xiugai()
1062 {
1063  system("cls");
1064  spxx();
1065  printf("1——————修改商品\n2——————返回上一层\n");
1066  char ff = getch();
1067  if (ff == '2')guangliyuan();
1068  if (ff == '1')
1069  {
1070   system("cls");
1071   spxx();
1072   printf("————————————请输入要修改的商品的id————————————\n");
1073   char spid3[20];
1074   gets_s(spid3);
1075   if (spid3 == "-")guangliyuan();
1076   int flag9 = 1, t3;
1077   for (int i = 0; i < countsp2; i++)
1078    if (!strcmp(spid3, sp[i].cmyID))
1079    {
1080     flag9 = 0;
1081     t3 = i;
1082    }
1083   if (flag9)
1084   {
1085    printf("没有此商品请重新输入");
1086    _sleep(1000);
1087    xiugai();
1088   }
1089   else
1090   {
1091    printf("商品修改前名称:%s\n请输入商品新的名称\n", sp[t3].name);
1092    scanf("%s", sp[t3].name);
1093    printf("商品修改前价格:%d\n请输入商品新的价格\n", sp[t3].money);
1094    scanf("%d", &sp[t3].money);
1095    printf("商品修改前库存:%d\n请输入商品新的库存\n", sp[t3].kuchun);
1096    scanf("%d", &sp[t3].kuchun);
1097    printf("修改成功");
1098    _sleep(1000);
1099    xiugai();
1100   }
1101   if (ff != '1'&&ff != '2')
1102   {
1103    xiugai();
1104   }
1105  }
1106 
1107 }
1108 void guangliyuan()
1109 {
1110  while (1)
1111  {
1112   system("cls");
1113   printf("1————增加商品\n2————删除商品\n3————修改商品信息\n4————查看商品信息\n5————查看客户问题\n6——————返回登录\n");
1114   char flag7 = getch();
1115   if (flag7 == '1')
1116   {
1117    zjiasp();
1118    guangliyuan();
1119   }
1120   else if (flag7 == '2')
1121   {
1122    shanchu();
1123   }
1124   else if (flag7 == '3')
1125   {
1126    xiugai();
1127    guangliyuan();
1128   }
1129   else if (flag7 == '4')
1130   {
1131    
1132    spxx();
1133    printf("————————按任意键返回上一层————————");
1134    getchar();
1135    getch();
1136    
1137    guangliyuan();
1138   }
1139   else if (flag7 == '6')
1140   {
1141    den();
1142   }
1143   else if (flag7 == '5')
1144   {
1145    kehuwent();
1146   }
1147  }
1148 }
1149 void yonhu(int usi)
1150 {
1151  while (1)
1152  {
1153   system("cls");
1154   char flag10;
1155   printf("1————查看商品\n2————查看购物车\n3————查看余额|充值余额\n4————账户问题\n5————查看购物记录\n6————退出登录\n");
1156   flag10=getch();
1157   if (flag10 == '1')
1158   {
1159    kehuchakansp(usi);
1160   }
1161   else if (flag10 == '2')
1162   {
1163    shopcar(usi);
1164   }
1165   else if (flag10 == '3')
1166   {
1167    chonzhi(usi);
1168   }
1169   else if (flag10 == '6')
1170   {
1171    den();
1172   }
1173   else if (flag10 == '4')
1174   {
1175    zhanghuwenti(usi);
1176   }
1177   else if(flag10=='5')
1178   {
1179    chakangwjl(usi);
1180   }
1181  }
1182 }
1183 void zhuc()
1184 {
1185  char usname[20];
1186  char  password[20], passwordag[20];
1187  system("cls");
1188  printf("请输入用户名\n");
1189  scanf("%s", usname);
1190  int flag3 = 0;
1191  for (int i = 0; i < count; i++)
1192  {
1193   if (!strcmp(usname, kehu[i].username))flag3 = 1;
1194  }
1195  if (flag3)
1196  {
1197   printf("用户名已经存在请重新输入");
1198   _sleep(1000);
1199   zhuc();
1200  }
1201  else
1202  {
1203   int flag6 = 0;
1204   while (1)
1205   {
1206    printf("请输入密码\n");
1207    strcpy(password, passw());
1208    system("cls");
1209    printf("请再次输入密码\n");
1210    strcpy(passwordag, passw());
1211    if (strcmp(password, passwordag))
1212    {
1213     printf("两次密码不相同,请重新输入密码\n");
1214     _sleep(1000);
1215    }
1216    else
1217    {
1218     system("cls");
1219     printf("请输入您的邮箱地址\n");
1220     scanf("%s", kehu[count].youxiang);
1221     system("cls");
1222     printf("注册成功");
1223     _sleep(1000);
1224     strcpy(kehu[count].username, usname);
1225     strcpy(kehu[count].password, password);
1226     kehu[count].jilucount = 0;
1227     kehu[count].usermony = 100;
1228     kehu[count++].shopcount = 0;
1229     flag6 = 1;
1230     break;
1231    }
1232   }
1233   if (flag6)den();
1234  }
1235 }
1236 void den()
1237 {
1238  char flag1;
1239  while (1)
1240  {
1241   system("cls");
1242   printf("1——客户登录\n2——管理员登录\n3——返回上一层\n");
1243   flag1 = getch();
1244   if (flag1 == '1')
1245   {
1246    while (1)
1247    {
1248     char name1[20];
1249     char password2[20];
1250     system("cls");
1251     printf("请输入账户名\n");
1252     scanf("%s", name1);
1253     if (!strcmp(name1, "-1"))break;
1254     int flag4 = 0, t1;
1255     for (int i = 0; i < count; i++)
1256     {
1257      if (!strcmp(name1, kehu[i].username))
1258      {
1259       flag4 = 1;
1260       t1 = i;
1261      }
1262     }
1263     if (flag4 == 0)
1264     {
1265      while (1)
1266      {
1267       printf("用户名不存在\n");
1268       printf("1————重新输入\n2————返回上一层\n");
1269       char fla1 = getch();
1270       if (fla1 == '1')break;
1271       if (fla1 == '2')den();
1272       _sleep(1000);
1273      }
1274     }
1275     else
1276     {
1277      printf("请输入密码\n");
1278      strcpy(password2, passw());
1279      if (!strcmp(password2, "-1"))den();
1280      if (!strcmp(password2, kehu[t1].password))
1281      {
1282       system("cls");
1283       printf("登入成功");
1284       _sleep(1000);
1285       
1286       yonhu(t1);
1287       
1288      }
1289      else
1290      {
1291       printf("密码不正确");
1292       _sleep(1000);
1293      }
1294     }
1295    }
1296   }
1297   if (flag1 == '2')
1298   {
1299    char name2[20];
1300    char password3[20];
1301    while (1)
1302    {
1303     system("cls");
1304     printf("请输入账户名\n");
1305     scanf("%s", name2);
1306     if (!strcmp(name2, "-1"))break;
1307     if (strcmp(name2, adm))
1308     {
1309      while (1)
1310      {
1311       printf("用户名不存在\n");
1312       printf("1————重新输入\n2————返回上一层\n");
1313       char fla1 = getch();
1314       if (fla1 == '1')break;
1315       if (fla1 == '2')den();
1316       _sleep(1000);
1317      }
1318      
1319     }
1320     else
1321     {
1322      printf("请输入密码\n");
1323      strcpy(password3, passw());
1324      if (strcmp(password3, admpassword))
1325      {
1326       printf("密码不正确\n");
1327      }
1328      else
1329      {
1330       system("cls");
1331       printf("登录成功");
1332       _sleep(1000);
1333       //后续程序
1334       guangliyuan();
1335       
1336      }
1337     }
1338    }
1339    exeit();
1340   }
1341   if (flag1 == '3')
1342   {
1343    csjm();
1344   }
1345  }
1346 }
1347 void csjm() 
1348 {
1349  while (1)
1350  {
1351   system("cls");
1352   char flag5 = 0;
1353   char flag2 = '0';
1354   while (1)
1355   {
1356    system("cls");
1357    printf("1——登录\n2——注册\n3——账户问题\n4——设置\n5——退出\n");
1358    flag2 = getch();
1359    if (flag2 == '1')
1360    {
1361     den();
1362     break;
1363    }
1364    if (flag2 == '2')
1365    {
1366     zhuc();
1367     break;
1368    }
1369    if (flag2 == '5')
1370    {
1371     system("cls");
1372     printf("——————欢迎下次再来——————");
1373     _sleep(1000);
1374     exeit();
1375     
1376    }
1377    if (flag2 == '3')
1378    {
1379     while (1)
1380     {
1381      system("cls");
1382      printf("1————修改密码\n2————找回密码\n3————返回上一级\n");
1383      char flag29 = getch();
1384      if (flag29 == '1')
1385      {
1386       xiugaipassw(-1);
1387      }
1388      if (flag29 == '2')
1389      {
1390       zhaohuipassw();
1391      }
1392      if (flag29 == '3')break;
1393     }
1394     
1395    }
1396    if (flag2 == '4')
1397    {
1398     shezhi();
1399    }
1400   }
1401  }
1402 }
1403 int main()
1404 {
1405  FILE*fp;
1406  fp = fopen("chaoshiahuju", "rb+");
1407  fread(&count, sizeof(int), 1, fp);
1408  fread(&countsp2, sizeof(int), 1, fp);
1409  for (int i = 0; i<countsp2; i++)
1410   fread(&sp[i], sizeof(cm), 1, fp);
1411  for (int i = 0; i < count; i++)
1412   fread(&kehu[i], sizeof(users), 1, fp);
1413  fread(&weti, sizeof(wt), 1, fp);
1414  fclose(fp);
1415  /*本代码及设计由缪传鹏版权所有 未经允许不得商用 The copyright of the design program belongs to Miaoz, it cannot be used for commerce without permission.*/
1416  system("color 70");
1417  csjm();
1418  return 0;
1419 }