슈퍼마켓 관리 시스템 전체 코드

12971 단어
#include 
#include 
#include 
#include 

#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 and #include.*/

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
", 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)!
"); puts("Super Supermarket OS Command V1.0, 2017-12-9"); puts("developed by Rong Yang."); puts("All rights reserved.
"); 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.
"); 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
", 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
"); 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!
"); 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.
"); } 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.
"); } 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.
"); } break; case 'p': Print(&goodsInfoBase); break; case 'q': ExitSSOS(fileName, &goodsInfoBase); exit(1); default: PrintInfoOfInstructions(); } fflush(stdin); printf("
"); } return 0; }

좋은 웹페이지 즐겨찾기