美文网首页
超市管理系统完整代码

超市管理系统完整代码

作者: crabor | 来源:发表于2018-01-02 08:32 被阅读0次
    #include <io.h>
    #include <malloc.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX_LEN 256
    #define MAX_GOODS 100
    
    typedef enum { OK = 1, ERROR = 0 } Status;
    typedef enum { YES = 1, NO = 0 } Bool;
    
    typedef struct {
      int number;
      char partName[MAX_LEN + 1];
      int onHand;
      float price;
    } Part;
    
    typedef struct {
      Part *pGoodsInfoBase[MAX_GOODS];
      int partNum;
    } GoodsInfoBase;
    
    void PrintInfoOfCopyright(void);
    /*Function: Print the information of copyright.*/
    
    void PrintInfoOfInstructions(void);
    /*Function: Print the information of instructions.*/
    
    int Search(int searchNumber, GoodsInfoBase *pGoodsInfoBase);
    /*Function: To find that whether the specific part exists or not.
                If it existed, return the index location. If not, return -1.
    Input: searchNumber,the specific part number,
           pGoodsInfoBase,a pointer point to the goodsInfoBase in the main fuction.
    Output: i,the index location of the specific part,
            or -1 if the specific part doesn't exist.*/
    
    Status ReadGoodsInfoFile(char *fileName, GoodsInfoBase *pGoodsInfoBase);
    /*Function: To read all of the information about goods from a file.
     Input: The name of a file;
            pGoodsInfoBase,a pointer point to the goodsInfoBase in the main fuction.
    Output: The status OK if read successfully or the status ERROR when failed to
    read.*/
    
    Status ExitSSOS(char *fileName, GoodsInfoBase *pGoodsInfoBase);
    /*Function: End the SSOS program and store all the information of goods into a
    file. Input: A name of a new file that will store all the information;
           pGoodsInfoBase,a pointer point to the goodsInfoBase in the main fuction.
    Output: The status OK When all the information is successfully stored and end
    the SSOS; the status ERROR when failed to do it.*/
    
    Status Insert(Part *pNewPart, GoodsInfoBase *pGoodsInfoBase);
    /*Function: To insert the information of a specific part to the goodsInfoBase in
    the main fuction. Input: pGoodsInfoBase,a pointer point to the goodsInfoBase in
    the main fuction; pNewPart,a pointer point to a new part. Output: The status OK
    if the information of the speific part successfully insert to the goodsInfoBase,
            or the status ERROR if goodsInfoBase is full or mallocing failed.
    Note: It is required to #include<malloc.h> and #include<stdlib.h>.*/
    
    Status UpdataOnHand(int changeOnHand, GoodsInfoBase *pGoodsInfoBase, int i);
    /*Fuction: To change the quantity on hand of a specific part .
    Input: changeOnHand, the change on hand of a part;
           pGoodsInfoBase,a pointer point to the goodsInfoBase in the main fuction;
           i,the index location of a part.*/
    
    Status UpdataPrice(float newPrice, GoodsInfoBase *pGoodsInfoBase, int i);
    /*Fuction: To change the price of a specific part .
    Input: newPrice, the new price of a part;
           pGoodsInfoBase,a pointer point to the goodsInfoBase in the main fuction;
           i,the index location of a part.*/
    
    Status Print(GoodsInfoBase *pGoodsInfoBase);
    /*Fuction: To show all the information of the whole goods.
    Input: pGoodsInfoBase,a pointer point to the goodsInfoBase in the main fuction.
    Output: All the information of the whole goods.*/
    
    Status Delete(int i, GoodsInfoBase *pGoodsInfoBase);
    /*Function: To delete a part's information if it exist.
    Input: pGoodsInfoBase,a pointer point to the goodsInfoBase in the main fuction.
           i,the index location of a part.*/
    
    Bool IsFull(GoodsInfoBase *pGoodsInfoBase);
    /*Function: To see whether the goods is full or not.
    Input: pGoodsInfoBase,a pointer point to the goodsInfoBase in the main fuction.
    Output: NO when it is not full or YES when it is full.*/
    
    Status PrintInfoOfAPart(int i, GoodsInfoBase *pGoodsInfoBase);
    /*Function: To show the information of a part.
    Input: pGoodsInfoBase,a pointer point to the goodsInfoBase in the main fuction.
           i,the index location of a part.*/
    
    Bool IsIllegalInput(int scanfReturnValueOfPartNumber,
                        char firstCharacterOfPartName, int scanfReturnValueOfOnHand,
                        int scanfReturnValueOfPrice);
    /*Function: To see whether the input is correct or not.
    Input: the return value of scanfs and the first character of the part name.
    Output: YES or NO.*/
    
    Bool IsIllegalInput(int scanfReturnValueOfPartNumber,
                        char firstCharacterOfPartName, int scanfReturnValueOfOnHand,
                        int scanfReturnValueOfPrice) {
      Bool ret = NO;
      char ch = firstCharacterOfPartName;
      int a = scanfReturnValueOfPartNumber;
      int b = scanfReturnValueOfOnHand;
      int c = scanfReturnValueOfPrice;
      if (!((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))) {
        ret = YES;
      }
      if (a == 0) {
        ret = YES;
      }
      if (b == 0) {
        ret = YES;
      }
      if (c == 0) {
        ret = YES;
      }
      return ret;
    }
    
    Status PrintInfoOfAPart(int i, GoodsInfoBase *pGoodsInfoBase) {
      printf("   %d\t\t%s\t\t%d\t\t\t%g\n",
             pGoodsInfoBase->pGoodsInfoBase[i]->number,
             pGoodsInfoBase->pGoodsInfoBase[i]->partName,
             pGoodsInfoBase->pGoodsInfoBase[i]->onHand,
             pGoodsInfoBase->pGoodsInfoBase[i]->price);
      return OK;
    }
    
    Bool IsFull(GoodsInfoBase *pGoodsInfoBase) {
      int i;
      i = pGoodsInfoBase->partNum;
      if (i >= MAX_GOODS) {
        return YES;
      }
      return NO;
    }
    
    void PrintInfoOfCopyright(void) {
      puts("Welcome to use the Super Supermarket OS(SSOS)!\n");
      puts("Super Supermarket OS Command V1.0, 2017-12-9");
      puts("developed by Rong Yang.");
      puts("All rights reserved.\n");
      return;
    }
    
    void PrintInfoOfInstructions(void) {
      puts("Instructions:");
      puts("'i': Insert a part to the base.");
      puts("'d': Delete a part from the base.");
      puts("'s': Search a part and show its information.");
      puts("'u': Update information of a part.");
      puts("'p': Print all the information of the base.");
      puts("'q': Exit the market system and save all the information.\n");
      return;
    }
    
    int Search(int searchNumber, GoodsInfoBase *pGoodsInfoBase) {
      int i, ret = -1;
      for (i = 0; i < pGoodsInfoBase->partNum; i++) {
        if (pGoodsInfoBase->pGoodsInfoBase[i]->number == searchNumber) {
          ret = i;
          break;
        }
      }
      return ret;
    }
    
    Status ReadGoodsInfoFile(char *fileName, GoodsInfoBase *pGoodsInfoBase) {
    
      FILE *pGoodsInfoFile;
      FILE *pCleanGoodsInfoFile;
      int i = pGoodsInfoBase->partNum;
      if ((pGoodsInfoFile = fopen(fileName, "r")) == NULL) {
        return ERROR;
      }
      while (!feof(pGoodsInfoFile)) {
        pGoodsInfoBase->pGoodsInfoBase[i] = (Part *)malloc(sizeof(Part));
        if (pGoodsInfoBase->pGoodsInfoBase[i] == NULL) {
          return ERROR;
        }
        fscanf(pGoodsInfoFile, "%d\t\t%[ a-zA-Z]\t\t\t%d\t\t%f",
               &pGoodsInfoBase->pGoodsInfoBase[i]->number,
               pGoodsInfoBase->pGoodsInfoBase[i]->partName,
               &pGoodsInfoBase->pGoodsInfoBase[i]->onHand,
               &pGoodsInfoBase->pGoodsInfoBase[i]->price);
        fgetc(pGoodsInfoFile);
        i++;
        pGoodsInfoBase->partNum++;
      }
      fclose(pGoodsInfoFile);
      pGoodsInfoBase->partNum--;
      if ((pCleanGoodsInfoFile = fopen(fileName, "w")) == NULL) {
        return ERROR;
      }
      fprintf(pCleanGoodsInfoFile, "");
      fclose(pCleanGoodsInfoFile);
      return OK;
    }
    
    Status ExitSSOS(char *fileName, GoodsInfoBase *pGoodsInfoBase) {
      FILE *pPrintFile;
      int i, n;
      if ((pPrintFile = fopen(fileName, "a+")) == NULL) {
        return ERROR;
      }
      n = pGoodsInfoBase->partNum;
      for (i = 0; i < n; i++) {
        fprintf(pPrintFile, "%d\t\t%s\t\t%d\t\t%g\n",
                pGoodsInfoBase->pGoodsInfoBase[i]->number,
                pGoodsInfoBase->pGoodsInfoBase[i]->partName,
                pGoodsInfoBase->pGoodsInfoBase[i]->onHand,
                pGoodsInfoBase->pGoodsInfoBase[i]->price);
      }
      fclose(pPrintFile);
      //    for (i = 0; i < n;i++){
      //        free(pGoodsInfoBase->pGoodsInfoBase[i]);
      //        pGoodsInfoBase->pGoodsInfoBase[i] = NULL;
      //    }
      return OK;
    }
    
    Status Print(GoodsInfoBase *pGoodsInfoBase) {
      int i;
      printf("Part Number\tPart Name\tQuantity on hand\tPrice\n");
      for (i = 0; i < pGoodsInfoBase->partNum; i++) {
        PrintInfoOfAPart(i, pGoodsInfoBase);
      }
      return OK;
    }
    
    Status UpdataOnHand(int changeOnHand, GoodsInfoBase *pGoodsInfoBase, int i) {
      pGoodsInfoBase->pGoodsInfoBase[i]->onHand += changeOnHand;
      return OK;
    }
    
    Status UpdataPrice(float newPrice, GoodsInfoBase *pGoodsInfoBase, int i) {
      pGoodsInfoBase->pGoodsInfoBase[i]->price = newPrice;
      return OK;
    }
    
    Status Insert(Part *pNewPart, GoodsInfoBase *pGoodsInfoBase) {
      int i;
      i = pGoodsInfoBase->partNum;
    
      pGoodsInfoBase->pGoodsInfoBase[i] = (Part *)malloc(sizeof(Part));
      if (pGoodsInfoBase->pGoodsInfoBase[i] == NULL) {
        return ERROR;
      }
      *pGoodsInfoBase->pGoodsInfoBase[i] = *pNewPart;
      pGoodsInfoBase->partNum++;
      return OK;
    }
    
    Status Delete(int i, GoodsInfoBase *pGoodsInfoBase) {
      int n;
      n = pGoodsInfoBase->partNum;
      free(pGoodsInfoBase->pGoodsInfoBase[i]);
      for (; i < n - 1; i++) {
        pGoodsInfoBase->pGoodsInfoBase[i] = pGoodsInfoBase->pGoodsInfoBase[i + 1];
      }
      pGoodsInfoBase->pGoodsInfoBase[i] = NULL;
      pGoodsInfoBase->partNum--;
      return OK;
    }
    
    int main(void) {
      GoodsInfoBase goodsInfoBase;
      goodsInfoBase.partNum = 0;
      char operationCode;
      char fileName[MAX_LEN + 1] = {"C:\\Users\\HP\\Desktop\\GoodsInfoBase.txt"};
      Part NewPart;
      Bool isFull;
      Bool isIllegalInput;
      int searchNumber;
      int i;
      int updataCode;
      int changeOnHand;
      float newPrice;
      int scanfReturnValue[3];
    
      PrintInfoOfCopyright();
      PrintInfoOfInstructions();
      ReadGoodsInfoFile(fileName, &goodsInfoBase);
    
      while (1) {
    
        printf("Enter operation code: ");
        scanf(" %c", &operationCode);
    
        switch (operationCode) {
    
        case 'i':
          isFull = IsFull(&goodsInfoBase);
          if (isFull == YES) {
            printf("Goods is full.");
            break;
          }
          while (1) {
            printf("Enter part number: ");
            scanfReturnValue[0] = scanf("%d", &NewPart.number);
            fflush(stdin);
            printf("Enter part name: ");
            gets(NewPart.partName);
            fflush(stdin);
            printf("Enter quantity on hand: ");
            scanfReturnValue[1] = scanf("%d", &NewPart.onHand);
            fflush(stdin);
            printf("Enter price: ");
            scanfReturnValue[2] = scanf("%f", &NewPart.price);
            isIllegalInput =
                IsIllegalInput(scanfReturnValue[0], NewPart.partName[0],
                               scanfReturnValue[1], scanfReturnValue[2]);
            if (!isIllegalInput) {
              break;
            }
            printf("Illegal input!\n");
            fflush(stdin);
          }
          Insert(&NewPart, &goodsInfoBase);
          break;
    
        case 'd':
          printf("Enter part number: ");
          scanf("%d", &searchNumber);
          i = Search(searchNumber, &goodsInfoBase);
          if (i >= 0) {
            Delete(i, &goodsInfoBase);
          } else {
            printf("Part not found.\n");
          }
          break;
    
        case 's':
          printf("Enter part number: ");
          scanf("%d", &searchNumber);
          i = Search(searchNumber, &goodsInfoBase);
          if (i >= 0) {
            PrintInfoOfAPart(i, &goodsInfoBase);
          } else {
            printf("Part not found.\n");
          }
          break;
    
        case 'u':
          printf("Enter part number: ");
          scanf("%d", &searchNumber);
          i = Search(searchNumber, &goodsInfoBase);
    
          if (i >= 0) {
            printf("Enter what information you want to updata(0: onHand, 1: "
                   "price): ");
            scanf("%d", &updataCode);
    
            if (updataCode == 0) {
              printf("Enter change in quantity on hand: ");
              scanf("%d", &changeOnHand);
              UpdataOnHand(changeOnHand, &goodsInfoBase, i);
            } else if (updataCode == 1) {
              printf("Enter new price: ");
              scanf("%f", &newPrice);
              UpdataPrice(newPrice, &goodsInfoBase, i);
            } else {
              printf("Wrong updata code!");
            }
          } else {
            printf("Part not found.\n");
          }
          break;
    
        case 'p':
          Print(&goodsInfoBase);
          break;
    
        case 'q':
          ExitSSOS(fileName, &goodsInfoBase);
          exit(1);
    
        default:
          PrintInfoOfInstructions();
        }
    
        fflush(stdin);
        printf("\n");
      }
      return 0;
    }
    

    相关文章

      网友评论

          本文标题:超市管理系统完整代码

          本文链接:https://www.haomeiwen.com/subject/etffnxtx.html