资源描述
计算机技术基础课程设计
C语言
设计报告
题目:花店经营管理系统
一.选题背景
本例实现了一个花店经营的管理系统,在经营的过程中,必需对花的库存量,销售量,剩余量以及花的种类,单价,颜色,名字等,有系统的管理。本程序定义了一个结构数组,并运用了一个主函数调用五个函数以实现整个花店的经营和管理。
二.设计思想:
编程思路:首先在程序开始处,引入了头文件,可以直接调用函数,然后对花的种类和五项命令进行了宏定义,接着枚举类型定义了花的颜色,定义了结构体数组,并且编写了”enter_data()”,”put_data()”,“buy()”,”find()”,”changecmd()”五个子函数,最后在mian函数的内部对各个子函数进行调用,实现综合管理。
三.主要解决问题的方法及技术关键:
1.运用指针定义了五项命令,分别指向五个函数,便于调用。
2.运用了for, if---else---if, while, switch---case用来控制程序的流程。
主函数流程图
开 始
系统初始化
退 出
判断是否为
(quit)命令
接受键盘命令
退 出
Buy()
enter()
Find()
命令转换(把字符命令转换为数字命令)
是
Put()
否
Buy()流程图
否
是
是
入 口
提 示 信 息
输入花名,价格
选择花的种类和数量
从i=0起,到第i个花开始比较
是否出现该种花
输出计算价格
出 口
是否是最后一朵花
返 回
i++
否
Put()流程图
入 口
输出花的各项值
否
判 断
i<size
是
输出花的各项的值
进行switch,根据所需内容,选择执行。
输出花的单价和数量
出 口
Enter()流程图
没有所要选择的颜色
输入你选择的颜色
判断是否有所选择的颜色
输入花的各项值
判 断
i<size
提示信息
入 口
出 口
否
是
是
否
i++
是
否
i++
是
否
i++
Find()流程图
入 口
提 示 信 息
输入查找类型
是否按名字查询
从i=0,到第i个花开始比较
是否有这种花
输出花名,颜色,单价数量
出 口
是否按价格查询
从i=0,到第i个花开始比较
是否有这种花
输出花名,颜色,单价数量
出 口
是否按颜色查询
从i=0,到第i个花开始比较
是否有这种花
输出花名,颜色,单价
出 口
,
五.程序清单
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "dos.h"
#define SIZE 8
#define CMDSIZE 5
typedef enum /*枚举类型定义*/
{
red,white,yellow,purple,orange
}COLOR;
typedef struct /*结构体定义*/
{
char name[20];
COLOR color;
float rate;
int amount;
}FLOWER;
char *Dcmd[]={"buy","put","look","find","help"};
/*定义了5项命令的指针类型*/
void enter_data(FLOWER flower[]); /*定义库存输入函数*/
float buy(FLOWER flower[]); /*定义销售函数*/
void put_data(FLOWER flower[]); /*定义库存输出函数*/
void findflower(FLOWER flower[]);/*定义查询函数*/
int changecmd(char cmd[]);/*定义命令解释函数*/
void main()
{
FLOWER flower[SIZE];
float price;
char cmd[5]={'\0','\0','\0','\0','\0'};
char exits[5]="quit";
int recmd=0;
int i;
for(i=0;i<SIZE;i++)
{
memset(flower[i].name,0,20); /*成员设置,各类型初始化*/
flower[i].rate=0;
flower[i].amount=0;
flower[i].color=white;
}
printf("花店经营管理系统\n");
printf("\nYou can input 'buy','look','put','help','find':\n");
while(1) /*命令转换,把字符转换为数字*/
{
scanf("%s",cmd);
if(strcmp(cmd,exits)==0)
exit(1);
recmd=changecmd(cmd);
switch(recmd)
{
case 0:
printf("a bad command please input a corrcet cmd \n"); /*输入了错误信息的提示*/
break;
case 1:
price=buy(flower);
if(price==0)
printf("\nSorry,buy error");
else
printf("\n OK,Please pay money %f \n",price);
break;
case 2:
enter_data(flower);
break;
case 3:
put_data(flower);
break;
case 4:
findflower(flower);
break;
case 5:
printf("\nYoucaninput 'buy','look','put','help','find':\n");
break;
}
}
}
/*命令解释函数*/
/*该函数处理接收到的命令 通过与命令数组里的预定义命令比较 返回命令在数组中的位置*/
int changecmd(char cmd[])
{
int i=0;
for(i=0;i<CMDSIZE;i++)
{
if(strcmp(cmd,Dcmd[i])==0)
return i+1;
}
return 0;
}
/*库存输入函数*/
/*该函数接受键盘输入 把输入数据与库存对应*/
void enter_data(FLOWER flower[])
{
int i,flag;
for(i=0;i<SIZE;i++)
{
printf("Please enter the flowers:\n");
printf("Flower name is:\n");
scanf("%s",flower[i].name);
printf("Flower rate is:\n");
scanf("%f",&flower[i].rate);
printf("Flower amount is:\n");
scanf("%d",&flower[i].amount);
flag=1;
while(flag) /*接受用户选择的颜色*/
{
printf("0->red\t1->white\t2->yellow\t3->purple\t4->orante\n");
printf("Please choose a color:\n");
scanf("%d",&flower[i].color);
if(flower[i].color>=0&&flower[i].color<=4)
flag=0;
else
printf("Not have this color\n");
}
}
}
/*输出现有库存的鲜花数据的函数定义*/
void put_data(FLOWER flower[])
{
int i;
printf("\nName Color Rate Amount\n");
for(i=0;i<SIZE;i++)
{
printf("%-12s",flower[i].name);
switch(flower[i].color)
{
case red:
printf("%-8s","red");
break;
case white:
printf("%-8s","white");
break;
case yellow:
printf("%-8s","yellow");
break;
case purple:
printf("%-8s","purple");
break;
case orange:
printf("%-8s","orange");
break;
}
printf("%-10.2f%-10d\n",flower[i].rate,flower[i].amount);
}
}
/*询问用户购买的鲜花的种类和株的数量,计算总的价格的函数定义*/
float buy(FLOWER flower[])
{
int i;
char name[20];
COLOR color;
float rate,price;
int amount,flag;
printf("\nPlease enter name and rate you want to buy:\n");
/*输出需要的鲜花的名字和价格*/
scanf("%s%f",name,&rate);
flag=1;
while(flag) /*客户购买花的情况*/
{
printf("0->red\t1->white\t2->yellow\t3->purple\t4->orante\n");
printf("Please choose a color:\n");
scanf("%d",&color);
if(color>=0&&color<=4)
flag=0;
else
printf("Not have this color\n");
}
printf("Please amount you want to buy:\n");
/*输出需要的花的数量*/
scanf("%d",&amount);
for(i=0;i<SIZE;i++)
{
if(flower[i].rate==rate&&strcmp(flower[i].name,name)==0&&flower[i].color==color)
break;
}
if(i==SIZE)
{
printf("\nNot fount the flower you buy\n");
/*没有要买的花*/
price=0;
}
else if(flower[i].amount<amount)/*所购花数量不够*/
{
printf("\nAmount not enought\n");
price=0;
}
else
{
flower[i].amount=flower[i].amount-amount;
price=flower[i].rate*amount; /*找到,剩余数量够,可以买花,并计算总价格*/
}
return price;
}
/*对于库存鲜花的的查询方式的定义*/
void findflower(FLOWER flower[])
{
int i,rcmd;
char name[20];
float rate;
COLOR color;
printf("Please choose a number :\n");/*输出查询的方式*/
printf("0->find as name\t 1->find as rate \t 2->find as color\n");
scanf("%d",&rcmd);
switch(rcmd)
{
case 0: /*按花名查询*/
printf("In put a flower name:\n");
scanf("%s",name);
for(i=0;i<SIZE;i++)
{
if(flower[i].name==name)
printf("%s\t%d\t%f\t%d\n",flower[i].name,flower[i].color,flower[i].rate,flower[i].amount);
}
break;
case 1: /*按数量查询*/
printf("In put a flower rate:\n");
scanf("%f",&rate);
for(i=0;i<SIZE;i++)
{
if(flower[i].rate==rate)
printf("%s\t%d\t%f\t%d\n",flower[i].name,flower[i].color,flower[i].rate,flower[i].amount);
}
break;
case 2: /*按颜色查询*/
printf("In put a flower color:\n");
scanf("%d",&color);
for(i=0;i<SIZE;i++)
{
if(flower[i].color==color)
printf("%s\t%d\t%f\t%d\n",flower[i].name,flower[i].color,flower[i].rate,flower[i].amount);
}
break;
}
}
六.总结、设计结果说明
一.通过本程序的练习,可以让读者了解结构体的定义和函数的调用,对程序中各种语句的运用更加熟练把握。
二.本程序虽然简短,但可以简单地运用到花店的经营管理中,通过这个操作,让花店经营得有条理,方便了顾客,也方便了自己。
展开阅读全文