·计算机科学与技术专业13级《数据构造》课程设计报告学院:数学与计算机科学学院班级:计科13-1设计题目:图书管理系统姓名:元乾学号:指引教师:郝继升目录一、设计任务 (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();exit(0);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()/*添加读者*/{ RD *p0;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 Insert_New_Book()新书入库函数void add_reader()添加读者函数void Print_reader()查询读者信息函数void Print_book()查询图书信息函数void Borrow_Book()借书函数void Return_Book()还书函数void Save()保存信息函数void Save_Book()保存图书信息函数vo id Save_Reader()保存读者信息函数void Load()加载信息函数void Load_Reader() 加载读者信息void Load_Book() 加载图书信息参照文献:C语言程序设计(何钦铭版)数据构造(耿国华版)数据构造课程设计(苏仕华版)六、心得体会本次课程设计,使我对《数据构造》这门课程有了更进一步理解。