已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安徽省巢湖学院计算机与信息工程学院课程设计报告课程名称 数据结构 课题名称 图书管理系统 专业 11网络工程 班级 1班 学号 姓名 联系方式 指导教师 20 12 年 6 月 23 日目 录1、数据结构课程设计任务书1.1、题目1.2、要求2、总体设计2.1、功能模块设计2.2、所有功能模块的流程图3、详细设计3.1、程序中所采用的数据结构及存储结构的说明3.2、算法的设计思想3.3、对图书借阅时的选择与操作4、调试与测试:4.1、调试方法与步骤:4.2、测试结果的分析与讨论:4.3、测试过程中遇到的主要问题及采取的解决措施:5、时间复杂度的分析:6、源程序清单和执行结果7、C程序设计总结8、致谢9、参考文献1、数据结构课程设计任务书1.1、题目图书馆管理系统1.2、要求【设计要求】对图书进行管理,系统具有如下功能1图书入库:新购一种书,确定书号后,登记到图书目录表中,如果表中已有,则只将库存量增加;图书数据包括图书书号,书名,作者,数量,单价等;2排序:以书号按升序进行排序(可以任选一种排序方法);3查找:能按书名、书号进行查找(分别用顺序查找和折半查找方法);4删除:从表中删除指定的图书;5借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;6归还:注销对借阅者的登记,改变该书的现存量。2、总体设计2.1、功能模块设计根据课程设计题目的功能要求,各个功能模块的组成框图如下:功能选择界面0.退出7.更改字体颜色6.归还图书5.借阅图书4.删除图书信息3.查找信息2.图书排序1.新书入库输入新书信息按学号升序排序按书名查找按书号查找按书名查找删除按书号查找删除输入书证号进入注册借阅者信息归还全部图书选择显示字体颜色归还其中一本图书2.2、所有功能模块的流程图3、详细设计模块功能说明:如函数功能、入口及出口参数说明,函数调用关系描述等;3.1、程序中所采用的数据结构及存储结构的说明typedef structint year; /年int month; /月int day; /日DATE;struct readbookchar studentTitle30; /借出的书名DATE loanDate; /借出日期DATE revertDate; /归还日期;union readStatechar Nobook20; /定义没有借书struct readbook data; /存储已借图书信息;typedef struct borrower /借阅者char studentID10; /书证号char studentName10; /姓名union readState ReadBook5; /借书状况int bookcount; /已借图书数量struct borrower *next;Borrower, *LinkBorrower;typedef struct book /图书char number20; /书号char title30; /书名char author20; /作者char translator20; /译者int count; /现存量char price10; /价格DATE date; /入库日期struct book *next;Book, * LinkBook;3.2、算法的设计思想1图书入库新购一种书,确定书号后,登记到图书目录表中,如果表中已有,则只将库存量增加;图书数据包括图书书号,书名,作者,数量,单价等;2排序以书号按升序进行排序(可以任选一种排序方法);3查找能按书名、书号进行查找(分别用顺序查找和折半查找方法);4删除从表中删除指定的图书;5借阅如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;6归还注销对借阅者的登记,改变该书的现存量。3.3、对图书借阅时的选择与操作a)注册定义一个共用体,没有借书和借书共用一个内存,注册时自动在共用体中赋值没有借书b)借阅输入书证号,若正确,进行借阅,共用体对借阅的书籍进行赋值,覆盖没有借书4、调试与测试:4.1、调试方法与步骤:第一步:测试新书入库:输入书名:1. 若书名存在:2. 若书名不存在,输入相关信息第二步:测试图书排序:图书按书号升序排序第三步:测试查找信息功能:第四步:测试删除图书信息功能:第五步:测试借阅图书功能1. 注册:2. 借阅:第六步:测试归还图书功能第七步:测试更改字体颜色功能4.3、测试过程中遇到的主要问题及采取的解决措施:在测试过程中我们遇到的主要问题就是发现在借阅图书功能模块出现了问题,无法准确地录入和读取图书信息。于是我们仔细的读了该功能模块的代码。但是,我们发现代码是正确的,完全找不到错误(也有可能是我们的水平有限,发现不了错误)。)。于是我们把目光投注到了定义共用体上,在仔细检查和查阅资料后我们发现,原来是因为我们为了可以在借书时可以借阅不止一体而将数组定义在了共用体内部变量的结构体上了,后来我们将数组改定义到了共用体上,一切问题就迎刃而解了。经过这件事我们发现我们的基础还不扎实,了解的知识范围还太狭隘,以后还要多加认真学习5、时间复杂度的分析:1图书入库输入图书,图书指针顺序查找,时间复杂度是O(n)2排序定义了两个图书指针变量,时间复杂度是O(n*n)3查找查找图书时是顺序查找,时间复杂度是O(n)4删除删除图书时是顺序查找删除,时间复杂度是O(n)5借阅写入借阅者信息时定义了两个借阅者指针,时间复杂度是O(n*n)6归还:归还图书时是顺序查找归还,时间复杂度是O(n)6、源程序清单和执行结果#include #include #include #include #include /#include function.h/*定义结构体*/typedef structint year; /年int month; /月int day; /日DATE;struct readbookchar studentTitle30; /借出的书名DATE loanDate; /借出日期DATE revertDate; /归还日期;union readStatechar Nobook20; /定义没有借书struct readbook data; /存储已借图书信息;typedef struct borrower /借阅者char studentID10; /书证号char studentName10; /姓名union readState ReadBook5; /借书状况int bookcount; /已借图书数量struct borrower *next;Borrower, *LinkBorrower;typedef struct book /图书char number20; /书号char title30; /书名char author20; /作者char translator20; /译者int count; /现存量char price10; /价格DATE date; /入库日期struct book *next;Book, * LinkBook;LinkBook Head;LinkBorrower Read;/*函数声明*/int Meun();/系统功能【1】void show();void Input();LinkBook CreatBook();void WritetoFile();LinkBook ReadfromFile();/系统功能【2】void Find();LinkBook sort();void Traverse();/系统功能【3】void Sort();void SortTitle();void SortNumber();/系统功能【4】void Delete();LinkBook DeleteTitle();LinkBook DeleteNumber();/系统功能【5】void Loan();LinkBorrower login();LinkBorrower CreatBorrower();LinkBorrower readReader();void writeReader();void loan();/系统功能【6】void Rever();/系统功能【7】void Changecolor();/*主函数*/int main(void)int choice;while(1)system(cls);fflush(stdin);choice=Meun(); /调用主菜单switch(choice)case 1:Input();break;case 2:Find();break;case 3:Sort();break;case 4:Delete();break;case 5:Loan();break;case 6:Rever();break;case 7:Changecolor();break;case 0:show();printf(欢迎再次光临,再见!n);return 0;default :show();printf(输入错误,程序终止!n);exit(0);return 0;/*主菜单*/int Meun(void)int choice;printf(=n);printf(欢迎进入图书馆管理系统n);printf(=nn);printf(【1】 新书入库n);printf(-n);printf(【2】 图书排序n);printf(-n);printf(【3】 查找信息n);printf(-n);printf(【4】 删除图书信息n);printf(-n);printf(【5】 借阅图书n);printf(-n);printf(【6】 归还图书n);printf(-n);printf(【7】 更改字体颜色n);printf(-n);printf(【0】 退出图书管理系统n);printf(n);printf(请选择:);fflush(stdin);scanf(%d,&choice);return choice;void show()system(cls);printf(=n);printf(欢迎进入图书馆管理系统n);printf(=nn);/*系统功能【1】 新书入库*/函数功能:图书入库:新购一种书,确定书号后,登记到图书目录表中,如果表中已有,则只将库存量增加;void Input()show();printf(系统功能【1】 新书入库n);char ch=y;char Newtitle20;Head=ReadfromFile(); /读取图书数据while(ch=y|ch=Y)fflush(stdin);LinkBook p=Head;int flay=0; /判断,书名不存在,flay=0; 书名存在,flay=1;printf(-n);printf(请输入书名:);scanf(%s,&Newtitle);while(p-next!=NULL)p=p-next;if(!strcmp(p-title,Newtitle)printf(书名存在,将其数量加一n);p-count+;flay=1;if(p-next=NULL&flay=0)printf(n);LinkBook q=(LinkBook)malloc(sizeof(Book);q-next=NULL;q-count=1;strcpy(q-title,Newtitle);printf(书名不存在,请继续输入:n);printf(书号:); scanf(%s,&q-number);printf(作者:);scanf(%s,q-author);printf(译者:);scanf(%s,q-translator);printf(价格:);scanf(%s,q-price);printf(入库日期:);scanf(%d%d%d,&q-date.year,&q-date.month,&q-date.day);p-next=q;printf(n输入 y 键继续n);printf(输入其它键,返回主菜单nt);fflush(stdin);scanf(%c,&ch);WritetoFile(); /写入文件/函数功能:创建一个新书链表LinkBook CreatBook()LinkBook head;head=(LinkBook)malloc(sizeof(Book); /生成链表头结点head-next=NULL;return head;/函数功能:输出新书信息到文件book.txt中void WritetoFile()FILE *fp;LinkBook p=Head-next;if(fp=fopen(book.txt,w)=NULL)printf(文件打开失败,程序终止!n);exit(0);for(; p!=NULL; p=p-next)fprintf(fp,%15s%25s%20s%15s%7d%15s%15d/%02d/%02dn,p-number,p-title,p-author,p-translator,p-count,p-price,p-date.year,p-date.month,p-date.day);fclose(fp);/system(PAUSE);/函数功能:从文件中读取图书信息到结构体指针中LinkBook ReadfromFile()FILE *fp;if(fp=fopen(book.txt,r)=NULL)printf(文件打开失败,程序终止!n);exit(0);LinkBook head,h;head=CreatBook();h=CreatBook();LinkBook p=head;LinkBook s=h;for(LinkBook q; !feof(fp); q=q-next)q=(LinkBook)malloc(sizeof(Book);q-next=NULL;fscanf(fp,%15s%25s%20s%15s%7d%15s%15d/%02d/%02d,&q-number,&q-title,&q-author,&q-translator,&q-count,&q-price,&q-date.year,&q-date.month,&q-date.day);s-next=q;s=q;s=h;if(s-next!=NULL)while(s-next-next!=NULL)s=s-next;p-next=s;p=s;p-next=NULL;fclose(fp);return head;/*系统功能【2】 图书排序*/void Find()show();printf(系统功能【2】 图书排序nn);Head=sort(); /插入方法排序Traverse(); /遍历printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();/函数功能:以书号按升序进行排序/参考书本数据结构 课程设计P147页:按直接选择排序算法思想,每次选择到最小的结点后,将其脱链并加入到一个新链表中,/ 这们可避免结点域值交换,最后将新多边表的头指针返回。LinkBook sort()/找最小的结点作为新表的第一个结点,/找次小的作为第二个结点,依次类推LinkBook head;head=ReadfromFile(); /读取图书数据LinkBook head1;head1=NULL; /置空新表LinkBook p,q,u,s,t;while(head-next!=NULL)s=head-next; /先假设s 指向关键字最小的结点 p=head-next;q=NULL; /q指向p的前趋结点u=NULL; /u指向s的前趋结点while(p!=NULL)if(strcmp(p-number,s-number)next; /指向后继结点if(s=head-next) /循环前的假设成立head-next=head-next-next; /指向后继结点elseu-next=s-next; /删除最小结点if(head1=NULL)head1=s;t=s;elset-next=s; /插入新结点(尾插法,升序)t=s; head-next=head1; /带回新表头指针return head;void Traverse()LinkBook p=Head-next;while(p!=NULL)printf( *n);printf( 书号 书名 作者 译者n);printf( -n);printf(%15s%25s%20s%15sn,p-number,p-title,p-author,p-translator);printf(n 价格 数量 入库日期n);printf( -n);printf(%7d%15s%15d/%02d/%02dnn,p-count,p-price,p-date.year,p-date.month,p-date.day);p=p-next;/*系统功能【3】 查找信息*/3查找:能按书名、书号进行查找(分别用顺序查找和折半查找方法);void Sort()while(1)show();printf(系统功能【3】 查找信息nn);char choice;printf(【1】 按书名查找n);printf(-n);printf(【2】 按书号查找n);printf(n);printf(输入对应数字键进入操作页面n);printf(输入其它键,返回主菜单n);printf(请选择:);fflush(stdin);scanf(%c,&choice);switch(choice)case 1:SortTitle();break;case 2:SortNumber();break;default :return;/函数功能:按书名进行查找void SortTitle()show();LinkBook head=ReadfromFile(); /读取图书数据LinkBook p=head-next;int flat=0;char NewTitle30;printf(请输入书名:);scanf(%s,&NewTitle);while(p!=NULL)if(!strcmp(p-title,NewTitle)flat=1;printf( *n);printf( 书号 书名 作者 译者n);printf( -n);printf(%15s%25s%20s%15sn,p-number,p-title,p-author,p-translator);printf(n 价格 数量 入库日期n);printf( -n);printf(%7d%15s%15d/%02d/%02dnn,p-count,p-price,p-date.year,p-date.month,p-date.day);break;p=p-next;if(flat=0)printf(图书查找失败!n);printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();/函数功能:按书号进行查找void SortNumber()show();LinkBook head=ReadfromFile(); /读取图书数据LinkBook p=head-next;char NewNumber20;int flat=0;printf(请输入书号:);scanf(%s,&NewNumber);while(p!=NULL)if(!strcmp(p-number,NewNumber)flat=1;printf( *n);printf( 书号 书名 作者 译者n);printf( -n);printf(%15s%25s%20s%15sn,p-number,p-title,p-author,p-translator);printf(n 价格 数量 入库日期n);printf( -n);printf(%7d%15s%15d/%02d/%02dnn,p-count,p-price,p-date.year,p-date.month,p-date.day);break;p=p-next;if(flat=0)printf(图书查找失败!n);printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();/*系统功能【4】 删除图书信息*/函数功能:从表中删除指定的图书void Delete()while(1)show();printf(系统功能【4】 删除图书信息nn);char choice;printf(【1】 按书名查找删除n);printf(-n);printf(【2】 按书号查找删除n);printf(n);printf(输入对应数字键进入操作页面n);printf(输入其它键,返回主菜单n);printf(请选择:);fflush(stdin);scanf(%c,&choice);switch(choice)case 1:Head=DeleteTitle(); /按书名查找删除WritetoFile(); /重新写入文件break;case 2:Head=DeleteNumber(); /按书号查找删除WritetoFile(); /重新写入文件break;default :return;/函数功能:按书名查找删除LinkBook DeleteTitle()show();LinkBook head=ReadfromFile(); /读取图书数据LinkBook p=head-next;LinkBook q=head;Book s;int flat=0;char NewTitle30;printf(请输入书名:);scanf(%s,&NewTitle);while(p!=NULL)if(!strcmp(p-title,NewTitle)flat=1;s=*p;q-next=q-next-next;free(p);break;p=p-next;q=q-next;if(flat=1)printf(n图书删除成功!nn);elseprintf(n图书删除失败!nn);printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();return head;/函数功能:按书号查找删除LinkBook DeleteNumber()show();LinkBook head=ReadfromFile(); /读取图书数据LinkBook p=head-next;LinkBook q=head;Book s;int flat=0;char NewNumber30;printf(请输入书名:);scanf(%s,&NewNumber);while(p!=NULL)if(!strcmp(p-number,NewNumber)flat=1;s=*p;q-next=q-next-next;free(p);break;p=p-next;q=q-next;if(flat=1)printf(n图书删除成功!nn);elseprintf(n图书删除失败!nn);printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();return head;/*系统功能【5】 借阅图书*/5借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量void Loan()while(1)show();printf(系统功能【5】 借阅图书nn);char choice;printf(【1】 输入书证号进入操作页面n);printf(-n);printf(【0】 如果没有注册,请先注册nn);printf(输入对应数字进入操作页面n);printf(输入其它键,返回主菜单n);printf(请选择:);fflush(stdin);scanf(%c,&choice);switch(choice)case 1:loan();break;case 0:Read=login();break;default :return;/函数功能:注册借阅者信息LinkBorrower login()show();printf(系统功能【5】 借阅图书nn);Read=readReader();LinkBorrower p=Read;LinkBorrower q=(LinkBorrower)malloc(sizeof(Borrower);q-next=NULL;printf(请输入书证号:);scanf(%s,q-studentID);while(p-next!=NULL)if(!strcmp(p-next-studentID,q-studentID)printf(书证号已存在!n);printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();return Read;p=p-next;printf(姓名:);scanf(%s,q-studentName);char ch=没有借书;strcpy(q-ReadBook0.Nobook,ch);q-bookcount=0;p-next=q;writeReader(); /写入借阅者信息printf(注册成功!n);printf(*n);printf(*输入任意键,返回上一层*n);printf(*n);getch();return Read;/函数功能:创建一个新借阅者信息链表LinkBorrower CreatBorrower()LinkBorrower read;read=(LinkBorrower)malloc(sizeof(Borrower);read-next=NULL;return read;/函数功能:写入借阅者信息void writeReader()FILE *rp;LinkBorrower p=Read-next;if(rp=fopen(reader.txt,w)=NULL)printf(文件打开失败,程序终止!n);exit(0);for(; p!=NULL; p=p-next)if(p-bookcount=0)fprintf(rp,n%10s%10s%3d%25sn,p-studentID,p-studentName,p-bookcount,p-ReadBook0.Nobook);elsefprintf(rp,n%10s%10s%3dn,p-studentID,p-studentName,p-bookcount);for(int i=0;ibookcount;i+)fprintf(rp,%48s%10d/%02d/%02d%6d/%02d/%02dn,p-ReadBooki.data.studentTitle,p-ReadBooki.data.loanDate.year,p-ReadBooki.data.loanDate.month,p-ReadBooki.data.loanDate.day,p-ReadBooki.data.revertDate.year,p-ReadBooki.data.revertDate.month,p-ReadBoo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 呼吸机维护及管路连接
- 生物(广东卷01)(考试版)-2026年高考考前预测卷
- 电梯困人应急救援处置流程
- 焊接段焊缝参数标准化制度
- 宠物康复课程续费激励方案
- 门诊猫口腔炎症处置流程规范
- 监控中心管理规定细则手册
- 关键工序首件确认质量制度
- 地下室降水支护同步施工方案
- 涂装线多班产能协调执行计划
- 基于模拟教学的急危重症团队快速反应培训
- 2026年保密工作知识考试题库及答案
- 2026年甘肃省陇南市宕昌县人民法院招聘聘用制司法辅助人员考试参考试题及答案解析
- 髋关节撞击综合征标准化诊疗专家共识(2026版)
- 2025年系统规划与管理工程师考试真题及答案
- 涉密地理信息保密制度
- 挡土墙搭设脚手架专业方案
- 健康企业建设评估技术指南
- 第八章典型粮食制品的加工工艺及实训
- 四川成都锦江区2023年七下数学期中监测模拟试题含解析
- 矿井双回路供电中断安全技术措施
评论
0/150
提交评论