C语言设计实习报告勘查技术与工程(基础工程方向):勇峰班号: 054081学号:题目:交通处罚单管理系统指导教师:王老师时间: 2009-2010学年秋一,题目要求【要求】:交通处罚单涉及到车辆,驾驶员和开单交警的信息,还有交通处罚单的,处罚时间等信息。
【功能】:(1) 要求可以输入,删除,浏览交通处罚单信息。
(2)可以按车辆,驾驶员和开单交警查询。
(3)统计某时间段某个驾驶员的交通处罚数目及交通处罚单。
【提示】(1)需求分析:交通处罚单信息用文件存储,提供文件的输输出操作;要求可以输入,输出,删除,浏览交通处罚单信息,因而要提供输入,删除和显示操作;要实现按车辆,驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。
(2)总体设计:整个管理系统被设计为信息输入模块,信息删除模块,信息浏览模块,信息查询模块,信息统计模块。
1此函数包括的功能是建立新的罚单,按司机查询罚单并浏览相关信息,按交警查询罚单并浏览相关信息,按罚单号查询罚单并浏览相关信息,删除罚单,数据统计和退出处罚单管理系统。
void Menu(){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)创建新的交通处罚单处罚单包含的容有处罚单号,车牌号,司机,交警,和处罚日期,因此相应的函数也应包含这些容,在这个函数所控制的操作会依次提示输入以上容。
特别的,罚单号不能有重复,若输入的罚单号有重复,操作界面会提示罚单好重复,请重新输入。
PTPR CreatTPR( PTPR pHead ){ PTP R pTemp = InitNode();Int iYear, iMon, iDay;printf( "请输入相关信息:\n" );printf( "处罚单号: " );flushall();scanf( "%s", pTemp->m_sRecnum );if( SearchNode_1( pHead, pTemp->m_sRecnum ) ) {printf( "处罚单有重复,请重新输入" );free( pTemp );return pHead;}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 );return InsertNode( pHead, pTemp );}(2)按司机查询罚单:先输入命令2,再输入待查找司机.在这里函数会在记录在案的处罚单进行循环查找,如果有该司机的罚单记录,就会相应显示在屏幕上。
如果没有该司机的处罚记录,就会打印:没有相关信息。
其中If(!(i/4)){i=0;continue;}这一句的作用是因为有时若因为某哪位司机的处罚记录过多以至于屏幕无法在一夜里全部显示时,多的就打印到下页.void SearchByDriName( PTPR pHead ){Char name[10];Int i = 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)void SearchByPocName( PTPR pHead ){Char name[10];Int i = 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)void SearchByCarId( PTPR pHead ){char name[10];Int i = 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,在按操作要求输入要删除的处罚单,系统浏览处罚单,找到相关信息后,在删除这处罚信息,再把这个信息的尾地址结到下一个信息的头地址上从而达到删除此信息的作用.PTPR DeleteTPR( PTPR pHead ){ char num[11];PTPR pTemp, pT;if( pHead ){ printf( "请输入要查询的处罚单号: " );flushall();scanf( "%s", num );pTemp = SearchNode_1( pHead, num );if( pTemp ){ if( pTemp == pHead ) { pHead = pHead->m_pNext;} else if( !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( "目前还没有该处罚单!" );}return pHead;}(6)统计此操作会首先提示操作者输入查询的起始时间和结束时间.判断.如是第一个时间大于第二个时间,相应会提示“输入错误”,若输入正确,会提示继续输入待查司机.给i赋初值0.每循环查找到一个记录就给i的值加1.最后在显示屏上显示出i的值.如果查找此段时间没有该司机罚单信息,则打印“目前还没有该处罚单。
void StatisticsTPR( PTPR pHead ){ Date d1, d2;char name[10];int index = 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后,若程序发现文件里有处罚信息,会相应的保存该信息,然后退出程序,若没有信息,则会提示“不能打开文件!”,然后退出程序。