课程设计——图书管理系统

来源:互联网 发布:战斗力探测器软件下载 编辑:程序博客网 时间:2024/05/16 08:41
library.h
#ifndef LIBRARY_INCLUDE#define LIBRARY_INCLUDE#include<stdio.h>#include<string.h>#include<conio.h>#include<windows.h>#include<time.h>typedef struct BOOK{long number;char name[30];char author[30];char press[30];long presstime;int exist;int total;struct BOOK *next;}book;typedef struct KEY{long key;book *adress;struct KEY *next;}keynode;typedef struct READER{long number;char name[15];char sex;char password[16];int residue;long borrowed[10][2];int limit;struct READER *next;}reader;char *lc(int i);char *sc(char p);void showR(reader *tr,book *bhead);void showB(book *p);book *S_name(book *head,char name[]);void S_author(book *head);keynode *initindex(book *head);void delkey(keynode *keyhead);book *S_number(long num,book *bhead);reader *S_reader(reader *rhead,long num);book *Bload();reader *Rload();void Bsave(book *Bhead);void Rsave(reader *Rhead,book *bhead);void insert(book *bhead);void reg(reader *head);reader *login(reader *rhead,book *bhead);void borrow(reader *temp,book *Bhead);void returnbook(book *bhead,reader *temp);void style();void intpsd(char *psd);void menu(struct BOOK *Bhead,reader *Rhead);void menu2(reader *temp,reader *rhead,book *bhead);long backtime();#endif

borrow_return.cpp
#include"library.h"void borrow(reader *temp,book *Bhead){style();long num;int i;char t,k,name[30];book *Bbook;getch();system("cls");while(1){printf("\n                        ┏━━━━━━━━━━┓                        ");printf("\n█━━━━━━━━━━━┫借书                ┣━━━━━━━━━━━█");printf("\n                        ┗━━━━━━━━━━┛                        ");printf("\n请输入您要查找借阅书籍的方式:");printf("\n                           1、按书号查找\n");printf("\n                           2、按作者查找\n");printf("\n                           3、按书名查找\n");printf("\n                           4、返回主菜单\n");t=getch();switch(t){case '1':{printf("\n请输入您要查找的书籍编号:");scanf("%d",&num);if((Bbook=S_number(num,Bhead))!=NULL){showB(Bbook);printf("\n请问你是否要借阅该书籍?Y/N");k=getch();if(k=='Y'||k=='y')goto borrow;elsebreak;}elsebreak;}case '2':{S_author(Bhead);break;}case '3':{printf("\n请输如您要查找的书籍名:");scanf("%s",name);if((Bbook=S_name(Bhead,name))!=NULL){showB(Bbook);printf("\n请问你是否要借阅该书籍?Y/N");k=getch();if(k=='Y'||k=='y')goto borrow;elsebreak;}elsecontinue;break;}default:return;borrow:if(Bbook!=NULL&&temp->residue>0&&Bbook->exist>0){temp->residue--;Bbook->exist--;for(i=0;i<10;i++){if(temp->borrowed[i][0]==0){temp->borrowed[i][0]=Bbook->number;temp->borrowed[i][1]=backtime();break;}}printf("\n                       借阅成功!");}elseif(!(temp->residue>0))printf("\n您只能借阅10本书籍!");elseif(!(Bbook->exist>0))printf("\n该书没有库存,请借阅其他书籍!");printf("\n您要继续借阅书籍吗?Y/N");t=getch();if(t=='y'||t=='Y')continue;elsebreak;}}}void returnbook(book *bhead,reader *temp){long num;int i,j=0;char t;book *p;printf("\n                        ┏━━━━━━━━━━┓                        ");printf("\n█━━━━━━━━━━━┫还书                ┣━━━━━━━━━━━█");printf("\n                        ┗━━━━━━━━━━┛                        ");printf("\n\n请输入您所还书的编号:");scanf("%d",&num);for(i=0;i<10;i++){if(num==temp->borrowed[i][0])j=1;}p=S_number(num,bhead);if(p!=NULL&&j==1){printf("\n┌────┬──────┬───────┬────┬───────┐");printf("\n│书本编号│书籍名称    │出版社名称    │出版时间│          作者│");printf("\n├────┼──────┼───────┼────┼───────┤");printf("\n│%8d│%12s│%14s│%8d│%14s│",p->number,p->name,p->press,p->presstime,p->author);printf("\n└────┴──────┴───────┴────┴───────┘\n");printf("\n确认归还该书籍?Y/N");t=getch();if(t=='Y'||t=='y'){p->exist++;temp->residue++;for(i=0;i<10;i++){if(temp->borrowed[i][0]==num){temp->borrowed[i][0]=0;temp->borrowed[i][1]=0;break;}}}else return;}else{printf("\n编号有误,请仔细检查!");}}

