#include<stdio.h>
#include<string.h>
#include "goods.h"
struct user Users[80] = { 0 };
struct good goods[100] = { "苹果",10,"梨",6 };
struct good shoppingcart[50] = { 0 };
struct user admin = { "admin","admin123" };
int users_count = 0; //用户个数
int goods_count = 2; //商品种类个数
int cart_count = 0; //购物车商品个数
//int i = 0;
void printgoods() //查看商品
{
printf("*******************商品列表*****************\n");
printf("名称 价格 \n");
for (int i = 0; i < goods_count; i++)
{
if (strcmp(goods[i].name, "*****") != 0)
printf("%-20s %-20.1f\n", goods[i].name, goods[i].price);
}
printf("********************************************\n");
}
void printshoppingcart() //显示购物车商品
{
printf("*******************购物车商品列表*****************\n");
printf("名称 价格 \n");
for (int i = 0; i < cart_count; i++)
{
if (strcmp(shoppingcart[i].name, "*****") != 0)
printf("%-20s %-20.1f\n", shoppingcart[i].name, shoppingcart[i].price);
}
printf("********************************************\n");
}
void deleteshoppingcart() //从购物车删除商品
{
//自行编写
}
void addshoppingcart() //添加商品购物车
{
struct good tgood;
float tprice = 0;
int tempi = 0;
printf("输入您要添加的商品名称:");
scanf("%s", tgood.name);
//输出提示购买的数量
//输入购买的对应商品的数量
for (int i = 0; i < goods_count; i++) //goods_count商品种类数目
{
if (strcmp(tgood.name, goods[i].name) == 0)
{
tempi = i;
break;
}
}
strcpy(shoppingcart[cart_count].name, goods[tempi].name); //商品名称写入购物车
shoppingcart[cart_count].price = goods[tempi].price; //商品价格写入购物车
//购买的商品的数量写入购物车
cart_count++; //购物车商品的数量加1
}
void print1() //打印一级菜单
{
printf("********************************************\n");
printf("1:注册\n");
printf("2:登录\n");
printf("3:退出登录\n");
printf("4:关闭系统\n");
printf("********************************************\n");
printf("请选择操作:");
}
void aprint2() //打印管理员登录后的二级菜单
{
printf("********************************************\n");
printf("1:查看商品\n");
printf("2:添加商品\n");
printf("3:修改商品\n");
printf("4:删除商品\n");
printf("5:返回上级菜单\n");
printf("********************************************\n");
printf("请选择操作:");
}
void aprint3() //打印管理修改商品菜单
{
printf("********************************************\n");
printf("1:修改名称\n");
printf("2:修改价格\n");
printf("3:返回上级菜单\n");
printf("********************************************\n");
printf("请选择操作:");
}
void regedit() //用户注册
{
user tuser;
int j, p, q;
while (1)
{
p = 0;
printf("请输入用户名:");
scanf("%s", tuser.name);
for (int k = 0; k < users_count; k++)
{
if (strcmp(tuser.name, Users[k].name) == 0)
{
p = 1;
break;
}
}
if (p == 1)
{
printf("用户名已存在!\n");
}
else
{
strcpy(Users[users_count].name, tuser.name);
break;
}
}
while (1)
{
printf("请输入密码:");
scanf("%s", tuser.key);
j = 0;
p = 0;
while (tuser.key[j] != '\0')
{
if ((tuser.key[j] >= 'a'&&tuser.key[j] <= 'z' || tuser.key[j] >= 'A'&&tuser.key[j] <= 'Z'))
{
p = 1;
break;
}
j++;
}
j = 0;
q = 0;
while (tuser.key[j] != '\0')
{
if (tuser.key[j] >= '0'&&tuser.key[j] <= '9')
{
q = 1;
break;
}
j++;
}
if (p == 1 && q == 1)
{
printf("恭喜你,注册成功!\n");
strcpy(Users[users_count].key, tuser.key);
users_count++;
break;
}
else
{
printf("密码要含有数字和字母1\n");
continue;
}
}
}
void deletegoods() //管理员删除商品
{
good tgood;
int tempi = 0, k;
printf("输入您要删除的商品名称:");
scanf("%s", tgood.name);
for (int i = 0; i < goods_count; i++)
{
if (strcmp(tgood.name, goods[i].name) == 0)
{
tempi = i;
printf("*******************您要确定要删除的商品?*****************\n");
printf("名称 价格 \n");
printf("%-20s %-20.1f\n", goods[tempi].name, goods[tempi].price);
printf("**********************************************************\n");
printf("确定删除:1,取消删除:0\n");
printf("请输入您的选择操作:");
scanf("%d", &k);
if (k == 1)
{
strcpy(goods[tempi].name, "*****");
goods[tempi].price = 0;
//数量清零
printf("*******************对应商品已删除*****************\n");
break;
}
if (k == 0)
break;
}
}
}
void alogin()//管理员登录
{
user tuser;
int p = 0; //管理员账号名匹配的标记
int q = 0; //密码匹配的标记
printf("请输入用户名:");
scanf("%s", tuser.name);
printf("请输入密码:");
scanf("%s", tuser.key);
if (strcmp(tuser.name, admin.name) == 0) //管理员账户匹配
{
p = 1;
if (strcmp(tuser.key, admin.key) == 0) //密码匹配
{
q = 1;
}
}
if (p == 1 && q == 1)
{
printf("********************************************\n");
printf(" 登录成功!\n");
printf("********************************************\n");
while (1)
{
aprint2();
int m;
scanf("%d", &m);
if (m == 1)
{
printgoods(); //打印商品列表
}
if (m == 2)
{
addgoods(); //管理员添加商品
}
if (m == 3)
{
modifygoods(); //管理员修改商品信息
}
if (m == 4)
{
deletegoods(); //管理员删除商品
}
if (m == 5) //返回上级菜单
{
break;
}
}
}
else
printf("****************登录失败!******************\n");
}
void addgoods() //管理员添加商品
{
struct good tgood;
float tprice = 0;
printf("输入您要添加的商品名称:");
scanf("%s", tgood.name);
strcpy(goods[goods_count].name, tgood.name);
printf("输入您要添加的商品价格:");
scanf("%f", &tprice);
goods[goods_count].price = tprice;
//输出提示要添加(更新)的商品数量
//输入对应的商品的数量
goods_count++;
}
void modifygoods() //管理员修改商品
{
good tgood;
int tempi = 0, n;
printf("输入您要修改的商品名称:");
scanf("%s", tgood.name);
for (int i = 0; i < goods_count; i++)
{
if (strcmp(tgood.name, goods[i].name) == 0)
{
tempi = i;
break;
}
}
printf("*******************您要修改的商品*****************\n");
printf("名称 价格 \n");
printf("%-20s %-20.1f\n", goods[tempi].name, goods[tempi].price);
printf("**************************************************\n");
while (1)
{
aprint3();
scanf("%d", &n);
if (n == 1)
{
printf("请输入您要修改的商品名称:\n");
scanf("%s", goods[tempi].name);
}
if (n == 2)
{
printf("请输入您要修改的商品价格:\n");
scanf("%f", &goods[tempi].price);
}
if (n == 3)
{
break;
}
}
}
void logout() //退出登录
{
printf("*****************goodbye!*******************\n");
}
void print2() //登录菜单选择
{
printf("********************************************\n");
printf("1:管理员登录\n");
printf("2:用户登录\n");
printf("********************************************\n");
printf("请选择操作:");
}
void uprint2() //显示用户登录后的二级菜单
{
printf("********************************************\n");
printf("1:查看商品\n");
printf("2:添加商品到购物车\n");
printf("3:显示购物车内容\n");
printf("4:从购物车商品删除\n");
printf("5:返回上级菜单\n");
printf("********************************************\n");
printf("请选择操作:");
}
void ulogin()//用户登录
{
user tuser;
int p = 0; //用户名匹配的标记
int q = 0; //密码匹配的标记
printf("请输入用户名:");
scanf("%s", tuser.name);
printf("请输入密码:");
scanf("%s", tuser.key);
for (int i = 0; i < users_count; i++)
{
if (strcmp(tuser.name, Users[i].name) == 0) //用户名匹配
{
p = 1;
if (strcmp(tuser.key, Users[i].key) == 0) //密码匹配
{
q = 1;
break;
}
}
}
if (p == 1 && q == 1)
{
printf("********************************************\n");
printf(" 登录成功!\n");
printf("********************************************\n");
while (1)
{
uprint2();
int m;
scanf("%d", &m);
if (m == 1)
{
printgoods(); //显示商品
}
if (m == 2)
{
addshoppingcart(); //用户添加商品到购物车
}
if (m == 3)
{
printshoppingcart(); //用户查看购物车商品
}
if (m == 4)
{
deleteshoppingcart(); //用户删除购物车商品
}
if (m == 5) //返回上级菜单
{
break;
}
}
}
else
printf("****************登录失败!******************\n");
}
#include<stdio.h>
#include<string.h>
#include"goods.h"
extern struct user Users[80];
extern struct good goods[100];
extern int users_count; //用户个数
extern int goods_count; //商品种类个数
#define USER_FILE "d:\\users000.dat"
#define GOODS_FILE "d:\\goods000.dat"
int main()
{
// 加载文件,读取用户信息、商品信息、购物车信息
FILE * fp = NULL;
fp = fopen(USER_FILE, "rb"); //二进制读方式打开用户信息表文件
if (fp != NULL)
{
// 加载用户信息
while (1)
{
if (fread(&Users[users_count], sizeof(struct user), 1, fp) <= 0) //按结构体大小读取到用户结构体数组中
break;
users_count++; //读取一个结构体大小成功,用户个数加1
}
fclose(fp); //关闭文件
}
fp = fopen(GOODS_FILE, "rb"); //二进制读方式打开商品信息表文件
if (fp != NULL)
{
// 加载商品信息
while (1)
{
if (fread(&goods[goods_count], sizeof(struct good), 1, fp) <= 0)//按结构体大小读取到商品结构体数组中
break;
goods_count++; //读取一个商品结构体大小成功,商品种类个数加1
}
fclose(fp); //关闭文件
}
int n;
while (1)
{
print1();
scanf("%d", &n); //选择操作选项
if (n == 1)
{
regedit(); //注册
}
if (n == 2)
{
print2();
scanf("%d", &n);
if (n == 1)
alogin(); //管理员登录
if (n == 2)
ulogin(); //用户登录
}
if (n == 3)
{
logout(); //退出登录
}
if (n == 4)
{
break; //关闭系统
}
}
// 打开文件,保存用户信息、商品信息、购物车信息
fp = fopen(USER_FILE, "wb"); //二进制文件写的方式打开用户信息文件
if (fp != NULL)
{
int i;
for (i = 0; i < users_count; i++)
{
fwrite(&Users[i], sizeof(struct user), 1, fp); //按用户结构体大小每次写入一个用户信息到文件
}
fclose(fp); //关闭文件
}
fp = fopen(GOODS_FILE, "wb"); //二进制文件写的方式打开商品信息文件
if (fp != NULL)
{
int i;
for (i = 0; i < goods_count; i++)
{
fwrite(&goods[i], sizeof(struct good), 1, fp); //按商品结构体大小每次写入一个商品信息到商品文件
}
fclose(fp); //关闭文件
}
return 0;
}