标题:有道C语言题目一直弄不出来,忘哪位学长能帮我一把!!
只看楼主
wlheo
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-8
结帖率:100%
已结贴  问题点数:20 回复次数:7 
有道C语言题目一直弄不出来,忘哪位学长能帮我一把!!
已知一个公司某公司有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]元素中,再输入该二维数组

搜索更多相关主题的帖子: 时间段 销售员 C语言 姓名 统计 
2011-06-08 16:41
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
得分:0 
作业贴吗》?
2011-06-08 16:45
wlheo
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-8
得分:0 
回复 2楼 laigaoat2005
不是啊,只是看到了,做了做。没弄出来额!!
2011-06-08 16:49
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
没做出来,就冷静一下,先在纸上画画
2011-06-08 18:17
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
得分:20 
做了一些,还没有做完,自己加吧,睡了
C/C++code

程序代码:
#include <stdio.h>
#include <conio.h>
#include <string>
struct SELLER
{   
    int _id;   
    char _name[7];   
    char _sex[3];       
};
struct PRODUCT{   
    int _id;
    char _name[5];   
    int _price;   
};
struct DATE
{
    int _year;   
    int _month;   
    int _date;
};
struct SELLINFO {
int    _SId;
int _PId;
struct DATE _SDate;
int _SCnt;
struct SELLINFO* _next; 
};//销售员编号、产品编号、销售日期、销售数量
int product_table[5][6]={0};
SELLER seller[4];
PRODUCT product[5];
struct SELLINFO* head;
void initialization()
{
    seller[0]._id=1;
    strcpy(seller[0]._name,"张三丰");
    strcpy(seller[0]._sex,"");
    seller[1]._id=2;
    strcpy(seller[1]._name,"李四娘");
    strcpy(seller[1]._sex,"");
    seller[2]._id=3;   
    strcpy(seller[2]._name,"王麻子");   
    strcpy(seller[2]._sex,"");   
    seller[3]._id=4;   
    strcpy(seller[3]._name,"王五波");   
    strcpy(seller[3]._sex,"");
    product[0]._id=1;   
    strcpy(product[0]._name,"铁锅");   
    product[0]._price=2;
    product[1]._id=2;   
    strcpy(product[1]._name,"铝飘");   
    product[1]._price=3;
    product[2]._id=3;   
    strcpy(product[2]._name,"钢盔");   
    product[2]._price=4;
    product[3]._id=4;   
    strcpy(product[3]._name,"银筷");   
    product[3]._price=5;
    product[4]._id=5;    
    strcpy(product[4]._name,"美女");   
    product[4]._price=1;
}
void print()
{
    printf("\t********************************************************\n");
    printf("\t******销售统计系统v0.001******date:2011.06.09***********\n");       
    printf("\t********************************************************\n");   
    printf("\t本单位销售人员:\n");
    for(int i=0;i<4;i++)
    {
        printf("\t  %d %s %s  \n",seller[i]._id,seller[i]._name,seller[i]._sex);
    }
    printf("\n") ;
    printf("\t本单位销售产品:\n");   
    for(int i=0;i<5;i++)
    {
        printf("\t %d %s  %d  \n",product[i]._id,product[i]._name,product[i]._price);
    }
    printf("\n") ;
}
bool IsDate(int yy,int mm,int dd)
{
    if(yy<2000 || yy>2020 || mm<1 || mm>12 || dd<1 || dd>31) return false;
    switch(mm)
    {
    case 1:    case 3:    case 5:    case 7:    case 8:    case 10:    case 12:
        if(dd>31) return false;
    case 4: case 6: case 9: case 11:
        if(dd>30) return false;
    case 2:
        if(0==yy%4 && 0!=yy%yy || 0==yy%400) //闰年
        {
            if(mm>29) return false;
        }
        else    //非闰年
        {
            if(mm>28) return false;
        }
    }   
    return true;
}
bool check_SId(int SId) //检测销售员编号,存在返回true
{
    for(int i=0;i<4;i++)
    if(SId==seller[i]._id) return true;
    return false;
}
bool check_PId(int PId)//检测产品编号,存在 返回true
{
    for(int i=0;i<5;i++)
    if(PId==product[i]._id) return true;
    return false;
}
int check(int SId,int PId,char date[],int cnt)
{
    if (!check_SId(SId)) return 1 ;   
    if (!check_PId(PId)) return 2;   
    int yy,mm,dd;//年月日整数
    yy=(date[0]-48)*1000+(date[1]-48)*100+(date[2]-48)*10+(date[3-48]);//断网了,办公室查不到把字串转换成整数的函数,只好用笨办法
    mm=(date[5]-48)*10+(date[6]-48);
    dd=(date[8]-48)*10+(date[9]-48);
    if(    !( 10==strlen(date) && //日期长度为10
        '-'==date[4] && '-'==date[7] && //第四、八位为-
        IsDate(yy,mm,dd) //三个数据能够成日期
        )    )//如果不能形成日期返回3
        return 3;
    if(! cnt>0) return 4;       
    return 0;
}

