资源描述
C语言程序设计汇报
——物资管理系统
指导老师:
姓 名:
班级序号:
学 号:
一. 题目要求
请设计一个物资管理系统,要求主程序中应提供文字交互菜单界面,要求包含以下多个功效模块:
1. 信息输入模块input():建立物资管理数据总文件,完成对物资原库存信息录入,并存放到指定文件中(pro.dat)
2. 信息查找模块search():采取以下方法进行查找,若找到,则输出该物资相关信息;没有则给出提醒信息。(1)按产品名称查询(2)进货日期查询并统计。(3)按产品名称和规格查询并统计。
3. 新物资入库模块insert():在原数据文件中插入新物资信息。
4. 领料模块lend():查找所领取物资信息,满足领料要求,请登记领取物资名称,日期,数量(领料后修改)
5. 打印功效模块printf()(1)打印领料单(2)打印物资库存清单。
二. 需求分析
依据题目要求,因为物资信息是存放在文件中,所以提供文件输入,输出等操作在程序中需要浏览物资需要浏览物资信息,应提供显示,查找等操作;另外还应提供键盘选择菜单实现功效选择。
三. 总统设计
依据上面分析及题目要求能够分为以下六个模块(系统模块以下图1。)
物资管理系统
商品种类输入
商品查询模块
商品信息输入
商品领取模块
打印商品信息
系统推出
四. 具体设计
(一)主函数通常是设计简练,只提供输入,处理和输出部分函数调用。其中各功效模块用菜单方法选择。其中步骤图图(2)
menu()
{
int n,w1;
do
{
puts("\n\t\t*****************MENU********************\n\n");
puts("\t\t\t1.物资信息输入模块");
puts("\t\t\t2.查询模块");
puts("\t\t\t3.物资信息查找模块");
puts("\t\t\t4.领料查询");
puts("\t\t\t5.打印模块");
puts("\t\t\t6.Exit");
puts("\n\n\t\t***************************************\n");
puts("\t\t******************************by 袁璐\n");
puts("\t\t*****************************.12.29\n");
printf("选择你要得命令 [1-6]:[ ]\b\b");
开始
scanf("%d",&n);
if(n<1||n>6) N
显示一系列功效选择
{w1=1;getchar();}
else w1=0;
}while(w1==1);
输入n,判定m
是否是1到6?
switch(n)
{case 1:enter();break;
case 2:search();break;
case 3:insert();break; 图2
case 4:lend();break;
依据n值调用各
功效模块函数
case 5:print();break;
case 6:exit(0);
}
结束
}
main() ***********主函数**************
{puts("\n\t\t****************欢迎进入物资管理系统*****************\n\n");
puts("\t\t\t姓名:袁璐");
puts("\t\t\t学号:1002604");
puts("\t\t\tEmail:@");
puts("\t\t\tTel:");
puts("\n\n\t\t***************************************\n");
puts("\t\t******************************制作 袁璐\n");
puts("\t\t*****************************.12.29\n");
printf("\n按ENTER键进入...");
getch();
menu();
}
(二)各功效模块设计
1.输入模块*********多个类型,名称等信息 *********
enter()
{int i,n;
printf("\n物资种类大小(0-%d)?:",N-1);
scanf("%d",&n);
printf("\n输入数据\n\n");
for(i=0;i<n;i++)
{printf("输入第多个物资名称。数量规格日期:\n",i+1);
input(i);
}
if(i!=0)save(n);
printf_back();
}
input(int i)
{printf("\nname(1-20letter):");
scanf("%s",&pro[i].p_name);
printf("\nnumber(1-7num):");
scanf("%d",&pro[i].p_num);
printf("\nsize(1-4letter):");
scanf("%s",&pro[i].size);
printf("\ndate:");
scanf("%d.%d.%d",&pro[i].in_date.year,&pro[i].in_date.month,&pro[i].in_date.day);
printf("min_s real_s max_s:");
printf("\n最小库存量 真实库存量 最大库存量");
scanf("%d %d %d",&pro[i].min_s,&pro[i].real_s,&pro[i].max_s);
}
printf_data(int i)
{printf("\nname\t\tnum\tsize\tdate\t\tmin real max\n");
printf("%s\t%d\t%s\t%d.%d.%d\t%d-%d-%d",pro[i].p_name,pro[i].p_num,pro[i].size,pro[i].in_date.year,pro[i].in_date.month,pro[i].in_date.day,pro[i].min_s,pro[i].real_s,pro[i].max_s);
}
关键是为了输入商品类型,名称,数量,型号,日期,最大,最小,真实库存量,并存放在指定文件(pro.dat)中。但要注意到输入时间,最大最小库存格式(如) 请输入第 1th中商品信息 :
name(1-20letter):苹果
number(1-7num):1
size(1-4letter):2
date:.06.06
amount[min-real-max]:3-4-5
(二)searchmenu()*******查询模块*******
{int n,w2;
do
{
puts("\n\t\t****************查询菜单******************\n\n");
puts("\t\t\t1.姓名查询");
puts("\t\t\t2.日期查询");
puts("\t\t\t3.物资名称和规格查询");
puts("\t\t\t4.返回");
puts("\n\n\t\t***************************************\n");
printf("选择你要得命令 [1-4]:[ ]\b\b");
scanf("%d",&n);
if(n<1||n>4)
{w2=1;getchar();}
else w2=0;
}while(w2==1);
switch(n)
{case 1:search_by_name();break;
case 2:search_by_date();break;
case 3:search_by_nameandsize();break;
case 4:getch();menu();
}
}
search()
{
searchmenu();}
search_by_name()
{int j,n,m=0;char a[20];
n=load();
printf("\n输入你要查询物资名称\nname:");
scanf("%s",a);
for(j=0;j<n;j++)
if(strcmp(a,pro[j].p_name)==0)
{m++;
printf_data(j);
}
printf("\n查找第多个物资!",m);
getch();
menu();
}
struct s_date
{int year;
int month;
int day;
}s;
search_by_date()
{int j,n,m=0;
n=load();
printf("\n输入你要查询物资日期!\ndate:");
scanf("%d.%d.%d",&s.year,&s.month,&s.day);
for(j=0;j<n;j++)
if((s.year==pro[j].in_date.year)&&(s.month==pro[j].in_date.month)&&(s.day==pro[j].in_date.day))
{m++;
printf_data(j);
}
printf("\n查找第多个物资在那天!",m);
getch();
menu();
}
search_by_nameandsize()
{int j,n,m=0;char a[20],b[4];
n=load();
printf("\n输入你要查询物资名称!\nname:");
scanf("%s",a);
printf("\n输入你要查询物资规格!\nsize:");
scanf("%s",b);
for(j=0;j<n;j++)
if((strcmp(a,pro[j].p_name)==0)&&(strcmp(b,pro[j].size)==0))
{m++;
printf_data(j);
}
printf("查找第多个物资!",m);
getch();
menu();
}
关键以一个查询方法进行说明步骤图以下:开始
输入商品名称
是否查到此商品信息
显示找到结果
提醒没有找到并返回主菜单
操作图 *****************菜单********************
开始选择2
1.商品种类
输入n
2.商品查找
3.新商品信息录入
4.领取商品
判定m 是否是0到4?
5.打印商品信息
6.退出
依据n值调用各
功效模块函数
***************************************
******************************by袁璐
结束返回
********************************.12.29
Choice your order [1-6]:[2]
*****************SEARCH********************
1.经过商品名查询
2.经过录入日期查询
3.经过商品名和日期查询
4.返回菜单
***************************************
请选择要查询种类 [1-4]:[1]
输入你要查询商品名称!
name:苹果
name num size date min-real-max
苹果 4362900 2 .6.6 3-4-5
找到 1 种商品!
*****************菜单********************
(三)新物资录入 在此函数上对新料进行了统计
insert()
{int n,c;
n=load();
puts("\nInput one data:\n");
do
{input(n);
printf_data(n);
printf("\n\nAre you sure?\n1).sure\n2).cancel and again\n3).back without save [ ]\b\b");
scanf("%d",&c);
if(c==1){save(n+1);printf_back();}
else if(c!=2)menu();
}while(c==2);
}
input(int i)
{printf("\nname(1-20letter):");
scanf("%s",&pro[i].p_name);
printf("\nnumber(1-7num):");
scanf("%d",&pro[i].p_num);
printf("\nsize(1-4letter):");
scanf("%s",&pro[i].size);
printf("\ndate:");
scanf("%d.%d.%d",&pro[i].in_date.year,&pro[i].in_date.month,&pro[i].in_date.day);
printf("min_s real_s max_s:");
printf("\n最小库存量 真实库存量 最大库存量");
scanf("%d %d %d",&pro[i].min_s,&pro[i].real_s,&pro[i].max_s);
}
该函数据对物资进行了全方面查找
(四)领料模块*****查找对所领聊信息,若满足领料要求,便登记一系列内容,并修改 程序以下
struct one_pro
{char p_name[20];
char size[4];
struct date one_date;
long int total;
struct one_pro *next;
}check;
lend()
{int j,n;
n=load();
printf("\n请检验你要带走物资日期等信息!");
printf("\nname(1-20letter) size(1-4letter) date amount\n");
scanf("%s%s%d.%d.%d%d",&check.p_name,&check.size,&check.one_date.year,&check.one_date.month,&check.one_date.day,&check.total);
for(j=0;j<n;j++)
if((strcmp(check.p_name,pro[j].p_name)==0)&&(strcmp(check.size,pro[j].size)==0)&&(check.one_date.year==pro[j].in_date.year)&&(check.one_date.month==pro[j].in_date.month)&&(check.one_date.day==pro[j].in_date.day)&&(check.total<=pro[j].real_s))
{pro[j].real_s-=check.total;
printf_data(j);
printf_back();
}
else printf("日期错误!");
}
(五)采取文件来存放数据信息
#include<stdio.h>
save(int n)
{FILE*fp;
int k;
if((fp=fopen("pro.dat","wb"))==NULL)
{printf("\nCannot open file!\n");
return NULL;
}
for(k=0;k<n;k++)
if(pro[k].real_s!=0)
if(fwrite(&pro[k],sizeof(struct product),1,fp)!=1)
printf("文件书写错误!\n");
fclose(fp);
}
load()
{
FILE*fp;
int k;
if((fp=fopen("pro.dat","rb"))==NULL)
{printf("\n不能打开文件!\n");
return NULL;
}
for(k=0;!feof(fp);k++)
fread(&pro[k],sizeof(struct product),1,fp);
fclose(fp);
return(k-1);
}
C语言课程设计感想:
在学习C语言这门课时,因为是第一次接触计算机课程,而且这门书原来就很抽象,所以,上课时就认为听不懂.上程序设计课时也是一知半解,加上设计课时间短,所以自己也没有什么进步。
老师部署课程设计后,经过不停学习和实践,慢慢有了部分进步,自己在综合利用所学知识,发觉,提出,分析和处理实际问题,锻炼实践能力方面有了很大提升。当今科学技术发展日新日异,计算机应用在生活中更是无处不在。作为一个大学来说掌握计算机技术是十分关键。
回顾这次课程设计,我感慨良多。从题目到编程,再从编程到调试,我学到很多很多东西,经过这次课程设计,我知道了学习计算机靠是大量上机编程调试,从中才能够不停提升编程水平。在设计过程中,我碰到了很多问题,这毕竟第一次做,难免会碰到过多种多样问题,比如说结构体、调试不成功……
我很快乐在我碰到困难时候,同学们给了我很多帮助,能够这么说,没有同学们,我现在肯定还没有完成这次课程设计。在设计中碰到了很多编程问题,在同学帮助下,最终全部迎刃而解。最终,我要再次对各位同学和老师说一声,谢谢大家帮助,谢谢!
后附程序及运行结果
一,程序
#include<stdio.h>
#include<string.h>
#define N 100
struct date
{int year;
int month;
int day;
};
struct product
{char p_name[20];
long int p_num[7];
char size[4];
struct date in_date;
long int max_s;
long int min_s;
long int real_s;
struct product *next;
}pro[N];
menu()
{
int n,w1;
do
{
puts("\n\t\t*****************MENU********************\n\n");
puts("\t\t\t1.物资信息输入模块");
puts("\t\t\t2.查询模块");
puts("\t\t\t3.物资信息查找模块");
puts("\t\t\t4.领料查询");
puts("\t\t\t5.打印模块");
puts("\t\t\t6.Exit");
puts("\n\n\t\t***************************************\n");
puts("\t\t******************************by 董刚\n");
puts("\t\t*****************************0101\n");
printf("选择你要得命令 [1-6]:[ ]\b\b");
scanf("%d",&n);
if(n<1||n>6)
{w1=1;getchar();}
else w1=0;
}while(w1==1);
switch(n)
{case 1:enter();break;
case 2:search();break;
case 3:insert();break;
case 4:lend();break;
case 5:print();break;
case 6:exit(0);
}
}
main()
{puts("\n\t\t****************欢迎进入物资管理系统*****************\n\n");
puts("\t\t\t姓名:袁璐");
puts("\t\t\t学号:1002604");
puts("\t\t\tEmail:");
puts("\t\t\tTel:");
puts("\n\n\t\t***************************************\n");
puts("\t\t******************************制作 袁璐\n");
puts("\t\t*****************************.12.29\n");
printf("\n按ENTER键进入...");
getch();
menu();
}
enter()
{int i,n;
printf("\n物资量大小(0-%d)?:",N-1);
scanf("%d",&n);
printf("\n输入数据\n\n");
for(i=0;i<n;i++)
{printf("输入第多个物资名称。数量规格日期:\n",i+1);
input(i);
}
if(i!=0)save(n);
printf_back();
}
searchmenu()
{int n,w2;
do
{
puts("\n\t\t****************查询菜单******************\n\n");
puts("\t\t\t1.姓名查询");
puts("\t\t\t2.日期查询");
puts("\t\t\t3.物资名称和规格查询");
puts("\t\t\t4.返回");
puts("\n\n\t\t***************************************\n");
printf("选择你要得命令 [1-4]:[ ]\b\b");
scanf("%d",&n);
if(n<1||n>4)
{w2=1;getchar();}
else w2=0;
}while(w2==1);
switch(n)
{case 1:search_by_name();break;
case 2:search_by_date();break;
case 3:search_by_nameandsize();break;
case 4:getch();menu();
}
}
search()
{
searchmenu();}
search_by_name()
{int j,n,m=0;char a[20];
n=load();
printf("\n输入你要查询物资名称\nname:");
scanf("%s",a);
for(j=0;j<n;j++)
if(strcmp(a,pro[j].p_name)==0)
{m++;
printf_data(j);
}
printf("\n查找第多个物资!",m);
getch();
menu();
}
struct s_date
{int year;
int month;
int day;
}s;
search_by_date()
{int j,n,m=0;
n=load();
printf("\n输入你要查询物资日期!\ndate:");
scanf("%d.%d.%d",&s.year,&s.month,&s.day);
for(j=0;j<n;j++)
if((s.year==pro[j].in_date.year)&&(s.month==pro[j].in_date.month)&&(s.day==pro[j].in_date.day))
{m++;
printf_data(j);
}
printf("\n查找第多个物资在那天!",m);
getch();
menu();
}
search_by_nameandsize()
{int j,n,m=0;char a[20],b[4];
n=load();
printf("\n输入你要查询物资名称!\nname:");
scanf("%s",a);
printf("\n输入你要查询物资规格!\nsize:");
scanf("%s",b);
for(j=0;j<n;j++)
if((strcmp(a,pro[j].p_name)==0)&&(strcmp(b,pro[j].size)==0))
{m++;
printf_data(j);
}
printf("查找第多个物资!",m);
getch();
menu();
}
insert()
{int n,c;
n=load();
puts("\nInput one data:\n");
do
{input(n);
printf_data(n);
printf("\n\nAre you sure?\n1).sure\n2).cancel and again\n3).back without save [ ]\b\b");
scanf("%d",&c);
if(c==1){save(n+1);printf_back();}
else if(c!=2)menu();
}while(c==2);
}
struct one_pro
{char p_name[20];
char size[4];
struct date one_date;
long int total;
struct one_pro *next;
}check;
lend()
{int j,n;
n=load();
printf("\n请检验你要带走物资日期等信息!");
printf("\nname(1-20letter) size(1-4letter) date amount\n");
scanf("%s%s%d.%d.%d%d",&check.p_name,&check.size,&check.one_date.year,&check.one_date.month,&check.one_date.day,&check.total);
for(j=0;j<n;j++)
if((strcmp(check.p_name,pro[j].p_name)==0)&&(strcmp(check.size,pro[j].size)==0)&&(check.one_date.year==pro[j].in_date.year)&&(check.one_date.month==pro[j].in_date.month)&&(check.one_date.day==pro[j].in_date.day)&&(check.total<=pro[j].real_s))
{pro[j].real_s-=check.total;
printf_data(j);
printf_back();
}
else printf("日期错误!");
}
print()
{int i,n;
n=load();
for(i=0;i<n;i++)
printf_data(i);
getch();
menu();
}
#include<stdio.h>
save(int n)
{FILE*fp;
int k;
if((fp=fopen("pro.dat","wb"))==NULL)
{printf("\nCannot open file!\n");
return NULL;
}
for(k=0;k<n;k++)
if(pro[k].real_s!=0)
if(fwrite(&pro[k],sizeof(struct product),1,fp)!=1)
printf("文件书写错误!\n");
fclose(fp);
}
load()
{
FILE*fp;
int k;
if((fp=fopen("pro.dat","rb"))==NULL)
{printf("\n不能打开文件!\n");
return NULL;
}
for(k=0;!feof(fp);k++)
fread(&pro[k],sizeof(struct product),1,fp);
fclose(fp);
return(k-1);
}
input(int i)
{printf("\nname(1-20letter):");
scanf("%s",&pro[i].p_name);
printf("\nnumber(1-7num):");
scanf("%d",&pro[i].p_num);
printf("\nsize(1-4letter):");
scanf("%s",&pro[i].size);
printf("\ndate:");
scanf("%d.%d.%d",&pro[i].in_date.year,&pro[i].in_date.month,&pro[i].in_date.day);
printf("min_s real_s max_s:");
printf("\n最小库存量 真实库存量 最大库存量");
scanf("%d %d %d",&pro[i].min_s,&pro[i].real_s,&pro[i].max_s);
}
printf_data(int i)
{printf("\nname\t\tnum\tsize\tdate\t\tmin real max\n");
printf("%s\t%d\t%s\t%d.%d.%d\t%d-%d-%d",pro[i].p_name,pro[i].p_num,pro[i].size,pro[i].in_date.year,pro[i].in_date.month,pro[i].in_date.day,pro[i].min_s,pro[i].real_s,pro[i].max_s);
}
printf_back()
{printf("\n\nSuccessful!^_^\n\n谢谢使用任意键返回\n");
getch();
menu();
}
二,程序截图运行结果
展开阅读全文