版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE22课程设计报告书图书管理系统程序实践报告1.概述1)程序实践题目:图书管理系统1、具有新进图书基本信息的录入、已有信息的修改、撤销图书信息的删除功能。2、图书信息的查询(按作者名、专业领域检索,找出某读者的借阅信息、某本书的流通情况等)3、为借书人办理注册。4、办理借、还书手续5、有关信息保存在文件中。6、要有信息描述,如图书名称、专业领域、图书编号、单价、作者、出版社、存在状态、借书人姓名、性别、学号等7、借书数量不超过10本。2)程序实践目的:更深入地理解和掌握课程大一上学期c语言教学中的有关基本概念,运用学过的知识进行实际编程,应用基本技术解决实际问题从而进一步提高分析问题和解决问题的能力。3)程序实践具体要就:本程序使用codeblocks软件进行编译;需要灵活运用C语言的链表知识和文件知识;在编程前,我对文件方面的知识尚不了解,同时对如atoi(),Sleep(),等函数不了解。2.软件需求分析1)软件功能:1.初始化图书链表,学生链表(即清空当前内存中图书信息,学生信息)2.创建新的图书链表,学生链表3.查找图书信息,学生信息4.查看当前图书链表上所有图书的信息,当前学生链表上所有学生的信息5.添加修改删除图书信息6.查看图书借阅信息7.被删除的书先被放在回收站,管理员可以查看回收站,并决定彻底删除图书信息或是恢复已删图书8.学生借书还书9.读取文件上的链表保存链表到文件2)性能需求3)约束条件:本程序代码使用codeblocks编译没有错误出现,并且程序运行良好若使用vc6.0编译,部分函数会报错,具体原因未知其他编程软件没有尝试对内存和硬件要求不高,现有电脑一般都可运行3.总体设计1)设计思路:为方便数据的插入和删除,使用链表俩实现上述基本操作。为此构建3个数据链表,分别是图书信息链表,学生信息链表,回收站信息链表。每个链表中的数据部分即为需要表达的基本数据信息。在功能模块的信息的录入,浏览,查询,删除和修改等操作均由相应的函数来实现,另外提供选择菜单实现功能,以执行相应的功能。2)该软件系统总体模块结构图:恢复所有已删图书初始化图书链表图书管理系统图书模块创建图书链表查找图书恢复所有已删图书初始化图书链表图书管理系统图书模块创建图书链表查找图书查看所有图书信息添加图书记录修改图书记录查看图书借阅信息回收站图书放入回收站查看回收站恢复已删图书登陆初始化学生链表查看某个学生信息添加学生信息查看学生链表对学生链表排序学生借书文件操作读取文件至图书链表保存图书链表至文件读取文件至学生链表保存学生链表至文件退出学生还书学生模块清空回收站3)特点:操作简单,运行方便功能:见上图4)总体数据结构设计:定义图书结构体数据类型:typedefstructbook{intdel;//指示书是否放在回收站,0代表放入回收站charid[11];//书编号charname[11];//书名charprice[6];//书作者charauthor[11];//价格charpublisher[21];//出版社charsub[21];//专业intamount;//书的数量intstu_id[20];//借阅的学生学号structbook*next;//指向下一本书的指针}Book;定义学生结构体数据类型:typedefstructstudent{intdel;//指示该学生是否被删除intstunum;//学号charname[8];//姓名charsex[8];//性别charcode[21];//借书证号charbook_id[10][11];//每人最多借10本书,存储图书编号structstudent*next;//指向下一个学生的指针}stu;5)我所承担的设计工作:图书模块和回收站的第一个部分解决的关键性问题:图书链表的建立,图书模块和回收站的转换4详细设计图书模块(注:下面的流程图中,head代表图书链表的头指针)1)初始化图书链表开始开始head=NULLhead=NULL结束结束2)创建图书链表编号存在开始编号存在开始输入一个字符是否为N或n否输入编号编号为空是否是输出图书具体信息否输出“添加图书成功”结束开始exist=0ee=headee=NULL否strcmp(ee->id,b_id)=0否ee=ee->next是exist=1是输出exist结束附:下图为判断图书编号是否存在。ee为指针,b_id为输入的图书编号,eist=0代表编号不存在,exist=1代表存在保存数据至文件3)查找图书(注:ss是与head同类型的指针)结束开始ss=head结束开始ss=headss为空输出“尚未添加任何图书”是输入1或2是否为1或2输出“请重新输入”否是否为1是是输入图书编号查找图书找到书否输出“该书不存在”ss->del为1否输出“该书在回收站”是输出图书具体信息否输入图书专业查找图书找到书否输出“该书不存在”输出图书具体信息保存数据至文件4)查看所有图书信息(p是与head同类型的指针,i用来记录图书信息的数量)开始开始i=0,p=headhead为空是否输出一条图书信息i++,p=p->nextp->next为空是否i>10&&i%10==0是输出“按任意键看下一屏输入一个字符结束5)添加图书(bbb-id是用来存储图书编号的字符数组,info,p,q是和head同类型的指针开始开始输入添加的图书的编号输入添加的图书的编号结束编号存在是结束编号存在是输出“编号已存在,请重新输入否p=headInfo=(Book*)malloc(sizeof(Book))info=NULL是否strcpy(info->id,bbb_id)Info->next=NULLhead=NULL是head=info否P!=NULL&&strcmp(info->id,bbb_id)>0是q=p,p=p->nextq->next=info,info->next=p输入一个字符字符为N或n否是输出“添加图书成功保存数据至文件6)修改图书记录mod_id用来存储输入的图书号new_id用来存储修改后的图书号mod_id用来存储输入的图书号new_id用来存储修改后的图书号k,p为指针开始head==NULL输出“图书链表为空,请返回操作是否strcpy(mod_id,""),strcpy(new_id,"")k=head输入需要修改的书的编号查找书找到书输出图书信息输入一个字符是否字符为N或n是否输入新的图书信息p=p->next输入一个字符字符为N或n是否保存数据至文件结束7)查看图书借阅信息开始开始bexist=i=0,ss=head,tt=sheadbexist=i=0,ss=head,tt=sheadss=NULL是输出“尚未添加图书链表”否查找图书找到书否是输出“该书不存在”输出图书借阅信息结束开始开始Book*ff,FILE*pfpf=fopen("e:\\bookdata,txt","wb"ff=headff!=NULLfwrite(ff,sizeof(Book),1,pf)ff=ff->next是否fclose(pf)结束附:右图为“保存数据至文件”(图书模块)回收站第一个部分查看回收站开始开始i=0head==NULL否p=headp!=NULL否是输出一条图书信息i++i>0&&i%10==0否是输出“按任意键,输出下一屏”输入一个字符是输出“图书链表为空,请返回操作结束5.程序调试与测试1)错误:没有区分中文和英文的分号2)错误:if语句中,应该是bbexist==0,而bbexist=0是赋值语句。6.总结与体会设计的图书管理系统基本达到了要求,功能也较为完善但是,鉴于我们水平的限制,无法做成类似windows那样的窗口程序,且没能在程序开头插入动画音乐,同时系统不能同时容纳多个同中类型的链表,需要借助文件的传输7.结束语8.程序清单1)intmenu(){system("cls");inthh,me;charstr[3];char*menu_list[]={"\n图书模块:1.初始化图书列表","\n\t2.创建图书链表(当前图书列表会被删除,若有需要先将当前图书链表保存)","\n\t3.查找图书","\n\t4.查看所有图书信息","\n\t5.添加图书记录","\n\t6.修改图书记录","\n\t7.根据图书编号查看图书借阅信息","\n回收站:8.查看回收站","\n\t9.放入回收站","\n\t10.回复已删图书","\n\t11.回复所有已删图书","\n\t12.清空回收站","\n学生模块:13.初始化学生链表","\n\t14.查看某个学生信息","\n\t15.添加学生","\n\t16.学生借书","\n\t17.查看学生链表","\n\t18.学生还书","\n\t19.对学生链表排序","\n文件操作:20读取文件至图书链表","\n\t21.保存图书链表至文件","\n\t22.读取文件至学生链表","\n\t23.保存学生链表至文件","\n退出24.退出系统"};for(me=0;me<24;me++)printf("%s",menu_list[me]);do{printf("\n请选择操作1-24:");scanf("%s",str);hh=atoi(str);//将字符串转化为整数}while(hh<1||hh>24);return(hh);}2)Book*creat(){system("cls");inta;charc,filename[51];charbb_id[11];//书籍编号Book*head,*p,*q;a=1;head=NULL;q=head;printf("\n\n\n\n\t\t\t开始创建图书链表!\n\n");for(;;){strcpy(bb_id,"");printf("请按任意键继续添加或者按N返回");c=getch();if(c=='N'||c=='n')break;printf("\n请输入第%d本书",a);inputs("编号",bb_id,10);if(strlen(bb_id)==0){printf("书籍编号不能为空,重新输入\n");continue;}if(book_is_exist(head,bb_id)==1){printf("该书籍编号已存在,重新输入\n");continue;}p=(Book*)malloc(sizeof(Book));if(!p)exit(0);p->del=1;strcpy(p->id,bb_id);inputs("请输入图书名称",p->name,10);inputs("请输入图书作者",p->author,10);inputs("请输入图书价格",p->price,5);inputs("请输入图书出版社",p->publisher,20);inputs("请输入图书专业",p->sub,20);p->amount=isnumber("请输入图书数量(5000以下):");printf("");p->next=NULL;if(head==NULL)//当前为空表修改头指针{head=p;q=p;}else{q->next=p;//注意原理尾插法q=p;}a++;}printf("\n\n添加图书成功!");Book*ff;FILE*pf;pf=fopen("e:\\bookdata.txt","wb");ff=head;while(ff!=NULL){fwrite(ff,sizeof(Book),1,pf);ff=ff->next;}fclose(pf);returnhead;}3)intisnumber(char*msg)//msg提示用户输入什么提示信息{inti,j,hh,len;charpp[50];for(;;){j=0;printf(msg);scanf("%s",pp);hh=atoi(pp);if(hh>5000){printf("\n\n\n\n\n\t\t\t你输入的数字超过5000!");continue;}elsebreak;}returnhh;}4)intinputs(char*pro,char*s,unsignedcount)//pro提示用户要输入的信息s将用户输入的字符串保存至这个变量中count是用户输入字符的最大数量{charp[255];do{printf(pro);scanf("%s",p);if(strlen(p)>count)printf("你输入的太多");}while(strlen(p)>count);strcpy(s,p);return0;}5)intb_search(Book*head)//查找图书{system("cls");intbbexist,b;charsb_id[11],sb_sub[21],c;//图书编号查找图书专业查找Book*ss;ss=head;if(ss==NULL){printf("\n\n\n\t\t\t");printf("\n\t\t\t尚未添加任何图书!");printf("\n\t\t\t");printf("\n\n按任意键返回");getch();return0;}bbexist=0;printf("\n\n\n\n\t\t\t1.按图书编号查找\n\t\t\t2.按图书专业查找");c=getch();for(;;){if(c=='1'||c=='2')break;else{printf("请输入正确代码1或2");c=getche();}}if(c=='1')b=1;elseb=2;switch(b){case1:printf("\n");{inputs("请输入你要查找的图书编号;",sb_id,10);//输入的图书标号被保存在sb_id中while(ss!=NULL){if(strcmp(ss->id,sb_id)==0){if(ss->del==1){printf("\n该图书已找到:");printf("\n图书编号:%s",ss->id);printf("\n图书名称:%s",ss->name);printf("\n图书作者:%s",ss->author);printf("\n图书价格:%s",ss->price);printf("\n图书出版社:%s",ss->publisher);printf("\n图书专业:%s",ss->sub);printf("\n图书库存量:%d",ss->amount);bbexist=1;}else{printf("\n该书已被删除到回收站");bbexist=1;}break;}ss=ss->next;}break;}case2:{printf("\n");inputs("请输入要查找的图书的专业",sb_sub,20);while(ss!=NULL){if(strcmp(ss->sub,sb_sub)==0){if(ss->del==1){printf("\n图书编号:%s",ss->id);printf("\n图书名称:%s",ss->name);printf("\n图书作者:%s",ss->author);printf("\n图书价格:%s",ss->price);printf("\n图书出版社:%s",ss->publisher);printf("\n图书专业;%s",ss->sub);printf("\n图书库存量:%d",ss->amount);bbexist=1;printf("\n\n\n");}}ss=ss->next;}}}if(bbexist==0)printf("\n该书不存在");printf("\n\n\n按任意键继续");getch();returnbbexist;}6)intsee_b_borrow(Book*head,stu*shead){system("cls");charb_id[11];Book*ss;stu*tt;intbexist=0,i=0;ss=head;tt=shead;inputs("\n\n\n请输入图书编号",b_id,10);if(ss==NULL){printf("\n");printf("\n尚未添加任何图书!");printf("\n");Sleep(1000);return0;}while(ss!=NULL){if(strcmp(ss->id,b_id)==0){printf("\n图书已找到!");printf("\n图书名称:%s",ss->name);printf("\n借阅该书的学生有:");for(i=0;ss->stu_id[i]!=0;i++){tt=shead;while(tt!=NULL){if(tt->stunum-ss->stu_id[i]==0){printf("\n学号:%d",ss->stu_id[i]);printf("\t姓名:%s\t性别:%s",tt->name,tt->sex);}tt=tt->next;}printf("\n");}bexist=1;}ss=ss->next;}if(bexist==0)printf("\n该书不存在");printf("\n按任意键继续");getch();return0;}7)intprint(Book*head)//查看图书链表{system("cls");inti;Book*p;if(head==NULL){printf("图书链表为空!请返回重新操作!");Sleep(2000);return0;}i=0;p=head;printf("\n以下为库存信息:\n\n");printf("|编号|书名|作者|价格|出版|专业|数量|\n");while(p!=NULL){if(p->del==1){printingoodway(p->id,p->name,p->author,p->price,p->publisher,p->sub,p->amount);i++;}p=p->next;if(i>10&&i%10==0){printf("\n按任意键看下一屏\n");getch();}}printf("||||||||\n");printf("\n按任意键继续...");getch();returni;}8)Book*insert(Book*head)//添加图书信息{system("cls");charc;charbbb_id[11];Book*info,*p,*q;for(;;){strcpy(bbb_id,"");inputs("\n\n\n请输入将要添加的书的编号",bbb_id,10);if(book_is_exist(head,bbb_id)==1){printf("该编号已存在");continue;}p=head;info=(Book*)malloc(sizeof(Book));if(!info)exit(0);info->del=1;strcpy(info->id,bbb_id);inputs("请输入图书名称:",info->name,10);inputs("请输入图书作者:",info->author,10);inputs("请输入图书价格:",info->price,10);inputs("请输入图书出版商:",info->publisher,20);inputs("请输入图书专业:",info->sub,20);info->amount=isnumber("请输入图书数量(5000以下)");info->next=NULL;if(head==NULL)head=info;else{while(p!=NULL&&strcmp(info->id,p->id)>0){q=p;p=p->next;}q->next=info;info->next=p;}printf("\n按任意键继续添加或者按N结束添加\n");c=getch();if(c=='n'||c=='N')break;}printf("\n添加图书成功!\n按任意键返回主菜单");getch();Book*ff;FILE*pf;pf=fopen("e:\\bookdata.txt","wb");ff=head;while(ff!=NULL){fwrite(ff,sizeof(Book),1,pf);ff=ff->next;}fclose(pf);returnhead;}9)intmodify(Book*head)//修改图书信息{system("cls");charc,d;charmod_id[11];charnew_id[11];Book*p,*k;if(head==NULL){printf("图书链表为空!请返回操作");Sleep(1000);return0;}for(;;){strcpy(mod_id,"");strcpy(new_id,"");k=head;inputs("\n\n\n请输入要修改信息的书的编号",mod_id,10);p=head;while(p!=NULL){if(0==strcmp(p->id,mod_id)&&p->del==1){printf("\n要修改的书已找到:\n\n");printf("|编号|书名|作者|价格|出版|专业|数量|\n");printingoodway(p->id,p->name,p->author,p->price,p->publisher,p->sub,p->amount);printf("\n若确认修改按任意键继续;按N返回");d=getche();if(d=='n'||d=='N')break;else{inputs("\n输入修改后的图书编号",new_id,10);if(book_is_exist(k,new_id)==1){printf("\n\n该编号已存在!");continue;}strcpy(p->id,new_id);inputs("修改后的书名:",p->name,10);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 平安保持协议合同范本
- 建材安装搬运合同范本
- 婆婆不同意分家协议书
- 承接工装拆除合同范本
- 工程合同违约赔偿协议
- 家电售后用工合同范本
- 建筑安装材料合同范本
- 应急水泵销售合同协议
- 小额贷款标准合同范本
- 岩土工程测量合同范本
- 设备变更方案(3篇)
- 食堂菜价定价管理办法
- 16.迷你中线导管带教计划
- 大学军事理论考试题及答案
- 2025社交礼仪资料:15《现代社交礼仪》教案
- 菏泽风电项目可行性研究报告
- T/CCMA 0114-2021履带式升降工作平台
- DB32T 5124.1-2025 临床护理技术规范 第1部分:成人危重症患者目标温度管理
- 食管癌的护理查房知识课件
- 高三日语二轮复习阅读专题课件
- 《双重差分法与调节效应模型:解析绿色债券价值影响》12000字(论文)
评论
0/150
提交评论