C语言实现销售管理系统课程设计

今天早睡
今天早睡
发布时间:2026-10-16| 6人浏览过
原创

本文分享一套基于 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语言开发实践的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。