课程设计报告(完整代码和分析)建筑材料货存管理系统_第1页
课程设计报告(完整代码和分析)建筑材料货存管理系统_第2页
课程设计报告(完整代码和分析)建筑材料货存管理系统_第3页
课程设计报告(完整代码和分析)建筑材料货存管理系统_第4页
课程设计报告(完整代码和分析)建筑材料货存管理系统_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

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

5、tch分支来执行任务。其中包含tongji_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;/头结点指针link

6、list *end = null;/尾节点指针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);pr

8、intf( * 5. 查 询 记 录 * 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=

9、getch();system(cls); 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( * 建 筑 材

10、料 管 理 系 统 *nn);printf( *菜 单*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( 请输入你要进行的操作:); prin

11、tf( *nnn);printf(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打开文

12、件失败!按任意键返回。n);getch();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);

13、/p先申请空间,再读取文件中内容放入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

14、(p);/因最后一次读取的内容为eof,所以释放该空间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);elsew

15、hile(p != null)fprintf(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=(linkli

16、st*)malloc(sizeof(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+;sys

17、tem(cls);printf(第%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,

18、数量:%d,日期:%sn,p-number,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-nex

19、t;number-;/记录的总编号数减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();sy

20、stem(cls);return;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(

21、输入错误,请重新选择!n);void 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(请输入查询材料的名

22、称:); scanf(%s,name); 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

23、 *p;int number;p=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

24、(请输入价格:);scanf(%d,&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 tongj

25、i_date();if(head=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( 请输入统计内容:)

26、;a=getch();system(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;pr

27、intf(所有材料所花的资金为:%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)pr

28、intf(尚未录入该材料的任何记录!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)/该条记录与输入品牌相同,将该

29、项记录的资金计入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) if(strcmp(date,p-date)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论