#include<stdio.h>
#include<stdlib.h>//分配函数
#include<string.h>//字符串操作
#include<conio.h>//getch()
struct good//商品结构体
{
char name[20];//商品名称
float price;//价格
int n1;//总件数
int n2;//已卖出
};
struct gnode //商品结构体链表
{
struct good g;
struct gnode *next;
};
struct gnode *ghead=NULL,*gi=NULL;
void initial_g()
{
FILE *fp;
if((fp=fopen("good.text","r"))==NULL) printf("产商品信息为空!");
else {
fseek(fp,0,SEEK_END);
int i,j;
i=ftell(fp)/sizeof(struct good);
rewind(fp);
for(j=0;j<i;j++)
{
struct gnode *p;
p=(struct gnode *)malloc(sizeof(struct gnode));
p->next=NULL;
fread(&p->g,sizeof(struct good),1,fp);
if(ghead==NULL)ghead=gi=p;
else{ gi->next=p;gi=gi->next; }
}
fclose(fp);
//printf("\n\n\t\t初始化%d个商品信息成功!",i);
}
}
void inrank()
{
struct gnode *p=ghead;
if(p==NULL) printf("商品利润信息为空!");
else {
printf("\n\n\n\n █商品利润信息排名█\n");
int n=0;
int i,j;
while(p)
{n++;
p=p->next; }
p=ghead;
struct good *p1;
p1=(struct good *)calloc(n,sizeof(struct good));
for(i=0;i<n;i++)
{*(p1+i)=p->g;
p=p->next;
}
struct good t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(p1[j].n2*p1[j].price<p1[j+1].n2*p1[j+1].price)
{ t= p1[j];p1[j]=p1[j+1]; p1[j+1]=t; }
printf("\n|-----------------------------------------------------------------------------|");
for(j=0;j<n;j++)
{printf("\n[%d]|商品名: %s 利润总金额:%f 单价: %f 总数: %d 已卖数: %d ",j+1,p1[j].name ,p1[j].n2*p1[j].price,p1[j].price,p1[j].n1,p1[j].n2,p1[j].n2*p1[j].price);
printf("\n|-----------------------------------------------------------------------------|");}
}
printf("\n\n\n\n\n");
}
void sellrank()
{
struct gnode *p=ghead;
if(p==NULL) printf("商品销售信息为空!");
else {
printf("\n\n\n\n █商品销售排名█\n");
int n=0;
int i,j;
while(p)
{n++;
p=p->next; }
p=ghead;
struct good *p1;
p1=(struct good *)calloc(n,sizeof(struct good));
for(i=0;i<n;i++)
{*(p1+i)=p->g;
p=p->next;
}
struct good t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(float(p1[j].n2)/p1[j].n1<float(p1[j+1].n2)/p1[j+1].n1)
{ t= p1[j];p1[j]=p1[j+1]; p1[j+1]=t; }
printf("\n|-----------------------------------------------------------------------------|");
for(j=0;j<n;j++)
{printf("\n[%d]|商品名: %s 销售量:%.1f%% 单价: %f 总数: %d 已卖数: %d ",j+1,p1[j].name ,float(p1[j].n2)/p1[j].n1*100,p1[j].price,p1[j].n1,p1[j].n2,p1[j].n2*p1[j].price);
printf("\n|-----------------------------------------------------------------------------|");}
}
printf("\n\n\n\n\n");
}
void newg()
{
loop1:
struct gnode *p,*p1;
p=(struct gnode *)malloc(sizeof(struct gnode));
printf("\n\n\n\n █创建新商品█\n");
loop:
printf("\n\n请输入商品名\n\n");
scanf("%s",p->g.name);
p1=ghead;
while(p1)
{
if(strcmp(p->g.name,p1->g.name)==0){ printf("\n\n错误,商品名重复!\n"); goto loop;}
p1=p1->next;
}
printf("\n请输入价格\n\n");
scanf("%f",&p->g.price);
printf("\n请输入商品总数\n\n");
scanf("%d",&p->g.n1);
p->g.n2=0;
p->next=NULL;
if(ghead==NULL)ghead=gi=p;
else{ gi->next=p;gi=gi->next; }
printf("\n商品新建成功!\n\n");
printf("\n\n\n|-------------------------|");
printf("\n|您想继续查找商品信息吗? |\n| 是(Y) 否(N) |");
printf("\n|-------------------------|");
char y;
y=getch();
if(y=='Y'||y=='y') goto loop1;
}
void saveg()
{
FILE *fp;
if((fp=fopen("good.text","w"))==NULL) printf("文件打开失败!");
if(ghead==NULL)printf("产商品信息为空!");
else
{
int i=0;
struct gnode *p=ghead;
while(p)
{
fwrite(&p->g,sizeof(struct good),1,fp);
p=p->next;
i++;
}
//printf("\n\n\t\t保存%d个商品信息成功!",i);
}
fclose(fp);
}
void showall()
{
if(ghead==NULL)printf("产商品信息为空!");
else
{
printf("\n\n\n\n █商品价目信息█\n");
int i=0;
struct gnode *p=ghead;
printf("\n|--------------------------------------------------------------------------------|");
while(p)
{
if(p->g.n1-p->g.n2>0)
{printf("\n|商品名: %s \t单价: %f 总数: %d 已卖数: %d 剩余数:%d",p->g.name ,p->g.price,p->g.n1,p->g.n2,p->g.n1-p->g.n2);
printf("\n|--------------------------------------------------------------------------------|");}
if(p->g.n1-p->g.n2<=0)
{printf("\n|商品名: %s \t单价: %f \t总数: %d 已卖数: %d 剩余数:%d:\n\n注意,货源为零。请及时进货!",p->g.name ,p->g.price,p->g.n1,p->g.n2,p->g.n1-p->g.n2);
printf("\n|--------------------------------------------------------------------------------|");}
p=p->next;
i++;
}
printf("\n|商品种类数:%d \t|",i);
printf("\n|---------------|\n");
}
}
void lookg()
{
if(ghead==NULL)printf("产商品信息为空!");
else
{ printf("\n\n\n\n █查找商品信息█\n");
loop:
int y=1;
struct gnode *p=ghead;
printf("\n请输入商品名: ");
char n[20];
scanf("%s",n);
while(p)
{
if(strcmp(n,p->g.name)==0)
{
printf("\n|---------------------------------------------------------------------------------|");
printf("\n|商品名: %s \t单价: %f\t总数: %d \t已卖数: %d \t剩余数:%d",p->g.name ,p->g.price,p->g.n1,p->g.n2,p->g.n1-p->g.n2);
printf("\n|---------------------------------------------------------------------------------|");
y=0;
}
p=p->next;
}
if(y)printf("\n错误,无该商品! ");
}
printf("\n\n\n|-------------------------|");
printf("\n|您想继续查找商品信息吗? |\n| 是(Y) 否(N) |");
printf("\n|-------------------------|");
char y;
y=getch();
if(y=='Y'||y=='y') goto loop;
}
void sellg()
{ printf("\n\n\n\n █超市收银█\n");
int num,y1=0;
float sum=0;
char n[20];
struct gnode *p;
loop:
p=ghead;
printf("\n商品名称: ");
scanf("%s",n);
loop1:
printf("\n购买数量: ");
scanf("%d",&num);
while(p)
{
if(strcmp(n,p->g.name)==0)
{
if(num>(p->g.n1-p->g.n2)){printf("\n\n错误,货源不够!\n");goto loop1;}
printf("\n|------------------------------------------------------------------------|");
printf("\n|商品名: %s 单价: %f 购买数量 %d请付款:¥:%f",p->g.name ,p->g.price,num,p->g.price*num);p->g.n2+=num;
printf("\n|------------------------------------------------------------------------|");
sum+=p->g.price*num;
y1++;
}
p=p->next;
}
printf("\n\n\n|-------------------------|");
printf("\n还有购买物品? |\n| 是(Y) 否(N) |");
printf("\n|-------------------------|");
char y;
y=getch();
if(y=='Y'||y=='y') goto loop;
printf("\n\n您好!\n\n一共购买%d种商品:一共需付¥%f元\n\n",y1,sum);
}
void modifyg()
{
if(ghead==NULL)printf("产商品信息为空!");
else
{ printf("\n\n\n\n █修改商信息█\n");
loop:
int y=1;
struct gnode *p=ghead;
printf("\n请输入要修改的商品名: ");
char n[20];
int n3;
scanf("%s",n);
while(p)
{
if(strcmp(n,p->g.name)==0)
{
printf("\n请修改价格[原价格:%f]\n\n",p->g.price);
scanf("%f",&p->g.price);
loop1:
printf("\n请修改商品总数[原总数:%d]\n\n",p->g.n1);
scanf("%d",&n3);
if(n3<p->g.n2){printf("\n\n错误,修改后的商品总数必须大于或等于已经卖出商品数!");goto loop1;}
p->g.n1=n3;
y=0;
}
p=p->next;
}
if(y)printf("\n错误,无该商品! ");
}
printf("\n\n\n|-------------------------|");
printf("\n|您想继续修改商品信息吗? |\n| 是(Y) 否(N) |");
printf("\n|-------------------------|");
char y;
y=getch();
if(y=='Y'||y=='y') goto loop;
}
void deleteg()
{
if(ghead==NULL)printf("产商品信息为空!");
else
{
printf("\n\n\n\n █删除商信息█\n");
loop:
int y=0,y1=1;
struct gnode *p=ghead,*p1=ghead;
printf("\n请输入要删除的商品名: ");
char n[20];
int n3;
scanf("%s",n);
while(p)
{
if(strcmp(n,p->g.name)==0)
{
if(p==ghead)ghead=ghead->next;
else {p1->next=p->
C语言超市管理系统源代码
5星 · 超过95%的资源 需积分: 47 123 浏览量
2010-09-18
23:09:49
上传
评论 11
收藏 33KB ZIP 举报
xkypanni
- 粉丝: 1
- 资源: 1
最新资源
- 同等学力申硕考试 组合数学
- 同等学力 离散数学与组合数学
- 50条最常用Linux系统命令大全手册
- 斯沃数控仿真软件7.2版数控加工中心车床铣床编程仿真模拟教程斯沃系统手册可编程序控制器系统(ABPLC)说明
- 2023NOC软件创意编程赛项真题-python小高初赛
- 2024安全信息安全与评估
- 斯沃数控仿真软件7.2版数控加工中心车床铣床编程仿真模拟教程斯沃系统手册DASEN-9i-连接手册PLC-手册
- SpringBoot集成MyBatis-Plus
- 基于python-contrib-opencv,dlib,pyqt5实现电脑端摄像头读取视频,实时人脸录入,人脸识别等功能
- 斯沃数控仿真软件7.2版数控加工中心车床铣床编程仿真模拟教程斯沃系统手册DASEN-3i-h连接手册PLC手册
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页