c语言版图书馆管理系统.docx
- 文档编号:7567676
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:32
- 大小:24.63KB
c语言版图书馆管理系统.docx
《c语言版图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《c语言版图书馆管理系统.docx(32页珍藏版)》请在冰豆网上搜索。
c语言版图书馆管理系统
#include
#include
#include
#include
#include
#defineBKsizeof(structbook)/*宏定义*/
#defineURsizeof(structuser)
structuser*add_userinformation(structuser*puser);/*各类函数的申明*/
voidsearch_bookinformation(structbook*pbook);
voidborrow_or_backbook(structbook*pbook,structuser*puser);
voidfix_userinformation(structuser*puser);
voidprint1(structuser*puser);
voidprint2(structbook*pbook);
structuser*delete_userinformation(structuser*puser);
voidfix_bookinformation(structbook*pbook);
structbook*delete_bookinformation(structbook*pbook);
structbook*add_bookinformation(structbook*pbook);
voidadd_userbalance(structuser*puser);
voidcheck_userinformation(structuser*puser);
voideliminate_userpassword(structuser*puser);
voiddestroy1(structuser*puser);
voiddestroy2(structbook*pbook);
voidkeep_borrow(structbook*pbook,structuser*puser);
voidback();
structuser/*用户结构体定义*/
{
charname[10];/*用户姓名*/
charsex[5];/*用户性别*/
charbirth[10];/*用户出生年月*/
charnumber[20];/*学生学号或教师工号*/
charlocated[20];/*所在学院*/
charattribute[15];/*用户类型*/
intbalance;/*用户余额*/
intborrow;/*当前借阅(图书)数*/
intthan;/*超期(图书)数*/
charpass_word[20];/*用户登录密码*/
structuser*next;
};
structbook/*图书结构体定义*/
{
charnameb[20];/*书名*/
charauthor[40];/*作者*/
charpublish[40];/*出版商*/
charyear[10];/*出版年月*/
intprice;/*价格*/
charISBN[40];/*索书号*/
charclassify[30];/*中图分类号*/
charstate[10];/*借阅状态*/
charlendpeople[15];/*借此书的人名,0表示没有人借这本书*/
longlendtime;/*借出去时间*/
structbook*next;/*结构体中的指针*/
};
voidmain()
{
inti=0,j=0,choice;
chara[9],b[7];
intc;
structuser*p1,*puser,*p;/*用户指针的定义*/
structbook*p2,*pbook;/*书籍指针的定义*/
FILE*pf1;
FILE*pf2;
pf1=fopen("userlist.txt","r");/*以只读方式打开存放用户信息的文档userlist.txt*/
pf2=fopen("booklist.txt","r");/*以只读方式打开存放书籍信息的文档booklist.txt*/
if(pf1==NULL)/*判断用户文件是否打开*/
{
printf("failedtoopenfile!
");
exit(0);
}
if(pf2==NULL)/*判断书籍文件是否打开*/
{
printf("failedtoopenfile!
");
exit(0);
}
puser=NULL;/*初始化链表指针*/
while(!
feof(pf1))/*在文件为结束前从文件读取数据构成链表*/
{
p1=(structuser*)malloc(UR);/*申请空间*/
fscanf(pf1,"%s%s%s%s%s%s%d%d%d%s",p1->name,
p1->sex,
p1->birth,
p1->number,
p1->located,
p1->attribute,
&p1->balance,
&p1->borrow,
&p1->than,
p1->pass_word);
p1->next=NULL;/*使第一个结构体的指针为空,作为链表读完的依据*/
if(puser==NULL)/*使另一个指针也指向新建立的结构体*/
puser=p1;
else
{
p1->next=puser;/*将第二个结构体的地址存放到第一个结构体的指针上*/
puser=p1;/*puser向前移动一次*/
}
}
fclose(pf1);/*将文件的数据全部读出到系统内存后,关闭文件*/
p1=puser;
pbook=NULL;/*书籍操作与用户一样,此处不再赘述*/
while(!
feof(pf2))
{
p2=(structbook*)malloc(BK);
fscanf(pf2,"%s%s%s%s%d%s%s%s%s%ld",p2->nameb,
p2->author,
p2->publish,
p2->year,
&p2->price,
p2->ISBN,
p2->classify,
p2->state,
p2->lendpeople,
&p2->lendtime);
p2->next=NULL;
if(pbook==NULL)
pbook=p2;
else
{
p2->next=pbook;
pbook=p2;
}
}
p2=pbook;
fclose(pf2);/*将文件的数据全部读出到系统内存后,关闭文件*/
p=puser;/*是p指向头用户指针*/
printf("############################################\n");
printf("#欢迎登录图书馆管理系统#\n");
printf("############################################\n");
while(j<3)/*此循环作为如果用户密码和账户输错,可有三次重新输入的机会*/
{
printf("请输入您的用户名:
");
scanf("%s",a);/*输入用户帐号*/
printf("\n");
printf("请输入您的密码:
");
while(i<6)/*输入用户密码并不显示所输入的内容*/
{
b[i]=getch();
printf("*");
i++;
}
b[i]='\0';
i=0;
//system("cls");
printf("\n");
while(puser!
=NULL)/*判断输入的帐号和密码,并根据不同的用户进入不同的界面*/
{
if(strcmp(puser->number,a)==0&&strcmp(puser->pass_word,b)==0)/*如果用户账号和密码都对再进行以下判断*/
{
if(strcmp(puser->attribute,"学生")==0||strcmp(puser->attribute,"老师")==0)
{/*如果帐号类型为学生或老师,进入以下界面*/
while(c!
=0)
{
printf("************************************\n");
printf("*读者功能选项:
*\n");
printf("*1.图书查询:
*\n");
printf("*2.借、还书:
*\n");
printf("*3.续借*\n");
printf("*4.修改读者信息*\n");
printf("*0.退出系统*\n");
printf("*输入内容0~4*\n");
printf("************************************\n");
printf("请选择操作:
");
scanf("%d",&choice);/*选择你所需要的操作,通过switch和case分流*/
switch(choice)
{
case1:
search_bookinformation(pbook);/*调用查书函数*/
break;
case2:
{
borrow_or_backbook(pbook,puser);/*调用借书和还书函数*/
print2(pbook);/*将操作后的书籍链表写回文件userlist.txt*/
print1(p);/*将操作后的用户链表写回userlist.txt*/
back();/*将文件中的数据从新读取和输回,使文件中数据循序保持与开始时相同*/
}
break;
case3:
keep_borrow(pbook,puser);/*调用续借图书函数*/
break;
case4:
{
fix_userinformation(puser);/*调用修改用户信息函数*/
puser=p1;/*在进入该操作界面时,puser指向的是登陆用户的数据结构体,在对链表进行操作后需将其输回文件,使puser指向第一个结构体,以便写回文件*/
print1(puser);
back();
}
break;
}
printf("按0退出系统,任意键返回上一页面");
scanf("%d",&c);
}
destroy1(puser);/*在操作完后将系统内存调用的空间释放掉*/
destroy2(pbook);/*在操作完后将系统内存调用的空间释放掉*/
exit(0);/*直接跳出程序*/
}
printf("\n");
if(strcmp(puser->attribute,"图书馆管理员")==0)
{
puser=p1;/*在进入该操作界面时,puser指向的是登陆用户的数据结构体,为方便对整个链表进行输回,使它指向第一个结构体*/
while(c!
=0)
{
printf("************************************\n");
printf("*图书管理员功能:
*\n");
printf("*1.添加图书信息:
*\n");
printf("*2.删除图书信息:
*\n");
printf("*3.修改图书信息:
*\n");
printf("*4.用户账号充值:
*\n");
printf("*0.退出系统*\n");
printf("*输入内容0~4*\n");
printf("************************************\n");
printf("请选择操作:
");
scanf("%d",&choice);
switch(choice)
{
case1:
pbook=add_bookinformation(pbook);/*调用添加图书函数*/
print2(pbook);/*与上述功能相同*/
print1(puser);
back();
break;
case2:
pbook=delete_bookinformation(pbook);/*调用删除图书函数*/
print2(pbook);
print1(puser);
back();
break;
case3:
fix_bookinformation(pbook);/*调用修改图书信息函数*/
print2(pbook);
print1(puser);
back();
break;
case4:
add_userbalance(puser);/*调用用户充值函数*/
print1(puser);
print2(pbook);
back();
break;
}
printf("按0退出系统,任意键返回上一页面");
scanf("%d",&c);
}
exit(0);
destroy1(puser);
destroy2(pbook);
}
printf("\n");
if(strcmp(puser->attribute,"系统管理员")==0)
{
puser=p1;
while(c!
=0)
{
printf("************************************\n");
printf("*系统管理员功能选项:
*\n");
printf("*1.添加用户信息;*\n");
printf("*2.删除用户信息;*\n");
printf("*3.查看用户信息;*\n");
printf("*4.清空用户密码;*\n");
printf("*0.退出系统*\n");
printf("*输入内容0~4*\n");
printf("************************************\n");
printf("请选择操作:
");
scanf("%d",&choice);
switch(choice)
{
case1:
puser=add_userinformation(puser);/*调用添加用户信息函数*/
print1(puser);
print2(pbook);
back();
break;
case2:
puser=delete_userinformation(puser);/*调用删除用户信息函数*/
print1(puser);
print2(pbook);
back();
break;
case3:
check_userinformation(puser);/*调用查看用户信息函数*/
break;
case4:
eliminate_userpassword(puser);/*调用修改用户密码函数*/
break;
}
printf("按0退出系统,任意键返回上一页面");
scanf("%d",&c);
}
destroy1(puser);
destroy2(pbook);
exit(0);
}
}
puser=puser->next;/*使puser指针向前移动一个单元*/
}
puser=p1;
printf("您的输入有误,请重新输入:
");
printf("\n");
j++;
}
}
voidsearch_bookinformation(structbook*pbook)/*查找图书信息函数的定义*/
{
charsearch_book[14];
printf("请输入您要找的书名:
");
scanf("%s",search_book);
printf("书名\t作者\t出版社\t出版年月\t价格\t索书号\t中图分号\t借阅状态\n");
while(pbook!
=NULL)
{
if(strcmp(pbook->nameb,search_book)==0)/*查找与你输入书名相匹配的书信息*/
{
printf("%s\t%s\t%s\t%s\t%d\t%s\t%s\t%s",pbook->nameb,
pbook->author,
pbook->publish,
pbook->year,
pbook->price,
pbook->ISBN,
pbook->classify,
pbook->state);/*输出图书的相关信息*/
printf("\n");
return;
}
pbook=pbook->next;/*使指针向前移动一个单元*/
}
if(pbook->nameb!
=search_book)
printf("您的输入有错:
");/*如果找不到于输入书名相匹配的书籍,输出您的输入有错*/
}
structuser*add_userinformation(structuser*puser)
{
structuser*p0,*p3,*p1;/*定义三个用户指针*/
p1=puser;/*使p1指向第一个结构*/
p0=(structuser*)malloc(UR);/*新申请一个空间,使p0指针指向这个空间*/
printf("请输入您添加的信息:
");
printf("姓名\t性别\t出生年月\t学号\t学院\t用户类型\t账户余额\t已借书数\t超期书数\t密码\n");
scanf("%s%s%s%s%s%s%d%d%d%s",p0->name,
p0->sex,
p0->birth,
p0->number,
p0->located,
p0->attribute,
&p0->balance,
&p0->borrow,
&p0->than,
p0->pass_word);
p3=p1;
if(p1==NULL)/*如果p1指向的空间是空的,将p0指向的地址赋值给p1,p0指向的结构体的指针部分为空*/
{
p1=p0;
p0->next=NULL;
}
if(strcmp(p0->number,p1->number)>=0)/*如果添加书的索书号比p1指向的图书的索书号大,将图书添加到链表的开头*/
{
p0->next=p3;
puser=p0;
}
while(strcmp(p0->number,p1->number)<0&&p1!
=NULL)/*如果添加书的索书号比p1指向的图书的索书号小,在链表读完之前进行以下循环*/
{
p3=p1;
p1=p1->next;
if(strcmp(p0->number,p1->number)>=0)/*当添加图书的索书号大于p1指向的图书索书号时,将书插入p1之后*/
{
p3->next=p0;
p0->next=p1;
}
}
return(puser);/*返回puser指针*/
}
voidborrow_or_backbook(structbook*pbook,structuser*puser)
{
chara[10],b[10];
intchoice;
longt1,t2;/*定义两个长整型变量,用于存放时间*/
printf("1-借书\n");
printf("2-还书\n");
printf("请选择:
");
scanf("%d",&choice);/*输入1或2,进行你想要的操作*/
switch(choice)
{
case1:
{
if(strcmp(puser->attribute,"老师")==0)/*此处设置权限,老师一次能借30本书,而学生只能借10本*/
{
if(puser->borrow=30)
{
printf("您已借三十本书,不能再借。
");
break;
}
}
if(strcmp(puser->attribute,"学生")==0)
{
if(puser->borrow=10)
{
printf("您已借十本书,不能再借。
");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言版 图书馆 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)