C语言课程设计论文图书信息管理系统设计.doc
《C语言课程设计论文图书信息管理系统设计.doc》由会员分享,可在线阅读,更多相关《C语言课程设计论文图书信息管理系统设计.doc(21页珍藏版)》请在冰点文库上搜索。
![C语言课程设计论文图书信息管理系统设计.doc](https://file1.bingdoc.com/fileroot1/2023-4/30/1d224c82-ab60-45dc-82a6-84076551c190/1d224c82-ab60-45dc-82a6-84076551c1901.gif)
C语言程序设计报告--图书信息管理系统
中国地质大学
C语言课程设计
综合实习报告
题目:
图书信息管理系统
姓名:
班学号:
院系:
专业:
指导教师:
2008年7月
目录
(1)作者简介……………………………………………………………3
(2)报告摘要……………………………………………………………3
(3)报告主体……………………………………………………………3
3.1 报告要求………………………………………………………3
3.2 需求分析………………………………………………………3
3.3 总体设计………………………………………………………4
3.4 详细设计………………………………………………………4
3.4.1 主函数………………………………………………4
3.4.2 各功能模块设计……………………………………6
3.4.3 公共函数……………………………………………12
3.5 上机操作………………………………………………………15
3.5.1 数据源………………………………………………15
3.5.2 编译、连接和运行…………………………………15
3.5.3 结果…………………………………………………15
(4)实习总结…………………………………………………………20
(1)作者简介:
我叫王栋,是地球科学学院资源环境与城乡规划管理专业的二年级学生,有幸在大二上学期学习C程序设计这门课程.刚开始的时候对这门课没什么理解,觉得很难很复杂,而在后来慢慢深入的学习之后开始对其产生了兴趣。
看到自己亲手编写的程序能够发挥出作用,觉得能够运用自己写出来的东西做出成果很高兴。
同时也知道了做程序并不是想象之中的那么难的,只要我们能好好看懂课本上面的东西,并能在实践中加以练习就一定能够很好的掌握。
(2)报告摘要:
本论文设计了程序:
《C语言课程设计指导书》第12题——图书信息管理系统。
这个管理系统能对图书信息(包括登录号、书名、作者号、分类号、出版单位、出版时间、价格等)进行有效地信息录入、浏览、查询、插入、删除等操作,会给用户带来很大的便利,达到既节省时间又节省精力的目的。
(3)报告主体:
3.1题目要求
图书信息包括登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)图书信息录入功能(图书信息用文件保存)
(3)图书信息浏览功能
(4)图书信息查询功能
(5)图书信息删除与修改功能(可选项)
[提示]
建立图书信息结构体,结构体成员包括登录号、书名、作者名、分类号、出版单位、出版时间、价格。
3.2需求分析
根据题目要求,要求对图书信息进行输入、输出等操作;在程序中需要浏览图书的信息,应提供显示、查找、浏览、插入、修改等操作;另外还应提供键盘式选择菜单实现功能选择。
3.3总体设计
根据需求分析,可以对这个系统的设计分为以下几个模块:
图书信息管理系统
数据输入
数据浏览
数据查找
数据插入
退出
图1.3系统功能模块图
3.4详细设计
3.4.1主函数
主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
[流程图]:
显示一系列功能选项
根据n的值调用各功能模块函数
N
Y
输入n,判断n是否是0-5
图1.4.1主函数流程图
[程序]
/*****************主函数**********************/
main()
{
menu();
}/*****************menu函数********************/
voidmenu()
{
intn,w;
do
{
puts("\t\t**********************MENU************************\n\n");
puts("\t\t\t\t1.enter");
puts("\t\t\t\t2.browse");
puts("\t\t\t\t3.search");
puts("\t\t\t\t4.deleteormodify");
puts("\t\t\t\t5.add");
puts("\t\t\t\t6.exit");
puts("\n\n\t\t**************************************************\n");
printf("Choiceyournumber(1-5):
[]\b\b");
scanf("%d",&n);
if(n<1||n>6)
{
w=1;
getchar();
}
elsew=0;
}
while(w==1);
switch(n)
{
case1:
enter();break;
case2:
browse();break;
case3:
search();break;
case4:
deal();break;
case5:
add();break;
case6:
exit(0);
}
}
注:
menu函数能提供菜单方式选择功能,可以根据用户需要进入到所想要的操作模块中,此外把menu函数独立出来,可以方便随时对它进行调用,容易返回到系统界面。
3.4.2各功能模块设计
(1)输入模块
在这里主要运用结构体的形式来输入保存图书的各种信息,包括图书的登录号、书名、作者名、分类号等等,因为图书的数目众多,因此采用结构体数组的形式。
用结构体来存放图书信息:
/********************结构体*******************/
#defineN100
#include
#include
#include
structbook
{
chardlnum[10];
charname[50];
charwriter[20];
charflnum[10];
charpressname[50];
charpresstime[20];
charprice[10];
}books[N];books[N]中每个数组元素对应一本图书*/
其中可以根据宏定义#defineN随时对N的值进行调整,扩大信息的储存量。
[程序]:
/********************输入模块*******************/
voidenter()
{
inti,n;
voidmenu();
voidinput(intk);
voidsave(intk);
printf("Howmanybooks(0-%d)?
:
",N-1);
scanf("%d",&n);
printf("\nEnterdatanow\n\n");
for(i=0;i{
printf("\nInput%dthbookrecord.\n",i+1);
input(i);
}
if(i!
=0)save(n);
printf("Passanykeytoback\n");
getchar();
menu();
}
(2)浏览模块
[需求分析]该模块的功能是显示所有图书记录信息。
[流程图]
显示图书记录(10个一屏)
:
按任意键显示下一屏
按任意键返回主菜单
图1浏览模块流程图
[程序]:
/****************浏览(全部)模块***************/
voidbrowse()
{
intk;
voidmenu();
intload();
voidprintf_books(intn);
k=load();
printf_books(k);
printf("Passanykeytoback\n");
getchar();
menu();
}
(3)查找模块
/***************按书名查找模块***************/
[流程图]:
按书名查找模块
用户作出选择,输入一整型数值
1,2,还是3
修改
返回主菜单
继续查找
图2按书名查找模块流程图
voidsearch_by_name()
{
structbooks;
intn,i,k=0;
intload();
voidprintf_one(inti);
n=load();
printf("enterabookname:
");
scanf("%s",&s.name);
for(i=0;i if(strcmp(s.name,books[i].name)==0)
{
printf_one(i);
k=1;
}
if(k==0)printf("\nNotfoundthefile!
\n");
}
/***************按作者查找模块***************/
[流程图]
按作者名称查找模块
用户作出选择,输入一整型数值
1,2,还是3
修改
继续查找
返回主菜单
图3按图书名查找模块流程图
[程序]:
voidsearch_by_writer()
{
structbooks;
intn,i,k=0;
intload();
voidprintf_one(inti);
n=load();
printf("enterawriter'sname:
");
scanf("%s",&s.writer);
for(i=0;i if(strcmp(s.writer,books[i].writer)==0)
{
printf_one(i);
k=1;
}
if(k==0)printf("\nNotfoundthefile!
\n");
}
/***************按出版社查找模块***************/
按出版社查找模块
用户作出选择,输入一整型数值
1,2,还是3
返回主菜单
修改
继续查找
图4按出版社查找模块流程图
voidsearch_by_press()
{
structbooks;
intn,i,k=0;
intload();
voidprintf_one(inti);
n=load();
printf("enterapress:
");
scanf("%s",&s.pressname);
for(i=0;i if(strcmp(s.pressname,books[i].pressname)==0)
{
printf_one(i);
k=1;
}
if(k==0)printf("\nNotfoundthefile!
\n");
}
/***************按登录号查找模块***************/
按登录号查找模块
用户作出选择,输入一整型数值
1,2,还是3
修改
继续查找
返回主菜单
图5按登录号查找模块流程图
voidsearch_by_dlnum()
{
structbooks;
intn,i,k=0;
intload();
voidprintf_one(inti);
n=load();
printf("enteradlnum:
");
scanf("%s",&s.dlnum);
for(i=0;i if(strcmp(s.dlnum,books[i].dlnum)==0)
{
printf_one(i);
k=1;
}
if(k==0)printf("\nNotfoundthefile!
\n");
}
(4)插入模块
[需求分析]该模块的功能是插入图书纪录信息并且不能覆盖原有图书信息。
[流程图]
插入模块
调用加载函数
让用户输入要插入的图书信息个数
调用整条信息输入函数
用户作出选择,输入1or2
1还是2
1浏览全部
2返回主菜单
图6插入模块流程图
/*************************插入模块*********************/
add()
{
inti,n,m,k;
FILE*fp;
n=load();
printf("Howmanybookareyouwanttoadd(0-%d)?
:
",N-1-n);
scanf("%d",&m);
k=m+n;
for(i=n;i {
printf("\n Input%dthebooksrecord.\n",i-n+1);
input(i);
}
if((fp=fopen("book.txt","ab"))==NULL)
{
printf("cannotopenfile\n");
}
for(i=n;iif(fwrite(&book[i],sizeof(structbook),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
printf_back();
}
(5)修改功能
voidmodify(intm,intn)
{
intc,w1;
voidmenu();
do
{
puts("\nmodifyby=>\n\n1).dlnum2).name3).writer4).flnum\n5).pressname6).presstime7).price8).modifyall");
printf("Whichyouneed?
:
[]\b\b");
scanf("%d",&c);
if(c>8||c<1)
{
puts("\nChoiceerror!
Pleaseagain!
");
getchar();
}
}
while(c>8||c<1);
do
{
switch(c)
{
case1:
printf("dlnum:
");scanf("%s",books[m].dlnum);break;
case2:
printf("name:
");scanf("%s",books[m].name);break;
case3:
printf("writer:
");scanf("%s",books[m].writer);break;
case4:
printf("flnum:
");scanf("%s",books[m].flnum);break;
case5:
printf("pressname:
");scanf("%s",books[m].pressname);break;
case6:
printf("presstime:
");scanf("%s",books[m].presstime);break;
case7:
printf("price:
");scanf("%s",books[m].price);break;
case8:
printf("Enteranewinformation:
\n");input(m);
}
printf_face();
printf_one(m);
printf("\nAreyousure?
\n\n\t1).Sure2).noandremodify3).Backwithoutsaveinthistime[]\b\b");
scanf("%d",&w1);
} while(w1==2);
if(w1==1)save(n);
}
3.4.3公共函数
(1)保存函数save(intn)
voidsave(intn)
{
FILE*fp;
inti;
if((fp=fopen("book.txt","wb"))==NULL)
{
printf("\nCannotopenfile\n");
}
for(i=0;iif(fwrite(&books[i],sizeof(structbook),1,fp)!
=1)
printf("filewriteerro\n");
fclose(fp);
}
(2)加载函数load()
intload()
{
FILE*fp;
inti;
if((fp=fopen("book.txt","rb"))==NULL)
{
printf("\nCannotopenfile\n");
return0;
}
for(i=0;!
feof(fp);i++)
fread(&books[i],sizeof(structbook),1,fp);
fclose(fp);
return(i-1);
}
(3)图书信息输入函数no_input(inti,intn)
voidinput(inti)
{
printf_face();
scanf("%s%s%s%s%s%s%s",books[i].dlnum,books[i].name,books[i].writer,books[i].flnum,books[i].pressname,books[i].presstime,books[i].price);
}
(4)输入整一个记录函数input(inti)
[说明]:
形参i表示第i个图书记录。
voidinput(inti)
{ no_input(i,i);
printf("book-name:
");scanf("%s",book[i].name);
printf("writer-name:
");scanf("%s",book[i].writer);
printf("classify-num:
");scanf("%s",book[i].flnum);
printf("publish-unit:
");scanf("%s",book[i].pressname);
printf("publish-time:
");scanf("%s",book[i].presstime);
printf("price:
");scanf("%s",book[i].price);
}
(5)显示一个记录的函数printf_one(inti)
voidprintf_one(inti)
{
printf("%5s%5s%5s%5s%5s%5s%5s",books[i].dlnum,books[i].name,books[i].writer,books[i].flnum,books[i].pressname,books[i].presstime,books[i].price);
printf("\n\n");
}
(6)一个任务结束时的选择浏览还是返回的函数printf_back()
voidprintf_back()
{
intw;
do
{
printf("Whatdoyouwanttodo?
\n\n\t1).BACKTOMENU\t2)continue...:
[]\b\b");
scanf("%d",&w);
switch(w)
{
case1:
menu();break;
case2:
menu_search();break;
}
}while(w!
=1&&w!
=2);
}
(7)修改整条数据记录函数modify_data(inti,intn)
voidmodify(intm,intn)
{
intc,w1;
voidmenu();
do
{puts("\nmodifyby=>\n\n1).dlnum2).name3).writer4).flnum\n5).pressname6).presstime7).price8).modifyall");
printf("Whichyouneed?
:
[]\b\b");
scanf("%d",&c);
if(c>8||c<1)
{puts("\nChoiceerror!
Pleaseagain!
");
getchar();
}
}while(c>8||