Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2228445
  • 博文数量: 556
  • 博客积分: 11457
  • 博客等级: 上将
  • 技术积分: 5973
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 22:33
文章分类

全部博文(556)

文章存档

2013年(22)

2012年(74)

2011年(460)

分类: C/C++

2011-07-14 21:29:55

【功能】:建立一商店存货管理系统,要求每次出货时取进货时间最早且最接近保质期中止时间的货物。

 

分步实施:

1.  初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2.  完成最低要求:建立一个文件,包括5个种类的货物情况,能对商品信息进行扩充(追加),修改和删除以及简单的排序;

3.  进一步要求:扩充商品数量,以及完成系统查询功能。有兴趣的同学可以自己扩充系统功能。

 

要求:1)界面友好,函数功能要划分好

2)总体设计应画一流程图

3)程序要加必要的注释

4)要提供程序测试方案

5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

 

  1. #define MAXSIZE 1024
  2. typedef struct
  3. {
  4.    char name[30]; //商品名称
  5.    char bianhao[20]; //商品编号
  6.    int num; //商品数量
  7.    int importdate; //进货日期
  8.    int producedate; //生产日期
  9.    int deaddate; //保质期
  10. }datatype;

  11. typedef struct
  12. {
  13.    datatype data[MAXSIZE];
  14.    int last;
  15. }SeqList;

  16. SeqList *L;

  17. #include<stdio.h>
  18. #include<string.h>
  19. #include<stdlib.h>

  20. void index();
  21. void menu();
  22. SeqList *init_SeqList();
  23. int Insert_SeqList(SeqList *L,int i,datatype x);
  24. int Delete_SeqList(SeqList *L,datatype x,int i);
  25. int Location_SeqList(SeqList *L,datatype x);

  26. void ruku(SeqList *L,datatype x);
  27. void print(SeqList *L); //打印商品信息
  28. void savefile(SeqList *L);
  29. void readfile(SeqList *L);
  30. void sort(SeqList *L);

  31. void main()
  32. {     
  33.    SeqList *L;
  34.    datatype x;
  35.    index();
  36.    L=init_SeqList(); //顺序表的起始地址
  37.    int sel,flag=1;
  38.     while(flag)
  39.     {
  40.        system("color 48");
  41.        system("cls");
  42.      menu();
  43.      scanf("%d",&sel);
  44.      switch(sel)
  45.      {
  46.      case 1:
  47.          printf("名称 编号 数目 生产日期 进货日期 保质期\n");
  48.              scanf("%s %s %d %d %d %d",x.name,x.bianhao,&x.num,&x.producedate,&x.importdate,&x.deaddate);
  49.              ruku(L,x);
  50.              system("pause");
  51.                break;
  52.      case 2:
  53.                 int p,q,n;
  54.                 printf("请输入商品名称 出仓数目\n");
  55.                  scanf("%s %d",x.name,&n);
  56.                  p=Location_SeqList(L,x);
  57.                         if(x.num<n)
  58.                             printf("库存不足");
  59.                         else
  60.                         q=Delete_SeqList(L,x,p);
  61.                         if(q==1)
  62.                             printf("出库成功!\n\n");
  63.                         system("pause");
  64.                     break;
  65.      case 3:
  66.          int j;
  67.              printf("请输入名称:\n");
  68.              scanf("%s",x.name);
  69.                 j=Location_SeqList(L,x);
  70.                 if(j!=-1)
  71.                 {
  72.                     printf("名称:%s 编号:%s 数目: %d 生产日期: %d 进货日期: %d 保质期: %d",L->data[j].name,L->data[j].bianhao,L->data[j].num,L->data[j].producedate,
  73.                         L->data[j].importdate,L->data[j].deaddate);
  74.                 }
  75.                 else
  76.                     printf("没有该商品信息!");
  77.                  system("pause");
  78.                      break;
  79.      case 4:
  80.          print(L);
  81.          system("pause");
  82.              break;
  83.      case 5:
  84.          int k,i;
  85.          printf("请输入要插入的名称 编号 位置 生产日期 进货日期 保质期\n");
  86.          scanf("%s %s %d %d %d %d",x.name,x.bianhao,&i,&x.producedate,&x.importdate,&x.deaddate);
  87.              k=Insert_SeqList(L,i,x);
  88.              if(k==1)
  89.                  printf("插入成功!\n");
  90.                 system("pause");
  91.                      break;
  92.      case 6:
  93.          printf("按进货时间先后进行排序!\n");
  94.          sort(L);
  95.             print(L);
  96.          system("pause");
  97.             break;
  98.      case 7:
  99.          printf("保存到文件中...");
  100.          savefile(L);
  101.              system("pause");
  102.             break;
  103.      case 8:
  104.          printf("从文件中读取数据信息...");
  105.          readfile(L);
  106.               system("pause");
  107.             break;
  108.      case 0:
  109.          flag=0;
  110.      }
  111.         
  112.     }

  113. }

  114. void index()
  115. {
  116.     system("color 20");
  117.     char input;
  118.     printf("\n\n\n");
  119.     printf("\n\t\t\t******************************\n\n");
  120.     printf("\n\t\t\t*欢迎进入商店库存信息管理系统*\n\n");
  121.     printf("\n\t\t\t******************************\n\n\n");
  122.     printf("请按任意键进入主菜单...");
  123.     input=getchar();
  124. }

  125. void menu()
  126. {
  127.      printf("\t\t\t***********主菜单*************\n");
  128.      printf("\t\t\t 1.商品信息入库 \n");
  129.      printf("\t\t\t 2.商品出库 \n");
  130.      printf("\t\t\t 3.一种商品信息查询 \n");
  131.      printf("\t\t\t 4.全部商品信息浏览 \n");
  132.      printf("\t\t\t 5.商品信息插入 \n");
  133.      printf("\t\t\t 6.按商品进货时间排序 \n");
  134.      printf("\t\t\t 7.保存数据到文件 \n");
  135.      printf("\t\t\t 8.从文件中读取数据 \n");
  136.      printf("\t\t\t 0.退出系统 \n");
  137.      printf("\t\t\t*************End**************\n");
  138.      printf("请进行操作选择:");
  139. }
  140. //顺序表的初始化
  141. SeqList *init_SeqList()
  142. {
  143.     SeqList *L;
  144.     L=(SeqList *)malloc(sizeof(SeqList));
  145.     L->last=-1;
  146.     return L;
  147. }

  148. //顺序表中的插入
  149. /*算法思想
  150.  1)将ai~an顺序向后移动,为新元素让出位置
  151.  2)将x置入空出的第i个位置
  152.  3)修改last指针(相当于修改表长),使之仍指向最后一个元素
  153. */
  154. int Insert_SeqList(SeqList *L,int i,datatype x)
  155. {
  156.     int j;
  157.     if(L->last==MAXSIZE-1) /*表空间已满,不能插入*/
  158.     {
  159.          printf("表满");
  160.          return(-1);
  161.     }
  162.     if(i<0||i>L->last+1) /*检查插入位置的正确性*/
  163.     {
  164.            printf("位置错");
  165.          return(0);
  166.     }
  167.     for(L->last;j>=i;j--)
  168.         L->data[j+1]=L->data[j]; /*结点移动*/
  169.      L->data[i]=x; /*新元素插入*/
  170.         L->last++; /*last仍指向最后元素*/
  171.         return 1; /*插入成功,返回*/
  172. }

  173. int Delete_SeqList(SeqList *L,datatype x,int i)
  174. {
  175.      int j;
  176.      if(i<0||i>L->last)
  177.      {
  178.            printf("不存在第i个元素");
  179.          return 0;
  180.      }
  181.      for(j=i+1;j<=L->last;j++)
  182.          L->data[j-1]=L->data[j]; //向上移动
  183.      L->last--; //删除成功
  184.            return 1;
  185. }

  186. //顺序表中的按值查找
  187. int Location_SeqList(SeqList *L,datatype x)
  188. {
  189.     int i=0;
  190.     while(i<=L->last&&strcmp(L->data[i].name,x.name)!=0)
  191.         i++;
  192.     if(i>L->last)
  193.         return -1;
  194.     else
  195.         return i;
  196. }

  197. void ruku(SeqList *L,datatype x)
  198. {
  199.     int i,k;
  200.     i=Location_SeqList(L,x);
  201.     printf("i=%d\n\n",i);
  202.     if(i!=-1)
  203.     {
  204.      L->data[i].num+=x.num; //增加商品数量
  205.         printf("商品信息已经入库!");
  206.     }
  207.     else{
  208.           int i=0;
  209.          while(strcmp(L->data[i].bianhao,x.bianhao)!=0&&i<=L->last)
  210.              i++;
  211.         k=Insert_SeqList(L,i,x);
  212.          if(k==1)
  213.              printf("商品信息已经入库!");
  214.     }
  215. }

  216. void print(SeqList *L)
  217. {
  218.     int i;
  219.     for(i=0;i<L->last;i++)
  220.     {
  221.         printf("名称:%s 编号:%s 数目: %d 生产日期: %d 进货日期: %d 保质期: %d\n",L->data[i].name,L->data[i].bianhao,L->data[i].num,L->data[i].producedate,
  222.                         L->data[i].importdate,L->data[i].deaddate);
  223.     }
  224. }

  225. void savefile(SeqList *L) //将所有数据保存到文件
  226. {
  227.      int i;
  228.      FILE *fp;
  229.      if((fp=fopen("F:\\product.txt","w"))==NULL) //rt+ 读写打开一个文本文件,允许读和写。
  230.      {
  231.             printf("Cannot open the file!\n");
  232.          system("pause");
  233.             return;
  234.      }
  235.      while(i<=L->last)
  236.      {
  237.           fprintf(fp,"%-5s, %d %d %d",L->data[i].name,L->data[i].importdate,L->data[i].producedate,L->data[i].deaddate);
  238.          i++;
  239.      }
  240.      fclose(fp);
  241.         printf("\t\t\t保存成功!\n");
  242. }

  243. void readfile(SeqList *L) //打开文件
  244. {
  245.      FILE *fp;
  246.      L->last=0;
  247.      if((fp=fopen("F:\\product.txt","r+"))==NULL) // r+ 打开可读写的文件,该文件必须存在。
  248.      {
  249.             printf("\t\t\tCannot open the file\n");
  250.              system("pause");
  251.              return;
  252.      }
  253.      while(!feof(fp))
  254.      {
  255.            L->last++;
  256.          fscanf(fp,"%s%s%d%d",L->data[L->last].name,&L->data[L->last].producedate,&L->data[L->last].producedate,L->data[L->last].deaddate);
  257.      }
  258.      L->last--;
  259.      fclose(fp);
  260.      printf("\t\t\t读取文件成功!\n");
  261. }

  262. void sort(SeqList *L) //冒泡排序数据
  263. {
  264.     int i,j;
  265.     int swap;
  266.     for(i=0;i<L->last;i++)
  267.     {
  268.           swap=0;
  269.          for(j=1;j<L->last-i;i++)
  270.          {
  271.                  L->data[0]=L->data[j+1];
  272.                  L->data[j+1]=L->data[j];
  273.                  L->data[j]=L->data[0];
  274.                  swap=1; /*置交换标志*/
  275.          }

  276.          if(swap==0)
  277.              break;
  278.     }
  279.     printf("排序结束!\n");
  280. }
文件保存有点问题,待完善。。。
阅读(1818) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~