⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tushu.c

📁 本源码是用C语言编写的简单的图书管理系统
💻 C
字号:
/* 

课题描述:利用C语言以及数据结构知识。做一模拟图书管理系统。 

*/ 

#include<stdio.h> 

#define Reader_Books 2 /*读者可以借阅书的最大数量*/ 

#define Reader_All    20 /*最大读者数量*/ 

#define Book_All      40 /*最大数目数量*/ 

#define EXIT          goto Loop 

#define EXIT2         goto Loop2 

#define EXIT3         goto Loop3 

int AdministratorKey=1234; /*初始管理员密码*/ 

int Reader_Number=7; /*初始书数量*/ 

typedef struct Readers{ /*读者属性*/ 

long id; /*读者号*/ 

char *name; /*读者姓名*/ 

int   key; /*读者密码*/ 

int   flag; /*读者标志位,1:活跃,0:被冻结(不可以借书)*/ 

int BooksNumber; /*已经借阅的书数量*/ 

long book_list[2]; /*用于存储已借书条形码*/ 

}Readers; 

Readers reader[Reader_All]={{0001,"lxy",2520,1,0},{0002,"sh",2518,1,0},{0003,"wh",2521,1,0},{0004,"tj",2516,1,0},{0005,"zh",2519,1,0},{0006,"wh",2514,1,0},{0007,"srt",2517,1,0}}; /*初始数据*/ 

typedef struct Books{ /*书刊属性*/ 

long id; /*图书编号*/ 

long uid; /*图书条形码*/ 

char *name; /*图书名称*/ 

int   flag; /*图书标志位,1:在馆,0:已借出*/ 

}Books; 

Books book[Book_All]={{1001,1987,"C",1},{1001,1988,"C#",1},{1002,1989,"VC",1},{1002,1990,"VB",1},{1003,1991,"B",1},{1004,1992,"B+",1},{1005,1993,"Basic",1}}; 

int Book_Number=7; /*初始数据*/ 

/*/////////////////////////////////////*/ 


int Search_Reader_ID(long Reader_ID) 

{ /*根据已给出的读者编号,查找其在读者数据库中的位置并返回其位置*/ 

int i=0; 

while((Reader_ID!=reader[i].id)&&(i<Reader_Number)) 

i++; 

return (Reader_Number-i)? i:-1; 

} 


int Search_Book_UID(long Book_UID) 

{ /*根据已给出的图书条形码,查找其在图书数据库中的位置并返回其位置*/ 

int i=0; 

while((Book_UID!=book[i].uid)&&(i<Book_Number)) 

i++; 

return (Book_Number-i)?i:-1; 

} 


void BookRegistration() 

{ /*期刊登记,图书编号,条形码,名称,其中条形码是唯一的*/ 

Books b; 

int i; 

printf("Input the book's information:\n"); 

printf("    id:"); 

scanf("%ld",&b.id); 

printf(" uid:"); 

scanf("%ld",&b.uid); 

printf(" name:"); 

scanf("%s",b.name); 

b.flag=1; 

i=0; 

while(book[i].uid!=b.uid&&i<Book_Number) 

i++; 

if(i==Book_Number) 

{ 

book[Book_Number]=b; 

Book_Number++; 

printf("Registed!\n"); 

} 

else 

printf("This book has exist in the lib\n"); 

} 

void Out_Reader() 

{ /*显示所有读者及其标志位*/ 

int i; 

printf("\nReader list:     ID               NAME             KEY              STATE    \n"); 

for(i=0;i<Reader_Number;i++) 

printf(" %ld %s %d %d\n",reader[i].id,reader[i].name,reader[i].key,reader[i].flag); 

} 




void Delete() /*删除某读者*/ 

{ 

void Write_Off(int i); 

long id; 

int i; 

printf("\nWhich user would you want to delete,Input the id:"); 

scanf("%ld",&id); 

i=Search_Reader_ID(id); 

if(i>=0) 

Write_Off(i); 

else 

printf("\nThere isn't the reader\n"); 

} 

void Freeze() /*冻结某读者,使其不能借阅图书*/ 

{ 

long id; 

int i; 

printf("Which user would you to freeze,Input the id:"); 

scanf("%ld",&id); 

i=Search_Reader_ID(id); 

if(i>=0) 

reader[i].flag=0; 

else 

printf("\nThere isn't the reader\n"); 

} 



