自己的课设
#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;
}