建筑材料货存管理系统软件技术基础课程设计报告完整代码和分析.docx
- 文档编号:8721707
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:35
- 大小:382.11KB
建筑材料货存管理系统软件技术基础课程设计报告完整代码和分析.docx
《建筑材料货存管理系统软件技术基础课程设计报告完整代码和分析.docx》由会员分享,可在线阅读,更多相关《建筑材料货存管理系统软件技术基础课程设计报告完整代码和分析.docx(35页珍藏版)》请在冰豆网上搜索。
建筑材料货存管理系统软件技术基础课程设计报告完整代码和分析
建筑材料货存管理系统
课程设计报告
编写人:
刘杨
同组成员:
刘杨(课程设计负责人)
任静
刘卫平
完成日期:
2011-6-22
辅导教师:
薛媛媛
批阅日期:
分数:
一、功能描述
此货存管理系统主要利用单链表实现,由如下七个功能模块实现:
1、读取记录:
以只读方式打开文件,方便当前内容已存入文件时的处理,以免出现重复。
2、保存记录模块:
保存你所输入的货物信息。
3、添加记录模块:
添加货物(名称、品牌、价格、数量、日期)。
4、删除记录模块:
删除某项货物的数据。
5、查询记录模块:
查询某项货物的数据。
6、更改记录模块:
修改某项货物的数据。
7、统计功能模块:
统计货物花费金额。
(该功能模块下又有子菜单,由四个功能模块实现)。
二、总体设计
1、功能模块设计
(1)主函数执行流程
进入主菜单,利用开关(switch)分支,很据条件的取值来选择其中的一个分支。
进入所选分支后,调用相应的函数来执行菜单任务。
(2)读取记录模块
由if语句判断该文件是否存在,若不存在,由printf提示“打开文件失败”;若存在,用当型循环语句(while)先判断是否清除记录,再利用while循环语句读取文件。
(3)保存记录模块
首先由if语句判断是否有记录录入,若无,则由printf“提示尚未录入任何记录”,同时已只写方式打开文件并清空文件内容,提示“保存失败”;若存在,将链表内容逐条写入文件中,提示“写入文件成功!
”。
(4)添加记录模块
首先提示“要添加记录条数:
”,利用for循环逐个添加货物记录,其中包括名称、品牌、价格、数量、日期。
(5)删除记录模块
首先提示“请输入要删除记录的编号:
”,进入while循环语句,先由if条件语句判断输入记录编号是否与记录相符,若相符则显示该条记录信息并提示用户“是否确认删除?
(y/n):
”,若选择“y”,则提示“删除成功”;反之提示“放弃删除”。
(6)查询记录模块
先由if语句判断是否存在记录,若无则提示“尚未录入任何记录!
”;若有则进入while循环,循环中同样利用菜单选择,由switch来执行。
其中包含findall()和findsome()两个调用函数。
(7)更改记录模块
首先提示“请输入查询材料的编号:
”,进入while循环语句,用if语句进行判断,若与录入记录材料编号相符,则显示该材料的原信息并提示“请输入你所修改的新信息:
”,依次输入更改后的信息即可;若不相符,则提示“无该项记录!
”。
(8)统计记录模块
先由if语句判断是否存在记录,若无则提示“尚未录入任何记录!
”;若有则进入while循环,接着该模块利用一个子菜单及switch分支来执行任务。
其中包含tongji_all()、tongji_name()、tongji_pinpai()、tongji_date()调用函数来分别实现统计所有材料资金、按名称统计资金、按品牌统计资金、按日期统计资金的功能。
三、数据结构设计
1、建筑材料货存信息结构体
typedefstructnode//结构体定义
{
intnumber;
charname[20];
charpinpai[20];
intprice;
intcount;
chardate[20];
structnode*next;
}linklist;
linklist*head=NULL;//头结点指针
linklist*end=NULL;//尾节点指针
intNumber=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、源代码分析
⑴程序预处理
包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。
#include
#include
#include
#include
⑵主函数main()
voidmain()//主函数
{
chara;
while
(1)
{system("color0b");
printf("***************建筑材料管理系统*******************\n\n");
printf("*********************菜单***************************\n\n");
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("***********************************************************\n\n\n");
printf("\t\t********09级给水排水班***********\n");
printf("\t\t*刘杨(0905205009)*\n");
printf("\t\t*任静(0905205018)*\n");
printf("\t\t*刘卫平(0905205007)*\n");
printf("*********************●●欢迎使用●●**********************");
a=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("输入错误,请重新选择!
\n\n");
}
}
}
⑶主菜单界面
、printf("***************建筑材料管理系统*******************\n\n");
printf("*********************菜单***************************\n\n");
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("***********************************************************\n\n\n");
printf("\t\t********09级给水排水班***********\n");
printf("\t\t*刘杨(0905205009)*\n");
printf("\t\t*任静(0905205018)*\n");
printf("\t\t*刘卫平(0905205007)*\n");
printf("*********************●●欢迎使用●●**********************");
(3)调用函数
读取记录函数
voidread_file()//文件读取
{
FILE*fp;
linklist*p,*q;
inti=0;//统计读取记录条数
chara;
if((fp=fopen("建筑材料记录.txt","r"))==NULL)//以只读方式打开文件,该文件必须已经存在
{
printf("\n打开文件失败!
按任意键返回。
\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));//p先申请空间,再读取文件中内容放入p中
while((fscanf(fp,"%20s%20s%10d%10d%20s\n",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;
}
else
{
end->next=p;
end=end->next;//使尾节点的下一节点指针指向p中数据,再将尾节点后移
end->next=NULL;
}
p=(linklist*)malloc(sizeof(linklist));
Number++;
i++;
}
free(p);//因最后一次读取的内容为EOF,所以释放该空间
fclose(fp);
printf("文件读取成功,共添加%d条记录,按任意键返回主菜单。
\n",i);
getch();
system("cls");
}
保存记录函数
voidwrite_file()//文件写入
{
FILE*fp;
linklist*p;
p=head;
if(head==NULL)//未录入记录时的处理
{
printf("\t尚未录入任何记录!
按任意键返回主菜单。
");
getch();
system("cls");
return;
}
if((fp=fopen("建筑材料记录.txt","w"))==NULL)//已只写方式打开文件并清空文件内容
{
printf("保存失败!
\n");
}
else
{
while(p!
=NULL)
{
fprintf(fp,"%20s%20s%10d%10d%20s\n",p->name,p->pinpai,p->price,p->count,p->date);
p=p->next;
}//将链表内容逐条写入文件中
printf("写入文件成功!
\n");
}
fclose(fp);
printf("按任意键返回主菜单。
\n");
getch();
system("cls");
}
添加记录函数
voidadd()//添加函数
{
intn,i;
printf("要添加记录条数:
");
scanf("%d",&n);
for(i=0;i { if(head==NULL) { head=(linklist*)malloc(sizeof(linklist)); head->next=NULL; end=head; }//第一个节点的处理 else { end->next=(linklist*)malloc(sizeof(linklist)); end=end->next; end->next=NULL; }//每添加一个节点,尾指针后移 printf("本条记录编号: %d\n",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("第%d条记录添加成功! \n",i+1); } printf("按任意键返回主菜单。 \n"); getch(); system("cls"); } 删除记录函数 voiddelet()//删除函数 { linklist*p,*q,*m;//q记录删除节点的上一个节点,m记录删除节点的下一个节点 intnumber; p=head; q=NULL; printf("请输入要删除记录的编号: "); scanf("%d",&number); while(p! =NULL) { if(number==p->number) { charc; printf("要删除的记录为: \n"); printf("编号: %d,名称: %s,品牌: %s,价格: %d,数量: %d,日期: %s\n",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); }//删除头结点的处理 else { q->next=p->next; m=p->next; free(p); }//将p的上一个节点的末尾指针指向p的下一个节点过后再释放p while(m! =NULL)//m为删除节点之后的节点指针,当其不为空时,将后面节点的编号减1 { m->number--; m=m->next; } Number--;//记录的总编号数减1 printf("删除成功! \n"); } else { printf("放弃删除。 \n"); } printf("按任意键返回。 \n"); getch(); system("cls"); return; } q=p; p=p->next; } printf("无该项记录! \n");//若有记录,在while循环中会自动结束此函数 printf("按任意键返回。 \n"); getch(); system("cls"); } 查询记录函数 voidfind()//查询函数 { chara; voidfindall(); voidfindsome(); 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("*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"); } } } voidfindall() { linklist*p; p=head;//使P指向头结点 while(p! =NULL) { printf("编号: %d,名称: %s,品牌: %s,价格: %d,数量: %d,日期: %s\n",p->number,p->name,p->pinpai,p->price,p->count,p->date); p=p->next;//将P指向下一个节点 } printf("按任意键返回。 \n"); getch(); system("cls"); } voidfindsome() { intn=0;//标记是否有找到相关内容 linklist*p; charname[20]; p=head; printf("请输入查询材料的名称: "); scanf("%s",name); while(p! =NULL) { if((strcmp(name,p->name))==0) { if(n==0)//第一次查到相关内容 { printf("你要查询的记录为: \n"); } printf("编号: %d,名称: %s,品牌: %s,价格: %d,数量: %d,日期: %s\n",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"); } 记录更改函数 voidchange()//修改函数 { linklist*p; intnumber; p=head; printf("请输入要修改记录的编号: "); scanf("%d",&number); while(p! =NULL) { if(number==p->number) { printf("原记录为: \n"); printf("编号: %d,名称: %s,品牌: %s,价格: %d,数量: %d,日期: %s\n",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",&p->price); printf(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 建筑材料 管理 系统软件 技术 基础 课程设计 报告 完整 代码 分析