《【数据结构】图书馆图书借阅信息管理系统.docx》由会员分享,可在线阅读,更多相关《【数据结构】图书馆图书借阅信息管理系统.docx(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、东北大学信息科学与工程学院数据结构课程设计报告题目 图书馆图书借阅信息管理系统课题组长 王逸飞课题组成员 王嘉琦 李聪专业名称 计算机科学与技术班级 计1307指导教师 杨雷2015年1月课程设计任务书题目:图书馆图书借阅信息管理系统问题描述:对图书馆的图书借阅业务管理作一个简单的模拟。设计要求:设计图书借阅信息管理的模拟程序。(1)采用顺序表或结构体链表存储结构。(2)实现图书的创建、分类、插入、删除、修改、借阅等管理功能。(3)实现图书的各种借阅查询和统计功能。(4)考虑采用优化的查询和排序算法。(5)其它完善性功能。指导教师签字:年月日目录1课题概述11.1 课题任务11.2 课题原理1
2、1.3 相关知识32 需求分析42.1 课题调研42.2用户需求分析53 方案设计73.1 总体功能设计73.2 数据结构设计83.3 函数原型设计103.4 主算法设计123.5 用户界面设计144 方案实现154.1 开发环境与工具154.2 程序设计关键技术164.3 个人设计实现(按组员分工)4.3.1王逸飞设计实现174.3.2王嘉琦设计实现174.3.3李聪设计实现175 测试与调试235.1 个人测试(按组员分工)235.1.1王逸飞测试235.1.2王嘉琦测试235.1.2李聪测试235.2组装与系统测试335.3 系统运行366 课题总结396.1 课题评价396.2团队协作
3、406.3团队协作416.4个人设计小结(按组员分工)426.4.1王逸飞设计小结426.4.2王嘉琦设计小结426.4.3李聪设计小结427附录A 课题任务分工50A-1 课题程序设计分工50A-2 课题报告分工51 附录B 课题设计文档(光盘)52B-1课程设计报告(电子版)52B-2源程序代码(*.H,*.CPP)52B-3工程与可执行文件52B-4屏幕演示录像文件(可选)52附录C 用户操作手册(可选)53C.1 运行环境说明53C.2 操作说明541 课题概述1.1课题任务【问题描述】对图书馆的图书借阅业务管理作一个简单的模拟。【设计要求】设计图书借阅信息管理的模拟程序。(1)采用顺
4、序表或结构体链表存储结构。(2)实现图书的创建、分类、插入、删除、修改、借阅等管理功能。(3)实现图书的各种借阅查询和统计功能。(4)考虑采用优化的查询和排序算法。(5)其它完善性功能。1.2 课题原理以结构体链表为存储结构,则抽象数据类型即为用结构体链表表示的线性表,所以主要涉及到结构体链表的一些基本操作函数。1.3 相关知识结构体链表表示的线性表的定义,表示,C语言实现,在对图书信息进行排序的过程涉及到了结构体链表的排序技术。文件的读入与输出操作。2 需求分析2.1 课题调研对东北大学图书馆进行考察,并在网络上搜集相关资料。发现图书管理系统主要面向两类人群,一是图书馆管理员,二是普通用户。
5、而两类人群中,管理员应该拥有对该系统的最高权限,全面掌握普通用户的借阅信息,全面掌握所有图书的借阅信息。权限较低的用户只有图书信息一般查询权限,经过注册的用户可有进一步对图书信息进行操作的权限。2.2 用户需求分析进过以上课题调研,主要有一下需要:(1)一般用户:对图书信息进行查询,显示;(2)注册用户:可以对图书信息进行查询,显示,借书,还书,导出个人图书信息;(3)管理员:针对用户,可以进行用户信息增删,用户信息显示,用户信息的查询;针对图书,可以进行图书信息的查询,图书信息的显示,图书信息的录入,图书信息的删除,图书信息的排序。故需要以下主要函数用户登录管理,登录信息确认,查询图书功能,
6、显示图书信息功能,显示图书信息,借书功能,还书功能,个人图书管理功能,图书信息录入,图书信息删除,图书信息修改以及一些界面跳转3 方案设计3.1 总体功能设计(1)实现一般用户对图书信息进行查询,显示功能;(2)实现注册用户对图书信息进行查询,显示,借书,还书,导出个人图书信息功能;(3)实现管理员针对用户,可以进行用户信息增删,用户信息显示,用户信息的查询;实现针对图书,可以进行图书信息的查询,图书信息的显示,图书信息的录入,图书信息的删除,图书信息的排序。3.2 数据结构设计用户和管理员信息的节点:struct userchar usernameMax_username_size;char
7、 passwordMax_password_size;USERtypedef struct user1 * UserPtr1;图书信息节点:typedef struct bookchar bookname65;char auther65;char chubanshe65;char profession65;int booknumber;int price;int onof;struct book * next;BOOK;我们将结构的创建,初始化,插入删除等基本操作都封装在主界面函数,插入函数,注册函数等之中,后面还有详细的说明,在此不赘述。3.3 函数原型设计int show_function
8、1_window(UserPtr1);显示普通用户界面int show_function2_window(UserPtr1);显示管理员用户界面int show_guanyue_window();普通用户观阅函数int show_zhuce_window(UserPtr1);显示注册界面int show_queren_window(UserPtr1);显示确认界面int jiemian();通用界面int Jieshu(BookPtr);借书函数int Huanshu(BookPtr);还书函数int Insert(BookPtr *);增加图书函数int Show(BookPtr);显示图书
9、信息函数int Serch(BookPtr a);查找函数int numserch(BookPtr);编号查询int adresserch(BookPtr);出版社查询int autherserch(BookPtr);作者查询int nameserch(BookPtr);书名查询int onofserch(BookPtr);图书状态查询int priceserch(BookPtr);价格查询int Delete(BookPtr);删除图书信息int Save(BookPtr);保存图书信息int main1();主体函数3.4 主算法设计3.5 用户界面设计由于时间原因,低级版本在没有实现可视
10、化界面,采用DOS来显示得到的结果。4 方案实现4.1 开发环境与工具编程环境为visual c+6.0。工具为C语言。4.2 程序设计关键技术结构体链表的创建,插入,删除,输出,排序;文件的读入读出,对文件进行重新编辑。4.3 个人设计实现(按组员分小节)4.3.1 王逸飞、王嘉琦、李聪设计实现1.课题任务(1)主函数函数界面(2)管理员界面函数(3)管理员主要功能实现(4)登录确认函数(5)图书信息录入(6)图书信息删除(7)图书信息显示(8)图书信息修改(9)图书信息排序(10)图书信息保存(11)普通用户观阅函数 2.程序源代码#include#include#include#incl
11、ude#include#define Max_username_size 64+1#define Max_password_size 64+1struct user1char username65;char password65;USER1,dengl;/登陆用账户信息typedef struct user1 * UserPtr1;typedef struct user2 char usernameMax_username_size; int sex; long int stunumber;USER2;/管理用账户信息typedef USER2 * UserPtr2;typedef struc
12、t book char bookname65;char auther65;char chubanshe65;char profession65;int booknumber;int price;int onof;struct book * next;BOOK;typedef BOOK * BookPtr;int show_function1_window(UserPtr1);int show_function2_window(UserPtr1);int show_zhuce_window(UserPtr1);int show_queren_window(UserPtr1);int jiemia
13、n();int Jieshu(BookPtr);int Huanshu(BookPtr);int Huankuan();int Insert(BookPtr *);int Show(BookPtr);int numserch(BookPtr);int adresserch(BookPtr);int autherserch(BookPtr);int nameserch(BookPtr);int adresserch(BookPtr);int onofserch(BookPtr);int priceserch(BookPtr);int Delete(BookPtr);int Save(BookPt
14、r);void show_denglu_window(UserPtr1 b);int Serch(BookPtr a);BookPtr bookhead=NULL;int main1() int cmd0; system(cls); printf(*n);printf(nnnn);printf( 欢迎来到东北大学图书馆 n); printf(nnnn);printf(1:请输入您的学名号 n);printf(2: 学号注册 n);printf(3: 管理员登陆nnn);printf(选择0,然后按任意键关闭本程序!nnn);printf(请选择执行命令:);BookPtr pb1,pb2; F
15、ILE * pbook1; int flag1=0;bookhead=(BookPtr)malloc(sizeof(struct book); /将文件中的图书信息导出,并存放在链表中bookhead-next=NULL;if(pbook1=fopen(f:book.din,rb)!=NULL) rewind(pbook1); if(!feof(pbook1) fread(bookhead,sizeof(struct book),1,pbook1); pb1=(BookPtr)malloc(sizeof(struct book); bookhead-next=pb1; fread(pb1,si
16、zeof(struct book),1,pbook1); while(!feof(pbook1) pb2=(BookPtr)malloc(sizeof(struct book); fread(pb2,sizeof(struct book),1,pbook1); if(feof(pbook1) break; pb1-next=pb2; pb1=pb2; pb1-next=NULL; fclose(pbook1);int cmd,trytime,io=0; scanf(%d,&cmd); cmd0=cmd; while(cmd3|cmd2) printf(Sorry,wrong number mo
17、re than three times!n); printf(系统自动退出!n); printf(继续登录请重启程序。); system(pause); return 0; printf(无效字符,无法识别!n); if(io1) printf(最后一次机会!); printf(请重新选择:); scanf(%d,&cmd); FILE *fp1;if(cmd=1) /用户入口 int trytime,m=1; for(trytime=1;m!=0&trytime4;trytime+) show_denglu_window(&dengl); m=show_queren_window(&deng
18、l); if(trytime=2&m!=0) printf(最后一次机会!); system(pause); if(trytime=4&m!=0) printf(系统自动退出!n); printf(继续登录请重启程序。); system(pause); if(m=0) show_function1_window(&dengl); else if(cmd=2) /注册入口 show_denglu_window(&dengl); if(fp1=fopen(f:zhucezhe.din,ab)=NULL) printf(n cannot open file); fwrite(&dengl,sizeo
19、f(dengl),1,fp1); fclose(fp1); printf(n注册成功!); else if(cmd=3) /管理员登陆入口 show_denglu_window(&dengl); for(trytime=0;trytimepassword,0,65); system(cls); printf(*n); printf(nnnn); printf( 欢迎来到东北大学图书馆 n); printf(nnnn); printf(1:请输入您的学号: n); scanf(%s,b-username); printf(2: 请输入您的三级密码:n); int i=0; char ch=0;
20、char a=y; while (ch = getch() != r) putchar(*); b-passwordi = ch; i+; printf(n是否显示密码:是(Y)/否(N)); scanf(%d,&a); a=getchar(); if(a=Y|a=y) printf(n您输入的密码是%s,b-password); system(pause); int show_queren_window(UserPtr1 b) /确认是否为已注册用户 FILE *fp2; struct user1 u; UserPtr1 v=&u; int m=1,n=1; if(fp2=fopen(f:z
21、hucezhe.din,rb)=NULL) printf(n cannot open file); while(m*m+n*n)!=0) fread(v,sizeof(USER1),1,fp2); m=strcmp(b-username,v-username); n=strcmp(b-password,v-password); if(m=0&n=0) printf(n已注册,可借阅图书n); system(pause); return 0; if(feof(fp2) break; fclose(fp2); if(m!=0) printf(n非法侵入n); system(pause); retu
22、rn 1; int Insert(BookPtr * bookhead) /录入图书信息 FILE * pbook2; system(cls); jiemian();if(pbook2=fopen(f:book.din,ab)=NULL) printf(n不能打开文件!); BookPtr p1,p2,r; p1=p2=*bookhead; while(p1!=NULL) p2=p1; p1=p1-next; r=(BookPtr)malloc(sizeof(struct book); r-next=NULL; if(r=NULL) printf(分配空间失败!!); return 0; if
23、(p2=NULL) *bookhead=r; else p2-next=r; printf(请输入图书名称:n);scanf(%s,&r-bookname);printf(请输入图书作者:n);scanf(%s,&r-auther);printf(请输入出版社:n);scanf(%s,&r-chubanshe);printf(请输入图书编号:n);scanf(%d,&r-booknumber); printf(请输入图书价格:n); scanf(%d,&r-price);printf(请输入出状态:n);scanf(%d,&r-onof);fwrite(r,sizeof(struct book
24、),1,pbook2);fclose(pbook2); char m; printf(n是否要继续录入:);scanf(%c,&m);scanf(%c,&m);if(m=y|m=Y) Insert(&r);/ int change(BookPtr a) /修改图书信息 system(cls); jiemian(); FILE * pbook3;if(pbook3=fopen(f:book.din,wb)=NULL) printf(n不能打开文件!); BookPtr p1,p2; p1=p2=a;int changenum;BOOK linshi;printf(n1,书名n2,作者n3,出版社
25、n4,编号n5,单价n6,状态n);printf(请选择要进行修改的图书信息所对应的序号);scanf(%d,&changenum); switch(changenum)case 1:printf(请输入要进行修改的书的名字:); scanf(%s,linshi.bookname); while(p1!=NULL) if(strcmp(linshi.bookname,p1-bookname)=0) printf(请输入要修改之后的书名:n); scanf(%s,&p1-bookname); break; p2=p1; p1=p1-next; break;case 2:printf(请输入要进行
26、修改的作者的名字:); scanf(%s,linshi.auther); while(p1!=NULL) if(strcmp(linshi.auther,p1-auther)=0) printf(请输入要修改之后的作者:n); scanf(%s,&p1-auther); break; p2=p1; p1=p1-next; break;case 3:printf(请输入要进行修改的书的出版社:); scanf(%s,linshi.chubanshe); while(p1!=NULL) if(strcmp(linshi.chubanshe,p1-chubanshe)=0) printf(请输入要修
27、改之后的出版社:n); scanf(%s,&p1-chubanshe); break; p2=p1; p1=p1-next; break;case 4:printf(请输入要进行修改的书的价格:); scanf(%d,linshi.price); while(p1!=NULL) if(linshi.price=p1-price) printf(请输入要修改之后的出版社:n); scanf(%d,&p1-price); break; p2=p1; p1=p1-next; break;case 5:printf(请输入要进行修改的书的编号:); scanf(%d,&linshi.booknumbe
28、r); while(p1!=NULL) if(linshi.booknumber=p1-booknumber) printf(请输入要修改之后的出版社:n); scanf(%d,&p1-booknumber); break; p2=p1; p1=p1-next; break;case 6:printf(请输入要进行修改的书的状态:); scanf(%d,&linshi.onof); while(p1!=NULL) if(linshi.onof=p1-onof) printf(请输入要修改之后的状态:n); scanf(%d,&p1-onof); break; p2=p1; p1=p1-next
29、; break;default:printf(enter data error!n);p1=p2=a;while(p1!=NULL) fwrite(p1,sizeof(struct book),1,pbook3); p2=p1; p1=p1-next; fclose(pbook3);return 0;int Delete(BookPtr a) /删除图书信息 system(cls); jiemian(); BOOK b; BookPtr p1,p2; p1=p2=a; int flag=0; printf(请选择要删除的图书的书名:); scanf(%s,b.bookname); while(p1!=NULL) if(strcmp(b.bookname,p1-bookname)=0) if(p1=a) a=p1-next; free(p1); else p2-next=p1-next;