缺陷虫虫的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;}
阅读全文
0 0
- 缺陷虫虫的c代码
- 代码的缺陷--警惕
- c中scanf的缺陷
- codeblocks的智能代码提示缺陷
- 千行代码缺陷率的参考值
- 再看c语言的缺陷与陷阱
- C语言的陷阱与缺陷
- c语言的宏定义缺陷
- c陷阱和缺陷的一点笔记
- C陷阱篇之define的缺陷
- c语言的陷阱与缺陷小记
- 我的《C陷阱与缺陷》读书笔记
- C陷阱与缺陷-整数的溢出
- Objective-C的陷阱与缺陷
- C的陷阱与缺陷小记
- C语言省略extern的缺陷
- Objective-C的陷阱与缺陷
- VS2005中检测和更正 C/C++ 代码缺陷
- Mysql 函数
- 【Codeforces Round #440 (Div. 2) B】Maximum of Maximums of Minimums
- 多线程同步相关
- 我的c语言第一课--打印
- 第三次周赛-膜拜大神们【题解】
- 缺陷虫虫的c代码
- 第4章 库开发简介
- 机器学习(2)-项目 1: 预测波士顿房价
- POJ1274 The Perfect Stall_洛谷P1894 [USACO4.2]完美的牛栏
- Unity中UI和游戏物体之间的层级渲染
- 作业~~
- Linux 基础操作(九)————系统日志、时间同步、修改时区
- 2017.10.15 网络流小结:
- 第六周