1、图书馆程序设计报告书马澜 华科学院计算机科学与技术系信息管理与信息系统专业程序设计综合课程设计报告 (2010/2011学年 第一学期)学生姓名: 马 澜 学生班级: 信息管理与信息系统092201H学生学号: 200922040114指导教师: 荀亚玲2010年 月 日目 录课程设计的目的. 3课程设计实任务内容.3课程设计要求.3 系统功能模块图.3 详细设计说明.4部分函数流程图 .6程序调试.7 课程设计心得与体会.11附录:源程序代码.12一、 课程设计的目的 加深对C语言课程所学知识的理解,进一步巩固C语言算法规则.学会编制结构清晰.风格良好.数据结构适当的C程序,从而具备解决综合
2、性问题的能力.二、 课程设计实任务内容:图书馆 图书管理基本业务活动包括:对一本书的采编入库、清除库存、借阅和归还等等。试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。三、 课程设计要求(1)每种书的登记内容至少包括书号、书名、著者、现存量和总库量等五项(2)作为演示系统,不必使用文件,全部数据可以都内存存放。但是由于上述四项基本业务活动都是通过书号(关键码)进行的,所以要用B树(2-3阶数)对书号建立索引,以获得高效率。(3)系统应实现的操作及定义如下:A、采编入库:新购入一种书,经分类和确定书号之后登记到图书帐目中去。如果这种书在帐中已有,则只将总库存量增加。B、清除库存:某种
3、书已无保留价值,将它从图书帐目中注销。C、借阅:如果一种书的现存量大于零,则借出一本,登记借阅者的图书证号和归还期限。D、归还:注销对借阅者的登记,改变该书的现存量。E、显示:用凹入表的形式显示B树。四、 系统功能模块图五、 详细设计说明书籍结构体(Book)私有数据 char bnum10; /书号 char bname20; /书名 char bauthor10; /作者 char rname10; /借阅人公有数据及公有函数 int tag; /状态标记判断指标(已借/在架) Book() /构造函数初始化信息 void set_bnum(char *no) /设置书号 char *ge
4、t_bnum() /获得书号 void set_bname(char *n) /设置书名 char *get_bname() /获得书名 void set_bauthor(char *a) /设置作者 char * get_bauthor() /获得作者姓名 void set_tag(int t) /状态设置 void set_rname(char *rn) /设置借阅人 char *get_rname() /获得借阅人姓名 void show_tag() /显示图书状态 void copy(Book m) /Book结构体copy函数 书籍管理结构体(BookManage) 私有数据及函数
5、Book books100; /定义Book书籍结构体数组对象,最大容量100本 int length; /计数 void saveFile() /保存书籍文件 void readFile() /读取书籍文件 公有数据及函数 BookManage() /构造函数,读取磁盘文件 BookManage() /析构函数,保存磁盘文件 bool add(Book book) /添加图书资料 int bnu_search(char *bnu) /按书号查找书籍 int bna_search(char *bna) /按书名查找书籍 int bau_search(char *bau) /按作者查找书籍 in
6、t rn_search(char *rn) /按借阅人查找书籍 void revise(Book book,int i)/带参的修改书籍函数 void deleteBook(int index)/带参的删除书籍资料函数 void show_book()/不带参的显示书籍函数 void show_book(int i)/带参的显示书籍函数 void br_book()/读者借、还书功能函数 bool in(int i) /判断图书是否在架函数 读者结构体(Reader)私有数据及函数 char rname10; /读者姓名 char rclass10; /班级 char rtel10; /电话公
7、有数据及函数 Reader() /构造函数,实现数据初始化 void set_rname(char *rn) /设置读者姓名 char * get_rname() /获得读者姓名 void set_rclass(char *rc) /设置班级 char *get_rclass() /获得班级 void set_rtel(char *rt) /设置电话 char *get_rtel() /获得电话 void copy(Reader m) /读者Reader结构体copy函数读者管理结构体(ReaderManage)私有数据及函数 Reader readers50; /定义读者结构体数组对象,最多
8、50位 int length; /计数 void readFile() /读取读者文件函数 void saveFile() /保存读者文件公有数据及函数 ReaderManage() /构造函数,读取读者文件 ReaderManage() /析构函数,保存读者文件 void add_reader(Reader r) /添加读者用户函数 int search(char *rn) /按姓名查找读者函数 bool revise(Reader reader,int i) /修改读者资料函数 void delete_reader(int index) /删除读者函数 bool log_reader(Re
9、ader r) /登录时判断读者用户是否存在函数 void reg_reader() /注册用户函数 void show_reader() /不带参的显示读者信息函数 void show_reader(int i) /带参的显示读者信息函数菜单结构体(Menu)私有数据及函数 BookManage bm; /定义书籍管理结构体对象bm ReaderManage rm; /定义读者管理结构体对象rm Reader r; /定义读者结构体对象r int choice; /菜单序号选择 int key; /管理员密码公有数据及函数 void header() /页眉 void log_menu()
10、/主界面登录菜单 void admin_menu() /管理员管理菜单 void reader_menu() /读者服务菜单 void bsearch_menu() /读者查找书籍菜单 void absearch_menu() /管理员查找书籍菜单 void reader_lr() /读者登录或注册菜单 void log_admin() /管理员登录 void rn_search() /按书号查找函数 void bnu_search() /按书号查找函数 void bna_search() /按书名查找函数 void bau_search() /按作者查找函数 void addBook() /
11、新增书籍函数 void reviseBook() /修改书籍函数 void delBook() /删除书籍函数 void reviseReader()/修改读者用户函数 void delReader() /删除读者用户函数 主函数(main) int main()六、 部分函数流程图 管理员登录 读者登录 读者借阅图书 管理员或读者按书名查找图书 七、 程序调试各界面菜单显示主登录界面 系统管理界面读者登录界面读者服务界面书籍查找界面 登录验证管理员登录A.输入错误密码 B.输入正确密码 读者登录A.输入已注册姓名 B.输入未注册姓名 注册新读者用户 添加新的图书资料输入已存在图书书号 输入未
12、存在图书书号 修改已有图书资料输入不存在图书书号 输入已存在图书书号删除已有图书资料输入不存在图书书号 输入已存在图书书号 查找已有图书资料(以按书号查找为例)输入不存在图书书号 输入已存在图书书号 2.4.8显示所有图书资料八、 课程设计心得与体会经过近三个星期的努力,前后修修改改,调试又调试,我的C+图书管理系统终于得以诞生!在这个过程中,我发现自己还有很多很多知识都没有学好,看别人的例子的时候好像很简单,自己一上机操作就有问题。调试的时候系统总是报错,还有很多警告,每添加一个函数,往往都要要调试很久,有时候仅仅只是少了一个大括号,却花上近半个小时才找到问题的瓶颈所在。系统虽然完成了,也可
13、以运行,一些基本的功能也能够实现,但我知道,还有很多的不足。另外,我发现帮助文件真的很有用,每当我看别人例子看不懂的时候,都是去帮助文件搜索,如果里面的信息不够完整,再利用各大网站的搜索引擎来寻找答案,比如更改背景颜色的问题,之前试了很多次都不行,后来偶然发现一个MS-DOS命令大全,然后再去网上搜索color命令的使用语法,原来以为很复杂的代码,只需一句system(color fd),问题就迎刃而解了。以后还会有很多课程设计,一定要吸取这次的教训,知识不是看过就可以了,而是要把知识学透、学精,才能够真正做到为我所用。九、 附录#include #include #include #incl
14、ude #include #define BookFile book.txt /将字符串BookFile替换原文件中的宏名称book#define ReaderFile reader.txtusing namespace std;/*读者结构体,用于存放读者基本信息*class Reader private: char rname10; char rclass10; char rtel10;public: Reader() /构造函数,实现数据初始化 strcpy(rname,);strcpy(rclass,);strcpy(rtel,); void set_rname(char *rn) /
15、设置读者姓名 strcpy(rname,rn); /将rn的字符复制给rname char * get_rname() /获得读者姓名 return rname; /返回rname的值 void set_rclass(char *rc) /设置班级 strcpy(rclass,rc); char *get_rclass() /获得班级 return rclass; void set_rtel(char *rt) /设置电话 strcpy(rtel,rt); char *get_rtel() /获得电话 return rtel; void copy(Reader m) /读者Reader结构体c
16、opy函数 strcpy(rname,m.get_rname();strcpy(rclass,m.get_rclass();strcpy(rtel,m.get_rtel();/*读者管理结构体,实现对读者用户的管理*class ReaderManage Reader readers50; /定义读者结构体数组对象,最多50位 int length; void readFile() /读取读者文件函数 ifstream fread; /定义输入文件流对象fread length=0; /计数 if(!fread) cout读取磁盘文件失败!endl;exit(1); fread.open(Rea
17、derFile,ios:binary);/使文件流与文件关联,以二进制方式打开 int i=0; while(fread.read(char *)&readersi,sizeof(Reader)/计算并返回所占字节数 i+; length=i; fread.close();/关闭磁盘文件 void saveFile() /保存读者文件 ofstream fwrite; /定义输出文件流对象fwrite if(!fwrite) cout=50) cout对不起,注册人数已满!n;return ; readerslength.copy(r); /调用读者结构体copy函数 length+; int
18、 search(char *rn) /按姓名查找读者函数 for(int i=0;ilength;i+) if(strcmp(readersi.get_rname(),rn)=0)/判断是否相等 return i; return -1; bool revise(Reader reader,int i) /修改读者资料函数 readersi.copy(reader); /调用读者结构体cpoy函数 return true; void delete_reader(int index) /删除读者函数 for(int i=index;ilength-1;i+) readersi.copy(reade
19、rsi+1); /用后面的地址覆盖前面的地址 length-; bool log_reader(Reader r) /登录时判断读者用户是否存在函数 for(int i=0;ilength;i+) if(strcmp(readersi.get_rname(),r.get_rname()=0) return true; return false; void reg_reader() /注册用户函数 char n10; /姓名name char c10; /班级class char t10; /电话tel Reader reader; coutn; coutc; coutt; reader.set
20、_rname(n); /调用读者结构体设置读者姓名函数 reader.set_rclass(c); /调用读者结构体设置读者班级函数 reader.set_rtel(t); /调用读者结构体设置联系电话函数 add_reader(reader); /调用读者结构体添加读者函数 coutnt注册成功!; void show_reader() /不带参的显示读者信息函数 coutn *读*者*信*息*列*表*nn; cout姓名ttt班级ttt电话n; for(int i=0;ilength;i+) coutreadersi.get_rname(); couttttreadersi.get_rcl
21、ass(); couttttreadersi.get_rtel()n; void show_reader(int i) /带参的显示读者信息函数 coutn *读*者*信*息*列*表*nn; cout姓名ttt班级ttt电话n; coutreadersi.get_rname(); couttttreadersi.get_rclass(); couttttreadersi.get_rtel()n; ; /*书籍结构体,用于存放书籍基本信息*class Bookprivate: char bnum10; /书号 char bname20; /书名 char bauthor10; /作者 char
22、rname10; /借阅人public: int tag; /状态标记判断指标(已借/在架) Book() /构造函数初始化信息 strcpy(bnum,);strcpy(bname,);strcpy(bauthor,);strcpy(rname,);tag=0; void set_bnum(char *no) /设置书号 strcpy(bnum,no); /把字符串no中的字符复制到字符串bnum中 char *get_bnum() /获得书号 return bnum; /返回值为bnum void set_bname(char *n) /设置书名 strcpy(bname,n); char
23、 *get_bname() /获得书名 return bname; void set_bauthor(char *a) /设置作者 strcpy(bauthor,a); char * get_bauthor() /获得作者姓名 return bauthor; void set_tag(int t) /状态设置 tag=t; void set_rname(char *rn) /设置借阅人 strcpy(rname,rn); char *get_rname() /获得借阅人姓名 return rname; void show_tag() /显示图书状态 if(tag=1) cout已借; else
24、 cout在架; void copy(Book m) /Book结构体copy函数 strcpy(bnum,m.get_bnum(); /将获得书号函数里的返回值里的字符复制到bnum strcpy(bname,m.get_bname(); strcpy(bauthor,m.get_bauthor(); tag=0; ;/*书籍管理结构体,实现管理书籍功能*class BookManageprivate: Book books100; /定义Book书籍结构体数组对象,最大容量100本 int length; void saveFile() /保存书籍文件 ofstream fwrite; /
25、定义输出文件流ofstream结构体对象fwrite if(!fwrite) cout文件保存失败!n; exit(1); fwrite.open(BookFile,ios:binary);/使文件流与文件建立关联,以二进制方式打开 fwrite.write(char *)books,length*sizeof(Book); /计算并返回所占字节数 fwrite.close(); /关闭磁盘文件 void readFile() /读取书籍文件 ifstream fread; /定义输入文件流对象fread length=0; if(!fread) cout文件读取失败!endl;exit(1);
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2