·计算机科学与技术专业13级《数据结构》课程设计报告学院:数学与计算机科学学院班级:计科13-1设计题目:图书管理系统姓名:元乾学号:1200313056037指导教师:郝继升目录一、设计任务 (3)1.设计目的 (3)2.问题描述 (3)3.设计基本要求 (3)二、本人任务 (4)三、功能简介 (4)四、主体容 (5)1.问题分析 (6)2.数据结构结构体定义 (6)3.算法设计及程序流程图 (8)1)主菜单 (8)2)登记读者 (9)3)借阅图书 (10)4)查询读者 (14)4.运行结果和调试分析 (15)五、附录 (23)参考文献 (24)六、心得体会 (24)一、设计任务Ⅰ、设计目的1、了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2、初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3、提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4、训练用系统的观点和软件开发一般规进行软件开发。
Ⅱ、问题描述设计一个计算机管理系统完成图书管理基本业务。
Ⅲ、设计基本要求1)每种书的登记容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。
进一步完成容:1)系统功能的进一步完善;2)索引表采用树表。
3)设计容4)程序流程图5)源程序6)软件测试报告(包括所用到的数据及结果)二、本人任务设计并编程图书管理中的主菜单、借阅、登记读者、查询读者共四个模块。
三、功能简介1)图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。
2)新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。
3)添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书4)借书模块读者输入读书证号,证号存在输入要借的图书编号,不能借同一本书,如果借书数量以达到最大也不能借书。
5)还书模块归还已借的图书,要先输入读者书证号,书证号存在继续输入要还的图书编号,图书编号存在并且借来此书,归还成功。
6)查询图书信息7)查询读者信息可查询读者姓名书证号,借了几本书,都是什么书和还书日期,还可以借几本书。
8)退出退出读书管理系统并保存读者和图书信息。
四、主体容图书管理系统总体情况如下图:这个系统主要有四大模块,图书管理模块、读者管理模块、借阅操作模块、查询操作模块。
每个模块下又有几个分支模块。
1.问题分析主菜单模块需要设计一个可供选择的界面,在界面过选择不同的按键来实现不同的功能。
登记读者模块需要可以记录学生的书证号以及学生的姓名。
借书模块中学生可以通过书证号和所需要借的书的编号来借书,借书完成后图书数量减少。
查询读者模块需要随着读者借书、还书不断变化,总是能显示出当前读者的准确信息。
2.数据结构结构体定义typedef struct book{char book_num[10];char book_name[20]; 定义图书的编号,名称,作者,char book_writer[10]; 现有以及库存数量int book_xy;int book_kc;struct book *next; 定义图书结构体}BK; 数据记录借阅文件:typedef struct borrow{char borrow_book_num[10]; 定义借阅图书编号以char limit_date[8]; 及还书日期}BO; 数据记录typedef struct reader{char reader_num[10]; 定义读者书证号以 char reader_name[10];及读者姓名int right;BO borrow[Max]; 借书最大数量struct reader *next; 定义读者结构体}RD; 数据记录3.算法设计及程序流程图进入系统后,显示功能列表,可选择任意系统。
①主菜单:程序流程图:源程序:int Menu() /*主菜单*/{ int dm;printf("\n\t\t图书管理系统主菜单\n");printf("========================================== =======\n");printf("*\t0----退出系统\n");printf("*\t1----采编入库\n");printf("*\t2----登记读者\n");printf("*\t3----借阅登记\n");printf("*\t4----还书管理\n");printf("*\t5----查询图书信息\n");printf("*\t6----查询读者信息\n");printf("========================================== =======\n");printf("请选择相应的代码:");for(;;){ scanf("%d",&dm); //dm输入的数字if(dm<0||dm>6)printf("\n错误!请重新输入:");else break;}return dm;}void Menu_select()/*主菜单选择函数*/{for(;;){switch(Menu()) /*功能选择*/{ case 0:system("cls");Save();printf("\n\n\t文件保存成功!\n");printf("\n\n\t欢迎下次使用本系统!\n");getch();case 1:Insert_New_Book();break;case 2:add_reader();break;case 3:Borrow_Book();break;case 4:Return_Book();break;case 5:Print_book();break;case 6:Print_reader();break;default:printf("\n错误!");exit(0);}}}②登记读者:源程序:void add_reader()/*添加读者*/int i;printf("\n读者初始化开始,请输入读者信息..\n包括书证号.姓名..\n"); p0=(RD*)malloc(sizeof(RD)); /*申请新结点存储空间*/h_reader=p0;printf("\n请输入读者的信息:\n");printf("读者书证号:");scanf("%s",p0->reader_num);printf("读者姓名:");scanf("%s",p0->reader_name);p0->right=0;for(i=0;i<Max;i++){strcpy(p0->borrow[i].borrow_book_num,"0"); /*所借图书直接置为(即没有借书)*/strcpy(p0->borrow[i].limit_date,"0");}p0->next=NULL;printf("\n读者信息初始化完毕!按任意键继续下一步操作..\n");getch();system("cls");}源程序:void Borrow_Book() /*借书模块*/{BK *p0; RD *p1;char bo_num[10],rea_num[10],lim_date[8];int i;p0=h_book; p1=h_reader;printf("\n借书模块...\n");printf("\n请输入借书的读者书证号:");scanf("%s",rea_num);while(p1->next!=NULL&&strcmp(rea_num,p1->reader_num)!=0) p1=p1->next;if(p1->next==NULL&&strcmp(rea_num,p1->reader_num)!=0) {printf("\n此读者编号不存在!按任意键返回..\n");goto END;}printf("\n请输入你要借的书的编号:");scanf("%s",bo_num);while(strcmp(bo_num,p0->book_num)!=0&&p0->next!=NULL)p0=p0->next;if(p0->next==NULL&&strcmp(bo_num,p0->book_num)!=0){printf("\n此图书编号不存在!按任意键返回..\n");goto END;}else if(p0->book_xy<=0){printf("\n抱歉,此书已借完!请等待新书的到来!!\n按任意键返回...."); goto END;}else if(p1->right>Max||p1->right==Max){printf("\n不好意思,借书数目已满!不能借书!\n按任意键返回...."); goto END;}else if(strcmp(p1->borrow[0].borrow_book_num,"0")!=0){for(i=0;i<Max;i++){if(strcmp(p1->borrow[i].borrow_book_num,bo_num)==0){printf("\n抱歉!同一个读者不能同借两本相同的书!\n按任意键返回....");goto END;}else if(strcmp(p1->borrow[i].borrow_book_num,"0")==0){printf("\n请输入你要归还图书的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);strcpy(p1->borrow[p1->right-1].limit_date,lim_date);p0->book_xy--;p0->book_kc--;printf("\n读者编号%s借书完毕!按任意键继续下步操作..",p1->reader_num);goto END;}}}else{printf("\n请输入你要归还图书的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);strcpy(p1->borrow[p1->right-1].limit_date ,lim_date );p0->book_xy--;p0->book_kc--;printf("\n读者编号%s借书完毕!按任意键继续下步操作..",p1->reader_num);}END:getch(); system("cls");}void Print_reader() /*查询读者信息*/{RD *p;int i;p=h_reader;printf("\n读者信息如下:\n\n");printf("读者书证号\t\t读者姓名\n");printf("\n");while(p!=NULL){printf("\t%s\t\t%s",p->reader_num,p->reader_name);for(i=0;i<Max;i++){printf("\n");printf("图书编号",i+1);printf("\t还书日期",i+1);printf("\n");printf("\t%s",p->borrow[i].borrow_book_num);printf("\t\t%s",p->borrow[i].limit_date);}printf("\n");p=p->next;}printf("\n读者信息打印完毕!按任意键继续下一步操作.."); getch();system("cls");}4.运行结果和调试分析同一本新书入库的运行结果图不同的新书采编入库采编入库后查询图书信息的运行结果图登记读者信息借书借书后查询图书信息的运行结果图借同一本书的运行结果图借不同的书借两本书后查询读者信息的运行结果图还书运行结果图还书之后再查询读者信息的运行结果图还书后查询图书信息退出5.附录void Login()进入界面函数int Menu()主菜单函数void Init()初始化函数void Init_book()初始化图书信息函数void Menu_select()主菜单选择函数void Find_Book()查找图书函数新书入库函数void add_reader()添加读者函数voidInsert_New_Book()void Print_reader()查询读者信息函数void Print_book()查询图书信息函数void Borrow_Book()借书函数void Return_Book()还书函数void Save()保存信息函数void Save_Book()保存图书信息函数vo id Save_Reader()保存读者信息函数void Load()加载信息函数参考文献:C语言程序设计(何钦铭版)数据结构(耿国华版)数据结构课程设计(苏仕华版)六、心得体会本次课程设计,使我对《数据结构》这门课程有了更深入的理解。