版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华科计算机学院C语言课设源代码#include<stdio.h>ttinclude<stdlib.h>ttinclude<ctype.h>ftinclude<conio.h>#include<string.h>#include<stddef.h>ttinclude<dos.h>ttdefineSUM100/*菜单内容*/char*mcnu□:{"File”,/*文件*/"Edit”,/*修改*/"Insert”,/*插入*/"Delete",/*删除*/"Query”,/*查询*/"Statistic",/*统计*/“Help"};/*将首字母设为红色*/char*redD={"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],bufl[17*2];/*乡镇受灾信息链结点结构*/typedefstructtown(chartown_id[4];/*乡镇编号*/chartownname[7];/*乡镇名称*/charcity_id[5];/*所属地市编号*/charprov_id[2];/*所属省自治区编号*/floatland_area;/*耕地面积*/floatlake_area;/*湖泊面积*/intsum3;/*该地市输入的乡镇数*/intvillnum;/*所辖自然村数*/intvill_disa_num;/*受灾自然村数*/intvill_dro_num;/*旱灾自然村数*/intvillflonum;/*洪灾自然村数*/intpopu_disa_num;/*受灾人口*/floatdro_area;/*旱灾面积*/floatfloarea;/*洪灾面积*/floatprodro_area;/*抗旱面积*/floatproflo_area;/*抗洪面积*/floatdro_fund;/*抗旱投入资金*/floatflo_fund;/*抗洪投入资金*/floatrelief;/*救济金额*/structtown*next;/*指向下一乡镇的指针*/}town;/*定义结构名*//*地市受灾信息链结点结构*/typedefstructcity(charcity_id[5];/*地市编号*/charcity_name[10];/*地市名称*/charprov_id[2];/*所属省自治区编号*/floatland_area;/*耕地面积*/floatlakearea;/*湖泊面积*/intsum2;/*该省自治区输入的地市数*/inttownnum;/*所辖乡镇数*/inttown_disa_num;/*受灾乡镇数*/inttown_dro_num;/*旱灾乡镇数*/inttownflonum;/*洪灾乡镇数*/intpopu_disa_num;/*受灾人口*/floatdro_area;/*旱灾面积*/floatflo_area;/*洪灾面积*/floatprodroarea;/*抗旱面积*/floatproflo_area;/*抗洪面积*/floatdro_fund;/*抗旱投入资金*/floatflofund;/*抗洪投入资金*/floatrelief;/*救济金额*/structtown*tnext;/*指向乡镇受灾信息的头指针*/structcity*next;/*指向下一地市的指针*/}city;/*省自治区受灾信息链结点结构*/typedefstructprov(charprov_id[2];/*省自治区编号*/charprov_name[20];/*省自治区名称*/floatlandarea;/*耕地面积*/floatlake_area;/*湖泊面积*/intsuml;/*输入的自治区数*/intcitynum;/*所辖市县数*/intcity_disa_num;/*受灾市县数*/intcity_dro_num;/*旱灾市县数*/intcityflonum;/*洪灾市县数*/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;/*乡镇链表头指针*/intsuml;/*存储省自治区总个数*/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:doitextbackground(BLACK);/*设置屏幕背景颜色,并清除屏幕*/clrscr();window(l,1,80,1);/*创建窗口用于显示菜单栏*//*设置文本属性:白底蓝字*/textbackground(WHITE);/*白色背景*/textcolor(BLUE);/*蓝色字体*/clrscr();/*清屏*/window。,1,80,1);/*设置活动菜单窗口*/clrscr0;/*清屏*//*显示菜单*/for(i=0,j=0;i<7;i++)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(l)==0);/*等待键盘输入*/key=get_key();/♦取得按键*//*F\f显示File下拉菜单*/if(key=33)[textbackground(BLACK);textcolor(WHITE);/*设置文本属性:黑底白字*/window(l,1,80,1);gotoxy(5,1);cprintf("%s”,menu[O]);/*打印输出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);cprintfF[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)(puttcxt(5,y+l,12,y+l,bufl);/*恢复之前蓝底黄字的项到白底黑字*/if(key=72)y=y==2?5:y-l;/*如果往上,到了最上面跳到最下面*/if(key=80)y=y==5?2:y+l;/*如果往下,到了最下面跳到最上面*/gettext(5,y+1,12,y+1,buf1);/*备份当前项(黄底蓝字)*//*以下4行,用蓝底黄字(表示选中)打印输出当前项*/textbackground(BLUE);textcolor(YELLOW);gotoxy⑵y);cprintfF[y-2]);key=get_key();/*等待键盘输入*//*Enter*/if(key=28)(/*下拉菜单处理*/switch(y-l)(case1:puttext(5,3,12,3,buf);/*恢复屏幕显示*/puttext(5,y+l,12,y+l,bufl);/*恢复之前蓝底黄字的项到白底黑字*/window(1,2,80,25);/*在整个屏幕上建一个窗口*/clrscrO;CreateProv(&head);/*创建文件*/break;case2:puttext(5,3,12,3,buf);/*恢复屏幕显示*/puttext(5,y+1,12,y+l,bufl);/*恢复之前蓝底黄字的项到白底黑字*/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/nif(getchar()==121)exit(T);/*终止程序*/elsebreak;default:break;}}/*ESC-关闭下拉菜单,恢复屏幕显示*/if(key==l){window(l,1,80,2);puttext(5,2,12,8,buf);textbackground(WHITE);textcolor(BLACK);gotoxy(5,1);cprintfmenu[0]);}}/*E\e显示Edit下拉菜单*/window(l,1,80,1);textbackground(BLACK);textcolor(WHITE);/*设置文本属性:黑底白字*/gotoxy(14,1);/*打印输出Edit*/cprintfmenu[l]);gettext(14,2,23,7,buf);/*备份将要被下拉菜单窗口覆盖的区域到内存buf*/window(14,2,23,7);/*创建下拉菜单窗口*//*设置文本属性:白底黑字*/textbackground(WHITE);textcolor(BLACK);clrscr();window(14,2,23,7);framed,1,10,5);/*画边框*//*打印输出下拉菜单*/for(i=2;i<5;i++)(gotoxy(2,i);cprintfI[i-2]);}/*备份下拉菜单的第一项到内存bufl,然后用蓝底黄字(表示选中)打印输出第一项*/gettext(14,3,23,3,buf1);textbackground(BLUE);textcolor(YELLOW);gotoxy(2,2);cprintfE[0]);/*处理按键*/y=2;key=get_key();/*读取键入的值*/while(key!=28&&key!=l){/*上下键*//*用内存bufl恢复当前菜单项,并备份将要被选中的菜单项到bufl,然后用蓝底黄字打印输出将要被选中的菜单项*/if(key==72|key==80)(puttext(14,y+l,23,y+l,bufl);/*恢复之前蓝底黄字的项到白底黑字*/if(key==72)y=y==2?4:yT;/*如果往上,到了最上面跳到最下面*/if(key==80)y=y==4?2:y+l;/*如果往下,到了最下面跳到最上面*/gettext(14,y+1,23,y+1,bufl);/*备份当前项(白底黑字)*//*以下3行,用蓝底黄字(表示选中)打印输出当前项*/textbackground(BLUE);textcolor(YELLOW);gotoxy(2,y);cprintfE[y-2]);key=get_key();/*等待键盘输入*//*Enter*/if(key==28)(switch(y-1)/*下拉菜单处理*/(puttext(14,2,23,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(14,y+1,23,y+1,buf1);EditProv(head);/*显示插入省自治区信息函数*/gotomenu;puttext(14,2,23,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(14,y+1,23,y+1,buf1);EditCity(head,head2);/*显示插入地市信息函数*/gotomenu;puttext(14,2,23,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(14,y+1,23,y+1,buf1);EditTown(head,head2,head3);/*显示插入乡镇信息函数*/gotomenu;default:break;})/*ESC-关闭下拉菜单,恢复屏幕显示*/if(key=l)(windowd,1,80,2);puttext(14,2,23,8,buf);textbackground(WHITE);textcolor(BLACK);gotoxy(14,1);cprintfmenu[2]);}}/*I\i显示Insert下拉菜单*/if(key==23){window(l,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);framed,1,10,5);/*画边框*//*打印输出下拉菜单*/for(i=2;i<5;i++)(gotoxy(2,i);cprintfI[i-2]);)/*备份下拉菜单的第一项到内存bufl,然后用蓝底黄字(表示选中)打印输出第一项*/gettext(24,3,33,3,buf1);textbackground(BLUE);textcolor(YELLOW);gotoxy(2,2);cprintf(*%sM[0]);/*处理按键*/y=2;key=get_key();/*读取键入的值*/while(key!=28&&key!=1){/*上下键*//*用内存bufl恢复当前菜单项,并备份将要被选中的菜单项到bufl,然后用蓝底黄字打印输出将要被选中的菜单项*/puttext(24,y+l,33,y+l,bufl);/*恢复之前蓝底黄字的项到白底黑字*/if(key=72)y=y==2?4:yT;/*如果往上,到了最上面跳到最下面*/if(key=80)y=y==4?2:y+l;/*如果往下,到了最下面跳到最上面*/gettext(24,y+1,33,y+1,buf1);/*备份当前项(白底黑字)*//*以下3行,用蓝底黄字(表示选中)打印输出当前项*/textbackground(BLUE);textcolor(YELLOW);gotoxy⑵y);cprintfI[y-2]);}key=get_key();/*等待键盘输入*/}/*Enter*/if(key=28)(switch(y-1)/*下拉菜单处理*/{puttext(24,2,33,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(24,y+1,33,y+1,bufl);InsertProv(head);/*显示插入省自治区信息函数*/gotomenu;puttext(24,2,33,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(24,y+1,33,y+1,buf1);InsertCity(head,head2);/*显示插入地市信息函数*/gotomenu;puttext(24,2,33,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(24,y+1,33,y+1,buf1);InsertTown(head,head2,head3);/*显示插入乡镇信息函数*/gotomenu;default:break;}}/*ESC-关闭下拉菜单,恢复屏幕显示*/if(key=l)(window(l,1,80,2);puttext(24,2,33,8,buf);textbackground(WHITE);textcolor(BLACK);gotoxy(24,1);cprintfmenu[2]);}}/*D\d显示Delete下拉菜单*/window(l,1,80,1);textbackground(BLACK);textcolor(WHITE);/*设置文本属性:黑底白字*/gotoxy(35,1);cprintfmenu[3]);/*打印输;IlDelete*/gettext(35,2,44,7,buf);/*备份将要被下拉菜单窗口覆盖的区域到内存buf*/window(35,2,44,7);/*创建下拉菜单窗口*/textbackground(WHITE);textcolor(BLACK);/*设置文本属性:白底黑字*/clrscr();window(35,2,44,7);framed,1,10,5);/*画边框*//*打印输出下拉菜单*/for(i=2;i<5;i++){gotoxy(2,i);cprintfD[i-2]);}/*备份下拉菜单的第一项到内存bufl,然后用蓝底黄字(表示选中)打印输出第一项*/gettext(35,3,44,3,buf1);textbackground(BLUE);textcolor(YELLOW);gotoxy(2,2);cprintf(*%s*,D[0]);/*处理按键*/y=2;key=get_key();/*读取键入的值*/while(key!=28&&key!=1)I/*上下键*//*用内存bufl恢复当前菜单项,并备份将要被选中的菜单项到bufl,然后用蓝底黄字打印输出将要被选中的菜单项*/if(key==72|key-80)(/*恢复之前蓝底黄字的项到白底黑字*/puttext(35,y+1,44,y+1,bufl);if(key=72)y=y==2?4:y-l;/*如果往上,到了最上面跳到最下面*/if(key=80)y=y==4?2:y+l;/*如果往下,到了最下面跳到最上面*/gettext(35,y+1,44,y+1,bufl);/♦备份当前项(白底黑字)*//*以下3行,用蓝底黄字(表示选中)打印输出当前项*/textbackground(BLUE);textcolor(YELLOW);gotoxy(2,y);cprintf(飞s”,D[y-2]);key=get_key();/*等待键盘输入*//*Enter*/if(key=28){switch(y-1)/*下拉菜单处理*/(puttext(35,2,44,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(35,y+1,44,y+1,buf1);DeleteProv(head);/*删除省自治区信息函数*/gotomenu;puttext(35,2,44,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(35,y+1,44,y+1,buf1);DeleteCity(head,head2);/*删除地市信息函数*/gotomenu;puttext(35,2,44,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(35,y+1,44,y+l,bufl);DeleteTown(head,head2,head3);/*删除乡镇信息函数*/gotomenu;default:break;})/*ESC-关闭下拉菜单,恢复屏幕显示*/if(key==l)window(l,1,80,2);puttext(35,2,44,8,buf);textbackground(WHITE);textcolor(BLACK);gotoxy(35,1);cprintfmenu[3]);}}/*Q\q显示Query下拉菜单*/if(key==16)(window(l,1,80,1);textbackground(BLACK);textcolor(WHITE);/*设置文本属性:黑底白字*/gotoxy(46,1);cprintfC%s*,menu[4]);/*打印输出Query*//*备份将要被下拉菜单窗口覆盖的区域到内存buf*/gettext(46,2,55,7,buf);window(46,2,55,7);/*创建下拉菜单窗口*/textbackground(WHITE);textcolor(BLACK);/*设置文本属性:白底黑字*/clrscr();window(46,2,55,7);framed,1,10,5);/*画边框*//*打印输出下拉菜单*/for(i=2;i<5;i++)(gotoxy(2,i);cprintfQ[i-2]);)/*备份下拉菜单的第一项到内存bufl,然后用蓝底黄字(表示选中)打印输出第一项*/gettext(46,3,55,3,buf1);textbackground(BLUE);textcolor(YELLOW);gotoxy(2,2);cprintf(*%s*,Q[0]);/*处理按键*/y=2;key=get_key();/*读取键入的值*/while(key!=28&&key!=1){/*上下键*//*用内存bufl恢复当前菜单项,并备份将要被选中的菜单项到bufl,然后用蓝底黄字打印输出将要被选中的菜单项*/if(key=721key==80)puttext(46,y+1,55,y+1,bufD;/*恢复之前蓝底黄字的项到白底黑字*/if(key==72)y=y==2?4:y-l;/*如果往上,到了最上面跳到最下面*/if(key==80)y=y==4?2:y+l;/*如果往下,到了最下面跳到最上面*/gettext(46,y+1,55,y+1,bufl);/*备份当前项(白底黑字)*/textbackground(BLUE);/*以下3行,用蓝底黄字(表示选中)打印输出当前项*/textcolor(YELLOW);gotoxy⑵y);cprintf(*%s*,Q[y-2]);}key=get_key();/*等待键盘输入*/}/*Enter*/if(key==28)(switch(y-1)/*下拉菜单处理*/(puttext(46,2,55,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(46,y+1,55,y+1,buf1);QueryProv(head);/*显示查询省自治区信息函数*/gotomenu;puttext(46,2,55,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(46,y+1,55,y+1,buf1);QueryCity(head,head2);/*显示查询地市信息函数*/gotomenu;puttext(46,2,55,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(46,y+1,55,y+1,bufl);QueryTown(head,head2,head3);/*显示查询乡镇信息函数*/gotomenu;default:break;}}/*ESC-关闭下拉菜单,恢复屏幕显示*/if(key==l)iwindow(l,1,80,2);puttext(46,2,55,8,buf);textbackground(WHITE);textcolor(BLACK);gotoxy(46,1);cprintfmenu[4]);})/*S\s显示Statistic下拉菜单*/if(key=31)!textbackground(BLACK);textcolor(WHITE);/*设置文本属性:黑底白字*/gotoxy(56,1);cprintf menu[5]);/*打印输出Statistic*/gettext(56,2,70,7,buf);/*备份*/window(56,2,70,7);/*创建下拉菜单窗口*/textbackground(WHITE);textcolor(BLACK);/*设置文本属性:白底黑字*/clrscr();window(56,2,70,7);/*画边框*/frame(1,1,15,5);for(i=2;i<5;i++)/*打印输出下拉菜单*/(gotoxy(2,i);cprintfS[i-2]);}/*备份下拉菜单的第一项到内存bufl,然后用蓝底黄字(表示选中)打印输出第一项*/gettext(56,3,70,3,buf1);textbackground(BLUE);textcolor(YELLOW);gotoxy(2,2);cprintfS[0]);/*处理按键*/y=2;key=get_key();/*读取键入的值*/while(key!=28&&key!=1){/*上下键*//*用内存bufl恢复当前菜单项,并备份将要被选中的菜单项到bufl,然后用蓝底黄字打印输出将要被选中的菜单项*/if(key==72|key==80){puttext(56,y+1,70,y+1,bufl);/*恢复之前蓝底黄字的项到黄底蓝字*/if(key==72)y=y==2?4:y-l;/*如果往上,到了最上面跳到最下面*/if(key=80)y=y=4?2:y+1;/*如果往下,到了最F面跳到最上面*/gettext(56,y+1,70,y+1,bufl);/*备份当前项(白底黑字)*//*以下3行,用蓝底黄字(表示选中)打印输出当前项*/textbackground(BLUE);textcolor(YELLOW);gotoxy(2,y);cprintf(*%s*,S[y-2]);}key=get_key();/*等待键盘输入*/}/*Enter*/if(key=28){/*下拉菜单处理*/switch(y-1)puttext(56,2,70,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到白底黑字*/puttext(56,y+1,70,y+1,bufl);windowd,2,80,25);clrscr();StatProv(head,head2,head3);/*执行省自治区统计函数*/gotomenu;break;puttext(56,2,70,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到黄底蓝字*/puttext(56,y+1,70,y+l,bufl);windowd,2,80,25);clrscr();StatCity(head,head2,head3);/*执行地市统计函数*/gotomenu;break;puttext(56,2,70,7,buf);/*恢复屏幕显示*//*恢复之前蓝底黄字的项到黄底蓝字*/puttext(56,y+1,70,y+l,bufl);window(l,2,80,25);clrscr();StatTown(head,head2,head3);/*执行乡镇统计函数*/gotomenu;break;default:break;)}/*ESC一关闭下拉菜单,恢复屏幕显示*/if(key=l)window(l,1,80,2);puttext(56,2,70,7,buf);textbackground(WHITE);textcolor(BLACK);gotoxy(56,1);cprintf("%s”,menu[5]);}}/*H\h显示帮助信息*/if(key=35)(window(l,1,80,1);textbackground(BLACK);textcolor(WHITE);/*设置文本属性:黑底白字*/gotoxy(70,1);cprintfmenu[6]);/*备份将要被operation下拉菜单窗口覆盖的区域到内存buf*/gettext(70,2,79,5,buf);window(70,2,79,5);/*创建Help下拉菜单窗口*/textbackground(WHITE);textcolor(BLACK);/*设置文本属性:白底黑字*/clrscr();window(70,2,79,5);frame(1,1,10,3);/*画边框*//*打印输出下拉菜单*/for(i=2;i<3;i++)/*打印输出下拉菜单*/(gotoxy(2,i);cprintfCz%s,z,H[i-2]);}/*备份下拉菜单的第一项到内存bufl,然后用蓝底黄字(表示选中)输出第一项*/gettext(70,3,79,5,buf1);textbackground(BLUE);textcolor(YELLOW);gotoxy(2,2);cprintfH[0]);/*处理按键*/y=2;key=get_key();/*读取键入的值*//*Enter*/if(key==28)(puttext(70,2,79,5,buf);/*恢复屏幕显示*/puttext(70,3,79,3,bufl);/*恢复之前蓝底黄字的项到黄底蓝字*/window(l,2,80,25);/*创建一个占据整个屏幕的窗口*/clrscrO;if(ShowAbout()==1)gotomenu;)/*ESC-关闭下拉菜单,恢复屏幕显示*/if(key=l)(window(l,1,80,2);puttext(70,2,79,5,buf);textbackground(WHITE);textcolor(BLACK);gotoxy(70,1);cprintf("%s”,menu[6]);打印}))while(l);)/*欢迎界面函数*/voidwelcome(void)(structdated;/*定义日期结构体*/structtimet;/*定义时间结构体*/getdate(ftd);/*读取系统日期并把它放到结构体d中*/gettime(&t);/*读取系统时间并把它放到结构体t中*/clrscr();textbackground(BLACK);/*黑屏*/clrscr();/*清屏*/textcolor(MAGENTA);gotoxy(3,8);cprintf('#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#〃);gotoxy(3,9);cprintf("++”);gotoxy(3,11);cprintf(*++”);gotoxy(3,13);cprintf('++”);gotoxy(3,14);cprintf('#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#\n\n");gotoxy(3,10);cprintf("+");gotoxy(78,10);cprintf("+");gotoxy(3,12);gotoxy(78,12);cprintf("+");textcolor(YELLOW);gotoxy(4,10);cprintf("*WelcomeTo*");gotoxy(4,12);cprintfC*TheInformationSystemOfDisaster!*");textcolor(WHITE);gotoxy(36,21);cprintf("d\\%02d\\%02d”,d.da_year,d.da_mon,d.da_day);/*显示当前系统日期*/gotoxy(37,22);cprintf(/,%02d:%02d:%02d\n/z,t.tihour,t.timin,t.tisec);/*显示当前系统时间*/printf('\n");getchar();}/*得到按键值函数*/intget_key(void)(unionREGSregs;regs.h.ah=0;/*设置光标位置*/int86(0xl6,®s,feregs);/*通用8086软中断接口*/returnregs.h.ah;/*画边框函数*/voidframe(intstartx,intstarty,intwidth,intheight)[inti;height=height+1;gotoxy(startx,starty=starty+l);putch(Oxda);/*打印左上角*/for(i=startx+l;i<width;i++)putch(0xc4);/*打印上边线*/putch(Oxbf);/*打印右上角*/for(i=starty+l;i<height;i++)(gotoxy(startx,i);putch(0xb3);/*打印左边的竖线*/gotoxy(width,i);putch(0xb3);/*打印右边的竖线*/}gotoxy(startx,height);putch(0xc0);/*打印左下角*/for(i=startx+l;i<width;i++)putch(0xc4);/*打印下边线*/putch(0xd9);/*打印右下角*/return;}/*显示帮助函数*/intkey;window(l,2,80,25);textbackground(BLACK);clrscr();textcolor(LIGHTMAGENTA);gotoxy(6,2);cprintf("Aboutthemaker:*);gotoxy(6,11);cprintf(/zAbouttheprogram:'z);textcolor(YELLOW);gotoxy(9,4);printf(,z*Name:LiuMaolin^);gotoxy(9,5);printf(,z*School:HuazhongUniversityofScienceandTechnologe");gotoxy(9,6);printf("*Profession:ComputerScienceandTechnologe^);gotoxy(9,7);printf("*Class:cslOlK);gotoxy(9,8);printf(z<*StudentNum:U201014564*);gotoxy(9,13);printf(*#ThisismyfirstlargescaleCprogram./z);gotoxy(9,14);printfC"#Iknowtherestillhavesomeregretfulspots.");gotoxy(9,15);printfC"#I'mfondofCprogram,aswellasstudy.");textcolor(LIGHTGREEN);gotoxy(17,19)jcprintf(^Pleasepressthetogoback!”);textcolor(WHITE);gotoxy(34,19)jcprintf("Enter");Again:while(bioskey(l)==0);/*等待键盘输入*/key=get_key();/*取得按键*/if(key==28)return1;elsetextcolor(WHITE);printf(*\nError[Pleasepressagain!Xn");gotoAgain;/*若输入键不为Enter则返回Again再次输入*/})/*创建省自治区链表函数*/voidCreateProv(prov**headl)!prov*pl;/*定义遍历指针*/intkey,sum=0;/*用于判断是否退出*/charc;/*用于判断是否继续创建省自治区信息*/(*headl)=(prov*)malloc(sizeof(prov));/*遍历指针指向链表头*/pl=*headl;/*遍历指针初值同省自治区头指针*//*黑底粉字*/window(l,2,80,25);textbackground(BLACK);textcolor(LIGHTMAGENTA);clrscr();do(clrscr();printf(zz*Inputtheprovinceoryoucanexit:\n*);key=O;while(bioskey(l)==0);/*等待键盘输入*/key=get_key();/*取得按键*/if(key=l)break;elseifloattemp;/*定义•个中间变量*/printf(^XtProvincenumber:*);gets(pl->prov_id);/*读入省自治区编号*/fflush(stdin);/*清空输入流*/strcpy(prov_id,pl->prov_id);/*将省自治区编号记录进prov_id全局变量*/printf(z/\tProvincename:");scanf("%s",pl->prov_name);/*读入省自治区名称*/fflush(stdin);printf("XtLandarea:");scanf&temp);/*读入耕地面积*/pl->land_area=temp;fflush(stdin);printf(z,\tLakearea:");scanf(〃%f〃,&temp);/*读入湖泊面积*/pl->lake_area=temp;fflush(stdin);printf(*\tSumofcities/);scanf("%d”,&pl->city_num);/*读入所辖地市数*/fflush(stdin);printf(*XtSumofdisacities:*);scanf(*%d,z,&pl->city_disa_num);/*读入受灾地市数*/fflush(stdin);printf(*\tSumofdrocities:*);scanf(*%d*,&pl->city_dro_num);/*读入旱灾地市数*/fflush(stdin);printf(*\tSumofflocities:;scanfCz%dz\&pl->city_flo_num);/*读入洪灾地市数*/fflush(stdin);printf(*XtPopulationinthedisaster:");scanf(^d^,&pl->popu_disa_num);/*读入受灾人口*/fflush(stdin);printf(z,\tDroughtarea:");scanfCz%f/z,fttemp);/*读入旱灾面积*/pl->dro_area=temp;fflush(stdin);printf(*\tFloodarea:");scanffttemp);/*读入洪灾面积*/pl->flo_area=temp;fflush(stdin);printf(/z\tProdroughtarea:");scanf("%f”,&temp);/*读入抗旱面积*/p1->prodro_area=temp;fflush(stdin);printf(*\tProfloodarea:");scanf(*%fz,,&temp);/*读入抗洪面积*/pl->proflo_area=temp;fflush(stdin);printf(^XtFundtodrought:*);scanf&temp);/*读入抗旱投入资金*/pl->dro_fund=temp;fflush(stdin);printf(*\tFundtoflood:*);scanf&temp);/*读入抗洪投入资金*/pl->flo_fund=temp;fflush(stdin);printf("\tSumofrelief/);scanf("%f”,&tcmp);/*读入救济金额*/pl->relief=temp;fflush(stdin);}sum++;pl->suml=sum;CreateCity(&pl->cnext);/*调用建立地市链表函数,建立该省自治区所辖地市链表*/printf("Nextprovince?Y/N");/*询问是否有下一个省自治区*/scanf(*%c*,&c);fflush(stdin);while((c!=Y*&&c!=y*)&&(c!=N*&&c!=n))/*若输入错误输出提示信息,重新输入printf(Z/Error!Inputagain:z,);fflush(stdin);if(c=='N'|c='n')/*若无下一个省自治区则跳出循环*/{break;)pl->next=(prov*)malloc(sizeof(prov));/*用next指针新建省自治区链表*/pl=pl->next;/*遍历指针指向新建链表*/clrscr();gotoxy(3,1);cprintf("Nextprovince:\n");/*提示输入下一省自治区信息*/)while(c=='Y'||c=='y');/*若有下一省自治区则循环读入信息*/printf(*Createprovincessuccessfully!\tSum=%d*,pl->suml);/*提示创建成功,显示创建数目*/fflush(stdin);getchar();pl->next=NULL;/*如无后续省自治区链表并退出循环,将next指针赋为空*/}/*创建地市链表函数*/voidCreateCity(city**head2)iprov*pl;city*p2;/*定义遍历指针*/intkey,sum=0;charc;/*用于判断是否继续创建地市信息*/(*head2)=(city*)malloc(sizeof(city));/*遍历指针指向链表头*/p2=*head2;/*遍历指针初值同地市头指针*/window(l,2,80,25);clrscr();do(clrscr();printfC*Inputthecitiesoftheprovinceoryoucanexit:\n*);key=0;while(bioskey(l)==0);/*等待键盘输入*/key=get_key();/*取得按键*/if(key==l)break;else{floattemp;strcpy(p2->prov_id,prov_id);/*所属省自治区赋值*/printf(*\tCitynumber:*);scanfp2->city_id);/*读入地市编号*/fflush(stdin);/*清空输入流*/strcpy(city_id,p2->city_id);/*将地市编号记录进city_id全局变量*/printfCAtCityname:");scanfp2->cityname);/*读入地市名称*/fflush(stdin);printfCAtLandarea:");scanf("%f”,&temp);/*读入耕地面积*/p2->land_area=temp;fflush(stdin);printf(z/\tLakearea:");scanf('%f”,fttemp);/*读入湖泊面积*/p2->lake_area=temp;fflush(stdin);printf(*\tSumoftowns:");scanf("%d”,&p2->town_num);/*读入所辖乡镇数*/fflush(stdin);printf('\tSumofdisatowns:,z);scanf(z,%d,z,&p2->town_disa_num);/*读入受灾乡镇数*/fflush(stdin);printfC/\tSumofdrotowns:");scanf("%d”,&p2->town_dro_num);/*读入旱灾乡镇数*/fflush(stdin);printfCAtSumofflotowns:");scanfC*%d,z,&p2->town_flo_num);/*读入洪灾乡镇数*/fflush(stdin);printf(/z\tPopulationinthedisaster:zz);scanf&p2->popu_disa_num);/*读入受灾人口*/fflush(stdin);printfC"\tDroughtarea:");scanf("%f”,&temp);/*读入旱灾面积*/p2->dro_area=temp;fflush(stdin);printf(*XtFloodarea:");scanf&temp);/*读入洪灾面积*/p2->flo_area=temp;fflush(stdin);printf(*\tProdroughtarea:");scanf("%f”,&temp);/*读入抗旱面积*/p2->prodro_area=temp;fflush(stdin);printf(*\tProfloodarea/);scanf("%f”,&temp);/*读入抗洪面积*/p2->proflo_area=temp;fflush(stdin);printf(z/\tFundtodrought:z/);scanf(*%fzz,&temp);/*读入抗旱投入资金*/p2->dro_fund=temp;fflush(stdin);printfC/\tFundtoflood:*);scanf("%f”,&temp);/*读入抗洪投入资金*/p2->flo_fund=temp;fflush(stdin);printf(*\tSumofrelief:*);scanf&temp);/*读入救济金额*/p2->relief=temp;fflush(stdin);SUH1++;p2->sum2=sum;CreateTown(&p2->tnext);/*调用建立乡镇链表函数,建立该地市所辖乡镇链表*/printf(*Nextcity?Y/N");/*询问是否有下一地市*/scanf("%c",&c);fflush(stdin);while((c!=,Y1&&c!=,y)&&(c!=,&&c!-n))/*若输入错误输出提示信息,重新输入*/{printf(Z/Error!Inputagain:");scanf("枇",&c);}fflush(stdin);if(c—N*||c—n*)/*若无下一地市则跳出循环*/break;p2->next=(city*)malloc(sizeof(city));/*用next指针新建地市链表*/p2=p2->next;/*遍历指针指向新建链表*/clrscr();gotoxy(3,1);cprintf("Nextcity:\n*);/*提示输入下--地市信息*/)while(c='Y'11c='y');/*若有下一地市则循环读入信息*/printf(''Createcitiessuccessfully!\tSum=%d/z,p2->sum2);/*提示创建成功,显示创建数目*/fflush(stdin);getchar();p2->next=NULL;/*如无后续地市链表并退出循环,将next指针赋为空*/}/*创建乡镇链表函数*/voidCreateTown(town**head3){city*p2;/*定义遍历指针*/town*p3;intkey,sum=O;charc;/*用于判断是否继续创建乡镇信息*/(*head3)=(town*)malloc(sizeof(town));/*遍历指针指向链表头*/p3=*head3;/*遍历指针初值同乡镇头指针*/window(1,2,80,25);clrscr();do{clrscr();printfC*Inputthetownsofthecityoryoucanexit:\n");key=0;while(bioskey(l)==0);/*等待键盘输入*/key=get_key();/*取得按键*/if(key=l)break;elsefloattemp;strcpy(p3->city_id,city_id);/*所属地市赋值*/printf(/z\tTownnumber:/z);scanf p3->town_id);/*读入乡镇编号*/fflush(stdin);/*清空输入流*/printf(*\tTownname:");scanf('%s”,p3->town_name);/*读入乡镇名称*/fflush(stdin);printf('\tLandarea:z,);scanf("%f”,&temp);/*读入耕地面积*/p3->land_area=temp;fflush(stdin);printf(,z\tLakearea:,z);scanf(,z%f,z,fttemp);/*读入湖泊面积*/p3->lake_area=temp;fflush(stdin);printf(*\tSumofvillages:*);scanf(,z%d,z,&p3->vill_num);/*读入所辖自然村数*/fflush(stdin);printf(*\tSumofdisavillages:z,);scanf("%d”,&p3->vill_disa_num);/*读入受灾自然村数*/fflush(stdin);printf("\tSumofdroviHages:*);scanf("%d”,&p3->vill_dro_num);/*读入旱灾自然村数*/fflush(stdin);printf(*\tSumofflovillages:,z);scanf("%d”,&p3->vill_flo_num);/*读入洪灾自然村数*/fflush(stdin);printfCAtPopulationinthedisaster/');scanf("%d”,&p3->popu_disa_num);/*读入受灾人口*/fflush(stdin);printfCAtDroughtarea:");scanf("%f”,&temp);/*读入旱灾面积*/p3->dro_area=temp;fflush(stdin);printf(*XtFloodarea:");scanf("%f”,&temp);/*读入洪灾面积*/p3->flo_area=temp;fflush(stdin);printf(z/\tProdroughtarea:");scanf&tcmp);/*读入抗旱面积*/p3->prodro_area=temp;fflush(stdin);printf(*\tProfloodarea:");scanf("%f”,&temp);/*读入抗洪面积*/p3->proflo_area=:temp;fflush(stdin);printf(*\tFundtodrought:");scanf&temp);/*读入抗旱投入资金*/p3->dro_fund=temp;fflush(stdin);printf(*\tFundtoflood:/z);scanf&temp);/*读入抗洪投入资金*/p3->flofund=temp;fflush(stdin);printfCAtSumofrelief:zz);scanf("%f”,&temp);/*读入救济金额*/p3->relief=temp;fflush(stdin);)sum++;p3->sum3=sum;printf(*\nNexttown?Y/N");/*询问是否有下一乡镇*/scanf("%c",&c);fflush(stdin);while((c!='Y'&&c!='y')&&(c!='N'&&c!='n'))/*若输入错误输出提示信息,重新输入*/(printf(z,Error!Inputagain:");scanf&c);}fflush(stdin);if(c='N'I|c='n')/*若无下一乡镇则跳出循环*/break;p3->next=(town*)malloc(sizeof(town));/*用next指针新建乡镇链表*/p3=p3->next;/*遍历指针指向新建链表*/clrscr();gotoxy(3,1);cprintf(*Nexttown:\n");/*提示输入下一乡镇信息*/)while(c='Y'||c='y');/*若有下一乡镇则循环读入信息*/printf("Createtownssuccessfully!\tSum=%d,/,p3->sum3);/*提示创建成功,显示创建数目*/fflush(stdin);getchar();p3->next=NULL;/*如无后续乡镇链表并退出循环,将next指针赋为空*/}/*保存文件函数*/voidSave(prov*head){FILE*outl,*out2,*out3;/*分别是指向三个文件的指针*/prov*pl=head;/*省自治区链表的移动指针*/city*p2;/*地市链表的移动指针*/town*p3;/*乡镇链表的移动指针*/textbackground(BLACK);textcolor(YELLOW);clrscr();if((outl=fopen('c:\\province.dat","wb"))=NULL)/*打开省自治区信息文件*/exit(-1);if((out2=fopen(^c:\\city.dat","wb"))==NULL)/*打开地市信息文件*/exit(-1);if((out3=fopen(^c:\\town.dat","wb"))=NULL)/*打开乡镇信息文件*/exit(-1);while(pl!=NULL)ifwrite(pl,sizeof(prov),1,outl);/*写入省自治区基本信息*/p2=pl->cnext;while(p2)fwrite(p2,sizeof(city),1,out2);/*写入地市基本信息*/p3=p2->tnext;while(p3)fwrite(p3,sizeof(town),1,out3);/*写入乡镇基本信息*/p3=p3->next;}p2=p2->next;)pl=pl->next;}/*关闭文件*/fclose(outl);fclose(out2);fclose(out3);gotoxy(31,10);printf(z,Savedsuccessfully!/z);gotoxy(28,12);printf(Z/Pressanykeytocontinue!/z);getcharO;/*任意键退出*/}/*载入文件*/voidLoad(prov**head)!FILE*inl,*in2,*in3;/*分别是指向三个文件的指针*/prov*headl,*pl;/*headl是局部头指针,pl是指向省自治区链表节点的指针*/city*p2;/*p2是指向地市链表节点的指针*/town*p3;/*p3是指向乡镇链表节点的指针*/textbackground(BLACK);clrscr();if((inl=fopen("c:\\province.dat","rb"))==NULL)/*打开省自治区信息文件*/exit(-l);/*若为空则退出*/if((in2=fopen(*c:\\city.dat","rb"))==NULL)/*打开地市信息文件*/exit(-l);/*若为空则退出*/if((in3=fopen("c:\\town.dat","rb"))==NULL)/*打开乡镇信息文件*/exit(-l);/*若为空则退出*/while(!feof(ini))Ipl=(prov*)malloc(sizeof(prov));/*创建省自治区信息结点*/fread(pl,sizeof(prov),1,ini);/*读入一条省自治区信息到结点中*/if(!feof(ini))/*判断是否读到文件尾*/I/*以堆栈形式建立链表*/pl->cnext=NULL;/*将对应地市链头指针赋为NULL*/pl->next=headl;/*省自治区信息链头指针值赋给结点的next域*/headl=pl;/*头指针指向新创建的结点*/))(*head)=headl;/*调用main函数中的head头指针指向新创建的省自治区信息链*/p2=(city*)malloc(sizeof(city));/*创建新地市信息结点*/fread(p2,sizeof(city),1,in2);/*读入一条地市信息记录到新结点*/if(!feof(in2))/*判断是否读到文件尾*/(pl=(*head);/*遍历指针pl指向省自治区信息链的链头*/while的1!=NULL)/*遍历省自治区信息链*/{if(!strcmp(pl->prov_id,p2->prov_id))/*寻找相同省自治区编号的结点*/{/*将读进来的配件信息建成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论