#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 50
struct user //定义用户结构体
{
char cID[10];
char cName[10];
char cPass[10];
}user[20];
struct product //定义商品结构体
{
char pID[10];
char pName[10];
int pNumber;
float price;
int state;
float discont;
}product[20];
int uNum=0; //定义全局变量记录用户数量
int pNum=0; //定义全局变量记录商品类型数量
void menue1(); //主界面函数
void menue2(); //管理员界面函数
void menue3(); //普通用户界面函数
void regist(); //普通用户注册函数
void login(); //登陆函数
void add(); //管理员添加商品函数
void query(); //查询商品信息函数
void order(); //普通用户订购商品函数
void main()
{
menue1();
}
void menue1() //主菜单函数显示主页面
{
char op;
system("cls");
printf("\t\t欢迎进入购物系统\n");
printf("\t-----------------------------\n");
printf("\t\tA:用户注册\n");
printf("\t\tB:登陆\n");
printf("\t\tC:退出\n");
printf("\t-----------------------------\n");
printf("请选择:");
fflush(stdin);
scanf("%c",&op);
while(1)
{
switch(op)
{
case 'a':
case 'A':regist();break;
case 'b':
case 'B':login();break;
case 'c':
case 'C':exit(0);
default:printf("输入错误,请重新输入\n");getchar();
}
menue1();
scanf("% c",&op);
}
}
void menue2() //次级菜单函数显示管理员操作界面
{
int op;
system("cls");
printf("\n\t\t管理员您好\n\n");
printf("\t-----------------------------\n");
printf("\t\t1:查询商品\n");
printf("\t\t2:添加商品\n");
printf("\t\t3:返回上级菜单\n");
printf("\t-----------------------------\n");
printf("请选择:");
scanf("%d",&op);
while(1)
{
switch(op)
{
case 1:query();break;
case 2:add();break;
case 3:menue1();break;
default:printf("输入错误,请重新输入\n");getchar();
}
getchar();
menue2();
scanf("%d",&op);
}
}
void menue3() //次级菜单函数显示用户操作界面
{
int op;
system("cls");
printf("\n\t\t尊敬的用户您好\n\n");
printf("\t-----------------------------\n");
printf("\t\t1:查询商品\n");
printf("\t\t2:订购商品\n");
printf("\t\t3:返回上级菜单\n");
printf("\t-----------------------------\n");
printf("请选择:");
scanf("%d",&op);
while(1)
{
switch(op)
{
case 1:query();break;
case 2:order();break;
case 3:menue1();break;
default:printf("输入错误,请重新输入\n");getchar();
}
getchar();
menue3();
scanf("%d",&op);
}
}
void regist()
{
int ii;
char cID[M],cName[M],cPass[M];
char op='y';
while(op=='y'||op=='Y')
{
printf("请输入用户ID(请输入十位以内的数字或英文字母):\n");
s:scanf("%s",&cID);
while(strlen(cID)>=10)
{
printf("用户ID过长,请重新输入:");
scanf("%s",&cID);
}
for(ii=0;ii<uNum;ii++) //验证用户ID是否重复
{
if(strcmp(user[ii].cID,cID)==0)
{
printf("用户ID重复,请重新输入:");
goto s;
}
}
if(ii==uNum)
strcpy(user[uNum].cID,cID); //如果不重复将用户输入的ID放入用户结构体数组里
printf("请输入用户名(请输入十位以内的数字或英文字母):\n");
scanf("%s",&cName);
while(strlen(cName)>=10)
{
printf("用户名过长,请重新输入:");
scanf("%s",&cName);
}
strcpy(user[uNum].cName,cName);
printf("请输入用户密码:\n");
scanf("%s",&cPass);
while(strlen(cPass)>=10)
{
printf("用户密码过长,请重新输入(请输入十位以内的数字或英文字母):");
scanf("%s",&cPass);
}
strcpy(user[uNum].cPass,cPass);
printf("恭喜您注册成功!是否继续注册(是:y否:任意其他键)");
uNum++;
fflush(stdin);
scanf("%c",&op);
}
}
void login()
{
int i;
char choose='y';
char cName[10],cPass[10];
printf("请输入用户名:\n");
scanf("%s",&cName);
printf("请输入密码:\n");
scanf("%s",&cPass);
if(strcmp(cName,"admin")==0&&strcmp(cPass,"admin")==0) //判断是否为管理员登陆,如果是进入查询添加商品系统
{
menue2();
}
else
{
for(i=0;i<uNum;i++)
{
if(strcmp(user[i].cName,cName)==0&&strcmp(user[i].cPass,cPass)==0) //验证用户是否已存在,存在则进入查询订购系统
{
menue3();
}
}
if (i==uNum)
{
printf("用户名或密码错误,继续登录请输入Y/y:"); //用户不存在则重新输入用户名和密码登陆
fflush(stdin);
scanf("%c",&choose);
if (choose=='y'||choose=='Y')
login();
else return;
}
}
}
void add()
{
int ii;
char pID[M],pName[M];
char op='y';
while(op=='y'||op=='Y')
{
int state=-1;
float discont=2.0;
printf("请输入商品编号(请输入十位以内的数字或英文字母):\n");
s:scanf("%s",&pID);
while(strlen(pID)>=10)
{
printf("商品编号过长,请重新输入:");
scanf("%s",&pID);
}
for(ii=0;ii<pNum;ii++) //判断商品ID是否重复,重复则重新输入
{
if(strcmp(product[ii].pID,pID)==0)
{
printf("商品编号重复,请重新输入:");
goto s;
}
}
if(ii==pNum) //商品ID不重复则放到商品结构体数组里面
strcpy(product[pNum].pID,pID);
printf("请输入商品名称:\n"); //继续输入商品名称数量价格和折扣状态
scanf("%s",&pName);
while(strlen(pName)>=10)
{
printf("商品名称过长,请重新输入(请输入十位以内的数字或英文字母):");
scanf("%s",&pName);
}
strcpy(product[pNum].pName,pName);
printf("请输入商品数量:\n");
scanf("%d",&product[pNum].pNumber);
printf("请输入商品价格:\n");
scanf("%f",&product[pNum].price);
printf("请输入商品折扣状态(0表示不能打折,1表示可以打折):\n");
while(state!=1&&state!=0) //折扣状态必须为1或者0,如果不是重新输入
{
scanf("%d",&state);
if(state!=1&&state!=0)
printf("输入错误,请重新输入(0:不能打折,1:可以打折):");
}
product[pNum].state=state; //将折扣状态放入商品结构体数组里面
if(product[pNum].state==0) //如果商品折扣状态为0,则不必输入折扣额度,默认为0
product[pNum].discont=0;
else
{
printf("请输入商品折扣额度:\n");
while(discont>1||discont<0) //折扣额度必须为大于0且小于1的数据,否则重新输入
{
scanf("%f",&discont);
if(discont>=1||discont<=0)
printf("请输入大于0且小于1的数:");
}
product[pNum].discont=discont;
}
printf("恭喜您添加成功!是否继续添加?(是:y否:任意键)");
pNum++;
fflush(stdin);
scanf("%c",&op);
}
}
void query()
{
int i;
if(pNum==0) //判断是否存在,商品存在则输出
{
printf("暂时没有商品\n");
getchar();
}
else
{
system("cls");
printf("(0:不能打折,1可以打折)\n");
for(i=0;i<pNum;i++)
{
printf("商品编号:%s\n",product[i].pID);
printf("商品名称:%s\n",product[i].pName);
printf("商品数量:%d\n",product[i].pNumber);
printf("商品价格:%.2f\n",product[i].price);
printf("商品折扣状态:%d\n",product[i].state);
printf("商品折扣额度:%.2f\n\n",product[i].discont);
}
getchar();
}
}
void order()
{
char op,choose,pID[10];
int pNumber;
float price;
system("cls");
printf("\t欢迎订购商品\n");
query();
if(pNum==0)
menue3();
else
{
printf("请输入需要订购的商品编号:");
scanf("%s",&pID);
for(int i=0;i<pNum;i++)
{
if(strcmp(product[i].pID,pID)==0) //判断商品是否存在,存在则继续让用户输入要订购的数量
{
printf("\n");
printf("请输入需要订购的商品数量:");
scanf("%d",&pNumber);
if(pNumber<=product[i].pNumber)
{
printf("您要订购编号为%s商品,数量为%d.确认:Y/y否:请按任意键",pID,pNumber);
fflush(stdin);
scanf("%c",&op);
if(op=='y'||op=='Y')
{
if(product[i].state==1)
price=product[i].price*pNumber*product[i].discont;//计算有折扣的价钱
else
price=product[i].price*pNumber; //计算无折扣的价钱
printf("您所订购商品的总价钱为%.2f\n",price);
product[i].pNumber=product[i].pNumber-pNumber;
if(product[i].pNumber==0) //如果商品的数量为0则将其从商品结构体数组中清除
{
for(int p=i;p<pNum-1;p++)
{
product[p].discont=product[p+1].discont; //将数量为0的商品的后面的商品依次覆盖前面的商品
strcpy(product[p].pID,product[p+1].pID);
str
- 1
- 2
前往页