C语言课程设计报告-图书借阅系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

沈阳航空工业学院
课程设计任务书
机械与汽车学院机械设计制造及其自动化专业5406108班学号200504061275
一、课程设计题目:图书借阅系统
二、课程设计工作自2007年7月9日起至2007年7月14日止
三、课程设计内容:
运用所学的C语言知识,编制和调试程序,具有如下功能:
(1)输入图书信息,并保存至文件book.dat中(图书信息应包括以下项目:图书编号、名称、出版社、作者、现有数量和总量)(2)查询功能可按编号、书名、作者、出版社进行查询,并将查询的详细信息输出
(3)借阅功能(4)增加删除记录功能(5)归还功能
注:学生借阅图书的信息保存在borrow.dat文件中,学生信息至少应包括学号,姓名,所借图书编号几项。

四、课程设计要求:
程序质量:
●贯彻结构化程序设计思想。

●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。

●用户界面中的菜单至少应包括“信息录入”、“信息查询”、“借阅”、
“增加图书”、“删除图书”、“归还图书”、“退出”7项。

●代码应适当缩进,并给出必要的注释,以增强程序的可读性。

课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:____________________
学生签名:____________________
目录
一、需求分析 (1)
二、程序流程图 (2)
三、核心技术的实现说明及相应程序段 (7)
四、个人总结 (12)
五、参考文献 (12)
六、源程序 (12)
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为九个模块,其中每一个模块对应一个函数,他们的功能分别是:录入书籍函数save( ),编号查询函数search_number( ),书名查询函数search_name( ),作者查询函数search_writer( ),出版社查询函数search_publisher ( ),借阅图书函数jieshu( ),增加图书函数add( ),删除图书函数del( )以及归还图书函huanshu( )。

这些函数的实现严格按照题目的要求。

1、录入书籍函数主要实现程序最初运行时图书数据的录入以及其后的运行中图书数据的追加功能;
2、编号查询函数实现的功能是按照编号对图书的数据进行查询;
3、书名查询函数实现的功能是按照书名对图书的数据进行查询;
4、作者查询函数实现的功能是按照作者对图书的数据进行查询;
5、出版社查询函数实现的功能是按照出版社对图书的数据进行查询;
6、借阅图书函数实现的是学生可以借阅图书馆现存的图书;
7、增加图书函数实现的是在现有图书中增加新的图书;
8、删除图书函数实现的是在现有图书中删除旧的图书;
9、归还图书函数实现图书的归还并在现有数量上得以保存。

除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。

在程序当中,将图书记录类型定义为结构体类型,添加以及追加的图书信息直接写入book.dat文件中,其他函数每次对图书记录的访问,其数据来源都是book.dat文件,这样做不但可以保证图书数据的一致性,而且可以对图书数据进行永久保存,保证每次运行程序都可以采用原来的数据。

二、程序流程图
1、程序总体结构图
图1程序总体结构图
2、具体功能框图
(1)录入信息函数
图2录入信息图(2)查询函数
图3查询函数图(3)借阅函数
图4借阅函数图(4)归还函数
图5归还函数图
三、核心技术的实现说明及相应程序段
本程序主要由九个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。

在这些函数当中,录入书籍函数、图书查询函数和删除图书函数是程序中较为核心的部分,下面分别进行说明。

1、录入书籍函数
录入书籍分为两种情况,其一是录入书籍的数量大于规定录入书籍的数量,则不能录入,需要重新录入数量。

其二就是录入书籍的数量小于规定录入书籍的数量,这时可以正常录入书籍。

