C语言销售管理系统设计

设计一个销售管理系统,假设某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1)销售员的代号,2)产品的代号,3)这种产品的当天的销售额。要求每位销售员每天必须上缴1张便条。

一、功能需求说明(必须采用结构体和动态链表实现)
1、销售便条信息录入,信息包括销售员代号、产品代号、产品销售额。
2、统计功能,统计每天每种产品的销售额、销售员的总销售额。
3、查询功能,可查询每种产品销售员当天的销售额表(按金额降序)、销售员当天的产品任务表(按金额降序)、产品当天的销量表(按金额降序)
4、历史数据功能,需要至少保存一周(7天)销售信息
5、历史数据统计功能,统计一周每种产品销量,销售员的产品销售任务表
6、历史数据查询功能,统计一周每种产品销量表(按金额降序),销售员的产品销售任务表(按金额降序)
7、数据或报表以文件形式进行保存

https://www.jb51.net/article/241752.htm

可参考该实例,链接:https://blog.csdn.net/lz161530245/article/details/84669415?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-11-84669415-blog-125302775.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-11-84669415-blog-125302775.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=16
【注解详细】

可以参考一下:
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