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毫秒