1、C语言课程设计物资管理系统492020年4月19日文档仅供参考C语言程序设计报告物资管理系统实习成员:姓 名学 号贡献率(%)e-mail组长吴 江34%成员韩艺超33%黄杨洋33%专 业: 网络工程 班 级: 网092班 指导教师: 程 泽 凯 /12/12课 题: 物资管理系统问题描述: 建立物资管理信息系统,包括仓库内的物资信息、入库信息、车库信息等,物资信息为物资编号、物资名称、规格类型、类别、计量单位等;入库信息为物资编号、物资名称、规格型号、类别、计量单位、数理、单价、金额、入库时间、经办人、保管人等;出库信息为物资编号、物资名称、规格型号、类别、计量单位、数理、单价、金额、领用时
2、间、经办人、领用人等;物资余额信息为物资编号、物资名称、规格类型、类别、计量单位、数量、金额等。功能要求:(1)各种物资管理信息需要利用文件的形式进行存储。(2)输入功能:能够从键盘或文件中一次性输入多条信息;(3)输出功能:可将入库、出库等信息打印输出或显示;(4)查找功能:根据物资信息、或经办人、保管人等查找出所需信息;(5)增加、删除、修改功能:完成物资信息的多种更新;(6)统计功能:完成入库、出库、库存等信息的统计功能。总体设计:根据上面的分析及题目要求能够分为以下六个模块(系统模块如下图1。)物资管理系统产品信息录入产品信息查询产品信息修改产品信息统计退出系统产品信息输出程序实现:(
3、一)主函数一般设计简洁,用switch结构实现对各功能函数的调用,其中包括input()、load()、output()、search()、count()、save()、quit()。(所有函数中用链表实现数据的传递)(二)各功能函数的实现: Input():主要是为了输入商品编号,名称,数量,型号,单价,日期,实库存量,保管人,经办人等。以上物资信息均存放在以全局变量first为头指针的链表中,每输入一组信息生成一个节点,并在函数结尾用if判断是否继续录入,若需要则调用input()函数自身,若不需要则退出。 请输入第 1th中商品信息 :number: 1234567name: apple
4、storekeeper: zhangsanquantity: kgprice: 3/kg input() char flag=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
5、=get_last(first); last-next=new_addr; scanf_product(&(new_addr-pro); getchar(); printf(ncontinue?(Y/N); flag=getchar(); if(flag=Y|flag=y) input(); printf(n*nn);Show():显示所有入库物资信息,经过遍历链表的每一个节点实现。show() addr_product *p=first;printf(n*nn);printf( show );printf(n*n); if(p=NULL) printf(none product); else
6、 while(p!=NULL) print_product(&(p-pro); p=p-next; getchar(); getchar(); printf(n*nn);Search():查询函数,可根据物资的编号,名称,保管人等信息进行查询,遍历链表,将输入的信息与链表节点中的信息进行比对,若找到则将查询结果用printf_product()函数输出。search() int n,flag;printf(n*nn); printf( search ); printf(n*n); do puts(ntt*search menu*nn); puts(ttt1.search-by-name); p
7、uts(ttt2.search-by-number); puts(ttt3.search-by-storekeeper); puts(ttt4.back); puts(nntt*n); printf(function choose 1-4: bb); scanf(%d,&n); if(n4) flag=1; getchar(); else flag=0; while(flag=1);switch(n) case 1:search_by_name();break; case 2:search_by_number();break; case 3:search_by_storekeeper();br
8、eak; case 4:getch(); printf(n*nn);Search()函数提供三种查询方式:编号、名称、保管人 search_by_name() int count=0; char input=N; char nameMAX_name=0; addr_product *p=first; printf(nn search_by_name nn); printf(nplease enter the name you want search:); scanf(%s,name); while(p!=NULL) if(strcmp(p-pro.name,name)=0) print_pro
9、duct(&(p-pro); count+; p=p-next; if(count=0) printf(ncan not find %s.n,name); printf(ncontinue?(Y/N); getchar(); input=getchar(); if(input=Y|input=y) search(); search_by_number() int count=0; char input=N; char numberMAX_name=0; addr_product *p=first; printf(nn search_by_number nn); printf(please en
10、ter the number you want search:); 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(can not find %s.n,number); printf(ncontinue?(Y/N); getchar(); input=getchar(); if(input=Y|input=y) search(); search_by_storekeeper() int c
11、ount=0; char input=N; char storekeeperMAX_name=0; addr_product *p=first; printf(nn search_by_storekeeper nn); printf(please enter the storekeeper you want search:); scanf(%s,storekeeper); while(p!=NULL) if(strcmp(p-pro.storekeeper,storekeeper)=0) print_product(&(p-pro); count+; p=p-next; if(count=0)
12、 printf(can not find %s.n,storekeeper); printf(ncontinue?(Y/N); getchar(); input=getchar(); if(input=Y|input=y) search(); Output ( ): 与物资出库相关的函数,首先输入出库物资的名称及数量,然后在链表中找到对应的物资,将其数量减去出库数量。output() char nameMAX_name=0; char input=N; int quantity; int count=0; addr_product *p=first; printf(n*n);printf( o
13、utput );printf(n*n); printf(please enter information of output product!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(can not find %s.n,name); printf(ncontinue?(Y/
14、N); getchar(); input=getchar(); if(input=Y|input=y) output(); printf(n*nn);Count ():统计函数,统计库存物资信息并显示。将原链表中名称相同的物资合并(即数量相加),然后赋值在以first_cp为头指针的新链表中。完成后先调用show()函数显示结果,然后调用save()函数保存到文件中。count() int count=0; addr_product *cp=NULL; addr_product *first_cp=NULL,*last_cp=NULL; addr_product *p=first; addr_
15、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-p
16、ro.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!=NUL
17、L); p=first_cp; printf(resault!n); while(p!=NULL) print_product(&(p-pro); p=p-next; save(first_cp); getchar(); getchar(); printf(n*nn);Save ():保存函数,用文件存储物资的信息。save(addr_product *from) FILE *fp; char file100; addr_product *p=from; printf(n*n); printf( save ); printf(n*n); printf(please enter name of
18、file!:); scanf(%s,file); fp=fopen(file,w); while(p!=NULL) fprintf(fp,number:%snname:%snstorekeeper:%snquantity:%dnprice:%dn, p-pro.number,p-pro.name, p-pro.storekeeper, p-pro.quantity,p-pro.price); p=p-next; fclose(fp); printf(nnsuccessful save.nany key return to menun); getchar(); getchar(); printf
19、(n*nn);辅助函数:Scanf_product()键入产品信息,将键入的信息赋值到指针微p的节点中。;scanf_product(product* p) printf(Please enter the massage of product!n); printf(Please enter number(longest permition %d):n,MAX_name-1); scanf(%s,p-number); printf(Please enter name(longest permition %d):n,MAX_name-1); scanf(%s,p-name); printf(Ple
20、ase enter storekeeper(longest permition %d):n,MAX_name-1); scanf(%s,p-storekeeper); printf(Please enter quantity(longest permition %d):n,MAX_name-1); scanf(%d,&(p-quantity); printf(Please enter price(longest permition %d):n,MAX_name-1); scanf(%d,&(p-price);pintf_product()输出产品信息;print_product(product
21、* p) printf(nn*n); printf(nnumber:%s,p-number); printf(nname:%s,p-name); printf(nstorekeeper:%s,p-storekeeper); printf(nquantity:%d,p-quantity); printf(nprice:%dn,p-price); printf(n*nn);get_last() 得到链表最后一个结点的指针;addr_product* get_last( addr_product* from) addr_product* p=from; while(p-next!=NULL) p=p
22、-next; return p;程序及运行结果截图:#include#include#define MAX_name 15#define MAX_number 15typedef struct _product char numberMAX_number; char nameMAX_name; char storekeeperMAX_name; int quantity; int price;product;typedef struct _addr_product product pro; struct _addr_product *next;addr_product;char menu= +
23、=+n | Material management system |n +-+n | 1 input |n | 2 load |n | 3 show |n | 4 search |n | 5 output |n | 6 count |n | 7 save |n | 8 exit |n +=+n ;addr_product *first=NULL;addr_product* get_last( addr_product* from) addr_product* p=from; while(p-next!=NULL) p=p-next; return p;scanf_product(product
24、* p) printf(Please enter the massage of product!n); printf(Please enter number(longest permition %d):n,MAX_name-1); scanf(%s,p-number); printf(Please enter name(longest permition %d):n,MAX_name-1); scanf(%s,p-name); printf(Please enter storekeeper(longest permition %d):n,MAX_name-1); scanf(%s,p-stor
25、ekeeper); printf(Please enter quantity(longest permition %d):n,MAX_name-1); scanf(%d,&(p-quantity); printf(Please enter price(longest permition %d):n,MAX_name-1); scanf(%d,&(p-price);print_product(product* p) printf(nn*n); printf(nnumber:%s,p-number); printf(nname:%s,p-name); printf(nstorekeeper:%s,
26、p-storekeeper); printf(nquantity:%d,p-quantity); printf(nprice:%dn,p-price); printf(n*nn); input() char flag=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
27、=NULL; if(first=NULL) first=new_addr; else last=get_last(first); last-next=new_addr; scanf_product(&(new_addr-pro); getchar(); printf(ncontinue?(Y/N); flag=getchar(); if(flag=Y|flag=y) input(); printf(n*nn);load() addr_product *p=NULL; addr_product *last=NULL; FILE *fp=NULL; FILE *PRODUCT_FILE=NULL; int count=0; p=(addr_product*)malloc(sizeof(addr_product); memset(p,0,sizeof(addr_product); p-next=NULL; fp=fopen(PRODUCT_FILE,rb); while(fread(&(p-next),sizeof(addr_product),1,fp)=1) if(first=NULL) first=p; else last=get_last(p); last-next=p; count+; fseek(fp,count*sizeof(addr_product
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100