c语言课程设计书店图书销售系统.docx
《c语言课程设计书店图书销售系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计书店图书销售系统.docx(18页珍藏版)》请在冰点文库上搜索。
c语言课程设计书店图书销售系统
沈阳航空工业学院
课程设计
学号*****
班级
姓名吕佳
指导教师李飞
龑
2009年7月3日
沈阳航空工业学院
课程设计任务书
系:
自动化专业:
自动化班级:
学号:
*****题目:
书店图书销售系统
一、课程设计时间
2008~09第2学期第15周,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
模拟书店经营业务,主要指“购进图书”和“出售图书”两种业务。
由于图书的出售价格高于图书的购进价格,所以系统能够计算累计利润。
要求:
①“购进图书”和“出售图书”2方面信息只用1个文件存储,文件中每行数据遵循如下顺序:
图书编号,图书名称,出版社,购进册数,购进价格,出售册数,出售价格。
②能够随时显示库存情况和销售情况。
③能够随时计算书店累计利润。
④能够随时购进新书和出售图书,册数不限。
三、课程设计要求
程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“进书”、“售书”、“计算利润”、“书库现状”、“出售现状”、“退出”6项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
✧课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩
六、教师评语
一、需求分析…………………………………………………………1
二、程序流程图………………………………………………………2
三、核心技术的实现说明及相应程序段…………………………5
四、课设总结………………………………………………………8
五、参考文献…………………………………………………………9
六、源程序…………………………………………………………9
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,它们的功能分别是:
购进图书,出售图书,计算利润,书库现状,出售现状,退出。
在这些函数都是按照题目的要求实现的函数。
1、购进图书主要的功能是将购进来的图书写入文件中,用于保存。
2、出售图书实现卖书并对书库当中的内容进行更新,以达到卖书的目的。
3、计算利润将卖出的书的价格进行统计,并计算累计利润。
4、书库现状对书库当中的剩余图书进行查找,读出书库当中的信息。
5、出售现状显示卖出图书的名称,数目。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一本图书在书库当中都记录了:
图书编号,图书名称,出版社,购进册数,购进价格,出售册数,出售价格。
在程序当中,将图书的信息定义为结构体类型,添加以及追加图书信息直接写入文件中,其他函数每次对书库的访问,它的数据来源都是文件,这样做不但可以保证图书数据的一致性,而且也可以对图书的信息进行永久保存,保证每次运行程序都可以用原来的图书信息。
二、程序流程图
1、程序总体结构图
图1程序总体结构图
2、具体功能框图
(1)进书
图2进书
(2)售书
图3售书
(3)计算利润
图4计算利润
三、核心技术的实现说明及相应程序段
本程序主要由五个自定义函数和一个主函数,其中主函数以菜单的形式调用其它函数来实现所有功能。
在这些函数中,进书,售书,计算利润为程序的核心部分,下面予以说明。
1、进书函数
进书函数是建立文件的过程,主要是将图书的信息写到文件中,首先由程序创建一个文件,并写入图书信息,由于图书的信息是结构体,所以输入之后就马上存入文件当中,之后将文件关闭。
具体程序如下:
voidshoushu()
{
FILE*fp;
if((fp=fopen("","w"))==NULL)
{
printf("创建文件失败\n");
exit(0);
}
inti,j;
printf("请输入图书信息,图书编号,图书名称,出版社,购进册数,购进价格,出售价格\n");
fprintf(fp,"图书编号,图书名称,出版社,购进册数,购进价格,出售价格\n");
for(i=0;i{scanf("%8d%8s%8s%8d%f%f",&b[i].num,b[i].name,b[i].publish,&b[i].n,&b[i].price1,&b[i].price2);
fprintf(fp,"%8d%8s%8s%8d%f%f\n",b[i].num,b[i].name,b[i].publish,b[i].n,b[i].price1,b[i].price2);
}
2、售书函数
该部分函数是对图书库中的图书信息进行改动,首先是输入要买的图书的编号,之后用查找函数查找编号一样的图书,该查找函数用for循环来实现,不满足条件将提示信息重新来输入,之后满足与输入的编号一样这个条件之后程序进一步执行,然后,当售书成功后,显示售出的图书的编号,名称,出版社,剩余量和销售价格,同时将结构体中的数据进行改动,将售出的图书数量加1,并且将书库中的记录剩余量的那个结构体元素减1,之后将刚才的信息写到文件当中,最后关闭文件。
具体程序如下:
voidshoushu()
{
inti;
intj;
printf("请输入要售出的图书编号:
\n");
scanf("%d",&j);
for(i=0;i{
if(i<0||i>N)
{
printf("输入错误,请重新输入:
\n");
scanf("%d",&j);
}
elseif(j==b[i].num)
{
j=i;
printf("图书编号,图书名称,出版社,售出价格\n");
printf("%8d%8s%8s%8.2f\n",b[j].num,b[j].name,b[j].publish,b[j].price2);
--b[j].n;
++b[j].s;
}
}
FILE*fp;
if((fp=fopen("","w"))==NULL)
{
printf("创建文件失败\n");
exit(0);
}
fprintf(fp,"图书编号,图书名称,出版社,购进价格,出售价格\n");
for(i=0;i{
fprintf(fp,"%5d%5s%5s%5d%f%f\n",b[i].num,b[i].name,b[i].publish,b[i].n,b[i].price1,b[i].price2);
}
fclose(fp);
}
3、计算利润
利润的计算是计算累计利润,即将卖出的图书的数目和价格整体做记录,然后进行数据的计算。
首先将文件读出来,这样就是对书库当中的图书信息进行统计,然后定义一维数组l[N],记录买出每种书的利润,然后将l[N]中的每个元素都加起来,实现计算累计利润的目的,具体程序如下:
voidlirun()
{
FILE*fp;
inti;
floatl[N];
floata;
a=0;
if((fp=fopen("","r"))==NULL)
{
printf("创建文件失败\n");
exit(0);
}
for(i=0;i{
if(b[i].s!
=0)
{l[i]=(b[i].price2-b[i].price1)*b[i].s;
a+=l[i];
}
}
printf("售出的图书的利润是:
%f\n",a);
}
四、课设总结
通过课程设计,使我对C语言这门学科的知识有了进一步的了解,同时也知道了C语言原来有这么重要的作用。
在课设的时候,由于我的眼高手低,觉得脑袋里有思路了,这个程序就能写出来,其实不然。
自己想的和实际操作完全是两回事。
还有就是文件打开的时候要用r,我却用的是w,所以造成了许多错误,同时,也让我对文件的相关知识有了进一步了解。
还有就是我在这次程序设计中由于对结构体知识掌握的不到位,导致很多问题都解决不了,但是通过进一步看了结构体的知识,对知识熟悉了许多,自然问题解决了,所以,当知识欠缺的时候,回归基础往往起到事半功倍的效果。
在课设当中,我也做了大胆的尝试,在做统计利润函数的时候,要想实现结构体的累加,是不能用整形变量或实行变量来记录结构体当中的元素想加的结果的,这][N]这样一个一维数组,作出了大胆的尝试。
结果获得了成功,把问题解决了。
这次课程设计,让我有了一种优秀的习惯,让我学会了思考,当问题出现的时候,我没有直接去想上网找到那些所谓的程序,而是首先想到去查看知识的掌握程度,然后找到相关资料进行学习,自己编译的程序,有问题自己思考,我觉得这是我在这次课设当中收获最大的一部分,我觉得,到大学是为自己学习的,是来学知识的,而不是混毕业证来的,在大学要给自己个说法。
同时也明白了,遇到困难的时候不要灰心,努力过后,困难能解决的!
课设让我收获了一种习惯,同时让我对C语言的知识有了进一步的了解,为以后的学习打下了很好的基础。
五、参考文献
1姚合生;C语言程序设计;清华大学出版社;;
2刘成等;C语言程序设计实验指导与习题集;中国铁道出版社;;
3廖湖声,叶乃文等;C语言程序设计案例教程;人民邮电出版社;;
六、源程序
#include""
#include""进书");
puts("2.售书");
puts("3.计算利润");
puts("4.书库现状");
puts("5.出售现状");
puts("6.退出");
}
voidjinshu()
{
FILE*fp;
if((fp=fopen("","w"))==NULL)
{
printf("创建文件失败\n");
exit(0);
}
inti,j;
printf("请输入图书信息,图书编号,图书名称,出版社,购进册数,购进价格,出售价格\n");
fprintf(fp,"图书编号,图书名称,出版社,购进册数,购进价格,出售价格\n");
for(i=0;i{scanf("%8d%8s%8s%8d%f%f",&b[i].num,b[i].name,b[i].publish,&b[i].n,&b[i].price1,&b[i].price2);
fprintf(fp,"%8d%8s%8s%8d%f%f\n",b[i].num,b[i].name,b[i].publish,b[i].n,b[i].price1,b[i].price2);
}
fclose(fp);
}
voidshukuxianzhuang()
{
FILE*fp;
charch;
if((fp=fopen("","r"))==NULL)
{
printf("创建文件失败\n");
exit(0);
}
while((ch=fgetc(fp))!
=EOF)
putchar(ch);
fclose(fp);
}
voidshoushu()
{
inti;
intj;
printf("请输入要售出的图书编号:
\n");
scanf("%d",&j);
for(i=0;i{
if(i<0||i>N)
{
printf("输入错误,请重新输入:
\n");
scanf("%d",&j);
}
elseif(j==b[i].num)
{
j=i;
printf("图书编号,图书名称,出版社,售出价格\n");
printf("%8d%8s%8s%8.2f\n",b[j].num,b[j].name,b[j].publish,b[j].price2);
--b[j].n;
++b[j].s;
}
}
FILE*fp;
if((fp=fopen("","w"))==NULL)
{
printf("创建文件失败\n");
exit(0);
}
fprintf(fp,"图书编号,图书名称,出版社,购进价格,出售价格\n");
for(i=0;i{
fprintf(fp,"%5d%5s%5s%5d%f%f\n",b[i].num,b[i].name,b[i].publish,b[i].n,b[i].price1,b[i].price2);
}
fclose(fp);
}
voidlirun()
{
FILE*fp;
inti;
floatl[N];
floata;
a=0;
if((fp=fopen("","r"))==NULL)
{
printf("创建文件失败\n");
exit(0);
}
for(i=0;i{
if(b[i].s!
=0)
{l[i]=(b[i].price2-b[i].price1)*b[i].s;
a+=l[i];
}
}
printf("售出的图书的利润是:
%f\n",a);
}
voidchushouxianzhuang()
{
FILE*fp;
inti;
if((fp=fopen("","r"))==NULL)
{
printf("创建文件失败\n");
exit(0);
}
printf("售出的图书的信息为:
\n");
printf("图书编号,图书名称,出版社,剩余册数,购进价格,出售价格,出售价格\n\n");
for(i=0;i{
if(b[i].s!
=0)
printf("%8d%8s%8s%8d%f%8d%f\n",b[i].num,b[i].name,b[i].publish,b[i].n,b[i].price1,b[i].s,b[i].price2);
}
}
voidmain()
{
intchoice;
intj;
menu();
scanf("%d",&choice);
while
(1)
{
switch(choice)
{
case1:
jinshu();break;
case2:
shoushu();break;
case3:
lirun();break;
case4:
shukuxianzhuang();break;
case5:
chushouxianzhuang();break;
case6:
return;
}
menu();
scanf("%d",&choice);
//getch();
}
}