//编写一个简单的水果管理系统

//1.可以查看所有水果

//2.可以添加新水果(添加的时候判断水果是否重名)

//3.可以对所有水果排序,价格降序,数量降序

//4.删除指定名称的水果

//5.退出系统

#include

#include

#include

typedef struct fruit{

char name[30];   //水果名

int count;       //水果数量

double price;    //水果单价

}fruit_t;

//菜单函数

void log_menu();

//查看函数

void check(fruit_t *p,int *count1);

//添加函数

int  add(fruit_t *p,int *count1);

//功能控制函数

void log_ctrl(fruit_t *p,int *count1);

//删除函数

int del(fruit_t *p,int *count1);

//排序菜单函数

void cmp_menu();

//排序控制函数

void cmp_ctrl(fruit_t *p,int *count1);

//按数量排序函数

int cmp_count_desc(const void *px,const void *py);

//按价格排序排序函数

int cmp_price_desc(const void *px,const void *py);

//系统初始化函数

void log_start(fruit_t *p,int *count1);

//保存函数

void write(fruit_t *p,int *count1);

int main(){

fruit_t stu[100]={"\0"};    //保存所有水果名、数量、单价

int count1=0;          //count1表示水果种类数量

printf("欢迎来到水果管理系统\n");

log_start(stu,&count1);        //系统初始化

printf("初始化成功\n");

log_ctrl(stu,&count1);    // 功能控制函数

return 0;

}

//系统初始化函数

void log_start(fruit_t *p,int *count1){

FILE *fp=NULL;

int i=0;

fp=fopen("data","a+");

if(NULL==fp)

exit(1);

while(fread(&p[*count1],sizeof(fruit_t),1,fp))

*count1+=1;

fclose(fp);

}

//功能控制函数

void log_ctrl(fruit_t *p,int *count1){

int chose=0;

while(1){

chose=0;

log_menu();

printf("请选择:");

scanf("%d",&chose);

switch(chose){

case 1://查看

check(p,count1);

break;

case 2://添加

if(add(p,count1)==1)

printf("添加失败,已有此水果\n");

else

printf("恭喜您,添加成功\n");

break;

case 3://排序

cmp_ctrl(p,count1);

break;

case 4://删除

if(del(p,count1)==1)

printf("删除失败,没有此种类水果\n");

else

printf("恭喜您,删除成功\n");

break;

case 5://退出

write(p,count1);    //保存

printf("信息保存成功\n");

exit(0);

break;

default:

printf("输入错误,请重新输入!\n");

}

}

}

//保存函数

void write(fruit_t *p,int *count1){

FILE *fp=NULL;

int i=0;

fp=fopen("data","w");

if(NULL==fp)

exit(2);

fwrite(p,sizeof(fruit_t),*count1,fp);

fclose;

}

//排序控制函数

void cmp_ctrl(fruit_t *p,int *count1){

int chose=0;

if(*count1==0){

printf("水果种类为0,排序失败\n");

return;

}

while(1){

cmp_menu();

printf("请选择:");

scanf("%d",&chose);

switch(chose){

case 1:        //数量

qsort(p,*count1,sizeof(fruit_t),cmp_count_desc);

printf("排序成功\n");

break;

case 2:        //价格

qsort(p,*count1,sizeof(fruit_t),cmp_price_desc);

printf("排序成功\n");

break;

case 3:        //返回

return;

break;

default:

printf("输入错误,请重新输入\n");

}

}

}

//按价格排序排序函数

int cmp_price_desc(const void *px,const void *py){

const fruit_t *p1=px;

const fruit_t *p2=py;

if(p1->price>p2->price)

return -1;

else if(p1->priceprice)

return 1;

else

return 0;

}

//按数量排序函数

int cmp_count_desc(const void *px,const void *py){

const fruit_t *p1=px;

const fruit_t *p2=py;

if(p1->count>p2->count)

return -1;

else if(p1->countcount)

return 1;

else

return 0;

}

//排序菜单函数

void cmp_menu(){

printf("1.按数量排序2.按价格排序3.返回\n");

}

//删除函数 0-成功 1-失败

int del(fruit_t *p,int *count1){

int i=0,j=0;     //j保存要删除的水果下标

char str[30]="\0";

int flag=0;

printf("请输入要删除的水果名:");

scanf("%s",str);

flag=0;

for(i=0;i<=*count1;i++){

if(strcmp(p[i].name,str)==0){

flag=1;

j=i;

break;

}

}

if(flag==0)

return 1;

for(i=j;i

strcpy(p[i].name,p[i+1].name);

p[i].count=p[i+1].count;

p[i].price=p[i+1].price;

}

*count1-=1;

return 0;

}

//添加函数,1-失败 0-成功

