超市管理系统

来源:互联网 发布:自动化学报 软件学报 编辑:程序博客网 时间:2024/06/11 03:35

自己的课设


#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 //购物车最大容量




//商品信息
struct Good
{
int id; //商品编号
char name[20]; //商品名称
char kind; //商品类型
int num; //商品数量
float price1; //进货价格
float price2; //出售价格
char date[20]; //生产日期
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 Goodsort();//商品排序 
void sort_num1();//编号升序排序 
void sort_num2();//编号降序排序
void sort_in1();//进价升序排序 
void sort_in2();//进价降序排序
void sort_out1();//价格升序排序
void sort_out2();//价格降序排序
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;
else
{
printf("输入错误,请重新输入!!!\n");
system("pause");
system("cls");
}
}
}




//用户主菜单
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");
sort_num1();
}




//用户浏览
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生产日期...%30s\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;
struct Good *goods, *address[ShoppingCartMax];
//存放商品地址;
for (i = 0;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':
{
Goodsort();//商品排序 
break;




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


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




case '8':
{
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|     【8】∽∽∽∽∽∽∽【           进入用户界面         】                  |");
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("%s", 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  %s \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();
check2 = tolower(check2);
if (check2 != 'y')
{
system("cls");
printf("\n\n\n\n\t正在结束商品信息录入,即将返回主程序...");
Sleep(2000);
break;
}

}
}


void Goodsort()//商品排序 
{
if (GOOD->next == NULL)
{
printf("\n\n\t\t抱歉,目前商店没有商品信息!");
Sleep(2000);
return;
}
else
{
char c;


do{ 
struct Good *i= GOOD;; 
struct Good *goods_pointer = GOOD;
fflush(stdin);
printf("\t---------------------------------------------\n");
printf("\t|             超市管理系统                   |\n");
printf("\t---------------------------------------------\n");
printf("\t|        请选择排序方式:                |\n");
printf("\t|            1.编号升序排序                  |\n");
printf("\t|            2.编号降序排序                  |\n");
printf("\t|            3.进价升序排序                  |\n");
printf("\t|            4.进价降序排序                  |\n");
printf("\t|            5.价格升序排序                  |\n");
printf("\t|            6.价格降序排序                  |\n");
printf("\t|            0.返回                          |\n");
printf("\t---------------------------------------------\n");
printf("请选择:"); 
c=getchar();
switch(c-'0') 
{
case 1:
sort_num1();//按照编号升序排序 
printf("\n\n\t***********************************************************************");
printf("\n\n\t 编号\t 名称\t 类型\t 数量\t 进价\t 售价\t 生产日期\t 保质期 \n\n");
for(i=GOOD->next;i!=NULL;i=i->next)
{
printf("\t %d\t %s\t %c\t %d\t %.2f\t %.2f\t %s\t %d \n",
i->id, i->name, i->kind, i->num, i->price1, i->price2, i->date, i->baozhiqi);
}
printf("\n\n\t***********************************************************************");
break;
case 2:
sort_num2();//按照编号降序排序 
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 %s\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***********************************************************************");
break;
case 3:
sort_in1();//进价升序排序 
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 %s\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);
}
break;
case 4:
sort_in2();//进价降序排序
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 %s\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);
}
break;
case 5:
sort_out1();//价格升序排序
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 %s\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);
}
break;
case 6:
sort_out2();//价格降序排序
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 %s\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);
}
case 0:
break;
default:
printf("输入错误!请重试!!!\n");
fflush(stdin);
}
system("pause");
system("cls");
}while((c-'0')!=0);
}



void sort_num1()//编号升序排序 
{
struct Good *p,*Temp,*Pre,*ListTemp;//Pre前驱   p后继
ListTemp=GOOD;
while(ListTemp!=NULL)  //遍历链表
{
Pre=GOOD;
p=GOOD->next;
Temp=GOOD;
while(p->next!=NULL)  //过程复杂,需要画图说明,在此不方便说明
{
if(Pre->next->id>p->next->id)
{
Temp=p->next;
Pre->next=p->next;
p->next=p->next->next;
Pre->next->next=p;
p=Temp;
}
else 
{
Pre=Pre->next;
p=p->next;
}
}
ListTemp=ListTemp->next;
}
}


