C语言课程设计 仓库管理系统
- 格式:doc
- 大小:622.00 KB
- 文档页数:22
《C语言程序设计》实训报告
实训题目:仓库管理系统
专业:
班级:
姓名:
成绩:
一:需求分析
1:问题
该系统所应包含的信息有以下一些:
产品,仓库。
根据需求,该系统所应实现的功能有以下一些:
输入密码进入操作界面
产品入库,产品出库。
查询指定仓库编号的入库记录
查询指定产品编号的入库记录
查询指定入库时间的入库记录
查询指定仓库编号的出库记录
查询指定产品编号的出库记录
查询指定出库时间的出库记录
查询仓库中的产品是否过期
可以在操作过程中修改密码
2、系统
采用C语言实现,开发环境为VC,可以运行在操作系统windows98及以上皆可。
3.运行要求
1)可以进行随便操作,不受限制。
2)界面友好,操作方便,例如在进行产品出入库和查询时有提示操作。
二、总体设计
1、系统流程设计
根据系统要求,设计如下的系统流程
2.系统模块设计如下,有三大基本功能:
1.出库
2.入库
3.查询
三:总体思路
菜单显示:实现操作某功能时有相应的提示。
功能选择:每一种功能用相应的操作数字相对应。
产品出入库:在原有链表的基础上进行插入操作。
查询记录:调用对应的查询函数来实现。
四:详细设计
1:定义结构体变量
日期:struct warehouse{
int wnum;
char wname[20];
char changename[20];
}wh[5];
产品:
struct product{
int pnum;
char pname[20];
char norms[10];
}pr[10];
链表:
struct manage{
int wnum;
int pnum;
char data[15];
int number;
int operate;
struct manage *next;
};
为了能实现不受限制的产品出入库,采用链表的结构保存产品的信息,在增加产品出入库时,创建一个新的节点,将其插入到链表中,示意图如下。
2:模块化设计
进入设计:
以输入密码的方式进入,最多可输入三次,如果第三次输入错误,系统将自动退出。
这样保证了仓库管理这一程序操作的保密性,保证了仓库管理的安全性。
下一次输入正确的密码进入,先显示出仓库的信息,如下图:
闪动经大约5-8秒后进入主界面。
主界面实现:void screen();/*菜单界面函数*/
模块功能:来清晰的实现人机对话完成不同功能的选择。
每完成相应操作都会清空界面。
用户输入菜单项前面的数字,主菜单消失,进入该模块的相应界
面,进行相应的操作,完成后,回到主界面。
产品入库:struct manage *Instore(struct manage *); /*插入入库链表函数*/调用此函数整体实现产品入库。
1、日期格式合法性:int date(char data[]);
/*日期格式是否合法函数*/
模块功能:判断长度是否为十,第五位和第八位是否为‘-’,通
过atoi()分离日期字符串保存到日期结构体中调用闰年函数、月份
和月份天数的合法性函数。
各函数返回1或0来判断成立与否。
2、闰年判断:int Isleapyear(int );
/*判断是否为闰年函数*/是闰年返回1,否返回0.
3、月份和天数合法判断:int numday(struct data );
/*判断输入天数是否合法函数*/
模块功能:定义一个月份数组t[13]={0,31,28,31,30,31,
30,31,31,30,31,30,31}、调用闰年函数判断年份当为闰年且
为二月时注意t[2]要加1.月份要小于12,月份结构体中天数要小于
每月天数。
成立返回1,不成立返回0.
4、产品编号和仓库编号、入库数量判断:int number(struct
manage *); /*判断仓库和产品号存在和入库数量函数*/
模块功能:循环查询仓库数组和产品数组来判读编号是否存
在。
产品出库:struct manage *Outstore(struct manage *); /*插入出库链表函数*/ 大致和入库一样,但要多调用判断库存量
函数。
1:查询库存量函数:int Search(struct manage *,struct
manage *);
模块功能:当链表不为空,逐个比较结点存在入库记录则得到入
库数量,存在出库记录得到出库数量,两者差比较如果大于0返回1,
反之返回0.
查询仓库记录:void searchwarehouse(struct manage *,int); /*查询记录函数*/
模块功能:输入你要查询的仓库编号和操作类型调用链表来实现
查询。
存在调用打印函数。
查询你产品记录:void searchproduct(struct manage *,int);/*
查询产品记录*/
模块功能:输入你要查询的产品编号和操作类型调用链表来实现
查询。
存在调用打印函数。
打印记录:void print(struct manage *); /*输出记录函数*/
模块功能:输出记录。
四:测试结果
1:产品入库
输入10001 11001 12 12,测试结果
原因:输入日期长度不满足10.
输入10001 11001 2004-02-30 1,测试结果
原因:闰年二月份天数超过了29.
输入10001 11001 2000-13-12 12,测试结果
原因:月份超过了12。
输入1 11001 2000-11-11 12,测试结果
原因:仓库编号错误。
输入10001 11001 2000-12-12 12,测试结果
入库成功。
2:产品出库
输入 10002 11001 2001-12-12 12,测试结果
原因:10002仓库中没有此产品。
输入10001 11001 2007-12-12 50,测试结果
原因:库存量小于50
输入10001 11001 2001-12-12 11,测试结果
出库成功。
3.查询仓库的入库记录
输入仓库编号10005,测试结果
原因:仓库没有入库记录。
输入仓库编号10001,测试结果
结果如上。
4:查询仓库的出库记录
输入10002,测试结果
输入10003,测试结果如下:
原因:没有库存量
输入10001,测试结果
打印多条记录。
5:查询产品入库记录
输入11001,测试结果
输入11003,测试结果
原因:不存在产品入库记录。
6:查询产品出库记录
输入10001,测试结果
7:查询指定日期的出库和入库记录输入2000-12-12
输入2005-01-01
原因:该时间没有入库和出库记录。
8.修改密码
修改密码操作采用网上大多数网站的密码修改模式。
即先输入原密码,再输入要修改的密码两次,第一次输后,第二次输入的要和第一次相同,以便确认其正确性。
修改时输入原密码共有三次机会,以保证安全性,如果三次输入全错,系统自动退出,操作如下:
正确修改密码如下;
9:查询产品是否过期
输入年份为2001,月份为01,天数为02,其结果如下:
10.按0退出程序,这一步并不是简单的退出了程序,而是在退出之前,进行了内存空间的释放。
其代码如下:
void freerecord(struct manage *head)
{
struct manage *p=head;
while(head) /*释放内存*/
{
head=head->next;
free(p);
p=head;
}
}
五:实训总结
实训感想:通过实训我感觉到自己动手编程能力的提高,把自己课堂上学到的知识应用于实践中,在编程过程中经常遇到问题,但在老师耐心指导下一个一个的解决了,每次的练习都增长了新知识当我一个程序运行处结果时我激动不已,这也逐渐培养了我对学习C语言的兴趣,尤其是这次综合练习更是让我看到精通C语言还有很多路要走,虽然实训即将结束但我学习C语言的脚步不会停止,我还会继续上机培养我的编程能力。
借助这门语言我会努力学好软件工程中其他学科,我要在编程这条道路上一直走下去。
设计亮点:1界面友好,较好实现了人-机对话。
2使用结构化程序设计思路,步骤清晰通过不同函数来实现不同模块功能。
3每操作一步就清理界面,让人看起来清楚明了。
4程序清楚,分行恰当,注释合理。
5 操作不受限制,可以随时出入库和进行查询。
不足:有些细节没有考虑清楚,程序还不够优化。