MSE12 版 (精华区)

发信人: lccc (Jesus是我小弟), 信区: MSE12       
标  题: Re: 谁有大二的C语言作业,求!
发信站: BBS 听涛站 (Tue Nov 23 15:49:38 2004), 转信

如果不嫌简陋的话

C大作业源程序
#include<stdio.h>
#include<string.h>
#include<conio.h>

struct comp//生产厂家资料结构体
{
        char comname[8];//厂名
        int workers;//人数
        int leapro;//最小产量
        int price;//单价
        int credit;//信誉度
        int chanliang;//产量
};//以下定义各公司的详细信息
struct comp com[10]={
{"com1",100,100,200,0,0},
{"com2",120,150,195,0,0},
{"com3",140,200,190,0,0},
{"com4",160,250,185,0,0},
{"com5",180,300,180,0,0},
{"com6",200,350,175,0,0},
{"com7",220,400,170,0,0},
{"com8",240,450,165,0,0},
{"com9",260,500,160,0,0},
{"com10",280,550,155,0,0}};


struct customer//客户资料结构体
{
        char cusname[50];
        int pronum;//订货数量
        int needtime;//要求交货时间
        char proname[50];//客户输入的与之交易的厂家名
}cus[1000];


struct youhui//存放厂家对客户优惠资料的结构体
{
        char name[50];//客户名
        char namee[50];//提供优惠的厂家名
        float dazhe;
}youhui[1000];

int j=0,z=0;//j用于cus[],z用于youhui[]


