某大学12级数据结构课程设计
4 详细设计
首先定义一个定义一个单链表的结点
typedef struct node { int num;//书号 char title[50];//书名 char author[50];//著作者 int num1;//现存量 int num2;//库存量 char name[50];//借阅者姓名 struct node *link; }linklist;
此结点包括书号,书名,著作者,现存量,库存量,借阅者姓名。 linklist* creatnull(linklist *l)//建立一个带头的结点; {
l=(linklist*)malloc(sizeof(linklist)); l->link=NULL; return l; }
馆藏图书信息模块
void print(linklist *l)//输出所有图书的信息 { linklist *p; p=l->link; printf(\输出所有图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ while(p) { printf(\or,p->num1,p->num2,p->name); p=p->link; //指针指向下一个 } }
通过对单链表的输出来完成对馆藏图书信息的输出;
采编入库模块
void creat(linklist *l)//采编入库 { int i,n; linklist *p,*tail,*q;
4
某大学12级数据结构课程设计
tail=l;if(l->link!=NULL) q=l->link; else q=l; while(tail->link!=NULL){tail=tail->link;}; printf(\请输入入库图书的数量:\ scanf(\ for(i=1;i<=n;i++) {
p=(linklist*)malloc(sizeof(linklist)); printf(\请输入入库图书的书号:\ scanf(\ while(q->num!=p->num&&q->link!=NULL){q=q->link;} if(q->num==p->num) { q->num1=q->num1+1; q->num2=q->num2+1; printf(\该图书已在图书库存在,已自动增加图书数量\ else { printf(\请输入入库图书的书名:\ scanf(\
printf(\请输入入库图书的著作者:\ scanf(\
printf(\请输入入库图书的现存量:\ scanf(\
printf(\请输入入库图书的库存量:\ scanf(\ strcpy(p->name,\ tail->link=p; tail=p; tail->link=NULL;}; }; }
首先先判断该结点是否为空,若不为空,指针指向下一个结点。若该结点为空,输入入库图书的数量,通过for循环依次输入书号,书名,著作者,现存量,库存量等信息。
其中while(q->num!=p->num&&q->link!=NULL){q=q->link;}
if(q->num==p->num)
数量。\
{
q->num1=q->num1+1; q->num2=q->num2+1;
printf(\该图书已在图书库存在,已自动增加图书
根据输入的书号(入库的图书)与库存的书号(本库的图书)是否相同,若相同,不用输入该书的相关信息,便自动完成图书库存和现存量的增加。并提示“该图书已在图书库存在,已自动增加图书数量。”
根据书号查找图书模块
5
某大学12级数据结构课程设计
void locat(linklist *l,int i)//根据书号查找图书 { linklist *p; p=l->link; while(p->num!=i) { p=p->link; }; If(p->limk!=NULL) {printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name);} else printf(\该图书不在此书库!\}
通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息。若不相同,则指针指向下一个结点,直到指向为NULL,结束并提示“该图书不在此书库!”。 借阅模块
void borrowbook(linklist *l)//借阅 { linklist *p;int i; printf(\借阅的图书书号:\ scanf(\ p=l->link; while(p->num!=i) { p=p->link; }; printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name); if(p->num1<=0) {printf(\该书库存不足,读者无法借阅.\ else{p->num1=p->num1-1; printf(\请输入借阅者的姓名:\ scanf(\ printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name);}; }
通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息,若库存不大于零,提示“该书库存不足,读者无法借阅.”,相反,则提示“请输入借阅者的姓名:”,记录借阅者的姓名,现存量和库存量各减一个。若不同,则指针指向下一个结点。
6
某大学12级数据结构课程设计
归还模块
void returnbook(linklist *l)//归还 { linklist *p;int i; printf(\请输入归还图书的书号:\ scanf(\ p=l->link; while(p->num!=i) { p=p->link; }; printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name); p->num1=p->num1+1; strcpy(p->name,\ printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\
printf(\->num2,p->name);
}
通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息。若不同,则指针指向下一个结点。
Main函数模块
int main() { linklist l,*head; head=creatnull(&l); printf(\ ┌*********************************┐\\n\ printf(\ │ 欢迎使用图书管理系统 │\\n\
printf(\ └*********************************┘\\n\ printf(\ 免费 高效 简单 实用\\n\
printf(\ int flag=1,a; while(flag) {
printf(\馆藏图书信息\\n2:采编入库\\n3:图书查询\\n4:读者借阅\\n5:读者归还\\n6:退出图书管理系统\\n请输入您的选项:\ scanf(\ switch(a)
7
某大学12级数据结构课程设计
{ { case 6:flag=0; printf(\ ┌*********************************┐\\n\ printf(\ │ 已退出图书管理系统 │\\n\
printf(\
└*********************************┘\\n\ break; case 1:flag=1; print(head); printf(\ break; case 2:flag=1; creat(head); printf(\ break; case 3:flag=1; int number;//书号 printf(\请输入要查找的图书书号:\ scanf(\ locat(head,number); printf(\ break; case 4:flag=1; borrowbook(head); printf(\ break; case 5:flag=1; returnbook(head); printf(\ break; } } }; system(\ return 1;
首先,定义一个该类型的结点和一个指向该类型的指针。用creatnull()函数创建一个头结点,且指针指向该头结点。然后输出用户界面,通过while循环和switch case语句进行选择。把各个功能模块都编辑在main函数。
8