具体的程序段如下:
void save()
{
FILE *fp;
int i;
for(i=0;i<SHU;i++)
{
strcpy(book[i].number,"");
}
printf("\n请输入录入书的数量 :");
scanf("%d",&num);
while(num>=SHU)
{
printf("\n不系统不能录入太多只能容纳%d 本请重新输入录入的数量 :",SHU);
scanf("%d",&num);
}
for(i=0;i<num;i++)
{
printf("\n请输入书的编号 :");
scanf("%s",book[i].number);
printf("\n请输入书的名字 :");
scanf("%s",book[i].name);
printf("\n请输入书的作者 :");
scanf("%s",book[i].writer);
printf("\n请输入书的出版社 :");
scanf("%s",book[i].publish);
printf("\n请输入书的数量 :");
scanf("%d",&book[i].num_all);
book[i].num_now=book[i].num_all;
}
for(i=0;i<SHU;i++)
{
if(strcmp(book[i].number,"")!=0)
printf("\n%s\t%s\t%s\t%s\t%d",book[i].number,book[i].name,book[i].writer,boo k[i].publish,book[i].num_all);
}
printf("\n");
}
2、图书查询函数
这段函数主要包括4个部分,可以分别按照图书的编号、书名、作者以及出版社来进行查询想要借阅的图书,这4段函数主要运用strcmp(比较两个字符串)函数。

具体程序段如下:
void search_number()
{
FILE *fp;
char number[10];
int i,j,flag;
printf("\n请输入书的编号 :");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].number,number)==0)
{
flag++;
if(flag==1)
{
printf("\n学生信息查询结果:");
}
printf("\n%s\t%s\t%s\t%s\t%d\t%d",book[i].number,book[i].name,book[i].write r,book[i].publish,book[i].num_all,book[i].num_now);
}
}
void search_name()
{
FILE *fp;
char number[10];
int i,j,flag;
printf("\n请输入书的名字 :");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].name,number)==0)
{
flag++;
if(flag==1)
{
printf("\n学生信息查询结果:");
}
printf("\n%s\t%s\t%s\t%s\t%d\t%d",book[i].number,book[i].name,book[i].write r,book[i].publish,book[i].num_all,book[i].num_now);
}
}
void search_publisher()
{
FILE *fp;
char number[10];
int i,j,flag;
printf("\n请输入书的出版社 :");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].publish,number)==0)
{
flag++;
if(flag==1)
{
printf("\n学生信息查询结果:");
}
printf("\n%s\t%s\t%s\t%s\t%d\t%d",book[i].number,book[i].name,book[i].write r,book[i].publish,book[i].num_all,book[i].num_now);
}
}
void search_writer()
{
FILE *fp;
char number[10];
int i,j,flag;
printf("\n请输入书的作者 :");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].writer,number)==0)
{
flag++;
if(flag==1)
{
printf("\n学生信息查询结果:");
}
printf("\n%s\t%s\t%s\t%s\t%d\t%d",book[i].number,book[i].name,book[i].write r,book[i].publish,book[i].num_all,book[i].num_now);
}
}
3、删除图书函数
这部分函数是通过输入一个编号将现存的这种图书从书库里全部删去,即是从原有图书现量中消失。

主要运用strcpy函数。

具体的程序段如下:
void del()
{
int i,k;
char number[20];
printf("\n请输入删除书的编号 :");
scanf("%s",number);
for(i=0;i<num;i++)
{
if(strcmp(book[i].number,number)==0)
{
k=i;
strcpy(book[i].number,"");
strcpy(book[i].name,"");
strcpy(book[i].publish,"");
strcpy(book[i].writer,"");
book[i].num_all=0;
book[i].num_now=0;
}
}
for(i=k;i<num;i++)
{
strcpy(book[i].number,book[i+1].number);
strcpy(book[i].name,book[i+1].name);
strcpy(book[i].publish,book[i+1].publish);
strcpy(book[i].writer,book[i+1].writer);
book[i].num_all=book[i+1].num_all;
book[i].num_now=book[i+1].num_now;
}
num--;
for(i=0;i<SHU;i++)
{
if(strcmp(book[i].number,"")!=0)
printf("\n%s\t%s\t%s\t%s\t%d",book[i].number,book[i].name,book[i].writer,boo k[i].publish,book[i].num_all);
}
}
四、个人总结
通过这次C语言的课程设计,让我在课本的基础上,更深一步的掌握了C语言程序的编写与分析,并在发现错误之后,能够通过查找资料和请教同学将这些错误改正。

