设计一个销售管理系统,假设某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1)销售员的代号,2)产品的代号,3)这种产品的当天的销售额。要求每位销售员每天必须上缴1张便条。
一、功能需求说明(必须采用结构体和动态链表实现)
1、销售便条信息录入,信息包括销售员代号、产品代号、产品销售额。
2、统计功能,统计每天每种产品的销售额、销售员的总销售额。
3、查询功能,可查询每种产品销售员当天的销售额表(按金额降序)、销售员当天的产品任务表(按金额降序)、产品当天的销量表(按金额降序)
4、历史数据功能,需要至少保存一周(7天)销售信息
5、历史数据统计功能,统计一周每种产品销量,销售员的产品销售任务表
6、历史数据查询功能,统计一周每种产品销量表(按金额降序),销售员的产品销售任务表(按金额降序)
7、数据或报表以文件形式进行保存
https://www.jb51.net/article/241752.htm
可以参考一下:
https://www.xz577.com/j/285243.html
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define M 155
void ReadData(); ///读取
void Foreach();
void Menu(); ///菜单
void Data(); ///销售数据
void Statistics(); ///统计
void Input(); ///录入
void Modify(); ///修改
void Delete(); ///删除
void Salesperson(); ///销售员排序
void Sales(); ///销售额排序
void Choice(); ///选择
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}};///s:员工和产品信息
void Menu()
{
int c;
puts("********* 菜单 *********\n");
puts(" 1.查询销售信息\n");
puts(" 2.统计表\n");
puts(" 3.录入信息\n");
puts(" 4.修改信息\n");
puts(" 5.删除信息\n");
puts(" 6.销售员排序\n");
puts(" 7.销售额排序\n");
puts(" 0.退出\n");
puts("************************\n");
printf("请选择(0-7):[ ]\b\b");
scanf("%d",&c);
if(c<0||c>7)
{
printf("请重新输入!!!\n");
Menu();
}
else
switch(c)///根据输入实现相应函数调用
{
case 1:Data();
break;
case 2:Statistics();
break;
case 3:Input();
break;
case 4:Modify();
break;
case 5:Delete();
break;
case 6:Salesperson();
break;
case 7:Sales();
break;
case 0:exit(0);
}
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//自定义结构体(商品信息)
struct woodinfo
{
int num;//商品编号
char name[20];//商品名称
char type[20];//商品种类(DVD)
float inprice;//进价
float outprice;//售价
int many;//数量
char soldmane[20];//供应商
} ;
struct Node
{
struct woodinfo data;
struct Node* next;
};
struct Node* list = NULL;//创建全局链表
//创建表头
struct Node* createHead()
{
//动态内存申请
struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
headNode->next = NULL;
return headNode;
}
//创建节点:为插入做准备
struct Node* createNode(struct woodinfo data)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data= data;
newNode->next= NULL;
return newNode;
}
//打印链表函数(仓库数据)
void printList(struct Node* headNode)
{
struct Node* pMove = headNode->next;
printf("商品编号\t名称\t类别\t进价\t售价\t数量\t供应商名字:\n");
while(pMove)
{
printf("%d\t\t%s\t%s\t%.1f\t%.1f\t%d\t%s\n",pMove->data.num,pMove->data.name,pMove->data.type,pMove->data.inprice,pMove->data.outprice,pMove->data.many,pMove->data.soldmane);
pMove = pMove->next;
}
}
//打印链表函数(商品数据)
void printListSimple(struct Node* headNode)
{
struct Node* pMove = headNode->next;
printf("名称\t类别\t售价\t数量\t供货商\n");
while(pMove)
{
printf("%s\t%s\t%.1f\t%d\t%s\n",pMove->data.name,pMove->data.type,pMove->data.outprice,pMove->data.many,pMove->data.soldmane);
pMove = pMove->next;
}
}
//链表插入函数
void insertNodeByHead(struct Node* headNode,struct woodinfo data)
{
struct Node* newNode = createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
//指定位置查找
struct Node* searchByName(struct Node* headNode,char* woodname)
{
struct Node* posNode = headNode->next;
while(posNode!=NULL&&strcmp(posNode->data.name,woodname))
{
posNode=posNode->next;
}
return posNode;
}
//指定位置删除
void deleteNodeByData(struct Node* headNode,char *name)
{
struct Node* posLeftNode = headNode;
struct Node*posNode = headNode->next;
//商品名称是字符串,字符串比较函数
while (posNode !=NULL && strcmp(posNode->data.name,name))
{
posLeftNode = posNode;
posNode = posLeftNode->next;
}
if(posNode ==NULL)
return;
else//删除代码
{
printf("删除成功!\n");
posLeftNode->next = posNode->next;
free(posNode);
posNode = NULL;
}
}
//菜单模块
void menu()
{
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("~~~~~~~~~~~~~销售管理系统~~~~~~~~~~~~~~~~~~~\n");
printf("0.退出销售管理系统\n");
printf("1.进货\n");
printf("2.退货\n");
printf("3.仓库详细信息展示\n");
printf("4.商品列表\n");
printf("5.商品列表2.0(按价格高低)\n");
printf("6.查找商品\n");
printf("请输入(0~6):");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
//文件存操作
void saveInforFormFile(const char* fileName, struct Node* headNode)
{
FILE* fp = fopen(fileName,"w");
struct Node* pMove = headNode->next;
while(pMove !=NULL)
{
fprintf(fp,"%d\t%s\t%s\t%.1f\t%.1f\t%d\t%s\n",pMove->data.num,pMove->data.name,pMove->data.type,pMove->data.inprice,pMove->data.outprice,pMove->data.many,pMove->data.soldmane);
pMove = pMove->next;
}
fclose(fp);
}
//文件读操作
void readInfoFromFile(const char* fileName,struct Node* headNode)
{
FILE* fp=fopen(fileName,"r");//第一次开始无文件创建文件
if (fp==NULL)//创建文件
{
fp = fopen(fileName,"w+");
}
struct woodinfo tempdata;
while(fscanf(fp,"%d\t%s\t%s\t%f\t%f\t%d\t%s",tempdata.num,tempdata.name,tempdata.type,tempdata.inprice,tempdata.outprice,tempdata.many,tempdata.soldmane)!=EOF)
{
insertNodeByHead(list,tempdata);
}
fclose(fp);
}
//冒泡排序法
void bubbleSortList(struct Node* headNode)
{
for(struct Node* p = headNode->next;p!=NULL;p=p->next)
{
for(struct Node* q=headNode->next;q->next!=NULL;q=q->next)
{
if(q->data.outprice>q->next->data.outprice)
{
//交换值
struct woodinfo tempdata = q->data;
q->data=q->next->data;
q->next->data=tempdata;
}
}
}
printListSimple(list);
}
//交互模块
void keyDown ()
{
int userKey = 0;
struct woodinfo tempwood;//产生一个临时的变量存储商品信息
struct Node* result =NULL;
scanf("%d",&userKey);
switch (userKey)
{
case 0:
printf("[退出]\n");
printf("退出成功!\n");
system("pause");
exit(0);
break;
case 1:
printf("[进货ing]\n");
printf("请依次输入:\n");
printf("商品编号 名称 类别 进价 售价 数量 供应商名字:\n");
scanf("%d%s%s%f%f%d%s",&tempwood.num,tempwood.name,tempwood.type,&tempwood.inprice,&tempwood.outprice,&tempwood.many,&tempwood.soldmane);
insertNodeByHead(list, tempwood);
saveInforFormFile("woodinfo.txt",list);
break;
case 2:
printf("[退货ing]\n");
printf("请输入需要退货的商品名称:\n");
scanf("%s",tempwood.name);
deleteNodeByData(list,tempwood.name);
saveInforFormFile("woodinfo.txt",list);
printf("退货成功!\n");
break;
case 3:
printf("[仓库详细信息展示]\n");
printList(list);
break;
case 4:
printf("[商品列表]\n");
printListSimple(list);
break;
case 5:
printf("[商品列表2.0(按价格高低)]\n");
bubbleSortList(list);
break;
case 6:
printf("[查找商品ing]\n");
printf("请输入需要查找的商品名称:\n");
scanf("%s",tempwood.name);
result = searchByName(list,tempwood.name);
if(result==NULL)
{
printf("未找到相关商品!\n");
}
else
{
printf("商品编号 名称 类别 进价 售价 数量 供应商名字:\n");
printf("%d\t\t%s\t%s\t%.1f\t%.1f\t%d\t%s\n",result->data.num,result->data.name,result->data.type,result->data.inprice,result->data.outprice,result->data.many,result->data.soldmane);
}
}
}
//主函数
int main()
{
list = createHead();//初始化全局链表
readInfoFromFile("woodinfo.txt",list);
while(1)
{
menu();
keyDown();
system("pause");//防止闪屏
system("cls");//清屏
}
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define NUM_SALESPERSONS 4
#define NUM_PRODUCTS 5
typedef struct SaleRecord {
int salesperson_id;
int product_id;
float sales_amount;
struct SaleRecord *next;
} SaleRecord;
int main() {
// 创建一个动态链表来存储销售记录
SaleRecord *sale_records = NULL;
// 循环读入销售记录
while (1) {
SaleRecord *new_record = malloc(sizeof(SaleRecord));
if (new_record == NULL) {
perror("Error allocating memory");
exit(1);
}
printf("Enter salesperson ID (1-%d): ", NUM_SALESPERSONS);
scanf("%d", &new_record->salesperson_id);
if (new_record->salesperson_id == 0) {
// 输入 0 停止输入
free(new_record);
break;
}
printf("Enter product ID (1-%d): ", NUM_PRODUCTS);
scanf("%d", &new_record->product_id);
printf("Enter sales amount: ");
scanf("%f", &new_record->sales_amount);
// 将新记录添加到动态链表的开头
new_record->next = sale_records;
sale_records = new_record;
}
// 遍历动态链表并打印销售记录
SaleRecord *current = sale_records;
while (current != NULL) {
printf("Salesperson %d sold product %d for %.2f\n",
current->salesperson_id, current->product_id, current->sales_amount);
current = current->next;
}
// 释放动态链表的内存
while (sale_records != NULL) {
SaleRecord *next = sale_records->next;
free(sale_records);
sale_records = next;
}
return 0;
}
这一类系统都是统一方法,数据的增删改查,参考例程太多了
这里是一些开源的 C 语言销售管理系统的例子:
GNU Sales: 这是一个开源的销售管理系统,用 C 语言开发,支持多种数据库。
OpenBravo: 这是一个基于 web 的开源销售管理系统,使用 Java 和 C 语言开发。
Compiere: 这是一个基于 Java 的开源销售管理系统,也可以使用 C 语言开发。
OpenERP: 这是一个基于 Python 的开源销售管理系统,也可以使用 C 语言开发。
望采纳!!点击该回答右侧的“采纳”按钮即可采纳!!
对于这个销售管理系统,您可以先考虑使用结构体来存储每个销售员和产品的信息,然后使用动态链表来存储每天的销售记录。每个结点包含当天的销售信息,包括销售员代号、产品代号和销售额。
对于统计功能,您可以遍历链表,对于每个结点,更新产品的总销售额和销售员的总销售额。
对于查询功能,您可以分别按照产品、销售员和销售额对链表进行排序,然后输出每个产品销售员当天的销售额表、销售员当天的销量首先,你需要定义一个结构体来表示销售便条信息,包括销售员的代号、产品的代号和产品的销售额。你还需要定义一个动态链表来存储这些信息。
下面是一个简单的例子,帮助你开始实现这个项目:
#include <stdio.h>
#include <stdlib.h>
// 定义销售便条信息结构体
typedef struct SalesNote {
int salesperson_id;
int product_id;
float sale_amount;
} SalesNote;
// 定义动态链表结点结构体
typedef struct Node {
SalesNote data;
struct Node *next;
} Node;
// 初始化动态链表
Node *initList() {
Node *head = malloc(sizeof(Node));
head->next = NULL;
return head;
}
// 在链表的末尾插入新的销售便条信息
void insertTail(Node *head, SaleData data) {
Node *newNode = malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
Node *cur = head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = newNode;
}
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define M 155
void ReadData(); ///读取
void Foreach();
void Menu(); ///菜单
void Data(); ///销售数据
void Statistics(); ///统计
void Input(); ///录入
void Modify(); ///修改
void Delete(); ///删除
void Salesperson(); ///销售员排序
void Sales(); ///销售额排序
void Choice(); ///选择
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}};///s:员工和产品信息
void Menu()
{
int c;
puts("********* 菜单 *********\n");
puts(" 1.查询销售信息\n");
puts(" 2.统计表\n");
puts(" 3.录入信息\n");
puts(" 4.修改信息\n");
puts(" 5.删除信息\n");
puts(" 6.销售员排序\n");
puts(" 7.销售额排序\n");
puts(" 0.退出\n");
puts("************************\n");
printf("请选择(0-7):[ ]\b\b");
scanf("%d",&c);
if(c<0||c>7)
{
printf("请重新输入!!!\n");
Menu();
}
else
switch(c)///根据输入实现相应函数调用
{
case 1:Data();
break;
case 2:Statistics();
break;
case 3:Input();
break;
case 4:Modify();
break;
case 5:Delete();
break;
case 6:Salesperson();
break;
case 7:Sales();
break;
case 0:exit(0);
}
}
下面是一个示例代码,该代码实现了上述功能需求:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SALESMAN 4 // 最多销售员数
#define MAX_PRODUCT 5 // 最多产品数
#define MAX_WEEK 7 // 最多保存周数
// 销售信息
typedef struct Sale {
int salesmanId; // 销售员编号
int productId; // 产品编号
int sales; // 销售额
} Sale;
// 动态链表结构
typedef struct Node {
Sale data;
struct Node* next;
} Node;
// 链表头
Node* head = NULL;
// 当前保存的周数
int currentWeek = 0;
// 历史销售信息
Sale sales[MAX_WEEK][MAX_SALESMAN][MAX_PRODUCT];
// 添加销售信息
void addSale(Sale sale) {
Node* newNode = malloc(sizeof(Node));
newNode->data = sale;
newNode->next = head;
head = newNode;
}
// 录入销售信息
void inputSales() {
int salesmanId, productId, sales;
printf("请输入销售员编号(1-%d)、产品编号(1-%d)、产品销售额: ", MAX_SALESMAN, MAX_PRODUCT);
scanf("%d%d%d", &salesmanId, &productId, &sales);
addSale((Sale){salesmanId, productId, sales});
}
// 统计每天每种产品的销售额
void calculateProductSales() {
int productSales[MAX_PRODUCT] = {0};
for (Node* p = head; p != NULL; p = p->next) {
productSales[p->data.productId - 1] += p->data.sales;
}
printf("每天每种产品的销售额:\n");
for (int i = 0; i < MAX_PRODUCT; i++) {
printf("产品%d: %d\n", i + 1, productSales[i]);
}
}
// 统计每位销售员的总销售额
void calculateSalesmanSales() {
int salesmanSales[MAX_SALESMAN] = {0};
for (Node* p = head; p != NULL; p = p->next) {
salesmanSales[p->data.salesmanId - 1] += p->data.sales;
}
printf("每位销售员的总销售额:\n");
for (int i = 0; i < MAX_SALESMAN; i++) {
printf("销售员%d: %d\n", i + 1, salesmanSales[i]);
}
}
// 查询每种产品销售员当天的销售额表(按金额降序)
void queryProductSales() {
int productSales[MAX_SALESMAN][MAX_PRODUCT] = {0};
for (Node* p = head; p != NULL; p = p->next) {
productSales[p->data.salesmanId - 1][p->data.productId - 1] += p->data.sales;
}
printf("每种产品销售员当天的销售额表:\n");
for (int i = 0; i < MAX_PRODUCT; i++) {
printf("产品%d: ", i + 1);
for (int j = 0; j < MAX_SALESMAN; j++) {
printf("%d ", productSales[j][i]);
}
printf("\n");
}
}
// 查询销售员当天的产品任务表(按金额降序)
void querySalesmanTasks() {
int salesmanTasks[MAX_SALESMAN][MAX_PRODUCT] = {0};
for (Node* p = head; p != NULL; p = p->next) {
salesmanTasks[p->data.salesmanId - 1][p->data.productId - 1] += p->data.sales;
}
printf("销售员当天的产品任务表:\n");
for (int i = 0; i < MAX_SALESMAN; i++) {
printf("销售员%d: ", i + 1);
for (int j = 0; j < MAX_PRODUCT; j++) {
printf("%d ", salesmanTasks[i][j]);
}
printf("\n");
}
}
// 查询产品当天的销量表(按金额降序)
void queryProductSalesVolume() {
int productSalesVolume[MAX_PRODUCT] = {0};
for (Node* p = head; p != NULL; p = p->next) {
productSalesVolume[p->data.productId - 1] += p->data.sales;
}
printf("产品当天的销量表:\n");
for (int i = 0; i < MAX_PRODUCT; i++) {
printf("产品%d: %d\n", i + 1, productSalesVolume[i]);
}
}
// 将当天销售信息保存到历史销售信息中
void saveSales() {
currentWeek = (currentWeek + 1) % MAX_WEEK;
for (int i = 0; i < MAX_SALESMAN; i++) {
for (int j = 0; j < MAX_PRODUCT; j++) {
sales[currentWeek][i][j] = (Sale){0};
}
}
for (Node* p = head; p != NULL; p = p->next) {
sales[currentWeek][p->data.salesmanId - 1][p->data.productId - 1] = p->data;
}
}
// 统计一周每种产品销量
void calculateProductSalesVolume() {
int productSalesVolume[MAX_PRODUCT] = {0};
for (int i = 0; i < MAX_WEEK; i++) {
for (int j = 0; j < MAX_SALESMAN; j++) {
for (int k = 0; k < MAX_PRODUCT; k++) {
productSalesVolume[k] += sales[i][j][k].sales;
}
}
}
printf("一周每种产品销量:\n");
for (int i = 0; i < MAX_PRODUCT; i++) {
printf("产品%1: %d\n", i + 1, productSalesVolume[i]);
}
}
// 统计销售员的产品销售任务表
void calculateSalesmanProductTasks() {
int salesmanProductTasks[MAX_SALESMAN][MAX_PRODUCT] = {0};
for (int i = 0; i < MAX_WEEK; i++) {
for (int j = 0; j < MAX_SALESMAN; j++) {
for (int k = 0; k < MAX_PRODUCT; k++) {
salesmanProductTasks[j][k] += sales[i][j][k].sales;
}
}
}
printf("销售员的产品销售任务表:\n");
for (int i = 0; i < MAX_SALESMAN; i++) {
printf("销售员%d: ", i + 1);
for (int j = 0; j < MAX_PRODUCT; j++) {
printf("%d ", salesmanProductTasks[i][j]);
}
printf("\n");
}
}
// 查询一周每种产品销量表(按金额降序)
void queryProductSalesVolumeHistory() {
int productSalesVolume[MAX_PRODUCT] = {0};
for (int i = 0; i < MAX_WEEK; i++) {
for (int j = 0; j < MAX_SALESMAN; j++) {
for (int k = 0; k < MAX_PRODUCT; k++) {
productSalesVolume[k] += sales[i][j][k].sales;
}
}
}
printf("一周每种产品销量表:\n");
for (int i = 0; i < MAX_PRODUCT; i++) {
printf("产品%d: %d\n", i + 1, productSalesVolume[i]);
}
}
// 查询销售员的产品销售任务表(按金额降序)
void querySalesmanProductTasksHistory() {
int salesmanProductTasks[MAX_SALESMAN][MAX_PRODUCT] = {0};
for (int i = 0; i < MAX_WEEK; i++) {
for (int j = 0; j < MAX_SALESMAN; j++) {
for (int k = 0; k < MAX_PRODUCT; k++) {
salesmanProductTasks[j][k] += sales[i][j][k].sales;
}
}
}
printf("销售员的产品销售任务表:\n");
for (int i = 0; i < MAX_SALESMAN; i++) {
printf("销售员%d: ", i + 1);
for (int j = 0; j < MAX_PRODUCT; j++) {
printf("%d ", salesmanProductTasks[i][j]);
}
printf("\n");
}
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
Sale sale;
scanf("%d%d%d", &sale.salesmanId, &sale.productId, &sale.sales);
addNode(sale);
}
calculateSalesmanSales();
queryProductSales();
querySalesmanTasks();
queryProductSalesVolume();
saveSales();
calculateProductSalesVolume();
calculateSalesmanProductTasks();
queryProductSalesVolumeHistory();
querySalesmanProductTasksHistory();
return 0;
}
可以参考一下这个课程设计,应该会有帮助的,https://blog.csdn.net/qq_39521465/article/details/86707431
建议你参考这篇,希望对你所有帮助
https://www.xz577.com/j/285243.html