图书馆管理系统设计C语言.docx
《图书馆管理系统设计C语言.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统设计C语言.docx(46页珍藏版)》请在冰豆网上搜索。
图书馆管理系统设计C语言
C程序设计报告
图书管理系统
设计题目:
设计要求:
利用C语言实现小型的图书管理系统,能够满足基本的借阅功能。
1.1问题提出:
本人计划编写一个图书管理系统,主要是提供具有图书管理的程序。
本人的主要工作就是,编写出一个正确的程序,使其正常运行,实现图书管理功能!
1.2本系统主要会涉及的知识点:
结构,数组,循环,函数,判断,指针等语句的应用。
1.3主要功能要求:
功能分析:
从图书馆的管理功能上分析,图书馆一共有三个方面的需求。
1对用户的管理。
2对图书的管理。
3对借阅的管理。
因此,本系统也从以上三个方面进行了设计,以实现上面的功能。
具体分析如下
1注册用户管理(以学校为样体,用户为学生)
学生信息包括:
学生ID,学生姓名,学生学号,所在院系,所在班级,性别,年龄。
(1)学生加入需要依次输入学生ID,学生姓名,学生学号,所在院系,所在班级,性别,年龄。
不能为空。
(2)学生删除此处用一个查询功能,是你方便的找到要删除的学生,同时显示该学生的信息,并要求删除确认。
(3)学生信息修改使用系统提供的查找功能可以迅速的找到要修改的学生,并提示修改的信息。
2图书信息管理
图书信息包括:
图书ID,图书名字,图书作者,在馆状态。
(1)新书入库
需要填入图书ID,图书名字,图书作者,在馆状态;
其中在馆状态需要填:
true,表示图书在馆。
(2)旧书删除
对不用的旧书可以执行该操作。
可以使用系统提供的查找符合条件的图书,并可以同步显示该图书的信息,以便确认所删图书的正确性。
(3)图书信息修改
当图书的信息发生改变的时候可以使用该功能来更新图书的信息,以保证图书信息的正确性。
操作是只要用系统提供的查找功能找到该图书,就可以在信息显示栏中对图书信息做修改。
3图书借阅管理:
图书借阅信息包括:
借阅号,图书ID,学生ID,是否借出,借出日期,是否归还,归还日期。
(1)图书借阅:
需要图书ID,学生ID。
(2)图书归还:
4查询报表
(1)图书信息查询:
可以按照图书ID,图书名字,图书作者实现查询。
(2)借/还纪录查询
借,还图书信息都可以按照图书ID,学生ID,日期范围灵活的查询。
(3)未还图书查询
查询可以按照图书ID,学生ID,班级,院系进行,从而可以方便的进行分组管理。
2功能设计
2.1算法设计
本系统需要实现的功能要求:
利用switch语句设计如图1所示的主菜单:
请输入选项编号(1~10)
图书菜单
1—添加图书
2-图书查寻
3-删除一本图书资料
4-借书
5-还书
6-退出系统
会员菜单
7-添加会员
8-会员查询
9-删除一个会员资料
10-查询某个会员所借图书情况
图1图书管理系统主菜单
2、选择5后,调用还书函数,进入函数后利用switch语句实现一个如图2所示的菜单,该菜单中每个选项调用一个函数
还书菜单
请输入选项编号(1~4)
1――输入图书名
2――查询图书资料
3――图书已借出的判断
4――作图书未借书标志,表示已还书
图2还书子菜单
部分模块流程图:
程序开始
程序结束
循环操作
查找进行操作的对象
确认所选操作的对象,进行操作
学生管理
还书
借书
信息修改
删除学生
加入学生
旧书删除
新书入库
退出系统
关于
查询报表
借/还管理
图书管理
图书信息查询
未还图书查询
借/还纪录查询
系统信息
确认退出
3程序代码设计
1初始化界面模块
1)函数原型:
voidMenu()
2)功能:
初始化界面
3)变量及类型:
voidRedText(intx,inty,char*z):
定义整形变量
{
system("cls");/*调用系统的清屏命令*/
textbackground(BLUE);/*将背景设置为蓝色*/
window(1,1,25,80);
clrscr();
textx=3;/*光标初始化位置*/
texty=2;
gotoxy(1,2);
printf("%c",218);/*画左上角*/
for(i=0;i<78;i++)
printf("%c",196);/*画水平直线*/
printf("%c",191);/*画右上角*/
for(i=3;i<=23;i++)
gotoxy(1,i);
printf("%c",179);/*画垂直线*/
gotoxy(80,i);
printf("%c",179);
}
printf("%c",192);/*画左下角*/
printf("%c",196);
printf("%c",217);/*画右下角*/
gotoxy(1,1);
textcolor(7);/*设置灰色*/
for(i=0;i<80;i++)
cprintf("%c",219);/*用符号实现画主菜单的灰色背景区*/
Selectitem();/*调用选项函数*/
DrawSelectitem();/*画选项*/
gettext(2,3,78,23,c);/*保存当前文本区域*/
4)说明:
进入系统后自动驱动初始化界面
2具体操作过程模块
voidRun()
利用while,for等循环语句和if等判断语句,实现具体的图书管理的过程如,借书、还书等过程。
voidDrawFrame(intl,intu,intr,intd,inttcolor,intbcolor)
textbackground(bcolor);/*背景颜色*/
textcolor(bcolor);/*文本颜色*/
for(i=l;i<=r;i++)/*输出背景区域*/
for(j=u;j<=d;j++)
gotoxy(i,j);
printf("%c",219);/*输出背景字符*/
textcolor(tcolor);/*边框颜色*/
for(i=u+1;i{gotoxy(l,i);cprintf("%c",179);/*垂直线*/gotoxy(r,i);cprintf("%c",179);}for(i=l+1;i{gotoxy(i,u);cprintf("%c",196);/*水平线*/gotoxy(i,d);cprintf("%c",196);}gotoxy(l,u);cprintf("%c",218);/*左上角*/gotoxy(r,u);cprintf("%c",191);/*右上角*/gotoxy(l,d);cprintf("%c",192);/*左下角*/gotoxy(r,d);cprintf("%c",217);/*右下角*//*gettext(l+1,u+1,r-1,d-1,save1);*//*保存边框内区域*/}4)说明:以大量的函数,实现图书管理的主要过程,包括对用户的管理、对图书的管理、对借阅的管理。4.C程序设计总结1.程序调试基本正常,基本达到图书管理要求,调试之处游少数错误,经过修改基本上已经可以正常使用了。2.本人在程序设计感到,充分的利用网上的资源和手中的源代码及借鉴他人的经验可以更加的解决困难,使程序达到要求。参考文献[1]谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1[2]陈朔鹰,C语言程序设计习题集,北京:人命邮电出版社,2003.6附录:程序清单#include#include#include#include#include#include#include#defineLEFT0x4b00/*左*/#defineRIGHT0x4d00/*右*/#defineDOWN0x5000/*下*/#defineUP0x4800/*上*/#defineSPACE0x3920/*空格*/#defineESC0x011b/*ESC键*/#defineENTER0x1c0d/*回车键*/#defineBackspace0xe08/*擦除键*/#defineALT_B12288/*组合键ALT_B*/#defineALT_M12800/*组合键ALT_M*/#defineALT_H8960/*组合键ALT_H*/intkey;/*按键变量*/inttextx,texty;/*光标坐标,x行,y列*/structmenustruct/*菜单用的结构体*/{charname[10];/*主菜单名*/charstr[10][20];/*选项*/intn;/*选项数*/}ml[3];/*使用了3个,可根据需要增删*/typedefstructBookList/*书的结构体*/{charnum[20];/*图书编号*/charname[20];/*书名*/intprice;/*书的价格*/charperson[20];/*借阅人*/intyes;/*判断书是否存在或者已经借出,1存在,0借出*/structBookList*next;}Book;typedefstructMemberList/*会员的结构体*/{charname[20];/*会员的姓名*/charsex[2];/*会员的性别*/intage;/*会员的年龄*/structMemberList*next;}Member;charsave[4096];/*保存文本区域空间*//*charsav1[4096];*/charc[4096];/*清屏专用空间*/inti,j;/*常用变量*/voidMenu();/*初始化界面*/voidSelectitem();/*定义菜单*/voidDrawSelectitem();/*显示主菜单*/voidBlackText(intx,inty,char*z);/*选中菜单*/voidRedText(intx,inty,char*z);/*正常菜单*/voidRun();/*具体操作过程*/voidDrawMl(intn);/*显示下拉菜单*/voidMoveMl(intn,intx);/*菜单选项的控制*/voidEnter(intm,intn);/*菜单选项的具体功能*/voidBookAdd();/*添加图书*/voidBookConsult();/*图书查询*/voidBookDel();/*删除图书资料*/voidBookBorrow();/*借书*/voidBookReturn();/*还书*/voidMemberAdd();/*增加会员*/voidMemberConsult();/*查询会员*/voidMemberDel();/*删除会员*/voidMemberBook();/*查询会员借书信息*/voidHelp();/*帮助*/voidVer();/*版本信息*/voidClrScr();/*自定义清屏函数*/voidDrawFrame(intleft,intup,intright,intdown,inttextcolor,intbackgroundcolor);/*画边框*//***主函数****/voidmain(void){Menu();/*初始化界面*/Run();/*具体操作过程*/}/*初始化界面*/voidMenu(){system("cls");/*调用系统的清屏命令*/textbackground(BLUE);/*将背景设置为蓝色*/window(1,1,25,80);clrscr();textx=3;/*光标初始化位置*/texty=2;gotoxy(1,2);printf("%c",218);/*画左上角*/for(i=0;i<78;i++)printf("%c",196);/*画水平直线*/printf("%c",191);/*画右上角*/for(i=3;i<=23;i++){gotoxy(1,i);printf("%c",179);/*画垂直线*/gotoxy(80,i);printf("%c",179);}printf("%c",192);/*画左下角*/for(i=0;i<78;i++)printf("%c",196);printf("%c",217);/*画右下角*/gotoxy(1,1);textcolor(7);/*设置灰色*/for(i=0;i<80;i++)cprintf("%c",219);/*用符号实现画主菜单的灰色背景区*/Selectitem();/*调用选项函数*/DrawSelectitem();/*画选项*/gettext(2,3,78,23,c);/*保存当前文本区域*/}/*定义菜单*/voidSelectitem(){strcpy(ml[0].name,"Book");/*下面的具体选项补空格是为了各菜单黑色背景相同*/strcpy(ml[0].str[0],"Add");/*添加图书*/strcpy(ml[0].str[1],"Consult");/*查询图书*/strcpy(ml[0].str[2],"Del");/*删除图书资料*/strcpy(ml[0].str[3],"Borrow");/*借书*/strcpy(ml[0].str[4],"Return");/*还书*/strcpy(ml[0].str[5],"Exit");/*退出系统*/ml[0].n=6;/*保存菜单的项数*/strcpy(ml[1].name,"Member");strcpy(ml[1].str[0],"Add");/*添加新会员*/strcpy(ml[1].str[1],"Consult");/*查询会员资料*/strcpy(ml[1].str[2],"Del");/*删除会员资料*/strcpy(ml[1].str[3],"Member&book");ml[1].n=4;strcpy(ml[2].name,"Help");/*系统帮助*/strcpy(ml[2].str[0],"ThisSystem");strcpy(ml[2].str[1],"Ver");ml[2].n=2;}/*显示主单名*/voidDrawSelectitem(){for(i=0;i<3;i++)RedText(i,1,ml[i].name);/*显示主菜单名,且首字母为红色*/}/*正常显示菜单*/voidRedText(intx,inty,char*z){textbackground(7);/*设置背景颜色为浅灰色*/gotoxy(3+x*20,y);for(j=0;z[j];j++){if(j==0)textcolor(RED);/*第一个字母显示红色*/elsetextcolor(BLACK);/*设置黑色*/cprintf("%c",z[j]);/*输出菜单名*/}}/*显示选中菜单*/voidBlackText(intx,inty,char*z){textbackground(0);/*设置背景颜色为黑色*/textcolor(15);/*设置文本颜色为白色*/gotoxy(3+20*x,y);/*定位坐标*/cputs(z);/*输出菜单名字符串*/}/*按键操作过程*/voidRun(){while(1){gotoxy(texty,textx);key=bioskey(0);/*接收按键*/switch(key){caseALT_B:caseESC:DrawMl(0);break;/*显示下拉菜单1*/caseALT_M:DrawMl(1);break;/*显示下拉菜单2*/caseALT_H:DrawMl(2);/*显示下拉菜单3*/caseUP:/*上光标键的操作控制*/{if(textx==3)textx=23;textx--;gotoxy(texty,textx);}break;caseDOWN:/*下光标键的操作控制*/{if(textx==23)textx=3;textx++;gotoxy(texty,textx);}break;caseLEFT:/*左光标键的操作控制*/{if(texty==2)texty=79;texty--;gotoxy(texty,textx);}break;caseBackspace:/*擦除键的设置*/{if(texty==2&&textx==3)continue;else{if(texty!=2)texty--;/*擦除键的细节问题,先擦去东西,然后光标还要往后退一格*/elseif(texty==2){texty=78;textx--;}gotoxy(texty,textx);printf("");gotoxy(texty,textx);}}break;/*endcase0xe08*/caseRIGHT:/*右光标键的操作控制*/{if(texty==79)texty=2;texty++;gotoxy(texty,textx);}break;caseSPACE:/*空格键的操作*/{if(texty==79)continue;else{gotoxy(texty,textx);/*空格的细节操作*/printf("");texty++;gotoxy(texty,textx);}}break;caseENTER:/*回车的控制操作*/{if(textx==23)continue;textx++;texty=2;gotoxy(texty,textx);}break;default:/*非控制键的结果*/{if(texty==79&&textx==23)/*到达最后就不再输出*/continue;elseif(texty==79&&textx!=23)/*到行的最后*/{textx++;texty=2;}gotoxy(texty,textx);/*输出结果*/printf("%c",key);if(texty==79)/*如果texty==79就不执行*/continue;else/*如果没到行尾就继续执行,使光标向前移动一位*/texty++;}}}/*大循环的大括号*/}/*画边框函数*/voidDrawFrame(intl,intu,intr,intd,inttcolor,intbcolor){textbackground(bcolor);/*背景颜色*/textcolor(bcolor);/*文本颜色*/for(i=l;i<=r;i++)/*输出背景区域*/{for(j=u;j<=d;j++){gotoxy(i,j);printf("%c",219);/*输出背景字符*/}}textcolor(tcolor);/*边框颜色*/for(i=u+1;i{gotoxy(l,i);cprintf("%c",179);/*垂直线*/gotoxy(r,i);cprintf("%c",179);}for(i=l+1;i{gotoxy(i,u);cprintf("%c",196);/*水平线*/gotoxy(i,d);cprintf("%c",196);}gotoxy(l,u);cprintf("%c",218);/*左上角*/gotoxy(r,u);cprintf("%c",191);/*右上角*/gotoxy(l,d);cprintf("%c",192);/*左下角*/gotoxy(r,d);cprintf("%c",217);/*右下角*//*gettext(l+1,u+1,r-1,d-1,save1);*//*保存边框内区域*/}/*显示具体下拉选择项目*/voidDrawMl(intn){gettext(1,1,80,25,save);/*保存被掩盖的地方*/BlackText(n,1,ml[n].name);/*反选显示主菜单*/DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*下拉菜单的边框*/for(i=3;i<3+ml[n].n;i++)/*输出所选菜单各选项*/{if(i==3)BlackText(n,i,ml[n].str[i-3]);/*默认选中第一项*/elseRedText(n,i,ml[n].str[i-3]);/*其余各项首字符红色显示*/
gotoxy(l,i);
cprintf("%c",179);/*垂直线*/
gotoxy(r,i);
cprintf("%c",179);
for(i=l+1;i{gotoxy(i,u);cprintf("%c",196);/*水平线*/gotoxy(i,d);cprintf("%c",196);}gotoxy(l,u);cprintf("%c",218);/*左上角*/gotoxy(r,u);cprintf("%c",191);/*右上角*/gotoxy(l,d);cprintf("%c",192);/*左下角*/gotoxy(r,d);cprintf("%c",217);/*右下角*//*gettext(l+1,u+1,r-1,d-1,save1);*//*保存边框内区域*/}4)说明:以大量的函数,实现图书管理的主要过程,包括对用户的管理、对图书的管理、对借阅的管理。4.C程序设计总结1.程序调试基本正常,基本达到图书管理要求,调试之处游少数错误,经过修改基本上已经可以正常使用了。2.本人在程序设计感到,充分的利用网上的资源和手中的源代码及借鉴他人的经验可以更加的解决困难,使程序达到要求。参考文献[1]谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1[2]陈朔鹰,C语言程序设计习题集,北京:人命邮电出版社,2003.6附录:程序清单#include#include#include#include#include#include#include#defineLEFT0x4b00/*左*/#defineRIGHT0x4d00/*右*/#defineDOWN0x5000/*下*/#defineUP0x4800/*上*/#defineSPACE0x3920/*空格*/#defineESC0x011b/*ESC键*/#defineENTER0x1c0d/*回车键*/#defineBackspace0xe08/*擦除键*/#defineALT_B12288/*组合键ALT_B*/#defineALT_M12800/*组合键ALT_M*/#defineALT_H8960/*组合键ALT_H*/intkey;/*按键变量*/inttextx,texty;/*光标坐标,x行,y列*/structmenustruct/*菜单用的结构体*/{charname[10];/*主菜单名*/charstr[10][20];/*选项*/intn;/*选项数*/}ml[3];/*使用了3个,可根据需要增删*/typedefstructBookList/*书的结构体*/{charnum[20];/*图书编号*/charname[20];/*书名*/intprice;/*书的价格*/charperson[20];/*借阅人*/intyes;/*判断书是否存在或者已经借出,1存在,0借出*/structBookList*next;}Book;typedefstructMemberList/*会员的结构体*/{charname[20];/*会员的姓名*/charsex[2];/*会员的性别*/intage;/*会员的年龄*/structMemberList*next;}Member;charsave[4096];/*保存文本区域空间*//*charsav1[4096];*/charc[4096];/*清屏专用空间*/inti,j;/*常用变量*/voidMenu();/*初始化界面*/voidSelectitem();/*定义菜单*/voidDrawSelectitem();/*显示主菜单*/voidBlackText(intx,inty,char*z);/*选中菜单*/voidRedText(intx,inty,char*z);/*正常菜单*/voidRun();/*具体操作过程*/voidDrawMl(intn);/*显示下拉菜单*/voidMoveMl(intn,intx);/*菜单选项的控制*/voidEnter(intm,intn);/*菜单选项的具体功能*/voidBookAdd();/*添加图书*/voidBookConsult();/*图书查询*/voidBookDel();/*删除图书资料*/voidBookBorrow();/*借书*/voidBookReturn();/*还书*/voidMemberAdd();/*增加会员*/voidMemberConsult();/*查询会员*/voidMemberDel();/*删除会员*/voidMemberBook();/*查询会员借书信息*/voidHelp();/*帮助*/voidVer();/*版本信息*/voidClrScr();/*自定义清屏函数*/voidDrawFrame(intleft,intup,intright,intdown,inttextcolor,intbackgroundcolor);/*画边框*//***主函数****/voidmain(void){Menu();/*初始化界面*/Run();/*具体操作过程*/}/*初始化界面*/voidMenu(){system("cls");/*调用系统的清屏命令*/textbackground(BLUE);/*将背景设置为蓝色*/window(1,1,25,80);clrscr();textx=3;/*光标初始化位置*/texty=2;gotoxy(1,2);printf("%c",218);/*画左上角*/for(i=0;i<78;i++)printf("%c",196);/*画水平直线*/printf("%c",191);/*画右上角*/for(i=3;i<=23;i++){gotoxy(1,i);printf("%c",179);/*画垂直线*/gotoxy(80,i);printf("%c",179);}printf("%c",192);/*画左下角*/for(i=0;i<78;i++)printf("%c",196);printf("%c",217);/*画右下角*/gotoxy(1,1);textcolor(7);/*设置灰色*/for(i=0;i<80;i++)cprintf("%c",219);/*用符号实现画主菜单的灰色背景区*/Selectitem();/*调用选项函数*/DrawSelectitem();/*画选项*/gettext(2,3,78,23,c);/*保存当前文本区域*/}/*定义菜单*/voidSelectitem(){strcpy(ml[0].name,"Book");/*下面的具体选项补空格是为了各菜单黑色背景相同*/strcpy(ml[0].str[0],"Add");/*添加图书*/strcpy(ml[0].str[1],"Consult");/*查询图书*/strcpy(ml[0].str[2],"Del");/*删除图书资料*/strcpy(ml[0].str[3],"Borrow");/*借书*/strcpy(ml[0].str[4],"Return");/*还书*/strcpy(ml[0].str[5],"Exit");/*退出系统*/ml[0].n=6;/*保存菜单的项数*/strcpy(ml[1].name,"Member");strcpy(ml[1].str[0],"Add");/*添加新会员*/strcpy(ml[1].str[1],"Consult");/*查询会员资料*/strcpy(ml[1].str[2],"Del");/*删除会员资料*/strcpy(ml[1].str[3],"Member&book");ml[1].n=4;strcpy(ml[2].name,"Help");/*系统帮助*/strcpy(ml[2].str[0],"ThisSystem");strcpy(ml[2].str[1],"Ver");ml[2].n=2;}/*显示主单名*/voidDrawSelectitem(){for(i=0;i<3;i++)RedText(i,1,ml[i].name);/*显示主菜单名,且首字母为红色*/}/*正常显示菜单*/voidRedText(intx,inty,char*z){textbackground(7);/*设置背景颜色为浅灰色*/gotoxy(3+x*20,y);for(j=0;z[j];j++){if(j==0)textcolor(RED);/*第一个字母显示红色*/elsetextcolor(BLACK);/*设置黑色*/cprintf("%c",z[j]);/*输出菜单名*/}}/*显示选中菜单*/voidBlackText(intx,inty,char*z){textbackground(0);/*设置背景颜色为黑色*/textcolor(15);/*设置文本颜色为白色*/gotoxy(3+20*x,y);/*定位坐标*/cputs(z);/*输出菜单名字符串*/}/*按键操作过程*/voidRun(){while(1){gotoxy(texty,textx);key=bioskey(0);/*接收按键*/switch(key){caseALT_B:caseESC:DrawMl(0);break;/*显示下拉菜单1*/caseALT_M:DrawMl(1);break;/*显示下拉菜单2*/caseALT_H:DrawMl(2);/*显示下拉菜单3*/caseUP:/*上光标键的操作控制*/{if(textx==3)textx=23;textx--;gotoxy(texty,textx);}break;caseDOWN:/*下光标键的操作控制*/{if(textx==23)textx=3;textx++;gotoxy(texty,textx);}break;caseLEFT:/*左光标键的操作控制*/{if(texty==2)texty=79;texty--;gotoxy(texty,textx);}break;caseBackspace:/*擦除键的设置*/{if(texty==2&&textx==3)continue;else{if(texty!=2)texty--;/*擦除键的细节问题,先擦去东西,然后光标还要往后退一格*/elseif(texty==2){texty=78;textx--;}gotoxy(texty,textx);printf("");gotoxy(texty,textx);}}break;/*endcase0xe08*/caseRIGHT:/*右光标键的操作控制*/{if(texty==79)texty=2;texty++;gotoxy(texty,textx);}break;caseSPACE:/*空格键的操作*/{if(texty==79)continue;else{gotoxy(texty,textx);/*空格的细节操作*/printf("");texty++;gotoxy(texty,textx);}}break;caseENTER:/*回车的控制操作*/{if(textx==23)continue;textx++;texty=2;gotoxy(texty,textx);}break;default:/*非控制键的结果*/{if(texty==79&&textx==23)/*到达最后就不再输出*/continue;elseif(texty==79&&textx!=23)/*到行的最后*/{textx++;texty=2;}gotoxy(texty,textx);/*输出结果*/printf("%c",key);if(texty==79)/*如果texty==79就不执行*/continue;else/*如果没到行尾就继续执行,使光标向前移动一位*/texty++;}}}/*大循环的大括号*/}/*画边框函数*/voidDrawFrame(intl,intu,intr,intd,inttcolor,intbcolor){textbackground(bcolor);/*背景颜色*/textcolor(bcolor);/*文本颜色*/for(i=l;i<=r;i++)/*输出背景区域*/{for(j=u;j<=d;j++){gotoxy(i,j);printf("%c",219);/*输出背景字符*/}}textcolor(tcolor);/*边框颜色*/for(i=u+1;i{gotoxy(l,i);cprintf("%c",179);/*垂直线*/gotoxy(r,i);cprintf("%c",179);}for(i=l+1;i{gotoxy(i,u);cprintf("%c",196);/*水平线*/gotoxy(i,d);cprintf("%c",196);}gotoxy(l,u);cprintf("%c",218);/*左上角*/gotoxy(r,u);cprintf("%c",191);/*右上角*/gotoxy(l,d);cprintf("%c",192);/*左下角*/gotoxy(r,d);cprintf("%c",217);/*右下角*//*gettext(l+1,u+1,r-1,d-1,save1);*//*保存边框内区域*/}/*显示具体下拉选择项目*/voidDrawMl(intn){gettext(1,1,80,25,save);/*保存被掩盖的地方*/BlackText(n,1,ml[n].name);/*反选显示主菜单*/DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*下拉菜单的边框*/for(i=3;i<3+ml[n].n;i++)/*输出所选菜单各选项*/{if(i==3)BlackText(n,i,ml[n].str[i-3]);/*默认选中第一项*/elseRedText(n,i,ml[n].str[i-3]);/*其余各项首字符红色显示*/
gotoxy(i,u);
cprintf("%c",196);/*水平线*/
gotoxy(i,d);
cprintf("%c",196);
gotoxy(l,u);
cprintf("%c",218);/*左上角*/
gotoxy(r,u);
cprintf("%c",191);/*右上角*/
gotoxy(l,d);
cprintf("%c",192);/*左下角*/
gotoxy(r,d);
cprintf("%c",217);/*右下角*/
/*gettext(l+1,u+1,r-1,d-1,save1);*//*保存边框内区域*/
以大量的函数,实现图书管理的主要过程,包括对用户的管理、对图书的管理、对借阅的管理。
4.C程序设计总结
1.程序调试基本正常,基本达到图书管理要求,调试之处游少数错误,经过修改基本上已经可以正常使用了。
2.本人在程序设计感到,充分的利用网上的资源和手中的源代码及借鉴他人的经验可以更加的解决困难,使程序达到要求。
参考文献
[1]谭浩强,C程序设计(第二版),北京:
清华大学出版社,2001.1
[2]陈朔鹰,C语言程序设计习题集,北京:
人命邮电出版社,2003.6
附录:
程序清单
#include
#defineLEFT0x4b00/*左*/
#defineRIGHT0x4d00/*右*/
#defineDOWN0x5000/*下*/
#defineUP0x4800/*上*/
#defineSPACE0x3920/*空格*/
#defineESC0x011b/*ESC键*/
#defineENTER0x1c0d/*回车键*/
#defineBackspace0xe08/*擦除键*/
#defineALT_B12288/*组合键ALT_B*/
#defineALT_M12800/*组合键ALT_M*/
#defineALT_H8960/*组合键ALT_H*/
intkey;/*按键变量*/
inttextx,texty;/*光标坐标,x行,y列*/
structmenustruct/*菜单用的结构体*/
charname[10];/*主菜单名*/
charstr[10][20];/*选项*/
intn;/*选项数*/
}ml[3];/*使用了3个,可根据需要增删*/
typedefstructBookList/*书的结构体*/
charnum[20];/*图书编号*/
charname[20];/*书名*/
intprice;/*书的价格*/
charperson[20];/*借阅人*/
intyes;/*判断书是否存在或者已经借出,1存在,0借出*/
structBookList*next;
}Book;
typedefstructMemberList/*会员的结构体*/
charname[20];/*会员的姓名*/
charsex[2];/*会员的性别*/
intage;/*会员的年龄*/
structMemberList*next;
}Member;
charsave[4096];/*保存文本区域空间*/
/*charsav1[4096];*/
charc[4096];/*清屏专用空间*/
inti,j;/*常用变量*/
voidMenu();/*初始化界面*/
voidSelectitem();/*定义菜单*/
voidDrawSelectitem();/*显示主菜单*/
voidBlackText(intx,inty,char*z);/*选中菜单*/
voidRedText(intx,inty,char*z);/*正常菜单*/
voidRun();/*具体操作过程*/
voidDrawMl(intn);/*显示下拉菜单*/
voidMoveMl(intn,intx);/*菜单选项的控制*/
voidEnter(intm,intn);/*菜单选项的具体功能*/
voidBookAdd();/*添加图书*/
voidBookConsult();/*图书查询*/
voidBookDel();/*删除图书资料*/
voidBookBorrow();/*借书*/
voidBookReturn();/*还书*/
voidMemberAdd();/*增加会员*/
voidMemberConsult();/*查询会员*/
voidMemberDel();/*删除会员*/
voidMemberBook();/*查询会员借书信息*/
voidHelp();/*帮助*/
voidVer();/*版本信息*/
voidClrScr();/*自定义清屏函数*/
voidDrawFrame(intleft,intup,intright,intdown,inttextcolor,intbackgroundcolor);/*画边框*/
/***主函数****/
voidmain(void)
Menu();/*初始化界面*/
Run();/*具体操作过程*/
/*初始化界面*/
/*定义菜单*/
voidSelectitem()
strcpy(ml[0].name,"Book");/*下面的具体选项补空格是为了各菜单黑色背景相同*/
strcpy(ml[0].str[0],"Add");/*添加图书*/
strcpy(ml[0].str[1],"Consult");/*查询图书*/
strcpy(ml[0].str[2],"Del");/*删除图书资料*/
strcpy(ml[0].str[3],"Borrow");/*借书*/
strcpy(ml[0].str[4],"Return");/*还书*/
strcpy(ml[0].str[5],"Exit");/*退出系统*/
ml[0].n=6;/*保存菜单的项数*/
strcpy(ml[1].name,"Member");
strcpy(ml[1].str[0],"Add");/*添加新会员*/
strcpy(ml[1].str[1],"Consult");/*查询会员资料*/
strcpy(ml[1].str[2],"Del");/*删除会员资料*/
strcpy(ml[1].str[3],"Member&book");
ml[1].n=4;
strcpy(ml[2].name,"Help");/*系统帮助*/
strcpy(ml[2].str[0],"ThisSystem");
strcpy(ml[2].str[1],"Ver");
ml[2].n=2;
/*显示主单名*/
voidDrawSelectitem()
for(i=0;i<3;i++)
RedText(i,1,ml[i].name);/*显示主菜单名,且首字母为红色*/
/*正常显示菜单*/
voidRedText(intx,inty,char*z)
textbackground(7);/*设置背景颜色为浅灰色*/
gotoxy(3+x*20,y);
for(j=0;z[j];j++)
if(j==0)
textcolor(RED);/*第一个字母显示红色*/
else
textcolor(BLACK);/*设置黑色*/
cprintf("%c",z[j]);/*输出菜单名*/
/*显示选中菜单*/
voidBlackText(intx,inty,char*z)
textbackground(0);/*设置背景颜色为黑色*/
textcolor(15);/*设置文本颜色为白色*/
gotoxy(3+20*x,y);/*定位坐标*/
cputs(z);/*输出菜单名字符串*/
/*按键操作过程*/
while
(1)
gotoxy(texty,textx);
key=bioskey(0);/*接收按键*/
switch(key)
caseALT_B:
caseESC:
DrawMl(0);break;/*显示下拉菜单1*/
caseALT_M:
DrawMl
(1);break;/*显示下拉菜单2*/
caseALT_H:
(2);/*显示下拉菜单3*/
caseUP:
/*上光标键的操作控制*/
if(textx==3)
textx=23;
textx--;
}break;
caseDOWN:
/*下光标键的操作控制*/
if(textx==23)
textx=3;
textx++;
caseLEFT:
/*左光标键的操作控制*/
if(texty==2)
texty=79;
texty--;
caseBackspace:
/*擦除键的设置*/
if(texty==2&&textx==3)
continue;
if(texty!
=2)
texty--;/*擦除键的细节问题,先擦去东西,然后光标还要往后退一格*/
texty=78;
printf("");
}break;/*endcase0xe08*/
caseRIGHT:
/*右光标键的操作控制*/
if(texty==79)
texty++;
caseSPACE:
/*空格键的操作*/
gotoxy(texty,textx);/*空格的细节操作*/
caseENTER:
/*回车的控制操作*/
default:
/*非控制键的结果*/
if(texty==79&&textx==23)/*到达最后就不再输出*/
if(texty==79&&textx!
=23)/*到行的最后*/
gotoxy(texty,textx);/*输出结果*/
printf("%c",key);
if(texty==79)/*如果texty==79就不执行*/
else/*如果没到行尾就继续执行,使光标向前移动一位*/
}/*大循环的大括号*/
/*画边框函数*/
for(i=u+1;i{gotoxy(l,i);cprintf("%c",179);/*垂直线*/gotoxy(r,i);cprintf("%c",179);}for(i=l+1;i{gotoxy(i,u);cprintf("%c",196);/*水平线*/gotoxy(i,d);cprintf("%c",196);}gotoxy(l,u);cprintf("%c",218);/*左上角*/gotoxy(r,u);cprintf("%c",191);/*右上角*/gotoxy(l,d);cprintf("%c",192);/*左下角*/gotoxy(r,d);cprintf("%c",217);/*右下角*//*gettext(l+1,u+1,r-1,d-1,save1);*//*保存边框内区域*/}/*显示具体下拉选择项目*/voidDrawMl(intn){gettext(1,1,80,25,save);/*保存被掩盖的地方*/BlackText(n,1,ml[n].name);/*反选显示主菜单*/DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*下拉菜单的边框*/for(i=3;i<3+ml[n].n;i++)/*输出所选菜单各选项*/{if(i==3)BlackText(n,i,ml[n].str[i-3]);/*默认选中第一项*/elseRedText(n,i,ml[n].str[i-3]);/*其余各项首字符红色显示*/
for(i=l+1;i{gotoxy(i,u);cprintf("%c",196);/*水平线*/gotoxy(i,d);cprintf("%c",196);}gotoxy(l,u);cprintf("%c",218);/*左上角*/gotoxy(r,u);cprintf("%c",191);/*右上角*/gotoxy(l,d);cprintf("%c",192);/*左下角*/gotoxy(r,d);cprintf("%c",217);/*右下角*//*gettext(l+1,u+1,r-1,d-1,save1);*//*保存边框内区域*/}/*显示具体下拉选择项目*/voidDrawMl(intn){gettext(1,1,80,25,save);/*保存被掩盖的地方*/BlackText(n,1,ml[n].name);/*反选显示主菜单*/DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*下拉菜单的边框*/for(i=3;i<3+ml[n].n;i++)/*输出所选菜单各选项*/{if(i==3)BlackText(n,i,ml[n].str[i-3]);/*默认选中第一项*/elseRedText(n,i,ml[n].str[i-3]);/*其余各项首字符红色显示*/
/*显示具体下拉选择项目*/
voidDrawMl(intn)
gettext(1,1,80,25,save);/*保存被掩盖的地方*/
BlackText(n,1,ml[n].name);/*反选显示主菜单*/
DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*下拉菜单的边框*/
for(i=3;i<3+ml[n].n;i++)/*输出所选菜单各选项*/
if(i==3)
BlackText(n,i,ml[n].str[i-3]);/*默认选中第一项*/
RedText(n,i,ml[n].str[i-3]);/*其余各项首字符红色显示*/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1