cC语言物品管理设计报告.docx
《cC语言物品管理设计报告.docx》由会员分享,可在线阅读,更多相关《cC语言物品管理设计报告.docx(39页珍藏版)》请在冰豆网上搜索。
cC语言物品管理设计报告
学号
2016-2017学年第2学期
1608220203
《C语言物品管理》
课程设计报告
题目:
C语言物品管理
专业:
网络工程
班级:
16级(3)班
姓名:
代应豪
指导教师:
代美丽
成绩:
计算机学院
2017年4月27日
目录
1设计内容及要求 ............................................................... 2
1.1概述................................................................................. 2
1.2主要功能......................................................................... 2
1.3设计目的及具体要求..................................................... 2
2 概要设计............................................................................ 2
2.1系统的功能简介............................................................. 2
2.2 总体程序框图 ............................................................... 3
2.3各个模块之间的主要关系............................................. 3
3设计过程及程序代码 ....................................................... 3
3.1定义结构体及宏定义..................................................... 4
3.2主函数 main()..................................................................4
3.3输入物品信息函数................................................... ......5
3.4输出显示物品函数......................................................... 5
3.5将物品写入磁盘............................................................. 6
3.6插入物品记录函数......................................................... 7
3.7 删除一个物品记录函数 ................................................ 7
3.8按照物品编号进行递增排序函数................................. 8
3.9按照物品总价进行递增排序函数................................. 8
3.10对物品记录进行排序函数........................................... 9
3.11输出头部信息函数....................................................... 10
3.12输出一条物品信息函数....................................... ........10
3.13判断该编号物品是否存在函数................................. 10
3.14根据物品编号进行查找函数...................................... 10
3.15根据物品名字进行查找函数...................................... 10
3.16对物品记录进行查找函数........................................... 11
4设计结果与分析 ............................................................... 12
4.1各个模块的程序流程图 ................................................ 12
1)①主函数程序(N-S)流程图及运行界面................... 12
2)①输入物品记录信息的(N-S)流程图及程序运行界面.......... ...................................................................................13
5设计心得 .............................................................................. 21
6参考文献 ...............................................................................22
7源程序代码(物品管理系统) ........................................... 23
1.设计内容及要求
1.1概述
《物品管理系统》主要根据课程设计要求进行设计,从对物品的简单处理着手设计一份物品管理系统。
1.2主要功能
物品管理系统是一个针对物品管理的系统。
该系统功能主要包括八大模块:
1)插入物品记录:
输入物品个数,根据物品个数依次输入每个物品记录的详细信息。
例如物品编号、名字、单价、数量。
2)输出物品记录:
对已经写入磁盘的记录信息的显示。
如无数据,则显示无数据!
3)将物品记录写入文件。
4)插入一个物品记录。
5)删除一个物品记录。
6)对物品记录进行排序。
7)对物品记录进行查找。
8)退出系统。
1.3设计目的及具体要求
主要利用C语言的文件操作能力设计开发一个小型的信息系统,至少具有如下功能:
物品的读和写、物品信息的增删改、物品信息的排序、查找。
操作界面要符合用户的一般习惯,图形或文本界面都可以。
要求:
系统以菜单方式工作,根据菜单项序号提示进行工作。
物品信息包括编号看、名称、单价、数量、总价。
系统以菜单方式工作,实现对物品信息的录入、修改、统计、排序、查询、输出等功能。
2概要设计
2.1系统的功能简介
该系统的主要功能是系统以菜单方式工作,实现对物品信息的录入,修改,统计,排序,查询,输出等功能。
2.2总体程序框图
物品管理系统操作主要流程如下,各个函数分别实现不一样的功能。
2.3各个模块之间的主要关系
该程序的功能主要是实现物品信息的录入,并对物品的相应信息进行进本的增删该的计算。
各个模块之间的关系是相互联系的。
首先,主函数包含了所有的子函数。
主函数是整个程序的核心。
子函数之间也是有联系的,对物品读取,插入删除,检索排序必须是在主函数的情况下进行的。
因此在第一步选择菜单项是非常重要的。
第一步菜单项的选择决定用户所要实现的操作功能。
3设计过程及程序代码
整个系统除了主函数外,另外还有8个函数,实现7人功能:
输入功能、输出功能、写入磁盘功能、插入并显示功能、分类查找并显示功能、分类排序并显示功能。
各个函数的详细设计说明分别如下:
3.1定义结构体及宏定义
#include"stdio.h"
#include"string.h"
#defineNAME_MAX_LEN20
#defineProd_MAX_NUM50
typedefstruct{
intnum;
charname[NAME_MAX_LEN];
doubleunitprice;
intamount;
doubletotalprice;
}prodNode;
typedefstructsequence
{
prodNodedata[Prod_MAX_NUM];
intlen;
}seq;
seqproduct;
3.2主函数main()
voidmain()
{intmenuItemCode=1;
product.len=0;
while(menuItemCode!
=0)
{
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("请输入所选项菜单项序号:
");
scanf("%d",&menuItemCode);
switch(menuItemCode)
{case1:
inputGoods();break;
case2:
outputGoods();break;
case3:
saveGoods();break;
case4:
insertOneGoods();break;
case5:
deleteOneGoods();break;
case6:
sortGoods();break;
case7:
searchGoods();break;
case0:
break;
default:
printf("输入超出范围!
\n");break;
}
}
}
3.3输入物品信息函数
voidinputGoods(){
inti,n;
printf("请输入物品个数:
\n");
scanf("%d",&n);
if(n<0)
return;
for(i=0;i{
printf("输入物品的编号:
\n");
scanf("%d",&product.data[i].num);
printf("输入物品的名字:
\n");
scanf("%s",product.data[i].name);
printf("输入物品的单价:
\n");
scanf("%lf",&product.data[i].unitprice);
printf("输入物品的数量:
\n");
scanf("%d",&product.data[i].amount);
product.data[i].totalprice=product.data[i].unitprice*product.data[i].amount;
}
product.len=n;
}
3.4输出显示物品函数
voidoutputGoods(){
inti;
if(product.len==0)
{printf("\n无数据!
\n");
return;
}
printf("\n物品的记录为:
\n");
printf("编号\t名字\t单价\t数量\t总价\n");
for(i=0;i{printf("%d\t%s\t%lf\t%d\t%.2lf",product.data[i].num,product.data[i].name,product.data[i].unitprice,product.data[i].amount,product.data[i].totalprice);
printf("\n");
}
}
3.5将物品写入磁盘
voidsaveGoods()
{inti;
FILE*fp;
if(product.len==0)
{printf("\n无数据!
\n");
return;
}
fp=fopen("D:
\\goods.txt","w");
if(fp==NULL)
{
printf("文件打开失败!
\n");
return;
}
fprintf(fp,"%s\t","编号");
fprintf(fp,"%s\t","名称");
fprintf(fp,"%s\t","单价");
fprintf(fp,"%s\t","数量");
fprintf(fp,"%s","总价");
for(i=0;i{fprintf(fp,"\n");
fprintf(fp,"%d\t",product.data[i].num);
fprintf(fp,"%s\t",product.data[i].name);
fprintf(fp,"%lf\t",product.data[i].unitprice);
fprintf(fp,"%d\t",product.data[i].amount);
fprintf(fp,"%.2lf",product.data[i].totalprice);
}
fclose(fp);
printf("已成功存盘!
\n");
}
3.6插入物品记录函数
voidinsertOneGoods()
{prodNodeG;
inti,pos;
if(product.len==Prod_MAX_NUM)
{
printf("表已满!
\n");
return;
}
printf("请输入插入位置:
");
scanf("%d",&pos);
if(pos<0||pos>product.len)
{printf("插入位置出错!
\n");
return;
}
printf("请输入要插入的物品记录:
\n");
printf("请输入编号:
");
do{
scanf("%d",&G.num);
if(G.num<=0)
printf("输入的编号不合理,请重新输入。
\n");
}while(G.num<=0);
printf("输入物品的名字:
\n");
scanf("%s",G.name);
printf("输入物品的单价:
\n");
scanf("%lf",&G.unitprice);
printf("输入物品的数量:
\n");
scanf("%d",&G.amount);
G.totalprice=G.unitprice*G.amount;
for(i=product.len-1;i>=pos;i--)
product.data[i+1]=product.data[i];
product.data[pos]=G;
product.len=product.len+1;
printf("插入成功!
");
}
3.7删除一个物品记录函数
voiddeleteOneGoods()
{
inti,pos;
if(product.len==0)
{printf("表空!
\n");
return;
}
printf("请输入要删除的物品记录的位置:
");
scanf("%d",&pos);
if(pos<0||pos>product.len-1)
{
printf("删除的位置出错!
\n");
return;
}
for(i=pos+1;i<=product.len-1;i++)
product.data[i-1]=product.data[i];
product.len=product.len-1;
printf("删除成功!
\n");
}
3.8按照物品编号进行递增排序函数
voidbubbleSortByNum()
{inti,j,n;prodNodetemp;
inttag;n=product.len;
for(tag=1,i=0;i{
tag=0;
for(j=n-1;j>i;j--)
if(product.data[j].num{
temp=product.data[j];
product.data[j]=product.data[j-1];
product.data[j-1]=temp;
tag=1;
}
}
}
3.9按照物品总价进行递增排序函数
voidbubbleSortByTotal()
{inti,j,n;
prodNodetemp;
inttag;n=product.len;
for(tag=1,i=0;i{tag=0;
for(j=n-1;j>i;j--)
if(product.data[j].totalprice{temp=product.data[j];
product.data[j]=product.data[j-1];
product.data[j-1]=temp;
tag=1;
}
}
}
3.10对物品记录进行排序函数
voidsortGoods()
{intsubMenuItem=1;
while(subMenuItem!
=0)
{
printf("\n\n");
printf("******************排序子菜单***********************\n");
printf("*1.按照物品编号进行递增排序*\n");
printf("*2.按照物品总价进行递增排序*\n");
printf("*0.退出子菜单*\n");
printf("***************************************************\n");
printf("请输入所选子菜单项序号:
");scanf("%d",&subMenuItem);
switch(subMenuItem)
{
case1:
bubbleSortByNum();
printf("已按照物品的编号进行递增排序。
排序后的结果为:
\n");
outputGoods();
break;
case2:
bubbleSortByTotal();
printf("已按照物品的总价进行递增排序。
排序后的结果为:
\n");
outputGoods();
break;
case0:
break;
default:
printf("输入超出范围!
\n");
break;
}
}
}
3.11输出头部信息函数
voidoutputHead()
{
printf("编号\t名字\t单价\t数量\t总价\n");
}
3.12输出一条物品信息函数
voidoutputOneGoods(prodNodes)
{printf("%d\t%s\t%lf\t%d\t%.2lf",s.num,s.name,s.unitprice,s.amount,s.totalprice);
printf("\n");
}
3.13判断该编号物品是否存在函数
intisNumberExist(intnumber)
{intn,i=0;
n=product.len;
while(i=number)
i++;
if(ireturni;
else
return-1;
}
3.14根据物品编号进行查找函数
voidseqSearchByNumber(intnumber)
{intpos;
pos=isNumberExist(number);
if(pos!
=-1)
{printf("查找成功!
查找结果如下:
\n");
outputHead();
outputOneGoods(product.data[pos]);
}
else
printf("查找失败!
编号为%d的物品不存在。
\n",number);
}
3.15根据物品名字进行查找函数
voidseqSearchByName(charname[])
{intflag=0;
intn,i;
n=product.len;
i=0;
while(i{
if(strcmp(product.data[i].name,name)==0)
{
if(flag==0)
{
flag=1;
printf("查找成功!
查找结果如下:
\n");
outputHead();
}
outputOneGoods(product.data[i]);
}
i++;
}
if(flag==0)
printf("查找失败!
名字为%s的物品不存在。
\n",name);
}
3.16对物品记录进行查找函数
voidsearchGoods()
{intnumber;
charname[NAME_MAX_LEN];
intsubMenuItem=1;
while(subMenuItem!
=0)
{
printf("\n\n");
printf("*********************查找子菜单********************\n");
printf("*1.根据物品编号进行查找*\n");
printf("*2.根据物品名字进行查找*\n");
printf("*0.退出系统*\n");
printf("***************************************************\n");
printf("请输入所选子菜单项序号:
");scanf("%d",&subMenuItem);
switch(subMenuItem)
{
case1:
printf("请输入要查找的物品编号:
");
scanf("%d",&number);
seqSearchByNumb