insert.cpp
#include "library.h"void insert(book *bhead){style();long t;book *temp1,*temp,*temp2;temp1=bhead->next;printf("\n                        ┏━━━━━━━━━━┓                        ");printf("\n█━━━━━━━━━━━┫入库                ┣━━━━━━━━━━━█");printf("\n                        ┗━━━━━━━━━━┛                        ");while(1){printf("\n请输入您给定书的编号(6位以内的正整数):");scanf("%d",&t);if(t<=0||t>999999){printf("\n您的编号不在处理范围(1~999999)之内!");fflush(stdin);continue;}else{temp2=S_number(t,bhead);if(temp2==NULL){break;}else{temp2->total++;temp2->exist++;printf("\n编号为%d的书已存在,入库成功!",t);return;}}}temp=(book*)malloc(sizeof(book));temp->number=t;printf("\n请输入书名:");scanf("%s",temp->name);printf("\n请输入本书作者:");scanf("%s",temp->author);printf("\n请输入本书出版社:");scanf("%s",temp->press);printf("\n请输入本书出版时间:");scanf("%d",&temp->presstime);temp->next=NULL;temp->total=1;temp->exist=1;if(bhead->next==NULL)bhead->next=temp;else{while(temp1->next!=NULL&&temp1->number<temp->number)temp1=temp1->next;temp->next=temp1->next;temp1->next=temp;}printf("\n                        ┏━━━━━━━━━━┓                        ");printf("\n█━━━━━━━━━━━┫入库成功            ┣━━━━━━━━━━━█");printf("\n                        ┗━━━━━━━━━━┛                        ");}void reg(reader *head){style();long i=1000;int j;char t1[16],t2[16];reader *temp=head->next;reader *p;p=new(reader);printf("\n                        ┏━━━━━━━━━━┓                        ");printf("\n█━━━━━━━━━━━┫注册                ┣━━━━━━━━━━━█");printf("\n                        ┗━━━━━━━━━━┛                        ");printf("\n                          请输入姓名:");scanf("%s",p->name);fflush(stdin);while(1){printf("\n                          请输入性别:\n                          M:男性:\n                          F:女性:");p->sex=getchar();if(p->sex=='F'||p->sex=='f'||p->sex=='M'||p->sex=='m')break;elseprintf("\n              阁下既非男,又非女,莫非来自泰国?");}while(1){while(1){printf("\n                          请输入您的密码:");intpsd(t1);if(strlen(t1)<=4)printf("\n          您设置的密码过于简单,请重新设置:");elsebreak;}printf("\n                          请确认您的密码:");intpsd(t2);if(strcmp(t1,t2)==0){strcpy(p->password,t1);break;}elseprintf("\n                    您两次输入的密码不一致!");}p->residue=10;p->next=NULL;for(j=0;j<10;j++){p->borrowed[j][0]=0;p->borrowed[j][1]=0;}if(temp==NULL){p->number=i;head->next=p;p->limit=1;}else{++i;while(temp->next!=NULL){++i;temp=temp->next;}p->number=i;p->limit=0;temp->next=p;}showR(p,NULL);}reader *login(reader *rhead,book *bhead){long num;char pass[16];int i=5;reader *reader;style();printf("\n                        ┏━━━━━━━━━━┓                        ");printf("\n█━━━━━━━━━━━┫登录                ┣━━━━━━━━━━━█");printf("\n                        ┗━━━━━━━━━━┛                        ");while(1){printf("\n                        请输入您的借阅证号:");scanf("%d",&num);if((reader=S_reader(rhead,num))==NULL){printf("\n                   没有找到您所在编号的读者.");getch();return NULL;}elsebreak;}while(i>0){printf("\n                        请输入密码:");intpsd(pass);if(strcmp(pass,reader->password)==0)return reader;else{printf("\n                         密码错误");return NULL;}}}

