课程设计报告(完整代码和分析)建筑材料货存管理系统.doc

上传人:文库蛋蛋多 文档编号:3993332 上传时间:2023-03-30 格式:DOC 页数:29 大小:410KB
返回 下载 相关 举报
课程设计报告(完整代码和分析)建筑材料货存管理系统.doc_第1页
第1页 / 共29页
课程设计报告(完整代码和分析)建筑材料货存管理系统.doc_第2页
第2页 / 共29页
课程设计报告(完整代码和分析)建筑材料货存管理系统.doc_第3页
第3页 / 共29页
课程设计报告(完整代码和分析)建筑材料货存管理系统.doc_第4页
第4页 / 共29页
课程设计报告(完整代码和分析)建筑材料货存管理系统.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《课程设计报告(完整代码和分析)建筑材料货存管理系统.doc》由会员分享,可在线阅读,更多相关《课程设计报告(完整代码和分析)建筑材料货存管理系统.doc(29页珍藏版)》请在三一办公上搜索。

1、建筑材料货存管理系统课程设计报告一、 功能描述此货存管理系统主要利用单链表实现,由如下七个功能模块实现:1、读取记录:以只读方式打开文件,方便当前内容已存入文件时的处理,以免出现重复。2、保存记录模块:保存你所输入的货物信息。3、添加记录模块:添加货物(名称、品牌、价格、数量、日期)。4、删除记录模块:删除某项货物的数据。5、查询记录模块:查询某项货物的数据。6、更改记录模块:修改某项货物的数据。7、统计功能模块:统计货物花费金额。(该功能模块下又有子菜单,由四个功能模块实现)。建筑材料货存管理系统读取记录保存记录添加记录删除记录查询记录更改记录从键盘输入存盘录入从键盘输入从文件读出从文件读出

2、从文件读出从键盘输入从文件读出统计功能从键盘输入从文件读出统计所有材料资金按名称统计资金按品牌统计资金按日期统计资金从键盘输入从文件读出从键盘输入从文件读出从键盘输入从文件读出从键盘输入从文件读出 二、总体设计 1、功能模块设计 (1)主函数执行流程 进入主菜单,利用开关(switch)分支,很据条件的取值来选择其中的一个分支。进入所选分支后,调用相应的函数来执行菜单任务。 (2)读取记录模块 由if语句判断该文件是否存在,若不存在,由printf提示“打开文件失败”;若存在,用当型循环语句(while)先判断是否清除记录,再利用while循环语句读取文件。 (3)保存记录模块 首先由if 语

3、句判断是否有记录录入,若无,则由printf“提示尚未录入任何记录”,同时已只写方式打开文件并清空文件内容,提示“保存失败”;若存在,将链表内容逐条写入文件中,提示“写入文件成功!”。 (4)添加记录模块 首先提示“要添加记录条数:”,利用for循环逐个添加货物记录,其中包括名称、品牌、价格、数量、日期。(5)删除记录模块 首先提示“请输入要删除记录的编号:”,进入while循环语句,先由if条件语句判断输入记录编号是否与记录相符,若相符则显示该条记录信息并提示用户“是否确认删除?(y/n):”,若选择“y”,则提示“删除成功”;反之提示“放弃删除”。 (6)查询记录模块 先由if语句判断是否

4、存在记录,若无则提示“尚未录入任何记录!”;若有则进入while循环,循环中同样利用菜单选择,由switch来执行。其中包含findall()和findsome()两个调用函数。 (7)更改记录模块 首先提示“请输入查询材料的编号:”,进入while循环语句,用if语句进行判断,若与录入记录材料编号相符,则显示该材料的原信息并提示“请输入你所修改的新信息:”,依次输入更改后的信息即可;若不相符,则提示“无该项记录!”。 (8)统计记录模块 先由if语句判断是否存在记录,若无则提示“尚未录入任何记录!”;若有则进入while循环,接着该模块利用一个子菜单及switch分支来执行任务。其中包含to

