主题:求高手教教菜鸟啊···········
学校搞C语言实训,要用链表编个超市商品管理系统,小弟尝试着边看书边编····虽然有些功能能用,但是问题还是很多····列举如下:
1.为什么NEW函数中执行到printf("是否继续添加")这步后,后面的就不执行了?
2.怎么样才能让用户选择‘n'不添加了,然后返回到主界面,进行其他操作?
小弟刚学完C语言,真的是第一次编程,有很多编得不好的地方,大家见笑了,但是还是请高手帮小弟耐心看看,修改,解答一下,也让我这个新人多学点东西···
直接从vc里面复制出来的,请各位高手复制一下放到电脑里面看看,因为结构有点乱了····麻烦大家了··
#include <stdio.h>#include <stdlib.h>#include <string.h>#define LEN sizeof(struct goods)
struct riqi { int year; int month; int day;
};struct goods{ char name[30];/*商品名称*/ long num;/*商品编号*/ struct riqi date;/*进货日期*/ int total;/*进货数量*/ int jinjia;/*进价*/ int maijia;/*售价*/ struct goods *next;
};
struct goods *NEW(void){ char ch; struct goods *p1,*p2,*head; head=NULL; p1=p2=(struct goods *)malloc(LEN); /*分配一个内存空间,并使P1,P2指向该内存空间*/ printf("请输入商品名称:\n"); scanf("%s",(*p1).name); printf("请输入商品编号:\n"); scanf("%ld",&(*p1).num); printf("请输入进货日期:(请按年,月,日的形式输入)\n"); scanf("%d,%d,%d",&(*p1).date.year,&(*p1).date.month,&(*p1).date.day); printf("请输入进货数量:\n"); scanf("%d",&(*p1).total); printf("请输入进货价格:\n"); scanf("%d",&(*p1).jinjia); printf("请输入您想要卖出的价格:\n"); scanf("%d",&(*p1).maijia); head=p1; printf("是否继续添加?请选择Y或N:\n"); scanf("%c",&ch); if(ch=='Y'||ch=='y') {char ch='y'; while(ch!='n'||ch!='N') { p1=(struct goods *)malloc(LEN); printf("请输入商品名称:\n"); scanf("%s",(*p1).name); printf("请输入进货日期:(请按年 月 日的形式输入)\n"); scanf("%d,%d,%d",&(*p1).date.year,&(*p1).date.month,&(*p1).date.day); printf("请输入进货数量:\n"); scanf("%d",&(*p1).total); printf("请输入进货价格:\n"); scanf("%d",&(*p1).jinjia); printf("请输入您想要卖出的价格:\n"); scanf("%d",&(*p1).maijia); p2->next=p1; printf("是否继续添加?请选择Y或N:\n"); scanf("%c",&ch); } p2->next=NULL; } if(ch=='N'||ch=='n')
}void sousuo_num(struct goods *p1){ long num; printf("请输入需要查找的商品的编号:\n"); scanf("%ld",&num); do{ if(num==(*p1).num) {printf("您需要查找的商品信息如下:"); printf("商品名称:%s\n",(*p1).name); printf("商品编号:%ld\n",(*p1).num); printf("商品进货日期:%d年,%d月,%d日\n",(*p1).date.year,(*p1).date.month,(*p1).date.day); printf("商品进货数量:%d\n",(*p1).total); printf("商品进货价格:%d\n",(*p1).jinjia); printf("商品出售价:%d\n",(*p1).maijia); p1=p1->next; } }while(p1!=NULL);
}void sousuo_name(struct goods *p1){
char name[50]; printf("请输入需要查找的商品的名称:\n"); scanf("%s",name); do{ if(strcmp(name,(*p1).name)==0) {printf("您需要查找的商品信息如下:"); printf("商品名称:%s\n",(*p1).name); printf("商品编号:%ld\n",(*p1).num); printf("商品进货日期:%d年,%d月,%d日\n",(*p1).date.year,(*p1).date.month,(*p1).date.day); printf("商品进货数量:%d\n",(*p1).total); printf("商品进货价格:%d\n",(*p1).jinjia); printf("商品出售价:%d\n",(*p1).maijia); p1=p1->next; } } while(p1!=NULL);}
void found(struct goods *head){ int a; printf("请选择查找方式:\n"); printf("1.按商品编号查找\n"); printf("2.按商品名称查找\n"); scanf("%d",&a); if(a==1) sousuo_num(head); if(a==2) sousuo_name(head);}
struct goods *Delete(struct goods *head){ struct goods *p1,*p2; long num; p1=head; printf("请输入要删除的商品的编号:\n"); scanf("&ld",&num); while(num!=(*p1).num&&(*p1).num!=NULL) {p2=p1;p1=p1->next;} if(num==(*p1).num) {if(p1==head) head=p1->next; else p2->next=p1->next; printf("删除成功\n"); return(head);
}
}
int welcome(void){ int a; putchar('\n'); putchar('\n'); putchar('\n'); putchar('\n'); putchar('\n'); putchar('\n'); printf("****************************欢迎使用超市商品管理系统****************************\n"); printf("\t\t\t\t1.添加商品信息\n"); printf("\t\t\t\t2.查找商品信息\n"); printf("\t\t\t\t3.删除商品信息\n"); printf("\t\t\t\t4.退出\n"); printf("请输入你想选择的操作的编号:\n"); scanf("%d",&a); if(a<1||a>4) printf("无此操作,请重新打开.\n"); return a;
}
void main(){ int a; struct goods *head; a=welcome(); switch(a) { case 1:head=NEW();break;/*调用函数添加商品信息*/ case 2:found(head);break;/*调用函数查找商品信息*/ case 3:Delete(head);break;/*调用函数删除商品信息*/ case 4:exit(0); } }
1.为什么NEW函数中执行到printf("是否继续添加")这步后,后面的就不执行了?
2.怎么样才能让用户选择‘n'不添加了,然后返回到主界面,进行其他操作?
小弟刚学完C语言,真的是第一次编程,有很多编得不好的地方,大家见笑了,但是还是请高手帮小弟耐心看看,修改,解答一下,也让我这个新人多学点东西···
直接从vc里面复制出来的,请各位高手复制一下放到电脑里面看看,因为结构有点乱了····麻烦大家了··
#include <stdio.h>#include <stdlib.h>#include <string.h>#define LEN sizeof(struct goods)
struct riqi { int year; int month; int day;
};struct goods{ char name[30];/*商品名称*/ long num;/*商品编号*/ struct riqi date;/*进货日期*/ int total;/*进货数量*/ int jinjia;/*进价*/ int maijia;/*售价*/ struct goods *next;
};
struct goods *NEW(void){ char ch; struct goods *p1,*p2,*head; head=NULL; p1=p2=(struct goods *)malloc(LEN); /*分配一个内存空间,并使P1,P2指向该内存空间*/ printf("请输入商品名称:\n"); scanf("%s",(*p1).name); printf("请输入商品编号:\n"); scanf("%ld",&(*p1).num); printf("请输入进货日期:(请按年,月,日的形式输入)\n"); scanf("%d,%d,%d",&(*p1).date.year,&(*p1).date.month,&(*p1).date.day); printf("请输入进货数量:\n"); scanf("%d",&(*p1).total); printf("请输入进货价格:\n"); scanf("%d",&(*p1).jinjia); printf("请输入您想要卖出的价格:\n"); scanf("%d",&(*p1).maijia); head=p1; printf("是否继续添加?请选择Y或N:\n"); scanf("%c",&ch); if(ch=='Y'||ch=='y') {char ch='y'; while(ch!='n'||ch!='N') { p1=(struct goods *)malloc(LEN); printf("请输入商品名称:\n"); scanf("%s",(*p1).name); printf("请输入进货日期:(请按年 月 日的形式输入)\n"); scanf("%d,%d,%d",&(*p1).date.year,&(*p1).date.month,&(*p1).date.day); printf("请输入进货数量:\n"); scanf("%d",&(*p1).total); printf("请输入进货价格:\n"); scanf("%d",&(*p1).jinjia); printf("请输入您想要卖出的价格:\n"); scanf("%d",&(*p1).maijia); p2->next=p1; printf("是否继续添加?请选择Y或N:\n"); scanf("%c",&ch); } p2->next=NULL; } if(ch=='N'||ch=='n')
}void sousuo_num(struct goods *p1){ long num; printf("请输入需要查找的商品的编号:\n"); scanf("%ld",&num); do{ if(num==(*p1).num) {printf("您需要查找的商品信息如下:"); printf("商品名称:%s\n",(*p1).name); printf("商品编号:%ld\n",(*p1).num); printf("商品进货日期:%d年,%d月,%d日\n",(*p1).date.year,(*p1).date.month,(*p1).date.day); printf("商品进货数量:%d\n",(*p1).total); printf("商品进货价格:%d\n",(*p1).jinjia); printf("商品出售价:%d\n",(*p1).maijia); p1=p1->next; } }while(p1!=NULL);
}void sousuo_name(struct goods *p1){
char name[50]; printf("请输入需要查找的商品的名称:\n"); scanf("%s",name); do{ if(strcmp(name,(*p1).name)==0) {printf("您需要查找的商品信息如下:"); printf("商品名称:%s\n",(*p1).name); printf("商品编号:%ld\n",(*p1).num); printf("商品进货日期:%d年,%d月,%d日\n",(*p1).date.year,(*p1).date.month,(*p1).date.day); printf("商品进货数量:%d\n",(*p1).total); printf("商品进货价格:%d\n",(*p1).jinjia); printf("商品出售价:%d\n",(*p1).maijia); p1=p1->next; } } while(p1!=NULL);}
void found(struct goods *head){ int a; printf("请选择查找方式:\n"); printf("1.按商品编号查找\n"); printf("2.按商品名称查找\n"); scanf("%d",&a); if(a==1) sousuo_num(head); if(a==2) sousuo_name(head);}
struct goods *Delete(struct goods *head){ struct goods *p1,*p2; long num; p1=head; printf("请输入要删除的商品的编号:\n"); scanf("&ld",&num); while(num!=(*p1).num&&(*p1).num!=NULL) {p2=p1;p1=p1->next;} if(num==(*p1).num) {if(p1==head) head=p1->next; else p2->next=p1->next; printf("删除成功\n"); return(head);
}
}
int welcome(void){ int a; putchar('\n'); putchar('\n'); putchar('\n'); putchar('\n'); putchar('\n'); putchar('\n'); printf("****************************欢迎使用超市商品管理系统****************************\n"); printf("\t\t\t\t1.添加商品信息\n"); printf("\t\t\t\t2.查找商品信息\n"); printf("\t\t\t\t3.删除商品信息\n"); printf("\t\t\t\t4.退出\n"); printf("请输入你想选择的操作的编号:\n"); scanf("%d",&a); if(a<1||a>4) printf("无此操作,请重新打开.\n"); return a;
}
void main(){ int a; struct goods *head; a=welcome(); switch(a) { case 1:head=NEW();break;/*调用函数添加商品信息*/ case 2:found(head);break;/*调用函数查找商品信息*/ case 3:Delete(head);break;/*调用函数删除商品信息*/ case 4:exit(0); } }