图书馆管理系统C语言程序设计.docx
《图书馆管理系统C语言程序设计.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统C语言程序设计.docx(72页珍藏版)》请在冰点文库上搜索。
图书馆管理系统C语言程序设计
HUNANUNIVERSITY
C语言程序训练
报告
【设计目的】
图书信息包括:
读者登录号、管理员登录号、图书编号、作者名、种类、出版社、图书库存、图书借出数目等.
图书信息管理系统,使之能提供以下功能:
1)系统以菜单方式工作
2)读者注册功能
3)读者登录功能
4)读者借书还书功能
5)查询读者借阅记录
6)查询在管图书信息功能
7)修改密码功能
8)管理员登录功能
9)增加、修改、删除图书功能
10)查看图书信息功能
【设计思路】
根据题目要求,应当把图书信息用结构体形式输入,应该提供以下结构体和文件的输入等操作:
在程序中需要实现图书信息录入,浏览,查询,删除和修改等功能的操作,所以需要建立相应的模块来实现:
另外还需提供选择菜单实现功能,在运行时达到所要求的目的;管理员和读者登录界面及各自功能应有不同的实现。
【总体设计】
【详细设计】
1.主函数
主函数设计要求简洁,只提供部分提示语和函数的调用
源代码为
//rkou.c程序的入口
#include
#include
#include
#include
#include"head.h"
#include"fuc.h"
#include"picture.h"
#include"jiangzhuo1.h"
#include"output.h"
main()
{inti=setup();
switch(i)
{case0:
while(n<50)
{conects(n);
}
default:
eros(i);
}
system("pause");
}
2.程序中全局变量声明定义,以及所有函数声明
源代码为
structbook//图书结构体声明
{charname[50],classic[10],writer[20];//书名,类别,作者
intjn;//借出数量
intzn;//在馆数量
intbh;//图书编号
};
structinformation//管理员和读者结构体声明
{charname[10],no[12],key[10];//姓名,账号,密码
};
structshow//图书借阅记录的结构体声明
{
charname1[10],name2[50],writer[20],no[12];//书名,读者姓名,书的作者,读者账号
intbh,o;//图书编号,借阅状况(未还,已还)
};
//以下为用到的全局变量
structbookbk;
structinformationaa,rr;
structinformationstu[100];
structbookbb[100];
structinformationad[100];
structshowss[100];
inti,j,k,s;
intn=0;
intx;
FILE*fp;
//以下函数主要功能:
方便窗口与用户之间交换信息
intregst();
voidpassword(char*a,intb,intj);//登陆时的输入函数
voidexamine(int*a,intb);//保证键入的数据是数字
voidchangepaw(inta,intb);//修改密码用到的提示函数
voidinputs0();//输出图书类别以供用户选择
voidinputs1(inta,intb,intc,intd,inte);//方便用户输入图书各项信息(如书名,编号)
voidinputs2(inta,intb,intc);//方便用户输入管理员的信息(如账号姓名)
voidinputs3(inta,intb,intc);//方便用户输入读者的信息(如账号姓名)
voideros(inti);//错误显示函数,操作一旦出错,则会出现相应的错误信息
voidconects(intj);//连接函数,选择界面
//一下函数主要用于改变文件的内容并保存
intsetup();//数据初始化函数
intxzc(charno[12],charkey1[10],charkey2[10],charname[10]);//读者注册函数
intexam(charno[10],charkey[10],intn);//密码账号检验函数
intmp(charno[12],charkey1[10],charkey2[10],charkey3[10],intn);//密码修改函数
voidpaixu();//对图书按照编号从小到大的顺序进行排列
intsc(intbh);//管理员删除图书信息函数
intzj(structbookbb);//管理员增加图书信息函数
intxg(structbookbb);//管理员修改图书信息函数
intjs(intbh,charno[12]);//借书函数
inths(intbh,charno[12]);//还书函数
intbh1(intbh);//判断该编号的图书信息是否存在函数
voidbh2(intbh);//按照图书编号显示图书信息函数
intsm1(charname[50]);//判断是否存在该名字的图书信息函数
voidsm2(charname[50]);//按照图书名字显示图书信息函数
intzz1(charwriter[20]);//判断是否存在该作者的图书信息函数
voidzz2(charwriter[20]);//按照图书作者显示图书信息函数
voidlb(charclassic[10]);//按类别显示图书信息
intrck1(intbh);//判断该编号的图书的借书记录是否存在
voidrck2(intbh);//按编号显示图书借书情况
intgck21(charno[12]);//判断该账号读者的借书记录是否存在
voidgck22(charno[12]);//按读者显示借书情况2
voidgck12();//显示全部借书情况
voidgck23();//管理员查看所有书的信息
voidcopy(intbh);//按编图书编号将图书信息暂时保存在另外一个结构体里面
voidcopy2(charno[12]);//按管理员账号将管理员信息暂时保存在另外一个结构体里面
voidcopy3(charno[12]);//按读者账号将读者信息暂时保存在另外一个结构体里面
//pic()函数:
每个函数表示一个界面,conects函数将它们连接起来
voidpic0();
voidpic1();
voidpic2();
voidpic3();
voidpic4();
voidpic5();
voidpic6();
voidpic7();
voidpic8();
voidpic9();
voidpic10();
voidpic11();
voidpic12();
voidpic13();
voidpic14();
voidpic15();
voidpic16();
voidpic17();
voidpic18();
voidpic19();
voidpic20();
voidpic21();
voidpic22();
voidpic23();
voidpic24();
voidpic25();
voidpic26();
voidpic27();
voidpic29();
voidpic30();
voidpic31();
voidpic32();
voidpic33();
voidpic34();
voidpic35();
voidpic36();
voidpic37();
voidpic38();
voidpic39();
voidpic40();
voidpic41();
voidpic42();
voidpic43();
voidpic44();
voidpic45();
voidpic46();
voidpic47();
voidpicc();
3.用户输入以及界面反馈用到的功能函数
源代码为
intregst()
{charnum[12],paw1[10],paw2[10],name[10];
inti;
printf("请输入账号\n(11字符以内,不能含有中文字符):
\n");
password(num,0,11);
printf("输入您的密码\n(9字符以内,不能含有中文字符):
\n");
password(paw1,1,9);
printf("请再次输入密码:
\n");
password(paw2,1,9);
printf("输入您的姓名:
\n");
gets(name);
system("cls");
i=xzc(num,paw1,paw2,name);
returni;
}
voidpassword(char*a,intb,intj)
{charc;
inti=0;
while((c=getch())!
='\r')
{if(c==8)
{printf("\b\b");
if(i>0)
i--;
}
elseif(i{if(b)printf("*");
elseprintf("%c",c);
a[i]=c;
i++;
}
if(i==j)
{printf("\a");
}
}
a[i]='\0';
printf("\n");
}
voidexamine(int*a,intb)
{while(!
scanf("%d",a))
{while(getchar()!
='\n');
printf("请输入数字!
!
\n");
}
rewind(stdin);
if(b)system("cls");
}
voidchangepaw(inta,intb)
{inti;
charc1[10],c2[10],c3[10];
printf("请输入原密码\n");
password(c1,1,9);
printf("请输入新密码\n");
password(c2,1,9);
printf("请再次输入新密码\n");
password(c3,1,9);
system("cls");
if(b)
{i=mp(aa.no,c1,c2,c3,b);
if(i)
{eros(i);n=27;
}
elsen=26;
}
else
{i=mp(rr.no,c1,c2,c3,b);
if(i)
{eros(i);n=44;
}
elsen=43;
}
}
voidinputs0()
{inti=1;
while(i==1)
{printf("1.A类\n2.B类\n3.C类\n4.D类\n5.E类\n6.F类\n");
examine(&i,1);
switch(i)
{case1:
strcpy(bk.classic,"A类");i=0;break;
case2:
strcpy(bk.classic,"B类");i=0;break;
case3:
strcpy(bk.classic,"C类");i=0;break;
case4:
strcpy(bk.classic,"D类");i=0;break;
case5:
strcpy(bk.classic,"E类");i=0;break;
case6:
strcpy(bk.classic,"F类");i=0;break;
default:
i=1;
}
}
}
voidinputs1(inta,intb,intc,intd,inte)
{inti;
switch(a)
{case1:
printf("请输入图书编号:
\n");examine(&bk.bh,1);
default:
;
}
switch(b)
{case1:
printf("请输入图书名称:
\n");gets(bk.name);
default:
;
}
switch(c)
{case1:
printf("请输入图书的作者:
\n");gets(bk.writer);
default:
;
}
switch(d)
{case1:
printf("请输入该图书的库存:
\n");examine(&bk.zn,1);
default:
;
}
system("cls");
switch(e)
{case1:
printf("请选择图书类别:
\n");inputs0();
default:
;
}
}
voidinputs2(inta,intb,intc)
{switch(a)
{case1:
printf("请输入账号:
\n");password(aa.no,0,11);
default:
;
}
switch(b)
{case1:
printf("请输入密码:
\n");password(aa.key,1,9);
default:
;
}
switch(c)
{case1:
printf("请输入姓名:
\n");gets(aa.name);
default:
;
}
system("cls");
}
voidinputs3(inta,intb,intc)
{switch(a)
{case1:
printf("请输入账号:
\n");password(rr.no,0,11);
default:
;
}
switch(b)
{case1:
printf("请输入密码:
\n");password(rr.key,1,9);
default:
;
}
switch(c)
{case1:
printf("请输入姓名:
\n");gets(rr.name);
default:
;
}
system("cls");
}
voideros(inti)//错误函数
{switch(i)
{case-1:
printf("error1!
初始化失败\n\n");break;
case-2:
printf("error2!
账号不存在\n\n");break;
case-3:
printf("error3!
账号不存在\n\n");break;
case-4:
printf("error4!
密码错误\n\n");break;
case-5:
printf("error5!
输入的密码不一致\n\n");break;
case-6:
printf("error6!
编号不存在\n\n");break;
case-7:
printf("error7!
书名不能为空\n\n");break;
case-8:
printf("error8!
作者名字不能为空\n\n");break;
case-9:
printf("error9!
无此图书编号的记录\n\n");break;
case-10:
printf("error10!
无此账号的记录\n\n");break;
case-11:
printf("error11!
原始密码输入错误\n\n");break;
case-12:
printf("error12!
您已经归还此书\n\n");break;
case-13:
printf("error13!
您所增加的图书编号已存在\n\n");break;
case-14:
printf("error14!
搜索不到此书的相关信息\n\n");break;
case-15:
printf("error15!
搜索不到该作者的信息\n\n");break;
case-16:
printf("error16!
打不开文件,保存失败\n\n");break;
case-17:
printf("error17!
该图书信息已存在\n\n");break;
case-18:
printf("error18!
您没有借过这本书\n\n");break;
case-19:
printf("error19!
您已经借阅了这本书,不能再借\n\n");break;;
case-20:
printf("error20!
抱歉,图书已经借完了\n\n");break;
case-21:
printf("error21!
账号已存在\n\n");break;
case-22:
printf("error22!
还有图书未还,不能删除该条信息\n\n");break;
default:
;
}
}
voidconects(intj)
{switch(j)
{case0:
pic0();break;
case1:
pic1();break;
case2:
pic2();break;
case3:
pic3();break;
case4:
pic4();break;
case5:
pic5();break;
case6:
pic6();break;
case7:
pic7();break;
case8:
pic8();break;
case9:
pic9();break;
case10:
pic10();break;
case11:
pic11();break;
case12:
pic12();break;
case13:
pic13();break;
case14:
pic14();break;
case15:
pic15();break;
case16:
pic16();break;
case17:
pic17();break;
case18:
pic18();break;
case19:
pic19();break;
case20:
pic20();break;
case21:
pic21();break;
case22:
pic22();break;
case23:
pic23();break;
case24:
pic24();break;
case25:
pic25();break;
case26:
pic26();break;
case27:
pic27();break;
case29:
pic29();break;
case30:
pic30();break;
case31:
pic31();break;
case32:
pic32();break;
case33:
pic33();break;
case34:
pic34();break;
case35:
pic35();break;
case36:
pic36();break;
case37:
pic37();break;
case38:
pic38();break;
case39:
pic39();break;
case40:
pic40();break;
case41:
pic41();break;
case42:
pic42();break;
case43:
pic43();break;
case44:
pic44();break;
case45:
pic45();break;
case46:
pic46();break;
case47:
pic47();break;
default:
;
}
}
4.文件操作各种函数
源代码为
//jiangzhuo1.h文件操作各种函数
intsetup()//数据初始化函数
{
FILE*fp;
fp=fopen("reader.txt","r");//对文档以只读的方式进行操作
if(fp==NULL)
{
return-1;//当文件打不开时返回-1
}
else
{
i=0;
while(!
feof(fp))
{
fscanf(fp,"%s%s%s",stu[i].name,stu[i].no,stu[i].key);//将文档里面的数据格式化读取到结构体数组里面
i++;
}
i=i-1;
}
fclose(fp);
fp=fopen("ad.txt","r");//对文档以只读的方式进行操作
if(fp==NULL)
{
return-1;//当文件打不开时返回-1
}
else
{
j=0;
while(!
feof(fp))
{
fscanf(fp,"%s%s%s",ad[j].name,ad[j].no,ad[j].key);//将文档里面的数据格式化读取到结构体数组里面
j++;
}
j=j-1;
}
fclose(fp);
fp=fopen("book.txt","r");//对文档以只读的方式进行操作
if(fp==NULL)
{
return-1;//当文件打不开时返回-1
}
else
{
k=0;
while(!
feof(fp))
{
fscanf(fp,"%d%s%s%s%d%d",&bb[k].bh,bb[k].name,bb[k].classic,bb[k].writer,&bb[k].zn,&bb[k].jn);//将文档里面的数据格式化读取到结构体数组里面
k++;
}
k=k-1;
}
fclose(fp);
fp=fopen("show.txt","r");//对文档以只读的方式进行操作
if(fp==NULL)
{
return-1;//当文件打不开时返回-1
}
else
{
s=0;
while(!
feof(fp))
{
fscanf(fp,"%s%s%d%s%s%d",ss[s