软件工程课程设计图书管理系统 下载本文

1M1身份验证 ○

·功能:验证身份 ·性能:

·输入项:预设密码 ·输出项:欢迎语句 ·算法: int keyword=111,a;

printf(\

scanf(\

if(a!=keyword) exit(0); else printf(\

·测试要求:运行正常。 2M2主菜单模块 ○

·功能:选择功能 ·性能:

·输入项:数字0-9 ·输出项:对应功能项

·算法: int Display_MainMenu() /*显示菜单的函数*/

{char x; do{

system(\

printf(\ printf(\ printf(\

printf(\ printf(\ printf(\ printf(\ printf(\

printf(\ printf(\ printf(\

printf(\ printf(\

printf(\ x=getchar();

}while(x<'0'||x>'9'); return(x-'0'); }

·测试要求:运行正常。 3M3插入模块 ○

·功能:插入新信息 ·性能:

·输入项:书名 数量 ·输出项:成功提示

·算法: Book *Insert(Book *head,Book *s) /*插入结点的函数*/

{ Book *p0,*p1,*p2;

p1=head;p0=s; /*使p1指向第一个结点,p0

指向要插入的结点*/

if(head==NULL) /*原来的链表是空表*/ {head=p0;p0->next=NULL;} /*使p0作为首结点*/ while(strcmp(p0->Name,p1->Name)>0&&(p1->next!=NULL)) {p2=p1; p1=p1->next; }

if(strcmp(p0->Name,p1->Name)<=0) {p0->next=p1;

if(head==p1) head=p0; else p2->next=p0; } else

{p1->next=p0; p0->next=NULL; }

return(head); }

Book *Insert_a_record(Book *head) { Book *newrecord;

newrecord=(Book *)malloc(LEN); /*动态分配存储空间*/ scanf(\ newrecord->borrow=0;

newrecord->left=newrecord->all; head=Insert(head,newrecord);

printf(\successfully\\n\输出插入成功的信息*/

return(head); }

·测试要求:运行正常。 4删除模块 ○

·功能:删除信息 ·性能:

·输入项:所删书名 ·输出项:成功提示

·算法: Book *Delete(Book *head,char *name)

{ Book *p1,*p2; if(head==NULL)

printf(\ p1=head;

while(strcmp(p1->Name,name)!=0&&p1->next!=NULL) /*p1不是要找的结点,且后面还有结点*/

{p2=p1;p1=p1->next;} /*p1后移一个结点*/ if(strcmp(p1->Name,name)==0) /*找到了*/

{if(p1==head)head=p1->next; /*若p1为首指针,使下一结点为首指针*/

else {p2->next=p1->next; /*否则将下一结点地址赋给前一结点地址*/

printf(\输出删除成功的信息*/ }

return(head); }

Book *Delete_a_record(Book *head) { char name[20],ch; Book *p;

scanf(\

getchar(); /*接收回车*/ p=Query(head,name);

if(p==NULL) printf(\找不到结点*/ else {printf(\ ch=getchar(); system(\

if(ch=='y'||ch=='Y') while(p!=NULL)

{head=Delete(head,name); /*删除所有与输入相同的记录*/ p=Query(head,name); } }

return(head); }

·测试要求:运行正常。 5M5查询模块 ○

·功能: 查询功能 ·性能:

·输入项:查询书名 ·输出项:相应书籍信息

·算法: Book *Query(Book *head,char *name)

{ Book *p; p=head;

while(strcmp(name,p->Name)!=0&&p->next!=NULL) p=p->next;

if(strcmp(name,p->Name)==0) /*找到了,返回结点地址*/ return(p);

else /*找不到返回空指针*/ return(NULL); }

void Query_a_record(Book *head) { char name[20]; Book *p;

scanf(\ p=Query(head,name); if(p!=NULL) /*找到了*/

{ printf(\ p->Name,p->all,p->left,p->borrow); } else

printf(\找不到*/ }

·测试要求:运行正常。

6M6显示功能 ○

·功能: 显示所有信息