开发一个图书信息管理系统.docx
- 文档编号:14366894
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:21
- 大小:43.63KB
开发一个图书信息管理系统.docx
《开发一个图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《开发一个图书信息管理系统.docx(21页珍藏版)》请在冰点文库上搜索。
开发一个图书信息管理系统
开发一个图书信息管理系统
课程报告
课程名称:
程序设计实践
专业班级:
信息类1107
学生姓名:
王春平
学号:
201116910730
任课教师:
阎娟
学期:
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:
需求分析
1)功能
创建一个图书管理系统;用文件保存和读出图书信息;
插入图书信息;
查询某本图书;
通过遍历输出所有图书信息;
删除与修改图书信息;
按照图书的某个信息对其进行排序;
统计图书系统中所含图书的数目;
设置进入图书管理系统的密码,使系统相对安全。
2)需处理的数据
每本图书的信息:
图书编号,书名,作者,出版社,类别,出版时间,价格,图书的剩余量。
图书信息用文本文件的形式保存;
2:
概要设计
(1)数据结构
主要数据结构:
链表
将每本图书的信息都保存在结构体中,并通过“结构体指针指向下一个结构体”的方式将图书信息连接成链表。
每本图书信息保存的结构体如下:
structlist{
intnum;
charname[20];
charauthor[20];
charpublisher[20];
charkind[20];
chardate;
doubleprice;
intleaving;
structlist*next;
};
(2)模块划分
a.创建链表b.插入c.删除——按图书编号删除d修改——按图书编号修改.e.统计库存量f.遍历g.文件导入h.文件导出i.查询——按图书编号删除j.文件保存k.排序——按图书价格排序
(3)程序总体框架
开始——>main函数——>统计库存量Length函数,创建Creat函数,插入Insert函数,删除Delete函数,修改Revise函数,遍历Print函数,文件导入fileread函数,文件导出filewrite函数,查询Search函数,文件保存fprint函数,排序Sorting函数——>结束程序运行
(4)函数简介
a:
创建链表structlist*Create();
功能:
创建图书信息函数来读取录取的图书信息,最后向main函数返回所建立链表的头指针。
参数:
无
b:
插入图书信息structlist*Insert(structlist*head,structlist*book);
功能:
通过将创建函数和从main函数两种途径传过来的图书信息按编号连成一个链表,并将插入新元素的新链表的头指针返回给调用它的函数。
最后main函数返回插入新元素后的链表的头指针。
参数:
structlist*headstructlist*book
c:
删除图书信息structlist*Delete(structlist*head,intnum);
功能:
通过从main函数中得到图书信息链表的头指针,运用两个指针的依次移动分别找到要删除的图书信息元素的前一个元素和后一个元素,之后通过指针指向的变换达到删除元素的目的,最后返回main函数一个删除后图书信息链表的头指针。
参数:
structlist*head,intnum
d:
修改图书信息structlist*Revise(structlist*head,intnum);
功能:
通过从main函数中得到图书信息链表的头指针,运用指针的移动将要修改的元素的编号依次与链表中元素的编号进行对比找到要修改信息的元素。
最后返回main函数一个修改后的图书信息链表的头指针。
e:
图书信息遍历函数:
voidPrint(structlist*head);
功能:
通过从main函数中得到图书信息链表的头指针,通过设立的指针的依次向后移动输出每个图书的信息。
参数:
structlist*head)
f:
图书信息统计函数intLength(structlist*head);
功能:
通过对图书信息的遍历统计图书信息链表中共录入了多少图书信息,最后返回main函数一个统计后的后图书信息链表的头指针。
参数:
structlist*head
g:
图书信息输入函数structlist*fileread();
功能:
从外部文件中读取保存在其中的图书信息,并将这些信息建立成一个新的图书信息链表,再把这个链表的头指针返回给main函数供其它函数使用
参数:
无
h:
图书信息输出函数voidfilewrite(structlist*head);
功能:
将录入的图书信息按照链表中的信息顺序保存到文件中
参数:
structlist*head
i:
对图书信息的排序structlist*Sorting(structlist*head);
功能:
通过从main函数中得到图书信息链表的头指针,再通过指针一次从链表中取出一个图书信息并把这些信息按选定的方式排序。
最后返回main函数一个排序后图书信息链表的头指针。
参数:
structlist*head
j:
保存图书信息voidfprint(structlist*head);
功能:
将图书信息永久的保存到文件中,并且在其它函数比如删除,修改中调用此函数,将处理后的图书信息保存到文件中
参数:
structlist*head
3详细设计
图书信息统计函数intLength(structlist*head){
intn=0;
structlist*p;
p=head;
if(p==NULL)
printf("没有图书信息\n");
for(;p!
=NULL;p=p->next)
n++;
returnn;
}
图书信息创建函数
structlist*Create(){
intnum,leaving,q;
charname[20],author[20],publisher[20],kind[20],date[20];
doubleprice;
intsize=sizeof(structlist);
structlist*head,*p,*tail;
head=tail=NULL;
printf("请输入图书编号:
\n");
scanf("%d",&num);
while(num!
=0){
printf("书名作者出版社类别出版时间价格剩余量\n");
scanf("%s%s%s%s%s%lf%d",name,author,publisher,kind,date,&price,&leaving);
p=(structlist*)malloc(size);
p->num=num;
strcpy(p->name,name);
strcpy(p->author,author);
strcpy(p->publisher,publisher);
strcpy(p->kind,kind);
p->price=price;
strcpy(p->date,date);
p->leaving=leaving;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
printf("请输入图书编号:
\n");
scanf("%d",&num);
}
printf("是否将图书信息保存至文件?
(1-是0-否)\n");
scanf("%d",&q);
if(q==1){
fprint(head);
printf("图书信息已成功保存至tushu_list.txt中!
\n");
}
else
printf("文件没有保存!
\n");
returnhead;
}
图书信息插入函数
structlist*Insert(structlist*head,structlist*book){
structlist*p,*p1,*p2;
intq;
p2=head;
p=book;/*p指向待插入的结点*/
if(head==NULL)
{
head=p;/*新插入的结点成为头结点*/
head->next=NULL;
}
else{
while((p->num>p2->num)&&(p2->next!
=NULL)){
p1=p2;/*p1,p2各后移一个结点*/
p2=p2->next;
}
if(p->num<=p2->num)/*在p1,p2之间插入新结点*/{
if(head==p2)
head=p;
else
p1->next=p;
p->next=p2;
}
else{
p2->next=p;
p->next=NULL;
}
}
printf("是否将插入新信息后的图书信息保存至文件?
(1-是2-否)\n");
scanf("%d",&q);
if(q==1)
fprint(head);
printf("添加图书信息成功!
\n");
returnhead;
}
图书信息删除函数
structlist*Delete(structlist*head,intnum){
structlist*p1,*p2;
intz;
while(head!
=NULL&&head->num==num){
p2=head;
head=head->next;
free(p2);
}
if(head==NULL)
returnNULL;
p1=head;
p2=head->next;/*从表头的下一个结点搜索待删除的结点*/
while(p2!
=NULL){
if(p2->num==num)/*p2所指结点符合删除要求*/{
p1->next=p2->next;
free(p2);
}
else
p1=p2;/*p1后移一个结点*/
p2=p1->next;/*p2指向p1的后一个结点*/
}
printf("是否将删除后的图书信息保存至文件?
(1-是2-否)\n");
scanf("%d",&z);
if(z==1)
fprint(head);
printf("删除图书信息成功!
\n");
returnhead;
}
图书信息修改函数
structlist*Revise(structlist*head,intnum){
structlist*p1,*p2;
intchoice=0,d;
if(head==NULL){
printf("没有图书信息\n");
returnNULL;
}
p1=head;
p2=head->next;
while(p1!
=NULL&&p1->num==num){
p2=p1;
break;
}
while(p2!
=NULL){
if(p2->num==num)
break;
else
p1=p2;
p2=p1->next;
}
printf("修改图书的哪个信息?
1-书名2-作者3-出版社4-类别5-价格6-出版时间7-图书剩余量\n");
scanf("%d",choice);
switch(choice){
case1:
printf("请输入新的书名\n");
scanf("%s",p2->name);
break;
case2:
printf("请输入作者\n");
scanf("%s",p2->author);
break;
case3:
printf("请输入出版社\n");
scanf("%s",p2->publisher);
break;
case4:
printf("请输入图书类别\n");
scanf("%s",p2->kind);
break;
case5:
printf("请输入图书价格\n");
scanf("%.2lf",&p2->price);
break;
case6:
printf("请输入出版时间\n");
scanf("%s",p2->date);
break;
case7:
printf("请输入图书剩余量\n");
scanf("%d",&p2->leaving);
break;
}
printf("是否将修改后的图书信息保存至文件?
(1-是2-否)\n");
scanf("%d",&d);
if(d==1)
fprint(head);
printf("修改图书信息成功!
\n");
returnhead;
}
图书信息遍历函数
voidPrint(structlist*head){
structlist*p;
if(head==NULL){
printf("没有图书信息\n");
return;
}
printf("图书信息:
\n");
printf("编号书名作者出版社类别价格出版时间剩余量\n");
for(p=head;p!
=NULL;p=p->next)
printf("%2d%10s%10s%10s%10s%6.2lf%10s%2d\n",p->num,p->name,p->author,p->publisher,p->kind,p->price,p->date,p->leaving);
}
图书信息查找函数
voidSearch(structlist*head){
inta,num,b=0,c=0,price=0;
structlist*p;
p=head;
printf("查询方式:
1-图书编号,2-图书价格\n");
scanf("%d",&a);
if(a==1){
printf("请输入图书的编号:
\n");
scanf("%d",&num);
if(p==NULL)
printf("没有图书信息\n");
while
(1){
if(p->num!
=num)
p=p->next;
if(p==NULL)
break;
if(p->num==num){
printf("所查询的图书信息是:
\n");
printf("编号书名作者出版社类别价格出版时间剩余量\n");
printf("%2d%10s%10s%10s%10s%6.2lf%10s%2d\n",p->num,p->name,p->author,p->publisher,p->kind,p->price,p->date,p->leaving);
b++;
p=p->next;
break;
}
}
if(b==0)
printf("\n没有此书\n");
}
if(a==2){
if(p==NULL)
printf("没有图书信息!
\n");
printf("请输入图书的价格:
\n");
scanf("%.2lf",&price);
printf("编号书名作者出版社类别价格出版时间剩余量\n");
do{
if(p->price!
=price)
p=p->next;
else{
printf("%2d%10s%10s%10s%10s%6.2lf%10s%2d\n",p->num,p->name,p->author,p->publisher,p->kind,p->price,p->date,p->leaving);
c++;
p=p->next;
}
}while(p!
=NULL);
if(c==0)
printf("没有此书!
\n");
}
}
文件导入图书信息函数
structlist*fileread(){
structlist*p,*p1,*head1;
structlistbook;
intsize=sizeof(structlist);
FILE*fp;
if((fp=fopen("a.txt","r"))==NULL){
printf("Can'topenthefile!
\n");
exit(0);
}
head1=p1=NULL;
while(fread(&book,size,1,fp)==1){
p=(structlist*)malloc(size);
p->num=book.num;
strcpy(p->name,book.name);
strcpy(p->publisher,book.publisher);
strcpy(p->date,book.date);
p->price=book.price;
p->leaving=book.leaving;
p->next=NULL;
if(head1==NULL){
head1=p;
head1->next=NULL;
p1=head1;
}
else{
p1->next=p;
p1=p1->next;
}
fclose(fp);
}
returnhead1;
}
文件导出图书信息函数
voidfilewrite(structlist*head){
structlist*p;/*用于指向链表的结点*/
structlistbook;
intsize=sizeof(structlist);
p=head;
FILE*fp;
if((fp=fopen("a.txt","w"))==NULL){
printf("Can'topenthefile!
\n");
exit(0);
}
while(p!
=NULL){
book.num=p->num;
strcpy(book.name,p->name);
strcpy(book.author,p->author);
strcpy(book.publisher,p->publisher);
strcpy(book.kind,p->kind);
strcpy(book.date,p->date);
book.price=p->price;
book.leaving=p->leaving;
fwrite(&book,size,1,fp);
p=p->next;
}
fclose(fp);
}
图书信息排序函数
structlist*Sorting(structlist*head){
structlist*b,*p,*p1,*p2,*head2;
intsize=sizeof(structlist);
intn=0,v;
p1=head2=NULL;
p=head;
while(p!
=NULL){
b=(structlist*)malloc(size);
b->num=p->num;
strcpy(b->name,p->name);
strcpy(b->author,p->author);
strcpy(b->publisher,p->publisher);
strcpy(b->kind,p->kind);
strcpy(b->date,p->date);
b->price=p->price;
b->leaving=p->leaving;
if(head2==NULL){
head2=b;
head2->next=NULL;
p1=head2;
p2=p1;
}
else{
while((b->price>p1->price)&&(p1->next!
=NULL)){
p2=p1;
p1=p1->next;
}
if(b->price<=p1->price){
if(head2==p1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 开发 一个 图书 信息管理 系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)