c语言课程设计图书信息管理.docx
《c语言课程设计图书信息管理.docx》由会员分享,可在线阅读,更多相关《c语言课程设计图书信息管理.docx(16页珍藏版)》请在冰豆网上搜索。
c语言课程设计图书信息管理
中国地质大学
本科生课程论文封面
课程名称c语言课程设计
教师姓名
本科生姓名
本科生学号
本科生专业
所在院系
类别:
本科生
日期:
2012年9月5日
课程设计评语
对课程论文的评语:
平时成绩:
课程论文成绩:
总成绩:
评阅人签名:
注:
1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
1.课程论文题目
图书信息管理系统
2.程序设计思路
1:
本系统包括两个抽象数据:
图书库链表和借书者链表。
(1)定义图书链表类型为:
ADTAbook
数据对象D={bi|bi=Booktype,i=1……nn>=o}
数据关系R={|(bi-1,bi)=D,i=2……n}
基本操作:
Insert(n)
操作结果:
建立一个长度为n的链表或插入n个新结点。
Del(n)
操作结果:
从已建立链表中删除n个结点。
Print()
操作结果:
输出已建立链表。
Search()
操作结果:
按要求查找并输出已建立链表中的结点。
Borrow()
操作结果:
按要求改变已建立链表中某一结点的相关信息。
return()
操作结果:
按要求改变已建立链表中某一结点的相关信息。
(2)定义图书链表类型为:
ADTAborrow
数据对象D={ri|ri|borrowtype,i=1……nn>=1}
数据关系R={|ri-1,ri=D,i=2……n}
基本操作:
creat(n)
操作结果:
建立一个长度为n的链表。
Insert(n)
操作结果:
插入n个新结点到已建立链表中。
Remove(n)
操作结果:
从已建立链表中删除n个结点。
3.功能模块图
各模块的详细流程图
《添加数据函数流程图》
N
Y
《浏览数据函数流程图》《查找函数流程图》
调用函数load(),计算记录个数n
开始显示记录
判断记录是否全部显示?
返回主函数(mian)
用户是否继续浏览
开始
输入要查找纪录的条件
与已知纪录中对应相比较是
是否与所有的都比较完
是否找到要找的纪录
显示find
显示notfind
返回主函数(main)
是否返回
开始
输入要修改纪录的名称
选择要修改纪录的相应的项
在已知的纪录中根据输入的相应的纪录
输入纪录相应项的替代内容
更改
保存
NY
YY
NN
N
Y
Y
《修改函数流程图》
Y
N
Y
N
《删除函数流程图》
Y
N
Y
N
Y
N
Y
4.数据结构设计
程序采用菜单形式,共包括五个模块
(1)添加模块
(2)浏览模块
(3)查找模块
(4)删除模块
(5)修改模块
5.算法设计
1在最初进行模块划分是未将借书人信息管理作为一个单独摸块,致使调试时无法明确管理结借书者信息,造成书目链表混乱,重新分配后解决了这个问题
2原先想进行中文书名及人命输入输出,但由于未能找到相关信息资料,无法完成该操作,最终放弃该设计
3最初我们曾规定了一些变量以及结构体,但随着设计的进行深化,最初的结构体及变量无法满足需要,致使调试时出现不少混乱,后来我们重新规定了一下,解决了这些问题;
4程序的串联我们采取了循环控制与选择结构相结合的结构很好地解决了系统长时间运行及循环执行命令的问题,使演示系统现实化。
6.程序代码
#include
#include
#include
#defineN10\定义结构体\
structlibrary
{
intnum;
charbook_name[30];
charwriter[30];
charsort_num[3];
charpub_company[30];
charpub_time[30];
charprise[30];
};
typedefstructlibraryLIB;
LIBlib[N];
FILE*fp;\文件指针\
intall=0;
intmenu(void);
voidinput(void);
voidoutput(void);
voidsave(void);
voiddel(void);
voidsearch(void);
voidxiugai(void);
main()
{
for(;;)
{
switch(menu())\用switch选择结构做出主菜单的基本功能\
{
case1:
input();break;
case2:
output();break;
case3:
save();break;
case4:
search();break;
case5:
xiugai();break;
case6:
del();break;
case0:
exit
(1);break;
}
}
}
intmenu(void)
{
charm[3];
intn;
system("color2");
\\\\设计屏幕输出效果\\\\
printf("\t\tC语言课程设计\n");
printf("\t\t052102班王先勇374\n");
printf("\t\t〓〓〓欢迎来到图书信息管理系统〓〓〓\n");
printf("\t\t※※※※※1:
输入※※※※※\n");
printf("\t\t※※※※※2:
输出※※※※※\n");
printf("\t\t※※※※※3:
保存※※※※※\n");
printf("\t\t※※※※※4:
查找※※※※※\n");
printf("\t\t※※※※※5:
修改※※※※※\n");
printf("\t\t※※※※※6:
删除※※※※※\n");
printf("\t\t※※※※※0:
退出※※※※※\n");
printf("\t\t请选择一项操作(0-6):
\n");
scanf("%s",m);
n=atoi(m);
return(n);
}
\\\\输入模块\\\\
voidinput(void)\定义无返回值的输入函数\
{
inti;
charm[3];
for(i=all;i{
all++;
printf("请输入相关信息:
\n");
printf("\t\t登陆号:
\n");
scanf("%d",&lib[i].num);
printf("\t\t书名:
\n");
scanf("%s",lib[i].book_name);
printf("\t\t作者名:
\n");
scanf("%s",lib[i].writer);
printf("\t\t分类号:
\n");
scanf("%s",lib[i].sort_num);
printf("\t\t出版单位:
\n");
scanf("%s",lib[i].pub_company);
printf("\t\t出版时间:
\n");
scanf("%s",lib[i].pub_time);
printf("\t\t价格:
\n");
scanf("%s",lib[i].prise);
a:
printf("\t\t是/否继续此操作?
\n");
printf("\t\t1:
是\n");
printf("\t\t2:
否\n");
scanf("%s",m);
if(atoi(m)==1)
continue;
elseif(atoi(m)==2)
return;
else
{
printf("\t\t出现错误!
\n");
gotoa;
}
}
}解释goto算法:
gotoa指返回程序中有a标记的地方
\\\\输出即浏览模块\\\\
voidoutput(void)\定义无返回值的输出浏览函数\
{
inti;
for(i=0;i{
printf("登陆号:
\t\t%d\n",lib[i].num);
printf("%s\t\t书名%s\t\t作者名%s分类号\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("%s\t\t出版单位%s\t\t出版时间%s价格\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
}
}
\\\\保存模块\\\\
voidsave(void)\定义无返回值的保存函数\
{
inti;
if((fp=fopen("file.c","wb"))==NULL)
{
printf("不能打开此文件");
exit
(1);
}
for(i=0;i{
if(fwrite(&lib[i],sizeof(LIB),1,fp)!
=1)
{
printf("cannotwrite!
");
exit
(1);
}
}
fclose(fp);
}
\\\\查询模块\\\\
voidsearch(void)\定义无返回值的查询函数\
{
inti,flag;
charm[3];
charname[30];
printf("\t\t请选择您要查询的方式:
\n");
printf("\t\t1:
书名!
\n");
printf("\t\t2:
作者!
\n");
scanf("%s",m);
i=atoi(m);
switch(i)
{
case1:
{
printf("\t\t请输入书名:
\n");
scanf("%s",name);
flag=0;
for(i=0;i{
if(strcmp(name,lib[i].book_name)==0)
{
printf("登陆号:
\t\t%d\n",lib[i].num);
printf("书名:
%s\t\t作者名:
%s\t\t分类号:
%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("出版单位:
%s\t\t出版时间:
%s\t\t价格:
%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\t没有找到此书\n");
}
case2:
{
printf("\t\t请输入作者名:
\n");
scanf("%s",name);
flag=0;
for(i=0;i{
if(strcmp(name,lib[i].writer)==0)
{
printf("登陆号:
\t\t%d\n",lib[i].num);
printf("书名:
%s\t\t作者名:
%s\t\t分类号:
%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("出版单位:
%s\t\t出版时间:
%s\t\t价格:
%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\t不能找到此作者!
\n");
}
}
}
\\\\修改模块\\\\
voidxiugai(void)\定义无返回值的修改函数\
{
inti,flag;
charname[30],n[3];
printf("\t\t请选择要修改的书名:
\n");
scanf("%s",name);
flag=0;
for(i=0;i{
if(strcmp(name,lib[i].book_name)==0)
{
printf("登陆号:
\t\t%d\n",lib[i].num);
printf("书名:
%s\t\t作者名:
%s\t\t分类号:
%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("出版单位:
%s\t\t出版时间:
%s\t\t价格:
%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
printf("\t\t请输入要修改的信息:
\n");
printf("\t\t登陆号:
\n");
scanf("%d",&lib[i].num);
printf("\t\t书名:
\n");
scanf("%s",lib[i].book_name);
printf("\t\t作者名:
\n");
scanf("%s",lib[i].writer);
printf("\t\t分类号:
\n");
scanf("%s",lib[i].sort_num);
printf("\t\t出版单位:
\n");
scanf("%s",lib[i].pub_company);
printf("\t\t出版时间:
\n");
scanf("%s",lib[i].pub_time);
printf("\t\t价格:
\n");
scanf("%s",lib[i].prise);
flag=1;break;
}
}
if(flag==0)
printf("\t\t没有找到要修改的这本书!
\n");
}
\\\\删除模块\\\\
voiddel(void)\定义无返回值的删除函数\
{
inti,j,flag;
charname[30];
printf("\t\t请输入要删除的书名:
\n");
scanf("%s",name);
flag=0;
for(i=0;i{
if(strcmp(name,lib[i].book_name)==0)
{
printf("登陆号:
\t\t%d\n",lib[i].num);
printf("书名:
%s\t\t作者名:
%s\t\t分类号:
%s\n",lib[i].book_name,lib[i].writer,lib[i].sort_num);
printf("出版单位:
%s\t\t出版时间:
%s\t\t价格:
%s\n",lib[i].pub_company,lib[i].pub_time,lib[i].prise);
for(j=N;j>i;j--)
{
lib[j-1].num=lib[j].num;
strcpy(lib[j-1].book_name,lib[j].book_name);
strcpy(lib[j-1].writer,lib[j].writer);
strcpy(lib[j-1].sort_num,lib[j].sort_num);
strcpy(lib[j-1].pub_company,lib[j].pub_company);
strcpy(lib[j-1].pub_time,lib[j].pub_time);
strcpy(lib[j-1].prise,lib[j].prise);
flag=1;
printf("\t\t删除成功!
\n");
break;
}
}
}
if(flag==0)
printf("\t\t没有此书信息!
\n");
7.程序运行结果
1主菜单
2.输入模块
3.浏览模块
4.查找模块
5.修改模块
6.删除模块
8.编程中遇到的困难及解决方法
课堂上要讲授许多关于C语言的语法规则,听起来比较枯燥,不易记忆。
而通过多次上机练习,对于语法知识就有了更深的认识,自然而然地掌握C语言的语法规定。
学习C语言不能停留在书本,而是要利用学到的知识编写C语言程序,解决实际问题。
通过对自己编写程序的调试,发现问题,解决问题,逐步提高自己对C语言的理解和程序开发能力。
9.总结心得及良好建议
通过这次为期一周的C语言上机实习,我明白C语言这门课程光仅仅是听课是远远不够的,上机训练也不容忽视。
通过上机训练,才能够明白自己知识的不足,更加深刻的理解C语言中的知识点,从而找到知识漏点,还对以前认为自己已懂了的知识点也理解更加深刻。
当遇到了自己当时不知如何编写的C语言题目时,通过自己的学习和同学的交流,得以顺利的编写,使我增加了对C语言的兴趣和学好C语言的信心。
一个C语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境才能进行。
所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。
通过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。
同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
10.致谢
在这次实习的过程我中遇到了一些难题,老师给予了我细心的指导,帮助我解决了很多程序上的问题,再次向老师的帮助表示衷心的感谢!