销售管理系统设计c语言

某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1)销售员的代号,2)产品的代号,3)这种产品的当天的销售额。每位销售员每天上缴1张便条。试设计一个便条管理系统,使之能提供以下功能:1、便条信息录入功能(便条信息用文件保存)--输入2、收集到了上个月的所有便条后,读取销售情况1)计算每个人每种产品的销售额。2)按销售额对销售员进行排序,输出排序结果(销售员代号)3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)3、使用链表进行增加、删除、修改便条信息,并将更新后的信息保存至文件。

第一步可以从定义结构体开始,来存储便条的信息,如:

struct SalesNote {
    int salespersonID;
    int productID;
    float salesAmount;
};

然后,可以实现便条信息的录入功能,如:

void inputSalesNote(struct SalesNote *salesNotes, int *count) {
    // 实现便条信息的录入
}

接下来,可以实现销售情况的统计,如:

void calculateSales(struct SalesNote *salesNotes, int count) {
    // 实现销售情况的统计
}

再然后,可以实现产品总销售额的统计,如:

void calculateProductSales(struct SalesNote *salesNotes, int count) {
    // 实现产品总销售额的统计
}

最后,可以实现链表的增删改,如:

struct SalesNoteNode {
    struct SalesNote salesNote;
    struct SalesNoteNode *next;
};

void addSalesNote(struct SalesNoteNode **head, struct SalesNote salesNote) {
    // 实现链表的增加
}

void deleteSalesNote(struct SalesNoteNode **head, struct SalesNote salesNote) {
    // 实现链表的删除
}

void modifySalesNote(struct SalesNoteNode *head, struct SalesNote salesNote) {
    // 实现链表的修改
}

参考下面方案

1、便条信息录入功能:您可以使用 fopen() 函数打开文件,然后使用 fprintf() 函数将便条信息写入文件,最后使用 fclose() 函数关闭文件。

2、读取销售情况:您可以使用 fopen() 函数打开文件,然后使用 fscanf() 函数读取便条信息,并使用一个二维数组(每个销售员和每种产品都有一个统计数)统计每个销售员和每种产品的销售额。排序可以使用 qsort() 函数或自定义的排序函数。

3、链表操作:您可以使用结构体定义链表,并使用链表操作(如增加,删除,修改)实现便条信息的管理。更新后的信息可以使用 fopen() 函数打开文件,然后使用 fprintf() 函数将信息写入文件,最后使用 fclose() 函数关闭文件。

参考下面实例【销售管理系统设计(c语言实现)】,链接:https://blog.csdn.net/lz161530245/article/details/84669415?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-84669415-blog-125302775.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-84669415-blog-125302775.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=15

https://blog.csdn.net/weixin_42332665/article/details/123617632


