//編寫一個(gè)簡(jiǎn)單的水果管理系統(tǒng)
//1.可以查看所有水果
//2.可以添加新水果(添加的時(shí)候判斷水果是否重名)
//3.可以對(duì)所有水果排序,價(jià)格降序,數(shù)量降序
//4.刪除指定名稱的水果
//5.退出系統(tǒng)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct fruit{
char name[30]; //水果名
int count; //水果數(shù)量
double price; //水果單價(jià)
}fruit_t;
//菜單函數(shù)
void log_menu();
//查看函數(shù)
void check(fruit_t *p,int *count1);
//添加函數(shù)
int add(fruit_t *p,int *count1);
//功能控制函數(shù)
void log_ctrl(fruit_t *p,int *count1);
//刪除函數(shù)
int del(fruit_t *p,int *count1);
//排序菜單函數(shù)
void cmp_menu();
//排序控制函數(shù)
void cmp_ctrl(fruit_t *p,int *count1);
//按數(shù)量排序函數(shù)
int cmp_count_desc(const void *px,const void *py);
//按價(jià)格排序排序函數(shù)
int cmp_price_desc(const void *px,const void *py);
//系統(tǒng)初始化函數(shù)
void log_start(fruit_t *p,int *count1);
//保存函數(shù)
void write(fruit_t *p,int *count1);
int main(){
fruit_t stu[100]={"\0"}; //保存所有水果名、數(shù)量、單價(jià)
int count1=0; //count1表示水果種類數(shù)量
printf("歡迎來(lái)到水果管理系統(tǒng)\n");
log_start(stu,&count1); //系統(tǒng)初始化
printf("初始化成功\n");
log_ctrl(stu,&count1); // 功能控制函數(shù)
return 0;
}
//系統(tǒng)初始化函數(shù)
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);
}
//功能控制函數(shù)
void log_ctrl(fruit_t *p,int *count1){
int chose=0;
while(1){
chose=0;
log_menu();
printf("請(qǐng)選擇:");
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("刪除失敗,沒(méi)有此種類水果\n");
else
printf("恭喜您,刪除成功\n");
break;
case 5://退出
write(p,count1); //保存
printf("信息保存成功\n");
exit(0);
break;
default:
printf("輸入錯(cuò)誤,請(qǐng)重新輸入!\n");
}
}
}
//保存函數(shù)
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;
}
//排序控制函數(shù)
void cmp_ctrl(fruit_t *p,int *count1){
int chose=0;
if(*count1==0){
printf("水果種類為0,排序失敗\n");
return;
}
while(1){
cmp_menu();
printf("請(qǐng)選擇:");
scanf("%d",&chose);
switch(chose){
case 1: //數(shù)量
qsort(p,*count1,sizeof(fruit_t),cmp_count_desc);
printf("排序成功\n");
break;
case 2: //價(jià)格
qsort(p,*count1,sizeof(fruit_t),cmp_price_desc);
printf("排序成功\n");
break;
case 3: //返回
return;
break;
default:
printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");
}
}
}
//按價(jià)格排序排序函數(shù)
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;
}
//按數(shù)量排序函數(shù)
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;
}
//排序菜單函數(shù)
void cmp_menu(){
printf("1.按數(shù)量排序2.按價(jià)格排序3.返回\n");
}
//刪除函數(shù) 0-成功 1-失敗
int del(fruit_t *p,int *count1){
int i=0,j=0; //j保存要?jiǎng)h除的水果下標(biāo)
char str[30]="\0";
int flag=0;
printf("請(qǐng)輸入要?jiǎng)h除的水果名:");
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;
}
//添加函數(shù),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("數(shù) 量:");
scanf("%d",&p[*count1].count);
printf("價(jià) 格:");
scanf("%lf",&p[*count1].price);
*count1+=1;
return 0;
}
//查看函數(shù)
void check(fruit_t *p,int *count1){
int i;
if(*count1==0){
printf("水果種類為0\n");
return;
}
printf("水果\t數(shù)量\t單價(jià)\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);
}
//菜單函數(shù)
void log_menu(){
printf("1.查看2.添加3.排序4.刪除5.退出\n");
}