C语言设计实习报告工程学院土木工程052097班姓名:彭文博班号:052097学号:20091000692题目:交通处罚单管理系统指导老师:梁老师日期:20110826一,题目要求:【要求】:交通处罚单涉及到车辆,驾驶员和开单交警的信息,还有交通处罚单的号码,处罚时间等信息。【功能】:(1)要求可以输入,删除,浏览交通处罚单信息。(2)可以按车辆,驾驶员和开单交警查询。(3)统计某时间段某个驾驶员的交通处罚数目及交通处罚单号码。二,需求分析:交通处罚单信息用文件存储,提供文件的输输出操作;要求可以输入,输出,删除,浏览交通处罚单信息,因而要提供输入,删除和显示操作;要实现按车辆,驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。三,总体设计:整个管理系统被设计为信息输入模块,信息删除模块,信息浏览模块,信息查询模块,信息统计模块。四,详细设计及实现:1,处罚单管理系统界面函数此函数包括的功能是建立新的罚单,按司机姓名查询罚单并浏览相关信息,按交警姓名查询罚单并浏览相关信息,按罚单号查询罚单并浏览相关信息,删除罚单,数据统计和退出处罚单管理系统。voidMenu()printf(\n\t\t\t\t交通处罚单管理系统\n);printf(········································);printf(菜单:1-信息录入2-信息删除3-信息浏览4-信息查询5-信息统计6-退出系统\n);printf(········································);printf(请从输入数字选择相应的功能:);2,各功能模块设计(1)创建新的交通处罚单处罚单包含的内容有处罚单号,车牌号,司机姓名,交通处罚单管理系统输入查找删除统计退出交警姓名,和处罚日期,因此相应的函数也应包含这些内容,在这个函数所控制的操作会依次提示输入以上内容。特别的,罚单号不能有重复,若输入的罚单号有重复,操作界面会提示罚单好重复,请重新输入。voidinput(){FILE*fp;intnum;inti,j;if((fp=fopen(list.txt,r+))==NULL){if((fp=fopen(list.txt,w))==NULL){创建新的罚单罚单号车牌号司机姓名交警姓名处罚日期printf(文件打开或创建失败!\n);printf(\npressentertoreturnmenu\n);getchar();menu();}printf(\n请输入处罚单数量:);scanf(%d,&i);printf(\n\n);for(j=0;ji;j++){printf(输入第%d张处罚单的:\n,j+1);printf(\n车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如)\n);printf(\n注意:中间用空格隔开!\n);scanf(%s%s%s%s%s%s,&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);}for(j=0;ji;j++){fprintf(fp,\n%s\t%s\t%s\t%s\t%s\t%s,list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);}fclose(fp);printf(\n保存成功!);printf(\npressentertoreturnmenu\n);getchar();getchar();menu();}(2)按司机姓名查询罚单:先输入命令2,再输入待查找司机姓名.在这里函数会在记录在案的处罚单进行循环查找,如果有该司机的罚单记录,就会相应显示在屏幕上。如果没有该司机的处罚记录,就会打印:没有相关信息。voiddna_search(){intf=-1;intnum;intj;charname[20];FILE*fp;if((fp=fopen(list.txt,r))==NULL){printf(文件打不开!\n);printf(\npressentertoreturnmenu\n);getchar();menu();}for(j=0;!feof(fp);j++)//读取文件{fscanf(fp,%s%s%s%s%s%s,&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);}num=j;fclose(fp);printf(\n请输入驾驶员的姓名:);scanf(%s,name);printf(\n罚单的信息为:\n\n);printf(车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期\n);for(j=0;jnum;j++){if(strcmp(name,list[j].dname)==0){f=j;printf(\n%s\t%s\t%s\t%s\t%s\t%s,list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);}}if(f0)printf(\n没有找到该班号的记录!\n);printf(\npressentertoreturnsubmenu\n);getchar();getchar();search();}(3)按交警姓名查询罚单:先输入命令3,再输入待查找交警姓名.在这里函数会在记录在案的处罚单进行循环查找,如果有该交警所开的的罚单记录,就会相应显示在屏幕上。如果没有该交警开的处罚记录,就会打印:没有相关信息。其中voidpna_search(){intf=-1;intnum;intj;charname[20];FILE*fp;if((fp=fopen(list.txt,r))==NULL){printf(文件打不开!\n);printf(\npressentertoreturnmenu\n);getchar();menu();}for(j=0;!feof(fp);j++)//读取文件{fscanf(fp,%s%s%s%s%s%s,&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);}num=j;fclose(fp);printf(\n请输入开单交警的姓名:);scanf(%s,name);printf(\n罚单的信息为:\n\n);printf(车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期\n);for(j=0;jnum;j++){if(strcmp(name,list[j].pname)==0){f=j;printf(\n%s\t%s\t%s\t%s\t%s\t%s,list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);}}if(f0)printf(\n没有找到该班号的记录!\n);printf(\npressentertoreturnsubmenu\n);getchar();getchar();search();}(4)按车牌号查询罚单:先输入命令1,再输入待查找车牌号码.在这里函数也会对记录在案的处罚单进行循环查找,如果有该车牌号记录,就会相应显示在屏幕上。如果没有该车牌号的处罚信息,就会打印:没有相关信息。voidvno_search(){intf=-1;intnum;intj;charno[20];FILE*fp;if((fp=fopen(list.txt,r))==NULL){printf(文件打不开!\n);printf(\npressentertoreturnmenu\n);getchar();menu();}for(j=0;!feof(fp);j++)//读取文件{fscanf(fp,%s%s%s%s%s%s,&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);}num=j;fclose(fp);printf(\n请输入车牌号:);scanf(%s,no);printf(\n罚单的信息为:\n\n);printf(车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期\n);for(j=0;jnum;j++){if(strcmp(no,list[j].vno)==0){f=j;printf(\n%s\t%s\t%s\t%s\t%s\t%s,list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);}}if(f0)printf(\n没有找到该班号的记录!\n);printf(\npressentertoreturnsubmenu\n);getchar();getchar();search();}(5)删除罚单操作者先输入删除命令2,在按操作要求输入要删除的处罚单号码,系统浏览处罚单,找到相关信息后,在删除这张处罚信息,再把这个信息的尾地址结到下一个信息的头地址上从而达到删除此信息的作用.voiddele(){intj;intnum;intf=-1;FILE*fp1,*fp2;chars1[20];if((fp1=fopen(list.txt,r))==NULL){printf(cannotopenfile\n);printf(\npressentertoreturnmenu\n);getchar();getchar();menu();}for(j=0;!feof(fp1);j++)//读取文件{fscanf(fp1,%s%s%s%s%s%s,&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);}num=j;fclose(fp1);printf(请输入要删除的处罚单的编号\n);scanf(%s,s1);for(j=0;jnum;j++){if(strcmp(s1,list[j].no)==0){f=j;if(fnum-1){for(j=f;jnum-1;j++){strcpy(list[j].vno,list[j+1].vno);strcpy(list[j].dname,list[j+1].dname);strcpy(list[j].pname,list[j+1].pname);strcpy(list[j].pno,list[j+1].pno);strcpy(list[j].no,list[j+1].no);strcpy(list[j].date,list[j].date);}}if((fp2=fopen(list.txt,w))==NULL){printf(文件打不开!\n);printf(\npressentertoreturnmenu\n);getchar();menu();}for(j=0;jnum-1;j++)//保存文件{fprintf(fp2,\n%s\t%s\t%s\t%s\t%s\t%s,list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);}fclose(fp2);printf(\n删除成功!\n);printf(\npressentertoreturnmenu\n);getchar();getchar();menu();}}if(f0){printf(\n没有找到该学号的记录: