基于C语言数据结构图书管理系统.docx
《基于C语言数据结构图书管理系统.docx》由会员分享,可在线阅读,更多相关《基于C语言数据结构图书管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
基于基于C语言数据结构图书管理系统语言数据结构图书管理系统计算机科学与技术专业课程设计任务书学生姓名专业班级学号题目个人图书管理系统课题性质A工程设计课题来源D自拟课题指导教师同组姓名无主要内容综合应用所学知识,设计完成个人图书管理系统。
本系统拟实现以下功能:
1.用户从键盘录入图书信息2.以文件保存在磁盘中并读取3可根据图书的每一项信息查询该图书的所有信息4.可根据图书的编号删除无用的图书5.可按照图书的每一项信息对图书进行排序6.统计每类图书的总数7.按照图书的输入顺序输出全部图书的信息系统要求采用vc工具进行开发实现。
任务要求综合运用和融化所学理论知识,提高分析和解决实际问题的能力,使用C语言设计一个个人图书管理系统。
完成课程设计报告,报告中对关键部分给出图表说明。
要求格式规范,工作量饱满。
参考文献C程序设计(第三版)谭浩强数据结构(严蔚敏)高质量的编程指南数据结构与算法(科学出版社)审查意见指导教师签字:
教研室主任签字:
2009年6月19日1需求分析1本演示程序中,用户从键盘输入图书信息,图书编号,名称,类别,作者,出版社,价格,购买日期。
2演示程序以用户和计算机的对话方式执行,即在运行窗口出现提示信息,有用户从键盘录入,显示结果会在显示之后。
3程序执行的命令包括:
查询图书信息,删除图书信息,对所有图书进行排序,统计各种类的图书数目。
显示所有图书信息4测试数据:
2001离散数学X左孝凌上海科学出版社18.002009/6/82002数据结构B严蔚敏清华大学出版社30.002010/4/12程序总体设计
(1)数据结构依据输入的数据信息和数据格式,连表结点用结构体实现。
采用链表方式存储,typedef:
typedefstruct/定义表示日期数据的结构体数据类型intmonth;intday;intyear;DATE;typedefstructBooktype/定义表示图书信息的结构体数据类型charid10;/*图书编号*/charname40;/*图书名称*/chartype;/*图书类型*/charwriter10;/*图书作者*/charpublisher20;/*图书出版社*/floatprice;/*图书价格*/DATEbuydate;/*图书购买日期*/Btype;typedefstructBooklist/*定义表示所有图书信息的链表数据类型*/Btype*bk;structBooklist*next;Blist;
(2)模块划分主菜单1录入图书信息2查询图书信息3删除图书信息4图书信息排序5显示图书信息6统计图书数目7退出图书系统程序函数清单:
Voidmaininterface();/*主界面函数*/voidBookinput();/*输入图书信息函数*/voidBookdisplay();/*显示所有图书信息函数*/voidBooksort();/*对图书分类排序函数*/voidBooksearch();/*查找图书详细信息函数*/voidBookdelete();/*删除图书信息函数*/voidBookstat();/*统计全部图书数目*/(3)程序总体框架main()个人图书管理系统菜单代码12查询图书信息3删除图书信息4图书信息排序5显示图书信息6统计图书数目7退出图书系统录入图书信息3功能块函数与调试录入图书信息函数1函数名称:
voidBookinput();函数功能:
从键盘祸从文件读入图书信息。
2程序清单intn=0;Btypebk;FILE*fp;Loop:
printf(nnnttt图书信息录入n);printf(ntt1:
图书编号:
);scanf(%s,bk.id);printf(ntt2:
图书名称:
);scanf(%s,bk.name);printf(ntt3:
图书类别(X:
学习B:
编程Y:
娱乐G:
工具Q:
其它):
);scanf(%s,&bk.type);printf(ntt4:
图书作者:
);scanf(%s,bk.writer);printf(ntt5:
图书出版社:
);scanf(%s,bk.publisher);printf(ntt6:
图书价格(元):
);scanf(%f,&bk.price);printf(ntt7:
购买日期(mm/dd/yyyy):
);scanf(%d/%d/%d,&bk.buydate.month,&bk.buydate.day,&bk.buydate.year);printf(ntt1:
保存并继续输入n);printf(ntt2:
保存并返回n);printf(ntt3:
取消并重新输入n);printf(ntt4:
返回主菜单n);printf(tt请输入选项:
);scanf(%d,&n);if(n=1)if(fp=fopen(Book.lib,ab)=NULL)fp=fopen(Book.lib,wb+);fwrite(&bk,sizeof(Btype),1,fp);gotoLoop;if(n=2)if(fp=fopen(Book.lib,ab)=NULL)fp=fopen(Book.lib,wb+);fwrite(&bk,sizeof(Btype),1,fp);fclose(fp);if(n=3)gotoLoop;3运行结果查询图书信息函数1.函数原型,功能和形参说明函数原型:
voidBooksearch();函数功能:
查询图书信息;2.程序清单:
Btypebk,ts;FILE*fp;inti;intj=0;if(fp=fopen(Book.lib,rb+)=NULL)printf(找不到文件Book.lib!
n);exit(0);rewind(fp);printf(n请选择按哪个参数查询(1:
编号2:
名称3:
作者4:
出版社5:
价格):
);scanf(%d,&i);if(i=1)printf(请输入您要查询的图书的编号n);scanf(%s,ts.id);while(!
feof(fp)if(fread(&bk,sizeof(Btype),1,fp)if(strcmp(ts.id,bk.id)=0)printf(n%4s%-20s%4s%-8s%-20s%-8s%8s,编号,图书名称,类别,作者,出版社,价格,购买日期);printf(n%4s%-18s%-3c%-8s%-18s%8.2f%2d/%d/%d,bk.id,bk.name,bk.type,bk.writer,bk.publisher,bk.price,bk.buydate.month,bk.buydate.day,bk.buydate.year);j+;fclose(fp);if(j=0)printf(n找不到您要查询的图书信息!
n);if(i=2)printf(请输入您要查询的图书的名称n);scanf(%s,ts.name);while(!
feof(fp)if(fread(&bk,sizeof(Btype),1,fp)if(strcmp(ts.name,bk.name)=0)printf(n%4s%-20s%4s%-8s%-20s%-8s%8s,编号,图书名称,类别,作者,出版社,价格,购买日期);printf(n%4s%-18s%-3c%-8s%-18s%8.2f%2d/%d/%d,bk.id,bk.name,bk.type,bk.writer,bk.publisher,bk.price,bk.buydate.month,bk.buydate.day,bk.buydate.year);j+;fclose(fp);if(j=0)printf(n找不到您要查询的图书信息!
n);if(i=3)printf(请输入您要查询的图书的作者n);scanf(%s,ts.writer);while(!
feof(fp)if(fread(&bk,sizeof(Btype),1,fp)if(strcmp(ts.writer,bk.writer)=0)printf(n%4s%-20s%4s%-8s%-20s%-8s%8s,编号,图书名称,类别,作者,出版社,价格,购买日期);printf(n%4s%-18s%-3c%-8s%-18s%8.2f%2d/%d/%d,bk.id,bk.name,bk.type,bk.writer,bk.publisher,bk.price,bk.buydate.month,bk.buydate.day,bk.buydate.year);j+;fclose(fp);if(j=0)printf(n找不到您要查询的图书信息!
n);if(i=4)printf(请输入您要查询的图书的出版社n);scanf(%s,ts.publisher);while(!
feof(fp)if(fread(&bk,sizeof(Btype),1,fp)if(strcmp(ts.publisher,bk.publisher)=0)printf(n%4s%-20s%4s%-8s%-20s%-8s%8s,编号,图书名称,类别,作者,出版社,价格,购买日期);printf(n%4s%-18s%-3c%-8s%-18s%8.2f%2d/%d/%d,bk.id,bk.name,bk.type,bk.writer,bk.publisher,bk.price,bk.buydate.month,bk.buydate.day,bk.buydate.year);j+;fclose(fp);if(j=0)printf(n找不到您要查询的图书信息!
n);if(i=5)printf(请输入您要查询的图书的价格n);scanf(%f,&ts.price);while(!
feof(fp)if(fread(&bk,sizeof(Btype),1,fp)if(ts.price=bk.price)printf(n%4s%-20s%4s%-8s%-20s%-8s%8s,编号,图书名称,类别,作者,出版社,价格,购买日期);printf(n%4s%-18s%-3c%-8s%-18s%8.2f%2d/%d/%d,bk.id,bk.name,bk.type,bk.writer,bk.publisher,bk.price,bk.buydate.month,bk.buydate.day,bk.buydate.year);j+;fclose(fp);if(j=0)printf(n找不到您要查询的图书信息!
n);3运行结果:
删除图书信息函数1.函数原型,功能和形参说明函数原型:
voidBookdelete();函数功能:
查询图书信息;2.程序清单:
voidBookdelete()Blist*head,*p,*q;Blist*s,*h;FILE*fp;intn=0;inti=0;if(fp=fopen(Book.lib,rb+)=NULL)printf(找不到文件Book.lib!
n);exit(0);head=(Blist*)malloc(sizeof(Blist);head-bk=(Btype*)malloc(sizeof(Btype);head-bk=NULL;q=p=(Blist*)malloc(sizeof(Blist);q-bk=p-bk=(Btype*)malloc(sizeof(Btype);rewind(fp);printf(n);while(!
feof(fp)p=(Blist*)malloc(sizeof(Blist);p-bk=(Btype*)malloc(sizeof(Btype);if(fread(p-bk,sizeof(Btype),1,fp)n+;if(n=1)head-next=p;elseq-next=p;q=p;q-next=NULL;fclose(fp);s=head;h=(Blist*)malloc(sizeof(Blist);h-bk=(Btype*)malloc(sizeof(Btype);printf(请输入您要删除的图书的编号!
n);scanf(%s,h-bk-id);for(s=head;s-next;s=s-next)if(strcmp(h-bk-id,s-next-bk-id)=NULL)if(!
s-next-next)s-next=NULL;printf(已删除编号为:
%d的图书!
n,s-next-bk-id);i+;break;elses-next=s-next-next;printf(已删除编号为:
%d的图书!
n,s-next-bk-id);i+;break;if(i!
=0)for(s=head-next;s;s=s-next)printf(n%4s%-18s%-3c%-8s%-18s%8.2f%2d/%d/%d,s-bk-id,s-bk-name,s-bk-type,s-bk-writer,s-bk-publisher,s-bk-price,s-bk-buydate.month,s-bk-buydate.day,s-bk-buydate.year);if(fp=fopen(Book.lib,w+)=NULL)fp=fopen(Book.lib,wb+);/*将输入的图书信息写入磁盘文件Book.lib*/for(s=head-next;s;s=s-next)fwrite(s-bk,sizeof(Btype),1,fp);fclose(fp);if(i=0)printf(找不到该编号的图书信息!
n);3运行结果:
图书排序函数1.函数原型,功能和形参说明函数原型:
voidBookdelete();函数功能:
查询图书信息;2.程序清单:
intsort(Btype*str1,Btype*str2,inttype);voidBooksort()Blist*head,*p,*q;FILE*fp;inttype;printf(n请选择对哪一个参数排序(1:
编号2:
名称3:
作者4:
出版社5:
价格6:
类别):
);printf(n);scanf(%d,&type);/*打开文件*/if(fp=fopen(Book.lib,rb+)=NULL)printf(找不到文件Book.lib!
n);exit(0);if(!
(head=(Blist*)malloc(sizeof(Blist)printf(内存不足!
n);exit(0);head-bk=NULL;head-next=NULL;rewind(fp);printf(n%4s%-20s%4s%-8s%-20s%-8s%8s,编号,图书名称,类别,作者,出版社,价格,购买日期);while(!
feof(fp)if(!
(p=(Blist*)malloc(sizeof(Blist)|!
(p-bk=(Btype*)malloc(sizeof(Btype)printf(内存不足!
n);exit(0);if(fread(p-bk,sizeof(Btype),1,fp)for(q=head;q-next&sort(q-next-bk,p-bk,type)next);p-next=q-next;q-next=p;fclose(fp);for(q=head-next;q;q=q-next)printf(n%4s%-18s%-3c%-8s%-18s%8.2f%2d/%d/%d,q-bk-id,q-bk-name,q-bk-type,q-bk-writer,q-bk-publisher,q-bk-price,q-bk-buydate.month,q-bk-buydate.day,q-bk-buydate.year);intstrsort(char*str1,char*str2,intlen)inti=0;for(;istr2i)return1;elsereturn-1;intsort(Btype*bk1,Btype*bk2,inttype)switch(type)case1:
returnstrsort(bk1-id,bk2-id,10);case2:
returnstrsort(bk1-name,bk2-name,40);case3:
returnstrsort(bk1-writer,bk2-writer,10);case4:
returnstrsort(bk1-publisher,bk2-publisher,20);case5:
if(bk1-pricebk2-price)return1;elseif(bk1-priceprice)return-1;elsereturn0;default:
if(bk1-typebk2-type)return1;elseif(bk1-typetype)return-1;elsereturn0;3运行结果:
图书总数统计函数1.函数原型,功能和形参说明函数原型:
voidBookstat();函数功能:
图书总数统计函数;2.程序清单:
voidBookstat()/图书总数统计函数Blist*head,*p,*q;FILE*fp;intn;/*打开文件*/if(fp=fopen(Book.lib,rb+)=NULL)printf(找不到文件Book.lib!
n);exit(0);if(!
(head=(Blist*)malloc(sizeof(Blist)printf(内存不足!
n);exit(0);head-bk=NULL;head-next=NULL;rewind(fp);printf(n);while(!
feof(fp)if(!
(p=(Blist*)malloc(sizeof(Blist)|!
(p-bk=(Btype*)malloc(sizeof(Btype)printf(内存不足!
n);exit(0);if(fread(p-bk,sizeof(Btype),1,fp)for(q=head;q-next&sort(q-next-bk,p-bk,6)next);p-next=q-next;q-next=p;fclose(fp);for(q=head-next;q;q=q-next)for(n=1;q-next&q-bk-type=q-next-bk-type;n+,q=q-next);printf(tt%c类型的图书共有%d本n,q-bk-type,n);3运行结果:
全部图书信息显示函数1.函数原型,功能和形参说明函数原型:
voidBookdisplay();函数功能:
图书总数统计函数;2.程序清单:
voidBookdisplay()/Btypebk;FILE*fp;if(fp=fopen(Book.lib,rb+)=NULL)printf(找不到文件Book.lib!
n);exit(0);rewind(fp);printf(n%4s%-20s%4s%-8s%-20s%-8s%8s,编号,图书名称,类别,作者,出版社,价格,购买日期);while(!
feof(fp)if(fread(&bk,sizeof(Btype),1,fp)printf(n%4s%-18s%-3c%-8s%-18s%8.2f%2d/%d/%d,bk.id,bk.name,bk.type,bk.writer,bk.publisher,bk.price,bk.buydate.month,bk.buydate.day,bk.buydate.year);fclose(fp);3运行结果:
主函数1.函数原型,功能和形参说明函数原型:
voidmain();函数功能:
用户操作界面;2.程序清单:
voidmain()intn=0;domaininterface();printf(请选择功能(0-5)n);scanf(%d,&n);switch(n)case1:
Bookinput();break;case2:
Booksearch();break;case3:
Bookdelete();break;case4:
Booksort();break;case5:
Bookdisplay();break;case6:
Bookstat();break;case0:
printf(谢谢使用该系统再见!
n);break;while(n!
=0);voidmaininterface()printf(nnnttt个人图书管理系统n);printf(ntt1:
输入图书信息n);printf(ntt2:
查询图书信息n);printf(ntt3:
删除图书信息n);printf(ntt4:
图书信息排序n);printf(ntt5:
显示全部图书信息n);printf(ntt6:
统计全部图书数目n);printf(ntt0:
退出系统n);运行结果:
4参考文献C程序设计(第三版)谭浩强数据结构(严蔚敏)高质量的编程指南数据结构与算法(科学出版社)