《129074340图书馆管理系统》由会员分享,可在线阅读,更多相关《129074340图书馆管理系统(23页珍藏版)》请在金锄头文库上搜索。
1、安徽工业大学程序实习综合实习报告课题名称:实习成员:姓名 学号 贡献率 ( %) e-mail 组长 王倩倩 129074340 50 成员 章梦兰 129074353 50 专业班级 : 网络工程 122 班指导 教师 : 陶陶2013 年 12 月 16 日课题名称:图书馆管理系统设计要点:完成图书馆管理系统大体上有两种库存信息:一是图书库存 ,我们使用的是结构体链表,而且分为两个结构体,一个是 图书名结构体 (内存有图书名和该图书的现库存量以及借阅量 和下一个不同图书的指针,每个图书名结构体里有 20 个图书实体的数组指针,以便于存放相同图书的借阅信息) 。struct Head_Boo
2、k int total;/ 每一种相同的书,存在的总数int count;/ 被借的书目char Book_Name50; struct Head_Book *next; struct Book *same20; ; 和一个 图书实体结构体 (内存有该图书的借阅信息,如借书时间和应该归还时间 , 以及罚款信息) 。struct Book char Book_Name50; char Author50; char Press50; char Public_Date20; int Price; struct Time Borrow_Date; struct Time Return_Date; ;
3、二是 学生账号库存 ,我们使用的是结构体数组。创建一个学生结构体(内存有学生的个人信息和借阅图书信息) . struct Student char Stu_number50; char Stu_name20; char Class10; int flag; int key; int Stu_total; int rank; int max; int L_Card; int borrowed; struct Book *B20; stu5000; 做该管理系统的侧重点在于图书的增加和借阅。图书的库存链表不单纯的是用一条链式链表,还模仿了字典树的思想,将以不同字母开头的图书放置于不同链上,表头便存
4、有 26 个字母的指针。构建库存思路后,开始写各种操作函数。以下是用户可直接使用的函数:void Insert(struct Alphabet *root)/ 增加书目 必须在申请内存后赋值void Borrow(int L_Card,struct Alphabet *root,float penalty,int add)/ 借书void Return(int L_Card,struct Alphabet *root,float penalty)/ 还书void ReBorrow(int L_Card,struct Alphabet *root,float penalty)/ 续借void R
5、egisterStu()/ 学生注册void logoutStu()/ 注销学生账号void loginStu(struct Alphabet *root,float penalty,int add)/ 学生登录void Report_Loss()/ 挂失void Cancel_Loss()/ 解挂void Analysis(struct Alphabet *root)/ 系统分析void set(float *p1,int *p2)/ 设置参数以下是提供给内部使用的函数:void wipe(struct Time *a) struct Book * Read_In_Book()/ 读取图书信
6、息struct Head_Book * Query(char str,struct Alphabet *root,int *order)/ 查询书目 , 并返回该书的头指针int compare(struct Time a,struct Time deadline,char name,float penalty)/ 写 超期多少天 以及罚款金额int Check(struct Book *p,float penalty)/ 进行系统时间和借阅期限的对比int showStu(int L_Card,float penalty)/ 查看学生当前已借的书是否有超期void Put_Stu(int n
7、um)/ 输出学生信息以下是系统的基本操作演示截图打开 系统按 1 是增加书目下图为增加了 4 本书: 1 本 herrypotter 、 2 本 gaodengshuxue 、 1 本 gaoerji 增加完成之后,按 7 为系统分析, 则可以看到当前图书馆的藏书、借书情况按 2 为学生账号注册,输入个人信息以及密码以后,会返回一个借书号。按 4 为学生登录,注册后就可以用账号登录。登录后,界面会显示你的学号、姓名和班级。按 B、 R、 X、 E 分别可以 借书、还书、续借,然后退出。按 B 借书。借了一本 gandengshuxue和一本 herrypotter 按 R 可以还书,按照提示
8、,输入还书的书名,即可还书。按 X 可以续借。按 E 退出登录。当再次登录时,可以看见你 借过 2 本书,现在借了 1 本,应该在 2013 年 1 月 22 日归还。退出登录后,按 5 可以账号挂失,按 6 可以解挂。再次系统分析,可以看出当前的借书情况,如: gaodengshuxue已经借出一本。按 8 可以设置系统参数。按 3 输入借书号,即可注销账号。按 9 退出系统。但是系统缺陷比较多,借书时间上,处理得比较不适用,比如:不支持跨年借书,而且也没有分大小月份以下是代码#include #include #include #include int B_Count=0,T_Count=
9、0; int empty5000=0;/ 可以使用栈储存空号struct Time int year; int mon; int day; ; struct Book char Book_Name50; char Author50; char Press50; char Public_Date20; int Price; struct Time Borrow_Date; struct Time Return_Date; ; struct Student char Stu_number50; char Stu_name20; char Class10; int flag; int key; in
10、t Stu_total; int rank; int max; int L_Card; int borrowed; struct Book *B20; stu5000; struct Alphabet struct Head_Book *letter26; ;/*Newspapers,*Periodcal,*Book; struct Head_Book int total;/ 每一种相同的书,存在的总数int count;/ 被借的书目char Book_Name50; struct Head_Book *next; struct Book *same20; ; void wipe(struc
11、t Time *a) a-year=0; a-mon=0; a-day=0; struct Book * Read_In_Book()/ 读取图书信息 struct Book *p; p=(struct Book *)malloc(sizeof(struct Book); printf( 输入图书信息:图书名、作者名、出版社、出版时间、价格 n); gets(p-Book_Name); gets(p-Author); gets(p-Press); gets(p-Public_Date); scanf(%d, getchar(); B_Count+; wipe( wipe( /p-next=NU
12、LL; return p; void Insert(struct Alphabet *root)/ 增加书目 必须在申请内存后赋值 struct Book *p1; struct Head_Book *p2; char head;/图书名首字母int order,i;/ 该图书的总数p1=(struct Book *)malloc(sizeof(struct Book); p1=Read_In_Book(); head=p1-Book_Name0; p2=root-letterhead-a; for(;) if(p2=NULL) p2=(struct Head_Book *)malloc(si
13、zeof(struct Head_Book); strcpy(p2-Book_Name,p1-Book_Name); p2-total=1; p2-count=0; p2-next=NULL; for(i=0;isamei=NULL; p2-same0=p1;/ 将得到的书本信息,加入链表p2-next=root-letterhead-a; root-letterhead-a=p2; break; else if(strcmp(p2-Book_Name,p1-Book_Name)=0) order=p2-total; p2-sameorder=p1; p2-total+; break; els
14、e p2=p2-next; printf( 增添成功! n); struct Head_Book * Query(char str,struct Alphabet *root,int *order)/ 查询书目 ,并返回该书的头指针 /struct Book *p1; struct Head_Book *p2; char head; /p1=(struct Book *)malloc(sizeof(struct Book); p2=(struct Head_Book *)malloc(sizeof(struct Head_Book); head=str0; p2=root-letterhead
15、-a; for(;) if(p2=NULL) printf( 没有找到此书 !n); return 0; else if(strcmp(p2-Book_Name,str)=0) *order=p2-count; if(*order!=p2-total) return p2;/-same else printf( 该书已全部借出! n); return p2; else p2=p2-next; int compare(struct Time a,struct Time deadline,char name,float penalty)/ 写 超期多少天以及罚款金额 int day=0; if(a.yeardeadline.year) day=(a.year-deadline.year)*365; printf(%s 超期 罚款 %d 元 n,name,day*penalty); re