C语言程序设计报告模板-2011[1]
C语言程序设计课程报告
所在学院地学院
所在班级012102
班级学号20101002127 姓名刘方
指导老师宋军
中国地质大学(武汉)
2012年1月3日
图书管理系统设计
1.具体内容
图书管理系统包括:图书名称、图书编号、单价、作者、存在状态,借书人姓名、性别、学号等,试设计一图书管理系统,使之具有以下功能:
(1)新图书基本信息的输入。
(2)图书基本信息的查询。
(3)对撤销图书信息的删除。
(4)办理借书手续。
(5)办理还书手续。
2.具体程序,请注明详细代码和程序主要注释;
图书管理系统
设计
图书信息输入图书信息查询图书信息删除办理借书手续办理还书手续
1.主函数:主函数设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。
[流程图]
显示一系列功能选项
N
输入n,判断n是否是0-5
Y
根据n的值调用各功能模块函数返回主菜单
void main(void)
{
caidan: timu("\t\t********************目录********************\t\t ");
printf("\t\t\t 选择你所需的编号:\n\n");
printf("\t\t\t\t 1:增加图书\n\t\t\t\t 2:查找图书\n"); printf("\t\t\t\t 3:删除旧书\n\t\t\t\t 4:借出图书\n"); printf("\t\t\t\t 5:还入图书\n\t\t\t\t 0:退出系统\n");
switch(getch()) {
case '1' : zengjiaxinshu();break; case '2' : chazhaotushu();break; case '3' : shanchujiushu();break; case '4' : jiechutushu();break; case '5' : huanrutushu();break; case '0' : exit(0); }
2.各功能模块设计 (1)注册新书: [流程图]:
[程序]
void zengjiaxinshu() {
int n;
timu("增加新书 "); for(n=0;n<100;n++)
if(shuliang[n].id==0) break; printf("序列号:");
scanf("%d",&shuliang[n].id); printf("书名:");
scanf("%s",&shuliang[n].shuming);
注册新书 Books[n].id==0
输出书籍各项信息以备填空 令库存总数等于书的数量
返回主菜单
N
Y
查找图书号匹配的记录
输入要查找的序列号
显示所找到的记录
提示输入错误或无
用的序列号
是否找到此序列号
Y
N
printf("书的作者:");
scanf("%s",&shuliang[n].writer); printf("数量:");
scanf("%d",&shuliang[n].zongshuliang);
shuliang[n].cunchuliang=shuliang[n].zongshuliang; fanhuicaidan(); }
(2)图书信息查询:
输入要查找的图书号,再从数组中查找是否有和此图书号相匹配的图书号,若有,显示其信息并返回数组下标,若没有相应记录则提示错误并返回-1。 [流程图]
[程序]
int chazhaotushu(void) {
int n,i;
printf("输入要查找的序列号:"); scanf("%d",&i); for(n=0;n<100;n++) {
if(shuliang[n].id==i) {
printf("书名:%s\n",shuliang[n].shuming); printf("作者:%s\n",shuliang[n].writer);
printf("存储数目:%d\n",shuliang[n].cunchuliang); printf("图书总量:%d\n",shuliang[n].zongshuliang); return n; }
printf("\n 输入错误或无用的序列号。 \n"); return -1; }
(3)删除旧图书:
[流程图]:
[程序]
void shanchujiushu() {
int n;
timu("删除旧书 ");
if((n=chazhaotushu())!=-1) shuliang[n].id=0; printf("该书已被删除.\n"); fanhuicaidan(); }
(4)借书函数
首先调用找书函数,判断所借图书是否有库存,若有则输入借书人的图书证号以及想借用的天数,天数在10天以内的存储借书人姓名及天数,同时库存数量减少1,如果库存数量为0则显示此书已全部借出。 [流程图]
删除旧图书
调用找书函数
所删除序列号是否存在
删 除 显示书已删除
返回主菜单
Y
N
调用找书函数
n!=-1&&books[n].store>0 输入借书卡号以及借用天数
0<天数<10
保存借书人及天数
所借图书库
存数量少1
返回主菜单
n!=-1&&
books[n].store=0
输出图书已完租出返回主菜单
N
借书
Y
N
Y N
Y
[程序]
void jiechutushu()
{
int n,s,l,d;
timu("借出图书 ");
if((n=chazhaotushu())!=-1&&shuliang[n].cunchuliang>0)
{
printf("请输入您的借书卡序号:");
scanf("%d",&s);
printf("请输入需借的天数:");
scanf("%d",&d);
for(l=0;l<10;l++)
{
if(shuliang[n].shujie[l]==0)
{
shuliang[n].shujie[l]=s;
shuliang[n].jieshutianshu[l]=d;
break;
}
}
shuliang[n].cunchuliang;
}
if(n!=-1&&shuliang[n].cunchuliang==0) printf("这本书已完全租借。\n"); fanhuicaidan();
调用找书函数 n!=-1&&
books[n].store 显示借阅者读书证列表 0<借阅天数<10 输出图书借阅信息 提示输入借书证序号 保存借书人及天数 n!=-1&& books[n].store>0 显示全部藏入 返回主菜单 还 书 N Y N Y (5)还书函数:类似借书函数,首先调用找书函数。 [流程图] [程序] void huanrutushu() { int n,s,l; timu("还入图书 "); if((n=chazhaotushu())!=-1&&shuliang[n].cunchuliang printf("输入所借天数:\n"); for(l=0;l<10;l++) if (shuliang[n].shujie[l]!=0) printf("[%d] - %d\n",shuliang[n].shujie[l],shuliang[n].jieshutianshu[l]); printf("请输入您的借书卡序号 :"); scanf("%d",&s); for(l=0;l<10;l++) { if(shuliang[n].shujie[l]==s) { shuliang[n].shujie[l]=0; shuliang[n].jieshutianshu[l]=0; break; } } shuliang[n].cunchuliang++; } if(n!=-1&&shuliang[n].cunchuliang==shuliang[n].zongshuliang) printf("该书已还入.\n"); fanhuicaidan(); } [总程序]: #include #include #include struct TuShuGuanLiXiTong { int id,shujie[10],zongshuliang,cunchuliang,jieshutianshu[10]; char shuming[20],writer[10]; } shuliang[100]; void timu(char *caidan_item) { printf("\t\t\t\t\ >>>菜单<<<\n\n %s \n\n",caidan_item); } void fanhuicaidan(void) { printf("\n 按任意键返回主菜单:\n"); getch(); } void zengjiaxinshu() { int n; timu("增加新书 "); for(n=0;n<100;n++) if(shuliang[n].id==0) break; printf("序列号:"); scanf("%d",&shuliang[n].id); printf("书名:"); scanf("%s",&shuliang[n].shuming); printf("书的作者:"); scanf("%s",&shuliang[n].writer); printf("数量:"); scanf("%d",&shuliang[n].zongshuliang); shuliang[n].cunchuliang=shuliang[n].zongshuliang; fanhuicaidan(); } int chazhaotushu(void) { int n,i; printf("输入要查找的序列号:"); scanf("%d",&i); for(n=0;n<100;n++) { if(shuliang[n].id==i) { printf("书名:%s\n",shuliang[n].shuming); printf("作者:%s\n",shuliang[n].writer); printf("存储数目:%d\n",shuliang[n].cunchuliang); printf("图书总量:%d\n",shuliang[n].zongshuliang); return n; } } printf("\n 输入错误或无用的序列号。 \n"); return -1; } void shanchujiushu() { int n; timu("删除旧书 "); if((n=chazhaotushu())!=-1) shuliang[n].id=0; printf("该书已被删除.\n"); fanhuicaidan(); } void jiechutushu() { int n,s,l,d; timu("借出图书 "); if((n=chazhaotushu())!=-1&&shuliang[n].cunchuliang>0) { printf("请输入您的借书卡序号:"); scanf("%d",&s); printf("请输入需借的天数:"); scanf("%d",&d); for(l=0;l<10;l++) { if(shuliang[n].shujie[l]==0) { shuliang[n].shujie[l]=s; shuliang[n].jieshutianshu[l]=d; break; } } shuliang[n].cunchuliang; } if(n!=-1&&shuliang[n].cunchuliang==0) printf("这本书已完全租借。\n"); fanhuicaidan(); } void huanrutushu() { int n,s,l; timu("还入图书 "); if((n=chazhaotushu())!=-1&&shuliang[n].cunchuliang { printf("输入所借天数:\n"); for(l=0;l<10;l++) if (shuliang[n].shujie[l]!=0) printf("[%d] - %d\n",shuliang[n].shujie[l],shuliang[n].jieshutianshu[l]); printf("请输入您的借书卡序号 :"); scanf("%d",&s); for(l=0;l<10;l++) { if(shuliang[n].shujie[l]==s) { shuliang[n].shujie[l]=0; shuliang[n].jieshutianshu[l]=0; break; } } shuliang[n].cunchuliang++; } if(n!=-1&&shuliang[n].cunchuliang==shuliang[n].zongshuliang) printf("该书已还入.\n"); fanhuicaidan(); } void main(void) { caidan: timu("\t\t********************目录********************\t\t "); printf("\t\t\t 选择你所需的编号:\n\n"); printf("\t\t\t\t 1:增加图书\n\t\t\t\t 2:查找图书\n"); printf("\t\t\t\t 3:删除旧书\n\t\t\t\t 4:借出图书\n"); printf("\t\t\t\t 5:还入图书\n\t\t\t\t 0:退出系统\n"); switch(getch()) { case '1' : zengjiaxinshu();break; case '2' : chazhaotushu();break; case '3' : shanchujiushu();break; case '4' : jiechutushu();break; case '5' : huanrutushu();break; case '0' : exit(0); } goto caidan; } 3.程序结果,以截屏方式展示; 各模块的界面图: (1)主菜单函数 (2)输入模块 在主界面按键输入1,并输入提示所出现的各种信息,看到下图 键入任意按键,返回主菜单 (3)查找模块 在主界面按键输入2,看到下图 键入刚刚输入的书号码001,按回车,则看到下图 键入任意键返回主菜单;重新键入5,并键入未存书号002,按回车,则看到下图 键入任意键返回主菜单 (4)删除旧书模块 在主界面键入3,并输入002,则看到下图 键入任意键返回主菜单 再次键入3,进入删除界面,输入欲删除书号001,则看到下图 键入任意键返回主菜单 键入2,进入查找模块,输入刚刚删除的001号书,看到下图 说明删除成功. (5)借出图书模块 在主界面键入4,并输入所借书的编号001,按回车,则看到下图 根据提示信息键入所需内容,看到下图 键入任意键返回主菜单 再次键入4键,输入未存储的书号002,看到下图 键入任意键返回主菜单 (6)还入图书模块 在主界面键入5,并输入所还书的书号001,按回车,看到下图 键入任意键返回主菜单 再次键入5,进入还书界面,输入错误书号,既所输入的书号不存在,则看到下图 键入任意键返回主菜单 4.总结程序调试中存在的问题与解决方法; 在该程序的设计中,首先要定义六个模块,基本全是模仿课本上的模板,然 后加入自己的理念,写出了六个模块,但在模块与模块之间的连接过程中遇到了 一些问题,起初自己解决,但是费了好大的功夫还是解决不了,后来请教了班里, C语言学的比较好的同学,但还没有办法解决。在我最困难的时刻,我想到了还 有老师,但是老师只是教你的,肯定不会替你写程序,在我抱着试一试的态度去 问老师的时候,没想到时却说“没关系,每个人都有问题,况且你们C语言这门 课还没有学完,有问题是正常的,没问题才是不正常的。”于是在老师的帮助下, 我编写出了的模块与模块之间的连接的程序,于是我的问题便解决了。非常感谢 老师! 总结: 通过此次C言课程设计实习,我收获颇多。这次实习是真正意义上的将所学知识运用到实际中。实践才是检验真理的唯一标准!此次实习中,我成功的写出了这个程序,提高了我的编程能力。在编程过程中还是应该特别注意充分理解题目要求和各循环语句的充分调用和理解。自己也已经具备了一定的编程能力。然而,这只是一个小小的开端,以后的路还很长,还需要用恒心继续坚持下去!