计导作业——商品记录

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.可以修改商品的价格

老男孩Day2作业:购物车程序

软工网络15团队作业4-DAY4

2020.1.3计导全面复习

作业14-数据库

软工网络15团队作业4-DAY3