图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
![图书管理系统.docx](https://file1.bdocx.com/fileroot1/2023-2/26/8422aaf1-dae4-4a55-a1e6-58854b6d29ff/8422aaf1-dae4-4a55-a1e6-58854b6d29ff1.gif)
图书管理系统
学号
2015-2016学年第2学期
1408010121
《高级语言程序设计》
课程设计报告
题目:
图形菜单设计
专业:
计算机科学与技术
班级:
14级计科
(1)班
姓名:
柳亚飞
指导教师:
樊郁徽
成绩:
计算机学院
2015年4月24日
目录
目录1
1设计内容及要求2
1.1设计内容2
1.2设计任务及具体要求2
2概要设计2
2.1系统的功能简介2
2.2系统功能模块图2
2.3各个模块之间的主要关系3
3.1菜单相关信息的设置:
4测试数据及其结果分析4
4.1测试:
4
(1)显示的主界面4
5用户手册5
7源程序代码6
1设计内容及要求
1.1设计内容
图形菜单设计主要根据课程设计要求进行设计,并了解了该程序主要功能,该系统功能主要包括四大模块:
(1)设定模块:
设置菜单显示的形状和颜色,按照指定的方式显示菜单
(2)添加模块:
添加菜单的个数,在添加时候同时要设置菜单的名称和颜色
等,以及显示的颜色
(3)显示模块:
显示图形界面菜单,在为本界面和图形界面之间进行切换
(4)退出模块:
退出图形菜单界面,并自动保存已经设置好的图形菜单界面
1.2设计任务及具体要求
(1)建立结构体数组,利用结构体输入主菜单、子菜单的名称和数量
(2)能够提供添加、修改、删除主菜单、子菜单的信息
2概要设计
2.1系统的功能简介
本程序功能主要是进行图形界面菜单的设计和显示,在代码中可以设置图形界面中要显示的主菜单的名称、子菜单的名称以及主菜单的高度、子菜单的高度以及显示的颜色和在退出程序时的动画设置。
2.2系统功能模块图
设定模块:
设定要显示的菜单个数和相应的菜单信息,如主菜单的个数、主菜单
的子菜单的个数,菜单的大小和颜色等
添加模块:
按照相应的要求进行菜单的相关信息的添加
显示模块:
显示已经设置完成的图形界面菜单,在代码编辑完成之后,运行时会自动进行显示
删除模块:
删除相应的菜单信息,并在退出图形界面时自动进行保存
修改模块:
修改相应的信息,如修改主菜单、子菜单的个数,主菜单、子菜单的
形状大小以及颜色
退出程序:
完成相应的操作显示出图形菜单界面后,退出程序(之前进行的关于
菜单的修改等操作会自动进行保存)
2.3各个模块之间的主要关系
该程序的主要功能是对图形菜单的设计以及显示功能,在编辑好相关的菜单信息之后,程序会自动保存改信息,在下次运行程序时候,程序会自动读取之前设置好的信息,各个模块之中最关键的是主模块,主模块的功能是不断的调用其他模块,进行相应的显示操作。
其次是绘图模块,绘图模块作用的绘制指定的图形界面。
3详细设计
3.1菜单相关信息的设置:
structMENU/*菜单结构*/
{intx;
inty;
intx1;/*该几行代码用于设置菜单的位置和大小*/
inty1;
unsignedcharActive[MAX_MENU];/*菜单项是否激活的标志*/
char*head;/*菜单的名字*/
};
intMouseOn(structMENU*t);
voidProcess();
voidXorbar(intsx,intsy,intex,intey,intc);
voidShow();
voidHide();
voidStatus()
structMENUFile={200,110,250,130};
structMENUEdit={295,110,345,130};
structMENUHelp={390,110,440,130};/*该几行代码用于设置要显示的菜单位置和大小*/
structMENUClose={600,10,620,30};
structMENUNeeraj={380,300,460,315};
voidmain()
{
intgd=DETECT,gm;/*初始化图形界面*/
initgraph(&gd,&gm,"c:
\\tc\\bgi");/*加载图形开发包,位置由图形开发包的具体位置而定!
*/
......
}
4测试数据及其结果分析
4.1测试:
(1)显示的主界面
(2)文件菜单、子菜单界面
(3)编辑菜单、子菜单界面
(4)退出界面
5用户手册
(1)根据用户自己的需要进行图形菜单的名称、大小以及颜色的设置,设
置完成后程序自动进行储存,并在下次使用时自动进行加载图形菜单
的信息。
6课程设计总结与感想
这个课题是设计一个图形菜单的设计,该程序能够较好的现实出用户设置的图形菜单界面,在进行菜单的设置时候,由于头文件的以及图形函数库的限制,导致了只能在tc2.0及以上版本的程序中运行代码,由于dos窗口没有鼠标,因此在运行、调试和保存程序的代码时候显得不方便。
这次的课程设计制作是对我进入大学以来学习程序设计语言结果的一次大检验,自己动手,自己发现和解决问题。
在进行此系统设计时,由于以前没有接触过tc的图形函数库,因此在进行图形绘制相关的操作时,显得十分的难,因此平时应该多接触接触一下有关图形界面方面的知识,以完善自己的不足,提高自己在以后生活中的竞争力。
参考文献:
[1].谭浩强,张基温.C语言习题集与上机指导[M].第三版.北京:
高等教育出版社,2006年
[2].谭浩强.C程序设计(第三版)[M].北京:
清华大学,2005年
[3].谭浩强.C程序设计(第二版)[M].北京:
清华大学,1999年
[4].耿国华.高级程序设计技术(C语言版).西安电子科技大学出版社,2009年
[5].C编写组编.常用C语言用法快速查询手册.北京:
龙门书局,1995年
7源程序代码
#include
#include
#include
#include
#include
/*定义一些常数*/
#defineNO0
#defineYES1
#defineNONE-1
#defineMAX_MENU7/*根据情况改变可以在菜单显示的最大项*/
/*全局参数*/
intX,Y;
intSelection;
intbutton,x,y;
void*p;
size_tarea;
/*菜单结构*/
structMENU
{
/*左上角*/
intx;
inty;
/*右下角*/
intx1;
inty1;
unsignedcharActive[MAX_MENU];/*菜单项是否激活的标志*/
char*head;/*菜单的名字(可选项)*/
};
intMouseOn(structMENU*t);
voidProcess();
voidXorbar(intsx,intsy,intex,intey,intc);
voidShow();
voidHide();
voidStatus();
/*通过下面的参数用户可以改变按钮的位置。
*/
structMENUFile={200,110,250,130};
structMENUEdit={295,110,345,130};
structMENUHelp={390,110,440,130};
structMENUClose={600,10,620,30};
structMENUNeeraj={380,300,460,315};
voidmain()
{
intgd=DETECT,gm;
/*初始化图形界面*/
initgraph(&gd,&gm,"");
Selection=NONE;
/*是否激活菜单项,YES表示激活;NO表示取消激活*/
for(gd=0;gd {
File.Active[gd]=YES;
Edit.Active[gd]=YES;
Help.Active[gd]=YES;
Close.Active[gd]=YES;
}
/*菜单项的名字,用户可以修改以显示其他的名称*/
File.head="[FileMenu]";
Edit.head="[EditMenu]";
Help.head="[HelpMenu]";
Close.head="[Exit]";
/*为界面分配内存*/
area=imagesize(0,0,150,150);
p=malloc(area);
/*没有足够的内存*/
if(p==NULL)
{
closegraph();
restorecrtmode();
printf("NotEnoughMemory!
\ntrytoreducetheareaused.\n");
exit
(1);
}
setfillstyle(1,7);
bar(0,0,640,480);
X=2;Y=2;
/*绘制这个界面*/
Process();
End();
/*关闭图形显示方式*/
closegraph();
printf("GUI-MENUSByNeerajSharma - n21@\n");
getch();
}
voidProcess()
{
/*文件菜单项的子菜单项*/
char*fm[]={"New","Open","Save","Saveas","Exit"};
/*编辑菜单项的子菜单项*/
char*em[]={"Undo","Cut","Copy","Paste","Delete","SelectAll"};
/*帮助菜单项的子菜单项*/
char*hm[]={"HelpTopics","AboutMenus"};
/*如果用户在这里改变的了菜单项的值,那么也同样需要改变在函数
中的PullMenuDown(char*,int)值*/
charKEY;
/*绘制各个菜单*/
Win(140,100,500,140);
/*绘制文件菜单项*/
DrawBtn(&File,"File");
/*绘制编辑菜单项*/
DrawBtn(&Edit,"Edit");
/*绘制帮助菜单项*/
DrawBtn(&Help,"Help");
settextstyle(0,0,0);
outtextxy(Close.x+7,Close.y+7,"x");
Comments();
Show();
/*正如下面所示用户可以激活和取消激活一个菜单项
下面的'saveas'被取消激活*/
File.Active[3]=NO;/*Saveas*/
Edit.Active[0]=NO;/*取消激活*/
while
(1)
{
if(kbhit())
{
KEY=getch();
/*如果用户按下"ESC"或者"-"推出程序*/
if(KEY==27||KEY==45)break;
}
Status();
/*如果按下鼠标左键*/
if(button==1)
{
/*用户点击Close*/
if(MouseOn(&Close))break;
/*用户点击File*/
if(MouseOn(&File))
{
PullMenuDown(fm,5,&File);/*菜单项为5*/
if(Selection==NONE)Msg("NoSelection!
");
elseMsg(fm[Selection]);
if(Selection==4)break;
}
/*用户点击Edit*/
if(MouseOn(&Edit))
{
PullMenuDown(em,6,&Edit);/*菜单项为6*/
if(Selection==NONE)Msg("NoSelection!
");
elseMsg(em[Selection]);
}
/*用户点击Help*/
if(MouseOn(&Help))
{
PullMenuDown(hm,2,&Help);/*菜单项为2*/
if(Selection==NONE)Msg("NoSelection!
");
elseMsg(hm[Selection]);
if(Selection==1)Msg("*ProgrammingByNEERAJSHARMA*");
}
}
else
{
/*鼠标在那个菜单项上,就高亮显示之*/
/*高亮显示文件菜单项*/
if(MouseOn(&File))Hlight(&File);
/*高亮显示编辑菜单项*/
if(MouseOn(&Edit))Hlight(&Edit);
/*高亮显示帮助菜单项*/
if(MouseOn(&Help))Hlight(&Help);
/*高亮显示关闭菜单项*/
if(MouseOn(&Close))Hlight(&Close);
if(MouseOn(&Neeraj))
{
Msg("Hello,everyone");
while(MouseOn(&Neeraj))
{
Status();
if(button!
=0)break;
if(kbhit())break;
}
Msg("");
}
}
}
Msg(":
:
ByeBye:
:
");
}
/*绘制菜单项*/
DrawBtn(structMENU*tm,char*txt)
{
/*设置绘制的颜色*/
setcolor(0);
/*设置文本格式*/
settextstyle(2,0,4);
/*输出txt文本*/
outtextxy(tm->x+15,tm->y+4,txt);
}
/*高亮显示函数*/
Hlight(structMENU*t)
{
/*高亮*/
winp(t,0);
/*显示菜单项名称 */
Msg(t->head);
/*在没有输入的情况下,一直高亮*/
while(MouseOn(t))
{
Status();
if(button!
=0)break;
if(kbhit())break;
}
/*消除高亮*/
setcolor(7);
Hide();
rectangle(t->x,t->y,t->x1,t->y1);
Msg("");
/*重绘*/
Show();
}
intMouseOn(structMENU*t)
{
intflag;
flag=0;
if(x>=t->x&&x<=t->x1&&y>=t->y&&y<=t->y1)flag=1;
returnflag;
}
voidXorbar(intsx,intsy,intex,intey,intc)
{
inti;
setwritemode
(1);
setcolor(c);
Hide();
for(i=sy;i<=ey;i++)
line(sx,i,ex,i);
Show();
setwritemode(0);
}
Push(structMENU*tm)
{
winp(tm,1);
while(button==1)
{
Status();
if(kbhit())break;
}
}
Up(structMENU*tm)
{
setcolor(7);
Hide();
rectangle(tm->x,tm->y,tm->x1,tm->y1);
Show();
while(button==1)
{
Status();
if(kbhit())break;
}
}
/*弹出下拉菜单*/
PullMenuDown(char*H[],intn,structMENU*tm)
{
inti;
i=n*20;
/*保存背景*/
Push(tm);
/*隐藏鼠标光标*/
Hide();
/*把菜单项位图读入内存,以供收回弹出项时重新绘制*/
getimage(tm->x+1,tm->y1+2,tm->x+100,tm->y1+i+5,p);
/*重新设置这块区域*/
Win(tm->x+1,tm->y1+2,tm->x+100,tm->y1+i+5);
setcolor(0);
settextstyle(2,0,4);
/*弹出下拉菜单项*/
for(i=0;i {
if(!
tm->Active[i])
{
setcolor(15);
outtextxy(tm->x+15,tm->y1+9+i*20,H[i]);
setcolor(0);
outtextxy(tm->x+14,tm->y1+8+i*20,H[i]);
}
else outtextxy(tm->x+14,tm->y1+8+i*20,H[i]);
}
/*显示鼠标光标*/
Show();
while(button==1) Status();
HandleMenu(n,tm);
}
PullMenuUp(intn,structMENU*tm)
{
inti;
/*隐藏鼠标光标*/
Hide();
/*把读入内容的原菜单项位图重新绘制出来*/
putimage(tm->x+1,tm->y1+2,p,COPY_PUT);
/*显示鼠标光标*/
Show();
Up(tm);
}
/*处理菜单项命令函数*/
HandleMenu(intn,structMENU*tm)
{
inti;
charKey;
setcolor(0);
Selection=NONE;
i=0;
while
(1)
{
Status();
if(button==1)break;
for(i=0;i {
Status();
if(MouseOn1(tm->x+4,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20))
{
Xorbar(tm->x+3,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20,14);
while(MouseOn1(tm->x+4,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20))
{
Status();
if(button==1)
{
if(tm->Active[i]==YES)
{
Selection=i;
break;
}
else
Selection=NONE;
}
if(kbhit())break;
}
Xorbar(tm->x+3,tm->y1+6+i*20,tm->x+97,tm->y1+22+i*20,14);
}
}
}
PullMenuUp(n,tm);
}
MouseOn1(intcx,intcy,intcx1,intcy1)
{
intflag;
flag=0;
if(x>=cx&&x<=cx1&&y>=cy&&y<=cy1)flag=1;
returnflag;
}
/*Mouse&winroutines*/
unionREGSi,o;
structSREGSss;
/*显示鼠标光标函数*/
voidShow()
{
i.x.ax=1;
int86(0x33,&i,&o);
}
/*隐藏鼠标光标函数*/
voidHide()
{
i.x.ax=2;
int86(0x33,&i,&o);
}
/*获得鼠标状态函数*/
voidStatus()
{
i.x.ax=3;
int86(0x33,&i,&o);
button=o.x.bx;
x=o.x.cx;
y=o.x.dx;
}
/*绘制菜单项的背景和边框*/
winp(structMENU*t,intstate)
{
Hide();
/*非高亮模式*/
if(state==1)
{
/*两条暗边框线*/
setcolor(0);
line(t->x,t->y,t->x,t->y1);
line(t->x,t->y,t->x1,t->y);
/*两条亮边框线*/
setcolor(15);
line(t->x1,t->y,t->x1,t->y1);
line(t->x,t->y1,t->x1,t->y1);
}
/*高亮模式*/
else
{
/*两条亮边框线*/
setcolor(15);
line(t->x,t->y,t->x,t->y1);
line(t->x,t->y,t->x1,t->y);
/*两条暗边框线*/
setcolor(0);
line(t->x1,t->y,t->x1,t->y1);
line(t->x,t->y1,t->x1,t->y1);
}
Show();
}
/*绘制一个矩形区域*/
Win(intsx,intsy,intex,intey)
{
Hide();
/*设置填充的颜色*/
setfillstyle(1,7);
/*绘制一个区域*/
bar(sx,sy,ex,ey);
/*两条亮边框线*/
setcolor(15);
line(sx,sy,sx,ey);