C语言实现销售管理系统课程设计
本文分享一套基于 C 语言的销售管理系统源代码,适用于程序设计课程设计参考。系统以某公司销售业务为背景,利用结构体存储销售便条数据,通过文件操作实现持久化。功能涵盖便条信息录入、指定销售员产品销量统计、全员销售额排序以及综合销售报表输出。
项目背景与任务分析
该设计旨在模拟公司销售管理场景,要求处理四名销售员(编号 1-4)对五种产品(编号 1-5)的每日销售记录。每条销售便条包含销售员代号、产品代号及当日销售额。每位销售员每天可能提交 0-5 张便条。系统需读取并处理历史便条数据,提供以下核心功能:
- 数据录入:以菜单方式交互输入,并将数据保存至本地文件。
- 个人统计:计算特定销售员名下每种产品的销售总量。
- 排名排序:按总销售额从高到低对销售员进行代号排序。
- 报表生成:统计每种产品的总销售额,并按降序输出结果。
环境准备与编译运行
本代码使用标准 C 语言编写,依赖 <stdio.h> 和 <stdlib.h> 标准库。建议使用支持 C99 或更高标准的编译器(如 GCC 或 MSVC)进行编译。运行后将进入命令行控制台界面,主色调通过 system("color 3b"); 设置为蓝绿配色,提升可读性。程序启动后会自动创建数据文件 wujikang.dat 用于存储销售记录。
核心代码逻辑解析
第1步:数据结构定义与初始化
系统使用结构体 DATA 来映射销售便条的每一列字段。其中 gonghao 存储销售员代号,a1 至 a5 分别对应五款产品的销售额。主函数通过无限循环调用菜单选择器,根据用户输入分发至不同的处理逻辑分支。
#include "stdio.h" /*输入输出函数*/
#include "stdlib.h"/*通用应用程序函数*/
typedef struct/*定义结构体变量*/
{
int gonghao; /*销售员代号*/
int a1; /*产品一代号*/
int a2; /*产品二代号*/
int a3; /*产品三代号*/
int a4; /*产品四代号*/
int a5; /*产品五代号*/
}DATA;
// 其他函数声明...
第2步:菜单驱动与控制流
主程序通过 menu_select() 获取用户指令(1-4 及 0)。各选项对应不同功能模块:enter() 负责数据录入,salor() 查询单人统计,list1() 执行销售额排序,list2() 生成全局报表,0 则退出进程。这种模块化设计符合结构化编程规范,便于维护与测试。
main()/*主函数*/
{ int length;
system("color 3b");
for( ; ; )/*无限循环*/
{switch(menu_select()) /*根据用户的选择判断该调用哪个功能函数*/
{
case 1:length=enter();break;
case 2:salor(length);break;
case 3:list1(length);break;
case 4:list2();break;
case 0:exit(0);
}
}
}
第3步:数据录入与文件持久化
在录入功能中,程序提示用户输入便条数量,随后逐个读取工号及五项产品数据。数据写入采用二进制追加模式 fopen("wujikang.dat","ab+"),确保历史数据不丢失。若文件无法打开,程序将报错并退出。此步骤演示了 C 语言中文件指针的操作与 fprintf 的格式化输出技巧。
int enter() /*清单输入*/
{
int i,num;
FILE *fp;
DATA t[100];
printf("请输入要写的便条条数:\n");
scanf("%d",&num);
printf("工号 电脑 电视 冰箱 风扇 手机");
for(i=0;i<num;i++)
{
printf("\n\n------------------------------------\n");
scanf("%d\t %d\t %d\t %d\t %d\t %d",&t[i].gonghao,&t[i].a1,&t[i].a2,&t[i].a3,&t[i].a4,&t[i].a5);
}
if((fp=fopen("wujikang.dat","ab+"))==NULL)
{
printf("不能打开文件\n");
exit(1);
}
for(i=0;i<num;i++)
{
fprintf(fp,"%d\t%d\t%d\t%d\t%d\t%d\t",t[i].gonghao,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5);
fprintf(fp,"\r\n");
}
fclose(fp);
printf("\n-----------------------------------\n\n\n");
return i;
}
第4步:销售员销售额排序算法
list1() 函数实现了基于选择排序思想的排名逻辑。首先从文件读取所有记录至内存数组,随后遍历四名销售员,累计其所有产品的总销售额存入辅助数组 c。接着对比相邻元素的总和值,交换对应的工号索引 m,最终输出按销售额降序排列的销售员代号。该过程体现了数组操作与简单排序算法的结合应用。
void list1 (int n) /*显示清单*/
{
int i,j,s;
int m[10],c[10];
int k=0;
DATA t[100];
FILE *fp;
if((fp=fopen("wujikang.dat","rb+"))==NULL)
{
printf("不能打开文件\n");
exit(1);
}
rewind(fp);
while(fscanf(fp,"%d\t%d\t%d\t%d\t%d\t%d",&(t[k].gonghao),&(t[k].a1), &(t[k].a2), &(t[k].a3),&(t[k].a4),&(t[k].a5))>0) /*从fp指向的文件上读入便条信息*/
k++;
fclose(fp);
for(i=0;i<4;i++) /*将所输入的条数存入结构体数组中*/
m[i]=i+1;
for(i=0;i<4;i++)
c[i]=sum(t,k,m[i]);
for(i=0;i<4;i++)
for(j=i+1;j<4;j++)
if(c[i]<c[j])
{
s=m[i];
m[i]=m[j];
m[j]=s;
s=c[i];
c[i]=c[j];
c[j]=s;
}
printf("按销售额从高到低将销售员代号排序\n");
for(i=0;i<4;i++)
printf("%d\n",m[i]);
}
第5步:多维销售报表输出
最终报表功能 list2() 综合了行列统计逻辑。程序读取全部数据,先计算每位员工的总额,再横向累加每个产品在四类员工间的总销量。最后以表格形式打印每位员工的各项产品及合计,并在底部汇总每类产品的全球销量。这展示了如何处理复杂的二维数据统计问题。
void list2() /*每种产品的销售额*/
{
int i=0,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
int c[4],b1[4]={0},b2[4]={0},b3[4]={0},b4[4]={0},b5[4]={0};
int k=0;
DATA t[100];
FILE *fp;
if((fp=fopen("wujikang.dat","rb+"))==NULL)
{
printf("不能打开文件\n");
exit(1);
}
rewind(fp);//qingchucuowu,zhiyutoubu
while(fscanf(fp,"%d\t%d\t%d\t%d\t%d\t%d",&(t[k].gonghao),&(t[k].a1), &(t[k].a2), &(t[k].a3),&(t[k].a4),&(t[k].a5))>0)
k++;
for(i=0;i<4;i++)
c[i]=sum(t,k,i+1);/*求每个人的总销售额*/
for(i=0;i<4;i++)
sum0+=c[i]; /*所有产品的销售额*/
for(i=0;i<k;i++) /*求每个人每种产品的总销售额*/
for(j=0;j<4;j++)
{
if(j+1==t[i].gonghao)
{b1[j]+=t[i].a1;
b2[j]+=t[i].a2;
b3[j]+=t[i].a3;
b4[j]+=t[i].a4;
b5[j]+=t[i].a5;
}
}
for(i=0;i<4;i++)/*每种产品的总销售额*/
{sum1+=b1[i];
sum2+=b2[i];
sum3+=b3[i];
sum4+=b4[i];
sum5+=b5[i];
}
printf("-------------------------销售报表----------------------\n\n\n");
printf(" products num\n");
printf(" 销售员\t1\t2\t3\t4\t5\t总和\n\n");
for(i=0;i<4;i++)
printf(" %d\t%d\t%d\t%d\t%d\t%d\t%d\t\n",i+1,b1[i],b2[i],b3[i],b4[i],b5[i],c[i]);
printf("psum %d\t%d\t%d\t%d\t%d\t%d\t",sum1,sum2,sum3,sum4,sum5,sum0);
}
第6步:辅助统计函数
代码中包含一个通用的 sum() 函数,用于快速累指定销售员(参数 e)在所有便条中的五类产品销量总和。该函数被排序和报表模块复用,减少了代码冗余。
int sum(DATA t[100],int n, int e)
{
int i=0,sum=0;
for(i=0;i<=n;i++)
if(e==t[i].gonghao)
{sum+=t[i].a1;
sum+=t[i].a2;
sum+=t[i].a3;
sum+=t[i].a4;
sum+=t[i].a5;
}
return sum;
}
以上就是C语言实现销售管理系统课程设计的详细内容,更多关于C语言开发实践的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













