某超市售货系统.docx
《某超市售货系统.docx》由会员分享,可在线阅读,更多相关《某超市售货系统.docx(18页珍藏版)》请在冰豆网上搜索。
某超市售货系统
沈阳航空工业学院
课程设计
学号200604033024
班级6403301
姓名王研
指导教师吴杰宏
2008年7月3日
沈阳航空工业学院
课程设计任务书
院系:
航空宇航工程专业:
飞行器设计与工程班级:
6403301
学号:
200604033024题目:
某超市售货系统
(1)
一、课程设计时间
2007~08第2学期第17周,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
1录入该超市所有商品信息;
2进货添加;
3顾客买商品。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“商品信息录入”、“进货添加”、“商品出售”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、说明书成绩
六、教师评语
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段5
四、个人总结10
五、参考文献10
六、源程序10
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,他们的功能分别是:
录入超市商品信息函数(add),添加信息函数(putin),购买商品函数(que),商品信息查询函数(show),前三个函数的实现严格按照题目的要求,而后面的一个函数属于附加功能。
1、录入超市商品信息函数主要实现程序最初运行时商品信息的录入;
2、添加信息函数主要实现程序运行中商品信息的添加;
3、购买商品函数实现的功能是按照商品号码对商品的数据记录进行删除;
4、商品信息查询函数允许按照商品号对超市的各种商品信息进行查询;
每一个学生记录都包含号码,名称,数量,在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入E盘的txet.dat文件中,其他函数每次对商品记录的访问,其数据来源都是txet.dat文件,这样做不但可以保证商品数据的一致性,而且可以对商品数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1、程序总体结构图
地时间
图1程序总体结构图
2、具体功能框图
(1)录入商品数据信息函数add
图2录入商品数据函数
(2)读取商品信息数据reads
图3读取商品信息数据
(3)顾客买商品函数que
图4顾客买商品函数
三、核心技术的实现说明及相应程序段
本程序主要由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,录入超市商品信息函数,添加信息函数,购买商品函数是程序中较为核心的部分,下面分别进行说明。
1、录入超市商品信息函数
添加数据分为两种情况,其一是在学生文件(text.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的商品信息写入该文件当中;其二是在学生文件(text.dat)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。
具体的程序段如下:
voidadd()/*添加商品信息*/
{FILE*fp;
intn,i,j;
structtextsup;
if((fp=fopen("e:
\\text.dat","rb+"))!
=NULL)
{j=getw(fp);
rewind(fp);
printf("请输入要添加的商品种数,按回车键确认:
");
scanf("%d",&n);
putw(j,fp);
putw(i,fp);
fseek(fp,0L,2);
for(i=1;i<=n;i++)
{printf("\n请输入第%d个商品的号码,名称,数量用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%d",sup.num,sup.name,&sup.n1);
}
}
else
{
if((fp=fopen("e:
\\text.dat","wb"))!
=NULL)
{
printf("请输入要添加的商品数量,按回车键确认:
");
scanf("%d",&n);
putw(n,fp);
for(i=1;i<=n;i++)
{printf("\n请输入第%d个商品的号码,名称,数量用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%d",sup.num,sup.name,&sup.n1);
fwrite(&sup,sizeof(structtext),1,fp);
}
}
}
fclose(fp);
}
2、添加信息函数
该函数的核心内容是添加算法以及最终对源文件的更新。
该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待添加商品的号码,而后按照该学号进行查找,采用添加方法进行添加。
对学生信息的具体添加算法是在结构体数组中实现的。
在数组中添加商品信息后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。
具体程序段如下:
voidputin()
{
FILE*fp;
structtextstu[N],sup;
intn,i;
reads(stu,&n);
printf("\n请输入要更改信息的商品的号码,按回车键确认:
");
scanf("%s",sup.num);
reads(stu,&n);
for(i=0;iif(strcmp(sup.num,stu[i].num)==0)
break;
if(i>=n)
{printf("无此商品信息!
");
return;
}
printf("商品的数量:
");
scanf("%d",&sup.n1);
stu[i].n1+=sup.n1;
if((fp=fopen("e:
\\text.dat","wb"))==NULL)
{printf("打开文件失败!
");
return;
}
putw(n,fp);
for(i=0;ifwrite(&stu[i],sizeof(structtext),1,fp);
fclose(fp);
}
3、购买商品函数
该函数的核心内容是删除算法以及最终对源文件的更新。
该函数执行时,首先调用reads函数将文件中的商品信息读入数组当中,并由用户输入待删除商品的号码,而后按照该商品编号进行查找,采用删除算法删除。
对商品信息的具体删除算法是在结构体数组中实现的,当学生的信息被找到后,位于数组中该学生后面的学生记录依次向前移动一个元素的位置,这些操作完成后,要删除的学生信息就被后面的数组元素覆盖掉了,也就实现了删除。
在数组中删除学生信息后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。
具体程序段如下:
voidque()
{
FILE*fp;
structtextstu[N],sup;
intn,i;
reads(stu,&n);
printf("\n请输入要购买的商品的号码,按回车键确认:
");
scanf("%s",sup.num);
reads(stu,&n);
for(i=0;iif(strcmp(sup.num,stu[i].num)==0)
break;
if(i>=n)
{printf("无此商品信息!
");
return;
}
printf("商品的数量:
");
scanf("%d",&sup.n1);
stu[i].n1-=sup.n1;
if((fp=fopen("e:
\\text.dat","wb"))==NULL)
{printf("打开文件失败!
");
return;
}
putw(n,fp);
for(i=0;ifwrite(&stu[i],sizeof(structtext),1,fp);
fclose(fp);
}
四、个人总结
通过这次C语言的课设,我学习到了很多东西,虽然我的课设不是我百分之百的出自我手,但我为它付出了很多,有很多东西在同学的帮助下,我终于搞懂了,我很高兴,C语言我们是大一学的,时隔一年,我忘记了很多,但这不是理由,最后我还是懂了很多,收获了很多,我很高兴,最后我的程序都但好了,要求中的大部分功能也实现了,这是在同学的帮助和我的努力下一起完成的.
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#include
#defineN20
structtext
{charnum[20];
charname[10];
intn1;
};
voidmenu();
voidadd();
voidputin();
voidque();
voidshow();
voidexit();
main()
{
intn;
while
(1)
{
menu();
printf("\n请输入您要选择的操作序号,按回车键确认:
");
scanf("%d",&n);
switch(n)
{case1:
add();break;
case2:
putin();break;
case3:
que();break;
case4:
show();break;
case5:
return0;
default:
printf("输入错误,请输入列表中存在的序号!
\n");
}
}
}
voidmenu()
{printf("*************************某超市售货系统************************");
printf("\n1录入该超市所有商品信息");
printf("\n2进货添加");
printf("\n3顾客买商品");
printf("\n4显示现商品所有的信息");
printf("\n5退出");
}
voidreads(structtextsup[N],int*n)
{
FILE*fp;
inti=0;
if((fp=fopen("e:
\\text.dat","rb"))==NULL)
{printf("文件打开失败!
\n");
return;
}
else
{
*n=getw(fp);
for(i=0;i<*n;i++)
fread(&sup[i],sizeof(structtext),1,fp);
}
fclose(fp);
}
voidadd()/*添加商品信息*/
{FILE*fp;
intn,i,j;
structtextsup;
if((fp=fopen("e:
\\text.dat","rb+"))!
=NULL)
{j=getw(fp);
rewind(fp);
printf("请输入要添加的商品种数,按回车键确认:
");
scanf("%d",&n);
putw(j,fp);
putw(i,fp);
fseek(fp,0L,2);
for(i=1;i<=n;i++)
{printf("\n请输入第%d个商品的号码,名称,数量用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%d",sup.num,sup.name,&sup.n1);
}
}
else
{
if((fp=fopen("e:
\\text.dat","wb"))!
=NULL)
{
printf("请输入要添加的商品数量,按回车键确认:
");
scanf("%d",&n);
putw(n,fp);
for(i=1;i<=n;i++)
{printf("\n请输入第%d个商品的号码,名称,数量用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%d",sup.num,sup.name,&sup.n1);
fwrite(&sup,sizeof(structtext),1,fp);
}
}
}
fclose(fp);
}
voidshow()
{structtextsup[N];
inti,n;
reads(sup,&n);
if(n==0)
return;
printf("*****************现商品所有的信息如下*****************");
for(i=0;iprintf("\n商品编号:
%s\n名称:
%s\n数量:
%d\n",sup[i].num,sup[i].name,sup[i].n1);
getchar();
}
voidputin()
{
FILE*fp;
structtextstu[N],sup;
intn,i;
reads(stu,&n);
printf("\n请输入要更改信息的商品的号码,按回车键确认:
");
scanf("%s",sup.num);
reads(stu,&n);
for(i=0;iif(strcmp(sup.num,stu[i].num)==0)
break;
if(i>=n)
{printf("无此商品信息!
");
return;
}
printf("商品的数量:
");
scanf("%d",&sup.n1);
stu[i].n1+=sup.n1;
if((fp=fopen("e:
\\text.dat","wb"))==NULL)
{printf("打开文件失败!
");
return;
}
putw(n,fp);
for(i=0;ifwrite(&stu[i],sizeof(structtext),1,fp);
fclose(fp);
}
voidque()
{
FILE*fp;
structtextstu[N],sup;
intn,i;
reads(stu,&n);
printf("\n请输入要购买的商品的号码,按回车键确认:
");
scanf("%s",sup.num);
reads(stu,&n);
for(i=0;iif(strcmp(sup.num,stu[i].num)==0)
break;
if(i>=n)
{printf("无此商品信息!
");
return;
}
printf("商品的数量:
");
scanf("%d",&sup.n1);
stu[i].n1-=sup.n1;
if((fp=fopen("e:
\\text.dat","wb"))==NULL)
{printf("打开文件失败!
");
return;
}
putw(n,fp);
for(i=0;ifwrite(&stu[i],sizeof(structtext),1,fp);
fclose(fp);
}