load_save.cpp
#include "library.h"book *Bload(){FILE *p;book *Bhead=(book*)malloc(sizeof(book));book *temp,*temp1;Bhead->next=NULL;if((p=fopen("book.txt","r"))==NULL){printf("\n打开文件book.txt失败,请检查...");return Bhead;}else{fgetc(p);if(!feof(p)){printf("\n非空");rewind(p);temp=(book*)malloc(sizeof(book));fscanf(p,"%14d%12s%18s%8d%14s%4d%4d\n",&temp->number,temp->name,temp->press,&temp->presstime,temp->author,&temp->total,&temp->exist);temp->next=NULL;Bhead->next=temp;}while(!feof(p)){temp1=(book*)malloc(sizeof(book));fscanf(p,"%14d%12s%18s%8d%14s%4d%4d\n",&temp1->number,temp1->name,temp1->press,&temp1->presstime,temp1->author,&temp1->total,&temp1->exist);temp1->next=NULL;temp->next=temp1;temp=temp->next;}printf("\n书籍信息读取成功...");return Bhead;}}reader *Rload(){FILE *p;int i;reader *temp,*temp1;reader *Rhead=(reader*)malloc(sizeof(reader));Rhead->next=NULL;if((p=fopen("reader.txt","r"))==NULL){printf("\n打开文件reader.txt失败,请检查");return Rhead;}else{fgetc(p);if(!feof(p)){rewind(p);temp=(reader*)malloc(sizeof(reader));fscanf(p,"%12d%10s%3c%8d%2d%12s",&temp->number,temp->name,&temp->sex,&temp->residue,&temp->limit,temp->password);for(i=0;i<10;i++){fscanf(p,"%6d",&temp->borrowed[i][0]);fscanf(p,"%10d",&temp->borrowed[i][1]);}temp->next=NULL;Rhead->next=temp;}while(!feof(p)){printf("\a");temp1=(reader*)malloc(sizeof(reader));fread(temp1,sizeof(reader),1,p);temp1->next=NULL;temp->next=temp1;temp=temp->next;}printf("\n读者信息读取成功...");return Rhead;}}void Bsave(book *Bhead){FILE *p;book *temp=Bhead->next;if(temp==NULL)return;else{if((p=fopen("book.txt","w"))==NULL)printf("\n打开book.txt失败...");while(temp!=NULL){showB(temp);fprintf(p,"%14d%12s%14s%8d%14s%4d%4d\n",temp->number,temp->name,temp->press,temp->presstime,temp->author,temp->total,temp->exist);temp=temp->next;}printf("\n存储书籍成功...");}}void Rsave(reader *Rhead,book *Bhead){FILE *p;int i;reader *temp=Rhead->next;if(temp==NULL)return;else{if((p=fopen("reader.txt","w"))==NULL)printf("\n打开reader.txt失败...");while(temp!=NULL){Sleep(1000);showR(temp,Bhead);fprintf(p,"%12d%10s%3c%8d%2d%12s",temp->number,temp->name,temp->sex,temp->residue,temp->limit,temp->password);for(i=0;i<10;i++){fprintf(p,"%6d",temp->borrowed[i][0]);fprintf(p,"%10d",temp->borrowed[i][1]);}temp=temp->next;}printf("\n存储读者成功...");}}

