超市管理系统C语言
登录系统
# include <stdio.h> //头文件
# include <string.h> //字符串头文件
# include <stdlib.h>
typedef struct in
{
char id[20];//会员账号
char key[20];//会员密码
int sum;//会员积分
struct in *next;
}member;
struct im//商品信息 以下是私有成员
{
int id;//商品编号
char name[50];//商品名称
int stoct;//商品库存
}goods[1000];
member *registe(member *t);//注册;
void buy();
int main(void)
{
member *head = (member *)malloc(sizeof(member));
strcpy(head->id, "0"), strcpy(head->key, "0");//超市管理员
head->next = NULL;
int i, a, n, boo=0;
while(1)
{
printf("注册会员请按1: \n");
printf("会员直接登入请按2:\n");
printf("推出请按0: \n");
scanf("%d", &a);
if (a == 0)
break;
if (a == 1)
head = registe(head);
else if (a == 2)
boo = login(head);
if (boo)
break;
}
if (a && boo==1)
{
printf ("尊贵的会员,您登入成功!\n");
buy();
}
printf ("已经安全推出\n");
return 0;
}
member *registe(member *t)//注册
{
printf ("现在开始会员注册\n\n");
char id[20], key[20];
member *p, *q, *r;
p = t;
while(p->next) p = p->next;//寻找链表中最后一个节点
while(1)
{
printf ("请输入您注册的账号, 密码:\n");
scanf ("%s %s", id, key);
q = t;
while(q)//判断该账号是否已经被注册
{
if (strcmp (q->id, id)==0)
break;
else q = q->next;
}
if (q == NULL)//账号没有注册
{
r = (member *)malloc(sizeof(member));
r->next = NULL;
p->next = r;
strcpy (r->id, id);
strcpy (r->key, key);
r->sum = 1000;//会员默认的积分为1000;
break;
}
else
printf ("该账号已被注册,请重新输入账号,密码\n");
}
printf ("恭喜您,已经注册成功,现在可以登入了\n\n");
return t;
}
int login (member *t)//登入
{
printf ("现在开始登入");
member *p;
char id[20],key[20];
int a, boo = 0;
while (1)
{
printf ("请输入您的账号,密码: \n");
scanf ("%s", id);
if (strcmp(id, "#")==0)
break;
scanf ("%s", key);
p = t;
while (p)
{
if (strcmp(p->id, id)==0 &&strcmp(p->key, key)==0)
break;
else
p = p->next;
}
if (p == NULL)
{
printf ("对不起,该账号和密码错误,请重新登入\n");
printf ("推出登入请按#\n");
}
else if
(strcmp(id, "0")!=0)
{
boo = 1;
break;
}
}
return boo;
}
void buy()
{
char s[20];
int n;
int i;
while(1)
{
printf ("请输入商品的编号或者名称:\n");
scanf ("%s", s);
if (strcmp(s, "0")==0)
break;
if (s[0]>='1' && s[0]<='9')
{
n = atoi(s);
for (i=0; i<1000; i++)
{
if (goods[i].id == n)
break;
}
if (i > 1000)
{
printf ("商品不存在请重新输入,推出请按0\n");
}
else
{
printf ("您已购买成功。\n");
}
}
else
{
for (i=0; i<1000; i++)
{
if (strcmp(goods[i].name, s)==0) //编译器的提示信息看了没,看了的话应该会发现是函数参数类型不匹配
break;
}
if (i > 1000)
{
printf ("商品不存在,请重新输入,推出请安0\n");
}
else
{
printf ("您购买成功.\n");
}
}
}
}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
主菜单系统
#ifndef MARKET_H
#define MARKET_H
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<windows.h>
#define N 20
struct mar//该结构体为存储货物信息
{
char ID[10];//货号
char brand[20];//品名
double inprice;//进价
double outprice;//售价
int storage;//存储量
};
struct node//该结构体为存储购物车中的信息
{
struct mar buy;//货物信息
int number;//购物的数量
struct node *next; //指向下一个购物节点
};
struct mar goods[N];//结构体数组
struct node *cart;//购物车头结点
int menu();//打印主菜单函数
void WenJianKucun();//文件建立库存信息
void ShouJianKucun();//手动建立库存信息
void DisKucun();//显示库存信息函数
void ShopCart();//对购物车进行操作
int ShopCartMenu();//打印购物车菜单
void XianShi();//显示购物列表
void add();//在购物车里添加商品
void UpdateKu();//更新购物车信息函数
void calculate();//计算所购商品价格并修改保存
#endif
/
int main()
{//主函数
printf("\n\n");
printf("\t*******************************************************************\n");
printf("\t| 欢迎使用 |\n");
printf("\t| 惺惺惜惺惺小超市系统 |\n");
printf("\t| 祝您使用愉快 |\n");
printf("\t*******************************************************************\n");
int find=0;
while(1)
{
switch(menu())
{//menu()函数为输入选项
case 1: WenJianKucun();
find=1;
break;//选项1 文件建立库存信息
case 2: //if(find==0)
ShouJianKucun();
/*else
printf("库存信息已存在\n");*/
break;//选项2 手动建立库存信息
case 3: DisKucun();
break;//选项3 显示库存信息函数
case 4: ShopCart();
break;
//选项4 对购物车进行操作
case 5: calculate();
break;//选项5 计算所购商品价格并修改保存
case 6: system("cls");
printf("感谢您的使用,再见!\n");
Sleep(2000);
exit(0);
}
}
return 0;
}
/
int menu()
{//打印主菜单函数
char s[5];//输入的选项
int n;//选项为整数
printf("\n\n-----------------请选择下面的数字进行操作:-----------------\n");
printf("----------------------------------------------------------------\n");
printf(" 1\. 文件建立库存信息 \n");
printf(" 2\. 手动建立库存信息 \n");
printf(" 3\. 显示所有商品信息 \n");
printf(" 4\. 购物车 \n");
printf(" 5\. 结算 \n");
printf(" 6\. 退出程序 \n");
printf("----------------------------------------------------------------\n");
printf("-------------------请选择对应数字1~6(1,2选其一)---------------\n");
while(1)
{
fflush(stdin);//清空输入流
gets(s);//输入一串字符串
n=atoi(s);//字符串转化为整数
if(n<1||n>6)//判断输入的选项是否正确
printf("输入错误,请重新输入:\n");
else//输入正确,结束循环
break;
}
return n;//返回输入选项
}
/
void WenJianKucun()
{//文件建立库存信息
FILE *fp;//定义文件指针
if((fp=fopen("库存.txt","at"))==NULL)
{//创建文件
printf("创建文件失败\n");
return ;
}
//向文件中写入信息
fprintf(fp,"69011111 飘柔日常护理 12.00 15.00 30\n");
fprintf(fp,"69021111 优酸乳 1.50 2.00 200\n");
fprintf(fp,"69031111 红富士苹果 2.50 3.50 300\n");
fprintf(fp,"69041111 晨光笔芯 0.70 1.00 150\n");
fprintf(fp,"69051111 胡医生面膜 12.00 16.50 100\n");
fclose(fp);//关闭文件
printf("成功导入信息\n");
return ;
}
/
void ShouJianKucun()
{//手动建立库存信息
FILE *fp;//定义文件指针
int i;
int number;
printf("请输入数量!");
scanf("%d",&number);
printf("请依次输入货物信息:\n");
printf("--------------------------------------------\n");
for(i=0;i<number;i++)
{//向文件中写入信息
printf("第%d个商品:\n",i+1);
printf("货号:");
fflush(stdin);//清空输入流
gets(goods[i].ID);//输入货号
printf("品名:");
fflush(stdin);//清空输入流
gets(goods[i].brand);//输入品名
printf("进价: ");
fflush(stdin);//清空输入流
scanf("%lf",&goods[i].inprice);//输入进价
printf("售价:");
fflush(stdin);//清空输入流
scanf("%lf",&goods[i].outprice);//输入售价
printf("数量:");
fflush(stdin);//清空输入流
scanf("%d",&goods[i].storage);//输入数量
printf("\n");
}
if((fp=fopen("库存.txt","at"))==NULL)
{//判断文件是否创建失败
printf("创建文件失败。\n");
return ;
}
//fprintf(fp,"货号 品名 单价 库存量\n");
for(i=0;i<number;i++)
{//把货物信息写进文件
fprintf(fp,"%-11s%-15s%-8.3f%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].inprice,goods[i].outprice,goods[i].storage);
}
//fwrite(goods,sizeof(struct mar),N,cun);二进制文件输出
fclose(fp);//关闭文件
printf("信息导入成功\n");
return ;
}
/
void DisKucun()
{//显示库存信息函数
FILE *fp;//定义文件指针
int i;
if((fp=fopen("库存.txt","r"))==NULL)
{//判断是否打开了文件
printf("打开文件失败\n");
return ;
}
for(i=0;i<N;i++)
{//输出物品信息
//读取文件信息
fscanf(fp,"%s%s%lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].inprice,&goods[i].outprice,&goods[i].storage);
printf("--------------------------------------------\n");
//输出文件信息
printf("货号 品名 单价 库存量\n");
printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage);
}
fclose(fp);//关闭文件
}
/
void ShopCart()
{//对购物车进行操作
while(1)
{
switch(ShopCartMenu())
{//ShopCartMenu()为输入选项
case 1: XianShi();
break;//选项1 显示购物车物品信息
case 2: add();
break;//选项2 添加购物车物品
//case 3: deleteitem();//删除购物车中的某项商品
// break;
case 3: return ;//选项3 退出
}
}
}
/
int ShopCartMenu()
{//打印购物车菜单
int n;//为整数
char s[5];//输入一串字符串
printf("\n\n请选择操作:\n");
printf("--------------------------------------------\n");
printf("1\. 显示当前可以购物列表\n");
printf("2\. 在购物车里添加商品\n");
//printf("3\. 删除购物车商品\n");
printf("3\. 退出\n");
printf("--------------------------------------------\n");
printf("请选择对应数字1~3\n");
while(1)
{
fflush(stdin);//清空输入流
gets(s);//输入一串字符串
n=atoi(s);//字符串转化为整数
if(n<1||n>3)//判断输入的选项是否正确
printf("输入错误,请重新输入: \n");
else//输入正确,结束循环
break;
}
return n;//返回输入选项
}
/
void XianShi()
{//显示购物列表
struct node *p; //定义节点指针
p=cart;//把购物车链表赋给p
FILE *fp1;//定义文件指针
if((fp1=fopen("cart.txt","r"))==NULL)
{//判断是否打开了文件
printf("打开文件失败\n");
//return ;
}
if(p==NULL)
{//购物车为空
printf("目前购物车为空:");
return ;
}
else
{//购物车不为空
while(p!=NULL)
{//把购物车物品不断减一,直到为空
printf("--------------------------------------------\n");
printf("货号 品名 单价 数量\n");
printf("%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number); //输出物品信息
p=p->next;
}
}
fclose(fp1);//关闭文件
return ;
}
/
void add()
{//在购物车里添加商品
FILE *fp,*fp1;//fp表示kucun文件,fp1表示cart文件
struct node *p1,*p,*p2;//定义节点指针
int i,n;//n表示商品数量
char s[20];//表示货号或者品名
char choice1[20],choice2[20];//选择项(y继续,n继续)
do{
printf("输入所需物品的名称或货号:\n");
fflush(stdin);//清空输入流
gets(s);//输入货号或者品名
if((fp=fopen("库存.txt","r"))==NULL)
{//打开文件kucun
printf("打开文件失败\n");
continue;
}
for(i=0;i<N;i++)
{//循环N次
fscanf(fp,"%s%s%*lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].outprice,&goods[i].storage);//从文件中读取货物信息
if((strcmp(goods[i].ID,s)==0||strcmp(goods[i].brand,s)==0)&&goods[i].storage>0)//找输入对应的商品
{
printf("已找到所需商品:\n");
printf("--------------------------------------------\n");
printf("货号 品名 单价 数量\n");
printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage);//输出所需物品信息
printf("请输入所需商品数量: ");
scanf("%d",&n);//商品数量
if(n>goods[i].storage)
{//判断是否还可以购买不
printf("该商品库存不足\n");
break;
}
printf("\n是否购买此商品?(Y/N)\n");
fflush(stdin);//清空输入流
scanf("%s",choice1);//输入一个选项
if(strcmp(choice1,"Y")==0||strcmp(choice1,"y")==0)
{//输入y/Y表示购买此商品
if(p==NULL)
{//分配内存失败
printf("内存申请失败!\n");
exit(1);//退出
}
p->number=n;//商品数量
p->buy=goods[i];//货物信息
p->next=NULL;
p1=cart;//把头结点赋给p1
if(cart==NULL)//头结点为空
cart=p;//把节点赋值给头结点
else
{
while(p1->next!=NULL)
p1=p1->next;//把链表循环到尾部
p->next=p1->next;
p1->next=p;//把新节点p挂在链表尾部
}
}
else
printf("输入错误\n");
break;//找到商品结束循环
}
}
if(i==N)//循环完毕还没找到对应商品
printf("未找到所需物品\n");
fclose(fp);//关闭文件
UpdateKu();//更新库存信息函数
printf("是否继续购物?(Y/N)\n");
fflush(stdin);//清空输入流
scanf("%s",choice2);//输入选项
if(strcmp(choice2,"y")!=0&&strcmp(choice2,"Y")!=0)
{printf("放弃购买,返回菜单!\n");
}
}while(strcmp(choice2,"y")==0||strcmp(choice2,"Y")==0);//y/Y继续循环
menu();
calculate();
return ;
}
/
//更新购物车信息函数
void UpdateKu()
{
FILE *fp;
struct node *p;
if((fp=fopen("cart.txt","w"))==NULL)
{//判断文件是否创建失败
printf("创建文件失败。\n");
return ;
}
p=cart;//把购物车链表赋给p2
while(p!=NULL)
{
// fprintf(fp1,"货号 品名 单价 库存量\n");
//把货物信息写进文件
fprintf(fp,"%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number);
p=p->next;//指向下一个节点
}
fclose(fp);//关闭文件
return ;
}
void calculate()
{//计算所购商品价格并修改保存
struct node *p;
p=cart;//把购物车(cart)链表赋给p
double sum=0;//购买商品应付钱数
double pay;//购买商品实付钱数
FILE *fp;//定义文件指针
int i;
printf("以下是购物清单:\n");
XianShi();//调用函数显示购物列表信息
if((fp=fopen("库存.txt","r"))==NULL)
{//打开文件
printf("打开文件失败\n");
return ;
}
for(i=0;i<N;i++)
{//从文件中读取信息
fscanf(fp,"%s%s%*lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].outprice,&goods[i].storage);
}
fclose(fp);//关闭文件
while(p!=NULL)
{//当链表不为空时
sum=sum+p->buy.outprice*p->number;//计算应付钱数
for(i=0;i<N;i++)
{//找出对应商品库存量
if(strcmp(goods[i].ID,p->buy.ID)==0)
{//找到对应商品
goods[i].storage=goods[i].storage-p->number;//库存量变化
break;
}
}
p=p->next;//指向下一个节点
}
printf("总计:%-8.3f\n",sum);//输出购买物品共需多少钱
printf("输入实付金额:");
scanf("%lf",&pay);
printf("实付: %-8.3f 找零: %8.3f\n",pay,pay-sum);
if((fp=fopen("库存.txt","w"))==NULL)
{//打开文件
printf("写入文件失败\n");
return ;
}
for(i=0;i<N;i++)
{//向文件中写入信息
fprintf(fp,"%-11s%-15s%-8.3f%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].inprice,goods[i].outprice,goods[i].storage);
}
fclose(fp);//关闭文件
return ;
}
#ifndef MARKET_H
#define MARKET_H
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<windows.h>
#define N 20
struct mar//该结构体为存储货物信息
{
char ID[10];//货号
char brand[20];//品名
double inprice;//进价
double outprice;//售价
int storage;//存储量
};
struct node//该结构体为存储购物车中的信息
{
struct mar buy;//货物信息
int number;//购物的数量
struct node *next; //指向下一个购物节点
};
struct mar goods[N];//结构体数组
struct node *cart;//购物车头结点
int menu();//打印主菜单函数
void WenJianKucun();//文件建立库存信息
void ShouJianKucun();//手动建立库存信息
void DisKucun();//显示库存信息函数
void ShopCart();//对购物车进行操作
int ShopCartMenu();//打印购物车菜单
void XianShi();//显示购物列表
void add();//在购物车里添加商品
void UpdateKu();//更新购物车信息函数
void calculate();//计算所购商品价格并修改保存
#endif
/
int main()
{//主函数
printf("\n\n");
printf("\t*******************************************************************\n");
printf("\t| 欢迎使用 |\n");
printf("\t| 惺惺惜惺惺小超市系统 |\n");
printf("\t| 祝您使用愉快 |\n");
printf("\t*******************************************************************\n");
int find=0;
while(1)
{
switch(menu())
{//menu()函数为输入选项
case 1: WenJianKucun();
find=1;
break;//选项1 文件建立库存信息
case 2: //if(find==0)
ShouJianKucun();
/*else
printf("库存信息已存在\n");*/
break;//选项2 手动建立库存信息
case 3: DisKucun();
break;//选项3 显示库存信息函数
case 4: ShopCart();
break;
//选项4 对购物车进行操作
case 5: calculate();
break;//选项5 计算所购商品价格并修改保存
case 6: system("cls");
printf("感谢您的使用,再见!\n");
Sleep(2000);
exit(0);
}
}
return 0;
}
/
int menu()
{//打印主菜单函数
char s[5];//输入的选项
int n;//选项为整数
printf("\n\n-----------------请选择下面的数字进行操作:-----------------\n");
printf("----------------------------------------------------------------\n");
printf(" 1\. 文件建立库存信息 \n");
printf(" 2\. 手动建立库存信息 \n");
printf(" 3\. 显示所有商品信息 \n");
printf(" 4\. 购物车 \n");
printf(" 5\. 结算 \n");
printf(" 6\. 退出程序 \n");
printf("----------------------------------------------------------------\n");
printf("-------------------请选择对应数字1~6(1,2选其一)---------------\n");
while(1)
{
fflush(stdin);//清空输入流
gets(s);//输入一串字符串
n=atoi(s);//字符串转化为整数
if(n<1||n>6)//判断输入的选项是否正确
printf("输入错误,请重新输入:\n");
else//输入正确,结束循环
break;
}
return n;//返回输入选项
}
/
void WenJianKucun()
{//文件建立库存信息
FILE *fp;//定义文件指针
if((fp=fopen("库存.txt","at"))==NULL)
{//创建文件
printf("创建文件失败\n");
return ;
}
//向文件中写入信息
fprintf(fp,"69011111 飘柔日常护理 12.00 15.00 30\n");
fprintf(fp,"69021111 优酸乳 1.50 2.00 200\n");
fprintf(fp,"69031111 红富士苹果 2.50 3.50 300\n");
fprintf(fp,"69041111 晨光笔芯 0.70 1.00 150\n");
fprintf(fp,"69051111 胡医生面膜 12.00 16.50 100\n");
fclose(fp);//关闭文件
printf("成功导入信息\n");
return ;
}
/
void ShouJianKucun()
{//手动建立库存信息
FILE *fp;//定义文件指针
int i;
int number;
printf("请输入数量!");
scanf("%d",&number);
printf("请依次输入货物信息:\n");
printf("--------------------------------------------\n");
for(i=0;i<number;i++)
{//向文件中写入信息
printf("第%d个商品:\n",i+1);
printf("货号:");
fflush(stdin);//清空输入流
gets(goods[i].ID);//输入货号
printf("品名:");
fflush(stdin);//清空输入流
gets(goods[i].brand);//输入品名
printf("进价: ");
fflush(stdin);//清空输入流
scanf("%lf",&goods[i].inprice);//输入进价
printf("售价:");
fflush(stdin);//清空输入流
scanf("%lf",&goods[i].outprice);//输入售价
printf("数量:");
fflush(stdin);//清空输入流
scanf("%d",&goods[i].storage);//输入数量
printf("\n");
}
if((fp=fopen("库存.txt","at"))==NULL)
{//判断文件是否创建失败
printf("创建文件失败。\n");
return ;
}
//fprintf(fp,"货号 品名 单价 库存量\n");
for(i=0;i<number;i++)
{//把货物信息写进文件
fprintf(fp,"%-11s%-15s%-8.3f%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].inprice,goods[i].outprice,goods[i].storage);
}
//fwrite(goods,sizeof(struct mar),N,cun);二进制文件输出
fclose(fp);//关闭文件
printf("信息导入成功\n");
return ;
}
/
void DisKucun()
{//显示库存信息函数
FILE *fp;//定义文件指针
int i;
if((fp=fopen("库存.txt","r"))==NULL)
{//判断是否打开了文件
printf("打开文件失败\n");
return ;
}
for(i=0;i<N;i++)
{//输出物品信息
//读取文件信息
fscanf(fp,"%s%s%lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].inprice,&goods[i].outprice,&goods[i].storage);
printf("--------------------------------------------\n");
//输出文件信息
printf("货号 品名 单价 库存量\n");
printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage);
}
fclose(fp);//关闭文件
}
/
void ShopCart()
{//对购物车进行操作
while(1)
{
switch(ShopCartMenu())
{//ShopCartMenu()为输入选项
case 1: XianShi();
break;//选项1 显示购物车物品信息
case 2: add();
break;//选项2 添加购物车物品
//case 3: deleteitem();//删除购物车中的某项商品
// break;
case 3: return ;//选项3 退出
}
}
}
/
int ShopCartMenu()
{//打印购物车菜单
int n;//为整数
char s[5];//输入一串字符串
printf("\n\n请选择操作:\n");
printf("--------------------------------------------\n");
printf("1\. 显示当前可以购物列表\n");
printf("2\. 在购物车里添加商品\n");
//printf("3\. 删除购物车商品\n");
printf("3\. 退出\n");
printf("--------------------------------------------\n");
printf("请选择对应数字1~3\n");
while(1)
{
fflush(stdin);//清空输入流
gets(s);//输入一串字符串
n=atoi(s);//字符串转化为整数
if(n<1||n>3)//判断输入的选项是否正确
printf("输入错误,请重新输入: \n");
else//输入正确,结束循环
break;
}
return n;//返回输入选项
}
/
void XianShi()
{//显示购物列表
struct node *p; //定义节点指针
p=cart;//把购物车链表赋给p
FILE *fp1;//定义文件指针
if((fp1=fopen("cart.txt","r"))==NULL)
{//判断是否打开了文件
printf("打开文件失败\n");
//return ;
}
if(p==NULL)
{//购物车为空
printf("目前购物车为空:");
return ;
}
else
{//购物车不为空
while(p!=NULL)
{//把购物车物品不断减一,直到为空
printf("--------------------------------------------\n");
printf("货号 品名 单价 数量\n");
printf("%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number); //输出物品信息
p=p->next;
}
}
fclose(fp1);//关闭文件
return ;
}
/
void add()
{//在购物车里添加商品
FILE *fp,*fp1;//fp表示kucun文件,fp1表示cart文件
struct node *p1,*p,*p2;//定义节点指针
int i,n;//n表示商品数量
char s[20];//表示货号或者品名
char choice1[20],choice2[20];//选择项(y继续,n继续)
do{
printf("输入所需物品的名称或货号:\n");
fflush(stdin);//清空输入流
gets(s);//输入货号或者品名
if((fp=fopen("库存.txt","r"))==NULL)
{//打开文件kucun
printf("打开文件失败\n");
continue;
}
for(i=0;i<N;i++)
{//循环N次
fscanf(fp,"%s%s%*lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].outprice,&goods[i].storage);//从文件中读取货物信息
if((strcmp(goods[i].ID,s)==0||strcmp(goods[i].brand,s)==0)&&goods[i].storage>0)//找输入对应的商品
{
printf("已找到所需商品:\n");
printf("--------------------------------------------\n");
printf("货号 品名 单价 数量\n");
printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage);//输出所需物品信息
printf("请输入所需商品数量: ");
scanf("%d",&n);//商品数量
if(n>goods[i].storage)
{//判断是否还可以购买不
printf("该商品库存不足\n");
break;
}
printf("\n是否购买此商品?(Y/N)\n");
fflush(stdin);//清空输入流
scanf("%s",choice1);//输入一个选项
if(strcmp(choice1,"Y")==0||strcmp(choice1,"y")==0)
{//输入y/Y表示购买此商品
if(p==NULL)
{//分配内存失败
printf("内存申请失败!\n");
exit(1);//退出
}
p->number=n;//商品数量
p->buy=goods[i];//货物信息
p->next=NULL;
p1=cart;//把头结点赋给p1
if(cart==NULL)//头结点为空
cart=p;//把节点赋值给头结点
else
{
while(p1->next!=NULL)
p1=p1->next;//把链表循环到尾部
p->next=p1->next;
p1->next=p;//把新节点p挂在链表尾部
}
}
else
printf("输入错误\n");
break;//找到商品结束循环
}
}
if(i==N)//循环完毕还没找到对应商品
printf("未找到所需物品\n");
fclose(fp);//关闭文件
UpdateKu();//更新库存信息函数
printf("是否继续购物?(Y/N)\n");
fflush(stdin);//清空输入流
scanf("%s",choice2);//输入选项
if(strcmp(choice2,"y")!=0&&strcmp(choice2,"Y")!=0)
{printf("放弃购买,返回菜单!\n");
}
}while(strcmp(choice2,"y")==0||strcmp(choice2,"Y")==0);//y/Y继续循环
menu();
calculate();
return ;
}
/
//更新购物车信息函数
void UpdateKu()
{
FILE *fp;
struct node *p;
if((fp=fopen("cart.txt","w"))==NULL)
{//判断文件是否创建失败
printf("创建文件失败。\n");
return ;
}
p=cart;//把购物车链表赋给p2
while(p!=NULL)
{
// fprintf(fp1,"货号 品名 单价 库存量\n");
//把货物信息写进文件
fprintf(fp,"%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number);
p=p->next;//指向下一个节点
}
fclose(fp);//关闭文件
return ;
}
void calculate()
{//计算所购商品价格并修改保存
struct node *p;
p=cart;//把购物车(cart)链表赋给p
double sum=0;//购买商品应付钱数
double pay;//购买商品实付钱数
FILE *fp;//定义文件指针
int i;
printf("以下是购物清单:\n");
XianShi();//调用函数显示购物列表信息
if((fp=fopen("库存.txt","r"))==NULL)
{//打开文件
printf("打开文件失败\n");
return ;
}
for(i=0;i<N;i++)
{//从文件中读取信息
fscanf(fp,"%s%s%*lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].outprice,&goods[i].storage);
}
fclose(fp);//关闭文件
while(p!=NULL)
{//当链表不为空时
sum=sum+p->buy.outprice*p->number;//计算应付钱数
for(i=0;i<N;i++)
{//找出对应商品库存量
if(strcmp(goods[i].ID,p->buy.ID)==0)
{//找到对应商品
goods[i].storage=goods[i].storage-p->number;//库存量变化
break;
}
}
p=p->next;//指向下一个节点
}
printf("总计:%-8.3f\n",sum);//输出购买物品共需多少钱
printf("输入实付金额:");
scanf("%lf",&pay);
printf("实付: %-8.3f 找零: %8.3f\n",pay,pay-sum);
if((fp=fopen("库存.txt","w"))==NULL)
{//打开文件
printf("写入文件失败\n");
return ;
}
for(i=0;i<N;i++)
{//向文件中写入信息
fprintf(fp,"%-11s%-15s%-8.3f%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].inprice,goods[i].outprice,goods[i].storage);
}
fclose(fp);//关闭文件
return ;
}
超市管理系统C语言的更多相关文章
- 「超市管理系统——商品管理」 · Java Swing + MySQL JDBC开发
项目下载:https://download.csdn.net/download/weixin_44893902/13715024 1.9元付费赞助下载:https://download.csdn.ne ...
- 超市管理系统—NABCD模型
1) N (Need 需求) 需求分析: 超市的数据和业务越来越庞大,而计算机就是一种高效的管理系统,这就需要我们把超市的管理与计算机结合起来,从而超市管理系统应运而生.依靠现代化的计算机信息处理技术 ...
- 08_java超市管理系统
超市管理系统功能介绍 * A:超市管理系统功能介绍 * a: 显示主菜单 ============欢迎光临ItCast超市============ 1: 货物 清单 2: 添加货物 3: 删除货物 4 ...
- 文献综述十七:基于 sql环境下超市管理系统的设计与实现
一.基本信息 标题:基于 sql环境下超市管理系统的设计与实现 时间:2018 出版源:智能计算机与应用 文件分类:uml技术的研究 二.研究背景 从超市管理系统的实际应用出发,在系统分析过程中,从功 ...
- Java 实现一个 能够 进行简单的增删改查的 超市管理系统
1. 首先编写一个 Fruitltem 的商品类, 描述 商品的基本信息. 代码如下: 保证详细, 运行的起来, 有什么 问题也可以评论留言. /* * 自定义类, 描述商品信息 * * 商品的属性: ...
- 大一结业项目之一(C#晨曦超市管理系统 )
C#晨曦超市管理系统 我现是湖南工程职业技术学院大一的学生,很快 ...
- 2019年7月16日 abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- 职工工资管理系统 --C语言
#include<stdio.h> #include<string.h> #include<stdlib.h> #define NUM 1000 void ente ...
- 通用权限管理系统多语言开发接口 - java,php 调用接口程序,多业务子系统集成
1:公司里有多个业务系统,需要进行统一重构,有PHP的.有Java的.有.NET的,甚至还有delphi的. 2:公司里有多个数据库系统,有mysql的.有sqlserver的.还有oracel的,甚 ...
随机推荐
- Python os.readlink() 方法
概述 os.readlink() 方法用于返回软链接所指向的文件.可能返回绝对或相对路径.高佣联盟 www.cgewang.com 在Unix中有效 语法 readlink()方法语法格式如下: os ...
- PHP fopen() 函数
定义和用法 fopen() 函数打开一个文件或 URL. 如果 fopen() 失败,它将返回 FALSE 并附带错误信息.您可以通过在函数名前面添加一个 '@' 来隐藏错误输出. 语法 fopen( ...
- 7.1 NOI模拟赛 凸包套凸包 floyd 计算几何
计算几何之所以难学 就是因为太抽象了 不够直观 而且情况很多 很繁琐 甚至有一些东西不清不楚.. 这道题注意到题目中的描述 一个鸽子在两个点所连直线上也算. 通过看题解 发现这个地方并非直线而是线段 ...
- setOff与scrollTop区别
1.offsetTop : 当前对象到其上级层顶部的距离. 不能对其进行赋值.设置对象到页面顶部的距离请用style.top属性. 2.offsetLeft : 当前对象到其上级层左边的 ...
- [转]HashMap 和 currentHashMap 总结
作者:浅蓝色的麻吉 https://www.jianshu.com/p/a7767e6ff2a2 1. 什么是哈希表 在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能 1. ...
- Spring学习总结(4)-Spring生命周期的回调
参考文档:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans ...
- 好用的连接池-druid
druid连接池是阿里巴巴的数据库连接池项目.它的一个亮点强大的监控功能以及防SQL注入,同时不影响性能.这里是它的GitHub地址.感觉druid扩展的功能还是很实用的. 实用的功能 详细的监控 E ...
- 【BZOJ2821】作诗 题解(分块+前缀和)
前言:世间还有这么卡常的题…… ------------------ 题目链接 题目大意:给定长度为$n$的序列${a_i}$.有$m$次询问,问$[l,r]$内出现正偶数次的数字有多少个. 这题跟蒲 ...
- Idea 提交配置说明
Idea 提交配置说明# Auto-update after commit :自动升级后提交 keep files locked :把文件锁上,我想这应该就只能你修改其他开发人不能修改不了的功能 在你 ...
- 2 DC电参数测试 (1)
基本常识: (1)Hot switch好的程序应避免使用热切换(这里热的含义类似于热插拔的“热“),热切换是指带点操作,有电流的情况下断开开关或闭合开关的瞬间,有电流通过,这会减少开关的寿命甚至直接损 ...