| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 351 人关注过本帖
标题:【求助】销售管理
只看楼主 加入收藏
yayabendd
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-6-11
结帖率:50%
收藏
已结贴  问题点数:6 回复次数:2 
【求助】销售管理
问题描述:
已知一公司某公司有4 个销售员(编号、姓名、性别),负责销售 5 种产品(产品代号、产品名
称,销售价格)。设计一程序,完成以下功能:
1) 从键盘输入销售信息:销售员编号、产品编号、销售日期、销售数量(输入时需要判断销
售员编号是否存在、产品编号是否存在、销售数量是否大于 0,销售日期日期格式是否合法(格式为:YYYY-MM-DD,如 2009-01-02)))
2) 能输出指定时间段内的销售统计报表,格式如下:
销售统计报表
                            产品代号                           
                      1     2     3     4      5
销售员代号                                           销售之和

   1
   2
   3
   4
每种产品之和                                            总和

3) 根据销售员编号查询销售历史情况
4) 能删除指定销售员、产品、销售日期的记录
提示:
* 定义一个日期结构体保存日期,具体信息为:年、月、日
* 判断销售日期的格式是否合法时,需要判断长度是否为 10,第5 位和第8 位是否为’-’,
字符,将 1-4 位表示的年份,6-7 位表示的月份,9-10 位表示的日期分别转换成整数。判
断是否满足构成日期的条件闰年月份只能是 1-12 之间的数,如果是闰年,二月可以是 29
天否则不能大于 28,1,3,5,7,8,10,12 月可以是 31 天,其余只能小于等于 30(建
议写成函数)。
* 定义一个结构体数组保存 4 个销售员信息,具体信息为:编号、姓名、性别
* 定义一个结构体数组保存 5 种产品信息,具体信息为:产品代号、产品名称,销售价格
* 定义一个链表保存销售信息,信息为:销售员编号、产品编号、销售日期、销售数量。每
输入一比销售信息时,在该链表中插入一条记录
* 输入销售信息时需要查询销售员数组和产品数组,是否在该销售员和产品
* 实现第二个功能(销售统计报表)时,需要定义一个二维数组 report(5 行 6 列)来保存报
表信息,遍历销售链表,如果销售日期大于开始统计时间小于结束统计时间,判断其销售
员代号在销售员数组中的下标 m,以及产品代号在产品数组中的下标,并将该销售数量累
加在 report[m][n]元素中,再输入该二维数组

下面是我自己写的,可运行的时候有几个模块不能正常运行,希望大家没事试试,然后给点意见。
主要是新建销售信息记录void create();和文件保存 void load();求高手指点修改一下。小弟在此谢过!!

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include <stdlib.h>
#include<conio.h>
#define NULL 0
#define LEN sizeof(struct worker)
#define LON sizeof(struct product)
/*结构体定义*/

struct date{
    char year[4];
    char month[3];
    char day[3];
};

struct product
{
    char id[2];
    int dm ;
    char mc[20];
    int num;  
    float price;
    struct date d;
    struct product *next;
};

typedef struct worker
{ char id1[2];
char name[10];
char sex[10];
struct worker *next;
};


/*函数声明*/
void createRec();     /*新建销售员记录*/
void create();        /*新建销售信息记录*/
void load();          /*文件保存销售信息记录*/
void searchRec();     /*查询销售信息记录*/
void insertRec();     /*插入销售信息记录*/
void deleteRec();     /*删除销售员记录*/
void listRec();       /*显示所有销售信息*/
void keep();          /*记录报表的函数*/
int judge_date();      
void huiexit();       /*退   出*/
int menu_select();     /*主菜单*/

struct worker *head1=NULL,*p1,*p2,*p3;/*定义结构体指针head 为头指针,p1 为输入数据缓存空间指针,p2 为尾指针*/
struct product *head=NULL, *pt1,*pt2,*pt3;
/*主函数*/
int main()
{ for(;;)
{ switch(menu_select())
{
case 1: system("cls"); createRec();break;
case 2: system("cls"); create();   break;
case 3: system("cls"); load();     break;
case 4: system("cls"); searchRec();break;
case 5: system("cls"); insertRec();break;
case 6: system("cls"); deleteRec();break;
case 7: system("cls"); listRec();  break;
case 8: system("cls"); keep();  break;
case 0: system("cls"); huiexit(0); return 0;
default :{ getchar();
    printf("\n 选择错误,请正确输入你的选择(0~8),:\n");
    printf("\n 按任意键返回......\n");
    getchar();
    system("cls");   /*清屏*/
         }
}
}
return 0;
}
/*主菜单*/
int menu_select()
{ int c;
printf("\t\t**************菜单**************\n");
printf("\t\t\t1.新建销售员记录\n");
printf("\t\t\t2.新建销售信息记录\n");
printf("\t\t\t3.文件输入销售信息\n");
printf("\t\t\t4.查询销售员记录\n");
printf("\t\t\t5.插入销售员记录\n");
printf("\t\t\t6.删除销售员记录\n");
printf("\t\t\t7.显示所有信息\n");
printf("\t\t\t8.记录报表的函数\n");
printf("\t\t\t0.退出\n");
printf("\t\t********************************\n");
printf("\n 输入你的选择(0~8):\n");
scanf("%d",&c);
return c;
}

