C语言商品管理系统1.docx
《C语言商品管理系统1.docx》由会员分享,可在线阅读,更多相关《C语言商品管理系统1.docx(29页珍藏版)》请在冰点文库上搜索。
C语言商品管理系统1
1问题定义…………………………………………………………………………..1
2系统设计……………………………………………………………………2
2.1总体设计………………………………………………………………………………3
2.2详细设计………………………………………………………………………………5
2.2.1数据结构设计…………………………………………………………6
2.2.2主控流程…………………………………………………………………………7
2.2.3函数功能描述…………………………………………………………………….7
3系统实现………………………………………………………………………8
3.1编码………………………………………………………………………9
3.1.1程序预处理……….……………………………………………………………10
3.1.2主函数main()……….………………………………………………………..12
3.1.3主菜单界面………….……………………………………………………….13
3.1.4输入商品信…….………………………………………………………………….15
3.1.5查找商品信息………….…………………………………………………………….16
3.1.6录入商品信息……….……………………………………………………………..17
3.1.7显示商品信息………….…………………………………………………………….18
3.1.8添加商品信息………….………………………………………………………18
3.2测试与调试………………………………………………………………………20
3.2.1概述………….……………………………………………………………20
3.2.2程序测试………….……………………………………………………………21
4系统维护………………………………………………………………………21
5归纳总结………………………………………………………………………21
5.1开发经验………………………………………………………………………22
5.2实训中遇到的问题及解决方法………………………………………………22
5.3设计中的不足之处……………………………………………………………………23
5.4感想和心得体会……………………………………………………………………23
6参考资料………………………………………………………………………23
前言
课程设计环节是应用型本科院校非常重要的一个教学环节,是学完一门课后应用本课知识及以前的知识积累而进行的综合性、开放性的训练。
通过课程设计,不仅能够使学生得到系统的技能训练,巩固和加强所学得专业理论知识,而且能够培养学生工程意识、创新能力、团队精神等综合素质,培养学生的设计能力和解决实际问题的能力。
C语言由于其强大的功能,丰富的表达能力,高效的代码,良好的移植性和灵活性,自1972年问世以来,经久不衰,即使现在出现了面向对象的程序设计方法和开发工具,但它仍然是人们学习程序设计的首选语言,用它训练和提高编程技术,以及开发应用程序等。
我们通过《C语言程序设计》这门课程的学习,已经能编写解决小问题的程序,对程序的开发也有了初步的认识,还掌握了C语言的基本语法,这一过程确确实实令我们感到欣喜,有点计算机可以完成自我任务的成就感。
但是,对于程序设计而言,学习C的步伐不应该停留于此。
我们最终的目的应该是掌握开发大型综合程序的方法,即遵循软件工程的开发步骤和结构化程序设计思想,用C语言开发出解决复杂问题的大型综合程序。
可是对于多数学生来说,学习了C语言后,除了应付各种考试之外,别无它用,对TurboC语言丰富的函数知之甚少,加上DOS环境所限,因而对C语言兴趣不大,也感到C语言比较难以掌握。
本实训就是为了让学生在学完C语言后进一步了解C语言的知识,掌握C语言在软件开发方面的使用方法,希望通过此次实训,不仅能提高学生学习C语言的兴趣,更为今后学习其它专业知识及开发程序打下坚实的基础。
本指导书中有些内容借鉴了互联网上相关程序的设计思想,在此对相关者表示衷心的感谢。
由于时间、经验及水平的原因,不当、不足之处,请大家提出宝贵意见。
编者
桂林电子科技大学信息科技学院
商品管理系统
本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。
本程序中涉及结构体、数组、文件等方面的知识。
通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用文件保存实现对商品管理管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。
1、问题定义
制作一个商品管理系统,功能包括商品录入、商品排序、商品查找、商品存储与读入、按条件输出商品单价等。
图1.1商品管理系统功能需求
在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。
2、系统设计
2.1总体设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。
可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
图2.1
本商品管理系统采用文件保存实现,如图2.1所示,它由如下五大功能模块组成:
●输入商品信息模块。
完成将信息输入文件的工作。
信息以二进制形式存储的数据文件中读入。
商品信息由商品序号,商品生产商,商品单价构成。
●显示商品模块。
完成商品信息的输入后,可以选择打开商品信息存入的文件,并按照商品号或者商品单价的排序形式输出商品信息。
●查找商品信息模块。
查找要找的商品信息,打开商品存入的文件并输入商品号显示要查找的商品信息。
●添加商品模块。
将新添的商品信息存储入指定的文件。
●退出系统模块。
输入0按回车键退出商品管理系统。
2.2详细设计
2.2.1数据结构设计
●商品信息结构体
typedefstruct
{
charname[30];/*商品名称*/
intnum;/*商品号*/
charshang[10];/*商品生产厂家*/
floatprice;/*商品单价*/
}record;
结构体structstudent将用于存储商品信息,它将存储到指定的文件。
2.2.2主控main()函数执行流程
本成绩管理系统执行主流程如图2.2所示。
它先创建文件,将商品信息输入文件,并按提示输入数字(0-4)打开文件,通过文件读写来实行商品的显示和添加等。
在选择功能时,有效的输入为本0至4之间的任意数值,其他输入都被视为错误按键。
若输入为0(即变量fn=0),它会显示退出系统,并按任意键退出。
若选择1,则调用voidDataInput(record*com,int*nptr)函数,执行输入商品信息操作;若选择2,则调用voidDataDisPlay()函数,执行商品显示操作;若选择3,则调用voidDataFind();函数,执行商品查找操作;若选择4,则调用voidDataAdd()函数,执行商品信息添加操作;若选择5,则调用voidDataStatistic()函数,执行退出系统操作。
2.2.3函数功能描述
DataInput(record*st,int*q)
函数原型:
voidDataInput(record*st,int*q)
DataInput(record*st,int*q)函数用于输入商品信息,写入文件中
。
。
DataStorage(record*st,intn)
函数原型:
voidDataStorage(record*st,intn)
DataStorage(record*st,intn)函数用于将商品信息存储入文件中。
DataFind()
函数原型:
voidDataFind()
DataFind()函数用于商品信息的查找。
DataDisPlay()
函数原型:
voidDataDisPlay()
DataDisPlay()函数用于显示商品信息,按指定的顺序显示出来。
voidDataAdd()
函数原型:
voidvoidDataAdd()
voidDataAdd()函数用于添加商品信息,写入并存储到指定的文件当中。
●主函数main()
整个成绩管理系统控制部分,其详细说明可参考图二。
完成在上述系统设计后,即可着手进行系统实现的工作,开始程序代码的编写。
3、系统实现
3.1编码
3.1.1程序预处理
包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。
#include
#include
#include
#defineS50
typedefstruct
{
charname[30];
intnum;
charshangjia[10];
floatprice;
}record;
voidDataInput(record*st,int*q);
intDataRead(record*st,int*q);
voidDataStorage(record*st,intn);/*信息保存到文件*/
voidDataFind();
voidDataDisPlay();
voidDataAdd();
3.1.2主函数main()
main()函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。
详细分析可参考图2。
intmain()
{
recordshangpin[S];
intnumber=20;/*设商品数*/
chara;
printf("\t~~~~~~~欢迎进入我的商品管理系统~~~~~~~~\t");
3.1.3主菜单界面
用户进入商品管理系统时,需要显示主菜单,提示用户进行选择,完成相应任务。
此代码被main()函数调用。
while
(1)
{
printf("\n\t\t1.录入商品\n");/*显示主菜单*/
printf("\t\t2.显示商品\n");
printf("\t\t3.查找商品\n");
printf("\t\t4.添加商品\n");
printf("\t\t0.退出");
printf("\n\t~~~~~~~~~~~~~~~~\n");
printf("\t请输入你的一个选项(数字0-4):
");
fflush(stdin);
scanf("%c",&a);
puts("\n");
switch(a)/*切换到不同功能*/
{
case'1':
DataInput(shangpin,&number);
break;/*录入信息*/
case'2':
DataDisPlay(shangpin,number);
break;/*信息显示*/
case'3':
DataFind(shangpin,number);
break;/*信息查找*/
case'4':
DataAdd();
break;/*增加*/
case'0':
return0;
default:
puts("\t\t没有这个项!
返回主菜单!
");
break;
}
printf("\n\t\t完毕!
按任意键继续");
getch();
puts("\n");
}
}
3.1.4输入商品信息
用户进入商品管理系统时,通过输入商品数量,商品名称,商品号,商品生产厂家,商品单价来录入到文件中。
voidDataInput(record*st,int*q)/*商品信息录入*/
{
inti=0;
intn;/*录入的总数*/
charYesOrNo;/*判断是否保存*/
charshangjiaming[30];/*商名*/
inthaoma;/*商品号*/
charshangjia[10];/*单价*/
floatdanjia;
printf("\t\t请输入商品个数:
");
scanf("%d",&n);
*q=n;/*q返回商品个数*/
printf("\t\t现在开始录入这%d个商品信息:
\n\n",n);
while(i{
printf("请输入商品的商品名:
",i+1);
scanf("%s",&shangjiaming);
printf("请输入商品的商品号:
",i+1);
scanf("%d",&haoma);
printf("请输入商品的生产商:
",i+1);
scanf("%s",&shangjia);
printf("请输入商品的单价:
",i+1);
scanf("%f",&danjia);
if(danjia>=0&&danjia<=12345)/*有效的单价才录入*/
{
strcpy(st[i].name,shangjiaming);
st[i].num=haoma;
strcpy(st[i].shangjia,shangjia);
st[i].price=danjia;
i=i+1;
}
else
printf("输入的单价是一个无效的值\n\n");
}/*结束while*/
printf("要保存您刚才录入的数据吗(Y/N)?
");/*选择保存*/
fflush(stdin);
scanf("%c",&YesOrNo);
if(YesOrNo=='y'||YesOrNo=='Y')
DataStorage(st,n);
elseif(YesOrNo=='n'||YesOrNo=='N')
return;
else
printf("输入了不正确的选项\n");
return;
}/*结束函数*/
3.1.5查找商品信息
以读出的形式打开文件,通过条件来查找文件中的商品信息,并且以按商品号或者按商品单价的形式由低到高排列出来。
voidDataFind()/*查找*/
{
voidOnNumber(record*st,intn);/*按商品号排序*/
intkey;/*key为要查找的关键值*/
intlow=0;/*下限*/
inthigh;/*上限*/
intmid;/*中间值*/
charans;/*选项*/
recordst[S];
intn;
if(DataRead(st,&n)==1)/*从文件中读取信息*/
{
OnNumber(st,n);/*先按商品号排序*/
high=n;
do
{
printf("\n\n\t\t请输入你要查找的商品号:
");
scanf("%d",&key);
low=0;high=n;
while(low<=high)
{
mid=(high+low)/2;
if(key==st[mid].num)
{
printf("\n\t\t你要找的是第%d个商品\n",mid+1);
printf("\t\t结果如下:
\n\n");
printf("序号\t\t商品名\t商品号\t生产商\t单价\n");
printf("%3d%17s%12d%12s%8.1f\n",mid+1,st[mid].name,st[mid].num,st[mid].shangjia,
st[mid].price);
break;/*如果找到则退出循环*/
}
if(key>st[mid].num)low=mid+1;
elsehigh=mid-1;
}
if(low>high)
printf("\t\t,没有找到这个价格!
\n");
printf("\n\t\t还要继续查询吗(Y/N)?
");
ans=getch();
}
while(ans=='Y'||ans=='y');/*结束do....while*/
}
}
3.1.6录入商品信息
新建一个文件,将输入的商品信息录入文件并保存,成功后,可执行将商品信息添加到该文件中,或者从文件中读取商品信息等功能。
voidDataStorage(record*st,intn)/*录入保存文件*/
{
inti;
FILE*fp;
charFileName[20];
printf("请输入您要保存的文件名:
");
scanf("%s",FileName);
printf("正在将商品信息保存到文件,请稍候……\n");
if((fp=fopen(FileName,"w"))==NULL)
printf("没有该文件\n");
else
for(i=0;ifprintf(fp,"\n%17s%12d%12s%8.1f",st[i].name,st[i].num,st[i].shangjia,st[i].price);
fclose(fp);
}
intDataRead(record*st,int*q)/*读取文件*/
{
inti=0;
chardatafile[20];
FILE*fp;
*q=0;
printf("请输入文件名:
");
scanf("%s",datafile);
if((fp=fopen(datafile,"r"))==NULL)/*打开文件*/
{
printf("没有该文件,请重新输入!
\n");
return0;
}
else
{
printf("正在读取商品单价,请稍候……\n");
while(!
feof(fp))
{
fscanf(fp,"%s%d%s%f",&st[i].name,&st[i].num,&st[i].shangjia,&st[i].price);
i++;
}
*q=i;
printf("\n");
fclose(fp);
return1;
}
}
3.1.7显示商品信息
文件创建成功并且存入了商品信息后,可以通过指定的操作打开文件并将文件的商品信息显示出来。
voidDataDisPlay()
{
voidOnPrice(record*st,intn);/*按单价*/
voidOnNumber(record*st,intn);/*按商品号*/
intN;
inti;
recordst[300];
charYesNo;/*是否按顺序显示*/
chartp;
if(DataRead(st,&N)==1)/*从文件读取数据*/
{
printf("序号\t\t商品名\t商品号\t生产商\t单价\n");
for(i=0;iprintf("%3d%17s%12d%12s%8.1f\n",i+1,st[i].name,st[i].num,st[i].shangjia,st[i].price);
printf("要按顺序显示吗?
(Y/N)?
");
fflush(stdin);
scanf("%c",&YesNo);
if(YesNo=='y'||YesNo=='Y')
{
printf("\t请输入排序方式:
\n");
printf("\t(1.按价格排序从低到高;2.按商品号排序从低到高.)");
fflush(stdin);
scanf("%c",&tp);
if(tp=='1')
OnPrice(st,N);
elseif(tp=='2')
OnNumber(st,N);
else
printf("\t输入了不正确项!
\n");
}
}
}/*结束显示成绩*/
按单价排序商品信息
查找商品信息时,按照商品单价的高低查看要查找的商品信息。
voidOnPrice(record*st,intn)/*按单价顺序*/
{inti,j;
recordtemp;
printf("\t\t按单价排序---\n\n");
printf("商品总数为%d:
\n",n);
for(j=0;jfor(i=0;iif(st[i].price>st[i+1].price)
{
temp=st[i];
st[i]=st[i+1];
st[i+1]=temp;
}
printf("\n\t\t按成绩排序的结果如下(按分数从低到高):
\n\n");
printf("序号\t\t商品名\t商品号\t生产商\t单价\n");
for(i=0;iprintf("%3d%17s%12d%12s%8.1f\n",i+1,st[i].name,st[i].num,st[i].shangjia,
st[i].price);
}
按商品序号查找商品信息
查找商品信息时,按照商品序号来查看要查找的商品信息。
voidOnNumber(record*st,intn)/*按序号顺序*/
{
inti,j;
recordtemp;
printf("\t\t按商品号排序---\n\n");
printf("商品总数为%d:
\n",n);
for(j=0;jfor(i=0;iif(st[i].num>st[i+1].num)
{
temp=st[i];
st[i]=st[i+1];
st[i+1]=temp;
}
printf("\n\t(按商品号从小到大):
\n\n");
printf("序号\t\t商品名\t商品号\t生产商\t单价\n");
for(i=0;iprintf("%3d%17s%12d%12s%8.1f\n",i+1,st[i].name,st[i].num,st[i].shangjia,
st[i].price);
}
3.1.8添加商品信息
打开建立的文件,将要添加的商品信息写入文件当中并且保存。
voidDataAdd()/*增加*/
{
inti=0,n,m;/*商品名