c语言大作业物流配送系统程序文件.docx
《c语言大作业物流配送系统程序文件.docx》由会员分享,可在线阅读,更多相关《c语言大作业物流配送系统程序文件.docx(14页珍藏版)》请在冰豆网上搜索。
c语言大作业物流配送系统程序文件
#include
#include
#include
//日期
structdate
{intyear;
intmonth;
intday;
};
//订单链表
structarticle
{charname[20];//物品名称
intnum1;//物品编号
charproduce[20];//产地
chardest[20];//目的地
charmode[20];//配送模式
intnum2;//物品数量
floatmoney;//配送金额
structdatedeliver;//配送日期
structarticle*next;//指向上一次添加的订单
};
structarticle*head;//存储订单信息
intRecordcount;//订单数量
//添加订单
voidadd()
{
system("cls");//清屏
structarticle*p=NULL;//新建一个定单节点
p=(structarticle*)malloc(sizeof(structarticle));//为新建的订单节点分配内存空间
printf("请输入配送年份:
");
while(0==scanf("%d",&p->deliver.year))//输入年份的规范性检查
{
while('\n'!
=getchar()){}
printf("输入无效,请重新输入年份:
");
}
printf("请输入配送月份:
");
while(0==scanf("%d",&p->deliver.month)||(p->deliver.month<1)||p->deliver.month>12)//输入月份的规范性检查
{
while('\n'!
=getchar()){}
printf("输入无效,请重新输入月份:
");
}
printf("请输入配送日期:
");
scanf("%d",&p->deliver.day);
printf("请输入物品名称:
");
scanf("%s",p->name);
printf("请输入物品编号:
");
scanf("%d",&p->num1);
printf("请输入物品出厂地:
");
scanf("%s",p->produce);
printf("请输入物品配送地:
");
scanf("%s",p->dest);
printf("请输入配送方式:
");
scanf("%s",p->mode);
printf("请输入配送个数:
");
scanf("%d",&p->num2);
printf("请输入配送金额:
");
scanf("%f",&p->money);
p->next=head;//将新建的订单加入订单链表
head=p;//链表头指向新添加的定单节点
Recordcount++;//订单数量加一
system("PAUSE");
}
//显示指定订单的详细信息
voidmyPrint(structarticle*p)
{
printf("%s\t",p->name);
printf("%d\t",p->num1);
printf("%s\t",p->produce);
printf("%s\t",p->dest);
printf("%s\t",p->mode);
printf("%d\t",p->num2);
printf("%.2f\t",p->money);
printf("%d-%d-%d\n",p->deliver.year,p->deliver.month,p->deliver.day);
}
//显示所有的订单信息
voidshow()
{
system("cls");
//遍历订单链表
structarticle*p=NULL;
printf("****************************************************************************\n");
printf("名称\t编号\t产地\t目的地\t模式\t数量\t金额\t日期\n");
for(p=head;p!
=NULL;p=p->next)
{
myPrint(p);
}
printf("****************************************************************************\n");
}
//查找订单
voidsearch()
{
system("cls");
charnamesea[30];//名称
inttype;//编号
intchoice;
structarticle*p=NULL;
printf("1按姓名查找\n2按编号查找\n");
printf("请输入你的选择:
");
//scanf("%d",&choice);
while(0==scanf("%d",&choice)||(choice!
=1&&choice!
=2))//输入选择的规范性检查
{
while('\n'!
=getchar()){}
printf("输入无效,请重新选择:
");
}
if(choice==1)//按物品名称查找订单
{
printf("请输入物品名称:
");
scanf("%s",namesea);
for(p=head;p!
=NULL;p=p->next)
if(strcmp(p->name,namesea)==0)//找到订单,输出其详细信息
{
printf("****************************************************************************\n");
printf("名称\t编号\t产地\t目的地\t模式\t数量\t金额\t日期\n");
myPrint(p);
printf("****************************************************************************\n");
}
}
else//按物品编号查找订单
{
printf("请输入物品编号\n");
scanf("%d",&type);
for(p=head;p!
=NULL;p=p->next)
if(p->num1==type)//找到订单,输出其详细信息
{
printf("****************************************************************************\n");
printf("名称\t编号\t产地\t目的地\t模式\t数量\t金额\t日期\n");
myPrint(p);
printf("****************************************************************************\n");
}
}
system("PAUSE");
}
//根据物品名称修改对应订单信息
voidchange()
{
charname[30];
system("cls");
structarticle*p=NULL;
printf("请输入要更改物品的名称:
\n");
scanf("%s",name);
//遍历订单链表,找到对应的订单
for(p=head;p!
=NULL;p=p->next)
if(strcmp(p->name,name)==0)//找到对应的订单,重新输入其信息
{
printf("请输入配送年份:
");
while(0==scanf("%d",&p->deliver.year))//输入年份的规范性检查
{
while('\n'!
=getchar()){}
printf("输入无效,请重新输入年份:
");
}
printf("请输入配送月份:
");
while(0==scanf("%d",&p->deliver.month)||(p->deliver.month<1)||p->deliver.month>12)//输入月份的规范性检查
{
while('\n'!
=getchar()){}
printf("输入无效,请重新输入月份:
");
}
printf("请输入配送日期:
");
scanf("%d",&p->deliver.day);
printf("请输入物品名称:
");
scanf("%s",p->name);
printf("请输入物品编号:
");
scanf("%d",&p->num1);
printf("请输入物品出厂地:
");
scanf("%s",p->produce);
printf("请输入物品配送地:
");
scanf("%s",p->dest);
printf("请输入配送方式:
");
scanf("%s",p->mode);
printf("请输入配送个数:
");
scanf("%d",&p->num2);
printf("请输入配送金额:
");
scanf("%f",&p->money);
}
system("pause");
}
//根据物品名称和配送金额删除对应订单信息
voiddelete_rec()
{
system("cls");
charname[20];
floatmoney;
intchoice;
structarticle*p=NULL,*q=NULL;
p=head;
q=head;
printf("请输入要删除的物品名称:
");
scanf("%s",name);
printf("请输入金额:
");
scanf("%f",&money);
for(;q!
=NULL;q=q->next)
{
if((head->money==money)&&(strcmp(head->name,name)==0))//要删除的订单为订单列表中的第一个订单
{
printf("****************************************************************************\n");
printf("名称\t编号\t产地\t目的地\t模式\t数量\t金额\t日期\n");
myPrint(q);
printf("****************************************************************************\n");
printf("确认删除?
\n1是\n2否\n");
//scanf("%d",&choice);
while(0==scanf("%d",&choice)||(choice!
=1&&choice!
=2))//输入选择的规范性检查
{
while('\n'!
=getchar()){}
printf("输入无效,请重新选择:
");
}
if(choice==1)//删除
{
head=q->next;
Recordcount--;
}
elsebreak;//取消删除
}
else//要删除的订单不是订单列表中的第一个订单
{
if((q->money==money)&&(strcmp(q->name,name)==0))//找到对应的订单进行删除
{
printf("****************************************************************************\n");
printf("名称\t编号\t产地\t目的地\t模式\t数量\t金额\t日期\n");
myPrint(q);
printf("****************************************************************************\n");
printf("确认删除?
\n1是\n2否\n");
//scanf("%d",&choice);
while(0==scanf("%d",&choice)||(choice!
=1&&choice!
=2))//输入选择的规范性检查
{
while('\n'!
=getchar()){}
printf("输入无效,请重新选择:
");
}
if(choice==1)//删除
{
p->next=q->next;
Recordcount--;
}
elsebreak;//取消删除
}
}
}
}
//存储订单链表到文件
voidlogistic()
{
charch;
charfile_head[]="****************************************************************************\n名称\t编号\t产地\t目的地\t模式\t数量\t金额\t日期\n";
charfile_tail[]="****************************************************************************\n";
FILE*fp;
if((fp=fopen(".\\record.txt"/*filename*/,"w"))==NULL)
{
printf("无法打开文件\n");
exit(0);
}
fputs(file_head,fp);//写入文件头
structarticle*p=NULL;
for(p=head;p!
=NULL;p=p->next)//遍历订单链表,将各个订单信息逐次写入文件
{
fputs(p->name,fp);
fprintf(fp,"\t%d\t",p->num1);
fputs(p->produce,fp);
fprintf(fp,"\t","");
fputs(p->dest,fp);
fprintf(fp,"\t","");
fputs(p->mode,fp);
fprintf(fp,"\t%d\t",p->num2);
fprintf(fp,"%.2f\t",p->money);
fprintf(fp,"%d-%d-%d\n",p->deliver.year,p->deliver.month,p->deliver.day);
}
fputs(file_tail,fp);
rewind(fp);
fclose(fp);
printf("所有订单信息已经存入ecord.txt文件中!
\n");
}
//打印主菜单
voidmenu()
{
system("cls");
printf("************************************\n");
printf("欢迎使用物流配送管理系统\n");
printf("************************************\n");
printf("1:
添加记录\n");
printf("2:
显示记录\n");
printf("3:
存储记录\n");
printf("4:
查询记录\n");
printf("5:
更改记录\n");
printf("6:
删除记录\n");
printf("7:
退出\n");
}
voidmain()
{intn,b=1,s;
structarticle*head=NULL;
voidadd();
voidshow();
voidlogistic();
voidsearch();
voidchange();
voiddelete_rec();
voidmenu();
while(b==1)
{
menu();
printf("请输入您的选择:
\n");
while(0==scanf("%d",&n))
{
while('\n'!
=getchar()){}
printf("输入无效,请重新输入!
\n");
}
switch(n)//系统功能调用
{
case1:
add();break;
case2:
show();break;
case3:
logistic();break;
case4:
search();break;
case5:
change();break;
case6:
delete_rec();break;
case7:
exit(0);break;
default:
printf("error\n");
}
printf("是否返回主菜单?
0是1否\n");
while(0==scanf("%d",&s)||(s!
=0&&s!
=1))
{
while('\n'!
=getchar()){}
printf("输入无效!
\n");
}
b=b+s;
}
}