void sort_num2()//编号降序排序
{
struct Good *p,*Temp,*Pre,*ListTemp;//Pre前驱   p后继
ListTemp=GOOD;
while(ListTemp!=NULL)  //遍历链表
{
Pre=GOOD;
p=GOOD->next;
Temp=GOOD;
while(p->next!=NULL)  //过程复杂,需要画图说明,在此不方便说明
{
if(Pre->next->id<p->next->id)
{
Temp=p->next;
Pre->next=p->next;
p->next=p->next->next;
Pre->next->next=p;
p=Temp;
}
else 
{
Pre=Pre->next;
p=p->next;
}
}
ListTemp=ListTemp->next;

}


void sort_in1()//进价升序排序 
{
struct Good *p,*Temp,*Pre,*ListTemp;//Pre前驱   p后继
ListTemp=GOOD;
while(ListTemp!=NULL)  //遍历链表
{
Pre=GOOD;
p=GOOD->next;
Temp=GOOD;
while(p->next!=NULL)  //过程复杂,需要画图说明,在此不方便说明
{
if(Pre->next->price1>p->next->price1)
{
Temp=p->next;
Pre->next=p->next;
p->next=p->next->next;
Pre->next->next=p;
p=Temp;
}
else 
{
Pre=Pre->next;
p=p->next;
}
}
ListTemp=ListTemp->next;

}


void sort_in2()//进价降序排序
{
struct Good *p,*Temp,*Pre,*ListTemp;//Pre前驱   p后继
ListTemp=GOOD;
while(ListTemp!=NULL)  //遍历链表
{
Pre=GOOD;
p=GOOD->next;
Temp=GOOD;
while(p->next!=NULL)  //过程复杂,需要画图说明,在此不方便说明
{
if(Pre->next->price1<p->next->price1)
{
Temp=p->next;
Pre->next=p->next;
p->next=p->next->next;
Pre->next->next=p;
p=Temp;
}
else 
{
Pre=Pre->next;
p=p->next;
}
}
ListTemp=ListTemp->next;
}
}


void sort_out1()//价格升序排序
{
struct Good *p,*Temp,*Pre,*ListTemp;//Pre前驱   p后继
ListTemp=GOOD;
while(ListTemp!=NULL)  //遍历链表
{
Pre=GOOD;
p=GOOD->next;
Temp=GOOD;
while(p->next!=NULL)  //过程复杂,需要画图说明,在此不方便说明
{
if(Pre->next->price2>p->next->price2)
{
Temp=p->next;
Pre->next=p->next;
p->next=p->next->next;
Pre->next->next=p;
p=Temp;
}
else 
{
Pre=Pre->next;
p=p->next;
}
}
ListTemp=ListTemp->next;
}
}


void sort_out2()//价格降序排序
{
struct Good *p,*Temp,*Pre,*ListTemp;//Pre前驱   p后继
ListTemp=GOOD;
while(ListTemp!=NULL)  //遍历链表
{
Pre=GOOD;
p=GOOD->next;
Temp=GOOD;
while(p->next!=NULL)  //过程复杂,需要画图说明,在此不方便说明
{
if(Pre->next->price2<p->next->price2)
{
Temp=p->next;
Pre->next=p->next;
p->next=p->next->next;
Pre->next->next=p;
p=Temp;
}
else 
{
Pre=Pre->next;
p=p->next;
}
}
ListTemp=ListTemp->next;

}


//商品信息详情
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 %s\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 %s\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("%s", 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 %s \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 %s\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 %s\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);
system("pause");
}
}




//保存并退出
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;
if ((fp = fopen("goods.txt", "wb")) == NULL)
{
printf("无法打开文件");
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;;
if ((fp = fopen("sale.txt", "wb")) == NULL)
{
printf("无法打开文件");
Sleep(2000);
return 1;
}
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 0;
}




//读取商品记录
int GoodsReadFromFile()
{
FILE *fp;
if ((fp = fopen("goods.txt", "rb")) == NULL)
{
printf("无法打开文件");
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;
if ((fp = fopen("sale.txt", "rb")) == NULL)
{
printf("无法打开文件");
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;
}

原创粉丝点击