C语言设计实习报告勘查技术与工程(基础工程方向)姓名:李勇峰班号:054081学号:20081004133题目:交通处罚单管理系统指导教师:王老师时间:2009-2010学年秋一,题目要求【要求】:交通处罚单涉及到车辆,驾驶员和开单交警的信息,还有交通处罚单的号码,处罚时间等信息。【功能】:(1)要求可以输入,删除,浏览交通处罚单信息。(2)可以按车辆,驾驶员和开单交警查询。(3)统计某时间段某个驾驶员的交通处罚数目及交通处罚单号码。【提示】(1)需求分析:交通处罚单信息用文件存储,提供文件的输输出操作;要求可以输入,输出,删除,浏览交通处罚单信息,因而要提供输入,删除和显示操作;要实现按车辆,驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。(2)总体设计:整个管理系统被设计为信息输入模块,信息删除模块,信息浏览模块,信息查询模块,信息统计模块。交通处罚单管理系统输入查找删除统计退出二,详细设计:1,处罚单管理系统界面函数此函数包括的功能是建立新的罚单,按司机姓名查询罚单并浏览相关信息,按交警姓名查询罚单并浏览相关信息,按罚单号查询罚单并浏览相关信息,删除罚单,数据统计和退出处罚单管理系统。voidMenu(){printf();printf(欢迎来到交通处罚单管理系统!\n);printf(************************************************\n);;printf(1.建立新的罚单\n);printf(2.根据司机姓名查找并浏览相关信息\n);printf(3.根据交通警察姓名查找并浏览相关信息\n);printf(4.根据车牌号码查询并浏览相关信息\n);printf(5.删除处罚单\n);printf(6.数据统计\n);printf(0.退出\n);printf(************************************************\n);}2,各功能模块设计(1)创建新的交通处罚单处罚单包含的内容有处罚单号,车牌号,司机姓名,交警姓名,和处罚日期,因此相应的函数也应包含这些内容,在这个函数所控制的操作会依次提示输入以上内容。特别的,罚单号不能有重复,若输入的罚单号有重复,操作界面会提示罚单好重复,请重新输入。PTPRCreatTPR(PTPRpHead){PTPRpTemp=InitNode();IntiYear,iMon,iDay;printf(请输入相关信息:\n);printf(处罚单号:);flushall();scanf(%s,pTemp-m_sRecnum);if(SearchNode_1(pHead,pTemp-m_sRecnum)){printf(处罚单有重复,请重新输入);free(pTemp);returnpHead;}printf(车牌号码:);flushall();scanf(%s,pTemp-m_sCarid);printf(司机姓名:);flushall();scanf(%s,pTemp-m_sDriname);printf(交通警察姓名:);flushall();scanf(%s,pTemp-m_sTPName);printf(处罚日期:);flushall();scanf(%d%d%d,&iYear,&iMon,&iDay);InitDate(&pTemp-m_CDate,iYear,iMon,iDay);returnInsertNode(pHead,pTemp);}(2)按司机姓名查询罚单:创建新的罚单罚单号车牌号司机姓名交警姓名处罚日期先输入命令2,再输入待查找司机姓名.在这里函数会在记录在案的处罚单进行循环查找,如果有该司机的罚单记录,就会相应显示在屏幕上。如果没有该司机的处罚记录,就会打印:没有相关信息。其中If(!(i/4)){i=0;continue;}这一句的作用是因为有时若因为某哪位司机的处罚记录过多以至于屏幕无法在一夜里全部显示时,多的就打印到下页.voidSearchByDriName(PTPRpHead){Charname[10];Inti=1,check=0;if(pHead){printf(请输入要查询的司机的姓名:);flushall();scanf(%s,name);while(pHead){pHead=SearchNode_2(pHead,name);if(pHead){check++;ShowNode(pHead);printf(\n);i++;pHead=pHead-m_pNext;}if(!(i%4)){i=0;CONTINUE;}}if(!check){printf(没有相关信息!\n);}Else{printf(目前还没有该处罚单!);}}(3)按交警姓名查询罚单:先输入命令3,再输入待查找交警姓名.在这里函数会在记录在案的处罚单进行循环查找,如果有该交警所开的的罚单记录,就会相应显示在屏幕上。如果没有该交警开的处罚记录,就会打印:没有相关信息。其中If(!(i/4)){i=0;continue;}此句的作用同(2)voidSearchByPocName(PTPRpHead){Charname[10];Inti=1,check=0;if(pHead){printf(请输入处罚交警的姓名:);flushall();scanf(%s,name);while(pHead){pHead=SearchNode_3(pHead,name);if(pHead){check++;ShowNode(pHead);printf(\n);i++;pHead=pHead-m_pNext;}if(!(i%4)){i=0;CONTINUE;}}if(!check){printf(没有相关信息!\n);}}Else{printf(目前还没有该处罚单!);}}(4)按车牌号查询罚单:先输入命令4,再输入待查找车牌号码.在这里函数也会对记录在案的处罚单进行循环查找,如果有该车牌号记录,就会相应显示在屏幕上。如果没有该车牌号的处罚信息,就会打印:没有相关信息。If(!(i/4)){i=0;continue;}此句的作用同(2)voidSearchByCarId(PTPRpHead){charname[10];Inti=1,check=0;if(pHead){printf(请输入要查询的车牌号码:);flushall();scanf(%s,name);while(pHead){pHead=SearchNode_4(pHead,name);if(pHead){check++;ShowNode(pHead);printf(\n);i++;pHead=pHead-m_pNext;}if(!(i%4)){i=0;CONTINUE;}}if(!check){printf(没有相关信息!\n);}}Else{printf(目前还没有该处罚单!);}}(5)删除罚单操作者先输入删除命令5,在按操作要求输入要删除的处罚单号码,系统浏览处罚单,找到相关信息后,在删除这张处罚信息,再把这个信息的尾地址结到下一个信息的头地址上从而达到删除此信息的作用.PTPRDeleteTPR(PTPRpHead){charnum[11];PTPRpTemp,pT;if(pHead){printf(请输入要查询的处罚单号:);flushall();scanf(%s,num);pTemp=SearchNode_1(pHead,num);if(pTemp){if(pTemp==pHead){pHead=pHead-m_pNext;}elseif(!pTemp-m_pNext){pT=SearchNode_1_rf(pHead,num);pT-m_pNext=NULL;}Else{pT=SearchNode_1_rf(pHead,num);pT-m_pNext=pTemp-m_pNext;}free(pTemp);printf(删除成功!\n);}Else{printf(输入的号码不存在!\n);}}Else{printf(目前还没有该处罚单!);}returnpHead;}(6)统计此操作会首先提示操作者输入查询的起始时间和结束时间.判断.如是第一个时间大于第二个时间,相应会提示“输入错误”,若输入正确,会提示继续输入待查司机姓名.给i赋初值0.每循环查找到一个记录就给i的值加1.最后在显示屏上显示出i的值.如果查找此段时间内没有该司机罚单信息,则打印“目前还没有该处罚单。voidStatisticsTPR(PTPRpHead){Dated1,d2;charname[10];intindex=0,i=0;;if(pHead){printf(请输入起始时间:);flushall();scanf(%d%d%d,&d1.m_iYear,&d1.m_iMonth,&d1.m_iDay);printf(请输入结束时间:);flushall();scanf(%d%d%d,&d2.m_iYear,&d2.m_iMonth,&d2.m_iDay);if(ComDate(&d1,&d2)0){printf(输入错误!\n);}else{printf(输入司机姓名:);flushall();scanf(%s,name);while(pHead){pHead=SearchNode_2(pHead,name);if(pHead){if(ComDate(&pHead-m_CDate,&d1)0&&ComDate(&pHead-m_CDate,&d2)0){i++;index++;printf(%s\n,pHead-m_sRecnum);}pHead=pHead-m_pNext;}if(!(index%30)){index=0;CONTINUE;}}printf(一共有%d条记录\n,i);}}Else{printf(目前还没有该处罚单!);}}(7)退出模块:在这个模块里,输入命令0后,若程序发现文件里有处罚信息,会相应的保存该信息,然后退出程序,若没有信息,则会提示“不能打开文件!”,然后退出程序。voidExitTPRSystem(PTPRpHead){FILE*out;inti;printf(保存数据...\n);if((out=fopen(a.txt,at))==NULL){printf(不能打开文件!);CONTINUE;}Else{while(pHead){for(i=0;istrlen(pHead-m_sRecnum);i++){fputc(pHead-m_sRecnum[i],out);}fputc('\n',out);for(i=0;istrlen(pHead-m_sDriname);i++){fputc(pHead-m_sDriname[i],out);}fputc('\n',out);for(i=0;istrlen(pHead-m_sCarid);i++){fputc(pHead-m_sCarid[i],out);}fputc('\n',out);for(i=0;istrlen(pHead-m_sTPName);i++){fputc(pHead-m_sTPName[i],out);}fputc('\n',out);fputc(pHead-m_CDate.m_iYear,out);fputc('',out);fputc(pHead-m_CDate.m_iMonth,out);fputc('',out);fputc(pHead-m_CDate.m_iDay,out);fputc('\n',out);fputc('\n',out);pHead=pHead-m_pNext;}}fclose(out);DestoryTPR(pHead);printf(保存成功!\n);}三,上机操作:1,数据源(1)处罚单号01车牌号码2001司机姓名l