int main(){

    extern Employer employer[], *ptrtempemp[];
    extern Company  company[], *ptrtempcomp[];
    extern Customer customer[], *ptrtempcus[];
    extern Product product[], *ptrtemppd[];
    extern Project project[], *ptrtemppj[];

    int manumber;
    
/* 一、读取文件信息进行初始化 */
    while(1){
        system("cls");
        smsinit();
        printf("\n******************大饼销售管理系统******************\n");
        printf("****************版本:v1.0-2022-3-13******************\n");
        printf("功能如下,请选择相应功能前的编号:\n");
        printf("\n1-查看\t\t2-查询\t\t3-录入\n");
        printf("0-退出系统\n");

        scanf("%d", &manumber);getchar();
        if(manumber == 0)
            exit(0);
        while(manumber){
            //scanf("%d", &manumber);getchar();
            char *str;
            int n;
            switch(manumber){
                case 1:
                    system("cls");
                    printf("\n******************大饼销售管理系统******************\n");
                    printf("****************查看功能区******************\n");
                    printf("功能如下,请选择相应功能前的编号:\n");
                    printf("\n1-查看所有员工\t\t2-查看所有客户\t\t3-查看所有项目\n");
                    printf("0-返回上级菜单\n");
                    printf("你的选择:");
                    scanf("%d", &manumber);getchar();
                    switch(manumber){
                        case 1:
                            if(employercount > 0){
                                for(int i = 0; i < employercount; i++){
                                    printf("%d  %s %s\t%s\t%s  %s  %s\n", employer[i].id, employer[i].name.firstname,
                                        employer[i].name.secondname, employer[i].tel, employer[i].department,
                                        employer[i].job, employer[i].email);
                                }
                            }else{
                                printf("\n无员工记录!!!\n");
                            }
                            system("pause");
                            break;
                        case 2:
                            if(customercount > 0){
                                for(int i = 0; i < customercount; i++){
                                    printf("%d- %s %s\n%s\n%s %s %s\n", customer[i].id, customer[i].name.firstname,
                                        customer[i].name.secondname, customer[i].ptrcompany->company, customer[i].department, 
                                        customer[i].job, customer[i].tel);
                                }
                            }else{
                                printf("\n无客户记录!!!\n");
                            }
                            system("pause");
                            manumber = 1;
                            break;
                        case 3:
                            if(projectcount > 0){
                                for(int i = 0; i < projectcount; i++){
                                    printf("%d  项目:%s\n预估金额(元):%.2lf\t录入时间:%d-%d-%d\t项目业主:%s\t跟单员:%s%s\n", 
                                        project[i].id, project[i].projectname, project[i].total, project[i].year, project[i].month,
                                        project[i].day,project[i].ptrcompany->company, 
                                        project[i].ptremployer->name.firstname,
                                        project[i].ptremployer->name.secondname);
                                }
                            }else{
                                printf("\n无项目记录!!!\n");
                            }
                            system("pause");
                            manumber = 1;
                            break;
                        case 0:
                            manumber = 0;
                            break;
                        default:
                            break;
                    }
                    break;
                case 2:
                    system("cls");
                    printf("\n******************大饼销售管理系统******************\n");
                    printf("****************查询功能区******************\n");
                    printf("功能如下,请选择相应功能前的编号:\n");
                    printf("\n1-查询员工\t\t2-查询客户\t\t3-查询项目\n");
                    printf("\n4-查询产品\t\t0-返回上级菜单\n");
                    printf("你的选择:");
                    scanf("%d", &manumber);getchar();

                    switch(manumber){
                        case 1:
                            printf("\n请输入要查询的员工姓名:");                            
                            str = (char *)malloc(MAXNAMELEN*2*sizeof(char));
                            tostring(str, MAXNAMELEN*2*sizeof(char));
                            n = searchemployer(employer, str, ptrtempemp);
                            if(n > 0){
                                printf("共有%d条匹配:\n", n);
                                for(int i = 0; i < n; i++){
                                    printf("工号:%d 姓名:%s%s  电话:%s  邮箱:%s  部门:%s\t职位:%s\n", (*(ptrtempemp+i))->id,
                                        (*(ptrtempemp+i))->name.firstname, (*(ptrtempemp+i))->name.secondname,
                                        (*(ptrtempemp+i))->tel, (*(ptrtempemp+i))->email, (*(ptrtempemp+i))->department,
                                        (*(ptrtempemp+i))->job);
                                }
                            }else{
                                printf("\n不存在此姓名员工!!\n");
                            }
                            free(str);
                            system("pause");
                            manumber = 2;
                            break;
                        case 2:
                            printf("\n请输入要查询的客户姓名:");
                            str = (char *)malloc(MAXNAMELEN*2*sizeof(char));
                            tostring(str, MAXNAMELEN*2*sizeof(char));
                            n = searchcus(customer, str, ptrtempcus);
                            if(n > 0){
                                printf("共有%d条匹配:\n", n);
                                for(int i = 0; i < n; i++){
                                    printf("工号:%d 姓名:%s%s  电话:%s  邮箱:%s  公司:%s  部门:%s  职位:%s\n", (*(ptrtempcus+i))->id,
                                        (*(ptrtempcus+i))->name.firstname, (*(ptrtempcus+i))->name.secondname,
                                        (*(ptrtempcus+i))->tel, (*(ptrtempcus+i))->email, (*(ptrtempcus+i))->ptrcompany->company, 
                                        (*(ptrtempcus+i))->department,(*(ptrtempcus+i))->job);
                                }
                            }else{
                                printf("\n不存在此姓名员工!!\n");
                            }
                            free(str);
                            system("pause");
                            manumber = 2;
                            break;
                        case 3:
                            printf("\n请输入要查询的项目名:");                            
                            str = (char *)malloc(50*sizeof(char));
                            tostring(str, MAXNAMELEN*2*sizeof(char));
                            n = searchpj(project, str, ptrtemppj);
                            if(n > 0){
                                printf("共有%d条匹配:\n", n);
                                for(int i = 0; i < n; i++){
                                    printf("项目编号:%d 项目名:%s  预估金额(元):%.2lf  业主:%s 业务员:%s%s  录入时间:%d-%d-%d\n", 
                                        (*(ptrtemppj+i))->id, (*(ptrtemppj+i))->projectname, (*(ptrtemppj+i))->total, 
                                        (*(ptrtemppj+i))->ptrcompany->company,
                                        (*(ptrtemppj+i))->ptremployer->name.firstname, (*(ptrtemppj+i))->ptremployer->name.secondname,
                                        (*(ptrtemppj+i))->year, (*(ptrtemppj+i))->month, (*(ptrtemppj+i))->day);
                                }
                            }else{
                                printf("\n不存在该项目!!\n");
                            }
                            free(str);
                            system("pause");
                            manumber = 2;
                            break;
                        case 4:
                            printf("\n请输入要查询的产品名或者型号:\n");
                            str = (char *)malloc(sizeof(product[0].productname));
                            tostring(str, sizeof(product[0].productname));
                            n = searchpd(product, str, ptrtemppd);
                            if(n > 0){
                                printf("共有%d条匹配:\n", n);
                                for(int i = 0; i < n; i++){
                                    printf("产品编号:%d 产品名称:%s  产品型号:%s  单价:%.2lf  描述:%s\n", 
                                        (*(ptrtemppd+i))->id,(*(ptrtemppd+i))->productname, (*(ptrtemppd+i))->type, 
                                        (*(ptrtemppd+i))->price, (*(ptrtemppd+i))->description);
                                }
                            }else{
                                printf("\n不存在该产品!!\n");
                            }
                            free(str);
                            manumber = 2;
                            system("pause");
                            break;
                    }
                    break;
                case 3:
                    system("cls");
                    printf("\n******************大饼销售管理系统******************\n");
                    printf("****************录入功能区******************\n");
                    printf("功能如下,请选择相应功能前的编号:\n");
                    printf("\n1-录入新员工\t\t2-录入新业主单位\t\t3-录入新客户\n");
                    printf("\n4-录入新项目\t\t5-录入新产品\t\t0-返回上级菜单\n");
                    printf("你的选择:");
                    scanf("%d", &manumber);getchar();
                    char ch;
                    int k;
                    switch(manumber){
                        case 1:
                            printf("\n开始录入新员工数据:\n");
                            employercount = newemployer(employer, employercount);
                            printf("\n输入y/Y保存数据    :");
                            scanf("%c", &ch);getchar();
                            if(ch == 'y' || ch == 'Y'){
                                FILE *fp;
                                fp = fopen(DIR_EMP, "a");
                                writedata(fp, employer, "%d;%s;%s;%s;%s;%s;%s;\n", employer[employercount-1].id,
                                    employer[employercount-1].name.firstname, employer[employercount-1].name.secondname,
                                    employer[employercount-1].tel, employer[employercount-1].department, 
                                    employer[employercount-1].job, employer[employercount-1].email);
                                fclose(fp);
                            }else{
                                employercount--;
                            }
                            manumber = 3;
                            system("pause");
                            break;
                        case 2:
                            printf("\n开始录入新业主单位:");
                            
                            str = (char *)malloc(sizeof(company[0].company));
                            printf("\n查询是业主单位否存在:\n");
                            tostring(str, sizeof(company[0].company));
                            n = searchcompany(company, str, ptrtempcomp);
                            if(n > 0){
                                printf("\n存在相似业主单位,共%d条数据:\n", n);
                                for(int i = 0; i < n; i++){
                                    printf("%d  %s\n", i+1, (*(ptrtempcomp+i))->company);
                                }
                                //printf("\n按0");
                            }else{
                                printf("不存在,可以新增录入:\n");
                                companycount = newcompany(company, companycount);
                                printf("\n输入y/Y保存数据    :");
                                scanf("%c", &ch);getchar();
                                if(ch == 'y' || ch == 'Y'){
                                    FILE *fp;
                                    fp = fopen(DIR_COM, "a");
                                    writedata(fp, company, "%d;%s;%s;\n", company[companycount-1].id,
                                        company[companycount-1].company, company[companycount-1].address);
                                    fclose(fp);
                                }else{
                                    employercount--;
                                }
                            }
                            free(str);
                            manumber = 3;
                            system("pause");
                            break;
                        case 3:
                            printf("\n开始录入新客户:\n");
                            customercount = newcustomer(customer, customercount);
                            printf("\n输入业主单位查询:\n");
                    
                            str = (char *)malloc(sizeof(company[0].company));
                            tostring(str, sizeof(company[0].company));
                            n = searchcompany(company, str, ptrtempcomp);
                            free(str);
                            if(n > 0){
                                for(int i = 0; i < n; i++){
                                    printf("%d- %s\n", i+1, (*(ptrtempcomp+i))->company);
                                }
                                printf("\n输入所选择的业主序号,若无请输入 0 返回:");
                                scanf("%d", &k);getchar();
                                if(k != 0 && k <= n)
                                    customer[customercount-1].ptrcompany = (*(ptrtempcomp+k-1));
                                else{
                                    printf("\n不存在此业主单位,需要新建业主单位后再添加客户!!\n");
                                    customercount--;
                                    manumber = 3;
                                    system("pause");
                                    break;
                                }
                            }else{
                                printf("\n不存在此业主单位,需要新建业主单位后再添加客户!!\n");
                                customercount--;
                                manumber = 3;
                                system("pause");
                                break;
                            }
                            printf("\n输入y/Y保存数据    :");
                            scanf("%c", &ch);getchar();
                            if(ch == 'y' || ch == 'Y'){
                                FILE *fp;
                                fp = fopen(DIR_CUS, "a");
                                writedata(fp, customer, "%d;%s;%s;%s;%s;%s;%s;%s;%s;%s;\n", customer[customercount-1].id,
                                    customer[customercount-1].name.firstname, customer[customercount-1].name.secondname,
                                    customer[customercount-1].ptrcompany->company, customer[customercount-1].department,
                                    customer[customercount-1].job, customer[customercount-1].tel, customer[customercount-1].email,
                                    customer[customercount-1].address, customer[customercount-1].description);
                                fclose(fp);
                            }else{
                                customercount--;
                            }
                            manumber = 3;
                            system("pause");
                            break;
                        case 4:
                            printf("\n开始录入新项目:\n");
                            projectcount = newproject(project, projectcount);
                            printf("\n查询项目业主单位:\n");
                            str = (char *)malloc(sizeof(company[0].company));
                            tostring(str, sizeof(company[0].company));
                            n = searchcompany(company, str, ptrtempcomp);
                            free(str);
                            if(n > 0){
                                printf("共有%d条匹配:\n", n);
                                for(int i = 0; i < n; i++){
                                    printf("%d- %s\n", i+1, (*(ptrtempcomp+i))->company);
                                }
                                printf("\n请输入业主前代号,若没有,请输入 0 返回:");
                                scanf("%d", &k);getchar();
                                if(k != 0 && k <= n){
                                    project[projectcount-1].ptrcompany = *(ptrtempcomp+k-1);
                                }else{
                                    printf("\n不存在此业主单位,需要新建业主单位后再添加客户!!\n");
                                    projectcount--;
                                    manumber = 3;
                                    system("pause");
                                    break;
                                }
                            }else{
                                printf("\n不存在此业主单位,需要新建业主单位后再添加客户!!\n");
                                projectcount--;
                                manumber = 3;
                                system("pause");
                                break;
                            }
                            printf("\n查询项目跟单销售是否存在:");
                            str = (char *)malloc(MAXNAMELEN*2*sizeof(char));
                            tostring(str, MAXNAMELEN*2*sizeof(char));
                            n = searchemployer(employer, str, ptrtempemp);
                            free(str);
                            if(n > 0){
                                printf("\n共有%d条匹配:\n", n);
                                for(int i = 0; i < n; i++){
                                    printf("%d- %s %s  %s\n", i+1, (*(ptrtempemp+i))->name.firstname, (*(ptrtempemp+i))->name.secondname,
                                        (*(ptrtempemp+i))->department);
                                }
                                printf("请输入职员前代号选择,若没有,请按 0 返回\n");
                                scanf("%d", &k);getchar();
                                if(k != 0 && k <= n){
                                    project[projectcount-1].ptremployer = *(ptrtempemp+k-1);
                                }else{
                                    printf("\n不存在此跟单销售,需要新建销售后再建立!!\n");
                                    projectcount--;
                                    manumber = 3;
                                    system("pause");
                                    break;
                                }
                            }else{
                                printf("\n不存在此跟单销售,需要新建销售后再建立!!\n");
                                projectcount--;
                                manumber = 3;
                                system("pause");
                                break;
                            }
                            printf("\n查询项目客户联系人是否存在:");
                            str = (char *)malloc(MAXNAMELEN*2*sizeof(char));
                            tostring(str, MAXNAMELEN*2*sizeof(char));
                            n = searchcus(customer, str, ptrtempcus);
                            free(str);
                            if(n > 0){
                                printf("\n共有%d条匹配:\n", n);
                                for(int i = 0; i < n; i++){
                                    printf("%d- %s %s  %s\n", i+1, (*(ptrtempcus+i))->name.firstname, (*(ptrtempcus+i))->name.secondname,
                                        (*(ptrtempcus+i))->ptrcompany->company);
                                }
                                printf("请输入职员前代号选择,若没有,请按 0 返回\n");
                                scanf("%d", &k);getchar();
                                if(k != 0 && k <= n){
                                    project[projectcount-1].ptrcustomer = *(ptrtempcus+k-1);
                                }else{
                                    printf("\n不存在此联系人,需要新建后再建立!!\n");
                                    projectcount--;
                                    manumber = 3;
                                    system("pause");
                                    break;
                                }
                            }else{
                                printf("\n不存在此联系人,需要新建后再建立!!\n");
                                projectcount--;
                                manumber = 3;
                                system("pause");
                                break;
                            }
                            printf("\n输入y/Y保存数据    :");
                            scanf("%c", &ch);getchar();
                            if(ch == 'y' || ch == 'Y'){
                                FILE *fp;
                                fp = fopen(DIR_PJ, "a");
                                writedata(fp, project, "%d;%s;%d;%d;%d;%.2lf;%s;%s;%s;%s;%s;%s;\n", project[projectcount-1].id,
                                    project[projectcount-1].projectname, project[projectcount-1].year,
                                    project[projectcount-1].month, project[projectcount-1].day,
                                    project[projectcount-1].total, project[projectcount-1].description,
                                    project[projectcount-1].ptrcompany->company,
                                    project[projectcount-1].ptrcustomer->name.firstname,
                                    project[projectcount-1].ptrcustomer->name.secondname,
                                    project[projectcount-1].ptremployer->name.firstname,
                                    project[projectcount-1].ptremployer->name.secondname);
                                fclose(fp);
                            }else{
                                customercount--;
                            }
                            manumber = 3;
                            system("pause");
                            break;
                        case 5:
                            printf("\n开始录入新产品:\n");
                            productcount = newproduct(product, productcount);
                            printf("\n输入y/Y保存数据");
                            scanf("%c", &ch);getchar();
                            if(ch == 'y' || ch == 'Y'){
                                FILE *fp;
                                fp = fopen(DIR_PD, "a");
                                writedata(fp, product, "%d;%s;%s;%lf;%s;\n", product[productcount-1].id,
                                    product[productcount-1].productname, product[productcount-1].type,
                                    product[productcount-1].price, product[productcount-1].description);
                                fclose(fp);
                            }else{
                                productcount--;
                            }
                            manumber = 3;
                            system("pause");
                            break;
                    }
                    break;
                default:
                    break;
            }

        }

    }
    return 0;
}

