1、基于C语言图书管理系统包含源代码图书馆管理系统设计报告(数据结构)山 东 科 技 大 学 小组分工说明小组编号 题 目: _图书馆管理系统 小组分工情况:徐 倩:用户模块的主要设计徐振华:管理员模块的设计以及用户注册模块的设计组长签字: 指导教师对课程设计的评价成绩: 指导教师签字: 年 月 日 1、需求分析1.1、系统概述一直以来人们使用传统的人工方式管理图书馆的日常工作,对于图书馆的借书和还书过程,想必大家都已很熟悉。在计算机尚未在图书馆广泛使用之前,借书和还书过程主要依靠手工。一个最典型的手工处理还书过程就是:读者将要借的书和借阅证交给工作人员,工作人员将每本书上附带的描述书的信息的卡片
2、和读者的借阅证放在一个小格栏里,并在借阅证和每本书贴的借阅条上填写借阅信息。这样借书过程就完成了。还书时,读者将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息,这样还书过程就完成了。 以上所描述的手工过程的不足之处显而易见,首先处理借书、还书业务流程的效率很低,其次处理能力比较低,一段时间内,所能服务的读者人数是有限的。利用计算机来处理这些流程无疑会极大程度地提高效率和处理能力。我们将会看到排队等候借书、还书的队伍不再那么长,工作人员出错的概率也小了,读者可以花更多的时间在选择书和看书上。 为方便对图书馆书籍、读者资料、借还书等进行高效的管理,特编写该程
3、序以提高图书馆的管理效率。使用该程序之后,工作人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,给出统计表格,以便全面掌握图书的流通情况。图书管理系统是一种基于集中统一规划的数据库数据管理新模式。在对图书、读者的管理,其实是对图书、读者数据的管理。本系统的建成无疑会为管理者对图书管理系统提供极大的帮助。图书管理系统是图书馆的重要组成部分,一般分为两大部分,流通系统和采购系统。采购系统分为订单管理、图书入库、图书著录、图书上架、新书上报和书目审查、系统设置。流通系统分为图书管理、读者管理、借阅证管理、图书借阅、图书归还、系统设置等模块。其中,图书借阅、图书归还等。核
4、心模块为采购系统:图书入库、图书上架;流通系统:图书管理、读者管理、借阅证管理。1.2实现功能(1) 管理员模块建立一个图书馆管理信息数据库文件,输入若干图书的记录,建立一个以书号为 关键字的索引文件以及相关的索引链头文件。实现a:采编入库,新采购一种书,经分类和确定书号后登陆图书账目中去。如果这种书已经存在,则在数目存量加入增加数量。 b:清除入库。 某种书已无保留价值,将它将图书账目中删去。 c: 增加用户及注销用户 (本人所作的附加内容,绝无抄袭) d: 发布公告 (本人所作的附加内容,绝无抄袭) e: 修改密码 (本人所作的附加内容,绝无抄袭)(2) 用户模块建立关于书号,书名,作者及
5、出版社的图书馆查询。 实现图书的借还子系统,包括建立书的读者文件,借还文件,读者管理及图书借还等相关出处理。 实现 a:借阅,如果一种书的现存大于零,则借出一本书,登记借书的帐号和还书日期。 b:归还: 注销对借还读者的登记,改变该书的现存量。 c: 查询书目及个人借书情况 (附加内容) d: 查看公告 (附加内容) e: 修改密码及个人信息 (附加内容)(3) 用户注册 (附加内容)让用户建立自己的账号 1.3 模块结构 由上述内容的实现功能,作出如下结构图: 1.4 程序流程图 (1) 主函数流程图(2) 管理员模块流程图(3) 用户模块流程图2 设计概要2.1 数据结构体设计typede
6、f struct Book /书目种类结构体,内容存储在book.txt文件 char num10; /书目种类编号 char name20; /书名 char writor20; /作者 char pub30; /出版社 char total3; /总数量 char left3; /在馆数量;typedef struct Num /书目详细结构体,根据书目种类而生成的详细书目信息,存储/在booknum.txt文件内char bkid15; /书目ID 如果一书书目种类编号是001,总数量是3,则自动/、/生成书目ID为001001、001002、001003 而入库 char name20
7、; /对应于书名 char location10; /该书的在馆位子 如5445-667 char pid20; /如果该书被借出,则存储借书的用户编号否则为“在馆”状态 char time110; /若该书被借出,存储最晚还书时间否则为“在馆” char status15; /在馆状态 ;typedef struct Blist /书目种类信息的链表 struct Book book; struct Blist *next;typedef struct Nlist /详细书目信息链表 struct Num num; struct Nlist *next;typedef struct Pers
8、on /用户信息结构体,存储在person.txt文件内 char pid20; /用户ID、主键 char pname20; /用户名字 char phone15; /用户电话 char address40; /用户地址 char counter2; /已经借书数量 char password12; /登入密码;/typedef struct Plist /用户信息链表 struct Person person; struct Plist *next;/typedef struct Admin /管理员信息结构体存储在admin.txt文件内 char name20; /管理员名字,也是登入
9、账号 char code20; /登入密码;/typedef struct New /公告信息结构体 存储在new.txt文件内 char newid8; /公告编号 char title20; /公告主题;typedef struct Alist /管理员信息链表 struct Admin admin; struct Alist *next;/2.2函数功能、参数说明(1)管理员模块的函数int admcode(); /管理员登录密码验证int Addperson(); /管理员增加用户int Addbook(); /管理员增加书目信息void adminmenu(); /管理员主菜单voi
10、d AdminSeek(); /管理员查询书目void Modifybk(); /管理员修改书目信息void AdModifycode(); /管理员修改密码void Pubnews(); /管理员发布信息void Deletbk(); /管理员删除书目信息void Deletp(); /管理员删除用户信息int Findpid(char *num); /查找用户id(2)用户模块的函数char* Deadline(); /得到用户还书时间int usercode(); /用户登录密码验证void Borrow(char *num,struct Nlist *head2); /用户借书操作vo
11、id Myinfo(); /用户查看借书信息void usermenu(); /用户主菜单void Seekborrow(); /用户查找书目信息int Find(char *num,char *pass); /用户登录认证信息int shownew(); /用户查看公告列表void readnew(); /用户查看公告void Mdmyinfo(); /用户修改个人信息void Modifycode(); /用户修改信息void Return(); /用户还书操作void Giveback(char *num); /用户个人还书细节函数(3)注册用户模块函数int Regperson();
12、/注册新用户(4)公共函数struct Blist *Initbooklist(); /初始化书目种类信息列表struct Nlist *Initnumlist(); /初始化书目详细信息列表struct Alist *Initadminlist(); /初始化管理员信息列表struct Plist *Initpersonlist(); /初始化用户信息列表struct Newlist *Initnewlist(); /初始化公告列表int Savebknum(struct Nlist *head); / 保存书目详细信息int Savebk(struct Blist *head); /保存书
13、目种类信息 void Menulog(); /主菜单int Findnum(char *num); /查找图书书号int Showdail(char *num); /显示图书编号为num的详细信息int Findbkname(char *bkname); /查找图书书名int Findpub(char *bkname); /查找图书出版社int Findwriter(char *bkname); /查找图书作者int Savepeople(struct Plist *head); /保存用户信息2.3 主函数程序void main() while(1) Menulog(); /主菜单:管理员登
14、入、用户登入、注册用户 3详细设计3.1管理员模块主要函数的实现int admcode() /管理员登录密码验证,用户登录密码验证同理不做过多解释 FILE *fp; char inputname20, inputcode20,c; int flag=0,j=0; struct Admin admin; printf(tt*n); printf(n); printf(ttt 请输入你的用户名:); scanf(%s,inputname); /输入登录用户名 printf(ntt*n); printf(nn); printf(ttt 请输入密码:); c=getch(); /输入登录密码 if(
15、c!=r)printf(*); while(c!=r) inputcodej+=c; c=getch(); if(c!=r)printf(*); /实现用*来隐藏真实密码 else inputcodej=0; printf(n); fp=fopen(admincode.txt,r); while(!feof(fp) fscanf(fp,%s %s,admin.name,admin.code); if(strcmp(admin.name,inputname)=0&strcmp(admin.code,inputcode)=0)flag=1;strcpy(idname,inputname);strc
16、py(code,admin.code);break; /用户名密码进行比较 fclose(fp); return flag; /返回登录结果int Addperson() /管理员增加用户 FILE *in; int i,n; struct Person p; in=fopen(person.txt,a); printf(nntttt请输入你要加入的用户个数:); /管理员本次输入用户的个数 scanf(%d,&n); for(i=0;in;i+) printf(ttt*输入用户ID:); scanf(%s,p.pid); while(Findpid(p.pid)=1) /查看这个用户ID是否
17、已经存在 puts(tttID号已经存在!); printf(ttt*重新输入ID:); scanf(%s,p.pid); printf(ttt*输入用户的名字:); scanf(%s,p.pname); printf(ttt*输入用户电话:); scanf(%s,p.phone); printf(ttt*输入用户地址:); scanf(%s,p.address); strcpy(p.password,p.phone); strcpy(p.counter,0); fprintf(in,%s %s %s %s %s ,p.pid,p.pname,p.phone,p.address,p.passw
18、ord,p.counter); fclose(in); return 1;int Addbook() /管理员增加书目信息 FILE *in1,*in2; int i,n,j,total; char ch4; char nu15; struct Book b; struct Num nm; in1=fopen(book.txt,a); in2=fopen(booknum.txt,a); printf(ntt请输入你要加入书目的种数:); scanf(%d,&n); for(i=0;in;i+) printf(ttt第%d本书的信息nn,i+1); printf(ttt*输入书本ID:); sc
19、anf(%s,b.num); while(Findnum(b.num)=1) /查看这个书目种类编号是否已经存在 puts(tttID号已经存在!); printf(ttt*重新输入ID:); scanf(%s,b.num); printf(ttt*输入书名:); scanf(%s,b.name ); printf(ttt*输入书的数量:); scanf(%s,b.total); printf(ttt*输入书的出版社:); scanf(%s,b.pub ); printf(ttt*输入书的作者:); scanf(%s,b.writor); printf(ttt*输入书所在位置:); scanf
20、(%s,nm.location ); strcpy(nm.pid,无人借阅); strcpy(nm.status ,在馆); strcpy(nm.time1 ,在馆); strcpy(nm.name ,b.name); strcpy(b.left ,b.total); total=atoi(b.total); fprintf(in1,%s %s %s %s %s %sn,b.num ,b.name,b.writor,b.pub,b.total,b.left); for(j=1;jbook.num)=0) flag=1; puts( -该书的原始信息-); printf( 编号t书名 tt作者t
21、t出版社 t剩余数量n); puts( -); printf( %-12s %-16s %-12s %-12s t%-3sn,head-book.num,head-book.name,head-book.writor,head-book.pub,head-book.left ); puts( n -开始输入的新的信息-n); printf(nttt请输入新的书名:); scanf(%s,bkname); printf(nttt请输入新的作者名:); scanf(%s,writer); printf(nttt请输入新的出版社名:); scanf(%s,pub); printf(nttt请输入新增
22、的数量:); scanf(%d,ad); l=atoi(head-book.left); t=atoi(head-book.total); t=t+ad; l=l+ad; itoa(1,ch,10); strcpy(head-book.left,ch); itoa(t,ch,10); strcpy(head-book.total,ch); strcpy(head-book.name,bkname); strcpy(head-book.writor,writer); strcpy(head-book.pub,pub); while (head2!=NULL) if (strncmp(num,he
23、ad2-num.bkid,strlen(head2-num.bkid)-3)=0) strcpy(head2-num.name,bkname); head2=head2-next; puts( n -信息修改成功-n); head=head-next; if (flag=0) printf(nnttt编号为%s的书不存在!nn,num); Savebk(p); Savebknum(p2);void AdModifycode() /管理员修改密码,用户修改密码同理不做过多解释 char code120; char code220; char c; int j=0; struct Alist *h
24、ead,*head2; head=Initadminlist(); head2=head; puts(nnttt开始修改密码nn); printf(nnttt请输入原始密码:); scanf(%s,code1); if (strcmp(code,code1)=0) printf(nnttt请输入新密码:); c=getch(); if(c!=r)printf(*); while(c!=r) code1j+=c; c=getch(); if(c!=r)printf(*); else code1j=0; printf(nnttt请再一次输入新密码:); c=getch(); j=0; if(c!=r)printf(*); while(c!=r) code2j+=c; c=getch(); if(c!=r)printf(*); else code2j=0; if (strcmp(code1,code2)=0) while (head!=NULL) if (strcmp(idname,head-admin.name)=0) strcpy(hea
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1