正式版 c语言课设.docx
- 文档编号:11343025
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:28
- 大小:384.45KB
正式版 c语言课设.docx
《正式版 c语言课设.docx》由会员分享,可在线阅读,更多相关《正式版 c语言课设.docx(28页珍藏版)》请在冰豆网上搜索。
正式版c语言课设
沈阳航空工业学院
课程设计报告
课程设计名称:
C语言课程设计
课程设计题目:
食品仓库管理系统程序
院(系):
计算机学院
专业:
计算机科学与技术
班级:
94010101
学号:
2009040101009
姓名:
付波
指导教师:
张潞
完成日期:
2010年03月21日
目录
第1章需求分析1
1.1社会需求1
1.2题目的内容与要求1
第2章概要设计2
第3章详细设计3
3.1主模块3
3.2录入仓库食品信息模块4
3.3打印仓库食品信息模块5
3.4添加仓库食品信息模块6
3.5删除仓库食品信息模块7
3.6修改食库食品信息模块8
3.7操作并产生统计报表9
3.8处理过期食品并打印其清单10
3.9查询仓库产品信息模块10
第4章调试分析12
第5章使用说明13
参考文献15
附录(程序清单)16
第1章需求分析
1.1社会需求
在当今仓库的对库存食品系统化管理的大趋势下,对食品的管理的安全,高效的要求越来越高,所以对管理系统的优化设计也越来越高。
某食品仓库需要一个能够管理食品仓库的程序,希望通过此程序能够很好的管理仓库的食品。
1.2题目的内容与要求
内容:
某食品仓库管理程序保存如下——产品编号,产品名称,产地,计量单位,单价,数量,进货日期,保质期,选择一种数据结构保存以上信息,实现以下功能:
(1)输入数据,建立库存商品信息。
(2)有查询,添加,删除和修改商品信息的功能。
(3)以日为单位,对库存商品的产品的入库与出库进行操作,并产生统计报表。
(4)根据当天日期统计即将到期的库存商品,进行相应处理,并打印其清单备注。
第2章概要设计
本程序主要分为九个模块:
主模块,录入模块,打印模块,查询模块,添加模块,删除模块,修改模块,操作并产生统计报表模块,处理过期食品并打印清单备注模块。
主模块:
调用函数,控制程序的运行。
录入模块:
输入食品信息并保存。
打印模块:
查看是否录入信息。
查询模块:
查询所需的食品信息。
添加模块:
添加要保存的食品信息。
删除模块:
删除不需要的食品信息。
修改模块:
修改食品信息。
操作并产生统计报表模块:
对食品的出入仓库的处理并产生统计表。
处理过期食品并打印清单备注模块:
对食品的过期处理并打印备注清单。
该程序充分的考虑到管理者要求,做到人性化的自动管理。
图2.1某食品仓库管理功能
第3章详细设计
3.1主模块
控制整个程序的运行,通过主函数模块分别调用各个模块,实现各项功能。
在对程序的预处理时,充分的考虑了用户的需求及习惯,先对食品名称的处理,一般对食品名称比较短,所以我把名称定义大小20的字符串的数组,在价格方面,定义为浮点型的,这样便于用户的操作与计算。
在定义产地的数组时,考虑到地名不算长,定义为20大小的字符串数组。
进货日期用结构体的形式定义的,这样方便用户的查看。
在录入和打印的系统中,用户可以输入食品编号,名称,产地,计量单位,单价,数量,进货日期,保值期,对食品进行详细的说明,并且可以看见食品的详细信息。
在查询和删除系统中,用户可以根据具体情况进行查询,删除已有的食品。
可以查看到食品的详细的信息,对仓库进行一系列的操作。
在修改系统中,用户可以先输入食品的编号后,再按人性化的提示输入修改的信息。
这样既节约用户宝贵的时间,又对食品的具体信息非常的了解,对食品的安全储存,使用做出最好的准备,符合国家的本着对人的生命安全储存食品的具体要求,又能在食品的有效期以前处理食品做好准备。
而操作并产生统计报表和处理过期产品并打印其清单的系统更是做到了只有想不到的,没有做不到的服务。
操作并产生统计报表可以选择入库,出库,产生统计报表的操作,做到一键多能。
可以对仓库最近的出库与入库,产生统计报表进行一系列的操作。
处理过期产品并打印其清单系统中,可以输入当日的日期,系统自动删除已过期食品,并打印已删除的食品的信息。
做到了让管理者省心,放心,让安全食品储存的高效的服务。
这个程序根据当今社会的需求而设,能做到高效,安全,人性化的服务。
3.2录入仓库食品信息模块
(1)录入信息模块,函数名为save(pro,n)。
(2)save(pro,n)函数不需要传递参数,整型变量i表示存放的是第i条记录,定义了存放临时记录的结构体变量,指针文件变量fp。
进入程序时打开文件,对文件操作结束,退出程序时关闭文件。
流程图如图3.2所示。
图3.2食品信息录入流程图
3.3打印仓库食品信息模块
打印仓库产品信息函数名为show(),不需要传递参数,也不需要定义任何变量。
打开文件,通过循环逐条读取数据,并将数据显示在屏幕上。
流程图如图3.3所示.。
图3.3仓库食品信息打印流程图
3.4添加仓库食品信息模块
添加仓库食品信息函数为add()。
添加仓库食品信息文件,从文件逐条读取数据,并将它们存放在结构体类型的数组中,对数组进行添加,最后将数据存入文件中。
添加过程:
输入要添加的数量,输入产品信息,每输一组数据,记录数加一。
流程图如图3.4所示。
图3.4仓库食品信息添加流程图
3.5删除仓库食品信息模块
删除仓库食品信息模块函数为del(number)。
将输入的信息与相应的数组成员一一进行比较,找到记录,再将该记录有关的信息全部删除。
每删除一组数组,记录数减一。
流程图如图3.5所示.。
图2.5仓库食品信删除息流程图
3.6修改食库食品信息模块
修改仓库食品信息模块函数为change()。
流程图如图3.6所示。
图3.6仓库食品信息修改流程图
3.7产生统计报表
操作并产生统计报表的函数为voidoperate()。
打开仓库食品信息系统文件,从文件中逐条读取数据,并将它们存放在结构体类型的结构体的数组中,进行
入库操作出库操作产生统计报表。
流程图如图3.7所示.。
图3.7产生统计表流程图
3.8处理过期食品并打印其清单
处理过期仓库食品并打印其清单函数为safecheck()。
打开仓库食品信息系统文件,从文件中逐条读取数据,并将它们存放在结构体类型的结构体的数组中,输入当日日期,通过循环找到过期产品,并打印清单。
流程图如图3.8.所示。
图2.8处理过期食品并打印其清单流程图
3.9查询仓库产品信息模块
查询仓库食品信息模块函数为query()。
流程图如图3.9所示。
图3.9查询系统流程图
第4章调试分析
在上机输入完程序后,出现了几个错误,其中有一些小错误,比如说忘记写分号,在这些错误上双击,找到位置,加上分号。
还有就是程序中的有的变量在前面没有定义,只要在前面添加上就可以了。
再有就是前后的类型要保持一致,在这块我也犯了个错误。
前面是浮点类型,后面却是布尔类型,解决办法就是把前面的改成布尔类型,保持前后一致。
还有就是遗忘分号,逗号,解决方法就是,一步一步的把遗忘的分号,逗号补上。
忘记定义变量的类型。
比如n应该是整型的却忘记申明。
解决方法就是在函数内先申明int类型的n..。
在寻找食品信息时,出现了死循环的现象。
解决方法就是通过一步一步调试适当的改变一些数据。
粗心导致很多细节问题,比如该输入英文的括号的,却输成中文的括号,解决方法,把中英文分开。
注意细节问题。
还有就是把文件建立在C盘,这是一个致命的错误。
后来把文件建立在E盘才出现预期的结果。
第5章使用说明
运行操作及结果:
菜单如图,按菜单选择正确的序数进行操作。
选择1,2进行录入和打印食品信息。
(录入食品信息和打印信息如下图)
选择3查询食品信息(查询结果如图)
选择4并按回车键,再输入添加的食品种数按回车键确定,添加食品信息(如下图)。
选择5删除食品信息。
(如下图)
选择6.输入需要修改的食品的编号,修改食品信息。
(如下图)
选择7按提示进行操作并产生统计报表。
(如下图)
选择8.再输入当日日期,处理过期食品并打印其清单。
(如下图)
参考文献
[1]张长海.C语言程设计[M].高等教育出版社,2006
[2]王为青刘变红.C语言高级编程及实例剖析.人民邮电出版社.2007
[3]杨克昌.C语言程序设计.武汉大学出版社.2007
[4]谭浩强.C语言程序设计.清华大学出版社,1998
[5]侯风巍.数据结构要点精析.北京航空航天大学出版社,2007
附录(程序清单)
源代码:
#include
#include
#include
#include"conio.h"
#defineN20
intn=0;
structdat
{
intyear;
intmonth;
intday;
};
structproduct
{
intnum;
charname[20];
charproductor[20];
charmeasureunit[10];
floatunitprice;
floatamount;
structdatdate;
intsafetime;
}pro[N];
voidmenu()
{
printf("****************************************\n");
printf("*1.录入仓库食品信息*\n");
printf("*2.打印仓库食品信息*\n");
printf("*3.查询仓库食品信息*\n");
printf("*4.添加仓库食品信息*\n");
printf("*5.删除仓库食品信息*\n");
printf("*6.修改仓库食品信息*\n");
printf("*7.操作并产生统计报表*\n");
printf("*8.处理过期食品并打印其清单*\n");
printf("*9.退出*\n");
printf("****************************************\n");
printf("请输入要操作的序号:
\n");
}
voidsave(structproductpro[N],intn)//食品信息改变后更新文件
{
FILE*fp;
inti=0;
if((fp=fopen("e:
\\product.txt","w"))==NULL)
{
printf("文件打开失败!
\n");
return;
}
for(i=0;i fprintf(fp,"%d%s%s%s%f%f%d%d%d%d\n",pro[i].num,pro[i].name,pro[i].productor,pro[i].measureunit,pro[i].unitprice,pro[i].amount,(pro[i].date).year,(pro[i].date).month,(pro[i].date).day,pro[i].safetime); fclose(fp); } voidadd()/*添加食品信息*/ { FILE*fp; inta,i; if((fp=fopen("e: \\product.txt","a"))==NULL)//如果文件已经存在,可以追加食品信息 { if((fp=fopen("e: \\product.txt","w"))==NULL)//文件不存在时,创建新文件,输入食品信息 { printf("文件打开失败! \n"); return; } } printf("请输入要添加的食品的种数,按回车键确认: \n"); scanf("%d",&a); n=n+a; system("cls"); for(i=n-a;i { printf("\n请输入第%d个产品的编号、名称、产地、计量单位,用空格分开,并按回车键确认: \n",i+1); scanf("%d%s%s%s",&pro[i].num,pro[i].name,pro[i].productor,pro[i].measureunit); printf("\n请输入第%d个食品的单价、数量、进货日期、保质期,用空格分开,并按回车键确认: \n",i+1); scanf("%f%f%d%d%d%d",&pro[i].unitprice,&pro[i].amount,&(pro[i].date).year,&(pro[i].date).month,&(pro[i].date).day,&pro[i].safetime); fprintf(fp,"%d%s%s%s%f%f%d%d%d%d\n",pro[i].num,pro[i].name,pro[i].productor,pro[i].measureunit,pro[i].unitprice,pro[i].amount,(pro[i].date).year,(pro[i].date).month,(pro[i].date).day,pro[i].safetime); system("cls"); } fclose(fp); } voidshow()//食品信息显示函数 { inti; if(n==0) printf("记录为空! ! ! \n"); else { printf("*******************************************************************************\n"); printf("编号\t食品名称\t产地\t计量单位\t单价\t数量\t进货日期\t保质期(月)\n"); printf("*******************************************************************************\n"); for(i=0;i printf("%d\t%s\t%s\t%s\t%f\t%f\t%d,%d,%d\t%d\n",pro[i].num,pro[i].name,pro[i].productor,pro[i].measureunit,pro[i].unitprice,pro[i].amount,(pro[i].date).year,(pro[i].date).month,(pro[i].date).day,pro[i].safetime); } getch(); system("cls"); } voiddel(intnumber)/*食品信息删除函数*/ { inti,j; for(i=0;i if(number==pro[i].num) break; if(i>=n) { printf("没有找到该食品信息! \n"); return; } else for(j=i+1;j pro[j-1]=pro[j]; n=n-1; save(pro,n); printf("删除成功! \n"); getch(); system("cls"); } voidchange()//食品信息更改 { inti; intnumber; printf("\n请输入要更改产品的编号,按回车键确认: \n"); scanf("%d",&number); system("cls"); for(i=0;i if(number==pro[i].num) break; if(i>=n) { printf("无此产品信息! "); return; } printf("\n请输入更改后食品的编号、名称、产地、计量单位,按回车键确认: \n"); scanf("%d%s%s%s",&pro[i].num,pro[i].name,pro[i].productor,pro[i].measureunit); printf("\n请输入更改后食品的单价、数量、进货日期、保质期,按回车键确认: \n"); scanf("%f%f%d%d%d%d",&pro[i].unitprice,&pro[i].amount,&(pro[i].date).year,&(pro[i].date).month,&(pro[i].date).day,&pro[i].safetime); save(pro,n); system("cls"); } voidquery()//按产品号对产品信息查询 { intnumber,i; printf("\n请输入待查询的食品编号,按回车键确认: \n"); scanf("%d",&number); system("cls"); for(i=0;i if(number==pro[i].num) break; if(i>=n) { printf("没有找到该食品信息! \n"); return; } else { printf("编号为%d的食品信息如下: \n",number); printf("*******************************************************************************\n"); printf("编号\t食品名称\t产地\t计量单位\t单价\t数量\t进货日期\t保质期(月)\n"); printf("*******************************************************************************\n"); printf("%d\t%s\t%s\t%s\t%f\t%f\t%d\t%d\t%d\t%d\n",pro[i].num,pro[i].name,pro[i].productor,pro[i].measureunit,pro[i].unitprice,pro[i].amount,(pro[i].date).year,(pro[i].date).month,(pro[i].date).day,pro[i].safetime); } getch(); system("cls"); } voidoperate() { inta=0,number; while(a! =4) { system("cls"); printf("请你做如下选择: 1.入库操作2.出库操作3.产生统计报表4.退出\n"); scanf("%d",&a); system("cls"); switch(a) { case1: add();break; case2: printf("\n请输入要删除食品的编号,按回车键确认: \n"); scanf("%d",&number); system("cls"); del(number);break; case3: show();break; case4: break; default: printf("输入错误,请输入列表中存在的序号! \n"); } } } voidsafecheck() { intt=0,i; inty,m,d; printf("现在进行过期食品的处理(保质期小于等于一个月将视为过期),请输入今天的日期(年、月、日): \n"); scanf("%d%d%d",&y,&m,&d); system("cls"); for(i=0;i { if(y==(pro[i].date).year) t=m-(pro[i].date).month; elseif(y>(pro[i].date).year) if(m>(pro[i].date).month) t=m-(pro[i].date).month+12*(y-(pro[i].date).year); else t=m+12-(pro[i].date).month+12*(y-(pro[i].date).year-1); else { printf("日期输入有误! ! ! \n"); break; } if((pro[i].safetime-t)<=1) { printf("以下是您即将删除的过期食品的信息: \n"); printf("*******************************************************************************\n"); printf("编号\t产品名称\t产地\t计量单位\t单价\t数量\t进货日期\t保质期(月)\n"); printf("*******************************************************************************\n"); printf("%d\t%s\t%s\t%s\t%f\t%f\t%d,%d,%d\t%d\n",pro[i].num,pro[i].name,pro[i].productor,pro[i].measureunit,pro[i].unitprice,pro[i].amount,(pro[i].date).year,(pro[i].date).month,(pro[i].date).day,pro[i].safetime); del(pro[i].num); i=-1; } } getch(); system("cls"); } voidmain() { intnumber,i; inta; while (1) { fflush(stdin); menu(); scanf("%d",&a); system("cls"); switch(a) { case1: printf("请输入您想输入的食品的总数: \n"); scanf("%d",&n); system("cls"); for(i=0;i { printf("输入食品编号: \n"); scanf("%d",&pro[i].num); printf("输入产品名称: \n"); scanf("%s",pro[i].name); printf("输入食品产地: \n"); scanf("%s",pro[i].productor); printf("输入食品计量单位:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 正式版 c语言课设 语言
![提示](https://static.bdocx.com/images/bang_tan.gif)