meun.cpp
#include "library.h"void style(){system("mode con cols=90 lines=30");system("color 0f");system("cls");}void intpsd(char *psd){int i=0; char c;while((c=getch())!=13){if (c!='\b'&&c!='\t'&&i<20){psd[i]=c;putchar('*');i++;}if(c=='\b'&&i>0){printf("\b \b");i--;}    }psd[i]='\0';return;}void menu(book *Bhead,reader *Rhead){reader *tempr;style();char m;int i;while(1){printf("\n\t                        ┏━━━━━━━━━━┓                        ");printf("\n\t◢━━━━━━━━━━━┫图书馆              ┣━━━━━━━━━━━━━━━━━◣");printf("\n\t┃                      ┗━━━━━━━━━━┛");printf("\n\t┃");printf("\n\t┃    1﹑登陆");printf("\n\t┃");printf("\n\t┃    2﹑注册");printf("\n\t┃");printf("\n\t┃┗━━━━━>按任意键退出<━┃");printf("\n\t◥━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◤\n");fflush(stdin);m=getch();if(m=='2'){char message[] = "\n正在进入请稍候....      ";for(i=0;i<strlen(message);i++){printf("%c",message[i]);Sleep(50);}system("cls");reg(Rhead);}elseif(m=='1'){char message[] = "\n正在进入请稍候....      ";for(i=0;i<strlen(message);i++){printf("%c",message[i]);Sleep(50);}system("cls");tempr=login(Rhead,Bhead);if(tempr==NULL) continue;menu2(tempr,Rhead,Bhead);}else{system("cls");Rsave(Rhead,Bhead);Bsave(Bhead);exit(0);}}}void menu2(reader *temp,reader *rhead,book *bhead){style();char i;getch();system("cls");while(1){printf("\n                        ┏━━━━━━━━┓                        ");printf("\n◢━━━━━━━━━━━┫图书馆菜单      ┣━━━━━━━━━━━◣");printf("\n┃                      ┗━━━━━━━━┛┃");printf("\n┃                      ┏━━━━━━━━┓┃");printf("\n┃                      ┃请选择您的操作: ┃┃");printf("\n┃                      ┃                ┃┃");printf("\n┃                      ┃        1﹑借书 ┃┃");printf("\n┃                      ┃        2﹑还书 ┃┃");printf("\n┃                      ┃    3﹑个人信息 ┃┃");printf("\n┃                      ┃    4﹑返回上级 ┃┃");printf("\n┃                      ┃    5﹑退出系统 ┃┃");if(temp->limit==1) printf("\n┃                      ┃        6﹑入库 ┃┃");else ;printf("\n┃                      ┗━━━━━━━━┛┃");printf("\n◥━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◤\n");i=getch();switch(i){case '1':borrow(temp,bhead);break;case '2':returnbook(bhead,temp);break;case '3':showR(temp,bhead);break;case '4':menu(bhead,rhead);break;case '5':Rsave(rhead,bhead);Bsave(bhead);exit(0);case '6':insert(bhead);break;default:break;}}}long backtime(){long t;time_t timep;struct tm *p;time(&timep);    p=localtime(&timep);t=(1900+p->tm_year)*10000+(1+p->tm_mon)*100+p->tm_mday;return t;}

