C语言实现外卖管理系统
本文为大家分享了C语言外卖管理系统的具体代码,供大家参考,具体内容如下
内容
说明(废话):上学期写的课程设计,主题是外卖管理系统,希望可以模拟网上订餐,店家工作,专人管理的过程。并实现注册与登录以及基本信息的输出,因为个人比较懒,一直没有整理上去,今天得空,要是得到大家的宝贵意见的话,会不胜荣幸。
重点内容
三端登录:分别为管理员,用户以及店主;两端注册,分别为用户以及店铺,其中店铺的注册成功需要得到管理员的审核。
- 管理员端可以查看店铺信息,店铺信息修改(分为增删改查),处理申请店铺,和修改本人信息。
- 用户端分为用户相关(为用户本人对自己信息的操作),查看订单,查看菜品,购买菜品,以及订单排序。
- 管理员端为增添菜品,删除菜品,修改菜品,查看菜品以及业绩查看(统计总订单与总收入)。
另外:
1.店家注册需要的到管理员的认证,认证通过之后才可登录
2.密码修改需要输入旧的密码,三次错误可以找回密码,输入手机号,若手机号匹配得当,则可产生三位数的随机验证码,输入验证码即可修改。
3.对于已超过三分钟的订单不能修改,因为已经配送
4.限制了用户的余额,当购买时余额不足时,需要进行账户的充值,而购买结束后,账户的余额也会相应的减少
以下为功能模块图:
以下为函数调用关系图:
以下为整个代码:
#include#include #include #include #include #include voidchoose(); //建立关于店铺的结构体 typedefstructshop { charname[20]; charphone[20]; charaddress[30]; charpassword[20]; structshop*next; }shop,*link_shop; //建立关于订单的结构体 typedefstructfood { charname[20]; inttype; intamount; intprice; inttotal; charshop[20]; charyonghu[20]; charleibie[20]; structfood*next; }food,*link_food; //建立关于用户的结构体 typedefstructuser { charname[20]; chardelivery[39]; charpassword[15]; charnumber[15]; intscore; structuser*next; }user,*link_user; typedefstructmoney { charperson[20]; charcard[25]; charmima[20]; structmoney*next; }money,*link_money; charyh[20];//用户设置全局变量 chardp[20];//店铺设置全局变量 time_tstart,end; //函数声明 voidfoodwrite(link_foodLF); voidshopwrite1(link_shopLS); voiddingdanwrite(link_foodLF); voiduser_moneywrite(link_userLM); voidwelcome() { inti=0; chara[52]="▲▼WELCOMETORESTAURANTMANAGEMENTSYSTEM▲▼"; //system("color0a"); printf("\n\n\n\n\t\t"); while(a[i]) { printf("%c",a[i]); Sleep(50); i++; } printf("\n\n\n\n\t\t"); } voidExit() { inti=0; system("cls"); chara[20]="LOVEyou,byebye^_^"; system("color03"); printf("\n\n\n\t\t\t"); while(a[i]) { printf("%c",a[i]); Sleep(100); i++; } } voidME() { system("color0b"); printf("\n\n\n\t\t☆★WELCOME☆★\n\n\t这里是外卖管理系统,请选择接下来的操作:"); printf("\n\n\t\t\t1.登陆"); printf("\t\t\t2.注册\t\t\t0.退出\n"); } //主菜单(登陆或者注册) voidMENU() { printf("\n\n\n\n\t\t\t\t\t================================\n"); printf("\t\t\t\t\t外卖管理系统\n"); printf("\t\t\t\t\t1.管理员登陆\n"); printf("\t\t\t\t\t2.用户登录\n"); printf("\t\t\t\t\t3.店家登陆\n"); printf("\t\t\t\t\t0.返回上一级\n"); printf("\t\t\t\t\t================================\n"); } //管理员选项 voidMENU1() { system("color0f"); printf("温馨小提示:按5可以清屏哦^-^\n"); printf("\n\n\t\t\t\t\t1.查看店铺信息▲\n"); printf("\t\t\t\t\t--------------\n"); printf("\t\t\t\t\t2.店铺信息修改▼\n"); printf("\t\t\t\t\t--------------\n"); printf("\t\t\t\t\t3.处理申请店铺▲\n"); printf("\t\t\t\t\t--------------\n"); printf("\t\t\t\t\t4.修改本人信息▼\n"); printf("\t\t\t\t\t--------------\n"); printf("\t\t\t\t\t0.返回上一级▲\n"); } //用户选项 voidMENU2() { system("color0f"); printf("\n\n\t\t\t\t1.用户相关▲\t\t\t5.购买菜品▼\n"); printf("\t\t\t\t---------------\t\t\t---------------\n"); printf("\t\t\t\t2.查看订单▲\t\t\t6.订单排序▼\n"); printf("\t\t\t\t---------------\t\t\t---------------\n"); printf("\t\t\t\t3.查看菜品▲\t\t\t0.返回上级▼\n"); printf("\t\t\t\t---------------\t\t\t---------------\n"); printf("\t\t\t\t4.修改订单▲\n"); } //店主选项 voidMENU3() { system("color0f"); printf("\n\n\n\t\t\t________ShopVersion_______\n"); printf("\t\t\t||\n"); printf("\t\t\t|1.添加菜品|\n"); printf("\t\t\t|2.修改菜品|\n"); printf("\t\t\t|3.删除菜品|\n"); printf("\t\t\t|4.查看菜品|\n"); printf("\t\t\t|5.查看业绩|\n"); printf("\t\t\t|0.返回上一级|\n"); printf("\t\t\t|_____________________________|\n"); } //建立关于单链表 void*creatf() { inti=0,n; link_foodLF; food*s,*r; chara[10]; //srand((unsigned)time(NULL));//产生随机数的种子 LF=(food*)malloc(sizeof(food)); LF->next=NULL; r=LF; while(1) { printf("请输入菜的名称:"); scanf("%s",a); if(strcmp(a,"0")!=0) { s=(food*)malloc(sizeof(food)); printf("请输入菜的单价:"); scanf("%d",&s->price); printf("请输入菜的类别"); scanf("%s",s->leibie); strcpy(s->name,a); s->total=(s->amount)*(s->price); r->next=s; s->next=NULL; r=s; } else break; } foodwrite(LF); } shop*creats() { chara[30],b[20],c[15],d[20]; link_shopLS; shop*s,*r; LS=r=(shop*)malloc(sizeof(shop)); LS->next=NULL; r=LS; while(1) { printf("请输入店铺信息:\n"); printf("\t\t●店铺名称:"); scanf("%s",a); printf("\n\t\t●店铺电话:"); scanf("%s",b); if(strcmp(b,"0")!=0) { printf("\n\t\t●店铺地址:"); scanf("%s",c); printf("\n\t\t●店铺密码:"); scanf("%s",d); s=(shop*)malloc(sizeof(shop)); strcpy(s->name,a); strcpy(s->phone,b); strcpy(s->address,c); strcpy(s->password,d); r->next=s; s->next=NULL; r=s; } else break; } returnLS; } voidOutputshop(link_shopLs) { intn=0; shop*p,*u; p=Ls->next; system("cls"); printf("入驻的商家如下:\n"); printf("\t\t\t\t-------------------------------------------\n"); printf("\t\t\t\t店铺名称\t店铺电话\t店铺地址\n"); printf("\t\t\t\t-------------------------------------------\n"); while(p) { printf("\t\t\t\t%8s\t%8s\t%7s\n",p->name,p->phone,p->address); printf("\t\t\t\t-------------------------------------------\n"); p=p->next; } for(u=Ls->next;u!=NULL;u=u->next) n++; printf("\t\t\t\t合计\t\t\t\t%d个\n",n); printf("\t\t\t\t-------------------------------------------\n"); } voidOutputfood(link_foodLF) { food*s; s=LF->next; intsum=0; printf("订单如下:\n"); printf("\t----------------------------------------------------------------------------------------------------\n"); printf("\t菜名\t\t数量/份\t\t单价/元\t\t总价/元\t\t店铺\t\t订单号\t\t用户名\n"); printf("\t----------------------------------------------------------------------------------------------------\n"); for(s=LF->next;s!=NULL;s=s->next) { if(strcmp(s->yonghu,yh)==0) { printf("\t%-8s\t%-8d\t%-8d\t%-8d\t%-10s\t%-10d\t%s\n",s->name,s->amount,s->price,s->total,s->shop,s->type,s->yonghu); printf("\t----------------------------------------------------------------------------------------------------\n"); sum=sum+s->total; } } printf("\t累计输出/元\t\t\t\t\t\t\t%d\n",sum); printf("\t----------------------------------------------------------------------------------------------------\n"); if(sum==0) { printf("○您还没有订单呢,快去购买吧φ(>ω<*)"); printf("\n\t\t\t\t\t->"); Sleep(1000); printf("->"); Sleep(1000); printf("->"); Sleep(1000); system("cls"); MENU2(); return; } } voidoutputfood(link_foodLF) { food*p; p=LF->next; printf("\n\t\t\t菜谱"); printf("\n\t\t\t--------------------------------------------------\n"); printf("\t\t\t菜名菜价店铺菜系\n"); printf("\t\t\t---------------------------------------------------\n"); while(p) { printf("\t\t\t%-13s%-12d%-14s%s\n",p->name,p->price,p->shop,p->leibie); printf("\t\t\t---------------------------------------------------\n"); p=p->next; } } //充值 user*addmoney(user*u) { intn; chary; chara[20]; FILE*fp; link_moneyLY; money*p,*r; printf("您账户里的余额为:%d",u->score); printf("是否充值?Y/else"); fflush(stdin);//清除缓存 y=getchar(); if(y=='Y') { fp=fopen("yue.txt","rt"); LY=r=(money*)malloc(sizeof(money)); LY->next=NULL; while(!feof(fp)) { p=(money*)malloc(sizeof(money)); fscanf(fp,"%s%s%s\n",p->person,p->card,p->mima); p->next=NULL; r->next=p; r=p; } fclose(fp); p=LY->next; while(1) { if(strcmp(yh,p->person)==0) { break; } else p=p->next; } printf("充值的钱数?"); scanf("%d",&n); printf("请输入支付密码:"); scanf("%s",a); if(strcmp(p->mima,a)==0) { u->score=(u->score+n); printf("已充值"); } else printf("\t\t×密码错误,充值失败"); } else printf("已放弃充值"); returnu; } //按工号排序 voidname_sort(link_shopLS) { inti,j,n; n=0;//记录店铺总数; shop*u,*q,*p; for(u=LS->next;u!=NULL;u=u->next) n++; //采用冒泡法对各个节点按姓名升序 for(i=1;i<=n;i++) { u=LS; for(j=0;j next; q=p->next; if(strcmp(p->name,q->name)>0||strcmp(p->name,q->name)==0) { u->next=q; p->next=q->next; q->next=p; } u=u->next; } } printf("\t排序后店铺信息\n"); Outputshop(LS); return; } voidaddress_sort(link_shopLS) { inti,j,n; n=0;//记录店铺总数; shop*u,*q,*p; for(u=LS->next;u!=NULL;u=u->next) n++; //采用冒泡法对各个节点按地址升序 for(i=1;i<=n;i++) { u=LS; for(j=0;j next; q=p->next; if(strcmp(p->address,q->address)>0||strcmp(p->address,q->address)==0) { u->next=q; p->next=q->next; q->next=p; } u=u->next; } } printf("\t\t\t\t地址排序后店铺信息\n"); Outputshop(LS); return; } voiddingdan_name_sort(link_foodLF)//按订单食物名称排序 { inti,j,n; n=0;//记录店铺总数; food*u,*q,*p; for(u=LF->next;u!=NULL;u=u->next) n++; //采用冒泡法对各个节点按姓名升序 for(i=1;i<=n;i++) { u=LF; for(j=0;j next; q=p->next; if(strcmp(p->name,q->name)>0||strcmp(p->name,q->name)==0) { u->next=q; p->next=q->next; q->next=p; } u=u->next; } } Outputfood(LF); return; } voiddingdan_total_sort(link_foodLF)//按订单总价从高到低排序 { inti,j,n; n=0;//记录店铺总数; food*u,*q,*p; for(u=LF->next;u!=NULL;u=u->next) n++; //采用冒泡法对各个节点按姓名升序 for(i=1;i<=n;i++) { u=LF; for(j=0;j next; q=p->next; if(p->total>q->total) { u->next=q; p->next=q->next; q->next=p; } u=u->next; } } Outputfood(LF); return; } voiddingdandelete(link_foodLf) { food*p,*n; p=Lf; n=p->next; intm; chara; printf("请输入你所想删除的订单序号:"); scanf("%d",&m); while(n) { if(m==n->type) { if(strcmp(n->shop,dp)==0) { p->next=n->next; //foodwrite(Lf); dingdanwrite(Lf); break; } else printf("不好意思,您没有权限删除\n"); break; } else { p=p->next; n=n->next; } } } food*dingdanread() { FILE*fp; link_foodLF,r,s; fp=fopen("dingdan.txt","rt"); if(fp==NULL) { printf("查看订单失败"); return0; } LF=r=(food*)malloc(sizeof(food)); r->next=NULL; while(!feof(fp)) { s=(food*)malloc(sizeof(food)); fscanf(fp,"%s%d%d%d%s%d%s\n",s->name,&s->amount,&s->price,&s->total,s->shop,&s->type,s->yonghu); r->next=s; s->next=NULL; r=s; } returnLF; } voidscorefind(link_foodLF) { intsum=0; food*p; p=LF->next; system("cls"); printf("\n\n\n\t\t\t产生的订单如下:\n"); printf("----------------------------------------------------------------------------------------------------\n"); printf("菜品名称\t菜品数量\t菜品单价\t菜品总价\t店铺名称\t订单号\t\t用户名\n"); printf("----------------------------------------------------------------------------------------------------\n"); while(p) { if(strcmp(p->shop,dp)==0) { printf("%7s%14d%15d%16d%16s%15d%18s\n",p->name,p->amount,p->price,p->total,p->shop,p->type,p->yonghu); printf("----------------------------------------------------------------------------------------------------\n"); sum=sum+p->total; } p=p->next; } printf("合计/元:\t\t\t\t\t\t\t累计收入%d\n",sum); printf("----------------------------------------------------------------------------------------------------\n"); if(sum==0) printf("\t\t●您店里的菜还没有人购买哦,应该反思啦\n"); } food*foodread()//读取 { link_foodLF; food*s,*r; LF=r=(food*)malloc(sizeof(food)); LF->next=NULL; FILE*fp; fp=fopen("food.txt","rt"); if(fp==NULL) { printf("不能打开此文件"); exit(1); } while(!feof(fp))//判断文件指针是否处于文件结束位置,若是,返回1,非,返回0 { s=(food*)malloc(sizeof(food)); fscanf(fp,"%s%d%s%s\n",s->name,&s->price,s->shop,s->leibie); r->next=s; s->next=NULL; r=s; } fclose(fp); returnLF; } money*moneyread()//读取 { link_moneyLM; money*s,*r; LM=r=(money*)malloc(sizeof(money)); LM->next=NULL; FILE*fp; fp=fopen("yue.txt","rt"); if(fp==NULL) { printf("不能打开此文件"); exit(1); } while(!feof(fp))//判断文件指针是否处于文件结束位置,若是,返回1,非,返回0 { s=(money*)malloc(sizeof(money)); fscanf(fp,"%s%s%s\n",s->person,s->card,s->mima); r->next=s; s->next=NULL; r=s; } fclose(fp); returnLM; } shop*shopread() { link_shopLS; shop*s,*r; LS=r=(shop*)malloc(sizeof(shop)); r->next=NULL; FILE*fp; fp=fopen("shop.txt","rt"); if(fp==NULL) { printf("不能打开此文件"); exit(1); } while(!feof(fp))//判断文件指针是否处于文件结束位置,若是,返回1,非,返回0 { s=(shop*)malloc(sizeof(shop)); s->next=NULL; fscanf(fp,"%s%s%s%s\n",s->name,s->phone,s->address,s->password); r->next=s; r=s; } fclose(fp); returnLS; } user*userread() { link_userLU; user*s,*r; LU=r=(user*)malloc(sizeof(user)); r->next=NULL; FILE*fp; fp=fopen("users.txt","rt"); if(fp==NULL) { printf("不能打开此文件"); exit(1); } while(!feof(fp))//判断文件指针是否处于文件结束位置,若是,返回1,非,返回0 { s=(user*)malloc(sizeof(user)); s->next=NULL; fscanf(fp,"%s%s%s%s%d\n",s->name,s->delivery,s->password,s->number,&s->score); r->next=s; r=s; } fclose(fp); returnLU; } voiddeleteshop(link_shopLS) { inti=0; shop*p,*q; p=LS; q=p->next; charm[20]; chara; printf("请输入你所想删除的店铺名称或者电话:"); scanf("%s",m); while(q) { if(strcmp(m,q->name)==0||strcmp(m,q->phone)==0) { i++; p->next=q->next; shopwrite1(LS); return; } else { p=p->next; q=q->next; } } if(i==0) { printf("没有此店铺,无法删除\n"); return; } } voiddeletedingdan(link_foodLf) { food*p,*n; p=Lf; n=p->next; intm,i=0; chara; printf("请输入你所想删除的订单号:"); scanf("%d",&m); while(n) { if(n->type==m) { if(strcmp(n->yonghu,yh)==0) { p->next=n->next; i++; foodwrite(Lf); } else printf("不好意思,您没有权限删除\n"); break; } else { p=p->next; n=n->next; } } if(i==0) { printf("\t没有此订单,无法删除\n"); return; } } voidpurchase() { link_foodLf; money*LM,*mo; user*lu,*us; FILE*fp; chara[20],b[20],mi[20]; chary; inti=0; printf("\t\t◇您想吃啥呢?"); scanf("%s",a); Lf=foodread(); food*p; p=Lf->next; srand((unsigned)time(NULL));//订单号的种子 while(p!=NULL) { if(strcmp(p->name,a)==0||strcmp(p->leibie,a)==0) { //printf("%s\t%d\t%s\n",p->name,p->price,p->shop); i++; } p=p->next; } if(i==0) { printf("\t\t\t×不好意思,还没有此菜呢\n"); system("pause"); system("cls"); MENU2(); return; } else { p=Lf->next; printf("\n\t\t\t--------------------------------------------------\n"); printf("\t\t\t菜名菜价店铺菜系\n"); printf("\t\t\t---------------------------------------------------\n"); while(p) { if(strcmp(p->leibie,a)==0||strcmp(p->name,a)==0) { printf("\t\t\t%-13s%-12d%-14s%s\n",p->name,p->price,p->shop,p->leibie); printf("\t\t\t---------------------------------------------------\n"); } p=p->next; } } printf("\t\t◇请输入要购买的店铺:"); scanf("%s",b); lu=userread(); us=lu->next; while(us) { if(strcmp(yh,us->name)==0) break; else us=us->next; }//找出要购买的用户信息 LM=moneyread(); mo=LM->next; i=0; while(mo) { if(strcmp(yh,mo->person)==0) { i++; break; } else mo=mo->next; }//找出用户的银行卡信息 if(i==0) { printf("\t\t×您还没有绑定银行卡哦,不能购买的"); return; } p=Lf->next; i=0; while(p) { if(strcmp(p->name,a)==0||strcmp(p->leibie,a)==0) { if(strcmp(p->shop,b)==0) { printf("\t\t◇请输入要购买的数量"); scanf("%d",&p->amount); if(p->amount!=0) { i++; p->total=(p->amount)*(p->price); p->type=rand()%900+100; if((us->score) total) { printf("\t\t×您的账号余额不足,请先充值\n"); system("pause"); system("cls"); MENU2(); return; } printf("\t\t●确认购买?Y/else"); fflush(stdin); y=getchar(); if(y=='Y') { printf("请输入支付密码:"); scanf("%s",mi); if(strcmp(mi,mo->mima)==0) { fp=fopen("dingdan.txt","at"); if(fp==NULL) printf("\t\t\t\t×购买失败\n");//因文件无法打开而失败 else { fprintf(fp,"%s%d%d%d%s%d%s\n",p->name,p->amount,p->price,p->total,p->shop,p->type,yh); fclose(fp); us->score=(us->score)-(p->total); user_moneywrite(lu); printf("\t\t\t\t√购买成功,请耐心等待配送\n"); start=time(NULL);//计时 system("pause"); system("cls"); MENU2(); return; } } else { printf("\t\t×密码错误,购买失败"); system("pause"); system("cls"); MENU2(); return; } } else { printf("\t\t\t×已放弃购买"); system("pause"); system("cls"); MENU2(); return; } } else { printf("\t\t\t×请输入正确的数量"); system("pause"); system("cls"); MENU2(); return; } } } p=p->next; } if(i==0) { printf("\t\t×请输入表中的店铺名称哦\n"); system("pause"); system("cls"); MENU2(); } } voidfoodwrite(link_foodLF)//保存 { FILE*fp; food*p; chara; printf("确认保存?(Y/else)"); scanf("%*c%c",&a); if(a=='Y') { fp=fopen("food.txt","at"); if(fp==NULL) printf("错误!无法打开"); for(p=LF->next;p!=NULL;p=p->next) fprintf(fp,"%s%d%s%s\n",p->name,p->price,dp,p->leibie); printf("修改成功\n"); fclose(fp); return; } else printf("已放弃修改"); } voidfoodwrite1(link_foodLF) { FILE*fp; food*p; chara; printf("确认保存?(Y/else)"); scanf("%*c%c",&a); if(a=='Y') { fp=fopen("food.txt","wt"); if(fp==NULL) printf("错误!无法打开"); for(p=LF->next;p!=NULL;p=p->next) fprintf(fp,"%s%d%s%s\n",p->name,p->price,p->shop,p->leibie); printf("修改成功\n"); fclose(fp); return; } else printf("已放弃修改"); } //voidfoodwrite2(link_foodLF) //{ //FILE*fp; //food*p; //chara; //printf("确认保存?(Y/else)"); //scanf("%*c%c",&a); //if(a=='Y') //{ //fp=fopen("food.txt","wt"); //if(fp==NULL) //printf("错误!无法打开"); //for(p=LF->next;p!=NULL;p=p->next) //fprintf(fp,"%s%d%s%s\n",p->name,p->price,p->shop,p->leibie); //printf("修改成功\n"); //fclose(fp); //return; //} //else //printf("已放弃修改"); //} voiddingdanwrite(link_foodLF) { FILE*fp; food*p; chara; printf("确认保存?(Y/else)"); scanf("%*c%c",&a); if(a=='Y') { fp=fopen("dingdan.txt","wt"); if(fp==NULL) printf("错误!无法打开"); for(p=LF->next;p!=NULL;p=p->next) fprintf(fp,"%s%d%d%d%s%d%s\n",p->name,p->amount,p->price,p->total,p->shop,p->type,p->yonghu); printf("修改成功\n"); fclose(fp); return; } else printf("已放弃修改"); } voidshopwrite1(link_shopLS) { FILE*fp; shop*p; chara; printf("确认保存?(Y/else)"); scanf("%*c%c",&a); if(a=='Y') { fp=fopen("shop.txt","wt"); if(fp==NULL) printf("错误!无法打开"); for(p=LS->next;p!=NULL;p=p->next) fprintf(fp,"%s%s%s%s\n",p->name,p->phone,p->address,p->password); printf("保存成功\n"); fclose(fp); return; } else printf("已放弃"); } voidshopwrite2(link_shopLS) { FILE*fp; shop*p; chara; printf("是否将信息保存至文件里?(Y/else)"); scanf("%*c%c",&a); if(a=='Y') { fp=fopen("shop.txt","at"); if(fp==NULL) printf("错误!无法打开"); for(p=LS->next;p!=NULL;p=p->next) fprintf(fp,"%s%s%s\n",p->name,p->phone,p->address); printf("修改成功\n"); fclose(fp); return; } else printf("已放弃修改"); } voiduserwrite(link_userLU) { FILE*fp; user*p; chara; //printf("请确认?(Y/else)"); //scanf("%*c%c",&a); //if(a=='Y') //{ fp=fopen("users.txt","wt"); if(fp==NULL) printf("错误!无法打开"); for(p=LU->next;p!=NULL;p=p->next) fprintf(fp,"%s%s%s%s%d\n",p->name,p->delivery,p->password,p->number,p->score); printf("操作成功\n"); fclose(fp); return; //} //else //printf("已放弃注册"); } voiduser_moneywrite(link_userLM) { FILE*fp; user*p; chara; //printf("是否将信息保存至文件里?(Y/else)"); //scanf("%*c%c",&a); //if(a=='Y') //{ fp=fopen("users.txt","wt"); if(fp==NULL) printf("错误!无法打开"); for(p=LM->next;p!=NULL;p=p->next) fprintf(fp,"%s%s%s%s%d\n",p->name,p->delivery,p->password,p->number,p->score); //printf("注册成功\n"); fclose(fp); //return; //} //else //printf("已放弃注册"); } voiduserwrite2(link_userLU) { FILE*fp; user*p; chara; printf("是否将信息保存至文件里?(Y/else)"); scanf("%*c%c",&a); if(a=='Y') { fp=fopen("users.txt","at"); if(fp==NULL) printf("错误!无法打开"); for(p=LU->next;p!=NULL;p=p->next) fprintf(fp,"%s%s%s%s%d\n",p->name,p->delivery,p->password,p->number,p->score); printf("注册成功\n"); fclose(fp); return; } else printf("已放弃注册"); } voidincreaseshop(link_shopLS) { chara[30],b[20],c[15],d[20]; shop*s; printf("请输入你所想加入的店铺信息:\n"); printf("\t\t●店铺名称:"); scanf("%s",a); printf("\n\t\t●店铺电话:"); scanf("%s",b); printf("\n\t\t●店铺地址:"); scanf("%s",c); printf("\n\t\t●店铺密码:"); scanf("%s",d); if(strcmp(a,"0")!=0) { s=(shop*)malloc(sizeof(shop)); strcpy(s->name,a); strcpy(s->phone,b); strcpy(s->address,c); strcpy(s->password,d); } s->next=LS->next; LS->next=s; shopwrite1(LS); } voidshopfind(link_shopLS) { shop*p; charE[20]; p=LS->next; printf("请输入店铺的名称:"); scanf("%s",E); while(strcmp(p->name,E)!=0&&(p->next)!=NULL) { p=p->next; } if((p->next)==NULL) { printf("没有此店铺"); return; } printf("您所查询的店铺信息为:\n名称\t电话\t地址\n"); printf("%s%s%s",p->name,p->phone,p->address); } voidregisterdeal() { intq; FILE*fp; chary; link_shophead; shop*r,*p; head=r=(shop*)malloc(sizeof(shop)); r->next=NULL; fp=fopen("shenqing.txt","rt"); if(fp==NULL) { printf("发生错误,无法打开文件"); return; } if((y=fgetc(fp))==EOF) { printf("目前没有需要处理的信息\n"); system("pause"); system("cls"); MENU1(); return; } else { while(!feof(fp)) { p=(shop*)malloc(sizeof(shop)); fscanf(fp,"%s%s%s%s\n",p->name,p->phone,p->address,p->password); r->next=p; p->next=NULL; r=p; } for(p=head->next;p!=NULL;p=p->next) printf("%s%s%s\n",p->name,p->phone,p->address); printf("是否同意注册?Y/else"); scanf("%*c%c",&y); if(y=='Y') { fp=fopen("shop.txt","at"); if(fp==NULL) printf("文件不存在,打开错误\n"); for(p=head->next;p!=NULL;p=p->next) fprintf(fp,"%s%s%s%s\n",p->name,p->phone,p->address,p->password); fclose(fp); } } printf("处理成功"); fp=fopen("shenqing.txt","wt"); fclose(fp); } voidMENU1_choose() { intn,m,q; chara[20],b[20],c[20],d[20]; chary; FILE*fp,*fa; shop*p; shopsq; link_shopLS; link_userLU; LS=shopread(); while(1) { printf("请选择你想所想进行的选项:\n"); scanf("%d",&n); if(n==1) { Outputshop(LS); printf("是否进行排序?Y/else"); fflush(stdin); y=getchar(); if(y=='Y') { system("cls"); printf("\n\n\n\t\t\t●1.按店铺名称排序\n"); printf("\t\t\t●2.按店铺地址排序\n"); scanf("%d",&m); if(m==1) name_sort(LS); if(m==2) address_sort(LS); printf("1.退出\t2.返回"); scanf("%d",&m); if(m==1) exit(0); else { system("cls"); MENU1(); continue; } } else { printf("已放弃排序\n"); system("cls"); MENU1(); } } if(n==2) { system("cls"); printf("\n\n\n\t\t\t☆【1】删除店铺\n"); printf("\t\t\t☆【2】增加店铺\n"); printf("\t\t\t☆【3】输入店铺\n"); printf("\t\t\t☆【0】返回上一级\n"); printf("\n\t\t请选择将要进行的操作:\n");//二级 while(1) { scanf("%d",&m); if(m==1) deleteshop(LS); if(m==2) increaseshop(LS); if(m==3) { LS=creats(); shopwrite1(LS); } if(m==4) shopfind(LS); if(m==0) { system("cls"); MENU1(); break; } } } if(n==3) registerdeal();//注册处理以及投诉处理函数 if(n==4) { //LU=userread(); system("cls"); printf("\n\t请选择所想进行的选项:\n\n"); printf("\t●○●○●○●\n"); printf("\t1.查看个人信息\n"); printf("\t○2.修改个人信息○\n"); printf("\t0.返回上一级\n");//二级 printf("\t●○●○●○●\n"); while(1) { scanf("%d",&m); if(m==1) { chard[20]; fa=fopen("admin.txt","rt"); fscanf(fa,"%s%s%s%s",a,b,c,d); fclose(fa); printf("\n\t\t地区\t姓名\t电话号码\n"); printf("\t\t%s\t%s\t%s\n",a,b,d); } if(m==2) { system("cls"); printf("\n温馨提示,按0返回哦(〃'▽'〃)\n"); printf("\n\t\t●○●○●○●\n"); printf("\t\t1.修改姓名\n"); printf("\t\t○2.修改地址○\n"); printf("\t\t3.修改密码\n");//三级 printf("\t\t●○●○●○●\n"); scanf("%d",&q); if(q==1) { printf("请输入新的姓名:\n"); scanf("%s",b); } if(q==2) { printf("请输新的地址:\n"); scanf("%s",a); } if(q==3)//修改密码,含找回密码 { intj=0,h; charf[20],e[20]; fa=fopen("admin.txt","rt"); fscanf(fa,"%s%s%s%s",a,b,c,d); printf("您需要输入旧的密码:\n"); scanf("%s",f); while(strcmp(f,c)!=0) { j++; printf("\t\t×您的密码有误,请重新输入:"); scanf("%s",f); if(j==2) { printf("\t\t×您已经连续输错三次,按1找回密码,其他数字键返回:"); scanf("%d",&j); if(j==1) { printf("请输入您的电话号码:"); scanf("%s",e); if(strcmp(e,d)==0) { srand((unsigned)time(NULL)); j=rand()%900+100; fp=fopen("yanzheng.txt","wt"); //fscanf(fp,"%d\n",&j); fprintf(fp,"%d\n",j); fclose(fp); printf("我们已经发送验证码到您的手机,请输入:"); scanf("%d",&h); if(h==j) { printf("\t\t√请重新设置您的密码:"); scanf("%s",c); break; } else { printf("\t\t×验证码错误\n"); break; } } else { printf("\t\t×找回密码失败\n"); break; } } else { system("cls"); MENU(); return; } } } if(strcmp(c,f)==0) { printf("请输入新的密码:\n"); scanf("%s",c); } } if(q==1||q==2||q==3) { printf("是否保存?Y/else"); fflush(stdin); y=getchar(); if(y=='Y') { fa=fopen("admin.txt","wt"); fprintf(fa,"%s%s%s%s",a,b,c,d); fclose(fa); printf("\t\t√保存成功"); } else printf("\t\t×已放弃修改"); system("pause"); system("cls"); printf("\n\t请选择所想进行的选项:\n\n"); printf("\t●○●○●○●\n"); printf("\t1.查看个人信息\n"); printf("\t○2.修改个人信息○\n"); printf("\t0.返回上一级\n");//二级 printf("\t●○●○●○●\n"); continue; } if(q==0) { system("cls"); printf("\n\t请选择所想进行的选项:\n\n"); printf("\t●○●○●○●\n"); printf("\t1.查看个人信息\n"); printf("\t○2.修改个人信息○\n"); printf("\t0.返回上一级\n");//二级 printf("\t●○●○●○●\n"); continue; } } if(m==0) { system("cls"); MENU1(); break; } } } if(n==5) { system("cls"); MENU1(); } if(n==0) { system("cls"); MENU(); break; } if(n!=1&&n!=2&&n!=3&&n!=4&&n!=5&&n!=0) { printf("\t\t∷"); Sleep(400); printf("∷"); Sleep(400); printf("∷"); Sleep(400); printf("您需要输入菜单上的数字哦\n"); } } } voidMENU2_choose() { intn,m,q,i=0; chara[20],b[20]; chary; FILE*fp; user*u; food*p,*s,*r; link_foodLF,Lf; LF=foodread(); link_userLU; //useruser; while(1) { scanf("%d",&n); switch(n) { case1: system("cls"); printf("\n\n\t\t\t请选择需要进行的选项:\n\n"); printf("\t\t\t--------------------\n"); printf("\t\t\t用户相关\n"); printf("\t\t\t--------------------\n"); printf("\t\t\t●1.修改用户名\n"); printf("\t\t\t●2.修改密码\n"); printf("\t\t\t●3.修改收货地址\n"); printf("\t\t\t●4.修改电话号\n"); printf("\t\t\t●5.查看个人信息\n"); printf("\t\t\t●6.充值钱包\n"); printf("\t\t\t●0.返回上一级\n"); LU=userread(); u=LU->next; while(1) { if(strcmp(yh,u->name)==0) break; else u=u->next; } while(1) { scanf("%d",&m); if(m==1) { printf("请输入新的用户名:\n"); scanf("%s",u->name); } if(m==2) { printf("您需要输入旧的密码:\n"); scanf("%s",b); while(strcmp(u->password,b)!=0) { printf("密码错误,请重新输入\n"); scanf("%s",b); i++; if(i==2) { printf("您已经输错三次,请5分钟后再试"); continue; } } printf("请输入新的密码:"); scanf("%s",u->password); } if(m==3) { printf("请输入新的收货地址:"); scanf("%s",u->delivery); } if(m==4) { printf("请输入新的收货地址"); scanf("%s",u->number); } if(m==1||m==2||m==3||m==4) userwrite(LU); if(m==5) { printf("您的信息为:\n"); printf("姓名\t收获地址\t联系方式\n"); printf("%s\t%s\t%s\n",u->name,u->delivery,u->number); } if(m==6) { u=addmoney(u); userwrite(LU); } if(m==0) { system("cls"); MENU2(); break; } } break; case2: LF=dingdanread(); Outputfood(LF); break; case3: LF=foodread(); system("cls"); outputfood(LF); p=LF->next; printf("\t●按1购买,其他数字返回\t"); scanf("%d",&q); if(q==1) { purchase(); } else { system("cls"); MENU2(); continue; } break; case4: LF=dingdanread(); p=LF->next; i=0; printf("请输入所想修改的订单号:"); scanf("%d",&n); while(p) { if(n==p->type) { if(strcmp(p->yonghu,yh)==0) { i=1; system("cls"); printf("\n订单信息如下:\n"); printf("\t菜名\t单价\t数量\t总价\t店铺\t用户名\t\n"); printf("\t%s\t%d\t%d\t%d\t%s\t%s\n\n",p->name,p->price,p->amount,p->total,p->shop,p->yonghu); printf("\t\t○1.修改数量\n"); printf("\t\t○2.删除订单\n"); printf("\t\t○其他数字键返回\n"); scanf("%d",&n); if(n==1) { end=time(NULL); if((difftime(end,start))<180) { printf("还没有超过三分钟,请尽快修改哦\n"); printf("您只能修改菜的数量:"); scanf("%d",&m); p->amount=m; p->total=(p->amount)*(p->price); dingdanwrite(LF); printf("\t\t√已成功修改"); } else { printf("时间超过三分钟,已配送\n"); system("pause"); system("cls"); MENU2(); break; } } if(n==2) { deletedingdan(LF); dingdanwrite(LF); } else { system("pause"); system("cls"); MENU2(); break; } } if(strcmp(p->yonghu,yh)!=0) { printf("\t\t×不好意思,该订单您没有权限修改\n"); i=2; system("pause"); system("cls"); MENU2(); break; } } else p=p->next; } if(i==0) { printf("\t\t×没有改订单\n"); system("pause"); system("cls"); MENU2(); continue; } break; case5: purchase(); break; case6: system("cls"); printf("\n\n\n\t\t\t---------------\n"); printf("\t\t\t订单排序\n"); printf("\t\t\t---------------\n"); printf("\t\t\t△1.按菜名排序:\n"); printf("\t\t\t△2.按总价排序:\n"); printf("\t\t\t△0.返回\n"); scanf("%d",&m); { LF=dingdanread(); if(m==1) dingdan_name_sort(LF); if(m==2) dingdan_total_sort(LF); if(m==0) { system("cls"); MENU2(); continue; } system("pause"); system("cls"); MENU2(); continue; } break; //dindan_name_sort(LF); case0: system("cls"); MENU(); return; break; } } } voiddeletefood(link_foodLf) { inti=0; food*p,*n; p=Lf; n=p->next; charm[20]; chara; printf("请输入你所想删除的菜名:"); scanf("%s",m); while(n) { if(strcmp(m,n->name)==0) { if(strcmp(n->shop,dp)==0) { i++; p->next=n->next; foodwrite1(Lf); } else printf("不好意思,您没有权限删除\n"); break; } else { p=p->next; n=n->next; } } if(i==0) { printf("没有此菜,无法删除\n"); return; } } voidMENU3_choose() { intx,y; chara[20]; link_foodLF,Lf; LF=foodread(); food*p; while(1) { printf("请选择:"); scanf("%d",&x); if(x==1) { creatf(); //foodwrite(LF); } if(x==2) { inti=0; printf("请输入要修改的菜的名称:"); scanf("%s",a); //LF=foodread(); p=LF->next; while(p!=NULL) { if(strcmp(a,p->name)==0) { i++; if(strcmp(dp,p->shop)==0) { printf("请重新输入菜的信息:\n"); printf("\t\t\t△新菜名:"); scanf("%s",p->name); printf("\t\t\t△新菜价:"); scanf("%d",&p->price); foodwrite1(LF); } else printf("不好意思,您没有权限修改\n"); break; } p=p->next; } if(i==0) printf("\t\t×没有此菜的信息\n"); } if(x==3) { deletefood(LF); } if(x==4) { intsum=0; Lf=foodread(); p=Lf->next; system("cls"); printf("\n\n\t\t您家的食物如下:"); printf("\n\t\t----------------------------------------\n"); printf("\t\t菜名\t菜价\t店铺\t菜系\n"); printf("\t\t----------------------------------------\n"); while(p) { if(strcmp(p->shop,dp)==0) { printf("\t\t%-14s%-10d%-12s%s\n",p->name,p->price,p->shop,p->leibie); printf("\t\t----------------------------------------\n"); sum=sum+1; } p=p->next; } printf("\t\t合计/个:\t\t\t%d个菜\n",sum); printf("\t\t----------------------------------------\n"); if(sum==0) printf("\t\t\t●怪不得没订单,您还没添加菜品呢\n"); system("pause"); system("cls"); MENU3(); } if(x==5) { LF=dingdanread(); scorefind(LF);//查看业绩函数 system("pause"); system("cls"); MENU3(); } if(x==0) { system("cls"); MENU(); break; } } } //登陆 voidlogin() { intn,i=0,j=0; chara[10],c[10]; charb[15],d[15],f[10],e[20]; FILE*fp; charch; system("cls"); MENU(); printf("请选择:"); while(1) { scanf("%d",&n); //管理员登陆 if(n==1) { printf("请输入用户名:"); scanf("%s",a); printf("请输入密码:"); while((ch=getch())!=13){ if(ch==8){ printf("\b\b"); i--; continue; } b[i++]=ch; putchar('*'); } b[i]='\0'; fp=fopen("admin.txt","rt"); if(fp==NULL) printf("没有此文件,无法打开"); fscanf(fp,"%s%s%s%s",f,c,d,e); fclose(fp); while(strcmp(a,c)!=0||strcmp(b,d)!=0) { printf("\n账号或密码错误,请重新输入:\n"); printf("请输入用户名:"); scanf("%s",a); printf("请输入密码:"); i=0; while((ch=getch())!=13){ if(ch==8){ printf("\b\b"); i--; continue; } b[i++]=ch; putchar('*'); } b[i]='\0'; j++; if(j==2) { printf("\n密码错误已达三次,将自动退回主菜单\n"); system("pause"); system("cls"); MENU(); return; } } system("cls"); //system("color03"); welcome(); printf("\n"); system("pause"); system("cls"); MENU1(); MENU1_choose(); } //用户登录 if(n==2) { link_userLU; user*p; LU=userread(); p=LU->next; printf("请输入账号或名称"); scanf("%s",yh); printf("请输入密码:"); i=0; while((ch=getch())!=13){ if(ch==8){ printf("\b\b"); i--; continue; } b[i++]=ch; putchar('*'); } b[i]='\0'; inti=0; while(p!=NULL) { if(strcmp(yh,p->name)==0&&strcmp(b,p->password)==0) { system("cls"); //system("color0a"); //welcome(); printf("\n"); system("pause"); system("cls"); i++; MENU2(); MENU2_choose(); break; } p=p->next; } if(i==0) { printf("密码或者账号错误\n"); system("pause"); system("cls"); ME(); return; } } if(n==3) { link_shopLS; shop*p; j=0; LS=shopread(); p=LS->next; printf("请输入店铺名称或者账号:"); scanf("%s",dp); printf("请输入密码"); i=0; while((ch=getch())!=13) { if(ch==8) { printf("\b\b"); i--; continue; } putchar('*'); b[i++]=ch; } b[i]='\0'; while(p!=NULL) { if(strcmp(dp,p->name)==0&&strcmp(b,p->password)==0) { system("cls"); //system("color0a"); //welcome(); j++; printf("\n"); system("pause"); system("cls"); MENU3(); MENU3_choose(); break; } else p=p->next; } if(j==0) { printf("\t\t\n×密码或者账号错误\n"); system("pause"); system("cls"); ME(); return; } } if(n==0) { system("cls"); ME(); break; } } } user*creatu() { chara[30],b[20],c[15],d[20]; charca[20],mi1[20],mi2[20]; link_userLU,lu; FILE*fp; user*s,*r,*p; intx,y,i,h; LU=r=(user*)malloc(sizeof(user)); LU->next=NULL; printf("请输入姓名:"); scanf("%s",a); lu=userread(); while(1) { i=0; p=lu->next; while(p) { if(strcmp(a,p->name)==0) { i++; printf("\t\t×此用户已经有人注册过,请重新输入:"); scanf("%s",a); break; } else p=p->next; } if(i==0) break; } printf("请输入收货地址:"); scanf("%s",b); printf("请输入密码:"); scanf("%s",c); printf("请输入电话号码:"); scanf("%s",d); x=strlen(c); while(x<8) { printf("\t\t●您的密码小于8位,安全指数为低\n"); printf("按1修改,其他键放弃修改:"); scanf("%d",&y); if(y==1) { scanf("%s",c); x=strlen(c); } else break; } if(strcmp(b,"0")!=0) { s=(user*)malloc(sizeof(user)); s->score=0; strcpy(s->name,a); strcpy(s->delivery,b); strcpy(s->password,c); strcpy(s->number,d); r->next=s; s->next=NULL; r=s; printf("为了方便充值钱包,请绑定您的银行卡:"); scanf("%s",ca); h=strlen(ca); while(h<15) { printf("\t\t●您的银行卡不足15位,请重新输入:"); scanf("%s",ca); h=strlen(ca); } i=0; printf("请设置您的支付密码"); scanf("%s",mi1); printf("请确认密码"); scanf("%s",mi2); if(strcmp(mi1,mi2)!=0) { printf("\t\t×注册失败,两次密码不同"); return0; } fp=fopen("yue.txt","at"); fprintf(fp,"%s%s%s\n",a,ca,mi1); fclose(fp); } else { printf("\t\t×注册失败,请输入正确的收货信息:"); return0; } returnLU; } voidRegister() { inty; chara; FILE*fp; shopsq;//申请 system("cls"); printf("\n\n\n\t\t\t\t1.注册用户\t\t\t2.申请店铺\n"); printf("\t\t\t\t0.返回上一级"); while(1) { printf("\t\t▲请选择要进行的选项:"); scanf("%d",&y); if(y==1)//用户注册 { link_userLU; LU=creatu(); userwrite2(LU); } if(y==2) { printf("请输入店铺名称:"); scanf("%s",sq.name); printf("请输入店铺电话:"); scanf("%s",sq.phone); printf("请输入店铺地址:"); scanf("%s",sq.address); printf("请输入店铺密码:"); scanf("%s",sq.password); fp=fopen("shenqing.txt","at"); if(fp==NULL) { printf("发生错误,无法打开文件"); return; } printf("是否保存?Y/else"); scanf("%*c%c",&a); if(a=='Y') { fprintf(fp,"%s%s%s%s\n",sq.name,sq.phone,sq.address,sq.password); fclose(fp); printf("\t\t√申请成功,等待上级审核"); } else { printf("\t\t×已放弃申请"); fclose(fp); } } if(y==0) { system("cls"); printf("\t\tWELCOME\n这里是外卖管理系统,请选择接下来的操作:"); printf("\n\n\t\t\t\t1.登陆"); printf("\t\t\t\t2.注册\n"); break; } } } voidchoose() { intx; ME(); while(1) { scanf("%d",&x); if(x==1) login(); if(x==0) { Exit(); return; } if(x==2) Register(); } } intmain() { choose(); }
代码有些多,因为要用到文件以及文件交互,因此这里有整个的文件外卖管理系统。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。