资源描述
第三章 图书管理系统设计与实现
3.1系统需求分析
图书登记管理系统作为一种应用软件将为学校教师和学生提供一种对学校图书馆进一步理解并借阅、还书平台。依照系统界面提示信息对图书馆信息进行查询、初始化等操作
系统功能需求分析描述如下:
(1)系统主菜单:进入系统和退出系统
(2)功能菜单:显示可以进行操作
(3)查询主菜单:依照图书编号、书名、作者进行查询,并可显示所有图书信息
(4)借还书主菜单:可以进行借书和还书等操作
3.2系统设计
3.2.1 系统总统设计
下面从系统整体流程功能模块、系统界面及数据构造进行总体设计。
(1)总体思想
本系统重要设计思想是实现图书馆功能机管理系统信息查询、借书、还书等重要功能。系统设计办法是构造化实际办法,系统用C语言进行开发顾客可以清晰理解图书馆内状况。
(2)系统模块构造图
依照需求分析成果,图书管理系统可以分为三大模块:查询图书模块、借书功能模块、还书功能模块。
系统模块构造如图:
图书管理系统
还书功能系统
借书功能系统
图
书
管理主菜单
图书查询系统
3.2.2 系统概要设计
㈠系统主菜单。
显示系统主菜单,里面有相应功能代码,依照选取各功能代码进入不同界面。功能重要涉及:退出系统、查询图书、借书、还书。
㈡查询图书信息
进入此菜单功能模块,输入您要查询图书编号、名字、作者等。
图书查询模块流程如图:
开始
提示输入图书编号、书名、作者
输入对的
查询
否 是
重新输入
是
退出系统
否
3.3 测试成果
系统主界面
功能菜单
查询系统菜单
借还系统菜单
3.4 源代码
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
typedef struct link
{
char number[100];
char bookname[100];
char author[100];
char publish[100];
char time[100];
float price;
char status[100];
struct link *next;
}link;
link *Cbook()
{
int n=0;
link *p,*q,*head;
FILE *fp;
fp=fopen("图书信息.txt","r+");
if(fp==NULL)
printf("没有找到文献,请检查……");
p=(link *)malloc(sizeof(link));
if(p==NULL)
printf("申请内存出错!!!\n");
fscanf(fp,"%s%s%s%s%s",p->number,p->bookname,p->author,p->publish,p->time);
fscanf(fp,"%f",&p->price);
fscanf(fp,"%s",p->status);
while(feof(fp)==0)
{
n++;
if(n==1)
{
head=p;
}
else
{
q=p;
p=(link *)malloc(sizeof(link));
if(p==NULL)
printf("申请内存出错!!!\n");
fscanf(fp,"%s%s%s%s%s",p->number,p->bookname,p->author,p->publish,p->time);
fscanf(fp,"%f",&p->price);
fscanf(fp,"%s",p->status);
q->next=p;
}
}
p->next=NULL;
fclose(fp);
printf("信息已录入!!!");
return head;
}
void mainmenu()
{
printf("\n*****************************************\n");
printf("\n** 欢迎使用图书管理系统 **\n");
printf("\n** 1.进入系统 0.退出系统 **\n");
printf("\n*****************************************\n");
printf("\n 请选取");
}
void menu1()
{
printf("\n*****************************************\n");
printf("\n** 1.进入图书查询系统 **\n");
printf("\n** 2.进入图书借还系统 **\n");
printf("\n** 3.保存所有图书信息 **\n");
printf("\n** 4.返回上级菜单 **\n");
printf("\n*****************************************\n");
printf("\n请选取");
}
void cxmenu()
{
printf("\n*****************************************\n");
printf("\n** 1.显示所有图书信息 **\n");
printf("\n** 2.按编号查询图书 **\n");
printf("\n** 3.按书名查询图书 **\n");
printf("\n** 4.按作者查询图书 **\n");
printf("\n** 5.返回上级菜单 **\n");
printf("\n****************************************\n");
printf("\n请选取");
}
void jhmenu()
{
printf("\n*****************************************\n");
printf("\n** 1.借书 **\n");
printf("\n** 2.还书 **\n");
printf("\n** 3.返回上级菜单 **\n");
printf("\n*****************************************\n");
printf("\n请选取");
}
void print(link *head)
{
link *p;
p=head;
printf("\n");
printf("\n**************************************************\n");
printf("\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
while(p!=NULL)
{
printf("\n");
printf("%s\t%s\t%s\t%s\t%s",p->number,p->bookname,p->author,p->publish,p->time);
printf("\t\t%.2f",p->price);
printf("\t\t%s",p->status);
printf("\n");
p=p->next;
}
}
void hold(link *head)
{
link *p;
FILE *fp;
fp=fopen("图书信息.txt","w+");
if(fp==NULL)
{
printf("文献操作出错!!!");
exit(1);
}
p=head;
for(;p!=NULL;p=p->next)
{
fprintf(fp,"%s\t%s\t%s\t%s\t%s",p->number,p->bookname,p->author,p->publish,p->time);
fprintf(fp,"\t\t%.2f",p->price);
fprintf(fp,"\t\t%s",p->status);
fprintf(fp,"\n");
}
fclose(fp);
printf("信息已保存。");
}
void holdcx(link *t)
{
link *p=NULL;
FILE *fp;
fp=fopen("查询.txt","a+");
p=t;
fprintf(fp,"查询到信息为:\n");
fprintf(fp,"\n");
fprintf(fp,"\n**************************************************\n");
fprintf(fp,"\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
fprintf(fp,"\n");
fprintf(fp,"%s\t%s\t%s\t%s\t%s",p->number,p->bookname,p->author,p->publish,p->time);
fprintf(fp,"\t\t%.2f",p->price);
fprintf(fp,"\t\t%s",p->status);
fprintf(fp,"\n");
fclose(fp);
printf("信息已保存!!!");
}
link *findnumber(link *head)
{
char key[100];
link *h,*t1=NULL;
printf("请输入图书编号:");
getchar();
gets(key);
for(h=head;h!=NULL;h=h->next)
{
if(strcmp(key,h->number)==0)
{
t1=h;
break;
}
}
return t1;
}
link *findboookname(link *head)
{
char key[100];
link *h,*t2=NULL;
printf("请输入图书书名:");
getchar();
gets(key);
for(h=head;h!=NULL;h=h->next)
{
if(strcmp(key,h->bookname)==0)
{
t2=h;
break;
}
}
return t2;
}
link *findauthor(link *head)
{
char key[100];
link *h,*t3=NULL;
printf("请输入作者姓名:");
getchar();
gets(key);
for(h=head;h!=NULL;h=h->next)
{
if(strcmp(key,h->author)==0)
{
t3=h;
break;
}
}
return t3;
}
link *sortnumber(link *head)
{
link *p,*q,*temp;
temp=(link *)malloc(sizeof(link));
if(temp==NULL)
{
printf("申请内存出错!!!");
exit(1);
}
for(p=head;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(strcmp(p->number,q->number)>0)
{
strcpy(temp->number,p->number);
strcpy(temp->bookname,p->bookname);
strcpy(temp->author,p->author);
strcpy(temp->publish,p->publish);
strcpy(temp->time,p->time);
temp->price=p->price;
strcpy(temp->status,p->status);
strcpy(p->number,q->number);
strcpy(p->bookname,q->bookname);
strcpy(p->author,q->author);
strcpy(p->publish,q->publish);
strcpy(p->time,q->time);
p->price=q->price;
strcpy(p->status,temp->status);
strcpy(q->number,temp->number);
strcpy(q->bookname,temp->bookname);
strcpy(q->author,temp->author);
strcpy(q->publish,temp->publish);
strcpy(q->time,temp->time);
q->price=temp->price;
strcpy(q->status,temp->status);
}
}
}
return head;
}
link *borrowbook(link *head)
{
link *h,*p;
char ch,ch1[100]="在库",ch2[100]="不在库";
h=head;
printf("\n**************************************************\n");
printf("\t\t欢迎使用借书系统!!!\n");
p=findboookname(h);
if(p==NULL)
printf("借书失败,书库中没有这本书!!!");
else if(strcmp(p->status,ch2)==0)
printf("借书失败,图书不在库!!!");
else
{
printf("确认借出?Y/N:");
scanf("%c",&ch);
getchar();
if(ch=='Y'||ch=='y')
{
strcpy(p->status,ch2);
printf("借书成功,请返回上级菜单保存信息!!!");
}
if(ch=='N'||ch=='n')
{
printf("你没有借任何书!!!");
}
}
return head;
}
link *returnbook(link *head)
{
link *h,*p;
char ch,ch1[100]="在库",ch2[100]="不在库";
h=head;
printf("\n**************************************************\n");
printf("\t\t欢迎使用还书系统!!!\n");
p=findboookname(h);
if(p==NULL)
printf("还书失败,这不是本书库书!!");
else
{
printf("确认还书?Y/N:");
scanf("%c",&ch);
getchar();
if(ch=='Y'||ch=='y')
{
strcpy(p->status,ch1);
printf("还书成功,请返回上级菜单保存信息!!!");
}
if(ch=='N'||ch=='n')
{
printf("你没有还书!!!");
}
}
return head;
}
void main()
{
int a,b,c,d;
link *h,*t;
L:system("cls");
mainmenu();
while(1)
{
scanf("%d",&a);
switch(a)
{
case 1:
{
B:system("cls");
menu1();
while(1)
{
scanf("%d",&b);
switch(b)
{
case 1:
{
system("cls");
cxmenu();
while(1)
{
scanf("%d",&c);
switch(c)
{
case 1:
{
print(h);
}break;
case 2:
{
t=findnumber(h);
if(t==NULL)
printf("没有要查询图书!!!");
if(t!=NULL)
{
printf("查询图书为:");
printf("\n");
printf("\n**************************************************\n");
printf("\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
printf("\n");
printf("%s\t%s\t%s\t%s\t%s",t->number,t->bookname,t->author,t->publish,t->time);
printf("\t\t%.2f",t->price);
printf("\t\t%s",t->status);
printf("\n");
}
}break;
case 3:
{
t=findboookname(h);
if(t==NULL)
printf("没有要查询图书!!!");
if(t!=NULL)
{
printf("查询图书为:");
printf("\n");
printf("\n**************************************************\n");
printf("\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
printf("\n");
printf("%s\t%s\t%s\t%s\t%s",t->number,t->bookname,t->author,t->publish,t->time);
printf("\t\t%.2f",t->price);
printf("\t\t%s",t->status);
printf("\n");
}
}break;
case 4:
{
t=findauthor(h);
if(t==NULL)
printf("没有要查询图书!!!");
if(t!=NULL)
{
printf("查询图书为:");
printf("\n");
printf("\n**************************************************\n");
printf("\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
printf("\n");
printf("%s\t%s\t%s\t%s\t%s",t->number,t->bookname,t->author,t->publish,t->time);
printf("\t\t%.2f",t->price);
printf("\t\t%s",t->status);
printf("\n");
}
}
break;
case 5:
{
goto B;
}break;
}
}
}break;
case 2:
{
system("cls");
jhmenu();
while(1)
{
scanf("%d",&d);
switch(d)
{
case 1:
{
borrowbook(h);
}break;
case 2:
{
returnbook(h);
}break;
case 3:
{
goto B;
}break;
}
}
}break;
case 3:
{
hold(h);
}break;
case 4:
{
goto L;
}break;
}
}
}break;
case 0:
{
printf("\t\t\t感谢使用,再会!!!");
exit(0);
}
}
}
}
第四章 心得体会
通过一种多星期编译原理课程设计,在我努力下,顺利完毕该课程设计。
通过该课程设计,掌握了编译程序工作基本过程及其各阶段基本任务,熟悉了编译程序总流程框图,理解了编译程序生成过程及其有关技术,对课本上知识也有了更深理解。教师常说,课本上知识是机械,表面,要学会去运用,要举一反三。当前终于深刻理解了这句话。通过这次课程设计,发现课本上很深奥知识变更为简朴,同样,对实验原理也了有更深理解。懂得和理解了该理论在计算机中是如何执行, 对该理论在实践中应用有深刻理解 。通过该课程设计,把死板课本知识变得生动有趣,激发了学习积极性。可以把课堂上学知识通过自己设计程序表达出来,加深了对理论知识理解。
课程设计中程序比较复杂,在调试时应当仔细,在程序调试时,注意指针,将不必要命令去除。除了课堂外,课程设计是最能学到东西,最考验人。在做课程设计这段时间,时刻都感到自己学知识有多么贫瘠。通过这次课程设计,让我对C++这门语言有了更深结识,操作能力有了提高要想是写出代码能运营,需要耐心细心,毅力以及充沛体力。只有通过多次编辑,多次编译,再多次运营,才干编写出更好程序,有时候需要多次改正才干达到所要运营成果。
参照文献
谭洁强 《C程序设计》 清华大学出版社
张基温 《C程序设计案例教程》 清华大学出版社
王宏 《C#程序设计案例教程》 清华大学出版社
展开阅读全文