求大神帮忙把输入的数据改为以文本的输入方式,谢谢呀!!
程序代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> //定义结构体 typedef struct node { int n; //商品代号 char name[20]; //商品名称 int date; //生产日期 int num; //商品数量 struct node *next; }LiStack,*sqstack; //输出所有商品p的名字、生产日期、保质期。 void print(sqstack p) { sqstack L=(LiStack *)malloc(sizeof(LiStack)); L=p->next; if(L==NULL) printf("货架为空。\n"); else { printf("代号\t商品名称\t\t生产日期\t\t数量(个)\n"); while(L!=NULL) { printf("%d",L->n); printf("\t%s \t\t",L->name); printf("%d \t\t",L->date); printf("%d \t\t\n",L->num); p=L; L=p->next; } printf("\t***************************************\n"); } } //增加商品 sqstack push(LiStack *top) { int validity,num,n; int date; char name[20]; LiStack *temp=(LiStack *)malloc(sizeof(LiStack)); printf("\t\t\t-----欢迎进入商品添加界面?-----\n"); temp=(LiStack *)malloc(sizeof(LiStack)); printf("\t增加商品的代号是:"); scanf("%d",&n); printf("\t增加的商品名称是:"); scanf("%s",name); printf("\t生产日期(年月日?如:20131215:)是:"); scanf("%d",&date); printf("\t数量(个):"); scanf("%d",&num); temp->date=date;strcpy(temp->name,name); temp->num=num; temp->n=n; if(top->next==NULL) { temp->next=NULL; top->next=temp; } else { temp->next=top->next; top->next=temp; } printf("\t商品添加成功?\n"); return (top); } //创建一个存放商品信息的栈 sqstack creat() { int n,num; char name[20]; int date; LiStack *p; LiStack *top=(LiStack *)malloc(sizeof(LiStack)); top->next=NULL; while(1) { printf("\t请输入商品代号(int)?代号为'-1'表示输入结束:"); scanf("%d",&n); if(n<0) break; else { printf("\t请输入%d号——商品名称:",n); scanf("%s",name); printf("\t请输入%d号——生产日期(年月日,如20131215):",n); scanf("%d",&date); printf("\t请输入%d号——数量(个):",n); scanf("%d",&num); p=(LiStack *)malloc(sizeof(LiStack)); p->date=date; strcpy(p->name,name); p->num=num;p->n=n; if(top->next==NULL) { p->next=NULL; top->next=p; } else { p->next=top->next; top->next=p; } } } return(top); } //出售商品 sqstack pop(LiStack *top) { int n,num; LiStack *p,*L; p=(LiStack *)malloc(sizeof(LiStack)); L=(LiStack *)malloc(sizeof(LiStack)); printf("\t\t\t-----欢迎进入商品出售界面?-----\n"); printf("\t----目前商品有:\n"); print(top); printf("出售的商品代号是:"); scanf("%d",&n); printf("出售的商品数量(个):"); scanf("%d",&num); p=top->next; if(top->next==NULL) { printf("货架为空,请先添加货物! \n"); } else { while(p->next!=NULL) { if(p->next->n==n) { if(p->next->num<num) {printf("出售商品数量小于原有数量,出售商品失败。");} else { if(p->next->num==num) { if(p->next->next==NULL) { p->next=NULL; printf("商品出售成功!"); free(L);break;} else { L=p->next; p->next=L->next; free(L); printf("商品出售成功!");break;} } else { p->next->num-=num; printf("商品出售成功!");break; } } } p=p->next; } if(p==NULL) printf("输入的商品序号有误?请重新操作。\n"); } return(top); } //按序号查找商品 void SequenceNumberF(LiStack *top) { int n,x=0; LiStack *p; p=(LiStack *)malloc(sizeof (LiStack)); printf("需要查询的商品代号是:"); scanf("%d",&n); p=top; while(p->next!=NULL) { if(p->next->n==n) { printf("代号\t商品名称\t\t生产日期\t\t数量(个)\n"); printf("%d",p->next->n); printf("\t%s \t\t",p->next->name); printf("%d \t\t",p->next->date); printf("%d \t\t\n",p->next->num); x=1;break; } p=p->next; } if(x==0&&p->next==NULL) printf("\t没有您要查询的商品。\n"); printf("\t查询成功,欢迎再次使用查询系统.\n"); } //按商品名字查询商品 void NameF(LiStack *top) { char name[20]; int x=0; LiStack *p; p=(LiStack *)malloc(sizeof (LiStack)); printf("需要查询的商品名称是:"); scanf("%s",name); p=top; while(p->next!=NULL) { if(strcmp(p->next->name,name)==0) { printf("代号\t商品名称\t\t生产日期\t\t数量(个)\n"); printf("%d",p->next->n); printf("\t%s \t\t",p->next->name); printf("%d \t\t",p->next->date); printf("%d \t\t\n",p->next->num); x=1;break; } p=p->next; } if(x==0&&p->next==NULL) printf("\t没有您查询的商品。\n"); printf("\t查询成功,欢迎再次使用查询系统.\n"); } //按商品生产日期查找商品 void ProductionDateF(LiStack *top) { int x=0; int date; LiStack *p; p=(LiStack *)malloc(sizeof (LiStack)); printf("需要查询的生产日期是:"); scanf("%d",&date); p=top; printf("需要查询的生产日期%d的商品有:\n",date); printf("代号\t商品名称\t\t生产日期\t\t数量(个)\n"); while(p->next!=NULL) { if(date==p->next->date) { printf("%d",p->next->n); printf("\t%s \t\t",p->next->name); printf("%d \t\t",p->next->date); printf("%d \t\t\n",p->next->num); x=1; } p=p->next; } if(x==0&&p->next==NULL) printf("\t没有商品的生产日期在%d之前商品。\n",date); printf("\t查询成功,欢迎再次使用查询系统.\n"); } //按商品数量查找商品?查找小于该数量的商品 void NumberF(LiStack *top) { int num,x=0; LiStack *p; p=(LiStack *)malloc(sizeof (LiStack)); printf("需要查询的商品数量是:"); scanf("%d",&num); p=top; printf("商品数量低于%d的商品有:\n",num); printf("代号\t商品名称\t\t生产日期\t\t数量(个)\n"); while(p->next!=NULL) { if(p->next->num<=num) { printf("%d",p->next->n); printf("\t%s \t\t",p->next->name); printf("%d \t\t",p->next->date); printf("%d \t\t\n",p->next->num); x=1; } p=p->next; } if(x==0&&p->next==NULL) printf("\t没有商品低于%d的商品。\n",num); printf("\t查询成功,欢迎再次使用查询系统.\n"); } //查询商品 void find(LiStack *top) { int i; printf("\t\t\t-----欢迎进入商品查询界面?-----\n"); printf("tips:\t【按 商品代号 查询输入1】\t【按 名称 查询输入2】\n"); printf("\t【按 生产日期 查询输入3】\t【按 个数 查询输入4】\n"); printf("输入按什么方式查询(1-4):"); scanf("%d",&i); switch(i) { case 1 :SequenceNumberF(top);break; case 2 :NameF(top);break; case 3 :ProductionDateF(top);break; case 4 :NumberF(top);break; default :printf("\t\t\t输入查询方式错误。\n"); } } //修改商品 sqstack update(LiStack *top) { int n,num,i,x; char name[20]; int date; LiStack *p; p=(LiStack *)malloc(sizeof (LiStack)); printf("\t\t\t-----欢迎进入商品修改界面?-----\n"); printf("需要查询的商品代号是:"); scanf("%d",&i); p=top; while(p->next!=NULL) { if(p->next->n==i) { printf("代号\t商品名称\t\t生产日期\t\t数量(个)\n"); printf("%d",p->next->n); printf("\t%s \t\t",p->next->name); printf("%d \t\t",p->next->date); printf("%d \t\t\n",p->next->num); printf("\t修改为:"); n=p->next->n; printf("\t请输入%d号——商品名称:",n); scanf("%s",name); printf("\t请输入%d号——生产日期(年月日,如20131215):",n); scanf("%d",&date); printf("\t请输入%d号——数量(个):",n); scanf("%d",&num); p->next->date=date; strcpy(p->next->name,name); p->next->num=num;p->next->n=n; x=1; } p=p->next; } if(x==0&&p->next==NULL) printf("\t没有您要修改的商品。\n"); printf("\t修改成功,欢迎再次使用查询系统.\n"); return (top); } void main() { LiStack *top; char i,j; top=(LiStack *)malloc(sizeof(LiStack)); top->next=NULL; printf("\n\n\t\t------------欢迎使用商品货架管理系统------------\n"); while(1){ printf("\t\t ******************************************\n"); printf("\t\t ----------- 1.建立目前商品信息 --------\n"); printf("\t\t ----------- 2.添加商品 --------\n"); printf("\t\t ----------- 3.出售商品 --------\n"); printf("\t\t ----------- 4.查询商品 --------\n"); printf("\t\t ----------- 5.修改商品 --------\n"); printf("\t\t ----------- 6.显示所有商品信息 --------\n"); printf("\t\t ----------- 0.退出系统 --------\n"); printf("\t\t ******************************************\n\n"); printf("\t\t\t请输入您的操作:"); scanf("%s",&i); scanf("%c",&j); printf("\n\n"); if(i == '0'){ printf("\t\t\t退出成功,欢迎下次使用!!\n"); break; } else { switch(i) { case '1':top=creat();break; case '2':top=push(top);break; case '3':top=pop(top);break; case '4':find(top);break; case '5':top=update(top);break; case '6':print(top);break; default:printf("\t\t\t输入错误,请选择正确的功能\n"); } } } }