1、图书馆信息管理系统含附源代码02西安郵電學院软件设计课程设计报告题 目: 图书馆信息管理系统 系部名称:电信系专业名称:电子科学与技术班 级:科技0701学号:05072002学生姓名 :XXX指导教师:黄茹时间:2008年6月9日 至2008年 6月20日一、设计目的 通过本课程设计,强化上机动手能力,使我们在理论和实践的基础上进一步巩固C语言程序设计课程学习的内容,掌握工程软件设计的基本方法学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。为后续各门计算机课程的学习打下坚实基础。为毕业设计和以后工作打下必要基础。二、课程设计内容 本设计是一个能够实现基本功能(借阅图书登记
2、等)的图书馆管理系统,由于所学知识有限,自然不能与真正的现代图书馆管理系统相比,但也是尽所之能了。三、需求分析对所开发系统功能、性能的描述,想要实现的目标。系统功能: 1.现有图书按时间和类型查询2.新书按时间和类型查询3. 借阅管理(普通用户查看自己的借书历史记录,管理员可实现借书、还书登记等)4. 图书管理(管理员可添加新书、删除丢失图书信息,将图书加入丢失图书)5. 统计图书信息6.系统维护(新建用户、密码修改、更换用户)等六大功能。性能的描述:本系统总体分普通用户和管理员用户,其中管理员可实现添加新书、用户,登记借书、还书、统计等全部功能,普通用户只能实现图书查询、修改自身密码、查看自
3、身借阅历史情况。 在查询方面分时间和类型两种(由于时间、技术等方面限制,将时间功能由原来的int型结构体改为char型,因此也没用到C算法中的各种较为高级的排列,实为遗憾,这也导致程序无法自己算出还书日期),界面比较简单,操纵容易。想实现目标:本程序的基础结构图借鉴于Visual Basic设计信息管理系统实例中的例子,以现代图书馆管理系统为蓝本,结合本校图书馆的规定,可惜的是目标虽远大,技术不过关,导致与原计划有较大偏差,将好些复杂的地方简单化,减少了计划中的好些功能。四、概要设计 1系统结构图(功能模块图)对系统进行分析,给出系统结构图;系统结构图: 2功能模块说明对各个模块进行功能的描述
4、。 功能:将结构体和需要大量引用的函数放于此模块。模块0(非正式模块):密码模块 功能:建立密码体系,使程序面向管理员和普通用户这两方用户。模块一:现有图书信息 功能:1. 现有图书按时间排列2. 现有图书按类型排列模块二:新书查询 功能:1. 新书按时间排列2. 新书按类型排列模块三:借阅管理 功能:1.借书登记管理2.续借登记管理(未完成) 3.超期登记管理(未完成) 4.还书登记管理模块四:图书管理 功能:1. 添加新书2.删除丢失图书信息3.加入丢失图书五、详细设计及运行结果流程图, 函数之间相互调用的图示 ,程序设计及编码, 运行结果。main()函数: 1. nowbook_inf
5、o()函数: 3.reader_manage() 函数 模块三:1. borrow_register()函数读取文件函数*readfile1(char filename)六、调试情况,设计技巧及体会1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。 评价:对我自己来说,个人对本程序不完全满意,不能完全实现自己的想法。 合理和不足之处:合理之处在于能够基本上实现图书馆管理系统的功能。即合理又不足之处莫过于引用了链表,说它合理,是因为动态链表才是大型信息管理系统的核心,动态链表的能动性绝非静态数组所能相比的,但是对链表的不熟悉也是本程序最大的不足之处,在本程序运用链表也是为了熟练它。改进
6、的方案:虽说链表远比数组难,但本人不支持本程序改为用数组,最需要改进的是,前面说过,按原计划,基本上实现现代化图书馆管理系统的所有功能(图形除外),运用上图型函数,加上快速排序等,同时最好将语句中的中文改为英文,虽然已经把大部分须多此使用的语句组改为函数来调用,但是有一两个的地方有些重复,为了使界面比较美观,大量重复使用了printf语句,不知道能不能改写为一个界面函数。2、在设计过程中的感受。 感受最大的是无奈和成就感,由于过于强求自己,想把自己的第一个真正的程序完善化,功能尽量的齐全,可惜最后又把原计划打乱了,搞得特无奈,本程序花了我大量的心血,到头来还是要简化它。不过收获也多多,其中能够
7、训练自己的耐心和细心程度,培养自己拥有严谨的态度,而且每次靠自己发现错误或有了新的想法而且可以实现时,很有成就感的,这不会就是痛并快乐着吧,_。而且也帮一些同学查找了一些错误,对查错方面有所提高。同时也对那些当程序员深深的佩服,也许是自己的体会不够吧,无法理解那些编程狂人连续20多个小时编程如何顶得住?七、参考文献C语言程序设计(王曙燕著),C语言程序设计(谭浩强著), Visual Basic信息系统开发实例精选,C算法。八、附录:源代码(000.h)/*模块0(非正式模块):结构体模块*/typedef struct Book_info /*图书相关信息*/ char book_type3
8、; /*图书类型代号*/ char book_num10; /*图书代号*/ char book_name30; /*书名*/ char lib_name15; /*所属书库*/ char in_date15; /*入库时间*/ char anthor15; /*作者*/ char price6; /*价格*/ char borrow_date15; /*借书日期*/ char back_date15; /*还书日期*/ char reader_name10; /*借书人姓名*/ char reader_num10; /*借书人学号*/ struct Book_info *next; /*用于
9、链表*/book_info; /*把struct Book_info定义为book_info*/*生成文件函数*/void build_file(char filename15) FILE *fp; fp=fopen(filename,wb); fclose(fp);/*读取allbook,newbook,lostbook文件*/book_info *readfile1(char filename) book_info *s; book_info *r,*p; FILE *fp; if(fp=fopen(filename,rb)=NULL) printf(nCan not find the f
10、ile:%snNow build the file:%s,filename,filename); build_file(filename); getch(); return NULL; p=(book_info *)malloc(LEN); p-next=NULL; r=p; s=(book_info *)malloc(LEN); fread(s,LEN,1,fp); while(!feof(fp) /*读取文件结束退出循环*/ r-next=s; /*连接s结点*/ /*这几步为链表尾插法*/ r=s; /*将r移到s结点*/ s=(book_info *)malloc(LEN); frea
11、d(s,LEN,1,fp); r-next=NULL; fclose(fp); return p ;/*输出全链表信息*/void print_info(book_info *p) clrscr(); printf(booktype1) ; for(p=p-next;p=p-next) /*p点移到p的下一点*/ printf(booktype5,booktype4); if(p-next=NULL) break; /*这样可以确保输到最后结点信息*/ printf(npress any key.); getch();/*根据类型代号输出链表信息*/void print_info2(book_
12、info *p) int n=0; char i3; clrscr(); printf(n输入图书类型代号(1.计算机2.文艺.):); gets(i); printf(booktype1) ; for(p=p-next;p=p-next) if(strcmp(p-book_type,i)=0) printf(booktype5,booktype4);n+; if(p-next=NULL) break; printf(n共找到该类图书:%d 本.,n); getch(); printf(npress any key.); getch();/*图书排列*/void sort_book(char
13、filename,char ch) book_info *p; p=readfile1(filename); /*调用读取文件函数readfile1*/ if(p=NULL|p-next=NULL) /*文件内容为空*/ printf(nNo information about.press any key.); getch(); return ; if(ch=1) /*时间排列*/ print_info(p); if(ch=2) /*类型排列*/ print_info2(p); printf(n);/*删除链表一结点*/book_info *del_point(book_info *p,cha
14、r book_num) book_info *p1,*p2; p1=p; while(p1-next!=NULL&strcmp(book_num,p1-book_num)!=0) p2=p1; p1=p1-next; /*将p1后移一个结点,p2指向p1原结点*/ if(strcmp(book_num,p1-book_num)=0) /*找到结点*/ if(p1=p) p=p1-next; /*为p1首结点,把第2结点地址赋给首结点*/ else p2-next=p1-next; /*否则p1下个结点地址赋给p1前一地址*/ printf(ndelete:%s,OK.press any key
15、.n,p1-reader_num); getch(); free(p1); else printf(nThe enter error!); return p;/*将链表信息写入文件保存*/void save_point(book_info *p,char filename) FILE *fp; book_info *s; fp=fopen(filename,wb); s=p; for(s=s-next;s=s-next) /*将s指向它的下一个结点*/ fwrite(s,LEN,1,fp); /*写入信息*/ if(s-next=NULL) break; fclose(fp);/*将链表信息追
16、加入文件保存*/void save_point2(book_info *p,char filename) FILE *fp; book_info *s; fp=fopen(filename,ab); s=p; for(s=s-next;s=s-next) /*将s指向它的下一个结点*/ fwrite(s,LEN,1,fp); /*写入信息*/ if(s-next=NULL) break; fclose(fp);(001.h)/*模块一:现有图书信息*/void nowbook_info() char ch; for(;) clrscr(); printf(n); printf(tt*n); p
17、rintf(tt*现有图书信息*n); printf(tt*n); printf(tt* 请选择服务种类 *n); printf(star2); printf(star2); printf(tt*-1.按时间排列-*n); printf(star2); printf(tt*-2.按类型排列-*n); printf(star2); printf(tt*-3. 返回上级 -*n); printf(star2); printf(star1); printf(star1); printf(n); getch(); ch=getch(); if(ch=3) return; else if(ch!=1&c
18、h!=2) continue; /*返回循环,直到ch=1,2,3*/ sort_book(allbook,ch); (002.h)/*模块二:新书查询*/void new_book() char ch; for(;) clrscr(); printf(n); printf(ntt*n); printf(tt*新书查询*n); printf(tt*n); printf(star2); printf(tt* 请选择服务种类: *n); printf(star1); printf(star2); printf(tt*-1.按时间排列-*n); printf(star2); printf(tt*-2
19、.按类型排列-*n); printf(star2); printf(tt*-3. 返回上级 -*n); printf(star2); printf(star1); printf(star1); printf(n); ch=getch(); if(ch=3) return; else if(ch!=1&ch!=2) continue; /*返回循环,直到ch=1,2,3*/ sort_book(newbook,ch); (003.h)/*模块三:借阅管理*/#include 003_1.hvoid reader_manage() FILE *fp; char ch; char password1
20、0; if(flag=2) /*普通用户只能查看自身文件信息*/ clrscr(); fp=fopen(username,rb); fgets(password,9,fp); printf(booktype1); while(!feof(fp) putchar(getc(fp); fclose(fp); printf(npress any key.n); getch(); return ; for(;) clrscr(); printf(n); printf(tt*n); printf(tt*新书查询*n); printf(tt*n); printf(tt* 请选择服务种类: *n); pri
21、ntf(star2); printf(star2); printf(tt*-1.借书登记管理-*n); printf(star2); printf(tt*-2.续借登记管理-*n); printf(star2); printf(tt*-3.超期登记管理-*n); printf(star2); printf(tt*-4.还书登记管理-*n); printf(star2); printf(tt*-5. 返回上级 -*n); printf(star2); printf(star1); printf(star1); printf(n); ch=getch(); clrscr(); switch(ch)
22、 case 1:borrow_register(); break; case 2:printf(本功能尚未完成,任意键.n);getch();break; case 3:printf(本功能尚未完成,任意键.n);getch();break; case 4:back_register(); break; case 5:return ; (003_1.h)/*模块三:1.借书登记管理*/void borrow_register() FILE *fp; char ch; book_info *p,*p1; char book_num10; do p=readfile1(allbook); p1=p
23、; printf(nEnter book_num:); gets(book_num); for(p1=p1-next;strcmp(p1-book_num,book_num)!=0;p1=p1-next) /*书号相同退出循环*/ if(p1-next=NULL) printf(n本馆无该书记录,press any key.); getch(); return; printf(nBorrow date(yy-mm-dd):); gets(p1-borrow_date); printf(nBack date(yy-mm-dd):); gets(p1-back_date); printf(nrea
24、der name:); gets(p1-reader_name); printf(nreader number:); gets(p1-reader_num); if(fp=fopen(p1-reader_num,ab)=NULL) printf(nError:user no exist.press any key.n); getch();return ; save_point(p,allbook); fwrite(p1,LEN,1,fp); fclose(fp); getch(); printf(nInput other data(Y/N)?:); ch=getch(); while(ch=y
25、|ch=Y); printf(npress any key.); getch();/*模块三:4.还书登记管理*/void back_register() FILE *fp; char book_num10; char ch; char password10; book_info *p,*p1,*s1,*s2,*s3; do p=readfile1(allbook); p1=p; printf(nEnter book number:); gets(book_num); for(p1=p1-next;strcmp(p1-book_num,book_num)!=0;p1=p1-next) /*找到链表中的结点*/ if(p1-next=NULL) printf(n本馆无该书记录,press any key.); getch(); return ; strcpy(p1-borrow_date,00-00-00); /*将已还信息初始化*/ strcpy(p1-back_date,00-00-00); strcpy(p1-reader_num,00000000); strcpy(p1-reader_name,0000); save_point(p,allbook); getch(); printf(nReturn the book.other book?(Y/N):); /*还其它书
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1