华科计算机学院C语言课设源代码1.docx
《华科计算机学院C语言课设源代码1.docx》由会员分享,可在线阅读,更多相关《华科计算机学院C语言课设源代码1.docx(103页珍藏版)》请在冰豆网上搜索。
华科计算机学院C语言课设源代码1
#include
#include
#include
#include
#include
#include
#include
#defineSUM100
/*菜单内容*/
char*menu[]={"File",/*文件*/
"Edit",/*修改*/
"Insert",/*插入*/
"Delete",/*删除*/
"Query",/*查询*/
"Statistic",/*统计*/
"Help"};
/*将首字母设为红色*/
char*red[]={"F","E","I","D","Q","S","H"};
/*File菜单*/
char*F[]={"Create",/*新建*/
"Save",/*保存*/
"Load",/*载入*/
"Exit"};/*删除*/
/*Edite菜单*/
char*E[]={"Province","City","Town"};
/*Insert菜单*/
char*I[]={"Province","City","Town"};
/*Delete菜单*/
char*D[]={"Province","City","Town"};
/*Query菜单*/
char*Q[]={"Province","City","Town"};
/*Statistic菜单*/
char*S[]={"Provincemode","Citymode","Townmode"};
/*Help菜单*/
char*H[]={"About..."};
/*缓冲区*/
charbuf[18*10*2],buf1[17*2];
/*乡镇受灾信息链结点结构*/
typedefstructtown
{
chartown_id[4];/*乡镇编号*/
chartown_name[7];/*乡镇名称*/
charcity_id[5];/*所属地市编号*/
charprov_id[2];/*所属省自治区编号*/
floatland_area;/*耕地面积*/
floatlake_area;/*湖泊面积*/
intsum3;/*该地市输入的乡镇数*/
intvill_num;/*所辖自然村数*/
intvill_disa_num;/*受灾自然村数*/
intvill_dro_num;/*旱灾自然村数*/
intvill_flo_num;/*洪灾自然村数*/
intpopu_disa_num;/*受灾人口*/
floatdro_area;/*旱灾面积*/
floatflo_area;/*洪灾面积*/
floatprodro_area;/*抗旱面积*/
floatproflo_area;/*抗洪面积*/
floatdro_fund;/*抗旱投入资金*/
floatflo_fund;/*抗洪投入资金*/
floatrelief;/*救济金额*/
structtown*next;/*指向下一乡镇的指针*/
}town;/*定义结构名*/
/*地市受灾信息链结点结构*/
typedefstructcity
{
charcity_id[5];/*地市编号*/
charcity_name[10];/*地市名称*/
charprov_id[2];/*所属省自治区编号*/
floatland_area;/*耕地面积*/
floatlake_area;/*湖泊面积*/
intsum2;/*该省自治区输入的地市数*/
inttown_num;/*所辖乡镇数*/
inttown_disa_num;/*受灾乡镇数*/
inttown_dro_num;/*旱灾乡镇数*/
inttown_flo_num;/*洪灾乡镇数*/
intpopu_disa_num;/*受灾人口*/
floatdro_area;/*旱灾面积*/
floatflo_area;/*洪灾面积*/
floatprodro_area;/*抗旱面积*/
floatproflo_area;/*抗洪面积*/
floatdro_fund;/*抗旱投入资金*/
floatflo_fund;/*抗洪投入资金*/
floatrelief;/*救济金额*/
structtown*tnext;/*指向乡镇受灾信息的头指针*/
structcity*next;/*指向下一地市的指针*/
}city;
/*省自治区受灾信息链结点结构*/
typedefstructprov
{
charprov_id[2];/*省自治区编号*/
charprov_name[20];/*省自治区名称*/
floatland_area;/*耕地面积*/
floatlake_area;/*湖泊面积*/
intsum1;/*输入的自治区数*/
intcity_num;/*所辖市县数*/
intcity_disa_num;/*受灾市县数*/
intcity_dro_num;/*旱灾市县数*/
intcity_flo_num;/*洪灾市县数*/
intpopu_disa_num;/*受灾人口*/
floatdro_area;/*旱灾面积*/
floatflo_area;/*洪灾面积*/
floatprodro_area;/*抗旱面积*/
floatproflo_area;/*抗洪面积*/
floatdro_fund;/*抗旱投入资金*/
floatflo_fund;/*抗洪投入资金*/
floatrelief;/*救济金额*/
structcity*cnext;/*指向地市受灾信息的头指针*/
structprov*next;/*指向下一省自治区的指针*/
}prov;
charprov_id[2];/*全局变量,记录省自治区编号*/
charcity_id[5];/*全局变量,记录地市编号*/
prov*head;/*省自治区链表头指针*/
city*head2;/*地市链表头指针*/
town*head3;/*乡镇链表头指针*/
intsum1;/*存储省自治区总个数*/
intsum2;/*存储地市个数*/
intsum3;/*存储乡镇个数*/
voidframe(intstartx,intstarty,intwidth,intheight);/*画边框函数*/
voidwelcome(void);/*欢迎界面函数*/
intmainmenu(void);/*主菜单界面函数*/
intget_key(void);/*得到按键值函数*/
intShowAbout(void);/*显示帮助函数*/
voidCreateProv(prov**);/*创建省自治区链表函数*/
voidCreateCity(city**);/*创建地市链表函数*/
voidCreateTown(town**);/*创建乡镇链表函数*/
voidSave(prov*);/*保存信息函数*/
voidLoad(prov**);/*载入信息函数*/
voidQueryProv(prov**);/*显示查询省自治区信息函数*/
voidQueryCity(prov**,city**);/*显示查询地市信息函数*/
voidQueryTown(prov**,city**,town**);/*显示查询乡镇信息函数*/
voidInsertProv(prov*);/*显示插入省自治区信息函数*/
voidInsertCity(prov*,city*);/*显示插入地市信息函数*/
voidInsertTown(prov*,city*,town*);/*显示插入乡镇信息函数*/
voidDeleteProv(prov*);/*显示删除省自治区信息函数*/
voidDeleteCity(prov*,city*);/*显示删除地市信息函数*/
voidDeleteTown(prov*,city*,town*);/*显示删除乡镇信息函数*/
voidEditProv(prov**);/*显示修改省自治区信息函数*/
voidEditCity(prov**,city**);/*显示修改地市信息函数*/
voidEditTown(prov**,city**,town**);/*显示修改乡镇信息函数*/
voidStatProv(prov**,city**,town**);/*显示统计省自治区信息函数*/
voidStatCity(prov**,city**,town**);/*显示统计地市信息函数*/
voidStatTown(prov**,city**,town**);/*显示统计乡镇信息函数*/
voidmain()
{
prov*head=NULL;
inti,j,key,x,y,back;
welcome();
clrscr();
menu:
do
{
textbackground(BLACK);/*设置屏幕背景颜色,并清除屏幕*/
clrscr();
window(1,1,80,1);/*创建窗口用于显示菜单栏*/
/*设置文本属性:
白底蓝字*/
textbackground(WHITE);/*白色背景*/
textcolor(BLUE);/*蓝色字体*/
clrscr();/*清屏*/
window(1,1,80,1);/*设置活动菜单窗口*/
clrscr();/*清屏*/
/*显示菜单*/
for(i=0,j=0;i<7;i++)
{
/*保存菜单第一个字母的位置,后面要用红色再打一次菜单的第一个字母*/
x=wherex();/*当前光标X坐标*/
y=wherey();/*当前光标Y坐标*/
cprintf("%s",menu[i]);/*打印输出菜单*/
j=strlen(menu[i]);
gotoxy(x,y);
textcolor(RED);/*用红色输出菜单的第一个字母*/
cprintf("%s",red[i]);
x=x+j+5;
gotoxy(x,y);
textcolor(BLUE);/*将文本颜色修改为蓝色*/
}
x=0;
key=0;
while(bioskey
(1)==0);/*等待键盘输入*/
key=get_key();/*取得按键*/
/*F\f显示File下拉菜单*/
if(key==33)
{
textbackground(BLACK);
textcolor(WHITE);/*设置文本属性:
黑底白字*/
window(1,1,80,1);
gotoxy(5,1);
cprintf("%s",menu[0]);/*打印输出File*/
gettext(5,2,12,8,buf);/*备份将要被File下拉菜单窗口覆盖的区域到内存buf*/
window(5,2,12,8);/*创建File下拉菜单窗口*/
/*设置文本属性:
白底黑字*/
textbackground(WHITE);
textcolor(BLACK);
clrscr();
window(5,2,12,8);/*画边框*/
frame(1,1,8,6);
/*打印输出下拉菜单*/
for(i=2;i<6;i++)
{
gotoxy(2,i);
cprintf("%s",F[i-2]);
}
/*备份下拉菜单的第一项到内存bufl,然后用蓝底黄字(表示选中)打印输出第一项*/
gettext(5,3,12,3,buf1);
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(2,2);
cprintf("%s",F[0]);
/*处理按键*/
y=2;
key=get_key();
while(key!
=28&&key!
=1)
{/*上下键*/
/*用内存buf1恢复当前菜单项,并备份将要被选中的菜单项到buf1,然后用蓝底黄字打印输出将要被选中的菜单项*/
if(key==72||key==80)
{
puttext(5,y+1,12,y+1,buf1);/*恢复之前蓝底黄字的项到白底黑字*/
if(key==72)
y=y==2?
5:
y-1;/*如果往上,到了最上面跳到最下面*/
if(key==80)
y=y==5?
2:
y+1;/*如果往下,到了最下面跳到最上面*/
gettext(5,y+1,12,y+1,buf1);/*备份当前项(黄底蓝字)*/
/*以下4行,用蓝底黄字(表示选中)打印输出当前项*/
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(2,y);
cprintf("%s",F[y-2]);
}
key=get_key();/*等待键盘输入*/
}
/*Enter*/
if(key==28)
{/*下拉菜单处理*/
switch(y-1)
{
case1:
puttext(5,3,12,3,buf);/*恢复屏幕显示*/
puttext(5,y+1,12,y+1,buf1);/*恢复之前蓝底黄字的项到白底黑字*/
window(1,2,80,25);/*在整个屏幕上建一个窗口*/
clrscr();
CreateProv(&head);/*创建文件*/
break;
case2:
puttext(5,3,12,3,buf);/*恢复屏幕显示*/
puttext(5,y+1,12,y+1,buf1);/*恢复之前蓝底黄字的项到白底黑字*/
window(1,2,80,25);/*在整个屏幕上建一个窗口*/
clrscr();
Save(head);/*保存文件*/
break;
case3:
puttext(5,3,12,3,buf);/*恢复屏幕显示*/
puttext(5,y+1,12,y+1,buf1);/*恢复之前蓝底黄字的项到白底黑字*/
window(1,2,80,25);/*在整个屏幕上建一个窗口*/
clrscr();
Load(&head);/*读取文件*/
break;
case4:
puttext(5,3,12,3,buf);/*恢复屏幕显示*/
puttext(5,y+1,12,y+1,buf1);/*恢复之前蓝底黄字的项到白底黑字*/
window(1,2,80,25);/*在整个屏幕上建一个窗口*/
textbackground(BLACK);
clrscr();
gotoxy(30,10);
/*询问是否退出程序,若y则退出,若其他则跳出这一层*/
printf("Exit,sure?
y/n");
if(getchar()==121)
exit(-1);/*终止程序*/
else
break;
default:
break;
}
}
/*ESC-关闭下拉菜单,恢复屏幕显示*/
if(key==1)
{
window(1,1,80,2);
puttext(5,2,12,8,buf);
textbackground(WHITE);
textcolor(BLACK);
gotoxy(5,1);
cprintf("%s",menu[0]);
}
}
/*E\e显示Edit下拉菜单*/
if(key==18)
{
window(1,1,80,1);
textbackground(BLACK);
textcolor(WHITE);/*设置文本属性:
黑底白字*/
gotoxy(14,1);/*打印输出Edit*/
cprintf("%s",menu[1]);
gettext(14,2,23,7,buf);/*备份将要被下拉菜单窗口覆盖的区域到内存buf*/
window(14,2,23,7);/*创建下拉菜单窗口*/
/*设置文本属性:
白底黑字*/
textbackground(WHITE);
textcolor(BLACK);
clrscr();
window(14,2,23,7);
frame(1,1,10,5);/*画边框*/
/*打印输出下拉菜单*/
for(i=2;i<5;i++)
{
gotoxy(2,i);
cprintf("%s",I[i-2]);
}
/*备份下拉菜单的第一项到内存bufl,然后用蓝底黄字(表示选中)打印输出第一项*/
gettext(14,3,23,3,buf1);
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(2,2);
cprintf("%s",E[0]);
/*处理按键*/
y=2;
key=get_key();/*读取键入的值*/
while(key!
=28&&key!
=1)
{/*上下键*/
/*用内存buf1恢复当前菜单项,并备份将要被选中的菜单项到buf1,然后用蓝底黄字打印输出将要被选中的菜单项*/
if(key==72||key==80)
{
puttext(14,y+1,23,y+1,buf1);/*恢复之前蓝底黄字的项到白底黑字*/
if(key==72)
y=y==2?
4:
y-1;/*如果往上,到了最上面跳到最下面*/
if(key==80)
y=y==4?
2:
y+1;/*如果往下,到了最下面跳到最上面*/
gettext(14,y+1,23,y+1,buf1);/*备份当前项(白底黑字)*/
/*以下3行,用蓝底黄字(表示选中)打印输出当前项*/
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(2,y);
cprintf("%s",E[y-2]);
}
key=get_key();/*等待键盘输入*/
}
/*Enter*/
if(key==28)
{
switch(y-1)/*下拉菜单处理*/
{
case1:
puttext(14,2,23,7,buf);/*恢复屏幕显示*/
/*恢复之前蓝底黄字的项到白底黑字*/
puttext(14,y+1,23,y+1,buf1);
EditProv(head);/*显示插入省自治区信息函数*/
gotomenu;
case2:
puttext(14,2,23,7,buf);/*恢复屏幕显示*/
/*恢复之前蓝底黄字的项到白底黑字*/
puttext(14,y+1,23,y+1,buf1);
EditCity(head,head2);/*显示插入地市信息函数*/
gotomenu;
case3:
puttext(14,2,23,7,buf);/*恢复屏幕显示*/
/*恢复之前蓝底黄字的项到白底黑字*/
puttext(14,y+1,23,y+1,buf1);
EditTown(head,head2,head3);/*显示插入乡镇信息函数*/
gotomenu;
default:
break;
}
}
/*ESC-关闭下拉菜单,恢复屏幕显示*/
if(key==1)
{
window(1,1,80,2);
puttext(14,2,23,8,buf);
textbackground(WHITE);
textcolor(BLACK);
gotoxy(14,1);
cprintf("%s",menu[2]);
}
}
/*I\i显示Insert下拉菜单*/
if(key==23)
{
window(1,1,80,1);
textbackground(BLACK);
textcolor(WHITE);/*设置文本属性:
黑底白字*/
gotoxy(24,1);
cprintf("%s",menu[2]);/*打印输出Insert*/
gettext(24,2,33,7,buf);/*备份将要被下拉菜单窗口覆盖的区域到内存buf*/
window(24,2,33,7);/*创建下拉菜单窗口*/
textbackground(WHITE);
textcolor(BLACK);/*设置文本属性:
白底黑字*/
clrscr();
window(24,2,33,7);
frame(1,1,10,5);/*画边框*/
/*打印输出下拉菜单*/
for(i=2;i<5;i++)
{
gotoxy(2,i);
cprintf("%s",I[i-2]);
}
/*备份下拉菜单的第一项到内存bufl,然后用蓝底黄字(表示选中)打印输出第一项*/
gettext(24,3,33,3,buf1);
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(2,2);
cprintf("%s",I[0]);
/*处理按键*/
y=2;
key=get_key();/*读取键入的值*/
while(key!
=28&&key!
=1)
{/*上下键*/
/*用内存buf1恢复当前菜单项,并备份将要被选中的菜单项到buf1,然后用蓝底黄字打印输出将要被选中的菜单项*/
if(key==72||key==80)
{
puttext(24,y+1,33,y+1,buf1);/*恢复之前蓝底黄字的项到白底黑字*/
if(key==72)
y=y==2?
4:
y-1;/*如果往上,到了最上面跳到最下面*/
if(key==80)
y=y=