https://www.jb51.net/article/241752.htm
看看吧,望采纳,基本和你的一样


#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 <conio.h>
#include <string.h>
#include <stdlib.h>
#define M 155
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
    /**feof是输入输出函数,检查文件是否结束,如结束,则返回非零值,
    否则返回0 .函数原型为:int feof(FILE *fp)**/
        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");
    /**接着readdata()统计的文本中便条的信息到结构体数组里,
    将添加的信息首先保存在那些信息的后面**/
    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;
    }
}
 

 

完整代码:
https://blog.csdn.net/lz161530245/article/details/84669415

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

题主,这个问题我来替你解决,若有帮助,还望采纳,点击回答右侧采纳即可。
代码参考如下:

#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include<string.h>
typedef struct                //定义结构体变量
{
    char date[10];              //表单日期 
    int c;                    //销售员号 
    int c1;                         //产品号 
    int c2;
    int c3;
    int c4;
    int c5;
} CP;

int main()                                                //主函数 
{
    int caidan();                                        //声明函数 
    int shur();
    int xianshi();
    int chazhao();
    int zengjia();
    int xiugai();
    int tongji(); 
    int a,i;
    caidan();
    printf("\n输入序号选择程序:");
    for(i=1;;i++)
    {
        scanf("%d",&a);  
        switch(a)
        {
            case 1:caidan();      //主菜单 
                    break;
            case 2:system("cls");
                    shur();        //便条输入 
                    break;
            case 3:system("cls");
                    xianshi();       //显示所有便条 
                    break;
            case 4:system("cls");
                    chazhao();       //查找数据 
                    break;   
            case 5:system("cls");
                    zengjia();      //增加便条 
                    break;
            case 6:system("cls");
                    xiugai();        //修改便条 
                    break;
            case 7:system("cls");
                    tongji();       //统计表单 
                    break;
        }
        if(a==0)
        {
            break;
        }
        printf("\n输入序号选择程序:");
    }
    return 0;
}

 