//功能1模块
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void gongneng1()//实现主菜单中的第一项功能
{
        printf("\n\n");
        printf("************************************************\n");
        printf("*   厂名   人数   最小批量   单价    信誉度    *\n");
        int i;
        for(i=0;i<10;i++)
        {printf("*   %-5s   %d    %d        %d        %d     *\n",com[i].comna
me,com[i].workers,com[i].leapro,com[i].price,com[i].credit);}
        printf("************************************************\n\n");
        printf("按任意键返回主菜单......\n");
        getch();
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------


//功能2模块
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void gongneng2()//实现主菜单中的第二项功能
{
        char compname1[50];//用户选择的与之交易的厂家名
        int needtime,i,jiaoyiliang;//用户输入的交易量
        int x;
        int i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,n[10];
        char yorn[20],yorn1[20],yorn2[20],aorb[20];//用于选择"y/n","a/b"
        float shijian[10];//根据厂家的规模定义的交货时间
        float jiage[10];//根据交易量,考虑优惠后,存放各个厂家的价格的数组,用
于针对价格因素对厂家排序
do
{
        strcpy(aorb,"c");
        strcpy(yorn2,"n");
        printf("请输入您或您的公司的名字:");
        scanf("%s",cus[j].cusname);
        do
        {
                for(x=0;x<=z;x++)
                        if(strcmp(cus[j].cusname,youhui[x].name)==0)
                        {
                                printf("公司%s愿意为您提供%.1f折优惠,是否与其
交易?(y/n)",youhui[x].namee,youhui[x].dazhe);
                                scanf("%s",yorn2);
                                if(strcmp(yorn2,"y")==0)
                                {
                                        printf("请输入您的交易量:");
                                        scanf("%d",&jiaoyiliang);
                                        cus[j].pronum=jiaoyiliang;
                                }
                                else if(strcmp(yorn2,"n")==0)
                                {
                                        printf("您放弃了公司%s为您提供的优惠,
请继续与其他公司交易.\n",youhui[x].namee);
                                        printf("按任意键继续......\n");
                                        getch();
                                }
                                else printf("输入有误,应输入y或n,请重试:");
                        }
        }
        while(strcmp(yorn2,"y")!=0&&strcmp(yorn2,"n")!=0);
        if(strcmp(yorn2,"y")!=0){
        do
        {
                printf("请输入你的交易量(请输入整数):");
                scanf("%d",&jiaoyiliang);
                cus[j].pronum=jiaoyiliang;
                if(jiaoyiliang<100) printf("您的交易量太小,没有厂家愿意为您生
产,请重新输入\n");
        }
        while(jiaoyiliang<100);
        for(i=0;i<10;i++)
                if(jiaoyiliang<com[i].leapro) break;
    printf("根据您的交易量,愿意为您生产的厂家如下:\n");
        for(i1=0;i1<i;i1++)
                printf("%-7s",com[i1].comname);
        printf("\n请问是否对交货时间有要求?(y/n):");
        do
        {
                scanf("%s",yorn);
                if(strcmp(yorn,"y")==0)//客户对交货时间有要求
                {
                        printf("请输入要求的交货时间(天):");
                        do
                        {
                                scanf("%d",&needtime);
                                cus[j].needtime=needtime;
                                if(1.0*jiaoyiliang/com[9].workers>needtime) 
printf("对不起,您的要求太苛刻了,请重新输入交货时间:");
                                else
                                {
                                        for(i2=0;i2<i;i2++)
                                                shijian[i2]=1.0*jiaoyiliang/co
m[i2].workers;
                                        printf("根据您的时间要求,对愿意生产的
厂家排序如下\n(排位越前表示交货时间越短,不满足要求的不再列出):\n");
                                        for(i3=(i-1);i3>=0;i3--)
                                                if(needtime>=shijian[i3]) 
printf("%-7s",com[i3].comname);
                                }
                        }
                        while(jiaoyiliang/com[9].workers>needtime);
                        printf("\n");
                }
                else if(strcmp(yorn,"n")==0)//客户对交货时间不做要求 
                {
                        if(jiaoyiliang<500)
                        {
                                printf("根据您的交易量,所有厂家都将按照原价出
售产品,不提供优惠");
                                i4=-1;
                        }
                        else
                        {
                                printf("根据您的交易量,有下列厂家愿意提供9折
优惠:\n");
                                for(i4=9;i4>=0;i4--)
                                        if(jiaoyiliang>=5*com[i4].leapro) 
break;
                                i6=i4+1;
                                for(i5=i4;i5>=0;i5--)
                                        printf("%-7s",com[i5].comname);
                        }
                        printf("\n以下为按照价格因素对厂家的排序\n(排位越前表
示价格越低,不愿意生产的厂家不再列出)\n");
                        if(i4<0) 
                                for(i4=0;i4<10;i4++)
                                        jiage[i4]=com[i4].price;
                        else 
                        {
                                for(;i4>=0;i4--)
                                        jiage[i4]=0.9*com[i4].price*1000+jiaoy
iliang/com[i4].workers;
                                for(;i6<10;i6++)
                                        jiage[i6]=com[i6].price*1000+jiaoyilia
ng/com[i6].workers;
                        }
                        for(i7=0;i7<10;n[i7]=i7++);
                        for (i7=0;i7<10;i7++)
                        {
                                for (i8=i7+1;i8<10;i8++)
                                {
                                        int k;
                                        if (jiage[n[i7]]>jiage[n[i8]])
                                        {k=n[i7];n[i7]=n[i8];n[i8]=k;}
                                }
                        }       
                        for (i8=0;i8<10;i8++)
                                if(n[i8]<i) printf("%-7s\n",com[n[i8]].comname
);
                }
                else printf("输入有误,应输入y或n,请重试:");
        }
        while(strcmp(yorn,"y")!=0&&strcmp(yorn,"n")!=0);
        }
        printf("请问您是否确定要交易?(y/n):");
        do
        {
                scanf("%s",yorn1);
                if(strcmp(yorn1,"y")==0)
                {
                        printf("请输入您想与之交易的公司名(com1-com10):");
                        do
                        {
                                scanf("%s",compname1);
                                strcpy(cus[j].proname,compname1);
                                if(strcmp(compname1,"com1")!=0&&strcmp(compnam
e1,"com2")!=0&&
                                        strcmp(compname1,"com3")!=0&&strcmp(co
mpname1,"com4")!=0&&
                                        strcmp(compname1,"com5")!=0&&strcmp(co
mpname1,"com6")!=0&&
                                        strcmp(compname1,"com7")!=0&&strcmp(co
mpname1,"com8")!=0&&
                                        strcmp(compname1,"com9")!=0&&strcmp(co
mpname1,"com10")!=0)
                                        printf("输入有误,请重试:");
                        }
                        while(strcmp(compname1,"com1")!=0&&strcmp(compname1,"c
om2")!=0&&
                                strcmp(compname1,"com3")!=0&&strcmp(compname1,
"com4")!=0&&
                                strcmp(compname1,"com5")!=0&&strcmp(compname1,
"com6")!=0&&
                                strcmp(compname1,"com7")!=0&&strcmp(compname1,
"com8")!=0&&
                                strcmp(compname1,"com9")!=0&&strcmp(compname1,
"com10")!=0);
                        for(i9=0;i9<10;i9++)
                                if(strcmp(compname1,com[i9].comname)==0) 
                                {
                                        com[i9].credit++;
                                        printf("交易成功,厂家%s信誉度
+1!\n",com[i9].comname);
                                        j++;
                                        com[i9].chanliang+=jiaoyiliang;
                                }
                }
                else if(strcmp(yorn1,"n")==0)
                {
                        printf("请问您想:\n");
                        printf("  a.重新交易\n  b.退出\n");
                        printf("请选择:");
                        scanf("%s",aorb);
                }
                else printf("输入有误,应输入y或n,请重试:");
        }
        while(strcmp(yorn1,"y")!=0&&strcmp(yorn1,"n")!=0);
}
while(strcmp(aorb,"y")==0);
printf("按任意键返回主菜单......\n");
getch();
}

//功能3模块
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void gongneng3()//实现主菜单中的第三项功能
{
        int p;
        int i,m,n,k,t;
        int x[1000];//辅助排序的数组
        char aorb[20];
        printf("请问您想:\n  a.提供客户按交易量的排序\n  b.对厂家按总产量和人
均产量进行排序");
        printf("\n请选择:");
        scanf("%s",aorb);
        do
        {
                if(strcmp(aorb,"a")==0)
                {
                        for(p=0;p<j;x[p]=p++);
                        for(i=0;i<j-1;i++)
                                for(m=i+1;m<j;m++)
                                        if(cus[x[m]].pronum>cus[x[i]].pronum)
                                        {t=x[m];x[m]=x[i];x[i]=t;}
                        for(n=0;n<j;n++)
                                printf("%-15s%8d\n",cus[x[n]].cusname,cus[x[n]
].pronum);
                }
                else if (strcmp(aorb,"b")==0)
                {
                        printf("按总产量排序如下:\n");
                        for(p=0;p<10;x[p]=p++);
                        for(i=0;i<9;i++)
                                for(m=i+1;m<10;m++)
                                        if(com[x[m]].chanliang>com[x[i]].chanl
iang)
                                        {t=x[m];x[m]=x[i];x[i]=t;}
                        for(n=0;n<10;n++)
                                printf("%-15s%8d\n",com[x[n]].comname,com[x[n]
].chanliang);
                        printf("按人均产量排序如下:\n");
                        for(p=0;p<10;x[p]=p++);
                        for(i=0;i<9;i++)
                                for(m=i+1;m<10;m++)
                                        if(1.0*com[x[m]].chanliang/com[x[m]].w
orkers>1.0*com[x[i]].chanliang/com[x[i]].workers)
                                        {t=x[m];x[m]=x[i];x[i]=t;}
                        for(n=0;n<10;n++)
                                printf("%-15s%8.2f\n",com[x[n]].comname,1.0*co
m[x[n]].chanliang/com[x[n]].workers);
                }
                else ("输入有误,应输入y或n,请重试:");
        }
        while(strcmp(aorb,"a")!=0&&strcmp(aorb,"b")!=0);
        printf("按任意键返回主菜单......\n");
        getch();
}


//功能4模块
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void gongneng4()//实现主菜单中的第四项功能
{
        char name1[50];//厂家输入的自己的厂名
        int i,i1;
        char aorb[20],aorb1[20];
        do
        {
                strcpy(aorb,"d");
                printf("请输入您的厂名(com1-com10):");
                do
                {
                        scanf("%s",name1);
                        if(strcmp(name1,"com1")!=0&&strcmp(name1,"com2")!=0&&
                                        strcmp(name1,"com3")!=0&&strcmp(name1,
"com4")!=0&&
                                        strcmp(name1,"com5")!=0&&strcmp(name1,
"com6")!=0&&
                                        strcmp(name1,"com7")!=0&&strcmp(name1,
"com8")!=0&&
                                        strcmp(name1,"com9")!=0&&strcmp(name1,
"com10")!=0)
                                        printf("输入有误,请重试:");
                }
                while(strcmp(name1,"com1")!=0&&strcmp(name1,"com2")!=0&&
                                strcmp(name1,"com3")!=0&&strcmp(name1,"com4")!
=0&&
                                strcmp(name1,"com5")!=0&&strcmp(name1,"com6")!
=0&&
                                strcmp(name1,"com7")!=0&&strcmp(name1,"com8")!
=0&&
                                strcmp(name1,"com9")!=0&&strcmp(name1,"com10")
!=0);
                printf("您的客户资料如下:\n");
                printf("客户名称     订货数量     要求交货时间\n");
                for(i=0;i<=1000;i++)
                        if(strcmp(name1,cus[i].proname)==0)
                        {
                                if(cus[i].needtime!=0) printf("%-7s%12d%10d\n"
,cus[i].cusname,cus[i].pronum,cus[i].needtime);
                                else printf("%-7.7s%12d         
--\n",cus[i].cusname,cus[i].pronum);
                        }
                printf("\n以上是客户详细信息,请问您下一步想:\n");
                printf("  a.重新查询\n  b.为某个客户提供优惠\n  c.退出\n请选择
:");
                scanf("%s",aorb);
                if(strcmp(aorb,"b")==0)
                {
                        do
                        {
                                strcpy(aorb1,"c");
                                printf("请输入客户名称:");
                                scanf("%s",youhui[z].name);
                                printf("您想给他打几折?");
                                scanf("%f",&youhui[z].dazhe);
                                strcpy(youhui[z].namee,name1);
                                printf("OK,该客户下次登陆购物时,将享受%.1f折
优惠!\n",youhui[z].dazhe);
                                z++;
                                printf("请问您下一步想:\n");
                                printf("  a.继续提供优惠\n  b.退出\n请选择:");
                                scanf("%s",aorb1);
                        }
                        while(strcmp(aorb1,"a")==0);
                }
        }
        while(strcmp(aorb,"a")==0);
        printf("按任意键返回主菜单......\n");
        getch();
}



//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
main()
{
        printf("                              欢迎使用本软件\n");
        printf("这是一个交易管理软件,可实现如下功能:\n");
        char choice[50];
        do
        {
                printf("\n");
                printf("******************************************************
***********\n");
                printf("*   1.查询生产厂家的详细资料                          
          *\n");
                printf("*   2.选择生产厂家并交易(建议选择交易前先察看一下厂家
的资料)    *\n");
                printf("*   3.排序功能(包括厂家和客户)                        
          *\n");
                printf("*   4.为某个厂家提供以往客户的详细资料                
          *\n");
                printf("*   0.退出程序                                        
          *\n");
                printf("******************************************************
***********\n");
                printf("\n请输入您的选择(输入选项前的序号):");
                scanf("%s",choice);
                if(strcmp(choice,"1")==0) gongneng1();
                else if(strcmp(choice,"2")==0) gongneng2();
                else if(strcmp(choice,"3")==0) gongneng3();
                else if(strcmp(choice,"4")==0) gongneng4();
                else if(strcmp(choice,"0")==0) break;
                else 
                {
                        printf("我倒,必须输入0-4的数字,请重试\n");
                        printf("按任意键返回主菜单......\n");
                        getch();
                }
        }
        while(strcmp(choice,"0")!=0);
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------


【 在 hntufei (湖南土匪) 的大作中提到: 】


--

※ 来源:·BBS 听涛站 tingtao.net·[FROM: 219.224.174.172]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.927毫秒