search.cpp
#include"library.h"book *S_name(book *head,char name[]){book *temp=head->next;if(temp==NULL)printf("\n书库中还没有书籍,请入库!");else{while(temp!=NULL){if(strcmp(temp->name,name)==0){printf("\n书名为<<%s>>的书存在!",name);break;}elsetemp=temp->next;}}return temp;}void S_author(book *head){char author[30];book *temp=head->next;if(temp==NULL)printf("\n书库中还没有书籍,请入库!");else{printf("\n请输入您要查找的作者名:");scanf("%s",author);while(temp!=NULL){if(strcmp(author,temp->author)==0)showB(temp);temp=temp->next;}}getch();}keynode *initindex(book *head){int i;book *temp=head->next;keynode *tempkey,*p;printf("\n初始化索引表开始...");keynode *keyhead=(keynode*)malloc(sizeof(keynode));keyhead->next=NULL;tempkey=keyhead->next;if(temp!=NULL){p=(keynode*)malloc(sizeof(keynode));p->key=temp->number;p->adress=temp;p->next=NULL;keyhead->next=p;tempkey=keyhead->next;}while(temp!=NULL){for(i=0;i<5&&temp->next!=NULL;i++){temp=temp->next;}if(i<4)return keyhead;else{p=(keynode*)malloc(sizeof(keynode));p->key=temp->number;p->adress=temp;p->next=NULL;tempkey->next=p;tempkey=tempkey->next;}}getch();return keyhead;}void delkey(keynode *keyhead){keynode *temp;if(keyhead->next==NULL){free(keyhead);}else{while(keyhead!=NULL){temp=keyhead;keyhead=keyhead->next;free(temp);}}printf("\n索引表清空!");}book *S_number(long num,book *bhead){int i;book *p;keynode *keyhead=initindex(bhead);keynode *tempkey=keyhead->next;if(tempkey==NULL){printf("\n书库无记录,请输入!");delkey(keyhead);return NULL;}else{while(tempkey->next!=NULL){if(tempkey->key<num&&tempkey->next->key<num)tempkey=tempkey->next;else break;}if(tempkey==NULL){printf("没有找到编号为%d的书籍!",num);delkey(keyhead);return NULL;}else{p=tempkey->adress;for(i=0;i<5&&p!=NULL;i++){if(p->number==num){showB(p);delkey(keyhead);return p;}elsep=p->next;}delkey(keyhead);return NULL;}}}reader *S_reader(reader *rhead,long num){reader *temp=rhead->next;if(temp==NULL){printf("\n文件中没有数据导入,请检查修复系统!");return NULL;}else{while(temp){if(temp->number==num)return temp;elsetemp=temp->next;}return temp;}}

showing.cpp
#include"library.h"void showR(reader *tr,book *bhead){int i;book *p;printf("\n                      ╔════════╗");printf("\n╔══════════╣读者信息╠══════════╗");printf("\n║╚════════╝║");printf("\n╠══════╦═════╦═══╦════╦════╦═══╣");printf("\n║借阅证号║姓名║性别║剩余可借║已借本数║权限║");printf("\n╠══════╬═════╬═══╬════╬════╬═══╣");printf("\n║%12d║%10s║%6s║%8d║%8d║%6s║",tr->number,tr->name,sc(tr->sex),tr->residue,10-tr->residue,lc(tr->limit));printf("\n╚══════╩═════╩═══╩════╩════╩═══╝");printf("\n                          以下为所借书籍信息:\n");for(i=0;i<10;i++){if(tr->borrowed[i][0]==0)continue;else{printf("\n %d",tr->borrowed[i][0]);p=S_number(tr->borrowed[i][0],bhead);printf("\n┌────┬──────┬───────┬────┬───────┬────┬────┐");printf("\n│书本编号│书籍名称│出版社名称│出版时间│作者│借书日期│可借时间│");printf("\n├────┼──────┼───────┼────┼───────┼────┼────┤");printf("\n│%8d│%12s│%14s│%8d│%14s│%8d│ 2个月│",p->number,p->name,p->press,p->presstime,p->author,tr->borrowed[i][1]);printf("\n└────┴──────┴───────┴────┴───────┴────┴────┘\n");}}}void showB(book *p){printf("\n┌────┬──────┬───────┬────┬───────┬──┬──┐");printf("\n│书本编号│书籍名称│出版社名称│出版时间│作者│共计│可借│");printf("\n├────┼──────┼───────┼────┼───────┼──┼──┤");printf("\n│%8d│%12s│%14s│%8d│%14s│%4d│%4d│",p->number,p->name,p->press,p->presstime,p->author,p->total,p->exist);printf("\n└────┴──────┴───────┴────┴───────┴──┴──┘\n");}char *sc(char p){if(p=='F'||p=='f')return "女";elsereturn "男";}char *lc(int i){if(i==1)return "管理员";elsereturn "读者";}


main.cpp
#include"library.h"int main(void){book *Bhead;reader *Rhead;Bhead=Bload();Rhead=Rload();menu(Bhead,Rhead);Rsave(Rhead,Bhead);Bsave(Bhead);getch();}


原创粉丝点击