/*新建销售员记录*/
void createRec()
{ int n,i;
if(head!=0)
{
    getchar();
    printf("\n 销售员信息数据库已建立,按任意键返回......:\n");
    getchar();
    getchar();
    system("cls");   /*清屏*/
    return;
}
printf("\n\n 请输入希望建立的销售员基本信息条数n(n>1&&n<5):\n");
do{
    scanf("%d",&n);
    if(n<1||n>5)
        printf("\n\n输入范围有误,请重新输入希望建立的销售员基本信息条数n(n<1&&n<5):\n");
}while(n<1||n>5);
/*开始建立n条销售员基本信息记录*/

printf("\n 销售员号   姓名  性别(male、female)  \n     ");

head1=p1=(struct worker *)malloc(LEN);  /*开辟一个新单元*/
p1->next =NULL;
for(i=0;i<n;i++)
{
    scanf("    %s        %s      %s", p1->id1,p1->name,p1->sex);
    p2=(struct worker *)malloc(LEN);  /*开辟一个新单元*/
    p1->next =p2;
    p3=p1;
    p1=p2;
    p1->next =NULL;
}
free(p2);
p3->next=NULL;
printf("\n n项信息输入完毕,按任意键返回......\n");
getchar();
getchar();
system("cls");        /*清屏*/
}

/*新建销售信息记录*/
void create()
{ int n,i;
if(head!=0)
{
   
    getchar();
    printf("\n 销售信息数据库已建立,按任意键返回......:\n");
    getchar();
    system("cls");   /*清屏*/
    return;

}

printf("\n\n 请输入希望建立的销售基本信息条数n(n>1&&n<10):\n");
do{
    scanf("%d",&n);
    if(n<1||n>10)
        printf("\n\n输入范围有误,请重新输入希望建立的销售基本信息条数n(n<1&&n<5):\n");
}while(n<1||n>10);
/*开始建立n条销售员基本信息记录*/

printf("\n 销售员号   产品代码(1-5)  产品名称 产品数量  价格  销售时间  \n     ");
head=pt1;
pt1=(struct product *)malloc(LON);  /*开辟一个新单元*/
pt1->next =NULL;
for(i=0;i<n;i++)
{
    scanf("%s %d %s %d %f %s%s%s", pt1->id,&pt1->dm,pt1->mc,&pt1->num,&pt1->price,pt1->d.year,pt1->d.month,pt1->d.day);
    while(judge_date(head))
    {
        printf("请继续输入信息!");
        scanf("%s %d %s %d %f %s%s%s", pt1->id,&pt1->dm,pt1->mc,&pt1->num,&pt1->price,pt1->d.year,pt1->d.month,pt1->d.day);
        
    }

    pt2=(struct product *)malloc(LON);  /*开辟一个新单元*/
    pt1->next =pt2;
    pt3=pt1;
    pt1=pt2;
    pt1->next =NULL;
}
free(pt2);
pt3->next=NULL;
printf("\n n项信息输入完毕,按任意键返回......\n");
getchar();
system("cls");        /*清屏*/
}



/*文件保存销售信息记录 */
void load(struct product *head)
{
    FILE *fp;
    struct product *p;
    if((fp=fopen("D:\\xinxi.txt","w"))==NULL)
    {
        printf("can not open the file!\n");
        exit(0);
    }
    p=head;
    while(p!=NULL)
    {
        fprintf(fp,"销售员编号   产品编号   产品名称   销售数量   产品价格  销售日期 \n");
        fscanf(fp,"%s%d%s%d%f%s%s%s",p->id,&p->dm,p->mc,&p->num,&p->price,p->d.year,p->d.month,p->d.day);
        p=p->next;
    }
    printf("数据全部保存!");
    fclose(fp);getchar();getchar();
    system("cls");
}


/*查询销售信息记录*/
void searchRec(struct product *head)
{   struct product *pp;
    char id[10];
    pp=head;
    printf("\n\n 请输入销售员号以便查证:\n");
    scanf("%s",id);
    while(pp!=NULL)
    { if(strcmp(pp->id,id )==0)
    { printf("\t该销售员信息如下:\n\t 销售员号:");
    printf("%s\n",pp->id );
    printf("\t 产品的代码:");
    printf("%d\n",pp->dm );
    printf("\t 产品名称:");
    printf("%s\n",pp->mc );
    printf("\t 销售数量:");
    printf("%d\n",pp->num );
    printf("\t 产品的价格:");
    printf("%f\n",pp->price );
    printf("\t 销售时间:");
    printf("%s%s%s\n",pp->d.year,pp->d.month,pp->d.day );
    break;
    }
    else {pp=pp->next ;}
    }
    if(pp==NULL) printf("\n\n找不到该销售员信息!!!\n");
    printf("\n 按任意键返回......\n");
    getch();
    system("cls");        /*清屏*/
}

