C语言综合实验图书管理系统.doc_第1页
C语言综合实验图书管理系统.doc_第2页
C语言综合实验图书管理系统.doc_第3页
C语言综合实验图书管理系统.doc_第4页
C语言综合实验图书管理系统.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学c语言综合实验说明书图书管理系统1 需求分析1.1题目要求图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等,试设计一图书管理系统,使之能提供以下功能。(1) 新进图书基本信息的输入(2) 图书基本信息的查询(3) 对撤消图书信息的删除(4) 办理借书手续(5) 办理还书手续1.2需求分析 作为学生对图书管理系统的要求有:1. 能按各种方式(比如书名、编号、作者)查询图书馆的藏书情况。2. 能够方便地借阅图书、续借图书、归还图书。3. 能够查询自己的基本资料、借阅图书情况。4. 能够熟悉图书管理系统的使用。作为图书管理员,他们对图书管理系统的要求有:1. 能方便的对图书进行录入登记,注销陈旧的书籍。2. 能够方便地对新生进行登记,或注销已经毕业的学生信息(基本信息,借阅信息)。3. 能够随时发布一些诸如各学院学生借阅图书超期情况、馆内藏书情况、借情况等信息,以便各学院能够随时获知本院学生的一些借书信息。建立图书管理信息结构体,结构体成员包括图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号。存在状态设为整型,可用不同数字代表借还状态。借书和还书手续要注意修改结构体的成员变量存在状态的值。2.总体设计图书管理系统设计图书信息输入图书信息查询图书信息删除办理借书手续办理还书手续图21 3.详细设计3.1主函数:主函数设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。流程图显示一系列功能选项输入n,判断n是否是0-5根据n的值调用各功能模块函数返回主菜单NYY图21 void main(void)menu: page_title(菜单);printf( *选择服务*:nn);printf(|1 *借书* |n);printf(|2 *还书* |n);printf(|3 *存入新书* |n);printf(|4 *删除旧书* |n);printf(|5 *图书查询* |n);printf(|0 *退出系统* |nnn);printf(-); switch(getch()case 1 : book_out();break;case 2 : book_in();break;case 3 : book_add();break;case 4 : book_del();break;case5:search_book1();break;case 0 : exit(0);goto menu;3.2各功能模块设计(1)图书信息查询:输入要查找的图书号,再从数组中查找是否有和此图书号相匹配的图书号,若有,显示其信息并返回数组下标,若没有相应记录则提示错误并返回-1。查找图书号匹配的记录输入要查找的图书号显示所找到的记录提示输入错误或无用的图书号并返回是否找到此图书号匹配记录流程图YN图31 程序void search_book1(void) int n,i;page_title(图书查询);printf(请输入图书编号:);scanf(%d,&i);for(n=0;n100;n+)if(booksn.id=i)printf(| 书名:%sn,);printf(| 作者:%sn,booksn.author);printf(| 价格:%-7.2f元n,booksn.price);printf(|现存数量:%dn ,booksn.store);printf(|图书总量:%dn,booksn.total);break;elseprintf(n 没有这个编号! n);break;return_confirm();return_confirm();(2)借书函数:首先调用找书函数,判断所借图书是否有库存,若有则输入借书人的图书证号以及想借用的天数,天数在10天以内的存储借书人姓名及天数,同时库存数量减少1,如果库存数量为0则显示此书已全部借出。流程图输入图书证号以及借用天数0天数0借书YNYNY图32程序void book_out()int n,s,l,d;page_title(借书 );if(n=search_book()!=-1&booksn.store0)printf(请输入您的图书馆卡号:);scanf(%d,&s);printf(请输入借阅天数:);scanf(%d,&d);for(l=0;l10;l+)if(booksn.usrl=0)booksn.usrl=s;booksn.daysl=d;break;booksn.store-;if(n!=-1&booksn.store=0) printf(此书已借完.n);return_confirm();(3)还书函数:类似借书函数,首先调用找书函数。流程图调用找书函数n!=-1&booksn.storebooksn.total显示借阅者读书证列表0借阅天数0显示全部藏入返回主菜单还 书NYNY图33 程序void book_in(void)int n,s,l;page_title(还书 );if(n=search_book()!=-1&booksn.storebooksn.total)printf(借阅者列表:n);for(l=0;l10;l+)if (booksn.usrl!=0)printf(%d - %dn,booksn.usrl,booksn.daysl);printf(请输入图书馆卡号 :);scanf(%d,&s);for(l=0;l10;l+)if(booksn.usrl=s)booksn.usrl=0;booksn.daysl=0;break;booksn.store+;if(n!=-1&booksn.store=booksn.total)printf(书已全部还完.n);return_confirm();(4)注册新书:流程图:注册新书Booksn.id=0输出书籍各项信息以备填空令库存总数等于书的数量返回主菜单NY图34 程序void book_add(void)int n;page_title(存入新书);for(n=0;n100;n+)if(booksn.id=0) break;printf(新书编号:);scanf(%d,&booksn.id);printf(书名:);scanf(%s,&);printf(作者:);scanf(%s,&booksn.author);printf(价格:);scanf(%f,&booksn.price);printf(数量:);scanf(%d,&booksn.total);booksn.store=booksn.total;return_confirm();(5)删除旧图书:流程图:删除旧图书调用找书函数所删除图书号是否存在删 除显示书已删除返回主菜单YN图35 程序:void book_del(void)int n;page_title(删除旧书);if(n=search_book()!=-1) booksn.id=0;printf(书已删除.n);return_confirm();(6)公共函数存放书籍及借书信息函数struct BOOKint id,usr10,total,store,days10;float price;char name31,author21; books100;打印页眉函数,同时可通过参数显示当前状态void page_title(char *menu_item) system(cls);printf(*主菜单*nnnn-%s-nn,menu_item);返回前请求确认的函数void return_confirm(void)printf(n 键入任意键返回:n);getch();在数组中产寻图书号匹配记录,显示其信息并返回数组下标,找不到则提示错误int search_book(void)int n,i;printf(请输入图书编号:);scanf(%d,&i);for(n=0;n100;n+) if(booksn.id=i)printf(| 书名:%sn,);printf(| 作者:%sn,booksn.author);printf(| 价格:%-7.2f元n,booksn.price);printf(|现存数量:%dn ,booksn.store);printf(|图书总量:%dn,booksn.total);return n;printf(n 此编号不存在!. n);return -1; 4结论与心得体会通过此次C语言课程设计实习,我收获颇多。这次实习是真正意义上的将所学知识运用到实际中。实践才是检验真理的唯一标准! 此次实习中,我成功做出了这道题:提高了我们的编程能力。在编程过程中还是应该特别注意充分理解题目要求和各循环语句的充分调用和理解。自己也已经具备了一定的编程能力。然而,这只是一个小小的开端,以后的路还很长,还需要用恒心继续坚持下去!短的三周课程设计结束了,但是这段时间里,我又学到了更多C 知识,如:对象数组,string类,文件流等,同时我也被提醒以后办事的时候要认真,仔细,考虑周全。,也看到了团队精神和互帮互助的重要性。这一点会让我终生受益。5.调试与测试5.1调试报告编译是alt+f9;然后连接是f9;运行就用ctrl+f9;看运行结果就是:alt+f5.然后在调试时应注意程序等错误。5.2测试结果(1) 主菜单函数 图51 (2)输入模块 在主界面按键输入3,并输入提示所出现的各种信息,看到下图 图52 键入任意按键,返回主菜单(3)查找模块在主界面按键输入5,看到下图 图53 键入刚刚输入的书号码001,按回车,则看到下图 图54 键入任意键返回主菜单;重新键入5,并键入未存书号002,按回车,则看到下图 图55 键入任意键返回主菜单(4)借书模块在主界面键入1,并输入所借书的编号001,按回车,则看到下图 图56 根据提示信息键入所需内容,看到下图 图57 键入任意键返回主菜单再次键入1键,输入未存储的书号002,看到下图 图58 键入任意键返回主菜单(5)还书模块在主界面键入2,并输入所还书的书号001,按回车,看到下图 图59 根据提示键入所需信息,按回车,看到下图 图510 键入任意键返回主菜单再次键入2,进入还书界面,输入错误书号,既所输入的书号不存在,则看到下图 图511 键入任意键返回主菜单(6)删除旧书模块在主界面键入4,并输入错误的欲删除书号,则看到下图 图512 键入任意键返回主菜单再次键入4,进入删除界面,输入欲删除书号001,则看到下图 图513 键入任意键返回主菜单键入5,进入查找模块,输入刚刚删除的001号书,看到下图 图514 说明删除成功.6附录源程序:#define N 100#include#include#includestruct book char num10; char name50; char writer20; char flnum10; char pressname50; char presstime20; char price10;booksN;void printfhead()/*输入表头*/ printf(num name writer flnum pressname presstime pricen);void enter()/*录入及保存信息*/ int i,n; void menu(); void input(int k); void save(int k); printf(How many books(0-%d)?:,N-1); scanf(%d,&n); printf(n Enter data nownn); for(i=0;in;i+) printf(n Input %dth book record.n,i+1); input(i); if(i!=0)save(n); printf(按任意键返回菜单n); getchar(); menu();void input(int i)/*输入单本书信息*/ printfhead(); scanf(%s%s%s%s%s%s%s,booksi.num,,booksi.writer,booksi.flnum,booksi.pressname,booksi.presstime,booksi.price);void save(int n)/*信息保存文件*/ FILE *fp; int i; fp=fopen(book.txt,wb); for(i=0;in;i+) if(fwrite(&booksi,sizeof(struct book),1,fp)!=1)printf(file write erron); fclose(fp);void browse()/*浏览图书信息*/ int k; void menu(); int infile(); void printf_books(int n); k=infile(); printf_books(k); printf(按任意键返回菜单n); getchar(); menu();void printf_one(int i)/*输出单本书信息*/printf(%2s %2s %2s %2s %4s %7s %7s,booksi.num,,booksi.writer,booksi.flnum,booksi.pressname,booksi.presstime,booksi.price);printf(nn);void printf_books(int n)/*输出多本书信息*/ int j; printfhead(); for(j=0;jn;j+) printf_one(j); int infile()/*从文件读入信息并返回书本数*/ FILE *fp; int i; if(fp=fopen(book.txt,rb)=NULL) printf(n文件无法打开n); return 0; for(i=0;!feof(fp);i+) fread(&booksi,sizeof(struct book),1,fp); fclose(fp); return(i+1);void search()/*查找模块*/struct book b;int n,i,k=0;int infile();void menu();void printf_one(int i);n=infile();printf(输入书名: );scanf(%s,&); for(i=0;inn (1).num (2).name (3).writer (4).flnumn(5).pressname (6).presstime 7).price 8).modify all); printf(选择代号?: bb); scanf(%d,&c); if(c8|c8|c1); do switch(c) case 1:printf(num: );scanf(%s,booksm.num);break;case 2:printf(name: );scanf(%s,);break;case 3:printf(writer: );scanf(%s,booksm.writer);break;case 4:printf(flnum: );scanf(%s,booksm.flnum);break;case 5:printf(pressname: );scanf(%s,booksm.pressname);break;case 6:printf(presstime: );scanf(%s,booksm.presstime);break;case 7:printf(price: );scanf(%s,booksm.price);break;case 8:printf(Enter a new information:n);input(m); printfhead(); printf_one(m);/*输出修改后的信息*/ printf(n确定要修改吗?nnt(1).Sure (2).no and remodify (3).Back without save in this time bb); scanf(%d,&w1); while(w1=2); if(w1=1)save(n);else menu();void del(int m,int n)/*执行删除操作*/ FILE *fp;int k,w; printf(Are you sure delete it?nnt(1).Suret(2).Give up: bb); scanf(%d,&w);if(w=1) if(fp=fopen(book.txt,wb)=NULL) printf(n文件不能打开n); for(k=0;kn;k+) if(k!=m)if(fwrite(&booksk,sizeof(struct book),1,fp)!=1) printf(文件写完n); fclose(fp); else menu();void det_mod()/*找出需处理的数并处理*/ void m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论