C语言图书信息管理系统实验报告.docx
《C语言图书信息管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《C语言图书信息管理系统实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
C语言图书信息管理系统实验报告
课程报告
课
程
名
称:
程序设计实践
专
业
班
级:
学
生
姓
名:
学
号:
任
课
教
师:
阎娟
学
期:
2011-2012学年第二学期
课程报告任务书
题目
图书信息管理系统
开发一个图书信息管理系统,图书信息包括:
图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。
使之能提供以下基本功能:
(1)图书信息录入功能(图书信息用文件保存)--输入
(2)图书信息浏览功能--输出
主要(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
内容①按书名查询②按作者名查询③按照价钱排序④按出版时间排序等等(4)图书信息的删除与修改
扩展功能:
可以按照自己的程度进行扩展。
比如
(1)简单的权限处理
(2)报表打
印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。
(4)
模糊查询(5)综合查询(6)统计功能比如统计处某一类别的图书信息或筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。
、提交材料应包括:
(1)系统源代码
(2)课程报告
、整个设计过程具体要求
(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善任务各个模块的调用关系;
要求
(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节
(函数名、参数、返回值等)
(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;
(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。
成绩
评定
报告撰写情况(30分)
系统完成情况(30分)
答辩情况(40分)
内容
20分
规范程度
5分
程序测试
5分
基本功能
20分
扩展功能
10分
自述情况
10分
答辩情况
30分
成绩评定教师:
1需求分析
随着当今社会发展,信息化水平逐步提高,对图书管理有了新的要求,因此,编写一个信息管理系统是十分必要的。
为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。
使用C语言编写图书管理系统。
本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。
实现了图书馆内管理的一般功能,包括查询、添加、删除、修改图书信息等。
所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。
图书信息包括编号、书名、作者、出版社、出版日期、价格、库存数量等。
图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。
整个程序实现链表操作,对图书信息的操作逐个进行,一个图书信息的更改不应影响其他的图书记录。
2概要设计
1,设计表示:
(1)、整个系统除了主函数外,另外还有各种功能子函数,利用无限次循环语句while()
和选择语句swithch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。
主要实现了图书的密码设置、录入、存储、查询、添加、删除、修改、排序等功能。
(2)voidMain_menu();这是一个指针函数,它主要实现了链表的创建,并且在创建过程中从文件读取信息到链表中,以用于后面其他函数的操作。
(3)voidmainFind()、voidDelete()、voidchange()、voidwrite()、structnode*read()、voidSorting_order()、#defineS123、#defineA123456这六个函数时整个图书管理系统的全部菜单函数。
voidDelete()、voidchange()、voidwrite()、structnode*read()、在此可以选择删除、修改、保存,读取图书,排序等操作。
voidmainFind();为查询系统的菜单,在此可以选择按书名、编号、作者等方式进行查询图书。
#defineS123、
#defineA123456分别是学生登陆和管理员登陆的密码。
(4)voidPrint();这个函数为图书的遍历,浏览所有的图书。
(5)voidFind_booknumber()、voidFind_bookname()、voidFind_author()、voidFind_press();这三个函数为查询图书信息函数,voidFind_booknumber();按书号查询、;voidFind_bookname()按书名查询、voidFind_author();按作者查询、voidFind_press();
按出版社查找。
(6)voidSorting_booknumber(),按书号排序。
voidSorting_price(),按价格排序。
voidSorting_publication_date(),按出版日期排序。
voidSorting_number(),按馆藏数量排序。
3.实现注释:
这个实用的小型图书管理程序程序以链表操作完成,并实现文件信息的录入和保存等功能。
实现了图书管理的基本功能,包括了图书的录入、存储、查询、添加、删除、修改、排序等功能。
查询时可按书名、编号、作者等方式查询,找到后输出这本书的所有信息。
在添加图书信息后,还增加了链表排序操作,并输出整个链表,方便用户检查信息。
系统中主要的数据结构就是图书的信息,包含编号、书名、作者、出版社、出版时间、价格、馆藏数量等,在处理过程中各项可以作为一本图书的不同属性来进行处理。
3详细设计
1-1定义变量
structnode{
intbook_number;//书号
charbook_name[25];//书名
charpress[50];//出版社
charauthor[20];//作者
intprice;//价格
charpublication_date[20];//出版日期
intnumber;//馆藏数量
structnode*next;
};
structnode*head=NULL;//在此定义一个全局变量head,其它函数就不需要再返回head;但这样做,程序中的函数的可用性就不是太高intTotal=0;//记录图书总数
1-2函数的定义
voidCreat();//录入图书信息
插入图书信息
structnode*Insert(structnode*p,structnode*head0);//
voidDelete();//删除图书信息
voidchange();//修改图书信息
voidwrite();//保存图书信息
structnode*read();//读取图书信息
voidamend(structnode*p);//辅助修改选项voidPrint();//遍历图书信息
voidPrint_by_one(structnode*p);//单项遍历
voidMain_menu();//登陆界面
voidAdministrator_menu0();//第一次进入系统的管理员菜单
voidAdministrator_menu1();//第n次进入系统的管理员菜单
voidStudent_menu();//学生菜单
voidmainFind();//查找菜单
voidFind();//精确查找图书
voidFind0();//模糊查找图书
intstr(chara[],charb[]);//模糊查找函数
voidFind_booknumber();//按书号查找
voidFind_booknumber0();//按书号模糊查找
voidFind_bookname();//按书名查找
voidFind_bookname0();//按书名模糊查找
voidFind_author();//按作者查找
voidFind_author0();//按作者模糊查找
voidFind_press();//按出版社查找
voidFind_press0();//按出版社模糊查找
char*transform(charstr[],intn);//将整数转化为字符存入字符数组返回
voidSorting_order();//排序
voidSorting_help(structnode*p1,structnode*p2);//辅助排序
voidSorting_booknumber();//按书号排序
voidSorting_price();//按价格排序
voidSorting_publication_date();//按出版日期排序
voidSorting_number();//按馆藏数量排序#defineS123//学生密码
#defineA123456//管理员密码
intT=0;//选择菜单
1-3信息的录入
voidCreat()//录入图书信息
{
structnode*tail,*p;
intbook_number;//书号
charchoice;
\n");
printf("该操作将清除书库中所有书目的信息!
printf("\n\t\t\t你想继续操作吗?
(Y/N)\n");while
(1)
{
printf("请选择:
");if(scanf("%c",&choice)){
getchar();
if(choice=='Y'||choice=='y'){system("cls");
break;
}
elseif(choice=='N'||choice=='n')
{system("cls");return;
}
else{
printf("请按要求输入!
\n");continue;
}
}else
printf("输入的不是字母,请按照要求重新输入!
\n");continue;
}
}
printf("\t\t\t提示:
请输入你要输入的数据,当书号为数字'0'时结束!
\n\n");printf("请输入书号:
");
scanf("%d",&book_number);
getchar();//吸收回车符,清空缓冲区,这样才能正常执行清屏操作while(book_number!
=0)
{
p=(structnode*)malloc(sizeof(structnode));
printf("请输入书名:
");scanf("%s",p->book_name);getchar();
printf("请输入作者:
");scanf("%s",p->author);getchar();
printf("请输入出版社:
");scanf("%s",p->press);getchar();
printf("请输入价格:
");scanf("%d",&p->price);getchar();
printf("请输入出版时间:
");scanf("%s",p->publication_date);getchar();
printf("请输入馆藏数量:
");
scanf("%d",&p->number);getchar();
putchar('\n');
p->book_number=book_number;
p->next=NULL;
if(head==NULL)
{
head=tail=p;
}
elsetail->next=p;tail=p;
}
Total++;
printf("请输入书号:
");
scanf("%d",&book_number);
}
printf("\t\t\t\t图书信息录入成功!
\n\n");
}
1-4按编号查询
voidFind_booknumber()//按书号查找
{
intbook_number;
structnode*p1,*p2;
printf("请输入你要查找的图书书号:
");
scanf("%d",&book_number);
printf("\t\t\n你要找的书为:
\n");
printf("\t\t\n");
printf("\t\t|书号|书名|作者|出版社|价格|出版时间|馆藏数量|\n");
printf("\t\t\n");
if(head->book_number==book_number){
Print_by_one(head);
}
p1=head;
p2=head->next;
while(p2!
=NULL)
{
if(p2->book_number==book_number)
Print_by_one(p2);
p1=p2;
p2=p2->next;
}
else
{
p1=p2;
p2=p2->next;
}
}
}
1-5按出版时间排序
voidSorting_publication_date()//按出版日期排序
{
structnode*p1,*p2,*p3,*p4,*p5,*p6,*p7;
intx=1;
for(p1=head;p1->next!
=NULL;p4=p1,p1=p1->next)
{
p3=p1;
for(p2=p1->next,p5=p7=p2;p2!
=NULL;p7=p2,p2=p2->next)
{
if(strcmp(p3->publication_date,p2->publication_date)>0)
{
p3=p2;
p5=p7;
}
}
if(p3!
=p1)
{
if(x&&p1==head)
{
p6=p1->next;
p1->next=p3->next;
p3->next=p6;
p5->next=p1;
head=p3;
p1=p3;
x=0;
}
else
{
p6=p1->next;
p1->next=p3->next;
p3->next=p6;
p4->next=p3;
p5->next=p1;
p1=p3;
}
}
}
}
4调试分析
问题1:
对于函数是否返回函数值,并怎样返回指针?
解答:
对于void开头的函数,没有返回值,在程序中可以直接调用。
有指针返回值的函数,直接返回指针名。
问题2:
在使用变量前,指针变量和一般变量如何初始化?
解答:
在使用一般变量前,忘记初始化,例如:
定义n,在下面程序循环中,没有替n
附初值,结果导致乱码。
指针变量*p,在不同情况下,p值要赋予NULL或head。
问题3:
指针之间的传递赋值如何辨别顺序?
最终返回值又是哪一个?
解答:
指针的传递赋值是从赋值号的右端赋值于赋值号的左端。
例如:
p=head,表示指针p指向head的位置。
最终的返回值应该是赋值号左端的指针。
5测试结果
登录系统
图书的查找
图书信息的录入
按价格排序
浏览图书信息
6课程心得总结
在这一个学期的实践中,通过编写这个图书管理系统,我体会到了c语言学习的实用性。
将理论和实践结合在一起,用先进的计算机工具方便人们的生活。
C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上,这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。
编写的程序从理论上来说并没有错,但以上机就问题不断。
甚至有些课本上的知识照搬不变,也不能得到正确的结果。
有时一个程序改了一遍又一遍,但就是不能成功,编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。
经反复的修改后,结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。
开发一套系统,最重要的是细心,并且思考要全面,结合实际,充分考虑到客户的需求和现实意义。
不管什么系统,只用运用到实际应用中,才具有先现实意义。
所以c语言程序的实用性很强,我们以后还要更加努力认真地学习编程语言。