C——货物管理系统

   1 #include <stdio.h>
   2 #include <stdlib.h>
   3 #include <string.h>
   4 #include <conio.h>        /*屏幕操作函数库*/
   5 
   6 /*主管权限数据格式化*/
   7 #define HEADER1_zg "-----------------------------货物管理系统(主管)--------------------------------\n"
   8 #define HEADER2_zg "| 编号 |  名称  | 进价 | 售价 | 产地 | 生产日期 |保质期| 库存 | 销量 |  收入  |\n"
   9 #define HEADER3_zg "|------|--------|------|------|------|----------|------|------|------|--------|\n"
  10 #define FORMAT_zg  "|%-6s|%-8s|%.2f |%.2f |%6s|%-4d%3d%3d| %4d | %4d | %4d |%.2f |\n"
  11 #define DATA_zg p->data.numbs,p->data.name,p->data.purchase,p->data.sales,p->data.place,p->data.Date.year,p->data.Date.mouth,p->data.Date.day,p->data.days,p->data.stock,p->data.salesnumb,p->data.income
  12 #define END_zg     "-------------------------------------------------------------------------------\n"
  13 
  14 /*普通权限数据格式化*/
  15 #define HEADER1_pt "----------------货物管理系统(普通)--------------------\n"
  16 #define HEADER2_pt "| 编号 |  名称  | 售价 | 产地 | 生产日期 |保质期| 销量 |\n"
  17 #define HEADER3_pt "|------|--------|------|------|----------|------|------|\n"
  18 #define FORMAT_pt  "|%-6s|%-8s| %.2f|%6s|%-4d%3d%3d| %4d | %4d |\n"
  19 #define DATA_pt p->data.numbs,p->data.name,p->data.sales,p->data.place,p->data.Date.year,p->data.Date.mouth,p->data.Date.day,p->data.days,p->data.salesnumb
  20 #define END_pt    "--------------------------------------------------------\n"
  21 
  22 int yhflag=0;        /*是否优惠*/
  23 int incomflag=0;   /*是否计算收入*/
  24 int dateflag=0;   /*是否输入日期*/
  25 int saveflag=0;   /*是否需要保存*/
  26 char zg[]="zg";
  27 char pt[]="pt";
  28 
  29 struct date
  30 {
  31     int year;
  32     int mouth;
  33     int day;
  34 };
  35 
  36 /*货物基本信息*/
  37 struct goods
  38 {
  39     char numbs[6];    /*编号*/
  40     char name[10];        /*名称*/
  41     float purchase;        /*进价*/
  42     float sales;    /*售价*/
  43     char place[10];    /*产地*/
  44     struct date Date;    /*生产日期*/
  45     int days;  /*保质期*/
  46     int datecha; /*保质期截止日期差*/
  47     int stock;    /*库存量*/
  48     int  salesnumb;    /*销量*/
  49     float income;    /*收入*/
  50 };
  51 typedef struct node
  52 {
  53     struct goods data;
  54     struct node *next;
  55 }Node,*Link;
  56 
  57 /*格式化输出主管表头*/
  58 void printheader_zg()
  59 {
  60     printf(HEADER1_zg);
  61     printf(HEADER2_zg);
  62     printf(HEADER3_zg);
  63 }
  64 /*格式化输出普通表头*/
  65 void printheader_pt()
  66 {
  67     printf(HEADER1_pt);
  68     printf(HEADER2_pt);
  69     printf(HEADER3_pt);
  70 }
  71 /*格式化输出主管表中数据*/
  72 void printdata_zg(Node *pp)
  73 {
  74     Node *p;
  75     p=pp;
  76     printf(FORMAT_zg,DATA_zg);
  77 }
  78 /*格式化输出普通表中数据*/
  79 void printdata_pt(Node *pp)
  80 {
  81     Node *p;
  82     p=pp;
  83     printf(FORMAT_pt,DATA_pt);
  84 }
  85 /*输出案件错误信息*/
  86 void wrong()
  87 {
  88     printf("\n\n\n\n*******错误:输入错误,按任意键继续*******\n");
  89     getchar();
  90 }
  91 /*输出为查找到货物的信息*/
  92 void Nofind()
  93 {
  94     printf("\n*****无此货物信息!*****\n");
  95     getchar();
  96 }
  97 /*主管显示菜单*/
  98 void Disp(Link L,char s[])
  99 {
 100     Node *p;
 101     p=L->next;
 102     if (!p) /*空,则*/
 103     {
 104         printf("\n没有录入货物信息\n");
 105         getchar();
 106         return ;
 107     }    
 108     printf("\n\n");
 109     if (strcmp(zg,s)==0)
 110     {
 111         printheader_zg();
 112         while (p)
 113         {
 114             printdata_zg(p);
 115             p=p->next;
 116             printf(HEADER3_zg);
 117         }
 118     } 
 119     else
 120     {
 121         printheader_pt();
 122         while (p)
 123         {
 124             printdata_pt(p);
 125             p=p->next;
 126             printf(HEADER3_pt);
 127         }
 128     }
 129 
 130     getchar();
 131 }
 132 /*返回链表中符合要求的节点的指针,s[]保存用户查找内容,NaorNum[]保存按什么查找”name,num“*/
 133 Node *Locate(Link L,char s[],char NaorNum[] )
 134 {
 135     Node *p;
 136     if (strcmp(NaorNum,"num")==0)
 137     {
 138         p=L->next;
 139         while (p)
 140         {
 141             if (strcmp(p->data.numbs,s)==0)
 142                 return p;
 143             p=p->next;
 144         }
 145     } 
 146     else if (strcmp(NaorNum,"name")==0)
 147     {
 148         p=L->next;
 149         while (p)
 150         {
 151             if (strcmp(p->data.name,s)==0)
 152                 return p;
 153             p=p->next;
 154         }
 155     }
 156     return 0;     /*未找到,返回空指针*/
 157 }
 158 /*平润年判断*/
 159 int Year_pd(int year)
 160 {
 161     int flag;
 162     if ((year%4==0&&year%100!=0)||year%400==0)
 163     {/*闰年*/
 164         flag=0;
 165     } 
 166     else
 167     {/*平年*/
 168         flag=1;
 169     }
 170     return flag;
 171 }
 172 /*月份对应的天数*/
 173 int Day_pd(int mouth,int flag)
 174 {
 175     int day;
 176     switch(mouth)
 177     {
 178     case 1:
 179     case 3:
 180     case 5:
 181     case 7:
 182     case 8:
 183     case 10:
 184     case 12:day=31;break;
 185     case 4:
 186     case 6:
 187     case 9:
 188     case 11:day=30;break;
 189     case 2:if (flag) day=28;
 190            else day=29;break;
 191     }
 192     return day;
 193 }
 194 /*输入字符串,并进行验证,用户的输入通过*t输出*/
 195 void S_input(char *t,int lens,char *notice)
 196 {
 197     char str[255];
 198     do 
 199     {
 200         printf(notice);
 201         scanf("%s",str);
 202         if(strlen(str)>lens)
 203             printf("\n超过了要求长度,重新输入\n");
 204     } while (strlen(str)>lens);
 205     strcpy(t,str);
 206 }
 207 
 208 int Num_input(char *notice)
 209 {
 210     int a;
 211     do 
 212     {
 213         printf(notice);
 214         scanf("%d",&a);
 215         if(a<0) printf("\n数字必须大于零\n");
 216     } while (a<0);
 217     return a;
 218 }
 219 /*输入月份进行验证*/
 220 int Mou_input(char *notice)
 221 {
 222     int mouth=0;
 223     do 
 224     {
 225         printf(notice);
 226         scanf("%d",&mouth);
 227         if (mouth>12||mouth<0) 
 228             printf("\n月份必须在(1~12)之间!\n");
 229     } while (mouth>12||mouth<0);
 230     return mouth;
 231 }
 232 /*输入天数进行验证*/
 233 int Day_input(char *notice,int year,int mouth)
 234 {
 235     int day=0;
 236     int nlimit,flag;
 237     flag=Year_pd(year);
 238     do 
 239     {
 240         printf(notice);
 241         scanf("%d",&day);
 242         nlimit=Day_pd(mouth,flag);
 243         if (day>nlimit||day<0) 
 244             printf("\n日期必须在(1~%d)之间!\n",nlimit);
 245     } while (day>nlimit||mouth<0);
 246     return day;
 247 }
 248 /*增加货物记录*/
 249 void Add_goods(Link L)
 250 {
 251     Node *p,*r,*s;
 252     char ch,flag=0,num[10];
 253     r=L;
 254     s=L->next;
 255     system("cls");
 256     Disp(L,zg);
 257     while (1)
 258     {
 259         while (1) /*输入编号,保证没有被使用,若输入为0,则推出*/
 260         {
 261             S_input(num,6,"输入货物编号(按‘0’返回菜单界面):");
 262             flag=0;
 263             if (strcmp(num,"0")==0) return;
 264             s=L->next;
 265             while (s) /*查询货物编号是否存在,若存在,要去输入新编号*/
 266             {
 267                 if (strcmp(s->data.numbs,num)==0)
 268                 {
 269                     flag=1;
 270                     break;
 271                 }
 272                 s=s->next;
 273             }
 274             if (flag)
 275             {
 276                 getchar();
 277                 printf("货物编号:%s已存在,是否要重新输入?(y/n)",num);
 278                 scanf("%c",&ch);
 279                 if(ch=='y'||ch=='Y')
 280                     continue;
 281                 else
 282                     return;
 283             }
 284             else
 285                 break;
 286         }
 287         p=(Node *)malloc(sizeof(Node));
 288         if (!p)
 289         {
 290             printf("\n没有申请到");
 291             return; /*返回到主界面*/
 292         }
 293         strcpy(p->data.numbs,num);
 294         S_input(p->data.name,8,"名称:");
 295         p->data.purchase=Num_input("进价:");
 296         p->data.sales=Num_input("售价:");
 297         S_input(p->data.place,6,"产地:");
 298         p->data.Date.year=Num_input("成产日期:年:");
 299         p->data.Date.mouth=Mou_input("         月:");
 300         p->data.Date.day=Day_input("         日:",p->data.Date.year,p->data.Date.mouth);
 301         p->data.days=Num_input("保质期(天):");
 302         p->data.stock=Num_input("库存:");
 303         p->data.salesnumb=Num_input("销量:");
 304         p->data.income=00;
 305         p->next=r->next;
 306         r->next=p; /*前插*/
 307     }
 308     return ;
 309 }
 310 int select(int a,int b)               /*菜单选择*/
 311 {
 312     int n;
 313     do 
 314     {
 315         printf("\n\n");
 316         printf("%15s"," ");
 317         printf("请输入一个数(%d~%d): [ ]\b\b",a,b);
 318         scanf("%d",&n);
 319     } while (n<a||n>b);
 320     return n;
 321 }
 322 /*实时计算实际收益*/
 323 void Sum_Income(Link L)
 324 {
 325     Node *p;
 326     p=L->next;
 327     while (p)
 328     {
 329         p->data.income=p->data.salesnumb*(p->data.sales-p->data.purchase);
 330         p=p->next;
 331     }
 332     incomflag=1;
 333     return ;
 334 }
 335 /*查询的通用方法*/
 336 void Sea_by_ways(Link L,Node *p,char s[])
 337 {
 338     if (p)
 339     {
 340         if (strcmp(zg,s)==0)
 341         {
 342             printheader_zg();
 343             printdata_zg(p);
 344             printf(END_zg);
 345             printf("按任意键返回...");
 346             getchar();
 347         }
 348         else
 349         {
 350             printheader_pt();
 351             printdata_pt(p);
 352             printf(END_pt);
 353             printf("按任意键返回...");
 354             getchar();
 355         }
 356     } 
 357     else
 358     {
 359         Nofind();
 360         getchar();
 361     }    
 362 }
 363 /*按编号或货物名称查询*/
 364 void Sea_by_name(Link L,char s[])
 365 {
 366     Node *p;
 367     char ss[20];
 368     system("cls");
 369     S_input(ss,10,"请输入要查找的货物名称:");
 370     p=Locate(L,ss,"name");
 371     Sea_by_ways(L,p,s);
 372 }
 373 void Sea_by_num(Link L,char s[])
 374 {
 375     Node *p;
 376     char ss[20];
 377     system("cls");
 378     S_input(ss,10,"请输入要查找的货物编号:");
 379     p=Locate(L,ss,"num");
 380     Sea_by_ways(L,p,s);
 381 }
 382 /*日期相对于本年的天数*/
 383 int Sum_day(int year,int mouth,int day)
 384 {
 385     int i,flag,days,sum=0;
 386     flag=Year_pd(year);
 387     for (i=1;i<mouth;i++)
 388     {
 389         days=Day_pd(i,flag);
 390         sum+=days;
 391     }
 392     return sum+day;
 393 }
 394 /*两个日期差值*/ 
 395 void Datecha(Link L)
 396 {
 397     int year,mouth,day;
 398     Node *p;
 399     p=L->next;
 400     year=Num_input("今天日期:年:");
 401     mouth=Mou_input("月:");
 402     day=Day_input("日:",year,mouth);
 403     dateflag=1;
 404     if (!p)
 405     {
 406         printf("***无货物信息,不用输入日期***\n");
 407         getchar();
 408         return ;
 409     } 
 410     else
 411     {
 412         while (p)
 413         {
 414             p->data.datecha=Sum_day(year,mouth,day)-Sum_day(p->data.Date.year,p->data.Date.mouth,p->data.Date.day);
 415             p=p->next;
 416         }
 417     }
 418 }
 419 
 420 void Dz_by_data( Link L)
 421 {
 422     Node *p,*r;
 423     Link l;
 424     int year,mouth,day,count=0;
 425     p=L->next;
 426     l=(Node *)malloc(sizeof(Node));
 427     l->next=NULL;
 428     system("cls");
 429     if (!dateflag)
 430     {
 431         Datecha(L);
 432     }
 433     printf("| 编号 |  名称  |过期差值|\n");
 434     while (p)
 435     {
 436         printf("|%-6s|%-8s|  %4d  |",p->data.numbs,p->data.name,p->data.datecha);
 437         if (p->data.days>=p->data.datecha)
 438         {
 439             /*优惠的标示优惠*/
 440             if (p->data.days-p->data.datecha<=10)
 441             {
 442                 count++;
 443                 p->data.sales=p->data.sales/2;
 444                 printf("已优惠\n");
 445                 /*        Ltol(l,p,p->next);*/
 446             }
 447             else
 448             {
 449                 printf("\n");
 450             }
 451         }
 452         else 
 453         {
 454             printf("该商品过期,请删除\n");
 455         }
 456         p=p->next;
 457     }
 458 
 459     if(!count)
 460     {
 461         printf("/n***没有差10天过期的货物***/n");
 462         getchar();
 463         return;
 464     }
 465     else
 466     {
 467         printf("共有%d中商品打折",count);
 468         yhflag=1;
 469         saveflag=1;
 470         Disp(L,zg);
 471     }
 472 }
 473 /*删除*/
 474 void Del_by_ways(Link L,Node *p)
 475 {
 476     Node *q;
 477     char ch;
 478     if (p)
 479     {
 480         q=L;
 481         while(q->next!=p)
 482             q=q->next;
 483         printheader_zg();
 484         printdata_zg(p);
 485         printf(END_zg);
 486         getchar();
 487         printf("请确定是否要删除该货物信息(y/n):");
 488         scanf("%c",&ch);
 489         if (ch=='y'||ch=='Y')
 490         {
 491             q->next=p->next;
 492             free(p);
 493             printf("\n成功删除该货物信息\n");
 494             saveflag=1;
 495             getchar();
 496             return;
 497         }
 498         else
 499         {
 500             printf("\n没有删除该货物信息\n");
 501             getchar();
 502             return;
 503         }
 504     } 
 505     else
 506     {
 507         Nofind();
 508         getchar();
 509     }    
 510 }
 511 /*通过名称删除*/
 512 void Del_by_name(Link L)
 513 {
 514     Node *p;
 515     char s[20];
 516     system("cls");
 517     S_input(s,10,"请输入要查删除的货物名称:");
 518     p=Locate(L,s,"name");
 519     Del_by_ways(L,p);
 520 }
 521 /*通过编号删除*/
 522 void Del_by_num(Link L)
 523 {
 524     Node *p;
 525     char s[20];
 526     system("cls");
 527     S_input(s,10,"请输入要查删除的货物的编号:");
 528     p=Locate(L,s,"num");
 529     Del_by_ways(L,p);
 530 }
 531 
 532 
 533 /*补货信息*/
 534 void Buhuo(Link L)
 535 {
 536     Node *p,*q;
 537     int i=0;
 538     p=L->next;
 539     system("cls");
 540     if (p)
 541     {
 542         q=L->next;
 543         printf("|  编号  |  名称  |库存|销量|剩余| \n");
 544         while (q)
 545         {
 546             /*统计库存,销量,剩余*/
 547             printf("|%-8s|%-8s|%-4d|%4d|%4d|\n",q->data.numbs,q->data.name,q->data.stock,q->data.salesnumb,q->data.stock-q->data.salesnumb);
 548             q=q->next;
 549         }
 550         while (p)
 551         {
 552             if ((p->data.stock-p->data.salesnumb)<100)
 553             {
 554                 if (i==0)
 555                 {
 556                     printf("需要补货的货物分别是\n");
 557                     printf("|  编号  |商品名称|\n");
 558                 }
 559                 printf("|%-8s|%8s|\n",p->data.numbs,p->data.name);
 560                 i++;
 561             }
 562             p=p->next;
 563         }
 564         if (i)
 565         {
 566             printf("共%d种货物\n",i);
 567             getchar();
 568             return;
 569         } 
 570         else
 571         {
 572             printf("没有需要补充的货物种类\n");
 573             getchar();
 574             return;
 575         }
 576     } 
 577     else
 578     {
 579         printf("\n***没有货物信息***\n");
 580         printf("\n按任意键返回...\n");
 581         getchar();
 582         return ;
 583     }
 584 }
 585 
 586 void Sort_by_ways(Link L,char s[],int n)
 587 {
 588     int flag=0,a;
 589     Node *p,*q,*lq,*fq;   /*fq记下节点前驱,lq记下节点的后驱,q每次冒泡遍历,p控制遍历,qq用来交换地址*/
 590     p=L->next;
 591     system("cls");
 592     while (p)
 593     {
 594         fq=L;
 595         q=fq->next;
 596         while (lq=q->next)
 597         {
 598             if (strcmp(zg,s)==0)
 599             {
 600                 switch (n)
 601                 {
 602                 case 1:a=strcmp(q->data.name,lq->data.name);break;
 603                 case 2:a=strcmp(q->data.numbs,lq->data.numbs);break;
 604                 case 3:a=(q->data.salesnumb>lq->data.salesnumb);break;
 605                 case 4:if(!incomflag) Sum_Income(L); a=(q->data.income>lq->data.income);break;
 606                 case 5:if (!dateflag) Datecha(L);a=(q->data.datecha>lq->data.datecha);break;
 607                 }
 608             } 
 609             else
 610             {
 611                 switch (n)
 612                 {
 613                 case 1:a=strcmp(q->data.name,lq->data.name);break;
 614                 case 2:a=strcmp(q->data.numbs,lq->data.numbs);break;
 615                 case 3:a=(q->data.sales>lq->data.sales);break;
 616                 case 4:a=(q->data.salesnumb>lq->data.salesnumb);break;
 617                 case 5:if (!dateflag) Datecha(L);a=(q->data.datecha>lq->data.datecha);break;
 618                 }
 619             }
 620         
 621             /*if ((n==1)?(strcmp(q->data.name,lq->data.name)):(strcmp(q->data.numbs,q->data.numbs)))*/
 622             if(a>0)
 623             {
 624                 flag=1;
 625                 q->next=lq->next;
 626                 lq->next=q;
 627                 fq->next=lq;
 628             }
 629             fq=fq->next;
 630             q=fq->next;
 631         }
 632         if(flag==0) break;
 633         p=p->next;
 634     }
 635     if (strcmp(zg,s)==0)
 636         Disp(L,zg);
 637     else
 638         Disp(L,pt);
 639 }
 640 
 641 void Wb_Save(Link L)
 642 {
 643     FILE *out;
 644     Node *p;
 645     int count=0;
 646     if ((out=fopen("d:\\Goods.txt","w"))==NULL)
 647     {
 648         printf("打开文件失败!\n");
 649         getchar();
 650         return;
 651     }
 652     p=L->next;
 653     fprintf(out,HEADER1_zg);
 654     fprintf(out,HEADER2_zg);
 655     fprintf(out,HEADER3_zg);
 656     while (p)
 657     {
 658         fprintf(out,FORMAT_zg,DATA_zg);
 659         p=p->next;
 660         fprintf(out,HEADER3_zg);
 661         count++;
 662     }
 663     if (count>0)
 664     {
 665         getchar();
 666         printf("\n\n\n***文本文件保存完成,共%d条货物信息保存***\n",count);
 667         getchar();
 668         saveflag=0;
 669     } 
 670     else
 671     {
 672         system("cls");
 673         printf("没有货物信息,没有货物信息保存\n");
 674         getchar();
 675     }
 676     fclose(out); /*关闭此文件*/
 677 }
 678 void Er_Save(Link L)
 679 {
 680     FILE *out;
 681     Node *p;
 682     int count=0;
 683     if ((out=fopen("d:\\Goods","wb"))==NULL)
 684     {
 685         printf("打开文件失败!\n");
 686         getchar();
 687         return;
 688     }
 689     p=L->next;
 690 
 691     while (p)
 692     {
 693         if (fwrite(p,sizeof(Node),1,out))
 694         {
 695             p=p->next;
 696             count++;
 697         }
 698         else
 699         {
 700             break;
 701         }
 702     }
 703     if (count>0)
 704     {
 705         getchar();
 706         printf("\n\n\n***二进制文件保存完成,共%d条货物信息保存***\n",count);
 707         getchar();
 708         saveflag=0;
 709     } 
 710     else
 711     {
 712         system("cls");
 713         printf("没有货物信息,没有货物信息保存\n");
 714         getchar();
 715     }
 716     fclose(out); /*关闭此文件*/
 717 }
 718 void Menu_sort_zg()
 719 {
 720     system("cls");
 721     printf("\n\n\n");
 722     printf("%30s%s"," ","     排序货物信息   \n\n");
 723     printf("%30s%s"," ","********功能*******\n\n");
 724     printf("%30s%s"," ","*      1.按名称   *\n\n");
 725     printf("%30s%s"," ","*      2.按编号   *\n\n");
 726     printf("%30s%s"," ","*      3.按销量*\n\n");
 727     printf("%30s%s"," ","*      4.按利润*\n\n");
 728     printf("%30s%s"," ","*      5.按保期  *\n\n");
 729     printf("%30s%s"," ","*      6.返回     *\n\n");
 730     printf("%30s%s"," ","*      7.退出     *\n\n");
 731     printf("%30s%s"," ","********************\n");
 732 }
 733 void Menu_sort_pt()
 734 {
 735     system("cls");
 736     printf("\n\n\n");
 737     printf("%30s%s"," ","     排序货物信息   \n\n");
 738     printf("%30s%s"," ","********功能*******\n\n");
 739     printf("%30s%s"," ","*      1.按名称   *\n\n");
 740     printf("%30s%s"," ","*      2.按编号   *\n\n");
 741     printf("%30s%s"," ","*      3.按售价   *\n\n");
 742     printf("%30s%s"," ","*      4.按销量  *\n\n");
 743     printf("%30s%s"," ","*      5.按保期  *\n\n");
 744     printf("%30s%s"," ","*      6.返回     *\n\n");
 745     printf("%30s%s"," ","*      7.退出     *\n\n");
 746     printf("%30s%s"," ","********************\n");
 747 }
 748 void Menu_del()
 749 {
 750     system("cls");
 751     printf("\n\n\n");
 752     printf("%30s%s"," ","     删除货物信息   \n\n");
 753     printf("%30s%s"," ","********功能*******\n\n");
 754     printf("%30s%s"," ","*      1.按名称   *\n\n");
 755     printf("%30s%s"," ","*      2.按编号   *\n\n");
 756     printf("%30s%s"," ","*      3.返回     *\n\n");
 757     printf("%30s%s"," ","*      4.退出     *\n\n");
 758     printf("%30s%s"," ","********************\n");
 759 }
 760 void Menu_Sea()
 761 {
 762     system("cls");
 763     printf("\n\n\n");
 764     printf("%30s%s"," ","     查询货物信息   \n\n");
 765     printf("%30s%s"," ","********功能*******\n\n");
 766     printf("%30s%s"," ","*      1.按名称   *\n\n");
 767     printf("%30s%s"," ","*      2.按编号   *\n\n");
 768     printf("%30s%s"," ","*      3.返回     *\n\n");
 769     printf("%30s%s"," ","*      4.退出     *\n\n");
 770     printf("%30s%s"," ","********************\n");
 771 }
 772 void Menu_Qx()                   /*权限菜单*/
 773 {
 774     system("cls");
 775     printf("\n\n\n");
 776     printf("%25s%s"," ","        欢迎进入             \n");
 777     printf("%25s%s"," ","     货物管理体统   \n\n\n");
 778     printf("%25s%s"," ","**********功能*********\n\n");
 779     printf("%25s%s"," ","*        1.主管       *\n\n");
 780     printf("%25s%s"," ","*        2.普通用户   *\n\n");
 781     printf("%25s%s"," ","*        3.退出       *\n\n");
 782     printf("%25s%s"," ","***********************\n");
 783 }
 784 void Menu_zg()                       /*主管菜单*/
 785 {
 786     system("cls");
 787     printf("\n\n\n");
 788     printf("%15s%s"," ","               货物管理体统                               \n\n\n");
 789     printf("%15s%s"," ","*****************主管功能******************\n\n");
 790     printf("%15s%s"," ","*              1.录入货物信息             *\n");
 791     printf("%15s%s"," ","*              2.删除货物信息             *\n");
 792     printf("%15s%s"," ","*              3.查找货物信息             *\n");
 793     printf("%15s%s"," ","*              4.显示货物信息             *\n");
 794     printf("%15s%s"," ","*              5.差10天过物信息(促销)    *\n");
 795     printf("%15s%s"," ","*              6.统计货物数量(补货)     *\n");
 796     printf("%15s%s"," ","*              7.实时收益                 *\n");
 797     printf("%15s%s"," ","*              9.排序日期差               *\n");
 798     printf("%15s%s"," ","*              10.保存文件                *\n");
 799     printf("%15s%s"," ","*              11.返回                    *\n");
 800     printf("%15s%s"," ","*              12.退出                    *\n");
 801     printf("%15s%s"," ","*******************************************\n");
 802 }
 803 void Menu_pt()                        /*普通菜单*/
 804 {
 805     printf("%15s%s"," ","               货物管理体统                               \n\n\n");
 806     printf("%15s%s"," ","*****************普通用户功能***************\n\n");
 807     printf("%15s%s"," ","*              1.查找货物信息                   *\n");
 808     printf("%15s%s"," ","*              2.显示货物信息                   *\n");
 809     printf("%15s%s"," ","*              3.排序货物销量                   *\n");
 810     printf("%15s%s"," ","*              4.返回                           *\n");
 811     printf("%15s%s"," ","*              5.退出                          *\n");
 812     printf("%15s%s"," ","*************************************************\n");
 813 }
 814 void Isaveflag(Link L)
 815 {
 816     char ch;
 817     if (saveflag)
 818     {
 819         printf("您已经修改数据了,是否要保存退出(y/n):");
 820         getchar();
 821         scanf("%c",&ch);
 822         if (ch=='y'||ch=='Y')
 823         {
 824             Wb_Save(L);
 825             Er_Save(L);
 826             exit(0);
 827         }
 828         else
 829             exit(0);
 830     }
 831     else
 832         exit(0);
 833 }
 834 int IsPassword()                      /*密码是否通过*/
 835 {
 836     char password[7];
 837     char mypassword[]="123456";
 838     static int n=3;
 839     int i;
 840     system("cls");
 841     for (;n>0;n--)
 842     {
 843         switch(n)
 844         {
 845         case 1:
 846         case 2: printf("密码错误,您还有%d次机会,请再输入:",n);break;
 847         case 3: printf("请输入6位进入主管功能的密码:");getchar();break;
 848         }
 849         for ( i=0;i<6;i++)
 850         {
 851             password[i]=getch();
 852             printf("*");
 853         }
 854         getchar();
 855         password[6]='\0';
 856         if (strcmp(mypassword,password)==0)
 857         {
 858             printf("***密码正确***");
 859             getchar();
 860             return 1;
 861         }
 862     }
 863     printf("恭喜你,三次都输错了,无法再输入密码,按任意键返回...");
 864     getchar();
 865     return 0;
 866 }
 867 
 868 void Sort_goods(Link L,char s[])
 869 {
 870     if (!L->next)
 871     {
 872         system("cls");
 873         printf("\n没有货物信息,无法使用排序功能\n");
 874         getchar();
 875         return;
 876     } 
 877     else
 878     {
 879         if (strcmp(zg,s)==0)
 880         {
 881             system("cls");
 882             for (;;)
 883             {
 884                 Menu_sort_zg();
 885                 switch(select(1,7))
 886                 {
 887                 case 1:Sort_by_ways(L,zg,1);break;    /*名称*/
 888                 case 2:Sort_by_ways(L,zg,2);break;     /*编号*/
 889                 case 3:Sort_by_ways(L,zg,3);break;     /*销量*/
 890                 case 4:Sort_by_ways(L,zg,4);break;     /*利润*/
 891                 case 5:Sort_by_ways(L,zg,5);break;     /*保期*/
 892                 case 6:return;break;
 893                 case 7:Isaveflag(L);break;
 894                 }
 895                 getchar();
 896             }
 897         } 
 898         else
 899         {
 900             system("cls");
 901             for (;;)
 902             {
 903                 Menu_sort_pt();
 904                 switch(select(1,7))
 905                 {
 906                 case 1:Sort_by_ways(L,pt,1);break;        /*名称*/ 
 907                 case 2:Sort_by_ways(L,pt,2);break;        /*编号*/
 908                 case 3:Sort_by_ways(L,pt,3);break;        /*售价*/
 909                 case 4:Sort_by_ways(L,pt,4);break;        /*销量*/
 910                 case 5:Sort_by_ways(L,pt,5);break;        /*销量*/
 911                 case 6:return;break;
 912                 case 7:Isaveflag(L);break;
 913                 }
 914                 getchar();
 915             }
 916         }
 917     }
 918 }
 919 void Sea_goods(Link L,char s[])
 920 {
 921     if (!L->next)
 922     {
 923         system("cls");
 924         printf("\n***没有货物记录,不能进入查询功能***\n");
 925         return ;
 926     } 
 927     else
 928     {
 929         system("cls");
 930         for (;;)
 931         {
 932             Menu_Sea();
 933             switch(select(1,4))
 934             {
 935             case 1:Sea_by_name(L,s);break;
 936             case 2:Sea_by_num(L,s);break;
 937             case 3:return;break;
 938             case 4:Isaveflag(L);break;
 939             }
 940             getchar();
 941         }
 942     }
 943 }
 944 void Del_goods(Link L)
 945 {
 946     if (!L->next)
 947     {
 948         system("cls");
 949         printf("\n***没有货物记录,不能使用删除功能***\n");
 950         return ;
 951     }
 952     else
 953     {
 954         system("cls");
 955         for (;;)
 956         {
 957             Menu_del();
 958             switch (select(1,4))
 959             {
 960             case 1:Del_by_name(L);break;
 961             case 2:Del_by_num(L);break;
 962             case 3:return;break;
 963             case 4:Isaveflag(L);break;
 964             }
 965             getchar();
 966         }
 967     }
 968 }
 969 void main_zg(Link L)                        /*主管功能*/
 970 {
 971     system("cls");
 972     for (;;)
 973     {
 974         Menu_zg();
 975         switch (select(1,12))
 976         {
 977         case 1:Add_goods(L);saveflag=1;break;                 /*增加货物信息*/
 978         case 2:Del_goods(L);break;                 /*删除学生信息*/
 979         case 3:Sea_goods(L,zg);break;         /*按编号名字查询*/
 980         case 4:system("cls");Disp(L,zg);break;  
 981         case 5:Dz_by_data(L);break;
 982         case 6:Buhuo(L);break;
 983         case 7:Disp(L,zg);Sum_Income(L);Disp(L,zg);break;
 984         case 9:Sort_goods(L,zg);break;
 985         case 10:Wb_Save(L);Er_Save(L);break;
 986         case 11:return;break;
 987         case 12:Isaveflag(L);break;
 988         }
 989         getchar();
 990     }
 991 }
 992 void main_pt(Link L)                        /*普通功能*/
 993 {
 994     system("cls");
 995     for (;;)
 996     {
 997         Menu_pt();
 998         switch (select(1,5))
 999         {
1000         case 1:Sea_goods(L,pt);break;         /*按编号名字查询*/
1001         case 2:system("cls");Disp(L,pt);break;  
1002         case 3:Sort_goods(L,pt);break;
1003         case 4:return;break;
1004         case 5:Isaveflag(L);break;
1005         }
1006         getchar();
1007         system("cls");
1008     }
1009 }
1010 int main()
1011 {
1012     Link L;
1013     FILE *in;
1014     Node *p,*r;
1015     int count=0;
1016     L=(Node *)malloc(sizeof(Node));
1017     L->next=NULL;
1018     r=L;
1019     if ((in=fopen("d:\\Goods","ab+"))==NULL) /*以追加方式打开二进制文件*/
1020     {
1021         printf("\n***打开文件失败***\n");
1022         exit(0);
1023     }
1024     while (!feof(in))
1025     {
1026         p=(Node *)malloc(sizeof(Node));
1027         if (fread(p,sizeof(Node),1,in))
1028         {
1029             p->next=r->next;
1030             r->next=p;
1031             count++;
1032         }
1033     }
1034     fclose(in);
1035     for (;;)
1036     {
1037         Menu_Qx();
1038         switch (select(1,3))
1039         {
1040         case 1:if(IsPassword())
1041                {
1042                    main_zg(L);
1043                }
1044                break;
1045         case 2:main_pt(L);break;
1046         case 3:Isaveflag(L);break;
1047         }
1048         getchar();
1049     }
1050     return 0;
1051 }
View Code

 

posted @ 2013-11-23 10:32  围城黑  阅读(245)  评论(0编辑  收藏  举报