课程设计实习报告c.docx
《课程设计实习报告c.docx》由会员分享,可在线阅读,更多相关《课程设计实习报告c.docx(13页珍藏版)》请在冰豆网上搜索。
课程设计实习报告c
C语言课程设计
题目
库存材料管理系统
班级学号
学生姓名
提交日期
2008-06-30
成绩
评语及教师签名:
计算机工程系
实习题目:
库存材料管理系统
设计要求:
实现菜单设计,使用文件保存和修改,应用结构体和指针
功能要求:
数据录入,存储,查询,统计,排序,打印等
库存管理系统源代码:
#include
#include
#defineN200
structmaterial
{intnum;
charname[15];/*定义含三个成员的结构体*/
intamount;
chardate[10];
}mat[N],mater;/*定义两个结构体变量*/
main()
{
chari='y';/*对i赋初值*/
intn;
while(i=='y')/*判断是否继续进行操作*/
{
printf(“\n\n\t--**--**--**WelcomeToTheMaterialMangementSystem**--**-
printf("-----------------------------------------------------------\n");
printf("1-----inputmaterial'sinformation\n");
printf("2-----printmaterial'sinformation\n");
printf("3-----ordermaterial'sinformation\n");
printf("4-----searchmaterial'sinformation\n");
printf("5-----exit\n");
printf("-----------------------------------------------------------\n");
printf("Pleaseselectanumber:
\n");
scanf("%d",&n);
switch(n)/*实现菜单的关键语句*/
{
case1:
input();break;
case2:
print();break;
case3:
order();break;
case4:
search();break;
case5:
return;
default:
printf("Error!
pleaseinputarightnumber:
\n");
}
printf("Continueornot?
(y/n)");/*输入选择是否继续*/
scanf("%s",&i);
}
if(i=='n')
{
printf("Pressanykeytoexit.\n");
getch();/*产生停顿,体现上一语句*/
return;
}
}
intinput()/*定义input函数*/
{
structmaterialmater;
FILE*fp;
if((fp=fopen("material.txt","at+"))==NULL)/*产生一个material.txt
{printf("Cannotopenfile\n");的文本文档,属性是可读
printf("Pressanykeytoexit");写,可添加*/
getch();
return;
}
printf("Pleaseinputnewmaterial'sinformation:
\n\n");
printf("Pleaseinputnumber:
\n");/*输入信息*/
scanf("%d",&mater.num);
printf("Pleaseinputname:
\n");
scanf("%s",mater.name);
printf("Pleaseinputamount:
\n");
scanf("%d",&mater.amount);
printf("Pleaseinputdate:
\n");
scanf("%s",&mater.date);
fwrite(&mater,sizeof(structmaterial),1,fp);/*将输入的信息写入
printf("Inputisover.\nClickanykeytoexit.\n");文件并关闭*/
getch();
fclose(fp);
return;
}
intprint()
{FILE*fp;
inti;
if((fp=fopen("material.txt","r"))==NULL)/*将信息从文件中读出*/
return;
printf("-----------------------------------------------------------\n");
printf("NUM\t\tNAME\t\tAMOUNT\t\tDATE\n");
for(i=0;fread(&mat[i],sizeof(structmaterial),1,fp)!
=0;i++)
{printf("%-6d\t\t",mat[i].num);
printf("%-6s\t\t",mat[i].name);
printf("%-6d\t\t",mat[i].amount);
printf("%-6s\n",mat[i].date);
printf("-----------------------------------------------------------\n");
}
printf("Pressanykeytoexit.\n");
getch();
fclose(fp);/*关闭文件*/
return;
}
intsearch()/*定义搜索模块*/
{FILE*fp;
inti=0;
charsearname[6];
if((fp=fopen("material.txt","r"))==NULL)/*在文件中搜索*/
{printf("Cannotopen,clickanykeytoexit\n");
getch();
return;
}
printf("Pleaseinputthematerial'snamethatyouwanttosearch\n");
scanf("%s",searname);/*用“%s”格式字符输入*/
for(i=0;fread(&mat[i],sizeof(structmaterial),1,fp)!
=0;i++)/*对字符串
{if(strcmp(mat[i].name,searname)==0)进行比较*/
{
printf("Thisisthematerial'sinformation\n");
printf("NUM\t\tNAME\t\tAMOUNT\t\tDATE\n");
printf("%-6d\t\t",mat[i].num);
printf("%-6s\t\t",mat[i].name);
printf("%-6d\t\t",mat[i].amount);
printf("%-6s\t\t",mat[i].date);
printf("\n");
printf("-----------------------------------------------------------\n");
printf("Over.Clickanykeytoexit\n");
getch();
fclose(fp);
return;
}
}
printf("Thematerialisnotexsit\n");
getch();
fclose(fp);
return;
}
intorder()/*定义排序模块*/
{chari='y';
intn;
while(i=='y')
{printf("Pleaseinputanumber:
\n");
printf("-----------------------------------------------------------\n");
printf("1-----orderofnumber\n");
printf("0-----exit\n");
printf("-----------------------------------------------------------\n");
scanf("%d",&n);
switch(n)
{case1:
order_num();break;
case0:
return;
default:
printf("Error!
Pleaseinputarightnmber:
\n");
}
printf("Continueornot?
(y/n)");
scanf("%s",&i);
}
if(i=='n')
{printf("Pressanykeytoexit.\n");
getch();
return;
}
}
intorder_num()
{structmaterialtemp;/*定义临时作为交换的函数*/
FILE*fp;
inti,j,n;
if((fp=fopen("material.txt","r"))==NULL)
{printf("cannotopen!
");
exit(0);
}
for(i=0,n=0;fread(&mat[i],sizeof(structmaterial),1,fp);i++,n++);
fclose(fp);
for(i=0;ifor(j=i+1;jif(mat[i].num>mat[j].num)
{temp=mat[i];mat[i]=mat[j];mat[j]=temp;}/*用temp作为交换*/
printf("\n\nNUM\t\tNAME\t\tAMOUNT\t\tDATE\n");
printf("-----------------------------------------------------------\n");
for(i=0;i{
printf("%-6d\t\t",mat[i].num);
printf("%-6s\t\t",mat[i].name);
printf("%-6d\t\t",mat[i].amount);
printf("%-6s\t\t\n",mat[i].date);printf("-----------------------------------------------------------\n");
}
printf("Pressanykeytoexit.\n");
getch();
fclose(fp);
return;
}
设计内容:
一、设计前分析
在仓库材料管理中,材料的各种属性显得极其重要。
不同的材料包含不同的信息。
在这里为了简化设计,仅以编号(num)、名称(name)、数量(amount)及入库时间(date)这四个主要属性作为依托定义结构体。
为了能够实现录入、存储、排序及打印,需要分别定义功能函数提供给主函数(main)调用。
并且为了方便输入与输出,需要定义指针变量。
在实现菜单设计的过程中要用到输入输出的格式符和各种提示语句来完成。
在生成与读取文件中要用到文件管理的相关命令。
二、结构体及参数的设计
结构体(material)在这里包含四个元素:
编号(num)、名称(name)、数量(amount)及入库时间(date)。
分别将其数据类型定义为:
int、char[15]、int、char[10]。
并根据需要定义了两个结构体变量mat[N]、mater。
具体结构见源代码。
三、相应函数定义
(1)主函数定义
主函数需要包含有提示信息、各个被调用函数的参数、及对输入操作代码正误的判断。
使用while和switch语句能较轻松实现这些功能。
根据case的不同取值调用不同的功能函数。
需要注意的是当case取5时,要使用return语句返回。
当取1~5以外的值时(default),则在屏幕上显示输入有误的提示语句。
在判断是否继续操作后,仍然需要使用return语句返回。
具体结构见源代码。
(2)添加信息(add)函数定义
具体结构见源代码。
(3)打印信息(print)函数定义
具体结构见源代码。
(4)信息排序(order)函数定义
具体结构见源代码。
(5)信息检索(search)函数定义
材料信息的检索按照材料名称(name)进行搜索。
在搜索前,用fopen语句判断material.txt的存在性。
存在则继续进行,否则中断操作。
由于name为字符串常量,不能进行一般的大小比较。
必须使用库函数string.h中的字符串比较函数strcmp来对字符串进行大小比较。
当要查找的名称与成员中某个比较值为0,即两个字符串完全相同时,使用printf格式化函数输出这个元素的所有信息。
并使用输出格式符达到菜单输出。
信息检索(search)函数的源代码:
intsearch()/*定义搜索模块*/
{FILE*fp;
inti=0;
charsearname[6];
if((fp=fopen("material.txt","r"))==NULL)/*在文件中搜索*/
{printf("Cannotopen,clickanykeytoexit\n");
getch();
return;
}
printf("Pleaseinputthematerial'snamethatyouwanttosearch\n");
scanf("%s",searname);/*用“%s”格式字符输入*/
for(i=0;fread(&mat[i],sizeof(structmaterial),1,fp)!
=0;i++)/*对字符串
{if(strcmp(mat[i].name,searname)==0)进行比较*/
{
printf("Thisisthematerial'sinformation\n");
printf("NUM\t\tNAME\t\tAMOUNT\t\tDATE\n");
printf("%-6d\t\t",mat[i].num);
printf("%-6s\t\t",mat[i].name);
printf("%-6d\t\t",mat[i].amount);
printf("%-6s\t\t",mat[i].date);
printf("\n");
printf("-----------------------------------------------------------\n");
printf("Over.Clickanykeytoexit\n");
getch();
fclose(fp);
return;
}
}
printf("Thematerialisnotexsit\n");
getch();
fclose(fp);
return;
}
设计总结:
此次课程设计中,我们小组成员在一起讨论构思,团结协作,共同完成了此次的课程设计。
大家在后期进行了明确的分工,将程序划分为4个模块,大家通过实际动手操作,增强了各自的实际运用能力。
这也让我认识到程序设计中大家团结互助的重要性。
只有大家共同努力,才有这样的成果。
同时,在此次程序设计过程中,我还查阅参考了各种书籍。
这些书不但帮助我完成了课程设计,还增强了我编程的技能和技巧。
在程序中,重点用到了“对操作是否继续进行”的判断和“文件的读取、存储”等相关难点内容,并加强了我对指针的理解及对其他相关细节的注意。
我相信这会在今后的程序设计中起到很大帮助。
在程序中,定义了多个具有独立更能的函数模块。
程序设计思路清晰,程序可读性高。
实现了结构化的思想。
为养成良好的编程习惯打下了基础。
参考书目:
1、党群等.《C语言程序设计》.东北大学出版社.
2、谭浩强.《C语言程序设计》.清华大学出版社.
库存材料管理系统:
/*第5组:
库存材料管理系统
设计要求:
实现菜单设计,使用数据文件保存和修改,应用结构体和指针。
功能要求:
数据录入,存储,查询,统计,排序,打印等*/
N-S流程图:
i==’y’
n=1
n=2
n=3
n=4
n=5
输入错误
输入
打印
排序
检索
返回
打开文档
打开文档
打开文档
加信息
读文档
材料名相同
关闭文档
打印
读文档
关闭文档
打印
关闭文档
关闭文档
输入i
i==’y’
i==’n’
返回
结束