#include #include #include #include using namespace std; const int maxsize=100;//设置链表数组的最多个数 int Goodnum=0;//用于设置输入的商品数 int Adminnum=0;//用于设置输入的管理员人数 int buyernum=0;//用于设置输入的普通用户人数 //管理员结构体。。。。。。。。。。。。。。。。。。。。。。。。。。。 typedef struct Admin* apointer;//结点指针类型 struct Admin{ string Admin_ID;//帐号 string Admin_name;//姓名 string Admin_mima;//密码 apointer next; }; typedef apointer alklist;//单链表类型,即头指针类型 //管理员函数模块 //初始化,建表 alklist Admin_initlist(){ apointer head; head=new Admin; head->next=NULL; return head; } //存储管理员信息至文件 void Admin_save(alklist &head){ apointer p; ofstream ofile("C:\\管理员信息.txt",ios::out); ofile<<"管理员人数:"<<" "<next; while(p!=NULL) { ofile<Admin_ID<<"\t"<Admin_name<<"\t"<Admin_mima<next; } cout<<"管理员信息保存成功"<Admin_ID==ID&&p->Admin_mima==mima) return 1; else p=p->next; } cout<<"管理员帐号不存在!"<>ID; p=head->next; while(p!=NULL){ if(p->Admin_ID==ID) flat=0; p=p->next; } if(flat==0) { cout<<"管理员帐号已存在,请重新输入"<>mima; cout<<"请输入管理员姓名"<>name; s=new Admin; s->Admin_ID=ID; s->Admin_name=name; s->Admin_mima=mima; s->next=head->next;//使用头插法建表 head->next=s; Adminnum++;//输入一个管理员信息,Adminnum自加1 Admin_save(head); cout<<"是否继续注册?<继续>请按1 <结束>请按0"<>sign;//while循环判断条件,所以不需要用if } } //删除管理员 void Admin_delete(alklist &head){ apointer p,q; p=head; int sign=1,flat = 0; string ID; while(sign!=0){ cout<<"请输入要删除的管理员帐号:"; cin>>ID; while(p->next!=NULL&&flat==0){ if(p->next->Admin_ID==ID){ q=p->next; p->next=q->next; delete q; Adminnum--; flat=1; cout<<"删除成功"<next; } if(flat==0) cout<<"管理员不存在!"<请按1 <结束>请按0"<>sign;//while循环判断条件,所以不需要用if } } //获取管理员信息,导入链表 alklist Admin_get(alklist &head){ apointer s,p;//s用于存储管理员信息,p用于head的连接 string numname; string ID,name,mima; head->next=NULL; p=head; ifstream ifile("C:\\管理员信息.txt",ios::in); if(!ifile){ cerr<<"管理员信息查询出错"<>numname; ifile>>Adminnum;//从文件中提取管理员个数,用于for循环 for(int i=1;i<=Adminnum;i++){ ifile>>ID; ifile>>name; ifile>>mima; s=new Admin; s->Admin_ID=ID; s->Admin_name=name; s->Admin_mima=mima; s->next=p->next; p->next=s; } head=p; ifile.close(); return head; } //。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 //普通用户结构。。。。。。。。。。。。。。。。。。。。。。。。。。 typedef struct custom* cpointer;//结点指针类型 struct custom{ string custom_ID;//帐号 string custom_name;//姓名 string custom_mima;//密码 double money;//账户余额 cpointer next; }; typedef cpointer clklist;//单链表类型,即头指针类型 //普通用户函数模块。。。。。。 //初始化,建表 clklist custom_initlist(){ cpointer head; head=new custom; head->next=NULL; return head; } //存储用户信息至文件 void custom_save(clklist &head){ cpointer p; ofstream ofile("C:\\普通用户信息.txt",ios::out); ofile<<"普通用户人数:"<<" "<next; while(p!=NULL) { ofile<custom_ID<<"\t"<custom_name<<"\t"<custom_mima<<"\t"<money<next; } cout<<"用户信息保存成功"<>ID; p=head->next; while(p!=NULL){ if(p->custom_ID==ID) flat=0; p=p->next; } if(flat==0) { cout<<"用户帐号已存在,请重新输入"<>mima; cout<<"请输入用户姓名"<>name; s=new custom; s->custom_ID=ID; s->custom_name=name; s->custom_mima=mima; s->money=0; s->next=head->next;//使用头插法建表 head->next=s; buyernum++;//输入一个用户信息,buyernum自加1 custom_save(head); cout<<"是否继续注册?<继续>请按1 <结束>请按0"<>sign;//while循环判断条件,所以不需要用if } } //普通用户登录验证 int custom_ender(clklist &head,string ID,string mima){ cpointer p; p=head; while(p!=NULL) { if(p->custom_ID==ID&&p->custom_mima==mima) return 1; else p=p->next; } cout<<"用户帐号不存在!"<next!=NULL&&flat==0){ if(p->next->custom_ID==ID){ q=p->next; return q; } else p=p->next; } //if(flat==0) cout<<"用户不存在!"<next=NULL; p=buyer; ifstream ifile("C:\\普通用户信息.txt",ios::in); if(!ifile){ cerr<<"用户信息查询出错"<>numname; ifile>>buyernum;//从文件中提取用户个数,用于for循环 for(int i=1;i<=buyernum;i++){ ifile>>ID; ifile>>name; ifile>>mima; ifile>>money; s=new custom; s->custom_ID=ID; s->custom_name=name; s->custom_mima=mima; s->money=money; s->next=p->next; p->next=s; } buyer=p; ifile.close(); return buyer; } //修改用户密码 void custom_change(clklist &head,string ID){ cpointer p; p=head; int sign=1; string mima; while(sign!=0){ while(p!=NULL) { if(p->custom_ID==ID) { cout<<"请输入新密码:"; cin>>p->custom_mima; cout<<"密码修改成功~~"<next; } custom_save(head); cout<<"是否继续该模块?<继续>请按1 <结束>请按0"<>sign;//while循环判断条件,所以不需要用if } } //删除普通用户 void custom_delete(clklist &head){ cpointer p,q; p=head; int sign=1,flat = 0; string ID; while(sign!=0){ cout<<"请输入要删除的用户帐号:"; cin>>ID; while(p->next!=NULL&&flat==0){ if(p->next->custom_ID==ID){ q=p->next; p->next=q->next; delete q; buyernum--; flat=1; cout<<"删除成功"<next; } if(flat==0) cout<<"用户不存在!"<请按1 <结束>请按0"<>sign;//while循环判断条件,所以不需要用if } } //余额充值 void custom_addmoney(clklist &head,string ID){ cpointer p; int sign=1; p=custom_locate(head,ID); string acard,card1="asd500",card2="asd1000"; while(sign!=0){ cout<<"请输入您获得的充值卡卡号:"; cin>>acard;//acard是用户获得的充值卡 if(acard!=card1&&acard!=card2) cout<<"充值卡无效"<money+=500; cout<<"充值成功!"<money<money+=1000; cout<<"充值成功!"<money<请按1 <结束>请按0"<>sign;//while循环判断条件,所以不需要用if } } //。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 //商品结构。。。。。。。。。。。。。。。。。。。。。。。。。。。。 struct Goods{ string Good_name;//商品名称 string Good_ID;//商品编号 double piece;//商品价格 int last;//库存数量 }; typedef struct{ Goods Good[maxsize]; int n; }sqlist; //商品函数模块 //商品信息验证 //编号验证 int Good_ender1(sqlist &Goods,string ID){//对比相同返回1 for(int i=0;i>title;//输出“商品种类共有” ifile>>sum;//输出商品种类 Goodnum=sum; ifile>>IDtitle>>nametitle>>piecetitle>>lasttitle;//输出编号,名称,单价,库存 for(int i=0;i>ID>>name>>piece>>last; Goods.Good[i].Good_ID=ID; Goods.Good[i].Good_name=name; Goods.Good[i].piece=piece; Goods.Good[i].last=last; } cout<<"成功读取了 "<>ID; if(Good_ender1(Goods,ID)==0) { cout<<"请输入商品名称:"; cin>>name; if(Good_ender2(Goods,name)==0) { cout<<"请输入商品单价:"; cin>>piece; cout<<"请输入商品数量:"; cin>>last; Goods.Good[Goodnum].Good_ID=ID; Goods.Good[Goodnum].Good_name=name; Goods.Good[Goodnum].piece=piece; Goods.Good[Goodnum].last=last; Goodnum++;//添加完信息就自加1 Good_save(Goods);//添加完就保存至商品信息.txt cout<<"是否继续录入?<继续>请按1 <结束>请按0"<>sign; if(sign==0) break; } else {cout<<"商品名称已存在!<重新输入>请按1 <结束>请按0"<>flat;} } else {cout<<"商品编号已存在!<重新输入>请按1 <结束>请按0"<>flat;} } } //商品修改 void Good_change(sqlist &Goods){ string ID,name; int sign;//sign用于定位要修改商品的位置 int a,flat=1;//a用于switch for(;flat!=0;){ cout<<"<输入要修改的商品编号>请按1 <输入要修改的商品名称>请按2"<>a; if(a!=1&&a!=2) {cout<<"选择有误,请重新输入"<>ID; if(Good_ender1(Goods,ID)==1) { sign=Good_locate1(Goods,ID); cout<<"商品编号:"<>Goods.Good[sign].Good_ID; cout<<"商品名称:"; cin>>Goods.Good[sign].Good_name; cout<<"商品单价:"; cin>>Goods.Good[sign].piece; cout<<"商品库存:"; cin>>Goods.Good[sign].last; Good_save(Goods);//保存信息 cout<<"修改成功"<>name; if(Good_ender2(Goods,name)==1) { sign=Good_locate2(Goods,name); cout<<"商品编号:"<>Goods.Good[sign].Good_ID; cout<<"商品名称:"; cin>>Goods.Good[sign].Good_name; cout<<"商品单价:"; cin>>Goods.Good[sign].piece; cout<<"商品库存:"; cin>>Goods.Good[sign].last; Good_save(Goods);//保存信息 cout<<"修改成功"<请按1 <退出>请按0"<>flat; }//for循环的 } //商品查询 void Good_inquire(sqlist &Goods){ string ID,name; int a,sign,flat=1; for(;flat!=0;){ cout<<"<按商品编号查询>请按1 <按商品名称查询>请按2"<>a; if(a!=1&&a!=2) {cout<<"选择有误,请重新输入"<>ID; if(Good_ender1(Goods,ID)==1) { sign=Good_locate1(Goods,ID); cout<<"商品编号:"<>name; if(Good_ender2(Goods,name)==1) { sign=Good_locate2(Goods,name); cout<<"商品编号:"<请按1 <结束>请按0"<>flat; if(flat==0) break; }//for循环的 } //商品删除 void Good_delete(sqlist &Goods){ int a,sign,flat=1; string ID,name; for(;flat!=0;){ cout<<"<输入要删除的商品编号>请按1 <输入要删除的商品名称>请按2"<>a; if(a!=1&&a!=2) {cout<<"选择有误,请重新输入"<>ID; if(Good_ender1(Goods,ID)==1){ sign=Good_locate1(Goods,ID); for(int i=sign;i>name; if(Good_ender2(Goods,name)==1){ sign=Good_locate2(Goods,name); for(int i=sign;i请按1 <结束>请按0"<>sign; if(sign==0) break; }//for循环的 } //商品排序 void Good_range(sqlist Go){ Goods p; p.piece=0; p.last=0; int a,flag=0,flat=1; for(;flat!=0;){ cout<<"<按商品编号排序>请按1 <按商品单价排序>请按2 <按库存数量排序>请按3 <退出>请按0"<>a; if(a!=0&&a!=1&&a!=2&&a!=3) {cout<<"选择有误,请重新输入"<=i+1;j--){ if(Go.Good[j].Good_ID=i+1;j--){ if(Go.Good[j].piece=i+1;j--){ if(Go.Good[j].last请按1 <输入商品名称购买>请按2"<>a; if(a!=1&&a!=2) {cout<<"输入有误,请重新输入"<>ID; if(Good_ender1(Goods,ID)==1) { sign=Good_locate1(Goods,ID); cout<<"请输入购买数量:"; cin>>shu; if(shu<=Goods.Good[sign].last){ if(p->money请按1 <否>请按0"<>flat; if(flat==0) break; if(flat==1) return;} Goods.Good[sign].last=Goods.Good[sign].last-shu; cout<<"购买成功"<money=p->money-Goods.Good[sign].piece*shu;//账户余额减少,扣费成功 custom_save(head); cout<<"账户余额:"<money<>name; if(Good_ender2(Goods,name)==1) { sign=Good_locate2(Goods,name); cout<<"请输入购买数量:"; cin>>shu; if(shu<=Goods.Good[sign].last){ if(p->money请按1 <否>请按0"<>flat; if(flat==0) break; if(flat==1) return;} Goods.Good[sign].last=Goods.Good[sign].last-shu; cout<<"购买成功"<money=p->money-Goods.Good[sign].piece*shu;//账户余额减少,扣费成功 custom_save(head); cout<<"账户余额:"<money<请按1 <结束>请按0"<>flat; if(flat==0) break; }//for的 } //输出商品的所有库存信息 void Good_all(sqlist &Goods){ int flat=1; for(;flat!=0;){ cout<<"商品编号"<请按1 <结束>请按0"<>flat; if(flat==0) break;} } //。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 //超级管理员界面 void superman(alklist &head){ int a=1,sign=1,choice; string ID,mima; while(sign!=0){ cout<<"请输入帐号:"<>ID; cout<<"请输入密码"<>mima; if(ID!="asd"||mima!="123") {cout<<"输入有误,是否重新登录?"<请按1 <结束>请按0"<>sign; if(sign==0) {system("cls");return;} else continue; } while(a!=0){ system("cls"); cout<<"===============================================================================\n"; cout<<"|| 欢迎您,尊敬的超级管理员 ||\n"; cout<<"===============================================================================\n"; cout<<"|| ||\n"; cout<<"|| \t \t \t [1]添加管理员 \t\t\t ||\n"; cout<<"|| \t \t \t [2]删除管理员 \t\t\t ||\n"; cout<<"|| \t \t \t [0] 退出 \t\t\t ||\n"; cout<<"===============================================================================\n"; cout<<"请输入操作选项: "; cin >> choice ; if(choice!=0&&choice!=1&&choice!=2) {cout<<"输入有误,请重新输入";continue;} switch ( choice ) { case 1:Admin_creat(head);system("cls"); break; case 2:Admin_delete(head);system("cls"); break; case 0:return; }//switch cout<<"是否继续执行超级管理员权限?<继续>请按1 <结束>请按0"<>a; if(a==0) return; }//里层while的a }//最外层while的sign } //管理者功能界面 void Admin_show(alklist &head,clklist &buyer,sqlist &Goods) { int a=1,choice;//a用于循环,choice用于功能选择 string ID,mima; cout<<"请输入管理员帐号:"; cin>>ID; cout<<"请输入管理员密码:"; cin>>mima; apointer p; p=head; if(Admin_ender(head,ID,mima)==1) { while(a!=0){ system("cls"); cout<<"===============================================================================\n"; cout<<"|| 欢迎您,尊敬的管理者 ||\n"; cout<<"===============================================================================\n"; cout<<"|| ||\n"; cout<<"|| \t [1]商品录入 \t [2]商品修改 \t[3]商品查询\t ||\n"; cout<<"|| \t [4]商品删除 \t [5]商品排序 \t[6]商品库存\t ||\n"; cout<<"|| \t [7]删除普通用户 \t [0]退出 \t\t ||\n"; cout<<"===============================================================================\n"; cout<<"请输入操作选项: "; cin >> choice ; switch ( choice ) { case 1:Good_add(Goods);system("cls"); break; case 2:Good_change(Goods);system("cls"); break; case 3:Good_inquire(Goods);system("cls"); break; case 4:Good_delete(Goods);system("cls"); break; case 5:Good_range(Goods);system("cls"); break; case 6:Good_all(Goods);system("cls"); break; case 7:custom_delete(buyer);system("cls"); break; case 0:system("cls"); return; }//switch的 }//while的 }//if的 else cout<<"管理员帐号不存在!"<>ID; cout<<"请输入密码"<>mima; /*cpointer p; p=head;*/ if(custom_ender(head,ID,mima)==1) { while(a!=0){ system("cls"); cout<<"===============================================================================\n"; cout<<"|| 欢迎您,尊敬的用户 ||\n"; cout<<"===============================================================================\n"; cout<<"|| ||\n"; cout<<"|| \t [1]商品查询 \t [2]商品排序 \t[3]商品库存\t ||\n"; cout<<"|| \t [4]商品购买 \t [5]修改密码 \t[6]充值 [0]退出 ||\n"; cout<<"===============================================================================\n"; cout<<"请输入操作选项: "; cin >> choice ; switch ( choice ) { case 1:Good_inquire(Goods);system("cls"); break; case 2:Good_range(Goods);system("cls"); break; case 3:Good_all(Goods);system("cls"); break; case 4:Good_buy(Goods,head,ID);system("cls"); break; case 5:custom_change(head,ID);system("cls"); break; case 6:custom_addmoney(head,ID);system("cls"); break; case 0:system("cls"); return; }//switch的 }//while的 }//if的 else { cout<<"是否重新输入?<继续>请按1 <结束>请按0"<>sign;//while循环判断条件,所以不需要用if } } } //普通用户选择(登录||注册) void custom_show(clklist &head,sqlist &Goods) { int a=1,choice; while(a!=0){ system("cls"); cout<<"===============================================================================\n"; cout<<"|| 欢迎您,尊敬的用户 ||\n"; cout<<"===============================================================================\n"; cout<<"|| ||\n"; cout<<"|| \t \t \t [1]用户登录 \t\t\t ||\n"; cout<<"|| \t \t \t [2]新用户注册 \t\t\t ||\n"; cout<<"|| \t \t \t [0]返回 \t\t\t ||\n"; cout<<"===============================================================================\n"; cout<<"请选择您的身份: "; cin >> choice ; if(choice!=0&&choice!=1&&choice!=2) {cout<<"输入有误,请重新输入";continue;} switch ( choice ) { case 1:custom_showall(head,Goods);system("cls"); break; case 2:custom_creat(head);system("cls"); break; case 0:return; }//switch cout<<"是否继续用户模块?<继续>请按1 <结束>请按0"<>a; if(a==0) break; } } //main()函数主界面 void show()// { int a=1;//用于循环次数 Admin *Ad;//定义一个管理员 Ad=Admin_initlist();//初始化,新建一个链表 custom *buyer;//定义一个普通用户 buyer=custom_initlist(); sqlist Goods;//定义一个商品链表 int choice; while(a!=0){ Admin_get(Ad);//获取管理员文件中的信息,导入Ad链表中 custom_get(buyer);//获取普通用户文件中的信息,导入buyer链表中 Good_get(Goods);//从文件中获取商品信息 system("cls"); cout<<"===============================================================================\n"; cout<<"|| 欢迎使用超市管理系统 ||\n"; cout<<"===============================================================================\n"; cout<<"|| ||\n"; cout<<"|| \t [1]超级管理员 \t[2]管理员 \t [3]顾客 \t [0]退出 ||\n"; cout<<"===============================================================================\n"; cout<<"请选择您的身份: "; cin >> choice ; switch ( choice ) { case 1:superman(Ad); break;//超级管理员功能界面 case 2:Admin_show(Ad,buyer,Goods); break; case 3:custom_show(buyer,Goods); break; case 0:system("cls");return; default:cout<<"输入有误,请重新输入"<