/*///////////////////////LOGIN////////////////////////*/ 

void Regist() /*新用户注册*/ 

{ 

Readers someone; 

printf("\nInput a new ID:"); 

do 

{ 

scanf("%ld",&someone.id); 

}while(!(Search_Reader_ID(someone.id)>=0)); 

printf("\nInput a new key:"); 

scanf("%d",&someone.key); 

printf("\nInput the name:"); 

scanf("%s",someone.name); 

reader[Reader_Number].id=someone.id; 

reader[Reader_Number].key=someone.key; 

reader[Reader_Number].name=someone.name; 

reader[Reader_Number].flag=1; 

reader[Reader_Number].BooksNumber=0; 

Reader_Number++; 

} 

void Out_Book() /*显示所有图书及其属性*/ 

{ 

int i; 

printf("\nBook list:       ID               UID             NAME            STATE    \n"); 

for(i=0;i<Book_Number;i++) 

printf(" %ld  %ld  %s  %d\n",book[i].id,book[i].uid,book[i].name,book[i].flag); 

}




void Borrow(int i) /*读者数据库中第i个读者借阅图书*/ 

{

void Look_Up_BOOK_ID(long ID);

void Look_Up_BOOK_NAME(char *name);

long id;

char *name=NULL;

int j;

char ch;

printf("Which methord to look up the book you want to borrow: I(id) or N(name)?\n");

getchar();

ch=getchar();

if(ch=='i'||ch=='I')

{

printf("\nInput the id you want to borrow:");

scanf("%ld",&id);

Look_Up_BOOK_ID(id);

printf("\nInput the uid of the book you want to borrow:");

scanf("%ld",&id);

j=Search_Book_UID(id);

if(j>=0)

{

reader[i].book_list[reader[i].BooksNumber]=id;

reader[i].BooksNumber++;

book[j].flag=0;

}

else

printf("There is not the book.\n");

}

else if(ch=='n'||ch=='N')

{

printf("\nInput the book name you want to borrow:");

scanf("%s",name);

Look_Up_BOOK_NAME(name);

printf("\nInput the uid of the book you want to borrow:");

scanf("%ld",&id);

j=Search_Book_UID(id);

if(j>=0)

{

reader[i].book_list[reader[i].BooksNumber]=id;

reader[i].BooksNumber++;

book[j].flag=0;

}

else

printf("There is not the book.\n");

}

}


void Return(int i) /*读者数据库中第i个读者归还图书*/ 

{

long uid;

char *name=NULL;

int j;

char ch;

printf("\nInput the uid of the book you want to return:\n");

scanf("%ld",&uid);

j=Search_Book_UID(uid);

book[j].flag=1;

reader[i].BooksNumber--;

reader[i].book_list[reader[i].BooksNumber]=0;

}

void Write_Off(int i) /*读者数据库中第i个读者注销帐号*/ 

{

int j;

if(i<Reader_Number-1)

for(j=i;j<Reader_Number-1;j++)

reader[j]=reader[j+1];

Reader_Number--;

}

void Look_Up_BOOK_ID(long ID) /*根据给出的图书编号查找图书信息*/ 

{

int i=0;

while(i<Book_Number)

{

if(book[i].id==ID)

{

if(book[i].flag==1)

printf("ID:%ld UID:%ld Name:%s Flag:In the lib(在馆)\n",book[i].id,book[i].uid,book[i].name); 

else

printf("ID:%ld UID:%ld Name:%s Flag:Not in the lib(已借出)\n",book[i].id,book[i].uid,book[i].name); 

}

i++;

}

}




void Look_Up_BOOK_NAME(char *name) /*根据给出的图书名称查找图书信息*/ 

{

char *p;

char *q;

int   len,i,j,k;

len=strlen(name);

for(i=0;i<Book_Number;i++)

{

j=strlen(book[i].name);

if(j==len)

{

p=name;

q=book[i].name;

k=0;

while(k<len)

{

if(p[k]==q[k])

k++;

else

break;

}

if(k<len)

continue;

else

{

if(book[i].flag==1)

printf("ID:%ld UID:%ld Name:%s Flag:In the lib(在馆)\n",book[i].id,book[i].uid,book[i].name); 

else

printf("ID:%ld UID:%ld Name:%s Flag:Not in the lib(已借出)\n",book[i].id,book[i].uid,book[i].name); 

}

}

}

}