int add(fruit_t *p,int *count1){

int i=0;

printf("水果名:");

scanf("%s",p[*count1].name);

for(i=0;i

if(strcmp(p[*count1].name,p[i].name)==0)

return 1;

printf("数  量:");

scanf("%d",&p[*count1].count);

printf("价  格:");

scanf("%lf",&p[*count1].price);

*count1+=1;

return 0;

}

//查看函数

void check(fruit_t *p,int *count1){

int i;

if(*count1==0){

printf("水果种类为0\n");

return;

}

printf("水果\t数量\t单价\t\n");

for(i=0;i

printf("%s\t%d\t%.2lf\t\n",p[i].name,p[i].count,p[i].price);

}

//菜单函数

void log_menu(){

printf("1.查看2.添加3.排序4.删除5.退出\n");

}

在c语言中卖水果的程序,C语言写的简易水果管理系统相关推荐

  1. c语言中有关随机数的程序,C语言中随机数相关问题

    用C语言产生随机数重要用到rand函数.srand函数.及宏RAND_MAX(32767),它们均在stdlib.h中进行了声明. int rand(void);//生成一个随机数 voidsrand ...

  2. C语言中含有阶乘的程序,c语言阶乘(c语言求10的阶乘的程序)

    用C语言求1!+2!+3!+..+20! 请高手指教 #include using namespace std; int main() { int sum = 0; for ( int i = 1; ...

  3. c语言中希尔排序的程序,c语言实现希尔排序算法

    1.算法简介 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名.希尔排序实质上是一种分组插入方法.它的 ...

  4. c语言中英互译程序,c语言怎么翻译? 程序怎么运行?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 } /*******************************LED动作*************************************/ ...

  5. c语言按键实现跳转程序,C语言中的跳转语句

    <C语言中的跳转语句>由会员分享,可在线阅读,更多相关<C语言中的跳转语句(4页珍藏版)>请在人人文库网上搜索. 1.C语言中的跳转语句c语言有4个跳转语句return.got ...

  6. c语言代码存放的区域 堆栈,C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)...

    BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据 ...

  7. c语言常见错误分析和程序调试,C语言中常见错误分析及程序调试

    总结分析了C语言中常见错误及程序调试的相关技巧,以提高初学者的编程能力. 2 8 2月 0年l 0 电脑学习 第6 期 C语言中常见错误分析及程序调试 陈伟' 陈东淼 摘要:总结分析了 C语言中常见错 ...

  8. C语言中打开一个应用程序可以调用或运行命令

    C语言中打开一个应用程序可以调用或运行命令system(),也可以调用操作系统的API函数,比如Windows系统可以调用CreateProcess().ShellExecuteEx()等函数来打开一 ...

  9. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  10. 单片机C语言中的位运算符,单片机c语言教程第八课 运算符和表达式(位运算符)...

    学过汇编的朋友都知道汇编对位的处理能力是很强的,但是单片机C语言也能对运算对象进行按位操作,从而使单片机C语言也能具有一定的对硬件直接进行操作的能力.位运算符的作用是按位对变量进行运算,但是并不改变参 ...

最新文章

  1. 信息熵是什么 转 理论吃透的创新解释
  2. 三年级计算机课教案文档,小学三年级信息技术第十三课文件和文件夹教学设计...
  3. 随机分配效果在task中的应用,公司内部代码片
  4. BZOJ 4259 FFT
  5. 分位数(quantiles)、Z-score 与 F-score
  6. Ubuntu Terminal Shortcut
  7. GridView中的格式化
  8. 手把手玩转win8开发系列课程(20)
  9. 【干货】高盛合伙人制度和激励机制!
  10. MySQL如何使用.sql后缀的文件
  11. 用计算机画函数图象的软件,自动画出函数图象的软件 真像函数图像绘制器
  12. 宝马android系统升级,宝马史上最大规模软件升级,换新OS7系统和安卓Auto,您的换了吗...
  13. [TSP-FCOS]Rethinking Transformer-based Set Prediction for Object Detection
  14. 熵值法确定权重算法及Matlab实现
  15. VMware安装虚拟机操作步骤[史上最详细]
  16. 超市会员管理系统(面向对象)
  17. 知名互联网公司都在使用哪些数据库
  18. win7python怎么设置环境变量_如何在win7下设置python的环境变量
  19. (3)登录界面——登录
  20. XBEE-PRO-SX快速上手

热门文章

  1. 《机器学习实战》代码记录--决策树
  2. 匹配表情emoji 正则_php正则表达式过滤emoji表情符号
  3. c# 调整图片分辨率
  4. 7.12 C语言练习(爬动的蠕虫:一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。)
  5. Linux网络服务-----测试网络命令与DHCP服务
  6. java.lang.IllegalStateException: getOutputStream() has already been ca...
  7. 卷积神经网络的可视化(基于keras)
  8. 【十四】【vlc-android】aout音频输出模块源码实现分析【Part 1】
  9. Power BI项目之某公司内部数据分析
  10. Poi的Excel的导入导出 支持2007