C语言课程设计论文图书信息管理系统设计.doc
- 文档编号:1219403
- 上传时间:2023-04-30
- 格式:DOC
- 页数:21
- 大小:243.50KB
C语言课程设计论文图书信息管理系统设计.doc
《C语言课程设计论文图书信息管理系统设计.doc》由会员分享,可在线阅读,更多相关《C语言课程设计论文图书信息管理系统设计.doc(21页珍藏版)》请在冰点文库上搜索。
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;i if(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;i if(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||
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 论文 图书 信息管理 系统 设计