




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计课程设计报告题 目: 图书管理、借阅系统 设 计 者: 李永曜 专业班级: 软件技术 09信息六班 学 号: 209130618 指导教师: 危锋 所属系部: 信息管理系 2009年12月 28 日目录:1 概述31.1 问题分析31.2功能32 总体设计4模块划分:模块图及程序结构简单介绍43 详细设计53.1 密码验证53.2 录入信息53.3 按书名查看图书信息63.4 按书号查看图书信息73.5查看所有已借图书信息83.6 查看所有未借图书信息83.7 按书名借阅图书93.8 按书号借阅图书103.9 按书名进行查找并修改信息113.10 按书号进行查找并修改信息123.11 删除所有图书133.12 按书名删除图书信息143.13 按书号删除图书信息153.14 主函数164 结果分析175 总结与体会43参考文献43附录: 程序清单441 概述1.1 问题分析图书信息管理及借阅系统。方便图书管理员管理图书,以及学生借阅图书。1.2功能1、建立图书信息库,包括:书号,图书名称,出版社,出版时间和当前借阅状态;2、程序分为两大模块:图书管理员模块和用户模块。管理员模块主要用于对图书信息的录入、修改或删除。用户模块主要用于浏览图书信息和借阅图书;3、保密:进入管理员模式需要进行密码验证。4、浏览:用户可以通过多种方式进行浏览图书信息。5、查找或修改:可以通过书号或书名查找想看的书。可以根据书号或书名进行修改、删除信息;6、输出:根据用户需求输出图书信息。2 总体设计模块划分:模块图及程序结构简单介绍用户模块主函数管理员模块查看图书信息修改图书信息修改管理密码退出管理系统密码验证查看图书信息借阅图书退出客户模式查看未借出图书查看已借出图书查看所有图书按书名查看按书号查看查看未借出图书查看已借出图书查看所有图书按书名借阅按书号借阅查看所有图书按书名修改按书号修改删除图书信息按书名删除按书号删除删除所有信息录入图书信息按书号查看按书名查看3 详细设计3.1 密码验证1)函数原形:int mimayanzheng()2)功 能:利用strcmp()字符串比较函数与实现初始化的密码进行对比。与密码相同则进入管理员模式。3) N-S流程图定义temp_mima20用来存放用户输入的密码输出提示:请输入密码给temp_mima20赋值if(strcmp(temp_mima,mima)=0)是 否返回1返回04)说明:当密码不正确时,直接返回欢迎界面(主菜单)。3.2 录入信息1)函数原形:void xinxi()2)功 能:利用printf()提示信息,scanf()函数对图书信息进行录入。3) N-S流程图定义循环变量i输出提示,要求输入录入数量for i=0 to N输入第i本书的编号(有防止编号相同的功能)输入第i本书的名称输入第i本书的出版社输入第i本书的出版时间输入第i本书的借阅状态(1表示已借,0表示未借)输出提示:录入完成4)说明:当密码不正确时,直接返回欢迎界面(主菜单)。3.3 按书名查看图书信息1)函数原形:void showbook_name()2)功 能:利用printf()提示信息,scanf()函数输入要查找的图书名称并利用循环进行查找该图书。如果找到则输出该图书的信息,反之则提示“不存在该书”。3)参数及类型:无。4) N-S流程图定义循环变量i;定义k用来标记是否存在该书,也可以利用k输出项目;定义n用来存放查找到的书的下标;定义字符数组book_name20存放用户输入的查询书名。输出提示,要求输入图书名称for i=0 to N if(strcmp(book_name,)=0)是 否将下标存放到n中 if(k=0)是 否输出“项目”输出图书信息 if(bkn.jie=1)是 否输出图书状态:已被借阅输出图书状态:可以节阅输出提示:按任意键返回k+是 if(k=0) 否输出提示:不存在该书,按任意键返回3.4 按书号查看图书信息1)函数原形:void showbook_num()2)功 能:利用printf()提示信息,scanf()函数输入要查找的图书号并利用循环进行查找该图书。如果找到则输出该图书的信息,反之则提示“不存在该书”。3)参数及类型:无。4) N-S流程图定义整形循环变量i;定义整形变量k用来标记是否存在该书,也可以利用k输出项目;定义整形变量n用来存放查找到的书的下标。定义整形变量book_num用来存放用户输出的查询书号。输出提示,要求输入图书号for i=0 to N if(book_num=bki.num)是 否将下标存放到n中 if(k=0)是 否输出“项目”输出图书信息 if(bkn.jie=1)是 否输出图书状态:已被借阅输出图书状态:可以节阅输出提示:按任意键返回k+是 if(k=0) 否输出提示:不存在该书,按任意键返回3.5查看所有已借图书信息1)函数原形:yijieyue()2)功 能:利用循环和printf()函数来实现信息的输出。3)参数及类型:无。4) N-S流程图3.6 查看所有未借图书信息1)函数原形:weijieyue()2)功 能:利用循环和printf()函数来实现信息的输出。3)参数及类型:无。4) N-S流程图3.7 按书名借阅图书1)函数原形:jie_name()2)功 能:利用循环和printf()函数来实现信息的输出,strcmp函数实现查找图书。3) N-S流程图3.8 按书号借阅图书1)函数原形:jie_num()2)功 能:利用循环和printf()函数来实现信息的输出,利用循环实现查找图书。3) N-S流程图3.9 按书名进行查找并修改信息1)函数原形:xiugai_name()2)功 能:利用循环和printf()函数来实现信息的输出,利用循环找到要修改图书,并覆盖原值进行修改。3)参数及类型:无。4) N-S流程图3.10 按书号进行查找并修改信息1)函数原形:xiugai_num()2)功 能:利用循环和printf()函数来实现信息的输出,利用循环找到要修改图书,并覆盖原值进行修改。3)参数及类型:无。4) N-S流程图3.11 删除所有图书1)函数原形:dele_all()2)功 能:利用循环和printf()函数来实现信息的输出。将长度N赋值为零时所有信息都会被删除。3)参数及类型:无。4) N-S流程图3.12 按书名删除图书信息1)函数原形:dele_name()2)功 能:利用循环和printf()函数来实现信息的输出。利用strcmp()函数对图书信息进行查找。将查找到的图书信息的下标记录,并将其后面的元素向前移动一个元素,这样就实现了删除单个图书信息。3)参数及类型:无。4) N-S流程图3.13 按书号删除图书信息1)函数原形:dele_num()2)功 能:利用循环和printf()函数来实现信息的输出。利用strcmp()函数对图书信息进行查找。将查找到的图书信息的下标记录,并将其后面的元素向前移动一个元素,这样就实现了删除单个图书信息。3)参数及类型:无。4) N-S流程图3.14 主函数2)功 能:调用各个模块实现各项功能3)参数及类型:无。4) N-S流程图4 结果分析 1.欢迎界面。2.选择“管理员模式”3.输入密码正确后进入管理界面。4.输入密码错误,将返回主菜单。5.选择“录入图书信息”,并录入相应数据。6.录入完成后系统提示录入完成。7返回后回到主界面。再选择“查看图书信息”。8.选择按“书名查看”,并输入要查看的书名。9.按回车后若存在该书,则输出该书信息。10.若不存在该书。则提示不存在该书。 11.返回查看菜单,选则“按书号查看”,并输入要查看的书的编号。12.按回车后,若存在该书则输出该书信息。13.若不存在该书。 14.返回查看信息菜单后,选择“查看所有未借图书”。 15.返回查看信息菜单后,选择“查看所有已借图书”。16.返回主菜单后选择“查看所有图书”。17.返回查看菜单后按6返回管理员主菜单,选择3“修改图书信息”,进入“修改图书信息”菜单。18.选择“1.按书名查找”,输入要修改的书的名称,按回车。输入修改信息。19.此时返回“查看菜单”选择“查看所有图书信息”,信息已经成功修改。20.返回“修改菜单”,选择“输入按书号查找”,输入要修改的书号,并输入新信息。21. 此时返回“查看菜单”选择“查看所有图书信息”,信息已经成功修改。22返回“修改菜单”,选择“删除图书”,进入“删除图书界面”。23.选择1“按书名删除”,并输入要删除的图书名称。可以按“0”退出删除。24.选择n为取消删除。25.选择y则执行删除。26.返回“查看信息”菜单,选择“查看所有图书信息”,则不会存在name1的信息。27.返回。选择“按书号查找”,输入要删除的图书的编号(按0可以退出),并按回车,按y删除,按n撤销删除。28 .返回“查看信息”菜单,选择“查看所有图书信息”,则不会存在书号为:1002的信息。29.返回。选择“删除所有图书”,若选择y则删除所有图书,选择n撤销删除命令。 选择n。 选择y。30. .返回“查看信息”菜单,选择“查看所有图书信息”,则不会存在任何信息。此时系统提示: 31.重新录入信息。32.返回“管理员模式”菜单。选择4,修改管理密码。33.输入初始密码。如果输入错误会提醒输入错误。输入正确则可以进行修改密码,但要进行两次输入,若两次输入相同,则密码被修改,输入两次密码不一致则修改失败。(1)密码输入错误。(2)密码输入正确,但两次输入新密码不一致。 (3)输入密码正确,修改密码两次输入一致,则密码修改成功。再次进入“管理员模式”需要新密码。(4)再次登录管理员模式时输入旧密码则提示错误。(5)输入修改后的密码则进入管理模式。34.选择“客户模式”。35.选择查看图书。36.此时和管理员模式的查看一样。选择5查看所有图书。37.返回“客户模式”,选择2,“借阅图书”。38.选择“按书名借阅”。并输入书名,按回车。若该书可以被借阅,则提示是否借阅。(1)输入的书可以被借阅。(2)输入的书不可以借阅,或者不存在该书。(3)输入的书可以被借阅,但借阅取消。(4)输入的书可以被借阅,并且确定借阅。39.返回选择“查看所有图书信息”,此时可以看到图书的借阅状态已经改变。 40.返回“按书号借阅”,功能和“按书名借阅”相同。41.返回选“查看图书信息”,该图书的借阅状态已经改变。42.选择“关于”,则输出本系统结构图:42.选择“退出”程序。程序演示到此结束。5 总结与体会第一次做这么复杂的程序,感受颇多。(一)以前写程序都是“写-想-图”模式,经过这次锻炼,使我深刻的体会到“想-图-写”模式的正确性。所谓“写-想-图”模式,就是先写,不论题目是什么,先写,然后再想如何写正确,写错了也不清楚是哪里错了,只有当程序完全编写完之后在调试阶段进行改错,最后再根据自己写的代码画N-S流程图。而“想-图-写”模式则是先构思,构思清晰之后再画N-S流程图,最后依据自己画的N-S流程图进行编程。这样的好处在于:1.编写程序有条理,思路清晰。2.不容易出现逻辑错误。(二)虽然编写了很多小程序,但是还是不可避免的出现些状况,例如:存放姓名或者出版社的字符数组忘记给长度。结构体交换出现问题等等,以后会努力避免出现。(三)很多模块功能的实现其实很简单,代码也都是学过的,只是那种“思想”不容易想。例如:删除模块,如果想删除一本书的信息,分为两种情况:1.删除的是最后一本书,此时,只要将结构体数组的长度减一即可。2.删除的不是最后一本书,此时,将该书的下标记下,并将该下标后面的所有元素依次向前移动以个元素,将要删除的信息覆盖,再将结构体数组的长度减一即可。(四)借助Internet,我学到了更多的知识。像产生随机数,虽然书上也有,但是书上的方法不能保证在每个时间都产生不同的随机数,通过Internet我知道了怎样在每个时间都能产生不同的随机数 (srand(unsigned)time(NULL); rand()%100表示随机出现099之间的整数,包含于:include“stdlib.h”和include“time.h”)。在Win-tc中clrscr();(包含于include“conio.h”)是清屏函数,但在Visual c+ 6.0 中system(“cls”);(包含于include”stilib”,include”conio.h”)是清屏函数。(五)同过平常练习和知识的积累,有些自己曾经玩过的游戏编起来并不是那么复杂,使自己对编程越来越感兴趣。每当成功的调试了一个程序后,心里都有一种说不出的愉悦,之前的辛苦和劳累全然不见了。(六)我之所以有今天的成绩,全都源于老师您对我的栽培,在此我要对您说声谢谢!参考文献 1 方风波,C语言程序设计(第二版),北京:地质出版社,2009.5附录: 程序清单#includestdio.h#includeconio.h#includestring.h#includestdlib.hint N;char mima20=liyongyao2009;/*定义图书结构体类型book*/struct book long num; char name20; char publish20;/*出版社*/ struct time int day; int month; int year; t; int jie;/*借阅*/bk20;/*建立图书信息库*/void xinxi() int i; system(CLS); printf(tt = n); printf(tt 录入图书信息 n); printf(tt = nn);printf(tt请输入您要录入的数量:);scanf(%d,&N); for(i=0;iN;i+) printf(tt请输入第%d本书的编号:,i+1); scanf(%d,&bki.num); printf(tt请输入第%d本书的名称:,i+1); scanf(%s,); printf(tt请输入第%d本书的出版社:,i+1); scanf(%s,bki.publish); printf(tt请输入第%d本书的出版时间(用逗号隔开):,i+1); scanf(%d,%d,%d,&bki.t.year,&bki.t.month,&bki.t.day); printf(tt该书是否已经被借阅,已被借阅输入1,未被借阅输入0:); scanf(%d,&bki.jie);printf(-n); system(CLS); printf(tt = n); printf(tt 信息录入完成 n); printf(tt = n); printf(ntt 按任意键继续.n);/*主菜单*/int mymainmenu() int x;printf(nnnn); printf(tt|-|n); printf(tt| |n); printf(tt| = |n); printf(tt| 欢迎光临图书管理系统 |n); printf(tt| = |n); printf(tt| |n); printf(tt| 1.管理员模式 |n); printf(tt| 2.客户模式 |n); printf(tt| 3.退出系统 |n); printf(tt|-|n); printf(ntt请输入您的选择:); scanf(%d,&x); return x;/*管理员密码验证*/int mimayanzheng()char temp_mima20;/*用来存放用户输入的密码*/ printf(n); printf(tt = n); printf(tt 欢迎使用管理员模式 n); printf(tt = n); printf(n); printf(tt 请输入密码:); scanf(%s,temp_mima);if(strcmp(temp_mima,mima)=0)/*比较密码*/return 1;elsereturn 0;/*修改密码*/void xiugaimima()char temp_mima20,temp120,temp220;/* temp_mima20用来存放用户输入的密码,temp120,temp220分别用来存放用户输入的两次修改的密码*/ printf(n); printf(tt = n); printf(tt 修改密码 n); printf(tt = n); printf(n);printf(tt 请输入原始密码:);scanf(tt%s,temp_mima); while(1) if(strcmp(temp_mima,mima)=0)/*比较密码*/printf(t请输入新密码:);scanf(%s,temp1);printf(t请再输入一次:);scanf(%s,temp2);if(strcmp(temp1,temp2)=0)/*如果输入的两次新密码都相同*/printf(t修改密码成功!请记牢密码,任意键返回.);strcpy(mima,temp1);getch();break;elseprintf(t输入两次密码不相同,修改失败!任意键返回.);getch();break;elseprintf(t密码错误!您不能进行密码修改!任意键返回.);getch();break;/*管理员模式*/int adm() int x;printf(nnnn); printf(tt|-|n); printf(tt| |n); printf(tt| = |n); printf(tt| 管理员模式 |n); printf(tt| = |n); printf(tt| |n); printf(tt| 1.录入图书信息 |n); printf(tt| 2.查看图书信息 |n); printf(tt| 3.修改图书信息 |n); printf(tt| 4.修改管理密码 |n); printf(tt| 5.退出系统 |n); printf(tt|-|n); printf(ntt请输入您的选择:); scanf(%d,&x); return x;/*客户模式*/int peo() int x;printf(nnnn); printf(tt|-|n); printf(tt| |n); printf(tt| = |n); printf(tt| 欢迎光临 |n); printf(tt| = |n); printf(tt| |n); printf(tt| 1.查看图书信息 |n); printf(tt| 2.借阅图书 |n); printf(tt| 3.退出系统 |n); printf(tt|-|n); printf(ntt请输入您的选择:); scanf(%d,&x); return x;/*查看所有图书*/void show_all_book()int i;if(bk0.num=0&bk0.t.year=0|N=0)/*当bk0.num,bk0.t.year,结构体数组等值同时为零时表示无图书信息*/printf(t数据不存在,请先录入数据!ntt按任意键返回.);elseprintf(t编号 图书名称 出版社 出版时间 状态n);for(i=0;iN;i+)printf(t%-7d %-8s %-12s %4d年%2d月%2d日 ,bki.num,,bki.publish,bki.t.year,bki.t.month,bki.t.day);if(bki.jie=0)printf(未借阅n);elseprintf(已借阅n);/*按书名查看*/void showbook_name() int i,k=0,n;/*k用来标记是否存在该书*/ char book_name20; printf(tt = n); printf(tt 按书名查看 n); printf(tt = n); printf(ntt请输入您要查看的图书名称:); scanf(%s,book_name); for(i=0;iN;i+) if(strcmp(book_name,)=0)n=i;if(k=0)/* 项目只输出一次*/ printf(t编号 图书名称 出版社 出版时间 状态n); printf(t%-7d %-8s %12s %4d年%2d月%2d日 ,bkn.num,,bkn.publish,bkn.t.year,bkn.t.month,bkn.t.day); if(bkn.jie=1) printf(已被借阅n); else printf(可以借阅n); printf(按任意键返回.);k+; /*k值不为零则表示找到图书*/if(k=0) /*k值为零则表示未找到图书*/printf(t不存在该书!按任意键返回.);/*按书号查看*/void showbook_num() int n,book_num,i,k=0;/*k用来标记是否存在该书*/ printf(tt = n); printf(tt 按书号查看 n); printf(tt = n); printf(ntt请输入您要查看的图书编号:); scanf(%d,&book_num); for(i=0;iN;i+) if(book_num=bki.num)n=i;if(k=0)/*项目只输出一次*/ printf(t编号 图书名称 出版社 出版时间 状态n); printf(t%-7d %-8s %12s %4d年%2d月%2d日 ,bkn.num,,bkn.publish,bkn.t.year,bkn.t.month,bkn.t.day); if(bkn.jie=1) printf(已被借阅n); else printf(可以借阅n);k+;printf(t按任意键返回.);if(k=0) /*k为零则表示未找到图书*/printf(t不存在该书!按任意键返回.); /*显示全部已借阅的图书*/void yijieyue() int i,k=0;if(bk0.num=0&bk0.t.year=0|N=0) printf(t数据不存在,请先录入数据!ntt按任意键返回.);else for(i=0;iN;i+)if(bki.jie=1)if(k=0) printf(t编号 图书名称 出版社 出版时间 n);printf(t%-7d %-8s %12s %4d年%2d月%2d日 n,bki.num,,bki.publish,bki.t.year,bki.t.month,bki.t.day); k+; if(k=0)printf(ntt目前没有任何书借出。按任意键继续.);/*显示全部未借阅的图书*/void weijieyue() int i,k=0;if(bk0.num=0&bk0.t.year=0|N=0) printf(t数据不存在,请先录入数据!ntt按任意键返回.);else for(i=0;iN;i+)if(bki.jie=0)if(k=0) printf(t编号 图书名称 出版社 出版时间 n);printf(t%-7d %-8s %12s %4d年%2d月%2d日 n,bki.num,,bki.publish,bki.t.year,bki.t.month,bki.t.day); k+;if(k=0) printf(nt很遗憾!目前所有的书都被借出了。按任意键继续.);/*查看图书菜单*/void show() int x;do system(cls); printf(nnnn); printf(tt|-|n); printf(tt| |n); printf(tt| = |n); printf(tt| 查看图书信息 |n); printf(tt| = |n); printf(tt| |n); printf(tt| 1.按书名查找 |n); printf(tt| 2.按书号查找 |n); printf(tt| 3.查看所有未借阅图书 |n); printf(tt| 4.查看所有已借阅图书 |n); printf(tt| 5.查看所有图书 |n); printf(tt| 6.返回主菜单 |n); printf(tt|-|n); printf(ntt请输入您的选择:); scanf(%d,&x); switch(x) case 1:system(cls);showbook_name();getch();break;/*按书名查看*/ case 2:system(cls);showbook_num();getch();break;/*按书号查看*/ case 3:system(cls);weijieyue();getch();break;/*查看未借阅图书*/ case 4:system(cls);yijieyue();getch();break;/*查看已借阅图书*/ case 5:system(cls);show_all_book();getch();break;/*查看所有图书*/ while(x!=6);/*按书名借阅*/void jie_name()char jy2,name20;/*jy用来表示是否确定借阅*/int i,book_xb,k=0;/*k用来标记是否存在该书*/printf(tt = n); printf(tt 按书名借阅 n); printf(tt = n);while(1) printf(ntt请输入书名:); scanf(%s,name); for(i=0;iN;i+) if(strcmp(,name)=0&bki.jie!=1)/*找到图书并确认图书没有被借出,记录图书下标*/ book_xb=i;k+;if(k=0)printf(t不存在该书,或该书已经借出!请正确输入图书名称!ntt按任意键返回.);getch(); break
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 9258.3-2025涂附磨具用磨料粒度组成的检测和标记第3部分:微粉P240~P5000
- 山东省济宁市2024-2025学年高一下学期质量监测物理试卷
- 2025-2026学年江苏省南通市海门区包场高级中学高二(下)开学政治试卷(含解析)
- 房屋施工合同(合集15篇)
- 旅游行业发展现状及市场份额分析
- 汉字公开课课件
- DB64-T 1750-2020 宁夏砂石土矿绿色矿山建设规范
- 永州简介课件
- 水质检测基础知识培训课件
- 水粉画基础知识培训课件反思
- 塔吊拆除安全操作方案模板
- 巡检员质量培训
- 无线电技术设施运行维护定期巡检项目总表
- 社会组织规范化建设评价指标体系解读
- GB/T 702-2017热轧钢棒尺寸、外形、重量及允许偏差
- GB/T 20238-2018木质地板铺装、验收和使用规范
- GB/T 1303.1-1998环氧玻璃布层压板
- GB/T 11684-2003核仪器电磁环境条件与试验方法
- 家具厂精益改善推行报告课件
- 第2章 动车组检修工艺基础动车组维护与检修
- 筋针疗法牛君银培训课件
评论
0/150
提交评论