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