「云顶书院」适应期第二阶段学习总结与思考

2023-02-27 14:52:25 浏览数 (1)

作业任务

超市老板

题目

你是一个超市的老板,超市里面有很多的商品,包括 {"牛奶","面包","方便面","矿泉水","火腿肠","溜溜梅","薄荷糖","豆腐干","辣条","纸巾"}, 对应的价格是:{3,2,5,1,1.5,5,10,1,0.5,1} 要求: 试编写一个程序,要求输入对应的商品名称可以查询该商品的单价

拓展要求1: 自行输入购买的商品种类和数量(不可以预先设定) 可以自动实现对商品的总价进行清算

拓展要求2: 并列出购物的小票(购买的商品名称 单价 购买个数 总价) 要求对于小票中的商品进行同种商品的合并,比如多次输入“面包”的时候,可以在小票中只显示一次合并的数量

拓展要求3: 增加 添加商品 的功能 添加新商品后,输入对应的商品名称可以查询该商品的单价,并满足以上拓展要求 示例 小票如下: 商品名 单价 数量 面包 2 2 牛奶 3 6 总价 22 而不是 小票如下: 商品名 单价 数量 面包 2 2 牛奶 3 6 面包 2 1

分析
整体分析

 本题的基本要求是求商品单价,可以定义两个数组为全局变量分别存储商品名和价格,其中商品名为字符串,应使用char类型的二维数组存储;价格为存在小数,应使用float类型的一维数组存储。再看拓展要求中的1、2项的要求可以用局部变量解决,第3项涉及到了数据的增加,那么就需要再定义一个全局变量count用于记录数组长度。  不难发现,无论是在基本要求还是在拓展要求中,程序都要进行一个相同的过程:在已有商品中查找,那么我们就可以定义一个函数check_name用于查找指定商品名并返回相应结果:在找到商品时,返回对应索引;在找不到商品时就返回-1(为什么不返回0,这样不是更方便使用if对0和非0进行判断了吗?因为查找到第一个时会返回索引0,而负数不是任何商品的索引!)  本程序功能较多,故可以在一个主菜单的死循环while(1)中添加各个功能,而开始菜单就写在主菜单循环的开头:1.单价查询 2.商品结算 3.添加商品 0.退出程序

需要的知识

标准输入/输入函数scanf和printf(stdio.h)

DOS指令函数system(stdlib.h) cls用于清屏、pause可用于程序退出时

字符串操作函数strcmp、strcpy(string.h)

if-else判断、for while循环语句

函数的定义

解题

首先是库的导入

代码语言:javascript复制
#include
#include
#include

定义全局变量

代码语言:javascript复制
char goods_names[256][256] = {"牛奶","面包","方便面","矿泉水","火腿肠","溜溜梅","薄荷糖","豆腐干","辣条","纸巾"};
float goods_price[256] = {3,2,5,1,1.5,5,10,1,0.5,1};
int count=10;

定义查找函数

代码语言:javascript复制
//查找商品:找到返回索引,否则返回 -1 
int check_name(char name[]){
 int i;
 for(i=0;i

由于程序需要进行多次字符串的输入,就定义一个函数内变量

代码语言:javascript复制
char input_str[256];

在循环开始时输出主菜单,并读取用户输入的数据

{collapse-item label="思考:为什么不使用int类型的输入?"} 由于用户输入的数据具有不确定性——可能是一个数字、好几个数字、字母、汉字等,故使用字符串进行判别更加安全 {/collapse-item}

代码语言:javascript复制
printf("菜单:n1.单价查询n2.商品结算并列出小票n3.添加商品n0.退出程序nn请输入指令(1/2/3/0):");
scanf("%s", &input_str);

在查询完商品后使用进行清屏

代码语言:javascript复制
system("cls");

判断进入购物车指令

代码语言:javascript复制
else if(!(strcmp(input_str, "2")))

定义局部变量

代码语言:javascript复制
//定义购物车 {索引:数量} x 256
int cart[256][2]; 
int cart_count=0;

搜索商品

代码语言:javascript复制
system("cls");
printf("请输入要购买的商品名称:");
scanf("%s", &input_str);
int resp = check_name(input_str);
while(resp == -1){
 printf("查询无此商品,请重新输入:");
 scanf("%s", &input_str);
 resp = check_name(input_str);
}

输入数量

代码语言:javascript复制
printf("请输入要购买的%s数量:", input_str);

int item_count;
scanf("%d", &item_count);
while(item_count <= 0 ){
 printf("数量需大于0,请重新输入要购买的%s数量:", input_str);
 scanf("%d", &item_count);
}

遍历购物车是否有重复商品 ,如果有则添加,并改变flag的值

代码语言:javascript复制
int i;
int flag=1;
for(i=0;i

如果找不到重复商品则向购物车内添加项目

代码语言:javascript复制
if(flag){
 cart[cart_count][0] = resp;
 cart[cart_count][1] = item_count;
 cart_count  ;
}

一个二级菜单

代码语言:javascript复制
printf("添加成功!n输入1继续添加商品输入其他内容退出(1/Others):");
scanf("%s", &input_str);
if(strcmp(input_str, "1")){
 break;
}

清屏并输出购物明细

代码语言:javascript复制
system("cls");
printf("您的购物详单如下:");
int i;
float total_cost=0;
for(i=0;i

新增商品

代码语言:javascript复制
else if(!(strcmp(input_str, "3")))

清屏并输入商品名,存在则直接进入下一次循环输入商品名

{collapse-item label="思考:为什么不用break"} 待更新··· {/collapse-item}

代码语言:javascript复制
system("cls");
printf("请输入要添加商品的名称:");
scanf("%s", &input_str);
int resp=check_name(input_str);
if(resp!=-1){
    printf("n该商品已存在,添加失败!nn");
    continue; 
}

读入价格,并保留两位 然后count自增 使用%.2f可以保留两位小数输出

代码语言:javascript复制
printf("请输入商品价格(最小位数为:分,即小数点后两位):");
float input_price;
scanf("%f", &input_price);
input_price = ((int)(input_price*100))/100.0;
strcpy(goods_names[count], input_str);
goods_price[count] = input_price;
count  ;
printf("添加成功!商品名:%s,价格:%.2fnn", input_str, input_price);
完整代码
代码语言:javascript复制
//Shop program written by moyi
//Date: 2020/10/21

#include
#include
#include

char goods_names[256][256] = {"牛奶","面包","方便面","矿泉水","火腿肠","溜溜梅","薄荷糖","豆腐干","辣条","纸巾"};
float goods_price[256] = {3,2,5,1,1.5,5,10,1,0.5,1};
int count=10;

//查找商品:找到返回索引,否则返回 -1 
int check_name(char name[]){
    int i;
    for(i=0;i

未完待续...

字典

题目

题目解释 1、预先设定50组英语词汇(附件txt文件),和与其对应的50组词、50组中文解释。 2、通过查询英语词汇,可得到其【中文翻译】。

拓展要求: 1、程序能进行循环。 2、增加 添加词汇 的功能 添加新词汇后可以查到该词汇的中文翻译和解释。

分析
解题

排序

题目

题目解释 用户需输入10个整数,程序对其进行排序。 要求: 奇数全在前面,偶数全在后面,并且按照从小到大的顺序输出。

拓展要求: 1、 增加循环; 2、 输出后,可以添加新数字,仍要求奇数全在前面,偶数全在后面,并且按照从小到大的顺序输出。 示例: 输入:9 96 23 21 6 200 2 28 92 10 输出:9 21 23 2 6 10 28 92 96 200

分析
解题

写在最后

祝各位未来的程序员节日快乐!

0 人点赞