宁波工程学院《C语言程序设计》课程设计报告图书信息管理系统设计.docx
《宁波工程学院《C语言程序设计》课程设计报告图书信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《宁波工程学院《C语言程序设计》课程设计报告图书信息管理系统设计.docx(25页珍藏版)》请在冰豆网上搜索。
宁波工程学院《C语言程序设计》课程设计报告图书信息管理系统设计
宁波工程学院
2013~2014学年第二学期
电信学院
C语言课程设计报告
题目:
图书信息管理系统设计
班级:
计科13-2
姓名:
傅天一
学号:
指导教师:
洪立
2014年6月
1、系统功能和结构
1.1系统设计目的
为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。
使用c语言编写了图书管理系统。
本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。
实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。
所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。
图书信息包括编号、书名、作者、出版社、出版日期、价格、在库状态等。
图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。
整个程序实现链表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。
这种系统设计的人很多,也有很多种系统。
总的感觉他们做的界面不够人性化,不够美观。
所以我在功能完善的前提下要做到界面更加美观和人性化。
整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。
进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。
在设计程序时,实现了程序的模块化、结构化。
在主函数中调用各种子函数,操作界面简单,易操作。
1.2系统功能分析
(系统提供主界面,各种功能操作以独立的函数为基础,运用对链表操作的技术来实现通讯录的管理,同时对操作结果在计算机中做永久保存。
)
整个系统可以分为信息录入、信息浏览、信息查询、信息排序、信息删除和信息修改的功能。
系统提供主界面,各种功能操作以独立的函数为基础,运用对链表操作的技术来实现图书信息的管理,同时对操作结果在计算机中做永久保存。
结束
1.3系统结构分析
程序总体结构图
选择0
程序层次图
开始
选择数字编号
01234
图书信息修改
图书信息查询
图书信息浏览
图书信息录入
退出图书管理系统
图书信息排序
图书信息保存
图书信息删除
图书信息增加
5678
程序流程图
开始
图书信息录入
0
1
图书信息浏览
0
2
图书信息查询
0
3
图书信息修改
0
4
图书信息增加
0
5
图书信息删除
0
6
图书信息排序
0
7
图书信息保存
0
8
退出图书管理系统
2、核心技术介绍
简单选择排序技术:
基本思想:
每一趟在后面n-i个待排记录中选取排序码最小的记录作为有序序列中的第i个记录。
排序过程:
1首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换。
2再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换。
3重复上述操作,共进行n-1趟排序后,排序结束
实现代码为:
voidbookpaixu(structbook*p,intn)
{
intj,i,k;
charc1;
structbooktemp;
printf("\n排序前图书的信息记录为:
\n");
printf("\n%9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
for(i=0;iprintf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
printf("\n按登录号排序(D),还是按作者名排序(A)?
");//选择排序的方式
c1=getchar();
getchar();
if(c1=='d'||c1=='D')//选择登录号由小到大排序
{
for(i=0;i{
k=i;
for(j=i+1;jif(strcmp(p[k].no,p[j].no)>0)//使用选择法进行排序
k=j;
if(k!
=i)//如果最小熟不熟默认的p[i],再交换,
{
temp=p[k];
p[k]=p[i];
p[i]=temp;
}
}
printf("\n排序后图书的信息记录为:
\n");//输出排序后图书的信息
printf("\n%9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
for(i=0;ino,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
}
elseif(c1=='a'||c1=='A')//选择作者名由小到大排序
{
for(i=0;i{
k=i;
for(j=i+1;jif(strcmp(p[k].author,p[j].author)>0)
k=j;
if(k!
=i)//使用选择法进行排序
{
temp=p[k];
p[k]=p[i];
p[i]=temp;
}
}
printf("\n排序后图书的信息记录为:
\n");
printf("\n%9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");//输出排序后图书的信息
for(i=0;iprintf("\n%10s%10s%10s%10s%10s%10s%10s\n",(p+i)->no,(p+i)->name,(p+i)->author,(p+i)->fenlei,(p+i)->putfrom,(p+i)->puttime,p[i].price);
}
else
printf("\n您输入的为非法字符!
\n");
}
3、函数功能介绍
stdlib.h是包含文件stdlib头文件即standardlibrary标准库头文件。
stdlib头文件里包含了C、C++语言的最常用的系统函数。
该文件包含了的C语言标准库函数的定义。
stdlib.h里面定义了五种类型、一些宏和通用工具函数。
类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等;常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。
系统使用的主要函数
voidmenu();
intbookluru(structbook*p,intn);(录入图书信息)
voidbookliulan(structbook*p,intn);(图书信息浏览)
voidbookchaxun(structbook*p,intn);(图书信息查询)
voidbookxiugai(structbook*p,intn);(图书信息修改)
intbookzengjia(structbook*p,intn);(图书信息增加)
intbookshanchu(structbook*p,intn);(图书信息删除)
voidbookpaixu(structbook*p,intn);(图书信息排序)
voidDLsearch(structbook*p,intn);(按登入号查询)
voidAUsearch(structbook*p,intn);(按作者名查询)
intbookzairu(structbook*p,intn);(图书信息文件储存)
voidgoout();(退出程序)
intbookbaocun(structbook*p,intn);(图书信息保存)
voidmain()
系统使用的主要数据结构
structbook{//定义一个book类结构体。
charno[L];
charname[L];
charauthor[L];
charfenlei[L];
charputtime[L];
charputfrom[L];
charprice[L];
}
4、设计体会及总结
这次课程设计让我掌握了许多的有用知识。
首先通过不断地学习和锻炼更加熟练地掌握应用软件MicrosoftVisualC++6.0了。
设计正确及合适的程序对于我们初学者来说是很大的难题,出现一丁点儿错误就得非很大的努力去修改,正式者一步步一点点的努力让我对C语言游乐更深的认识。
同时我掌握了解决问题的方法,这无论是对以后的学习、生活都有无比重要的价值
通过两周的课程设计,第一次我试着用所学的C语言知识去编制生活中常用的程序。
我们是小组选择编辑图书信息管理系统程序。
由于分工合作,我负责的是查询和排除模块。
起初对知识掌握的不够全面,在整个设计过程中遇到很多问题。
比如,编译出现错误,对于格式的掌握还不够透彻;在分界面运行完后,回不到系统的主界面,出现了死循环;在删除信息的板块中,删除了要保留的;运行时,屏幕显示的字之间无空格。
后来,通过小组互相帮组讨论,查阅书籍,改善了程序。
首先把原程序中的运用scanf()输入字符,改为getchar(),排除了接受回车键所出现的问题,能够顺利的返回主界面。
其次,printf()中字符串控制的长度拉宽。
最后还是能如期的完成此次实训。
当然,由于初次接触图书管理系统的设计,程序还是存在缺陷。
比如操作起来不够简便、连贯,同时也没考虑到实际问题。
如图书的价格要取大于等于零的数等。
总之,此次的课程设计还是对我们的专业很有帮助。
既巩固了我们的C语言知识,让我们对一部分函数的功能有了更加深刻的理解,把所学运用到实际,也使我们在系统设计领域有了新的拓展,开发我们的思维。
参考文献:
[1]黄明等编著《C语言课程设计》北京:
电子工业出版社
[2]郭翠英编著《C语言课程设计案例精编》北京:
中国水利水电出版社
[3]宁正元《数据结构(c语言)》南京:
东南大学出版社。
2000年6月第1版
[4]严蔚敏等《数据结构(c语言版)》北京:
清华大学出版社,1997年4月第1版
[5]谭浩强编著《C程序设计题解与上机指导(第3版)》北京:
清华大学出版社
[6]谭浩强编著《C程序设计(第3版)》北京:
清华大学出版社
[7]洪国胜等编著《C++Builder程序设计轻松上手》北京:
清华大学出版社
[8]宁正元《数据结构(c语言)》南京:
东南大学出版社。
2000年6月第1版
[9]严蔚敏等《数据结构(c语言版)》北京:
清华大学出版社,1997年4月第1版。
[10]明日科技编著《VisualC++程序开发范例宝典》北京:
人民邮电出版社。
[11]胡学钢等《数据结构算法设计指导》北京:
清华大学出版社,1999年第1版。
[12]刘大有《数据结构》(面向21世纪课程教材)北京:
高等教育出版社。
2001年6月第1版。
[13]胡学钢等《数据结构算法设计指导》北京:
清华大学出版社,1999年第1
版。
附录一:
系统使用方法:
一开始运行程序时,就会出现一个让你选择的界面,1.图书信息录入;2图书信息浏览;3图书信息查询;4图书信息修改;5图书信息增加;6图书信息删除;7图书信息排序;8图书信息保存;0退出图书管理系统;
当你输入1时(首次录入图书信息时),界面就会输出“添加前的图书信息记录有0个:
请输入要录入的图书书目x(0”,接着你就按要求输入你要录入的图书的信息就可以了。
当你输入2时,就会在出现一个你录入的图书信息,你可以继续选择继续或不,当选择继续时页面会跳转到3图书信息查询界面此时会提示你请按登陆号查询还是按作者名查询?
你可以按照提示进行查询操作。
当你输入4时,界面会提示你输入要修改的图书登陆号。
接下来按照提示信息一步步修改图书信息。
当你输入5时,界面会提示你添加图书信息按提示添加完后会显示添加前的图书信息记录和添加后的图书信息记录。
当输入6时,界面会提示输入删除图书的登陆号,删除后会显示图书删除后的记录。
当输入7时,界面会提示按登陆号排序或按作者名排序,排序后会显示排序后俄图书信息记录。
当输入8时,界面会提示“图书信息保存成功!
”当输入0时,将会退出图书管理系统。
Ps:
操作每一步结束都回提示是否继续操作(Y/N)。
源代码:
#include//头文件
#include
#include
#defineL30//宏定义
#defineQ200
structbook//定义一个book类结构体。
{
charno[L];
charname[L];
charauthor[L];
charfenlei[L];
charputtime[L];
charputfrom[L];
charprice[L];
};
//函数声明//函数声明
voidmenu();
intbookluru(structbook*p,intn);
voidbookliulan(structbook*p,intn);
voidbookchaxun(structbook*p,intn);
voidbookxiugai(structbook*p,intn);
intbookzhengjia(structbook*p,intn);
intbookshanchu(structbook*p,intn);
voidbookpaixu(structbook*p,intn);
voidDLsearch(structbook*p,intn);
voidAUsearch(structbook*p,intn);
intbookzairu(structbook*p,intn);
voidgoout();
intbookbaocun(structbook*p,intn);
voidmain()//主函数
{
charslect,yn;
structbookrecord[Q];//定义book类结构体变量存放图书信息共200条
inttotal=0,flag;
total=bookzairu(record,Q);//从文件读取图书信息,不超过200条
do
{
menu();//显示菜单
printf("请服务项编号:
");
slect=getchar();
getchar();
switch(slect)
{
case'0':
goout();break;
case'1':
total=bookluru(record,total);break;//函数调用
case'2':
bookliulan(record,total);break;
case'3':
bookchaxun(record,total);break;
case'4':
bookxiugai(record,total);break;
case'5':
total=bookzhengjia(record,total);break;
case'6':
total=bookshanchu(record,total);break;
case'7':
bookpaixu(record,total);break;
case'8':
flag=bookbaocun(record,total);
if("flag==1")
printf("图书信息保存成功!
\n");
else
printf("图书信息保存失败!
\n");
break;
default:
continue;
}
if(slect=='0')break;
printf("\n还要继续选择吗?
(Y/N)");//提示是否结束
do
{
yn=getchar();
getchar();
if(yn=='Y'||yn=='y')
break;
elseif(yn=='N'||yn=='n')
break;
else
printf("非法选项!
\n还要继续选择吗?
(Y/N)");
}
while
(1);
}
while(yn!
='N'&&yn!
='n');
}
//图书管理系统主菜单.
voidmenu()
{
system("cls");
system("color1e");
printf("\n\n");
printf("请选择服务项目编号(0--8)\n");
printf("******************************************************************\n");
printf("§********************欢迎使用图书信息管理系统******************§\n");
printf("§**************************************************************§\n");
printf("§§§§\n");
printf("§§§§\n");
printf("§§§§\n");
printf("§§*1.图书信息录入.§§\n");
printf("§§*2.图书信息浏览.§§\n");
printf("§§*3.图书信息查寻.§§\n");
printf("§§*4.图书信息修改.§§\n");
printf("§§*5.图书信息增加.§§\n");
printf("§§*6.图书信息删除.§§\n");
printf("§§*7.图书信息排序.§§\n");
printf("§§*8.图书信息保存.§§\n");
printf("§§*0.退出图书管理系统.§§\n");
printf("§§§§\n");
printf("§§§§\n");
printf("§§§§\n");
printf("******************************************************************\n");
printf("\n");
}
intbookluru(structbook*p,intn)//录入图书信息.
{
inti=0;
intm;
printf("\n添加前的图书信息记录共有%d个:
\n",n);//显示原有的图书信息
printf("\n%9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
i=0;
while((ino,"")!
=0))//输入的登录号不为空时,输出图书信息
{
printf("%9s%9s%9s%9s%9s%9s%9s\n",p->no,p->name,p->author,p->fenlei,p->puttime,p->putfrom,p->price);//信息输出
i++;
p++;
}
printf("\n请输入要录入的图书数目X(0",200-n);//设置图书信息存储最大值
scanf("%d",&m);
i=0;
while(i{
printf("\n");
printf("请输入第%d本图书的信息:
\n",i+1);
printf("登录号:
");
do
{
gets(p->no);//输入登录号,再输入其他信息
}
while(strcmp(p->no,"")==0);
printf("书名为:
");
gets(p->name);
printf("作者名为:
");
gets(p->author);
printf("分类号为:
");
gets(p->fenlei);
printf("出版时间为:
");
gets(p->puttime);
printf("出版单位为:
");
gets(p->putfrom);
printf("价格为:
");
gets(p->price);
p++;
i++;
}
returnm+n;
}
voidbookliulan(structbook*p,intn)//图书信息浏览.
{
inti=0;
printf("\n%9s%9s%9s%9s%9s%9s%9s\n","登录号","书名","作者名","分类号","出版单位","出版时间","价格");
while(i{
printf("%9s%9s%9s%9s%9s%9s%9s\n",p->no,p->name,p->author,p->fenlei,p->puttime,p->putfrom,p->price);
p++;
i++;
}
}
voidbookchaxun(structbook*p,intn)//图书信息查寻.
{
charc;
bookliulan(p,n);
do
{
printf("\n请问按登录号查询(D),还