int caidan()                                                  //菜单函数
{
    printf("\n1:菜单\n2:输入\n3:显示\n4:查找\n5:追加\n6:修改\n7:统计\n0:退出\n"); 
}
int shur()                                               /*便条输入*/
{
    int i=0,num;                               //定义变量
    FILE *fp;
    CP t[100];
    printf("请输入要写的便条条数:\n");
    scanf("%d",&num);
    printf("日期 销售员   b1 b2 b3 b4 b5  ");
    for(i=0; i<num; i++)
//获取数据
    {
        printf("\n--------------------------------------------------------------\n");
        scanf("%s\t%d\t%d\t%d\t%d\t%d\t%d",&t[i].date,&t[i].c,&t[i].c1,&t[i].c2,&t[i].c3,&t[i].c4,&t[i].c5);
    }
    if((fp=fopen("d:\\销售记录表.txt","ab"))==NULL)
    {
        printf("不能打开文件\n");
        exit(1);
    }
    for(i=0; i<num; i++)
    {
        fprintf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);         //打印数据到文档中
        fprintf(fp,"\r\n");
    }
    fclose(fp);
    printf("\n--------------------------------------------------------------\n");
    
    printf("输入成功,按空格结束,并返回主菜单\n");   
    getch();
    caidan();                                              //主菜单 
}
int xianshi()                                            //输出表单 
{
    FILE *fp;
    char ch;
    if((fp=fopen("D:\\销售记录表.txt","r"))==NULL)
    {
        printf("0000");
        exit(0);
    }
    rewind(fp);
    printf("表单:\n日期\t销售员\t1号\t2号\t3号\t4号\t5号\n");
    printf("\n--------------------------------------------------------------\n");
    while((ch=fgetc(fp))!=EOF)
    {
        putchar(ch);
    } 
    printf("\n--------------------------------------------------------------\n");
    fclose(fp);
    
    printf("输出成功,按空格结束,并返回主菜单\n");   
    getch();
    caidan();                                              //主菜单 
}
int chazhao()                                          //查找数据 
{
    FILE *fp;
    int i=0,a,b,n=0,k=1;
    char ch;
    CP t[100];
    if((fp=fopen("D:\\销售记录表.txt","r"))==NULL)
    {
        printf("0000");
        exit(0);
    }
    printf("查找销售员请输入1\n查找产品请输入2\n退出请输入3\n");
    scanf("%d",&a);
    if(a==1)
    {
        while(fscanf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",&t[i].date,&t[i].c,&t[i].c1,&t[i].c2,&t[i].c3,&t[i].c4,&t[i].c5)!=EOF)    //提取数值 
        {
            i++;
            n++;          
        }
        fclose(fp);
        printf("输入销售员编号:");
        scanf("%d",&b);
        printf("\n");
        printf("表单:\n日期\t销售员\t1号\t2号\t3号\t4号\t5号\n");
        printf("\n--------------------------------------------------------------\n");
        for(i=0;i<=n;i++)
            if(t[i].c==b)
            {
                printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
                k=0;
            }
        if(k)
            printf("无记录\n");
            
    printf("输出成功,按空格结束,并返回主菜单\n");   
    getch();
    caidan();                                              //主菜单 
    }
    if(a==2)
    {
        while(fscanf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",&t[i].date,&t[i].c,&t[i].c1,&t[i].c2,&t[i].c3,&t[i].c4,&t[i].c5)!=EOF)
        {
            i++;
            n++;
        }
        fclose(fp);
        printf("输入产品编号:");
        scanf("%d",&b);
        printf("\n");
        printf("表单:\n日期\t销售员\t1号\t2号\t3号\t4号\t5号\n");    
        printf("\n--------------------------------------------------------------\n");
        switch(b)
        {
            case 1:for(i=0;i<n;i++)
                    if(t[i].c1!=0)
                        printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
                    break;
            case 2:for(i=0;i<n;i++)
                    if(t[i].c2!=0)
                        printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
                    break;
                        
            case 3:for(i=0;i<n;i++)
                    if(t[i].c3!=0)
                        printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
                    break;
                        
            case 4:for(i=0;i<n;i++)
                    if(t[i].c4!=0)
                        printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
                    break;
                        
            case 5:for(i=0;i<n;i++)
                    if(t[i].c5!=0)
                        printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
                    break;
        }
        
    printf("输出成功,按空格结束,并返回主菜单\n");   
    getch();
    caidan();                                              //主菜单             
    }
    if(a==3)
    {
    printf("按空格结束,并返回主菜单\n");   
    getch();
    caidan();                                              //主菜单     
    }
}

实现上述功能的管理系统的框架如下:首先,系统可以具有一个文件用于输入和存储便条信息。然后实现便条信息的读取、计算和排序功能,由程序根据销售员的编号和产品的编号读取便条中的销售额,然后计算每个人每种产品的销售额,将销售额排序保存到排序结果数组中。并且统计每种产品的总销售额,对产品按销售额从高到低进行排序,将排序结果保存到排序结果数组中。最后,使用链表支持增加、删除和修改便条信息,将更新后的信息保存至文件中。