<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        C語言寫的簡易水果管理系統

        作者:劉蕊飛   來源:本站原創   點擊數:  更新時間:2014年03月02日   【字體:

         //編寫一個簡單的水果管理系統
        //1.可以查看所有水果
        //2.可以添加新水果(添加的時候判斷水果是否重名)
        //3.可以對所有水果排序,價格降序,數量降序
        //4.刪除指定名稱的水果
        //5.退出系統
        #include<stdio.h>
        #include<stdlib.h>
        #include<string.h>
        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->price<p2->price)
          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->count<p2->count)
          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<*count1-1;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<*count1;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<*count1;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");
        }

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