当前位置:文档之家› 物资管理系统 C语言课程设计

物资管理系统 C语言课程设计

物资管理系统程序设计本程序在VC++ 6.0上运行无误!!!一、题目要求:主程序中,应提供文字交互菜单界面。

要求包含以下几个功能模块:(1).信息输入模块input():建立物资管理数据总文件,完成对物资原库存信息的录入,并将其存放在指定的文件(product.txt)。

(2).信息查找模块search():采用如下方式进行查找,若找到,则输出该物资的相关信息;否则,输出提示信息,如“NO FOUND”。

1).按产品信息查询;2).按进货信息查询并统计(统计某年某月进的某种产品数量,产品种类);3).按产品名称和规模查询并统计;(3).新物资入库模块:在原文件插入新物资信息。

(4).领料模块:查找所领取物资信息,若满足领料的要求,请登记领取物资名称,领料的日期,所领数量(领料后对库存修改)。

(5).打印功能模块:1).打印领料单;2).打印物资库存清单。

二、需求分析(1)、库存和领料信息以文本文件的方式存放在两个文件里,提供相应的输入输出操作。

(2)、提供库存几种方式的查找。

(3)、提供库存的建立、插入。

(4)、能查找满足领货要求的信息,并修改库存、领货文本文件。

三、总体设计根据要求可以将系统设计为七大模块。

四、详细设计1、主函数主函数只调用主菜单函数。

2、主菜单函数//********主函数********void menu(){int n,w=0;printf("\t\t**************Menu**************\n");printf("\ninput your choice:\n");scanf("%d",&n);do{if(n>6||n<1){printf("\nWrong!Input agin!\n");scanf("%d",&n);}else w=1;}while(w!=1);switch(n){case 1:input();break; 输入case 2:search_menu();break; 查找菜单流程图case 3:insert();break; 插入case 4:lend();break; 领货case 5:print_menu();break; 打印菜单case 6:exit(0); 退出}}3、输入模块[数据结构]所输入的数据在磁盘上以文本文件的形式保存,名字为product.txt! 在程序中以链表的形式储存!结构体如下:struct date /*日期结构体*/{int year;int month;int day;};struct product /*库存货物结构体*/{char p_name[20]; /*货物名称*/long int p_num; /*物资编号char size[4]; /*物资规格*/struct date in_date; /*进货日期*/long int max_s; /*最大库存量*/long int min_s; /*最小库存量*/long int real_s; /*实际库存量*/struct product *next;/*节点指针*//*输入函数*/[分析]:以只写的方式打开文件"product.txt",在do—while循环中输入各种货物的信息。

以输入flag植的方式判断是否结束循环。

结束循环后调用主菜单函数![程序代码] 流程图void input(){void menu();int flag;struct product p;FILE *fp;if((fp=fopen("product.txt","w"))==NULL)printf("\n\nCannot open file!\n\n");do{printf("input a product message:\n");printf("the formart is:s ld s d d d ld ld ld\n");scanf("%s %ld %s %d %d %d %ld %ld%ld", p.p_name,&p.p_num ,p.size,&p.in_date.year,&p.in_date.month,&p.in_date.day,&p.max_s,&p.min_s,&p.real_s);fprintf(fp,"%s %ld %s %d %d %d %ld %ld %ld",p.p_name,p.p_num,p.size,p.in_date.year,p.in_date.month,p.in_date.da y,p.max_s,p.min_s,p.real_s); 写入库存文件printf("Do you want to go on?\nYes,input 1;else 0:\n");判断是否继续输入scanf("%d",&flag);}while(flag==1);fclose(fp);menu(); 回主菜单}4.插入模块[需求分析]该模块的功能是仓库管理员追加新的货物信息,从键盘逐条输入,并逐条写入指定文本文件。

文件打开方式为“a+”。

[流程图]/*插入*/void insert(){void menu();struct product p;FILE *fp;if((fp=fopen("product.txt","a+"))==NULL)printf("\n\nCannot open file!\n\n");printf("insert a product message:\n");printf("the formart is:s ld s d d d ld ld ld\n");scanf("%s %ld %s %d %d %d %ld %ld %ld",p.p_name,&p.p_num,p.size,&p.in_date.year,&p.in_date.month,&p.in_ date.day,&p.max_s,&p.min_s,&p.real_s);fprintf(fp,"%s %ld %s %d %d %d %ld %ld %ld",p.p_name,p.p_num,p.size,p.in_date.year,p.in_date.month,p.in_dat e.day,p.max_s,p.min_s,p.real_s);menu();}5、查询模块[需求分析]在本模块,提供三种方式查询,分别是按名称查询,按日期查询,按规格查询!首先在菜单函数中提供三种查询方式的入口。

首先在菜单函数中调用建立库存链表函数,将文件中的信息存入链表,以方便查询!在各个查询函数中,利用链表查询,并统计满足要求的记录条数!5-1查找菜单在查找菜单中,提供几种查找方式的入口。

[流程图]/*货物库存列表建立*/struct product* build_list(){struct product *head,*p,*p1,*p2;FILE *fp;if((head=(struct product*)malloc(sizeof(struct product)))==NULL)printf("\n\nCannot build List!\n\n");p=head;p1=head;if((fp=fopen("product.txt","r"))==NULL) 只读方式打开文件{printf("\n\nCannot open file!\n\n");}for(i=0;!feof(fp);i++) 读取数据并存入链表{fscanf(fp,"%s %ld %s %d %d %d %ld %ld %ld",&p->p_name,&p->p_num,&p->size,&p->in_date.year,&p->in_date.mont h,&p->in_date.day,&p->max_s,&p->min_s,&p->real_s);p->next=NULL;p1->next=p;p1=p;p2=(struct product*)malloc(sizeof(struct product));p=p2;}fclose(fp); 关闭文件return(head); 返回头节点指针}[程序代码]void search_menu() 查找菜单{void menu();int n,w;struct product *head;head=build_list();printf("\t\t**********Search Menu************\n");printf("\t\t\t(1).search as goods name\n\t\t\t(2).search as date\n\t\t\t(3)search as size\n\t\t\t(4).menu");printf("\n\t\t*********************************\n");printf("\ninput your choice:\n");scanf("%d",&n); 输入选择do{if(n>4||n<1){printf("\nWrong!Input agin!\n");}else w=1;}while(w!=1);switch(n) 根据选择,进入各模块{case 1:search_name(head);break;case 2:search_date(head);break;case 3:search_size(head);break;case 4:menu();}}5-2按名称查找输入想查找货物的名称,查找到与之匹配的信息后输出。

相关主题