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

本文实例为大家分享了C语言实现销售管理系统设计的具体代码,供大家参考,具体内容如下

某公司有四个销售员(编号: 1-4), 负责销售五种产品(编号: 1-5)。 每个销售员都将当天出售的每种产品各写一 张便条交上来。每张便条包含内容:销售员的代号、产品的代号、这种产品的当天的销售额。每位销售员每天上缴1张便条。

试设计一个便条管理系统,使之能提供以下功能:

1、系统以菜单方式工作

2、便条信息录入功能——输入(支持便条信息文件导入)

3、便条信息修改功能

4、便条信息删除功能

5、收集到了上个月的所有便条后,读取销售情况

1)计算每个人每种产品的销售额。

2)按销售额对销售员进行排序,输出排序结果(销售员代号)

3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)

详情请参考代码,注释写的很详细,希望能给你帮助.

最后的最后有截图展示效果.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define M 155
 
///这些函数下面会详细的介绍的滴!
void detail();
void foreach();
void menu();
void product();
void readdata();
void seller();
void total();
void choice();
void add();
void deleteing();
void update();
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}};///用户保存员工和产品信息
 
///从文件读取数据
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;
    }
}
 
/**更新便条信息流程:新建一个临时文件,将原文件里的东西复制到临时文件中,在复制的过程中,
需要修改的东西修改之后再放入临时文件,然后删除原文件,将临时文件改名为原文件的名字**/
void update()
{
    printf("请输入您要修改的便条的信息:销售代码,产品代码,销售额\n");
    int a,b,c,d,e,x,y,z;
    scanf("%d %d %d",&a,&b,&c);
    printf("请问您要修改该便条中那一项信息:\n(1)销售代码\n(2)产品代码\n(3)销售额\n");
    scanf("%d",&d);
    printf("请问您要将该项信息修改成什么(请输入数字):\n");
    scanf("%d",&e);
    printf("您选择的便条正在修改中~~~~~\n");
    FILE *fin=fopen("d:\\list.txt","r");
    FILE *ftp=fopen("d:\\tmp.txt","w");  ///是充当临时文件作用
    if(!fin)
    {
        printf("不能打开list.txt文件\n");
        exit(1);
    }
    if(!ftp)
    {
        printf("不能打开tmp.txt文件\n");
        exit(1);
    }
    int m=0;///该变量是控制写入文本时首行不自动换行
    ///开始复制
    switch(d)///根据选项修改(1)销售代码 (2)产品代码 (3)销售额
    {
        case 1:///(1)销售代码
        {
               for(int i=0;!feof(fin);i++)
                {
                    fscanf(fin,"%d %d %d\n",&x,&y,&z);
                    if(x==a&&y==b&&z==c)///检验是要修改的行吗
                    {
                        x=e;
                        if(m==0)
                        {
                            fprintf(ftp,"%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
                            m++;
                        }
                        else
                            fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
                    }
                    else
                    {
                        if(m==0)
                        {
                            fprintf(ftp,"%d\t%d\t%d",x,y,z);///将原本的数据写入临时文件
                            m++;
                        }
                        else
                            fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将原本过的数据写入临时文件
                    }
                }
            }
            break;
 
        ///以下代码同理可得
        case 2:
        {
            for(int i=0;!feof(fin);i++)
                {
                    fscanf(fin,"%d %d %d\n",&x,&y,&z);
                    if(x==a&&y==b&&z==c)///检验是要修改的行吗
                    {
                        y=e;
                        if(m==0)
                        {
                            fprintf(ftp,"%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
                            m++;
                        }
                        else
                            fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
                    }
                    else
                    {
                        if(m==0)
                        {
                            fprintf(ftp,"%d\t%d\t%d",x,y,z);///将原本的数据写入临时文件
                            m++;
                        }
                        else
                            fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将原本过的数据写入临时文件
                    }
                }
        }
        break;
 
        case 3:
        {
            for(int i=0;!feof(fin);i++)
                {
                    fscanf(fin,"%d %d %d\n",&x,&y,&z);
                    if(x==a&&y==b&&z==c)///检验是要修改的行吗
                    {
                        z=e;
                        if(m==0)
                        {
                            fprintf(ftp,"%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
                            m++;
                        }
                        else
                            fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将修改过的数据写入临时文件
                    }
                    else
                    {
                        if(m==0)
                        {
                            fprintf(ftp,"%d\t%d\t%d",x,y,z);///将原本的数据写入临时文件
                            m++;
                        }
                        else
                            fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///将原本过的数据写入临时文件
                    }
                }
        }
        break;
    }
    fclose(fin);
    fclose(ftp);
     printf("您选择的便条已经修改完毕,请打开文件查看!\n");
    system("DEL/f d:\\list.txt");///删除原文件,删除错误的时候会报提示信息
    ///unlink("d:\\list.txt");///删除原文件
    rename("d:\\tmp.txt","d:\\list.txt");///改名
    clearing();
    readdata();
    foreach();
    choice();
}
 
int main()
{
    readdata();///读取文件数据
    foreach();///初始化数组
    menu();///显示主菜单
}

首先在D盘下新建一个文本文档 ,名为 list.txt,在文本文档里存入的数据如下(数据仅供参考):

然后我们开始运行该程序:

对于上图第五项添加便条信息的操作,我们 来看一看文本里的内容(最后一行就是新添的数据)

在我们执行第六个选项的时候,首先需要在D盘下新建一个文本文档  tmp.txt,至于为啥,详情请参考代码,代码里面有详细的解释

我们再去查看D盘里的文件,这时tmp.txt不见了,只剩下  list.txt,里面的内容如下(为什么会酱紫呢?快去查看代码吧):

在我们执行第七个选项的时候,需要在D盘下重新新建一个文本文档  tmp.txt,至于为啥,详情请参考代码,代码里面有详细的解释

我们再去查看D盘里的文件,这时tmp.txt不见了,只剩下  list.txt,里面的内容如下(为什么会酱紫呢?快去查看代码吧):

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言链表实现销售管理系统

    本文实例为大家分享了C语言链表实现销售管理系统的具体代码,供大家参考,具体内容如下 源码 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct sale {     char no[12];            //代号     char name[40];          //姓名     int month[12];          //月份     float sales

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

    本文实例为大家分享了C语言实现销售管理系统的具体代码,供大家参考,具体内容如下 一.C程序设计课程设计题目简介 该设计要求学生以某公司销售管理业务为背景,设计.开发一套“销售管理系统”软件. 通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对c语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格.得到软件工程的综合训练,提高解决实际问题的能力. 二.C程序设计课程设计的任务 1.查阅文献资料,一般在5篇

  • C语言实现销售管理系统

    本文实例为大家分享了C语言实现销售管理系统的具体代码,供大家参考,具体内容如下 这是题目,没用到文件相关的函数,所以不能保存在本地,每次读入都得重新输入. #include<stdio.h> #include<stdlib.h> #include<string.h> #include<Windows.h> #include<conio.h> struct node {     char no[12];  /*代号*/     char name[

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

    本文实例为大家分享了C语言实现销售管理系统设计的具体代码,供大家参考,具体内容如下 某公司有四个销售员(编号: 1-4), 负责销售五种产品(编号: 1-5). 每个销售员都将当天出售的每种产品各写一 张便条交上来.每张便条包含内容:销售员的代号.产品的代号.这种产品的当天的销售额.每位销售员每天上缴1张便条. 试设计一个便条管理系统,使之能提供以下功能: 1.系统以菜单方式工作 2.便条信息录入功能——输入(支持便条信息文件导入) 3.便条信息修改功能 4.便条信息删除功能 5.收集到了上个月

  • C语言职工管理系统设计

    本文实例为大家分享了C语言职工管理系统设计代码,供大家参考,具体内容如下 代码如下: #include<stdio.h> #include<stdlib.h> #include <string.h> struct Worker { int id;//工号 char name[16];//姓名 char sex[8];//性别 int age;//年龄 char edu_exp[32];//学历 int wage;//工资 char adress[32];//地址 cha

  • C语言超市管理系统设计

    本文实例为大家分享了C语言超市管理系统设计的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<string.h> #define NUM 5 struct item{ char brand[20]; char id[10]; float in_price; float out_price; int storage; }; struct item_node{ struct item wanted

  • C语言学生信息管理系统设计与实现

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 #include"stdio.h" //标准的输入输出函数文件头部说明 #include"math.h" // 数学函数头部说明 #include"string.h" #include"stdlib.h" //通过该函数头部里的函数,改变控制台的背景和颜色 #include"windows.h" //头文件声明,下文用到了改变控

  • C语言数组实现学生信息管理系统设计

    概述 单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标. 运行结果如下: 输入数据: 打印数据: 根据学号对信息进行排序: 根据总成绩对信息进行排序: 根据学号删除某一信息: 代码如下: #include <stdio.h> #include <stdlib.h> //exit函数头文件 #include <string.h> //字符串相关操作头文件 #define MAX_STU

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • C语言单链表版学生信息管理系统

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序. //程序包括如下功能. //1.建立学生成绩表,包含学生的学号.姓名和成绩. //2.可以显示所有学生成绩. //3.可以计算学生的总数. //4.可以按学号和序号查找学生. //5.可以在指定位置插入学生成绩数据. //6.可以删除指定位置的学生数据. //7.可以把学生成绩按从高到低的顺序排序. //作者: yinlinqvan //操作系统:

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • C语言学生信息管理系统小项目

    本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下:system("clear")这个系统调用是linux的,windows里面用system("cls") ) (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.试设计一学生信息管理系统,使之能提供以下功

  • C语言版学生成绩管理系统

    本文实例为大家分享了C语言版学生成绩管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algorithm> char buf[255]; char c=14; char path[]="D:\\data"; char tm

随机推荐