缺陷虫虫的c代码

来源:互联网 发布:日语jtest考试软件 编辑:程序博客网 时间:2024/05/17 04:21

有关类似于学生管理系统的简化漏洞满满版本
水果管理系统 …….
适合人群:十天以内新人

//声明结构体类型typedef struct fruit{    int id;    char name[30];    double price;}Fru;//计数使用的全局变量int count = 0;/*函数功能:对水果种类的个数进行计数参数:结构提数组指针,输入的id序号返回值:如果出现了id相同返回1,否则返回0*/int checkId(Fru* p,int id){    if(count == 0){        return 0;    }    int i = 0;    for(i = 0;i < count;i++){        if(id == p[i].id){            return 1;        }    }    return 0;}/*函数功能:向结构提数组内添加元素参数:数组指针,数组长度20返回值:添加失败返回0,添加成功返回1*/int addFruit(Fru* p,int len){    assert(p);    if(count > len){        return 0;    }    Fru fruit;//创建一个结构提变量,用来临时存储stdin    memset(&fruit,0,sizeof(fruit));//初始化变量fruit    printf("请输入水果的信息:\n序号\t\t水果名\t\t价格\n");    scanf("%d %s %lf",&(fruit.id),fruit.name,&(fruit.price));//stdin    if(!checkId(p,fruit.id)){//判断是否有id重复,保证id唯一        p[count] = fruit;//在id不重复的情况下,将临时变量中的信息,赋予数组元素        count++;//赋值后个数自加,保证下次赋值不会覆盖这次的信息        return 1;//成功添加    }    return 0;}/*函数功能:打印输出所有的水果信息参数:数组指针返回值:空*/void printAllFruits(Fru* p){    assert(p);    int i = 0;    printf("/////水果信息//////\n");    for(i = 0;i < count;i++){        printf("%d\t\t%s\t\t%lf\t\t\n",(p + i) -> id,(p + i) -> name,(p + i) -> price);    }}/*函数功能:删除数组中的指定元素参数:数组指针返回值:成功删除返回1,失败返回0*/int deleteFruit(Fru* p){    assert(p);    if(0 == count){        return 0;//如果水果种类为0,删除失败    }    int id = 0;    printAllFruits(p);//打印信息1    printf("请输入要删除的水果的id:\n");    scanf("%d",&id);    if(!checkId(p,id)){//id唯一的判定        return 0;    }    int i = 0;    for(i = 0;i < count;i++){//遍历超找能对应的元素,从第一个开始        if(id == p[i].id){//输入id能对应到数组元素的id            int j = 0;            for(j = i;j < count - 1;j++){//自找到的元素起,将后边的每个元素向前移动                p[j] = p[j + 1];//删除元素            }            count--;//个数自减            break;        }    }    return 1;}/*函数功能:冒泡排序参数:数组指针返回值:排序成功返回1,失败返回0*/int bubbleSortFruit(Fru* p){    assert(p);    int i = 0;    int j = 0;    Fru tmp;    memset(&tmp,0,sizeof(tmp));    if(count == 0){        return 1;    }    for(i = 0;i < count - 1;i++){        for(j = 0;j < count -1 - i;j++){            if(p[j].price > p[j + 1].price){                tmp = p[j];                p[j] = p[j + 1];                p[j + 1] = tmp;            }        }    }    return 0;}/*函数功能:选择排序参数:数组指针返回值:排序成功返回1,失败返回0*/int selectionSortFruit(Fru* p){    assert(p);    int i = 0;    int j = 0;    Fru tmp;//定义结构提中间变量    int pos = 0;    memset(&tmp,0,sizeof(tmp));    if(count == 0){//元素个数为0,失败        return 1;    }    for(i = 0;i < count - 1;i++){        pos = i;        for(j = i + 1;j < count;j++){            if(p[pos].price > p[j].price){                pos = j;            }        }        if(pos != i){            tmp = p[pos];            p[pos] = p[i];            p[i] = tmp;        }    }    return 0;}/*函数功能:修改信息参数:数组指针返回值:修改成功返回1,失败返回0*/int modifyFruit(Fru* p){    if(0 == count){        return 0;    }    int i = 0;    for(i = 0;i < count;i++){        printf("信息为:序号:%d\t\t名字:%s\t\t价格:%.2lf\n",p[i].id,p[i].name,p[i].price);    }    printf("请输入要修改的水果的序号:\n");//输入序号    int id = 0;    scanf("%d",&id);    if(!checkId(p,id)){//id重复        return 0;    }    printf("请输入要修改的价格:\n");    double prices = 0.0;//定义输入的价钱    scanf("%lf",&prices);//输入价钱    for(i = 0;i < count;i++){//遍历寻找与输入的id相同id的元素        if(p[i].id == id){//找到对应id的元素位置            p[i].price = prices;            break;        }    }    return 1;}int main(void){    Fru* p = (Fru*)malloc(sizeof(Fru)*20);    assert(p);    memset(p,0,sizeof(Fru)*20);    int choice = 0;    int sortId = 0;    printf("欢迎使用水果统计管理系统!\n");    printf("启动中...\n");    sleep(2);    level:while(1){        printf("      功能菜单\n");        printf("*********************\n");        printf("*  1、添加水果      *\n");        printf("*  2、打印水果信息  *\n");        printf("*  3、删除水果信息  *\n");        printf("*  4、水果排序      *\n");        printf("*  5、修改水果信息  *\n");        printf("*  6、退出          *\n");        printf("*********************\n");        putchar(10);        printf("请输入你要选择的功能(输入序号):\n");        if(scanf("%d",&choice)){            printf("输入正确!!\n");            while(getchar() != '\n');        }        switch(choice){            case 1:                if(addFruit(p,20)){                    printf("添加成功!\n");                      }else{                    printf("添加失败!\n");                }                break;            case 2:                printAllFruits(p);                break;            case 3:                if(deleteFruit(p)){                    printf("删除成功!\n");                }else{                    printf("删除失败!\n");                }                break;            case 4:                level1:while(1){                    printf("*************\n");                    printf("*1、冒泡排序*\n");                    printf("*2、选择排序*\n");                    printf("*0、退出选择*\n");                    printf("*************\n");                    printf("请按序号选择要采用的排序方法:\n");                    scanf("%d",&sortId);                    switch(sortId){                        case 1:                            if(!bubbleSortFruit(p)){                                printf("按水果的价格进行排序已经完成!\n");                            }else{                                printf("排序失败!!!\n");                            }                            goto level;                        case 2:                            if(!selectionSortFruit(p)){                                printf("按水果的价格进行排序已经完成!\n");                            }else{                                printf("排序失败!!!\n");                            }                            goto level;                        case 0:                            printf("已经退出排序!请继续其他操作!\n");                            putchar(10);                            goto level;                        default:                            printf("输入有误!请重新输入!!\n");                            goto level1;                    }                }                break;            case 5:                if(modifyFruit(p)){                    printf("修改成功!!\n");                }else{                    printf("修改失败!!\n");                }                break;            case 6:                return 1;                break;            default:                break;        }    }    FILE* fp = fopen("./fruit.txt","w");    fwrite(p,sizeof(Fru)*count,1,fp);    fclose(fp);    fp = NULL;    free(p);    p = NULL;    return 0;}
原创粉丝点击