int Login() /*普通用户登录*/ 

{

Readers someone;

int i=0;

int acount;

char ch;

long id;

char *name;

printf("\nInput your ID:");

scanf("%ld",&someone.id);

i=Search_Reader_ID(someone.id);

if(i<0)

{

printf("You haven't regist,would you want regist now? Y or N:");

getchar();

ch=getchar();

switch(ch)

{

case 'y':

case 'Y':Regist();break;

case 'n':

case 'N':return;

default:return;

}

}

else

{

acount=3;

do

{

if(acount==0)

return;

printf("\nInput the key:");

scanf("%d",&someone.key);

acount--;

}while(reader[i].key!=someone.key);

}

return i;

}




/*////////////////////////////////////*/ 

int main() /*主函数入口*/ 

{ 

Readers someone; 

char ch; 

int acount; 

long id; 

char *name=NULL; 

int i; 

int Key=-0101; 

printf("Press Enter to start:\n"); 

Loop:    getchar(); 

printf("What kind grade are you? A(Administrator) or G(General User) or E(exit)?\n"); 

ch=getchar(); 

if(ch=='A'||ch=='a') 

{ 

acount=3; 

do{ 

if(acount==0) 

EXIT; 

printf("Input the Key:"); 

scanf("%d",&Key); 

acount--; 

}while(Key!=AdministratorKey); 

Loop3: printf("\nNow You can:\n"); 

printf("     A:Scan the Books' list\n"); 

printf("     B:BookRegistration\n"); 

printf("     C:Scan the Readers' list\n"); 

printf("     D:Delete someone\n"); 

printf("     E:Freeze someone\n"); 

printf("     F:Change the AdministratorKey\n"); 

printf("     G:Back\n"); 

getchar(); 

ch=getchar(); 

switch(ch) 

{ 

case 'a': 

case 'A':Out_Book(book);EXIT3; 

case 'b': 

case 'B':BookRegistration();EXIT3; 

case 'c': 

case 'C':Out_Reader(reader);EXIT3; 

case 'd': 

case 'D':Delete();EXIT3; 

case 'e': 

case 'E':Freeze();EXIT3; 

case 'f': 

case 'F':printf("Input the new AdministratorKey:");scanf("%d",&Key);AdministratorKey=Key;EXIT3; 

case 'g': 

case 'G':EXIT; 

default:EXIT; 

} 

} 

else if(ch=='g'||ch=='G') 

{ 

i=Login(); 



Loop2: printf("\nNow you can:\n"); 

printf("     A:Scan the Books' list\n"); 

printf("     B:Borrow some Book\n"); 

printf("     C:Return some book\n"); 

printf("     D:Change the Key\n"); 

printf("     E:Write-off\n"); 

printf("     F:Look up some book\n"); 

printf("     G:Back\n"); 

getchar(); 

ch=getchar(); 

switch(ch) 

{ 

case 'a': 

case 'A':Out_Book();EXIT2; 

case 'b': 

case 'B':if(reader[i].BooksNumber<2)Borrow(i);EXIT2; 

case 'c': 

case 'C':if(reader[i].BooksNumber>0)Return(i);EXIT2; 

case 'd': 

case 'D':printf("Input the new key:");scanf("%d",&someone.key);reader[i].key=someone.key;EXIT2; 

case 'e': 

case 'E':if(reader[i].BooksNumber==0)Write_Off(i);else printf("Please return the books you have borrowed first!\n");EXIT; 

case 'f': 

case 'F': 

{ 

printf("Which methord :I(id) or N(name) to look up?\n"); 

getchar(); 

ch=getchar(); 

if(ch=='i'||ch=='I') 

{ 

printf("\nInput the book id:"); 

scanf("%ld",&id); 

Look_Up_BOOK_ID(id); 

} 

else if(ch=='n'||ch=='N') 

{ 

printf("\nInput the book name:"); 

scanf("%s",name); 

Look_Up_BOOK_NAME(name); 

} 

}EXIT2; 

case 'g': 

case 'G':EXIT; 

default:return; 

} 

} 

else if(ch=='e'||ch=='E') 

exit(0); 

return 0; 

} 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -