C语言超市收银系统
来源:互联网 发布:centos7 php nginx 编辑:程序博客网 时间:2024/05/01 16:22
#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->next;
free(p);break;}
y1=0;
}
y++;
p=p->next;
if(y>1) p1=p1->next;
}
if(y1)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 release()
{
ghead=gi=NULL;
}
void show1()
{
printf("/n /n/n/n/n |----------------------------------------|");
printf("/n | █ 主 菜 单█ |");
printf("/n |----------------------------------------|");
printf("/n | A 超 市 收 银 |");
printf("/n |----------------------------------------|");
printf("/n | B 商 品 查 询 |");
printf("/n |----------------------------------------|");
printf("/n | C 数 据 分 析 |");
printf("/n |----------------------------------------|");
printf("/n | D 管 理 维 护 |");
printf("/n |----------------------------------------|");
printf("/n | E 清 空 数 据 |");
printf("/n |----------------------------------------|");
printf("/n | F 退 出 程 序 |");
printf("/n |----------------------------------------|");
printf("/n | 请您选择一个任务 |");
printf("/n |----------------------------------------|/n/n/n");
}
void show2()
{
printf("/n |-----------------------------|");
printf("/n | █查 询 菜 单█ |");
printf("/n |-----------------------------|");
printf("/n | A 查 找 商 品 |");
printf("/n |-----------------------------|");
printf("/n | B 查 询 所 有 |");
printf("/n |-----------------------------|");
printf("/n | C 退 出 程 序 |");
printf("/n |-----------------------------|");
printf("/n | 请您选择一个任务 |");
printf("/n |-----------------------------|/n/n/n");
}
void show3()
{
printf("/n |-----------------------------|");
printf("/n | █分 析 菜 单█ |");
printf("/n |-----------------------------|");
printf("/n | A 金 额 排 名 |");
printf("/n |-----------------------------|");
printf("/n | B 销 售 排 名 |");
printf("/n |-----------------------------|");
printf("/n | C 退 出 程 序 |");
printf("/n |-----------------------------|");
printf("/n | 请您选择一个任务 |");
printf("/n |-----------------------------|/n/n/n");
}
void show4()
{
printf("/n |-----------------------------|");
printf("/n | █管 理 菜 单█ |");
printf("/n |-----------------------------|");
printf("/n | A 新 建 商 品 |");
printf("/n |-----------------------------|");
printf("/n | B 删 除 商 品 |");
printf("/n |-----------------------------|");
printf("/n | C 修 改 商 品 |");
printf("/n |-----------------------------|");
printf("/n | D 退 出 程 序 |");
printf("/n |-----------------------------|");
printf("/n | 请您选择一个任务 |");
printf("/n |-----------------------------|/n/n/n");
}
void main()
{
initial_g();
char c1;
do {
show1();
c1=getch();
switch ( c1 )
{
case 'a':
case 'A':sellg();break;
case 'b':
case 'B':
{ char c2;
do{
show2();
c2=getch();
switch ( c2 )
{case 'a':
case 'A':lookg();break;
case 'b':
case 'B':showall();break;
case 'c':
case 'C':break;
}
}while(c2!='c'&&c2!='C');
}break;
case 'c':
case 'C':
{ char c3;
do{
show3();
c3=getch();
switch ( c3 )
{case 'a':
case 'A':inrank();break;
case 'b':
case 'B':sellrank();break;
case 'c':
case 'C':break;
}
}while(c3!='c'&&c3!='C');
}break;
case 'd':
case 'D':
{
char c4;
do{
show4();
c4=getch();
switch ( c4)
{case 'a':
case 'A':newg();break;
case 'b':
case 'B':deleteg();break;
case 'c':
case 'C':modifyg();break;}
}while(c4!='D'&&c4!='d');
}break;
case 'e':
case 'E':
release();break;
}
saveg();
}while(c1!='F'&&c1!='f');
printf("/n/n ★ 谢谢您的使用!★");
}
- C语言超市收银系统
- 仿真超市收银系统
- 超市收银系统
- 超市收银系统设计思路
- C++ 大作业 超市收银系统
- Qt实现小型的超市收银系统
- 超市收银系统需求分析求指导
- c#练习之超市收银系统
- 基于C#的超市收银管理系统
- C#小项目:模拟超市收银系统
- 超市收银系统(小组实训)
- C#基础综合练习--超市收银系统的设计
- c#超市收银系统,多态的使用
- HOJ1941 超市收银问题
- 银行收银系统(C#)
- 用C语言编写的超市商品信息管理系统
- 小型超市管理系统.c
- 从超市收银故事看互联网技术
- IIS虚拟目录作用
- 程序员的若干致富的方法
- 无限顶起。。
- Asp.net弹出对话框方法
- 对于访问IIS元数据库失败的解决 和 服务器应用程序不可用
- C语言超市收银系统
- Photoshop 技能167个
- VBA 输出utf-8格式文件
- C语言工资管理系统
- c++异常处理
- 反思,整理
- 如何设计一份令人舒服的PPT
- STM32 keil mdk启动代码发分析
- C语言公交查询系统