C语言编写超市收银系统,要求使用链式存储结构,要有录入商品基本信息如名称,条形码,价格,数量,修改商品数量,删除商品,结账,退出系统的功能
2条回答 默认 最新
关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
解答:- 定义商品结构体 首先需要定义一个结构体来表示商品,包括商品名称、条形码、价格和数量:
typedef struct goods { char name[20]; // 商品名称 char barcode[13]; // 条形码 float price; // 价格 int num; // 数量 struct goods *next; // 指向下一个商品的指针 } Goods;- 初始化链表 使用链式存储结构,需要定义一个头节点。程序开始时,可以先初始化一个空链表:
Goods *head = NULL; // 头节点指针- 录入商品基本信息 录入商品基本信息包括商品名称、条形码、价格和数量。我们可以定义一个函数
addGoods()来实现这个功能:
void addGoods() { Goods *p = (Goods *)malloc(sizeof(Goods)); // 新建一个商品节点 printf("请输入商品名称:"); scanf("%s", p->name); printf("请输入商品条形码:"); scanf("%s", p->barcode); printf("请输入商品价格:"); scanf("%f", &(p->price)); printf("请输入商品数量:"); scanf("%d", &(p->num)); p->next = head; // 插入链表头 head = p; printf("添加商品成功!\n"); }每次录入商品基本信息后,将商品节点插入到链表的头部即可。 4. 修改商品数量 修改商品数量包括查找商品和修改数量两个步骤。我们可以定义一个函数
updateNum()来实现这个功能:void updateNum() { char barcode[13]; int num; printf("请输入要修改数量的商品条形码:"); scanf("%s", barcode); Goods *p = head; while (p != NULL) { if (strcmp(p->barcode, barcode) == 0) { // 找到符合条件的商品 printf("请输入新的商品数量:"); scanf("%d", &num); p->num = num; printf("修改商品数量成功!\n"); return; } p = p->next; } printf("未找到该商品,请检查条形码是否正确!\n"); }- 删除商品 删除商品同样需要查找商品。删除商品后,需要将删除的商品节点的前一个节点的指针指向删除的商品节点的下一个节点。这里同样定义一个函数
deleteGoods()来实现这个功能:
void deleteGoods() { char barcode[13]; printf("请输入要删除的商品条形码:"); scanf("%s", barcode); Goods *p = head, *q = NULL; while (p != NULL) { if (strcmp(p->barcode, barcode) == 0) { // 找到符合条件的商品 if (q == NULL) { // 如果删除的是第一个节点 head = p->next; } else { q->next = p->next; } free(p); printf("删除商品成功!\n"); return; } q = p; p = p->next; } printf("未找到该商品,请检查条形码是否正确!\n"); }- 结账 结账需要遍历链表中所有节点,计算出每个商品的总价,并累加到最终的总价。这里同样定义一个函数
checkOut()来实现这个功能:
void checkOut() { float total = 0; Goods *p = head; while (p != NULL) { total += p->price * p->num; // 计算每个商品的总价并累加 p = p->next; } printf("总价为:%.2f 元\n", total); }- 退出系统 退出系统可以使用
exit()函数实现:
exit(0); // 退出程序完整代码:
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报