教材管理系统.docx
《教材管理系统.docx》由会员分享,可在线阅读,更多相关《教材管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
![教材管理系统.docx](https://file1.bdocx.com/fileroot1/2022-10/27/c84b448a-577c-406b-b8a0-8756ab0bcebb/c84b448a-577c-406b-b8a0-8756ab0bcebb1.gif)
教材管理系统
沈阳航空工业学院
课程设计
学号__________
班级__________
姓名__________
指导教师__________
年月日
沈阳航空工业学院
课程设计任务书
机械与汽车学院机械设计及其自动化专业5406108班学号200504061283
一、课程设计题目:
教材管理系统
二、课程设计工作自2007年7月9日起至2007年7月14日止
三、课程设计内容:
运用所学的C语言知识,编制和调试程序,具有如下功能:
(1)教材录入(教材信息至少应包括书名、作者、出版社、总数量等数据项)
(2)教材查询可以按照书名、作者、出版社分别进行查询
(3)购买教材及教材的出卖
(4)缺书统计(5)将教材信息存入文件book.dat中。
四、课程设计要求:
程序质量:
●贯彻结构化程序设计思想。
●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
●用户界面中的菜单至少应包括“教材录入”、“教材查询”、“购买教材”、“出售教材”、“统计缺书”“退出”6项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:
____________________
学生签名:
____________________
目录
一、需求分析1
二、程序流程图3
三、核心技术的实现说明及相应程序段8
四、个人总结12
五、参考文献12
六、源程序13
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,他们的功能分别是:
教材录入信息函数(lu),查询教材函数(chaxun),购买教材函数(add),出售教材函数(sell),统计缺书函数(que)。
1录入教材函数主要是实现对最初的教材信息进行录入;
2查询教材函数允许按照书号对教材的书名,作者,出版社,单价及现有数量进行查询;
3购买教材函数主要是实现教材信息录入后,对教材信息的追加购买功能;
4出售教材函数主要是实现按教材的书名,作者,出版社,单价及出售数量对教材进行出售;
5统计缺书函数主要是实现对所缺教材书名的统计。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一本教材记录都包含教材的书号,书名,作者,出版社,教材的价格及数量。
在程序当中,将教材记录类型定义为结构体类型,购买以及录入教材信息直接写入E盘的book.dat文件中,其他函数每次对教材记录的访问,其来源都是book.dat文件,这样做不但可以保证教材数据的一致性,而且可以对教材数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1程序总体结构图
图1程序总体结构图
2具体功能框图
(1)录入教材函数
图2录入教材函数
(2)读取教材函数
图3读取教材函数
(3)购买教材函数
图4购买教材函数
(4)出售教材函数
图5出售教材函数
三、核心技术的实现说明及相应程序段
本程序一共由五个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数中,教材录入函数,购买教材函数和出售教材函数是程序中较为核心的部分,下面分别对程序进行说明:
1、教材录入函数说明
教材录入前要用键盘先输入教材的编号,书名,作者,出版社,价格,数量。
用只写的方式打开一个文件夹(book.dat)把数据项写入指定文件(book.dat)中。
关闭文件。
具体的程序段如下:
voidsave()/*保存程序*/
{FILE*fp;
inti;
if((fp=fopen("e:
\\book.dat","wb"))==NULL)/*只写方式打开文件*/
{printf("cannotopenfile\n");
return;
}
for(i=0;ifwrite(&jiaocai[i],sizeof(structbook),1,fp);/*将fp所指向的文件写入指定文件中*/
fclose(fp);/*关闭文件*/
}
voidlu()
{inti;
printf("\n请输入第%d本教材的编号,书名,作者,出版社,价格,总量,用空格分开,并按回车键确认:
\n");
for(i=0;iscanf("%d%s%s%s%d%d",&jiaocai[i].num,jiaocai[i].name,jiaocai[i].writer,jiaocai[i].repub,&jiaocai[i].money,&jiaocai[i].count);
save();/*调用save()保存程序*/
}
2、购买教材函数
购买教材数据分为两种情况,其一是在教材文件(book.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的教材信息写入该文件当中;其二是在教材文件(book.dat)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。
具体的程序段如下:
voidadd()/*购买教材*/
{FILE*fp;
intn,i,j;
structbookjiaocai;
if((fp=fopen("e:
\\book.dat","rb+"))!
=NULL)/*读写方式打开文件*/
{j=getw(fp);
rewind(fp);/*文件位置指针返回文件开头*/
printf("请输入要购买的教材数量,按回车键确认:
");
scanf("%d",&n);
putw(j+n,fp);/*将整数n+j输出到fp所指向的文件*/
fseek(fp,0L,2);/*将位置指针从文件末尾向后退0个字节*/
for(i=1;i<=n;i++)
{printf("\n请输入购买教材的编号,书名,作者,出版社,价格,总量,用空格分开,并按回车键确认:
\n");
scanf("%s%s%s%s%d%d",&jiaocai.num,&jiaocai.name,&jiaocai.writer,&jiaocai.repub,&jiaocai.money,&jiaocai.count);
fwrite(&jiaocai,sizeof(structbook),1,fp);
}
}
else
{if((fp=fopen("e:
\\book.dat","wb"))!
=NULL)/*只写方式打开文件*/
{printf("请输入要购买的教材数量,按回车键确认:
");
scanf("%d",&n);
putw(n,fp);
for(i=1;i<=n;i++)
{printf("\n请输入购买教材的编号,书名,作者,出版社,价格,总量,用空格分开,并按回车键确认:
\n");
scanf("%s%s%s%s%d%d",&jiaocai.num,&jiaocai.name,&jiaocai.writer,&jiaocai.repub,&jiaocai.money,&jiaocai.count);
fwrite(&jiaocai,sizeof(structbook),1,fp);
}
}
}
fclose(fp);
}
3、出售教材函数
该部分的核心是统计出售该教材的数量和出售后的数量,以读写或追加读写的方式将文件打开,将剩余教材的数量以只写的方式写入(book.dat)文件中。
在以前数据的基础上统计出售的教材和剩余教材。
具体的程序段如下:
voidsell()/*出售教材*/
{FILE*fp;
intn,i,j;
structbookjiaocai;
if((fp=fopen("e:
\\book.dat","rb+"))!
=NULL)/*以读写的方式打开文件*/
{j=getw(fp);
rewind(fp);/*文件位置指针返回文件开头*/
printf("请输入要出售的教材数量,按回车键确认:
");
scanf("%d",&n);
putw(j-n,fp);/*将整数j-n输出到fp指向的文件*/
fseek(fp,0L,2);
for(i=1;i<=n;i++)
{printf("\n请输入出售教材的编号,书名,作者,出版社,价格,总量,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s%d%d",&jiaocai.num,&jiaocai.name,&jiaocai.writer,&jiaocai.repub,&jiaocai.money,&jiaocai.count);
}
if((fp=fopen("e:
\\book.dat","wb"))==NULL)/*以只写的方式打开文件*/
{printf("cannotopenfile\n");
return;
}
else/*重新写回文件当中*/
{putw(n,fp);
for(i=0;i{printf("\n请输入出售教材的编号,书名,作者,出版社,价格,总量,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s%d%d",&jiaocai.num,&jiaocai.name,&jiaocai.writer,&jiaocai.repub,&jiaocai.money,&jiaocai.count);}
fwrite(&jiaocai,sizeof(structbook),1,fp);
}
fclose(fp);
}
四、个人总结
本次课程设计使我掌握了在C语言中,如何对文件进行处理。
如如何创建文件,如何保存文件,如何将数据输入文件或将文件中的数据输出到内存中。
我的程序基本上都是处理文件中的数据,将文件录入,保存,增加,删减等。
但是程序未能全部实现预期的效果,关于教材的统计没法做到更具体,更细致的分类,关于购买和出售教材,统计不够全面。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#defineSIZE2
structbook
{charnum[20];
charname[10];
charwriter;
charrepub;
intcount;
intmoney;
}jiaocai[SIZE];
intmenu();
voidreads();
voidsave();
voidlu();
voidchaxun();
voidadd();
voidsell();
voidque();
intmenu()
{
intn;
printf("教材管理系统");
printf("\n1教材录入");
printf("\n2教材查询");