/*插入销售员记录*/
void insertRec()   
{int n=0,m,i;
pt1=head;
if(head==NULL) { /*空数据库插入在第一个位置*/
    getchar();
    printf("\n 销售员信息数据库为空,只能插入第一个位置,按任意键将继续。:\n");
    getchar();
    printf("\n\n 销售员号  产品代码、产品名称、数量、价格、销售时间的形式输入销售员记录:\n");
    head=(struct product *)malloc(LEN);  /*开辟一个新单元*/
    head->next =NULL;
    scanf("%s%d%s%d%f%s%s%s", pt1->id,&pt1->dm,pt1->mc,&pt1->num,&pt1->price,pt1->d.year,pt1->d.month,pt1->d.day);
   while(judge_date(head))
    {
        scanf("%s%d%s%d%f%s%s%s", pt1->id,&pt1->dm,pt1->mc,&pt1->num,&pt1->price,pt1->d.year,pt1->d.month,pt1->d.day);
        printf("请继续输入信息!");
    }
    printf("\n信息输入完毕,按任意键返回......\n");
    getchar();
    system("cls");        /*清屏*/
    return;
}
/*数据库不为空时,分插入第一个位置,中间位置,最后一个位置三种情况*/
do{
    n++;
    pt1=pt1->next;
}while(pt1!=0);
printf("销售员信息数据库中共有%d条记录,请输入插入的位置n:\n",n);
do{ scanf("%d",&m);
if(m<1||m>n+1) printf("\n\n 输入范围有误,请重新输入希望插入的正确位置(n>=1&&n<=%d):\n",n+1);
}while(m<1||m>n+1);
if(m==1) {  /*插入在数据库的第一个位置*/
    pt1=head;
    getchar();
    printf("\n\n 销售员号  产品代码、产品名称、数量、价格、销售时间的形式输入销售员记录:\n");
    head=(struct product *)malloc(LEN);  /*开辟一个新单元*/
        scanf("%s%d%s%d%f%s%s%s", head->id,&head->dm,head->mc,&head->num,&head->price,head->d.year,head->d.month,head->d.day);
   while(judge_date(head))
    {
        scanf("%s%d%s%d%f%s%s%s", head->id,&head->dm,head->mc,&head->num,&head->price,head->d.year,head->d.month,head->d.day);
        printf("请继续输入信息!");
    }
    head->next =pt1;
    printf("\n1项信息输入完毕,按任意键返回......\n");
    getchar();
    system("cls");        /*清屏*/
    return;
}
if(m==n+1) { /*插入在数据库的最后一个位置*/
    pt1=head;
    while( pt1->next!=NULL)
        pt1=pt1->next;
    printf("\n\n 请按销售员号(id<=2位)  销售员姓名的形式输入1条销售员记录:\n");
    p2=(struct worker *)malloc(LEN);  /*开辟一个新单元*/
    scanf("%s%d%s%d%f%s%s%s",pt2->id,&pt2->dm,pt2->mc,&pt2->num,&pt2->price,pt2->d.year,pt2->d.month,pt2->d.day);
   while(judge_date(head))
    {
        scanf("%s%d%s%d%f%s%s%s", pt2->id,&pt2->dm,pt2->mc,&pt2->num,&pt2->price,pt2->d.year,pt2->d.month,pt2->d.day);
        printf("请继续输入信息!");
    }
    pt2->next=NULL;
    pt1->next=pt2;
    printf("\n1项信息输入完毕,按任意键返回......\n");
    getchar();
    system("cls");        /*清屏*/
    return;
}
/*插入在数据库的中间第n个位置*/
pt1=head;
for(i=1;i<m;i++)
{ pt2=pt1;
pt1=pt1->next;
}
printf("\n\n 请按销售员号(id<=2位)  销售员姓名的形式输入1条销售员记录:\n");
pt3=(struct product *)malloc(LEN);  /*开辟一个新单元*/
    scanf("%s%d%s%d%f%s%s%s",pt3->id,&pt3->dm,pt3->mc,&pt3->num,&pt3->price,pt3->d.year,pt3->d.month,pt3->d.day);
   while(judge_date(head))
    {
        scanf("%s%d%s%d%f%s%s%s", pt3->id,&pt3->dm,pt3->mc,&pt3->num,&pt3->price,pt3->d.year,pt3->d.month,pt3->d.day);
        printf("请继续输入信息!");
    }
pt3->next=pt1;
pt2->next=pt3;
printf("\n1项信息输入完毕,按任意键返回......\n");
getchar();
system("cls");        /*清屏*/
return;
}
/*删除指定销售员号的记录*/
void deleteRec()
{
    char id[2];
    if(head==NULL)  
    { getchar();
    printf("\n 销售员信息数据库为空,不能删除,按任意键将返回:\n");
    getchar();
    system("cls");        /*清屏*/
    return;
    }
    pt1=head;
    printf("\n\n请输入要删除的销售员号:\n");
    scanf("%s",id);
    while(strcmp(id,pt1->id )!=NULL&&p1->next!=NULL)
    { p2=p1;
    pt1=pt1->next ;
    }
    if(strcmp(id,pt1->id )==NULL)
    { if(head->next==NULL)
    { free(head);
    head=NULL;
    }
    else if(head==pt1)
    { head=pt1->next;
    free(pt1);
    }
    else{ pt2->next=pt1->next;
    free(pt1);
    }
    printf("\n删除完毕,");
    }
    else
        printf("\n\n找不到该销售员号信息!");
    getchar();
    printf("按任意键将返回:\n");
    getchar();
    system("cls");        /*清屏*/
    return;
}