5、ngji_all()、tongji_name()、tongji_pinpai()、tongji_date()调用函数来分别实现统计所有材料资金、按名称统计资金、按品牌统计资金、按日期统计资金的功能。 三、数据结构设计 1、建筑材料货存信息结构体 typedef struct node/结构体定义 int number; char name20; char pinpai20; int price; int count; char date20; struct node *next;linklist;linklist *head = NULL;/头结点指针linklist *end = NULL;

6、/尾节点指针int Number=1;/编号 四、函数功能描述 1、read_file()函数原型:read_file()参数含义:无参数 2、write_file()函数原型:write_file()参数含义:无参数 3、add() 函数原型:add() 参数含义:无参数 4、delet() 函数原型:delet() 参数含义:无参数 5、find() 函数原型:find() 参数含义:无参数 6、change() 函数原型:change() 参数含义:无参数 7、tongji() 函数原型:tongji() 参数含义:无参数 五、程序实现1、源代码分析 程序预处理包括加载头文件,定义结构体

7、、常量和变量,并对它们进行初始化工作。#include#include#include#include 主函数main() void main()/主函数 char a; while(1) system(color 0b);printf( * 建 筑 材 料 管 理 系 统 *nn);printf( *菜 单*nn);printf( * = * n);printf( * 1. 读 取 记 录 * n);printf( * 2. 保 存 记 录 * n);printf( * 3. 添 加 记 录 * n);printf( * 4. 删 除 记 录 * n);printf( * 5. 查 询 记

8、录 * n);printf( * 6. 更 改 记 录 * n);printf( * 7. 统 计 功 能 * n);printf( * 0. 退 出 系 统 * n);printf( * - * n);printf( 请输入你要进行的操作:); printf( *nnn);printf(tt *09级给水排水班* n); printf(tt * 刘杨 (0905205009) * n); printf(tt * 任静 (0905205018) * n); printf(tt * 刘卫平(0905205007) * n); printf( *欢迎使用*);a=getch();system(cl

9、s); switch(a)case 1: read_file();break;case 2: write_file(); break;case 3: add();break;case 4: delet();break;case 5: find();break;case 6: change();break;case 7: tongji();break;case 0:printf(n 感谢使用建筑材料管理系统n 按任意键退出.n);return;break;default:printf(输入错误,请重新选择!nn); 主菜单界面 、printf( * 建 筑 材 料 管 理 系 统 *nn);pr

10、intf( *菜 单*nn);printf( * = * n);printf( * 1. 读 取 记 录 * n);printf( * 2. 保 存 记 录 * n);printf( * 3. 添 加 记 录 * n);printf( * 4. 删 除 记 录 * n);printf( * 5. 查 询 记 录 * n);printf( * 6. 更 改 记 录 * n);printf( * 7. 统 计 功 能 * n);printf( * 0. 退 出 系 统 * n);printf( * - * n);printf( 请输入你要进行的操作:); printf( *nnn);printf(

11、tt *09级给水排水班* n); printf(tt * 刘杨 (0905205009) * n); printf(tt * 任静 (0905205018) * n); printf(tt * 刘卫平(0905205007) * n); printf( *欢迎使用*); (3)调用函数 读取记录函数void read_file()/文件读取FILE *fp;linklist *p,*q;int i=0;/统计读取记录条数char a;if(fp=fopen(建筑材料记录.txt,r)=NULL)/以只读方式打开文件,该文件必须已经存在 printf(n打开文件失败!按任意键返回。n);get

