小型超市管理系统.c

来源:互联网 发布:红米清空数据失败 编辑:程序博客网 时间:2024/06/10 18:49
/*********************************************************************************************


文件名称:小型超市管理系统.c


程序名称:VS2013


作者相关:LonelyTraveler


最后修改:2016.07.28


************************************************************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <conio.h>


#define password 123456 //管理员密码(隐藏)
#define close_passward 000000 //用户关闭程序密码(隐藏)
#define ShoppingCartMax 20 //购物车最大容量
#define goods_path goods_records.dat //商品文件存放
#define sale_path Sale_records.dat //销售文件存放
#pragma warning(disable: 4996) //屏蔽安全警告




//商品信息
struct Good
{
int id; //商品编号
char name[20]; //商品名称
char kind; //商品类型
int num; //商品数量
float price1; //进货价格
float price2; //出售价格
float date; //生产日期
int baozhiqi; //保质期
struct Good *next;
}*GOOD;


//销售信息
struct Sale
{
int id; //商品编号
char name[20]; //商品名称
float price1; //进货价格
float price2; //出售价格
int num;//购买数量
char buyer[20];//顾客名字
char time[128];//购买时间
struct Sale *next;
}*SALE;




void Initialization(); //初始化界面


void UserWindows(); //用户主程序
void UserMenu(); //用户主菜单
void UserScan(); //用户浏览
void UserCart(); //购物车
void GoodsShow(struct Good *good); //商品信息显示
void UserPay(struct Sale *shopping_cart, struct Good *address[]);//结账


void AdministratorWindows(); //管理员主程序
void AdministratorMenu(); //管理员主菜单
void GoodsAdd(); //新购商品入库
void GoodsDetail(); //商品信息详情
void GoodsChange(); //商品信息更改
void GoodsDelete(); //商品信息删除
void ChangeOperation(struct Good *exist); //更改操作
void DeleteOperation(struct Good *good); //删除操作
void GoodsBrowse(); //商品信息浏览
void AllBrowse(); //浏览所有商品
void BrowseByType(); //按类型浏览商品
void SaleManage(); //商品销售管理
void SaveAndExit(); //保存并退出


int GoodsSaveToFile(); //保存商品信息
int SaleSaveToFile(); //保存销售信息
int GoodsReadFromFile(); //读取商品记录
int SaleReadFromFile(); //读取销售记录

struct Good *GoodsFind(); //商品信息查找选择
struct Good *GoodsIdFind(int goods_number); //根据ID查找
struct Good *GoodsNameFind(char goods_name[20]); //根据名称查找


int main(void)
{
Initialization();


while (1)//程序运行
{
UserWindows();//用户员主界面
AdministratorWindows();//管理员主界面
}
return 0;
}


//初始化界面
void Initialization()
{
printf("\n\n");
printf("\t*******************************************************************\n");
printf("\t|                                                                    |\n");
printf("\t|                                                                    |\n");
printf("\t|                          欢迎使用                                  |\n");
printf("\t|                                                                    |\n");
printf("\t|   |\n");
printf("\t|                      小型超市管理系统                              |\n");
printf("\t|  |\n");

printf("\t|                                                                |\n");

printf("\t|                        祝您使用愉快                                    |\n");
printf("\t|                                                                |\n");
printf("\t|                                                                  |\n");
printf("\t|                                                                  |\n");
printf("\t*******************************************************************\n");


SALE = (struct Sale *)malloc(sizeof(struct Sale));
GOOD = (struct Good *)malloc(sizeof(struct Good));
SALE->next = NULL;
GOOD->next = NULL;
SaleReadFromFile();//读取销售记录
GoodsReadFromFile();//读取商品记录


_sleep(2000); //延迟
}


//用户主程序
void UserWindows()
{
int choose = 0;
while (1)
{
UserMenu(); //用户主菜单


scanf("%d", &choose);
if (choose == 1)
{
UserScan();
}


else if (choose == 2)
{
UserCart(); //开启购物车之旅
}


else if (choose ==close_passward)
{
SaveAndExit();
}
else if (choose == password)
break;
}
}


//用户主菜单
void UserMenu()
{
system("cls");
printf("\n\n");
printf("\t*************************************************************\n");
printf("\t|                                                          |\n");
printf("\t|                                                            |\n");
printf("\t|                 相信美好的事情即将发生                      |\n");
printf("\t|                                                        |\n");
printf("\t|                                                        |\n");
printf("\t|                       请选择操作                              |\n");
printf("\t|                                                          |\n");
printf("\t|             【1】浏览商品   【2】购买商品                |\n");
printf("\t|                                                            |\n");
printf("\t|                                                            |\n");
printf("\t*************************************************************\n");
}


//用户浏览
void UserScan()
{
if (GOOD->next == NULL)
{
printf("\n\n\t抱歉,商店商品已全售完,店主正在忙碌进货中...");
_sleep(2000);
}
else
{
system("cls");
struct Good *goods_pointer = GOOD;
while (goods_pointer->next != NULL)
{
goods_pointer = goods_pointer->next;
GoodsShow(goods_pointer);
}


printf("\n\t是否购买商品?(按【Y】确认)");
char flag;
fflush(stdin);
flag = getch();
if (flag == 'Y' || flag == 'y')
{
UserCart();//购物车
}
}
}


//商品信息显示
void GoodsShow(struct Good *goods)
{
printf("\n\n\t***************商品信息******************");
printf("\n\t商品编号...%30d\n", goods->id);
printf("\n\t-----------------------------------------");
printf("\n\t商品名称...%30s\n", goods->name);
printf("\n\t-----------------------------------------");
printf("\n\t商品数量...%30d\n", goods->num);
printf("\n\t-----------------------------------------");
printf("\n\t出售价格...%30.2f\n", goods->price2);
printf("\n\t-----------------------------------------");
printf("\n\t生产日期...%30.2f\n", goods->date);
printf("\n\t-----------------------------------------");
printf("\n\t保质期...%32d\n", goods->baozhiqi);
printf("\n\t-----------------------------------------\n\n");
}


//购物车
void UserCart()
{
if (GOOD->next == NULL)
{
printf("\n\n\t抱歉,商店商品已全售完,店主正在忙碌进货中...");
_sleep(2000);
return ;
}


system("cls");
printf("\n\n\n\t即将进入选购界面,请稍等...");
_sleep(2000);


struct Sale *shopping_cart;//购物车
shopping_cart = (struct Sale *)malloc(sizeof(struct Sale));
shopping_cart->next = NULL;//初始化购物车列表




int i = 0;
struct Good *goods, *address[ShoppingCartMax];//存放商品地址;
for ( ; i < ShoppingCartMax; i++)
{
goods = GoodsFind();//查找商品
if (goods == NULL)
{
printf("\n\n\n\t\t抱歉,没有您需要的商品!");
_sleep(2000);
continue;
}
else if (goods == GOOD)//在选择商品时选择【结束操作】
{
system("cls");
if (shopping_cart->next == NULL)
{
printf("\n\n\n\n\t\t由于您购物车空空的,将结束本次购物!");
printf("\n\n\n\t购物系统正在关闭,请稍等...");
free(shopping_cart);//销毁购物车
_sleep(4000);
break;
}
else
{
printf("\n\n\n\t您取消了本次选购,是否前往支付?");
printf("\n\n\t【Y】前往支付 【任意键】放弃购物");
char choose1;
choose1 = getch();
if (choose1 == 'Y' || choose1 == 'y')
{
free(goods);
UserPay(shopping_cart, address);//结账
}
else
{
printf("\n\n\n\n\t\t购物系统正在关闭,请稍等...");
free(shopping_cart);//销毁购物车
_sleep(2000);
break;
}
}
}


system("cls");
GoodsShow(goods);//显示商品信息


struct Sale *cart_pointer = shopping_cart;
int judge = 123;//判断是否重复购买,初始化赋随机值
while (cart_pointer->next != NULL)//查找购物车是否已存在该商品
{
cart_pointer = cart_pointer->next;

judge = strcmp(cart_pointer->name, goods->name);
if (judge == 0)
{
printf("\t【购物车已有%d件该商品!,若要继续购买,将自动为您合并!】\n", cart_pointer->num);
break;
}
}


struct Sale *sale;//可移动指针对销售进行操作
sale = (struct Sale *)malloc(sizeof(struct Sale));
printf("\n\n请输入要购买的数量:(输入【0】重新选择)\t");
scanf("%d", &sale->num);
if (sale->num == 0)  continue;


if (judge == 0)//准备合并相同商品
{
sale->num = (cart_pointer->num) + (sale->num);
}


if ((sale->num) > (goods->num))//判断是否超过最大商品数量
{
printf("\n\n\n\t【友情提示:很抱歉,该商品由于销售太火爆,目前只剩下%d件了】", goods->num);
printf("\n\n\t\t【A】继续,购买%d件  【B】重新选择  【任意键】结束购物\n", goods->num);
char choose;
fflush(stdin);
choose = getch();


if (choose == 'A' || choose == 'a')
{
sale->num = goods->num;
printf("\n\n\n\t【谢谢您的理解和支持!】");
}
else if (choose == 'B' || choose == 'b')   continue;
else break;
}


if (judge == 0)//购物车存在商品时,合并商品
{
cart_pointer->num = sale->num;
printf("\n\n\t【由于购物车存在该商品,已自动为您合并!】\n\n\n");
}
else //购物车不存在商品时,添加到购物车
{
address[i] = goods;// 记录商品地址
strcpy(sale->name, goods->name);// 记录商品名称
sale->id = goods->id;
sale->price1 = goods->price1;
sale->price2 = goods->price2;
sale->next = NULL;


while (cart_pointer->next != NULL)
{
cart_pointer = cart_pointer->next;
}
cart_pointer->next = sale;//添加到购物列车中
printf("\n\n\t已成功添加商品到购物车!");
}


if (i == (ShoppingCartMax-1))//购物车满时操作
{
system("cls");
printf("\n\n\n\n\t\t购物车已达到最大容量,将自动为您跳往支付界面!");
_sleep(2000);
UserPay(shopping_cart, address);//结账
break;
}


printf("\n\n\n\t\t【1】:前往支付 【2】:继续浏览 【3】:放弃购物\n");
char choice;
choice = getch();
if (choice == '1')
{
UserPay(shopping_cart, address);//结账
break;
}
else if (choice == '3')
{
free(shopping_cart);
system("cls");
printf("\n\n\n\n\t\t正在退出购物系统,请稍等...");
_sleep(2000);
break;
}
}
}


//结账
void UserPay(struct Sale *shopping_cart, struct Good *address[])
{
system("cls");
float money = 0;
struct Sale *sale_pointer = shopping_cart;
printf("\n\n安全交易系统已打开!");
printf("\n\n订单开始处理...\n...\n\n订单审核通过...\n\n正在生成订单...\n\n订单生成完成!");


printf("\n\n\n\t*************************订单详情**************************");
printf("\n\n\t商品名称\t商品单价\t购买数量\t消费总价\n");
while (sale_pointer->next != NULL)
{
sale_pointer = sale_pointer->next;
printf("\n\t%s\t\t%.2f\t\t%d\t\t%.2f\t\t",sale_pointer->name,
sale_pointer->price2, sale_pointer->num, (sale_pointer->price2)*(sale_pointer->num));

money = money + (sale_pointer->price2)*(sale_pointer->num);
}
printf("\n\n\t***********************************************************");
printf("\n\t总共消费金额为:%.2f", money);


printf("\n\n\n\t确定完成交易?\t按【Y】确认支付 【任意键】取消支付\n\t");
fflush(stdin);
char flag;
flag = getch();
if (flag == 'Y' || flag == 'y')
{
char name[20];
printf("\n\n\t请输入您的名字:");
scanf("%s", name);
printf("\n\n系统正在完成交易,请稍等...");

int i;
struct Good *goods_address;//临时存放商品地址
sale_pointer = shopping_cart;
for (i = 0; sale_pointer->next != NULL; i++)
{
sale_pointer = sale_pointer->next;
strcpy(sale_pointer->buyer, name);//记录购买者名字
_tzset();
_strdate(sale_pointer->time);//记录购买时间

goods_address = address[i];
goods_address->num = (goods_address->num) - (sale_pointer->num);//更改商品数量
if (goods_address->num == 0)
{
DeleteOperation(goods_address);//清除数量为0的商品记录
}
}
//增加商品销售记录
sale_pointer = SALE;
while (sale_pointer->next != NULL)//定位到销售列表末尾
{
sale_pointer = sale_pointer->next;
}
sale_pointer->next = shopping_cart->next;
printf("\n\n\n\t交易完成,谢谢惠顾! O(∩_∩)O~\n\n");
printf("\n\n\t交易系统正在关闭,请稍后...");
_sleep(5000);
}
}


//管理员主程序
void AdministratorWindows()
{
int flag = 1; //判断是否进入用户界面的标志
char choose;
while (flag)
{
AdministratorMenu();
choose = getch();
system("cls");
switch (choose)
{
case '1':
{
GoodsAdd(); //新购商品入库
break;
}


case '2':
{
GoodsDetail();//商品信息详情
break;
}


case '3':
{
GoodsChange();//商品信息更改
break;
}


case '4':
{
GoodsDelete();//商品信息删除
break;
}


case '5':
{
GoodsBrowse();//商品信息浏览
break;
}


case '6':
{
SaleManage(); //商品销售管理
break;
}


case '7':
{
system("cls");
flag = 0; //flag 设为0,准备进入用户界面
printf("\n\n\n\t即将进入用户界面,请稍等...");
_sleep(2000);
break; //进入用户界面
}


case '0':
{
SaveAndExit();//保存并退出
exit(0);
}
}
fflush(stdin);
}
}


//管理员主菜单
void AdministratorMenu()
{
system("cls");
printf("\n\t|------------------------------------------------------------------------------|");
printf("\n\t|                                                                      |");
printf("\n\t|                      【小型超市管理系统】                            |");
printf("\n\t|                                                                    |");
printf("\n\t|------------------------------------------------------------------------------|");
printf("\n\t|                                                                  |");
printf("\n\t|     【1】∽∽∽∽∽∽∽【           新购商品入库         】     |");
printf("\n\t|                                                                  |");
printf("\n\t|     【2】∽∽∽∽∽∽∽【           商品信息详情         】     |");
printf("\n\t|                                                                      |");
printf("\n\t|     【3】∽∽∽∽∽∽∽【           商品信息更改         】     |");
printf("\n\t|                                                                  |");
printf("\n\t|     【4】∽∽∽∽∽∽∽【           商品信息删除         】     |");
printf("\n\t|                                                                    |");
printf("\n\t|     【5】∽∽∽∽∽∽∽【           商品信息浏览         】     |");
printf("\n\t|                                                                    |");
printf("\n\t|     【6】∽∽∽∽∽∽∽【           商品销售管理         】     |");
printf("\n\t|                                                                    |");
printf("\n\t|     【7】∽∽∽∽∽∽∽【           进入用户界面         】     |");
printf("\n\t|                                                                  |");
printf("\n\t|     【0】∽∽∽∽∽∽∽【           保存退出程序         】     |");
printf("\n\t|                                                                      |");
printf("\n\t|------------------------------------------------------------------------------|");
printf("\n\n\t\t\t\t请输入您要选择的菜单....");
}


//新购商品入库
void GoodsAdd()
{
while (1)
{
system("cls");
printf("\n\n\t\t r:日用品 w:文化用品 s:食品 d:电子产品");
printf("\n\n请输入商品信息:");
struct Good *goods,*exist;//指针 *exist 判断是否已存在该商品
goods = (struct Good *)malloc(sizeof(struct Good));


printf("\n\n商品编号:");
scanf("%d", &goods->id);
exist = GoodsIdFind(goods->id);//检查编号是否重复
if (exist != NULL)
{
printf("\n\n\t该商品信息已存在!请选择操作:\n\t【1】:重新输入\t【2】:前往编辑");
char choose1;
choose1 = getch();
if (choose1 == '2')
{
ChangeOperation(exist);//更改操作
}
free(goods);
continue;
}


printf("商品名称:");
scanf("%s", &goods->name);
exist = GoodsNameFind(goods->name);//检查名称是否重复
if (exist != NULL)
{
printf("\n\n\t该商品信息已存在!请选择操作:\n\t【1】重新输入\t【2】前往编辑");
char choose2;
choose2 = getch();
if (choose2 == '2')
{
ChangeOperation(exist);//更改操作
}
free(goods);
continue;
}


fflush(stdin);
printf("商品类型:");
scanf("%c", &goods->kind);
goods->kind = tolower(goods->kind);//将商品类型转换为小写


printf("商品数量:");
scanf("%d", &goods->num);
printf("进货价格:");
scanf("%f", &goods->price1);
printf("出售价格:");
scanf("%f", &goods->price2);
printf("生产日期:");
scanf("%f", &goods->date);
printf("保质期:");
scanf("%d", &goods->baozhiqi);


system("cls");
printf("\n\n\t************************************************************************");
printf("\n\n\t编号\t名称\t类型\t数量\t进价\t售价\t生产日期\t保质期 \n\n");
printf("\t%d\t%s\t%c\t%d\t%.2f\t%.2f\t  %.2f \t\t  %d\n",
goods->id, goods->name, goods->kind, goods->num, goods->price1, goods->price2, goods->date, goods->baozhiqi);
printf("\n\n\t************************************************************************");
printf("\n\n\t确定录入此商品信息?\t(按【Y】确认)\n\n");


struct Good *goods_pointer = GOOD;
char check1;
fflush(stdin);
check1 = getch();
if (check1 == 'Y' || check1 == 'y')
{
while (goods_pointer->next != NULL)
{
goods_pointer = goods_pointer->next;//定位到商品列表末尾
}


goods->next = goods_pointer->next;
goods_pointer->next = goods;
}


printf("\n\n\t是否继续录入商品信息?\t(按【Y】确认)");
char check2;
check2 = getch();
if (check2 != 'Y' || check2 != 'y')
{
system("cls");
printf("\n\n\n\n\t正在结束商品信息录入,即将返回主程序...");
_sleep(2000);
break;
}
}
}


//商品信息详情
void GoodsDetail()
{
struct Good *goods;
goods = GoodsFind();//查找是存在该商品

if (goods == NULL)
{
printf("\n\n\t【抱歉,不存在该商品!】");
_sleep(2000);
}
else if (goods == GOOD)
{
printf("\n\n\n\t\t正在返回程序,请稍等...");
_sleep(2000);
}
else
{
system("cls");
printf("\n\n\t***********************************************************************");
printf("\n\n\t 编号\t 名称\t 类型\t 数量\t 进价\t 售价\t 生产日期\t 保质期 \n\n");
printf("\t %d\t %s\t %c\t %d\t %.2f\t %.2f\t %.2f\t\t %d \n",
goods->id, goods->name, goods->kind, goods->num, goods->price1, goods->price2, goods->date, goods->baozhiqi);
printf("\n\n\t***********************************************************************");
printf("\n\n\t按任意键继续...");
getch();
}
}


//商品信息查找选择
struct Good *GoodsFind()
{
if (GOOD->next == NULL)
{
printf("\n\n\t\t抱歉,目前商店没有商品信息!");
_sleep(2000);
return GOOD;
}
while (1)
{
system("cls");
printf("\n\n\n\n");
printf("\t|----------------------------------------------------------------------|\n");
printf("\t|                                                          |\n");
printf("\t|                  【A】根据商品编号id选择               |\n");
printf("\t|                                                          |\n");
printf("\t|                  【B】根据商品名称name选择                  |\n");
printf("\t|                                                           |\n");
printf("\t|                  【C】结束操作                           |\n");
printf("\t|                                                          |\n");
printf("\t|----------------------------------------------------------------------|\n");
printf("\t|                                                          |\n");
printf("\t|                    ∞请选择操作∞                     |\n");
printf("\t|                                                         |\n");
printf("\t|----------------------------------------------------------------------|\n");


struct Good *goods;
char choose;
fflush(stdin);
choose = getch();
if (choose == 'A' || choose == 'a')
{
printf("\n\t请输入商品编号:");
int goods_number;
scanf("%d", &goods_number);
goods = GoodsIdFind(goods_number);
return goods;
}


else if (choose == 'B' || choose == 'b')
{
printf("\n\t请输入商品名称:");
fflush(stdin);
char goods_name[20];//待输入名称
gets(goods_name);
goods = GoodsNameFind(goods_name);
return goods;
}


else if (choose == 'C' || choose == 'c') return GOOD;
}
}


//根据ID查找
struct Good *GoodsIdFind(int goods_number)
{
struct Good *goods=GOOD;
while (goods->next != NULL)
{
goods = goods->next;
if (goods->id == goods_number)
{
return goods;
}
}
return NULL;
}


//根据名称查找
struct Good *GoodsNameFind(char goods_name[])
{
struct Good *goods=GOOD;
while (goods->next != NULL)
{
goods = goods->next;
if (strcmp(goods->name, goods_name) == 0)
{
return goods;
}
}
return NULL;
}


//商品信息更改
void GoodsChange()
{
struct Good *goods;
goods = GoodsFind();//查找是存在该商品


if (goods == NULL)
{
printf("\n\n\t【不存在该商品!】");
_sleep(2000);
}
else if (goods == GOOD)
{
printf("\n\n\n\t\t正在返回程序,请稍等...");
_sleep(2000);
}
else
{
ChangeOperation(goods);//更改操作
}
}


//更改操作
void ChangeOperation(struct Good *goods)
{
int end = 0;
char choose;
while (1)
{
system("cls");
printf("\n\n\t***************************************************************************");
printf("\n\n\t编号\t 名称  \t 类型\t 数量\t 进价\t 售价\t 生产日期\t保质期 \n\n");
printf("\t %d\t %s\t  %c\t %d\t %.2f\t %.2f\t %.2f\t\t %d \n", goods->id, goods->name,
goods->kind, goods->num, goods->price1, goods->price2, goods->date, goods->baozhiqi);
printf("\n\n\t***************************************************************************");
printf("\n\n\t\t【r】:日用品 【w】:文化用品 【s】:食品 【d】:电子产品\n");
printf("\n\t【1】商品编号\t【2】商品名称\t【3】商品类型\t【4】商品数量");
printf("\n\t【5】进货价格\t【6】出售价格\t【7】生产日期\t【8】保质期\n\t【0】保存退出\n");
printf("\n\t请选择序号进行操作:\n");


choose = getch();
switch (choose)
{
case '1':
{
printf("\n\t请输入商品编号:");
scanf("%d", &goods->id);
break;
}


case '2':
{
printf("\n\t请输入商品名称:");
scanf("%s", &goods->name);
break;
}


case '3':
{
printf("\n\t请输入商品类型:");
fflush(stdin);
scanf("%c", &goods->kind);
break;
}


case '4':
{
printf("\n\t请输入商品数量:");
scanf("%d", &goods->num);
break;
}


case '5':
{
printf("\n\t请输入进货价格:");
scanf("%f", &goods->price1);
break;


}
case '6':
{
printf("\n\t请输入出售价格:");
scanf("%f", &goods->price2);
break;
}


case '7':
{
printf("\n\t请输入生产日期:");
scanf("%f", &goods->date);
break;
}


case '8':
{
printf("\n\t请输入保质期:");
scanf("%d", &goods->baozhiqi);
break;
}


case '0':
{
printf("\n\n\t正在保存,请稍等...");
_sleep(2000);
end = 1;
break;
}


}
if (end == 1)  break;
}
}


//商品信息删除
void GoodsDelete()
{
struct Good *goods;
goods = GoodsFind();//查找是存在该商品
if (goods == NULL)
{
printf("\n\n\t【抱歉,不存在该商品!】");
_sleep(2000);
}
else if (goods == GOOD)
{
printf("\n\n\n\t\t正在返回程序,请稍等...");
_sleep(2000);
}
else
{
printf("\n\n\t************************************************************************");
printf("\n\n\t 编号\t 名称\t 类型\t 数量\t 进价\t 售价\t 生产日期\t 保质期 \n\n");
printf("\t %d\t %s\t %c\t %d\t %.2f\t %.2f\t %.2f\t\t %d \n",
goods->id, goods->name, goods->kind, goods->num, goods->price1, goods->price2, goods->date, goods->baozhiqi);
printf("\n\n\t************************************************************************");


printf("\n警告:是否确认删除?!(输入【Y】确认)");
char choose;
fflush(stdin);
choose = getch();
if (choose == 'Y' || choose == 'y')
{
DeleteOperation(goods);//删除操作
}
}
}


//删除操作
void DeleteOperation(struct Good *goods)
{
struct Good *goods_pointer = GOOD;
while (goods_pointer->next != goods)
{
goods_pointer = goods_pointer->next;
}
goods_pointer->next = goods->next;
free(goods);
printf("\n\n\t操作成功!");
_sleep(300);
}


//商品信息浏览
void GoodsBrowse()
{
system("cls");
if (GOOD->next == NULL)
{
printf("\n\n\t\t抱歉,目前商店没有商品信息!");
_sleep(2000);
}
else
{
printf("\n\n\n\t\t请选择浏览方式:\n\n\t【1】全部浏览\t【2】按类型浏览\n\n");
char choose;
while (1)
{
choose = getch();
if (choose == '1')
{
AllBrowse();
break;
}
else if (choose=='2')
{
BrowseByType();
break;
}
}
printf("\n\n\n\t按任意键继续...");
getch();
}
}


//浏览所有商品
void AllBrowse()
{
system("cls");
struct Good *goods_pointer = GOOD;


printf("\n\n\t*********************************************************************************");
printf("\n\n\t 编号\t 名称\t\t 类型\t 数量\t 进价\t 售价\t 生产日期\t保质期 \n\n");
while (goods_pointer->next != NULL)
{
goods_pointer = goods_pointer->next;
printf("\t %d\t %s\t\t %c\t %d\t %.2f\t %.2f\t %.2f\t\t%d \n", goods_pointer->id,
goods_pointer->name, goods_pointer->kind, goods_pointer->num, goods_pointer->price1,
goods_pointer->price2, goods_pointer->date, goods_pointer->baozhiqi);
}
printf("\n\n\t*********************************************************************************");
}


//按类型浏览商品
void BrowseByType()
{
system("cls");
printf("\n\n\t\t 【r】:日用品 【w】:文化用品 【s】:食品 【d】:电子产品");
printf("\n\n\n请选择要浏览的商品类型:");
char Type;
Type = getch();
Type = tolower(Type);//将商品类型转换为小写


system("cls");
struct Good *goods_pointer = GOOD;
printf("\n\n\t*********************************************************************");
printf("\n\n\t 编号\t 名称\t 类型\t 数量\t 进价\t 售价\t 生产日期\t 保质期 \n");
while (goods_pointer->next != NULL)
{
goods_pointer = goods_pointer->next;
if (goods_pointer->kind == Type)
printf("\n\t %d\t %s\t %c\t %d\t %.2f\t %.2f\t %.2f\t\t %d",
goods_pointer->id, goods_pointer->name, goods_pointer->kind, goods_pointer->num,
goods_pointer->price1, goods_pointer->price2, goods_pointer->date, goods_pointer->baozhiqi);
}
printf("\n\n\t*********************************************************************");
}


//商品销售管理
void SaleManage()
{
system("cls");
printf("\n\n\t\t\t销售情况查看及利润统计");
printf("\n\n\t【r】:日用品 【w】:文化用品 【s】:食品 【d】:电子产品");
printf("\n\n\t***********************************************************");
if (SALE->next == NULL)
{
printf("\n\n目前暂无销售记录!");
_sleep(2000);
}


else
{
printf("\n\n\t编号\t名称\t进价\t售价\t数量\t名字\t时间\n\n");
int number = 0;//商品数量
float profit = 0;//商品利润
struct Sale *sale_pointer = SALE;
while (sale_pointer->next != NULL)
{
sale_pointer = sale_pointer->next;
printf("\t %d\t %s\t %.2f\t %.2f\t %d\t %s\t %s\n",sale_pointer->id, sale_pointer->name,
sale_pointer->price1, sale_pointer->price2, sale_pointer->num, sale_pointer->buyer, sale_pointer->time);


profit = profit + ((sale_pointer->price2) - (sale_pointer->price1))*(sale_pointer->num);
number = number + (sale_pointer->num);
}
printf("\n\t***********************************************************");
printf("\n\n\t共销售商品%d件,纯利润为%.2f", number, profit);


printf("\n\n\n\t按任意键继续...");
getch();
}
}


//保存并退出
void SaveAndExit()
{
SaleSaveToFile();//保存销售信息
GoodsSaveToFile();//保存商品信息
system("cls");
printf("\n\n\n\n\n\n");


printf("\n\t\t#〓§〓〓〓〓〓§〓〓〓〓〓〓§〓〓〓〓〓§〓# ");
printf("\n\t\t↓     ↓      ↓     ↓ ");
printf("\n\t\t   ☆★☆   ☆★☆    ☆★☆   ☆★☆ ");
printf("\n\t\t☆ 谢 ☆ ☆ 谢 ☆  ☆ 使 ☆ ☆ 用 ☆ ");
printf("\n\t\t   ☆★☆   ☆★☆    ☆★☆   ☆★☆ ");
printf("\n\t\t       ↓     ↓      ↓     ↓ ");
printf("\n\t\t      ※     ※      ※     ※ ");
printf("\n");


_sleep(3000);
exit(0);
}


//保存商品信息
int GoodsSaveToFile()
{
FILE *fp;
char buff[512];
if ((fp = fopen("goods_path", "wb")) == NULL)
{
sprintf(buff, "Can not open file:%s to create", "goods_path");
_sleep(2000);
return 0;
}


struct Good *goods_pointer = GOOD;//定位到链表头部
while (goods_pointer->next != NULL)
{
goods_pointer = goods_pointer->next;
fwrite(goods_pointer, sizeof(struct Good), 1, fp);//一个个的保存到文件中去
}
fclose(fp);
return 1;
}


//保存销售信息
int SaleSaveToFile()
{
FILE *fp;
char buff[512];
if ((fp = fopen("sale_path", "wb")) == NULL)
{
sprintf(buff, "Can not open file:%s to create", "sale_path");
_sleep(2000);
return 0;
}
struct Sale *sale_pointer = SALE;//定位到链表头部
while (sale_pointer->next != NULL)
{
sale_pointer = sale_pointer->next;
fwrite(sale_pointer, sizeof(struct Sale), 1, fp);//一个个的保存到文件中去
}
fclose(fp);
return 1;
}


//读取商品记录
int GoodsReadFromFile()
{
FILE *fp;
char buff[512];
if ((fp = fopen("goods_path", "rb")) == NULL)
{
sprintf(buff, "Can not open file:%s to read", "goods_path");
return 1;
}


int number;
fseek(fp, 0, 2);//定位到文件末尾
number = ftell(fp) / sizeof(struct Good);//求出总结点数
fseek(fp, 0, 0);//定位到文件的开始处

int i;
struct Good *goods;
struct Good *goods_pointer = GOOD;
for (i = 0; i < number; i++)
{
goods = (struct Good *)malloc(sizeof(struct Good));
fread(goods, sizeof(struct Good), 1, fp);
goods->next = NULL;


while (goods_pointer->next != NULL)//定位到商品列表末尾
{
goods_pointer = goods_pointer->next;
}
goods_pointer->next = goods;//插入到链表当中
}
fclose(fp);//关闭文件
return 0;
}


//读取销售记录
int SaleReadFromFile()
{
FILE *fp;
char buff[512];
if ((fp = fopen("sale_path", "rb")) == NULL)
{
sprintf(buff, "Can not open file:%s to read", "sale_path");
return 1;
}


int number;
fseek(fp, 0, 2);//定位到文件末尾
number = ftell(fp) / sizeof(struct Sale);//求出总结点数
fseek(fp, 0, 0);//定位到文件的开始处

int i;
struct Sale *sale;
struct Sale *sale_pointer = SALE;
for (i = 0; i < number; i++)
{
sale = (struct Sale *)malloc(sizeof(struct Sale));
fread(sale, sizeof(struct Sale), 1, fp);
sale->next = NULL;


while (sale_pointer->next != NULL)//定位到销售列表末尾
{
sale_pointer = sale_pointer->next;
}
sale_pointer->next = sale;//插入到链表当中
}
fclose(fp); //关闭文件
return 0;
}







1 0
原创粉丝点击