C语言课程设计物资管理系统.docx
- 文档编号:6386124
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:34
- 大小:367.71KB
C语言课程设计物资管理系统.docx
《C语言课程设计物资管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计物资管理系统.docx(34页珍藏版)》请在冰豆网上搜索。
C语言课程设计物资管理系统
C语言课程设计--物资管理系统
(5)增加、删除、修改功能:
完成物资信息的多种更新;
(6)统计功能:
完成入库、出库、库存等信息的统计功能。
总体设计:
根据上面的分析及题目要求可以分为以下六个模块(系统模块如下图1。
)
程序实现:
(一)主函数一般设计简洁,用switch结构实现对各功能函数的调用,其中包括input()、load()、output()、search()、count()、save()、quit()。
(所有函数中用链表实现数据的传递)
(二)各功能函数的实现:
Input():
主要是为了输入商品编号,名称,数量,型号,单价,日期,实库存量,保管人,经办人等。
以上物资信息均存放在以全局变量first为头指针的链表中,每输入一组信息生成一个节点,并在函数结尾用if判断是否继续录入,若需要则调用input()函数自身,若不需要则退出。
请输入第1th中商品信息:
number:
1234567
name:
apple
storekeeper:
zhangsan
quantity:
2000kg
price:
3/kg
……
input()
{charflag='N';
addr_product*last=NULL;
addr_product*new_addr=(addr_product*)malloc(sizeof(addr_product));
printf("\n****************************************************************\n");
printf("input");
printf("\n****************************************************************\n");
memset(new_addr,0,sizeof(addr_product));
new_addr->next=NULL;
if(first==NULL)
{
first=new_addr;
}
else
{
last=get_last(first);
last->next=new_addr;
}
scanf_product(&(new_addr->pro));
getchar();
printf("\n>continue?
(Y/N)");
flag=getchar();
if(flag=='Y'||flag=='y')
{
input();
}
printf("\n*************************************************************\n\n");
}
Show():
显示所有入库物资信息,通过遍历链表的每一个节点实现。
show()
{
addr_product*p=first;
printf("\n*****************************************************************\n\n");
printf("show");
printf("\n******************************************************************\n");
if(p==NULL)
{
printf("noneproduct");
}
else
{
while(p!
=NULL)
{
print_product(&(p->pro));
p=p->next;
}
}
getchar();
getchar();
printf("\n***********************************************************\n\n");
}
Search():
查询函数,可根据物资的编号,名称,保管人等信息进行查询,遍历链表,将输入的信息与链表节点中的信息进行比对,若找到则将查询结果用printf_product()函数输出。
search()
{intn,flag;
printf("\n****************************************************************\n\n");
printf("search");
printf("\n******************************************************************\n");
do
{
puts("\n\t\t****************searchmenu***************\n\n");
puts("\t\t\t1.search-by-name");
puts("\t\t\t2.search-by-number");
puts("\t\t\t3.search-by-storekeeper");
puts("\t\t\t4.back");
puts("\n\n\t\t***************************************\n");
printf("functionchoose[1-4]:
[]\b\b");
scanf("%d",&n);
if(n<1||n>4)
{
flag=1;
getchar();
}
elseflag=0;
}while(flag==1);
switch(n)
{
case1:
search_by_name();break;
case2:
search_by_number();break;
case3:
search_by_storekeeper();break;
case4:
getch();
}
printf("\n*************************************************************\n\n");
}
Search()函数提供三种查询方式:
编号、名称、保管人
search_by_name()
{
intcount=0;
charinput='N';
charname[MAX_name]={0};
addr_product*p=first;
printf("\n\nsearch_by_name\n\n");
printf("\npleaseenterthenameyouwantsearch:
");
scanf("%s",name);
while(p!
=NULL)
{if(strcmp(p->pro.name,name)==0)
{
print_product(&(p->pro));
count++;
}
p=p->next;
}
if(count==0)
{
printf("\ncannotfind%s.\n",name);
}
printf("\n>continue?
(Y/N)");
getchar();
input=getchar();
if(input=='Y'||input=='y')
{
search();
}
}
search_by_number()
{
intcount=0;
charinput='N';
charnumber[MAX_name]={0};
addr_product*p=first;
printf("\n\nsearch_by_number\n\n");
printf("pleaseenterthenumberyouwantsearch:
");
scanf("%s",number);
while(p!
=NULL)
{if(strcmp(p->pro.number,number)==0)
{
print_product(&(p->pro));
count++;
}
p=p->next;
}
if(count==0)
{
printf("cannotfind%s.\n",number);
}
printf("\n>continue?
(Y/N)");
getchar();
input=getchar();
if(input=='Y'||input=='y')
{
search();
}
}
search_by_storekeeper()
{
intcount=0;
charinput='N';
charstorekeeper[MAX_name]={0};
addr_product*p=first;
printf("\n\nsearch_by_storekeeper\n\n");
printf("pleaseenterthestorekeeperyouwantsearch:
");
scanf("%s",storekeeper);
while(p!
=NULL)
{if(strcmp(p->pro.storekeeper,storekeeper)==0)
{
print_product(&(p->pro));
count++;
}
p=p->next;
}
if(count==0)
{
printf("cannotfind%s.\n",storekeeper);
}
printf("\n>continue?
(Y/N)");
getchar();
input=getchar();
if(input=='Y'||input=='y')
{
search();
}
}
Output():
与物资出库相关的函数,首先输入出库物资的名称及数量,然后在链表中找到对应的物资,将其数量减去出库数量。
output()
{
charname[MAX_name]={0};
charinput='N';
intquantity;
intcount=0;
addr_product*p=first;
printf("\n*****************************************************************\n");
printf("output");
printf("\n*****************************************************************\n");
printf("pleaseenterinformationofoutputproduct!
\n");
printf("name:
");
scanf("%s",name);
printf("\nquantity:
");
scanf("%d",&quantity);
while(p!
=NULL)
{if(strcmp(p->pro.name,name)==0)
{
p->pro.quantity-=quantity;
count++;
}
p=p->next;
}
if(count==0)
{
printf("cannotfind%s.\n",name);
}
printf("\n>continue?
(Y/N)");
getchar();
input=getchar();
if(input=='Y'||input=='y')
{
output();
}
printf("\n***********************************************************\n\n");
}
Count():
统计函数,统计库存物资信息并显示。
将原链表中名称相同的物资合并(即数量相加),然后赋值在以first_cp为头指针的新链表中。
完成后先调用show()函数显示结果,然后调用save()函数保存到文件中。
count()
{
intcount=0;
addr_product*cp=NULL;
addr_product*first_cp=NULL,*last_cp=NULL;
addr_product*p=first;
addr_product*new_addr=(addr_product*)malloc(sizeof(addr_product));
memset(new_addr,0,sizeof(addr_product));
printf("\n****************************************************************\n");
printf("count");
printf("\n****************************************************************\n");
first_cp=new_addr;
first_cp->next=NULL;
if(cp==NULL)
{
cp=new_addr;
cp->pro=p->pro;
cp->next=NULL;
}
p=p->next;
do{
count=0;
do{
cp=first_cp;
if(strcmp(p->pro.name,cp->pro.name)==0)
{
cp->pro.quantity+=p->pro.quantity;
count=1;
cp=cp->next;
break;
}
else
{
cp=cp->next;
}
}while(cp!
=NULL);
if(count==0)
{last_cp=get_last(first_cp);
last_cp=(addr_product*)malloc(sizeof(addr_product));
memset(last_cp,0,sizeof(addr_product));
cp=last_cp;
cp->pro=p->pro;
cp->next=NULL;
}
p=p->next;
}while(p!
=NULL);
p=first_cp;
printf("resault!
\n");
while(p!
=NULL)
{
print_product(&(p->pro));
p=p->next;
}
save(first_cp);
getchar();
getchar();
printf("\n***********************************************************\n\n");
}
Save():
保存函数,用文件存储物资的信息。
save(addr_product*from)
{
FILE*fp;
charfile[100];
addr_product*p=from;
printf("\n*****************************************************************\n");
printf("save");
printf("\n*****************************************************************\n");
printf("pleaseenternameoffile!
:
");
scanf("%s",file);
fp=fopen(file,"w");
while(p!
=NULL)
{
fprintf(fp,"number:
%s\nname:
%s\nstorekeeper:
%s\nquantity:
%d\nprice:
%d\n",
p->pro.number,p->pro.name,p->pro.storekeeper,p->pro.quantity,p->pro.price);
p=p->next;
}
fclose(fp);
printf("\n\nsuccessfulsave.\nanykeyreturntomenu\n");
getchar();
getchar();
printf("\n*************************************************************\n\n");
}
辅助函数:
Scanf_product()
键入产品信息,将键入的信息赋值到指针微p的节点中。
;
scanf_product(product*p)
{
printf("Pleaseenterthemassageofproduct!
\n");
printf("Pleaseenternumber(longestpermition%d):
\n",MAX_name-1);
scanf("%s",p->number);
printf("Pleaseentername(longestpermition%d):
\n",MAX_name-1);
scanf("%s",p->name);
printf("Pleaseenterstorekeeper(longestpermition%d):
\n",MAX_name-1);
scanf("%s",p->storekeeper);
printf("Pleaseenterquantity(longestpermition%d):
\n",MAX_name-1);
scanf("%d",&(p->quantity));
printf("Pleaseenterprice(longestpermition%d):
\n",MAX_name-1);
scanf("%d",&(p->price));
}
pintf_product()
输出产品信息;
print_product(product*p)
{
printf("\n\n************************************************************\n");
printf("\nnumber:
%s",p->number);
printf("\nname:
%s",p->name);
printf("\nstorekeeper:
%s",p->storekeeper);
printf("\nquantity:
%d",p->quantity);
printf("\nprice:
%d\n",p->price);
printf("\n************************************************************\n\n");
}
get_last()
得到链表最后一个结点的指针;
addr_product*get_last(addr_product*from)
{
addr_product*p=from;
while(p->next!
=NULL)
{
p=p->next;
}
returnp;
}
程序及运行结果截图:
#include
#include
#defineMAX_name15
#defineMAX_number15
typedefstruct_product
{charnumber[MAX_number];
charname[MAX_name];
charstorekeeper[MAX_name];
intquantity;
intprice;
}product;
typedefstruct_addr_product
{productpro;
struct_addr_product*next;
}addr_product;
charmenu[]=
"+=======================================================================+\n"
"|Materialmanagementsystem|\n"
"+-----------------------------------------------------------------------------------------------------------------------+\n"
"|1input|\n"
"|2load|\n"
"|3show|\n"
"|4search|\n"
"|5output|\n"
"|6count|\n"
"|7save|\n"
"|8exit|\n"
"+=======================================================================+\n";
addr_product*first=NULL;
addr_product*get_last(addr_product*from)
{
addr_product*p=from;
while(p->next!
=NULL)
{
p=p->next;
}
returnp;
}
scanf_product(product*p)
{
printf("Pleaseenterthemassageofproduct!
\n");
printf("Pleaseenternumber(longestpermition%d):
\n",MAX_name-1);
scanf("%s",p->number);
printf("Pleaseentername(longestpermition%d):
\n",MAX_name-1);
scanf("%s",p->name);
printf("Pleaseenterstorekeeper(longestpermition%d):
\n",MAX_name-1);
scanf("%s",p->storekeeper);
printf("Pleaseenterquantity(longestpermition%d):
\n",MAX_name-1);
scanf("%d",&(p->quantity));
printf("Pleaseenterprice(longestp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 物资 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)