可以说过程是艰苦的,但让我学到了关于C语言程序编写的初步知识和本领,也为我将来的学习甚至工作都产生了深远的影响,让我体验了实践的环节对于我们大学生是多么重要,它也让我懂得学以自用的深刻含义,对待工作和学习要以一棵严谨,进取的心来面对.
五、参考文献
1 谭浩强.C程序设计.北京:清华大学出版社,2005
2 刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006
六、源程序
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#define SHU 1000
struct book/*定义书的结构体/*
{
char number[20]; /*字符型变量/*
char name[20];
char writer[20];
char publish[20];
int num_now;
int num_all;
} book[SHU];
int num;
void save()/*录入图书/*
{
FILE *fp;
int i;
for(i=0;i<SHU;i++)
{
strcpy(book[i].number,""); /*将“""”复制到“book[i].number”/*
}
printf("\n请输入录入书的数量:");
scanf("%d",&num);
while(num>=SHU)
{
printf("\n不系统不能录入太多只能容纳%d 本请重新输入录入的数量:",SHU);
scanf("%d",&num);
}
for(i=0;i<num;i++)
{
printf("\n请输入书的编号:");
scanf("%s",book[i].number);
printf("\n请输入书的名字:");
scanf("%s",book[i].name);
printf("\n请输入书的作者:");
scanf("%s",book[i].writer);
printf("\n请输入书的出版社:");
scanf("%s",book[i].publish);
printf("\n请输入书的数量:");
scanf("%d",&book[i].num_all);
book[i].num_now=book[i].num_all;
}
for(i=0;i<SHU;i++)
{
if(strcmp(book[i].number,"")!=0)
printf("\n%s\t%s\t%s\t%s\t%d",book[i].number,book[i].name,book[i].write r,book[i].publish,book[i].num_all);
}
printf("\n");
}
void search_number()/*编号查询/*
{
FILE *fp;
char number[10];
int i,j,flag;
printf("\n请输入书的编号:");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].number,number)==0) /*比较两个字符串/*
{
flag++;
if(flag==1)
{
printf("\n学生信息查询结果:");
}
printf("\n%s\t%s\t%s\t%s\t%d\t%d",book[i].number,book[i].name,book[i]. writer,book[i].publish,book[i].num_all,book[i].num_now);
}
}
void search_name()/*名字查询/*
{
FILE *fp;
char number[10];
int i,j,flag;
printf("\n请输入书的名字:");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].name,number)==0)
{
flag++;
if(flag==1)
{
printf("\n学生信息查询结果:");
}
printf("\n%s\t%s\t%s\t%s\t%d\t%d",book[i].number,book[i].name,book[i]. writer,book[i].publish,book[i].num_all,book[i].num_now);
}
}
void search_publisher()/*出版社查询/*
{
FILE *fp;
char number[10];
int i,j,flag;
printf("\n请输入书的出版社:");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].publish,number)==0)
{
flag++;
if(flag==1)
{
printf("\n学生信息查询结果:");
}
printf("\n%s\t%s\t%s\t%s\t%d\t%d",book[i].number,book[i].name,book[i]. writer,book[i].publish,book[i].num_all,book[i].num_now);
}
}
void search_writer()/*作者查询/*
{
FILE *fp;
char number[10];
int i,j,flag;
printf("\n请输入书的作者:");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].writer,number)==0)
{
flag++;
if(flag==1)
{
printf("\n学生信息查询结果:");
}
printf("\n%s\t%s\t%s\t%s\t%d\t%d",book[i].number,book[i].name,book[i]. writer,book[i].publish,book[i].num_all,book[i].num_now);
}
}
void jieshu()/*借阅图书/*
{
int i,j,flag,a,k;
char number[10];
printf("\n请输入借书的数量:");
scanf("%d",&a);
for(k=0;k<a;k++)
{
printf("\n请输入书的编号:");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].number,number)==0)
{
flag++;
book[i].num_now--;
}
if(0==flag)
{
printf("\n没有这本书");
}
}
}
void huanshu()/*归还图书/*
{
int i,j,flag,a,k;
char number[10];
printf("\n请输入还书的数量:");
scanf("%d",&a);
for(k=0;k<a;k++)
{
printf("\n请输入书的编号:");
scanf("%s",number);
flag=0;
for(i=0;i<SHU;i++)
if(strcmp(book[i].number,number)==0)
{
flag++;
book[i].num_now++;
}
if(0==flag)
{
printf("\n没有这本书");
}
}
}
void add()
{
int i;
if(num>=SHU)
{
printf("\n书库信息已满、请改变书的总量"); }
printf("\n请输入书的编号:");
scanf("%s",book[num].number);
printf("\n请输入书的名字:");
scanf("%s",book[num].name);
printf("\n请输入书的作者:");
scanf("%s",book[num].writer);
printf("\n请输入书的出版社:");
scanf("%s",book[num].publish);
printf("\n请输入书的数量:");
scanf("%d",&book[num].num_all);
book[num].num_now=book[num].num_all;
num++;
for(i=0;i<SHU;i++)
{
if(strcmp(book[i].number,"")!=0)
printf("\n%s\t%s\t%s\t%s\t%d",book[i].number,book[i].name,book[i].write r,book[i].publish,book[i].num_all);
}
}
void del()
{
int i,k;
char number[20];
printf("\n请输入删除书的编号:");
scanf("%s",number);
for(i=0;i<num;i++)
{
if(strcmp(book[i].number,number)==0)
{
k=i;
strcpy(book[i].number,"");
strcpy(book[i].name,"");
strcpy(book[i].publish,"");
strcpy(book[i].writer,"");
book[i].num_all=0;
book[i].num_now=0;
}
}
for(i=k;i<num;i++)
{
strcpy(book[i].number,book[i+1].number);
strcpy(book[i].name,book[i+1].name);
strcpy(book[i].publish,book[i+1].publish);
strcpy(book[i].writer,book[i+1].writer);
book[i].num_all=book[i+1].num_all;
book[i].num_now=book[i+1].num_now;
}
num--;
for(i=0;i<SHU;i++)
{
if(strcmp(book[i].number,"")!=0)
printf("\n%s\t%s\t%s\t%s\t%d",book[i].number,book[i].name,book[i].write r,book[i].publish,book[i].num_all);
}
}
void menu()
{
int i,j;
for(i=0;;i++)
{
printf("\n 0 退出");
printf("\n 1 编号查询");
printf("\n 2 书名查询");
printf("\n 3 作者查询");
printf("\n 4 出版社查询");
printf("\n 5 请选择");
scanf("%d",&j);
switch(j)
{
case 0: exit(0);
case 1: search_number(); break; case 2: search_name(); break; case 3: search_writer(); break; case 4: search_publisher();break; }
}
}
void main()
{
int i,j,k,t,m,mm;
for(t=1;;t++)
{
printf("1 录入书籍\n\r");
printf("2 编号查询\n\r");
printf("3 书名查询\n\r");
printf("4 作者查询\n\r");
printf("5 出版社查询\n\r");
printf("6 借阅图书\n\r");
printf("7 增加图书\n\r");
printf("8 删除图书\n\r");
printf("9 归还图书\n");
printf("10 退出\n\r");
scanf("%d",&mm);
switch(mm)
{
case 1: save(); break;
case 2: search_number();break;
case 3: search_name();break;
case 4: search_publisher();break;
case 5: search_writer();break;
case 6: jieshu(); break;
case 7: add(); break;
case 8: del(); break;
case 9: huanshu(); break;
case 10: exit(0);break;
default: printf("输入错误\n");
}
}
}。

相关文档
最新文档