本文实例为大家分享了C语言实现销售管理系统设计的具体代码,供大家参考,具体内容如下 某公司有四个销售员(编号: 1-4), 负责销售五种产品(编号: 1-5)。 每个销售员都将当天出
本文实例为大家分享了C语言实现销售管理系统设计的具体代码,供大家参考,具体内容如下
某公司有四个销售员(编号: 1-4), 负责销售五种产品(编号: 1-5)。 每个销售员都将当天出售的每种产品各写一 张便条交上来。每张便条包含内容:销售员的代号、产品的代号、这种产品的当天的销售额。每位销售员每天上缴1张便条。
试设计一个便条管理系统,使之能提供以下功能:
1、系统以菜单方式工作
2、便条信息录入功能——输入(支持便条信息文件导入)
3、便条信息修改功能
4、便条信息删除功能
5、收集到了上个月的所有便条后,读取销售情况
1)计算每个人每种产品的销售额。
2)按销售额对销售员进行排序,输出排序结果(销售员代号)
3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)
详情请参考代码,注释写的很详细,希望能给你帮助.
最后的最后有截图展示效果.
#include <stdio.h>
#include <coNIO.h>
#include <string.h>
#include <stdlib.h>
#define M 155
///这些函数下面会详细的介绍的滴!
void detail();
void foreach();
void menu();
void product();
void readdata();
void seller();
void total();
void choice();
void add();
void deleteing();
void update();
void clearing();
struct ss{
int sid;///销售代码
int pid;///产品代号
int sn;///销售额
}ss[M];
int n;///便条数目
int s[4][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};///用户保存员工和产品信息
///从文件读取数据
void readdata()
{
FILE *fp;///定义文件指针
///调用fopen函数,以只读模式打开d:\list.txt文件,并验证返回值是否为空
if((fp=fopen("d:\\list.txt","r"))==NULL)
{
printf("文件打开失败!\n");
exit(0);///表示正常的退出
}
else
for(n=0;!feof(fp);n++)
{
fscanf(fp,"%d %d %d\n",&ss[n].sid,&ss[n].pid,&ss[n].sn);
} ///保存文件数据到结构体
fclose(fp);///关闭文件
}
///从便条读到的数据分类整理统计
void foreach()
{
int i;
for(i=0;i<n;i++)///遍历所有纸条
{
switch(ss[i].pid)///按产品分类,再按销售员分类,累加各人各产品销售额
{
case 1:///当ss[i].pid为1的时候,也就是当产品代号为1的时候
switch(ss[i].sid)///查看销售代码
{
///当销售代码为1的时候,累加1号销售员编号为1的产品的销售额
case 1:s[0][0]+=ss[i].sn;break;
///当销售代码为2的时候,累加2号销售员编号为1的产品的销售额
case 2:s[1][0]+=ss[i].sn;break;
///当销售代码为3的时候,累加3号销售员编号为1的产品的销售额
case 3:s[2][0]+=ss[i].sn;break;
///当销售代码为4的时候,累加4号销售员编号为1的产品的销售额
case 4:s[3][0]+=ss[i].sn;break;
}
break;
///以下代码同理可得
case 2:
switch(ss[i].sid)
{
case 1:s[0][1]+=ss[i].sn;break;
case 2:s[1][1]+=ss[i].sn;break;
case 3:s[2][1]+=ss[i].sn;break;
case 4:s[3][1]+=ss[i].sn;break;
}
break;
case 3:
switch(ss[i].sid)
{
case 1:s[0][2]+=ss[i].sn;break;
case 2:s[1][2]+=ss[i].sn;break;
case 3:s[2][2]+=ss[i].sn;break;
case 4:s[3][2]+=ss[i].sn;break;
}
break;
case 4:
switch(ss[i].sid)
{
case 1:s[0][3]+=ss[i].sn;break;
case 2:s[1][3]+=ss[i].sn;break;
case 3:s[2][3]+=ss[i].sn;break;
case 4:s[3][3]+=ss[i].sn;break;
}
break;
case 5:
switch(ss[i].sid)
{
case 1:s[0][4]+=ss[i].sn;break;
case 2:s[1][4]+=ss[i].sn;break;
case 3:s[2][4]+=ss[i].sn;break;
case 4:s[3][4]+=ss[i].sn;break;
};
break;
}
}
}
///菜单选项
void menu()
{
int c;
puts("\t\t*********菜单*********************\n\n");
puts("\t\t 1.查看每人每种产品的销售额\n");
puts("\t\t 2.按销售额对销售员排序(销售员代号)\n");
puts("\t\t 3.对每种产品总销售额从高到低排序(产品代号和销售额)\n");
puts("\t\t 4.输出统计报表\n");
puts("\t\t 5.录入一条便条信息\n");
puts("\t\t 6.修改一条便条信息\n");
puts("\t\t 7.删除一条便条信息\n");
puts("\t\t 8.退出\n");
puts("\n\n\t\t*********************************************\n");
printf("请选择(1-8):[ ]\b\b");
scanf("%d",&c);
if(c<1||c>8)///错误输入,重新获取输入
{
printf("您输入的选项不在我们服务范围之内\请确定好您要选择的服务,重新输入!!!\n");
menu();
}
else///正确输入
switch(c)///根据输入实现相应函数调用
{
case 1:detail();
break;
case 2:seller();
break;
case 3:product();
break;
case 4:total();
break;
case 5:add();
break;
case 6:update();
break;
case 7:deleteing();
break;
case 8:exit(0);
}
}
///计算上个月每个人每种产品的销售额
void detail()
{
int i,j;
for(i=0;i<4;i++)
{
printf("\n\t\t%d 号销售员销售情况:\n",i+1);
for(j=0;j<5;j++)
printf("\t\t%d 号产品销售额:%d\n",j+1,s[i][j]);
}
choice();
}
///按销售额对销售员进行排序,输出排序结果(销售员代号)
void seller()
{
int i,j,k;
int sp[4]={0,0,0,0};///存销售员的销售额
for(i=0;i<4;i++)///统计销售员的销售额
for(j=0;j<5;j++)
sp[i]+=s[i][j];
for(i=0;i<4;i++)///排序
{
k=0;
for(j=0;j<4;j++)
{
if(sp[k]<sp[j])
k=j;
}
printf("\t\t第%d名是%d号销售员!\n",i+1,k+1);
sp[k]=-1;
}
choice();
}
///对每种产品总销售额从高到低排序(产品代号和销售额)
void product()
{
int i,j,k;
int p[5]={0,0,0,0,0};///存每种产品的销售额
for(i=0;i<5;i++)///统计每种产品的销售额
for(j=0;j<4;j++)
p[i]+=s[j][i];
for(i=0;i<5;i++)///将产品的销售额进行排序
{
k=0;
for(j=0;j<5;j++)
{
if(p[k]<p[j])
k=j;
}
printf("\t\t第%d名是%d号产品!\销售额为%d!\n",i+1,k+1,p[k]);
p[k]=-1;
}
choice();
}
///输出统计报表(输出销售代号,产品代号和销售额)
void total()
{
int i,j;
printf("\n\t销售员\t产品\t销售额\n");
for(i=0;i<4;i++)
for(j=0;j<5;j++)
printf("\t%d\t%d\t%d\n",i+1,j+1,s[i][j]);
choice();
}
///选择退出系统或返回主菜单
void choice()
{
int c;
printf("请选择接下来想做什么:\n1.返回菜单\n2.退出系统\n");
scanf("%d",&c);
if(c==1)
menu();
else
exit(0);
}
///录入一条便条信息
void add()
{
printf("请填写您要录入的便条的信息:销售代码,产品代码,销售额\n");
scanf("%d %d %d",&ss[n].sid,&ss[n].pid,&ss[n].sn);
FILE *fp;///定义文件指针
char *str="d:\\list.txt";
printf("该条记录正在写入文件 list.txt~~~~\n");
fp=fopen(str,"a");///参数"a"意思是说将新添加的数据接着文本里的数据写,不会覆盖文本里的内容
fprintf(fp,"\n%d\t%d\t%d",ss[n].sid,ss[n].pid,ss[n].sn);///将结构体里的信息写入文本
fclose(fp);///关闭文件
printf("\n该条记录已经写入文件 list.txt,请前往查看!\n");
switch(ss[n].pid)///借用foreach()函数里的代码,详情请参考foreach()函数
{
case 1:///当ss[i].pid为1的时候,也就是当产品代号为1的时候
switch(ss[n].sid)///查看销售代码
{
///当销售代码为1的时候,累加1号销售员编号为1的产品的销售额
case 1:s[0][0]+=ss[n].sn;break;
///当销售代码为2的时候,累加2号销售员编号为1的产品的销售额
case 2:s[1][0]+=ss[n].sn;break;
///当销售代码为3的时候,累加3号销售员编号为1的产品的销售额
case 3:s[2][0]+=ss[n].sn;break;
///当销售代码为4的时候,累加4号销售员编号为1的产品的销售额
case 4:s[3][0]+=ss[n].sn;break;
}
break;
///以下代码同理可得
case 2:
switch(ss[n].sid)
{
case 1:s[0][1]+=ss[n].sn;break;
case 2:s[1][1]+=ss[n].sn;break;
case 3:s[2][1]+=ss[n].sn;break;
case 4:s[3][1]+=ss[n].sn;break;
}
break;
case 3:
switch(ss[n].sid)
{
case 1:s[0][2]+=ss[n].sn;break;
case 2:s[1][2]+=ss[n].sn;break;
case 3:s[2][2]+=ss[n].sn;break;
case 4:s[3][2]+=ss[n].sn;break;
}
break;
case 4:
switch(ss[n].sid)
{
case 1:s[0][3]+=ss[n].sn;break;
case 2:s[1][3]+=ss[n].sn;break;
case 3:s[2][3]+=ss[n].sn;break;
case 4:s[3][3]+=ss[n].sn;break;
}
break;
case 5:
switch(ss[n].sid)
{
case 1:s[0][4]+=ss[n].sn;break;
case 2:s[1][4]+=ss[n].sn;break;
case 3:s[2][4]+=ss[n].sn;break;
case 4:s[3][4]+=ss[n].sn;break;
};
break;
}
n++;
choice();
}
void deleteing()
{
printf("请输入您要删除的便条的信息:销售代码,产品代码,销售额\n");
int a,b,c;///存用户需要删除的便条的信息
scanf("%d %d %d",&a,&b,&c);
printf("请稍等,您选择的便条正在删除~~~\n");
FILE *fin,*ftp;
int x,y,z;
fin=fopen("d:\\list.txt","r");///读打开原文件list.txt
ftp=fopen("d:\\tmp.txt","w");///写打开临时文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("文件打开失败!\n");
exit(0);
}
int m=0;///该变量是控制写入文本是首行不自动换行
for(int i=0;!feof(fin);i++)
{
fscanf(fin,"%d %d %d\n",&x,&y,&z);///从原文件读取到的一行数据放到x,y,z三个变量中
if(x==a&&y==b&&z==c)///所有的数据相等,说明是要删除的便条,则不写入临时文件
continue;
else///将不是要删除的其他便条信息写入临时文件
{
if(m==0)
{
fprintf(ftp,"%d\t%d\t%d",x,y,z);///不是则将这一行写入临时文件tmp.txt
m++;
}
else
fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///不是则将这一行写入临时文件tmp.txt
}
}
fclose(fin);
fclose(ftp);
system("DEL/f d:\\list.txt");///删除原文件,如果删除错误,会报原因
///unlink("d:\\list.txt");///删除原文件
rename("d:\\tmp.txt","d:\\list.txt");///将临时文件名改为原文件名
printf("您选择的便条已经删除,请打开文件查看!\n");
clearing();
readdata();
foreach();
choice();
}
///清空之前所统计的原文件里的销售员和销售产品所对应的销售额
void clearing()
{
for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
s[i][j]=0;
}
}
void update()
{
printf("请输入您要修改的便条的信息:销售代码,产品代码,销售额\n");
int a,b,c,d,e,x,y,z;
scanf("%d %d %d",&a,&b,&c);
printf("请问您要修改该便条中那一项信息:\n(1)销售代码\n(2)产品代码\n(3)销售额\n");
scanf("%d",&d);
printf("请问您要将该项信息修改成什么(请输入数字):\n");
scanf("%d",&e);
printf("您选择的便条正在修改中~~~~~\n");
FILE *fin=fopen("d:\\list.txt","r");
FILE *ftp=fopen("d:\\tmp.txt","w"); ///是充当临时文件作用
if(!fin)
{
printf("不能打开list.txt文件\n");
exit(1);
}
if(!ftp)
{
printf("不能打开tmp.txt文件\n");
exit(1);
}
int m=0;///该变量是控制写入文本时首行不自动换行
///开始复制
switch(d)///根据选项修改(1)销售代码 (2)产品代码 (3)销售额
{
case 1:///(1)销售代码
{
for(int i=0;!feof(fin);i++)
{
fscanf(fin,"%d %d %d\n",&x,&y,&z);
if(x==a&&y==b&&z==c)///检验是要修改的行吗
{
x=e;
if(m==0)
{
fprintf(ftp,"%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
m++;
}
else
fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
}
else
{
if(m==0)
{
fprintf(ftp,"%d\t%d\t%d",x,y,z);///将原本的数据写入临时文件
m++;
}
else
fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将原本过的数据写入临时文件
}
}
}
break;
///以下代码同理可得
case 2:
{
for(int i=0;!feof(fin);i++)
{
fscanf(fin,"%d %d %d\n",&x,&y,&z);
if(x==a&&y==b&&z==c)///检验是要修改的行吗
{
y=e;
if(m==0)
{
fprintf(ftp,"%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
m++;
}
else
fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
}
else
{
if(m==0)
{
fprintf(ftp,"%d\t%d\t%d",x,y,z);///将原本的数据写入临时文件
m++;
}
else
fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将原本过的数据写入临时文件
}
}
}
break;
case 3:
{
for(int i=0;!feof(fin);i++)
{
fscanf(fin,"%d %d %d\n",&x,&y,&z);
if(x==a&&y==b&&z==c)///检验是要修改的行吗
{
z=e;
if(m==0)
{
fprintf(ftp,"%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
m++;
}
else
fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
}
else
{
if(m==0)
{
fprintf(ftp,"%d\t%d\t%d",x,y,z);///将原本的数据写入临时文件
m++;
}
else
fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将原本过的数据写入临时文件
}
}
}
break;
}
fclose(fin);
fclose(ftp);
printf("您选择的便条已经修改完毕,请打开文件查看!\n");
system("DEL/f d:\\list.txt");///删除原文件,删除错误的时候会报提示信息
///unlink("d:\\list.txt");///删除原文件
rename("d:\\tmp.txt","d:\\list.txt");///改名
clearing();
readdata();
foreach();
choice();
}
int main()
{
readdata();///读取文件数据
foreach();///初始化数组
menu();///显示主菜单
}
首先在D盘下新建一个文本文档 ,名为 list.txt,在文本文档里存入的数据如下(数据仅供参考):
然后我们开始运行该程序:
对于上图第五项添加便条信息的操作,我们 来看一看文本里的内容(最后一行就是新添的数据)
在我们执行第六个选项的时候,首先需要在D盘下新建一个文本文档 tmp.txt,至于为啥,详情请参考代码,代码里面有详细的解释
我们再去查看D盘里的文件,这时tmp.txt不见了,只剩下 list.txt,里面的内容如下(为什么会酱紫呢?快去查看代码吧):
在我们执行第七个选项的时候,需要在D盘下重新新建一个文本文档 tmp.txt,至于为啥,详情请参考代码,代码里面有详细的解释
我们再去查看D盘里的文件,这时tmp.txt不见了,只剩下 list.txt,里面的内容如下(为什么会酱紫呢?快去查看代码吧):
--结束END--
本文标题: C语言实现销售管理系统设计
本文链接: https://www.lsjlt.com/news/143446.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0