附件1:学号:0121213640126《面向对象程序设计》大作业题目学生成绩管理系统学院文法学院专业教育学班级教育学1201姓名杨欣指导教师鄢红国2013年12月20日目录一设计目的…………………………………………………………….1二大作业的内容........................................2三大作业的要求与数据..................................3四大作业应完成的工作..................................4五总体设计(包含几大功能模块)...........................5六详细设计(各功能模块的具体实现算法——流程图)………….6七调试分析(包含各模块的测试用例,及测试结果)…………….7八总结………………………………………………………………...8十参考资料…………………………………………………………….9一大作业的目的《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。二大作业的内容对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数等)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.将图书的信息进行记录,信息内容包含:(1)图书的编号(2)图书的书名(3)图书的库存量。假设,现收集到了一个图书馆的所有图书信息,要求用C语言编写一个简单的图书管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。三大作业的要求与数据1、用C语言实现系统;2、对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.3、图书信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:(1)每一条记录包括一本图书的编号、书名、库存量(2)图书信息录入功能:(图书信息用文件保存,可以一次完成若干条记录的输入。)(3)图书信息显示浏览功能:完成全部图书记录的显示。(4)查询功能:完成按书名查找图书记录,并显示。(5)图书信息的删除:按编号进行图书某图书的库存量.(6)借书登记系统:可以输入读者编号和所借书号来借书。(7)还书管理系统:可以输入读者编号和所借书号来还书。(8)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!四大作业应完成的工作(1)编写算法;(2)算法测试,并有具体的测试结果和结果分析;(3)撰写大作业报告。内容包括:1)封面扉页2)设计任务书3)目录4)总体设计方案(包括流程图)5)使用说明及运行实例(包括界面)6)成员设计内容简介7)项目源程序代码(注意注释的使用)8)指导教师评语五总体设计(包含几大功能模块)1、新书入库模块;2、查询模块;3、借阅管理模块;4、借书登记模块;5、还书管理模块;6、输出信息模块;7、退出系统模块;六详细设计(各功能模块的具体实现算法——流程图)6.1各函数的功能和实现1、新书入库模块:形参分别为:书名,书号,以及有多少本书要入库,再根据要求将信息写入文件boot.dat中。又由于最开始要输入三本新书,故可以加一个初始化函数init_book(),但是初始化函数只执行一次,也就是在系统第一次运行的时候执行,此时可以根据判断是否存在boot.dat这个文件来决定是否执行初始化函数。Y根据数量修改库存YNNbook.dat中增加此新书,根据数量设置库存2、查询模块:可用一个函数voidfind_book(charbook_num[])来实现。找到就输出此书全部信息,找不到就输出查找失败信息。3、成绩查询功能NYNY3、借阅管理模块:用初始化函数init_reader()来实现对读者的初始化。因为读者初始化函数也只是在系统第一次运行的时候执行一次,故也可以根据是否存在reader.dat文件来确定是否执行此函数。(到现在可以发现在系统初始化函数里,至少已经需输入新书名、新书号和新书数量已存在此新书if(还有新书)开始结束输入要查询的书号是否存在此书输入此书的全部信息输入信息:此书不存在是否继续查询开始结束要调用两个初始化函数了)4、借书登记模块:可用一个函数borrow_book(charreader_num[],charbook_num[])来实现。在函数中要分别判断A该读者的编号是否已经存在,如果不存在,则提示错误。B该读者的借阅书是否已满(即最多只能借1本书)如果是,则提醒该用户先去还书C输出的书号对应的书是否存在,如果不存在,则提醒读者不存在此书。借书过程完成后,则对读者信息里的借书信息写上所借书号,并修改库存量。YNNYYNNYNYN借书登记,修改book.dat中的现存信息,reader.dat中的借书卡信息Y5、还书管理模块:可用一个函数return_book(charreader_num[],charbook_num[])来实现。在实现此函数时要判断:A该读者的姓名是否已经存在,如果不存在,则提示错误。输入读者编号是否存在编号输出出错信息提示不能借书借书卡是否满是否还书进入还书模块输入需要借的书号书号存在否还有读者借书是否重输否满结束B该读者是否已经借阅此书。如果没有,则提示错误。C还书过程完成后,则对读者信息里的借书信息清零,并修改库存量。YNYN错误正确还书将读者信息借书卡清0修改book.dat现存信息NY6、输出信息模块:可分别用模块print_book()和print_reader()来实现直接从book.dat文件和reader.dat文件中读取信息并输出。图书图书输入读者编号是否存在编号输出出错信息核对书号是否重输进入查询模块输入还书的书的编号还有读者还书是否重输否满开始结束选择输出图书还是读者信息输出全部图书信息输出全部读者信息结束7、退出系统模块:可用一个函数exit()来实现。首先将信息保存到文件,释放动态创建的内存空间,再退出此程序。如图6.1七调试分析(包含各模块的测试用例,及测试结果)7.1源程序#includestdio.h#includemath.h#includestring.htypedefstructbk{charbook_num[11];charbook_name[41];intbook_kc;intbook_xc;structbk*next;}book;/*图书信息*/typedefstructrd{charreader_num[11];charreader_name[11];charreader_book_num[11];structrd*next;}reader;/*读者信息*/structbk*h_book,*h_reader;/*全局变量,分别为指向图书信息链表和读者信息链表的头指针*/voidForm_Insert_New_Book();/*新书入库菜单*/voidForm_Find_Book();/*查询图书菜单*/voidForm_Borrow_Book();/*借书菜单*/新书入库图书查询借书登记还书登记输出图书信息输出读者信息退出系统图书管理系统voidForm_Return_Book();/*还书菜单*/voidFind_Book(char*);/*查询图书*/voidInsert_New_Book(char*,char*,int);/*新书入库,即在链表中插入一个新节点*/voidBorrow_Book(char*,char*);/*借书,修改读者借阅信息和图书的现存信息*/voidReturn_Book(char*,char*);/*还书,修改读者借阅信息和图书的现存信息*/voidprint_book(structbk*);/*输出全部图书信息*/voidprint_reader(structrd*);/*输出全部读者信息*/voidload_data();/*从文件中读取数据,链表头指针指向第一个节点*/voidinit_reader();/*第一次运行程序时对三个读者的初始化*/voidinit_book();/*第一次运行程序时对三本图书的初始化*/voidsave();/*将链表中的信息保存到文件中*/voidM_Form()/*主菜单*/{charch;printf(\n图书管理系统主窗口);printf(\n0:退出系统);printf(\n1:新书入库);printf(\n2:图书查询);printf(\n3:借书登记);printf(\n4:还书管理);printf(\n5:输出全部信息);do{/*此循环用来保证选择正确的数字键执行相应的功能*/printf(\n\n请选择相应的功能代码:);scanf(%c,&ch);fflush(stdin);/*用于清除键盘缓冲区中的多余字符*/}while(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5');switch(ch)/*根据输入的字符进行选择执行相应的模块*/{case'0':exit(0);case'1':Form_Insert_New_Book();break;case'2':Form_Find_Book();break;case'3':Form_Borrow_Book();break;case'4':Form_Return_Book();break;case'5':load_data();print_book(h_book);print_reader(h_reader);M_Form();default:printf(error\n);exit(0);}}voidForm_Find_Book(){charch;charbook_num[11];printf(\n图书查询功能模块,请选择相应的功能代码:\n);printf(0:返回到主菜单\n);printf(1:图书查询);do{printf(\n\n请选择相应的功能代码:);scanf(%c,&ch);fflush(stdin);}while(ch!='0'&&ch!='1');switch(ch){case'0':M_Form();break;/*选择0,则返回到上一级目录,即主菜单*/case'1':{printf(\n请输入需要需要查询的书的编号:);scanf(%s,book_num);fflush(stdin);Find_Book(book_num);/*执行查询*/Form_Find_Book();/*查询完毕后继续返回到查询窗口,执行下一个查询*/}default:printf(error\n);exit(0);}}voidFind_Book(charbook_num[])/*查询图书模块,根据图书编号查询*/{structbk*p;p=h_book;while(p!=NULL&&strcmp(p-book_num,book_num)!=0)p=p-next;/*此循环用于查找,如果在中间找到,则p就不可能到末尾指向空*/if(p==NULL)printf(\n\t此编号对应的图书不存在!\n);else{printf(\n\t图书编号\t图书名\t库存量\t现存量\n);printf(%10s\t%10s\t%d\t%d\t\n,p-book_num,p-book_name,p-book_kc,p-book_xc);}getch();}voidinit_book()/*初始化图书模块*/{bookba[3];FILE*fp;inti;printf(\n系统即将进行初始化,图书初始化模块:\n);printf(\n请分别输入三本书的书号,书名,数量(以空格隔开):\