计导作业——商品记录
Posted 水郁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计导作业——商品记录相关的知识,希望对你有一定的参考价值。
题目
问题描述:有一家商店,为了查看店里有些什么商品、数量有多少以及每件商品的价格如何,需要编制一份商品目录。每种商品都包括4种属性:商品ID、商品名、数量与价格。商品ID为0—99之间的整数,每种商品的ID号互不相同,所以这里默认只有100种商品;商品名只包含大小写字母与空格,长度不超过35个字符;商品数量的范围是0—99999;商品的价格为一个非负的浮点数。
你要帮助商店设计一个二进制文件,存储该商店的所有商品情况。下表为该商店商品清单的样例。
记录号(商品ID) |
商品名 |
数量 |
价格 |
5 |
Lamp |
23 |
5.99 |
8 |
Screwdriver |
9 |
7.99 |
10 |
Hammer |
10 |
12.00 |
13 |
Bicycle |
5 |
100.99 |
16 |
Optical mouse |
21 |
11.50 |
25 |
keyboard |
32 |
59.99 |
要求:
1.设计一个结构,来表示一件商品。
2.创建名为“commodity.dat”的二进制文件,存储该商店商品信息,初始化为100条空记录,用商品ID作为记录号。
3.实现对“commodity.dat”中商品信息的初始化录入。
4.实现对“commodity.dat”中商品信息的更新,其中记录号不可以更新,其他三项信息均可更新。
5.实现对“commodity.dat”中商品信息的删除。
6.实现对“commodity.dat”中商品信息的输出。
7.上述2~6项中对文件的初始化、记录的删除和更新、文件信息的输出这些功能,都分别定义成单独的函数。
程序运行效果:
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
[选择]1↙
100条空记录创建完毕
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
[选择]2↙
请输入商品信息[记录号为-1代表输入结束]:
商品ID:5↙
商品名:Lamp↙
数量:23↙
价格:5.99↙
请输入商品信息[记录号为-1代表输入结束]:
商品ID: 8↙
商品名:Screwdriver↙
数量:9↙
价格:7.99↙
请输入商品信息[记录号为-1代表输入结束]:
商品ID: 10↙
商品名:Hammer↙
数量:10↙
价格:12.00↙
请输入商品信息[记录号为-1代表输入结束]:
-1↙
商品信息如下:
记录号(商品ID) 商品名 数量 价格
5 Lamp 23 5.99
8 Screwdriver 9 7.99
10 Hammer 10 12.00
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
[选择]3↙
请输入待更新商品ID:
8↙
原商品信息如下:
记录号(商品ID) 商品名 数量 价格
8 Screwdriver 9 7.99
请输入更新信息[如某项不更新请直接按回车键]:
商品名:↙
数量:7↙
价格:9.99↙
更新后商品信息如下:
记录号(商品ID) 商品名 数量 价格
8 Screwdriver 7 9.99
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
[选择]5↙
商品信息如下:
记录号(商品ID) 商品名 数量 价格
5 Lamp 23 5.99
8 Screwdriver 7 9.99
10 Hammer 10 12.00
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
[选择]3↙
请输入待更新商品ID:
90↙
对不起,不存在该商品,无法进行更新操作
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
[选择]4↙
请输入待删除商品ID:
8↙
删除成功
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
[选择]5↙
商品信息如下:
记录号(商品ID) 商品名 数量 价格
5 Lamp 23 5.99
10 Hammer 10 12.00
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
[选择]4↙
请输入待删除商品ID:
8↙
对不起,不存在该商品,无法进行删除操作
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
1
100条空记录创建完毕
请输入您的选择:
1--创建一个100条空记录的文件
2--输入商品记录
3--更新商品记录
4--删除商品记录
5--输出商品记录
2
请输入商品信息[记录号为-1代表输入结束]:
记录号:5
商品名:Lamp
数量:23
价格:5.99
请输入商品信息[记录号为-1代表输入结束]:
记录号:8
商品名:Screwdriver
数量:9
价格:7.99
请输入商品信息[记录号为-1代表输入结束]:
记录号:10
商品名:Hammer
数量:10
价格:12.00
请输入商品信息[记录号为-1代表输入结束]:
-1
代码
#include<stdio.h> #include<string.h> typedef struct Commodity { int id; char name[40]; int num; double price; } cd; cd a[105]; void init(FILE *f) { int i; rewind(f); for(i=1; i<=100; i++) a[i].id=i; fwrite(a, sizeof(cd), 100 , f); printf("100条空记录创建完毕\n"); } void add() { int i,id[105],cnt=0; while(1) { printf("请输入商品信息[记录号为-1代表输入结束]:\n"); printf("商品ID:"); scanf("%d",&id[++cnt]); if(id[cnt]==-1)break; printf("商品名:"); scanf("%s",&a[id[cnt]].name); printf("数量:"); scanf("%d",&a[id[cnt]].num); printf("价格:"); scanf("%lf",&a[id[cnt]].price); } printf("商品信息如下:\n"); printf("记录号(商品ID)\t\t商品名\t\t数量\t\t价格\n"); for(i=1; i<cnt; i++) printf("%-16d\t\t%-6s\t\t%-4d\t\t%-4lf\n", id[i],a[id[i]].name,a[id[i]].num,a[id[i]].price); } void update(FILE *f) { int id; while(1){ printf("请输入待更新商品ID:\n"); scanf("%d",&id); if(id==-1)break; if(strlen(a[id].name)==0) printf("对不起,不存在该商品,无法进行更新操作\n"); else { fseek(f,(id-1)*sizeof(cd),SEEK_SET); fwrite(a,sizeof(cd),1,f); printf("更新%d成功\n",id); } } } void delete(FILE *f){ int id; rewind(f); while(1){ printf("请输入待删除商品ID:\n"); scanf("%d",&id); if(id==-1)break; if(strlen(a[id].name)==0) printf("对不起,不存在该商品,无法进行更新操作\n"); else { memset(a[id].name,0,sizeof(a[id].name)); a[id].num=0; a[id].price=0; fseek(f,(id-1)*sizeof(cd),SEEK_SET); fwrite(a,sizeof(cd),1,f); printf("删除%d成功\n",id); } } } void output(){ int i; printf("商品信息如下:\n"); printf("记录号(商品ID)\t\t商品名\t\t数量\t\t价格\n"); for(i=1; i<=100; i++){ if(strlen(a[i].name)!=0) { printf("%-16d\t\t%-6s\t\t%-4d\t\t%-4lf\n", i,a[i].name,a[i].num,a[i].price); } } } int main() { FILE *f=fopen("commodity.dat","rb+");//读写,不清空,覆盖写。 while(1){ int i; printf("请输入您的选择:\n"); printf("1--创建一个100条空记录的文件\n2--输入商品记录\n3--更新商品记录\n4--删除商品记录\n5--输出商品记录\n"); printf("[选择]"); scanf("%d",&i); if(i==1)init(f); else if(i==2)add(); else if(i==3)update(f); else if (i==4)delete(f); else if(i==5)output(); getchar(); printf("\n"); } fclose(f); return 0; }
还是,欢迎同学们找出bug
以上是关于计导作业——商品记录的主要内容,如果未能解决你的问题,请参考以下文章
作业二:优化购物车:用户入口:1.将商品的信息存到文件中;2.将已经购买的商品余额记录存到文件中。商家入口:1.可以添加商品;2.可以修改商品的价格