void add_to_list(int SId,int PId,char date[],int cnt)
{
    if(    NULL==head    )//链表未建立
    {
        //creat_list
        head=(struct SELLINFO*)malloc(sizeof(struct SELLINFO));
        head->_SId=SId;
        head->_PId=PId;
        head->_SDate._year=(date[0]-48)*1000+(date[1]-48)*100+(date[2]-48)*10+(date[3-48]);
        head->_SDate._month=(date[5]-48)*10+(date[6]-48);
        head->_SDate._date=(date[8]-48)*10+(date[9]-48);
        head->_SCnt=cnt;
        head->_next=NULL;       
    }
    else  //已经建立链表
    {
        //insert_list 在结尾;
        struct SELLINFO* p,* n;
        p=head;
        n=head->_next;
        while(n!=NULL)
        {
            p=n;
            n=p->_next;
        }
        p->_next=n=(struct SELLINFO*)malloc(sizeof(struct SELLINFO));   
        n->_SId=SId;
        n->_PId=PId;
        n->_SDate._year=(date[0]-48)*1000+(date[1]-48)*100+(date[2]-48)*10+(date[3-48]);
        n->_SDate._month=(date[5]-48)*10+(date[6]-48);
        n->_SDate._date=(date[8]-48)*10+(date[9]-48);
        n->_SCnt=cnt;
        n->_next=NULL;
    }
}

void input()
{   
    int SellId;
    int ProId;   
    static char date[11];
    int SellCnt;
    bool flag = true;
    printf("\t箐输入销售信息(销售员编号 产品编号 销售日期 销售数量)\n");
    printf("\t请用一个空格间隔,日期格式例:2011-01-01\n\n");   
    while(flag)
    {
        //system("cls");
        printf("\tscstlg=>");
        scanf("%d%d%s%d",&SellId,&ProId,&date,&SellCnt);
        switch(check(SellId,ProId,date,SellCnt))
        {
            case 0:
            add_to_list(SellId,ProId,date,SellCnt);//加入链表
            printf("\t继续输入吗?如果结束,请按n,如果继续输入按任意键\n");
            char ch=getchar();
            if(ch=='n')
                flag=false;//退出循环
            break;           
            case 1:
            printf("\t销售员编号输入有错,请重新输入\n");
            break;
            case 2:
            printf("\t产品编号输入有错,请重新输入\n");
            break;
            case 3:
            printf("\t销售日期输入有错,请重新输入\n");
            break;
            case 4:
            printf("\t销售数量输入有错,请重新输入\n");
            break;
            default:
            printf("\t输入数据不符规范,程序出现未知错误,即将退出!");
            getch();
            exit(-1);
        }
    }
}
//统计报表
void pro_table(char date1[],char date2[])
{
    int pyy,pmm,pdd,nyy,nmm,ndd;   
    pyy=(date1[0]-48)*1000+(date1[1]-48)*100+(date1[2]-48)*10+(date1[3-48]);
    pmm=(date1[5]-48)*10+(date1[6]-48);
    pdd=(date1[8]-48)*10+(date1[9]-48);    
    nyy=(date2[0]-48)*1000+(date2[1]-48)*100+(date2[2]-48)*10+(date2[3-48]);
    nmm=(date2[5]-48)*10+(date2[6]-48);
    ndd=(date2[8]-48)*10+(date2[9]-48);        
    struct SELLINFO* n(head);
    //把链表数据读入数组
    while(n!=NULL)
    {
        //在时间范围内的话
        if(n->_SDate._year>=pyy && n->_SDate._month>=pmm && n->_SDate._date>=pdd &&
            n->_SDate._year<=nyy && n->_SDate._month<=nmm && n->_SDate._date<=ndd )
        {
            product_table[n->_SId][n->_PId]+=n->_SCnt;
        }
        n=n->_next;
    }
    //计算数组统计
    for(int i=0;i<4;i++)
        for(int j=0;j<5;j++)
            product_table[i][5]+=product_table[i][j];   
    for(int i=0;i<6;i++)
        for(int j=0;j<4;j++)
            product_table[4][i]+=product_table[j][i];   
}

void out_table()
{
    system("cls");
    printf("\t********************************************************\n");
    printf("\t******销售统计系统v0.001******date:2011.06.09***********\n");       
    printf("\t********************************************************\n");   
    printf("\t\n");   
    printf("\t    产品   |  1  |  2  |  3  |  4  |  总和  \n");   
    printf("\t人员    |    |    |    |    |    \n\t");   
    for (int i=0;i<5;i++)
    {
        printf("%d  ",i);
        for(int j=0;j<6;j++)
            printf("  %d  |",product_table[i][j]);   
        printf("\n\t");   
    }
   
}

void query()
{
    char date1[11];
    char date2[11];
    printf("\t输入要查询的时间范围,两时间用一个空格分开;\n时间格式:yyyy-mm-dd yy-mm-dd\n");
    printf("\t\scstlg=>");
    scanf("%s%s",date1,date2);
    pro_table(date1,date2);
    out_table();
}


int main()
{
    initialization();
    print();
    input();
    query();
    

    return 0;
}

2011-06-11 00:14
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
得分:0 
还有其它功能和放内存,自己完成吧。
2011-06-11 00:16
wlheo
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-8
得分:0 
回复 6楼 laigaoat2005
谢谢了。剩下的我自己弄!!
2011-06-11 11:51
劣质数轴
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:163
注 册:2010-11-19
得分:0 
LZ起码也要帖出自己写的那部分吧
2011-06-12 01:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-342221-1-1.html




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

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