一、设计的任务及要求
题目 13 | 结构数组的应用(可以自己设计功能)(管理类) |
---|---|
设计任务 | 模拟一个商店的商品销售管理系统(P209 例题 7-17) |
设计要求 | 库存表数据录入;销售表数据录入;销售商品;库存表查询;销售表查询;退出 |
二、设计主要数据和函数介绍
数据或函数名称 | 表示或功能说明 |
---|---|
goods_t | 结构体,包含商品的名称,价格,数量 |
storage | 结构体数组,库存表数据 |
sales_table | 结构体数组,销售表数据 |
add_storage | 进货功能,向库存表添加商品信息 |
add_sales | 给货物添加账单,向销售表添加商品信息 |
show_storage | 展示库存表数据 |
show_sales | 展示销售表数据 |
sell | 出售商品 |
三、设计的问题分析
该管理系统分为 5 个小问题,其中用户选择 1、2 时的功能相似,都是向表中添加信息,用户选择 4、5 时的功能也相似,都比较简单都是展示表的信息,当用户选择 3(出售商品)时,实现起来分为多个步骤,1.首先判断商品名称在库存表的有没有。2.判断库存表的商品数量是否大于 0。3 判断销售表中没有该商品。4 完成库存表商品数量-1,销售表商品数量 +1 的操作。
四、源程序代码及运行结果
运行结果:
我们连续选择两次 1,对库存表进行添加西红柿和土豆两个商品。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1ZHp2v3-1654494131435)(https://www.writebug.com/myres/static/uploads/2022/6/5/a5d48cc75f68ace437380cc8267767a8.writebug)]
我们选择 4,进行查看库存库中的商品。通过结果可见我们发现了我们添加的西红柿和土豆。
我们选择 5,进行查看销售库中的商品,通过结果可见没有出售东西,或手动添加,可见销售库空空如也。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KjvrpzpB-1654494131436)(https://www.writebug.com/myres/static/uploads/2022/6/5/128c825e452ae5bdc523ec919a846ee1.writebug)]
我们选择 2,在销售表中录入西红柿的销售信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IdGgZ4bH-1654494131436)(https://www.writebug.com/myres/static/uploads/2022/6/5/b78cef5f494fdb34207f977a8f3b0b49.writebug)]
我们选择 3,出售一个土豆。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8YBZfK0-1654494131437)(https://www.writebug.com/myres/static/uploads/2022/6/5/062ab109b2372d9d0935627c88d3a230.writebug)]
我们在选择 5,进行查看销售库中的商品,可以发现我们销售表中,有我们手动添加的西红柿的信息和出售土豆的信息。
我们在选择 4 对库存表中的商品进行查看,可见我们确实出售了一个土豆。
我们选择 6,最后成功的退出了系统。
程序源代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 1000 // 仓库中商品最多的种类
// 商品结构体
typedef struct goods_t{
int count;
double money;
char * name;
}goods;
goods storage[N];
goods sales_table[N];
int storage_total = 0;
int salse_total;
void add_storage(){
if(storage_total == N){
printf("仓库种类已满,添加失败!");
}else{
goods t_goods;
printf("请输入要添加到库存表商品的名称:");
scanf("%s",&t_goods.name);
printf("请输入要添加到库存表商品的价格:");
scanf("%lf",&t_goods.money);
printf("请输入要添加到库存表商品的数量:");
scanf("%d",&t_goods.count);
storage[storage_total] = t_goods;
storage_total++;
}
}
void add_sales(){
goods t_goods;
printf("请输入要添加到销售表商品的名称:");
scanf("%s",&t_goods.name);
printf("请输入要添加到销售表商品的价格:");
scanf("%lf",&t_goods.money);
printf("请输入要添加到销售表商品的数量:");
scanf("%d",&t_goods.count);
sales_table[salse_total] = t_goods;
salse_total++;
}
void show_storage(){
if(storage_total == 0){
printf("你的[库存表]中空空如也,请先[录入点商品]吧!");
}else{
int i;
for(i = 0; i < storage_total; i++){
printf("\n----库存表中第%d件商品----\n",i+1);
printf("商品名称:%s\n",&storage[i].name);
printf("商品价格:%.2f\n",storage[i].money);
printf("商品库存:%d\n",storage[i].count);
}
}
}
void show_sales(){
if(salse_total == 0){
printf("你的[销售表]中空空如也,请先[出售商品]或者[添加商品]吧!");
}else{
int i;
for(i = 0; i < salse_total; i++){
printf("\n----销售表中第%d件商品----\n",i+1);
printf("商品名称:%s\n",&sales_table[i].name);
printf("商品价格:%.2f\n",sales_table[i].money);
printf("商品销售量:%d\n",sales_table[i].count);
}
}
}
void sell(){
char * name;
int i,j;
if(storage_total == 0){
printf("你的仓库空空。。请录入商品后在来!");
return;
}
printf("请输入你要出售商品的名字:");
scanf("%s",name);
for(i = 0; i < storage_total; i++){
if(strcmp(name,(char *)(&storage[i].name)) == 0){
if(storage[i].count >=0 ){
storage[i].count--;
}else{
printf("该商品没有库存了,请先进货!");
return;
}
for(j = 0; j < salse_total; j++){
if(strcmp(name, (char *)(&sales_table[j].name)) == 0 ){
sales_table[i].count++;
break;
}
}
if(j == salse_total){
sales_table[salse_total].name = storage[i].name;
sales_table[salse_total].count = 1;
sales_table[salse_total].money = storage[i].money;
salse_total++;
}
break;
}
}
if(i == storage_total){
printf("你输入的商品在仓库中没有,可能是名字有误,请核对后在尝试!");
}
}
int main(){
int choice = 0;
while(1) {
printf("\n\n\n");
printf("****************天天商店的商品销售系统***************\n");
printf("\n");
printf(" 1.库存表数据录入\n");
printf(" 2.销售表数据录入 \n");
printf(" 3.出售商品 \n");
printf(" 4.库存表查询\n");
printf(" 5.销售表查询\n");
printf(" 6.退出\n");
printf("\n");
printf("*****************************************************\n");
printf("please choice(1-6):");
scanf("%d",&choice);
switch(choice){
case 1: add_storage(); break;
case 2: add_sales(); break;
case 3: sell(); break;
case 4: show_storage(); break;
case 5: show_sales(); break;
case 6: exit(0);
break;
}
}
return 0;
}
五、课程设计收获及体会
通过这次实验,首先增强了我的 C 语言的编程能力,加深了我对结构体的理解。其次增强了我错误的处理能力,我做课设的时候并不是一帆风顺的,当遇到困难(例如为什么 strcmp(name, sales_table[j].name)总是报错)的时候,我静下心来思考问题。不断上网搜寻,最终解决了该问题。