12、ch();system(cls); return;if(head != NULL)printf(当前已有记录,打开文件时是否清除?(y/n)n);/方便当前内容已存入文件时的处理,以免出现重复a=getch();if(a=y | a=Y)while(head!=NULL)q=head;head=head-next;free(q);/从头结点开始释放所有链表节点的空间Number=1;/重置编号printf(清除记录成功,按任意键继续读取文件。n);getch();system(cls);p=(linklist*)malloc(sizeof(linklist);/p先申请空间,再读取文件中内容放

13、入p中while(fscanf(fp,%20s %20s %10d %10d %20sn,p-name,p-pinpai,&p-price,&p-count,p-date)!=EOF)p-number=Number;if(head=NULL)head=p;/将p中数据作为头结点head-next=NULL;end=head;elseend-next=p;end=end-next;/使尾节点的下一节点指针指向p中数据,再将尾节点后移end-next=NULL;p=(linklist*)malloc(sizeof(linklist);Number+;i+;free(p);/因最后一次读取的内容为E

14、OF,所以释放该空间fclose(fp);printf(文件读取成功,共添加%d条记录,按任意键返回主菜单。n,i);getch();system(cls);保存记录函数void write_file()/文件写入FILE *fp;linklist *p;p=head;if(head=NULL)/未录入记录时的处理printf(t尚未录入任何记录!按任意键返回主菜单。);getch();system(cls);return;if(fp=fopen(建筑材料记录.txt,w)=NULL)/已只写方式打开文件并清空文件内容 printf(保存失败!n);elsewhile(p != NULL)fp

15、rintf(fp,%20s %20s %10d %10d %20sn,p-name,p-pinpai,p-price,p-count,p-date);p=p-next;/将链表内容逐条写入文件中printf(写入文件成功!n);fclose(fp);printf(按任意键返回主菜单。n);getch();system(cls);添加记录函数void add()/添加函数int n,i; printf(要添加记录条数:); scanf(%d,&n);for(i=0;inext=NULL;end=head;/第一个节点的处理elseend-next=(linklist*)malloc(sizeof

16、(linklist);end=end-next;end-next=NULL;/每添加一个节点,尾指针后移printf(本条记录编号:%dn,Number);end-number=Number;printf(请输入名称:);scanf(%s,end-name);printf(请输入品牌:);scanf(%s,end-pinpai);printf(请输入价格:);scanf(%d,&end-price);printf(请输入数量:);scanf(%d,&end-count);printf(请输入日期:);scanf(%s,end-date);Number+;system(cls);printf(第

17、%d条记录添加成功!n,i+1);printf(按任意键返回主菜单。n);getch();system(cls);删除记录函数void delet()/删除函数linklist *p,*q,*m;/q记录删除节点的上一个节点,m记录删除节点的下一个节点int number;p=head;q=NULL;printf(请输入要删除记录的编号:); scanf(%d,&number);while(p!=NULL) if(number = p-number)char c;printf(要删除的记录为:n);printf(编号:%d,名称:%s,品牌:%s,价格:%d,数量:%d,日期:%sn,p-nu

18、mber,p-name,p-pinpai,p-price,p-count,p-date);printf(是否确认删除?(y/n):n);c=getch();system(cls);if(c=y | c=Y)if(p=head)head=head-next;m=p-next;free(p);/删除头结点的处理elseq-next=p-next;m=p-next;free(p);/将p的上一个节点的末尾指针指向p的下一个节点过后再释放pwhile(m != NULL)/m为删除节点之后的节点指针,当其不为空时,将后面节点的编号减1m-number-;m=m-next;Number-;/记录的总编号

19、数减1printf(删除成功!n);elseprintf(放弃删除。n);printf(按任意键返回。n);getch();system(cls);return;q=p; p=p-next;printf(无该项记录!n);/若有记录,在while循环中会自动结束此函数printf(按任意键返回。n);getch();system(cls);查询记录函数void find()/查询函数char a;void findall();void findsome();if(head=NULL)printf(t尚未录入任何记录!按任意键返回主菜单。);getch();system(cls);return;

20、while(1)printf(n * 查询 *n);printf( *菜单*n);printf( * = * n);printf( * 1. 查询所有记录 * n);printf( * 2. 按名称查询记录 * n);printf( * 0. 退出查询系统 * n);printf( * - * n);printf( 请输入查询的方式:);a=getch();system(cls);switch(a)case 0:return;break;case 1:findall();break;case 2:findsome();break;default:printf(输入错误,请重新选择!n);voi

21、d findall()linklist *p;p=head;/使P指向头结点while(p!=NULL)printf(编号:%d,名称:%s,品牌:%s,价格:%d,数量:%d,日期:%sn,p-number,p-name,p-pinpai,p-price,p-count,p-date);p=p-next;/将P指向下一个节点printf(按任意键返回。n);getch();system(cls);void findsome()int n=0;/标记是否有找到相关内容linklist *p;char name20;p=head;printf(请输入查询材料的名称:); scanf(%s,nam

22、e); while(p!=NULL) if(strcmp(name,p-name) = 0)if(n=0)/第一次查到相关内容printf(你要查询的记录为:n);printf(编号:%d,名称:%s,品牌:%s,价格:%d,数量:%d,日期:%sn,p-number,p-name,p-pinpai,p-price,p-count,p-date);n=1; p=p-next;if(n=0)printf(无所查询的记录!n);printf(按任意键返回。n);getch();system(cls);记录更改函数void change()/修改函数linklist *p;int number;p=

23、head;printf(请输入要修改记录的编号:); scanf(%d,&number);while(p!=NULL) if(number = p-number)printf(原记录为:n);printf(编号:%d,名称:%s,品牌:%s,价格:%d,数量:%d,日期:%sn,p-number,p-name,p-pinpai,p-price,p-count,p-date);printf(请输入你所修改的新信息:n);printf(请输入名称:);scanf(%s,p-name);printf(请输入品牌:);scanf(%s,p-pinpai);printf(请输入价格:);scanf(%d

24、,&p-price);printf(请输入数量:);scanf(%d,&p-count);printf(请输入日期:);scanf(%s,p-date);printf(按任意键返回。n);getch();system(cls);return; p=p-next;printf(无该项记录!n);printf(按任意键返回。n);getch();system(cls);统计资金函数void tongji()/统计函数char a;void tongji_all();void tongji_name();void tongji_pinpai();void tongji_date();if(head=

25、NULL)printf(t尚未录入任何记录!按任意键返回主菜单。);getch();system(cls);return;while(1)printf(n * 统计 *n);printf( *菜单*n);printf( * = * n);printf( * 1. 统计所有材料资金 * n);printf( * 2. 按名称统计资金 * n);printf( * 3. 按品牌统计资金 * n);printf( * 4. 按日期统计资金 * n);printf( * 0. 退出查询系统 * n);printf( * - * n);printf( 请输入统计内容:);a=getch();system

26、(cls);switch(a)case 0:return;break;case 1:tongji_all();break;case 2:tongji_name();break;case 3:tongji_pinpai();break;case 4:tongji_date();break;default:printf(输入错误,请重新选择!n);void tongji_all()/统计所有材料资金linklist *p;int money=0;p=head;while(p!=NULL)money=money+p-price*p-count;p=p-next;printf(所有材料所花的资金为:%

27、d。n,money);printf(按任意键返回。n);getch();system(cls);void tongji_name()int n=0;/标记是否有找到相关内容int money=0;linklist *p;char name20;p=head;printf(请输入需统计材料的名称:); scanf(%s,name); while(p!=NULL) if(strcmp(name,p-name) = 0)/该条记录与输入名称相同,将该项记录的资金计入money=money+p-price*p-count;n=1; p=p-next;if(n=0)printf(尚未录入该材料的任何记录

28、!n);else/有该材料记录时,输出统计出的金额printf(材料 %s 目前所花资金为:%dn,name,money);printf(按任意键返回。n);getch();system(cls);void tongji_pinpai()int n=0;/标记是否有找到相关内容int money=0;linklist *p;char pinpai20;p=head;printf(请输入需统计的品牌:); scanf(%s,pinpai); while(p!=NULL) if(strcmp(pinpai,p-pinpai) = 0)/该条记录与输入品牌相同,将该项记录的资金计入money=money+p-price*p-count;n=1; p=p-next;if(n=0)printf(尚未录入该品牌的任何记录!n);else/有该品牌记录时,输出统计出的金额printf(品牌 %s 目前所花资金为:%dn,pinpai,money);printf(按任意键返回。n);getch();system(cls);void tongji_date()int n=0;/标记是否有找到相关内容int money=0;linklist *p;char date20;p=head;printf(请输入需统计的日期:); scanf(%s,date); while(p!=NULL)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号