/*显示所有信息*/
void listRec()
{
    if(head==NULL)
    {
        printf("\n数据库中没有销售信息,按任意键返回。\n");
        getch(); system("cls"); return;
    }
    printf("\n全部销售信息如下:\n");
    printf("\n   销售员号  产品代码  产品名称   数量  价格  销售时间\n");
    pt1=head;
    while(p1!=NULL)
    {
        printf("      %s      %d        %s       %d     %f   %s%s%s", pt1->id,pt1->dm,pt1->mc,pt1->num,pt1->price,pt1->d.year,pt1->d.month,pt1->d.day);
        p1=p1->next;
    }
    printf("\n按任意键返回!......\n");
    getch();
    system("cls");       /*清屏*/
}

/*输入时间的判断*/
int judge_date(struct product *head)
{
    struct product *p=head;
    int flag=0;
    int i,j;
    i=atoi(p->d.year);
    j=(i%4==0&&i%100==0||i%400==0);
    if(p->d.month[0]!='-'||p->d.day[0]!='-')
    {
        printf("日期输入有误,请重新输入:\n");
        flag=1;
        return flag;
    }
    else
        if((p->d.day[1]>='3'&&p->d.day[2]>'1')||(p->d.month[1]=='0'&&p->d.month[2]=='2'&&p->d.day[2]>'8'&&p->d.day[1]=='2'&&j==0))
        {
            printf("日期输入有误,请重新输入:\n");
            flag=1;
            return flag;
        }
        else
            if((p->d.month[1]>'1')||((p->d.month[2]>'2')&&(p->d.month[1])==1))
            {
                printf("月份输入有误,请重新输入:\n");
                flag=1;
                return flag;
            }
            return flag;
}



/*记录报表的函数*/
void keep(struct product  *head)
{           
    int bao[5][6];
    int i,j;
    FILE *fp;
    if((fp=fopen("e:\\xinxi.txt","w"))==NULL)
    {
        
        printf("文件无法打开!\n");
        exit(0);
    }
   
    fprintf(fp,"                     销售信息                  \n");
    fprintf(fp,"销售员代号 1  2  3  4  5    销售之和\n");
    for(j=0;j<4;j++)
    {
        fprintf(fp,"%d",j+1);
        for(i=0;i<6;i++)
        {
            fscanf(fp,"%d",&bao[j][i]);
            bao[j][5]+=bao[j][i];
        }
        fprintf(fp,"%d\n",bao[j][5]);
        
    }
    fprintf(fp,"每种产品的和:");
    for(i=0;i<6;i++)
    {
        for(j=0;j<5;j++){
            bao[4][j]+=bao[i][j];
            fprintf(fp,"%d",bao[4][j]);
        }
        if(fclose(fp)){
            
            printf("文件无法关闭!\n");
            exit(0);
        }
        printf("\n 按任意键返回\n");
        getchar();getchar();
        system("cls");
    }
}



/*退出*/
void  huiexit()
{
    pt1=head;
    while( p1!=NULL)
    {
        pt2=pt1->next;
        free(pt1);
        pt1=pt2;
    }
}

搜索更多相关主题的帖子: 时间段 销售员 键盘 统计 
2011-06-16 17:16
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:3 
给多少钱

                                         
===========深入<----------------->浅出============
2011-06-16 17:38
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:3 
把函数再划分细点。
链表功能独立出来。

—>〉Sun〈<—
2011-06-16 18:06
快速回复:【求助】销售管理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021274 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved