C语言课程设计交通处罚单管理系统.doc
C语言课程设计交通处罚单管理一、 题目要求交通处罚单涉及到车辆、驾驶员和开单交警的信息,还有交通处罚单号码、处罚时间等信息。功能:() 要求可以输入、删除、浏览交通处罚单信息。() 可以按车辆、驾驶员和开单交警查询。() 统计某时间段某个驾驶员的交通处罚单数目及交通处罚单号码。二、 需求分析交通处罚单信息用文件存储,提供文件的输入输出操作;要求可以输入、删除、浏览交通处罚单信息,因而要提供信息的输入、删除和显示操作;要实现按车辆、驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。三、 总体设计交通处罚单管理系统信息输入信息删除信息浏览信息查询信息统计退出整个管理系统被设计为信息输入模块、信息删除模块、信息浏览模块、信息查询模块和信息统计模块等。四、 详细设计1、 主函数主函数流程图显示一系列功能选项输入n,判断n是否是16根据n的值调用各功能模块函数主函数程序menu() /*主界面*/int n,w; /*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/doprintf("ttt欢迎来到交通处罚单管理系统!nn");printf("tt*MENU*nn");printf("tttt1.信息输入n");printf("tttt2.信息删除n");printf("tttt3.信息浏览n");printf("tttt4.信息查询n");printf("tttt5.信息统计n");printf("tttt6.退出n");puts("nntt*n"); printf("tt请输入您的操作(1-6): bb");scanf("%d",&n);if(n<1|n>6) /*对选择的数字作判断*/w=1;getchar();else w=0;while(w=1); /*选择功能*/switch(n)case 1:shuru();break;case 2:shanchu();break;case 3:liulan();break;case 4:chaxun();break;case 5:tongji();break;case 6:exit(0);return(n);void main() /*主函数*/menu();2、 各功能模块设计(1)、输入模块数据结构采用结构体的形式,把处罚单的处罚单号、车牌号码、驾驶员姓名、开单警察ID、处罚时间作为结构体成员,用结构体数组的形式存放若干条处罚单信息。struct fandanint num; /*处罚单号码*/int chepai; /*车牌号码*/char name8; /*驾驶员名字*/int id; /*开单警察的信息ID*/char time11; /*处罚时间为年月日排列*/danN; /*dan500中每个数组元素对应一个处罚单信息*/注意danN中的N为处罚单条数,本程序采用宏定义#define N 500。输入模块流程图输入用户要输入处罚单纪录的条数j能否打开文件退出i从0到j-1依次输入处罚单信息,并保存到文件中j开始选择浏览还是返回主菜单输入模块程序void shuru() /*输入模块*/int i,j;FILE *fp;if(fp=fopen("data.txt","w")=NULL)printf("无法打开文件!n");exit(0);printf("n你要输入多少条处罚单信息:");scanf("%d",&j); for(i=0;i<j;i+) printf("n请依次输入罚单信息:n"); printf("n罚单号 车牌号 驾驶员姓名 警察ID 处罚时间n"); scanf("%3d %5d %8s %5d %11s",&dani.num,&dani.chepai,&dani.name,&dani.id,&dani.time);fprintf(fp,"n%3d %5d %8s %5d %11s",dani.num,dani.chepai,dani.name,dani.id,dani.time); /*输入罚单信息*/ printf("输入信息成功!n"); fclose(fp); printf_back();(2)、删除模块删除模块流程图打开文件统计出文件中的处罚单总数m输入要删除的处罚单的处罚单号jj=dani.num把此i的值赋给作为比较的变量n关闭文件后再打开文件依次比较i!=n把不要求删除的罚单信息在文件中输入选择浏览还是返回主菜单删除模块程序void shanchu() /*删除模块*/int i,j,m,n;FILE *fp;printf("请输入要删除的处罚单号:"); scanf("%d",&j);fp=fopen("data.txt","r");for(i=0;!feof(fp);i+) fscanf(fp,"%3d %5d %8s %5d %11s",&dani.num,&dani.chepai,&dani.name,&dani.id,&dani.time);m=i; /*统计出文件中罚单总数*/for(i=0;i<m;i+)if(j=dani.num)n=i;fclose(fp);fp=fopen("data.txt","w");for(i=0;i<m;i+)if(i!=n) fprintf(fp,"n%3d %5d %8s %5d %11s",dani.num,dani.chepai,dani.name,dani.id,dani.time); /*把不要求删除的罚单信息在文件中输入*/ fclose(fp); printf_back();(3)、浏览模块需求分析 该模块的功能是显示文件中所有的处罚但记录信息。浏览模块流程图 打开文件逐条显示文件中的处罚单信息关闭文件选择浏览还是返回主菜单浏览模块程序 void liulan() /*浏览模块*/int i;FILE *fp;fp=fopen("data.txt","r");for(i=0;!feof(fp);i+) fscanf(fp,"%3d %5d %8s %5d %11s",&dani.num,&dani.chepai,&dani.name,&dani.id,&dani.time); printf("-n"); printf("处罚单号:%dn",dani.num); printf("车牌号码:%dn",dani.chepai); printf("驾驶员姓名:%sn",dani.name); printf("开单警察ID:%dn",dani.id); printf("处罚时间:%sn",dani.time); printf("-n"); /*逐条输出文件信息*/fclose(fp);printf_back();(4)、查询模块需求分析该模块的功能是可以实现按车辆、驾驶员和开单交警查询。查询模块流程图 打开文件输入用户要查询的信息x让用户选择输入查询的车牌号j输入查询的驾驶员姓名m输入查询的开单警察j输入错误dani.chepai=jdani.id=jstrcmp(dani.name,m)=0显示“找不到此罚单信息关闭文件选择浏览还是返回主菜单显示“找不到此罚单信息显示“找不到此罚单信息显示“找不到此罚单信息 查询模块程序void chaxun() /*查询模块*/int i,j,x,flag=0;FILE *fp;char m8; printf("请输入您想查询的信息: n");printf("1_按车牌号查询n");printf("2_按驾驶员姓名查询n");printf("3_按开单警察ID查询n");scanf("%d",&x); if(x=1)printf("请输入您要查询的车牌号: n");scanf("%d",&j);fp=fopen("data.txt","r");for(i=0;!feof(fp);i+) fscanf(fp,"%3d %5d %8s %5d %11s",&dani.num,&dani.chepai,&dani.name,&dani.id,&dani.time);if(dani.chepai=j)printf("处罚单号:%dn",dani.num);printf("车牌号码:%dn",dani.chepai);printf("驾驶员姓名:");puts(dani.name);printf("开单警察ID:%dn",dani.id);printf("处罚时间:");puts(dani.time);printf("-n");flag=1;break;if(flag=0)printf("找不到此罚单信息!n"); fclose(fp);printf_back();else if(x=2)printf("请输入您要查询的驾驶员姓名: ");scanf("%s",m);fp=fopen("data.txt","r");for(i=0;!feof(fp);i+) fscanf(fp,"%3d %5d %8s %5d %11s",&dani.num,&dani.chepai,&dani.name,&dani.id,&dani.time);if(strcmp(dani.name,m)=0)printf("处罚单号:%dn",dani.num);printf("车牌号码:%dn",dani.chepai);printf("驾驶员姓名:");puts(dani.name);printf("开单警察ID:%dn",dani.id);printf("处罚时间:");puts(dani.time);printf("-n");flag=1;break;if(flag=0) printf("找不到此罚单信息!n"); fclose(fp);printf_back();else if(x=3)printf("请输入您要查询的开单警察ID: ");scanf("%d",&j);fp=fopen("data.txt","r");for(i=0;!feof(fp);i+) fscanf(fp,"%3d %5d %8s %5d %11s",&dani.num,&dani.chepai,&dani.name,&dani.id,&dani.time);if(dani.id=j)printf("处罚单号:%dn",dani.num);printf("车牌号码:%dn",dani.chepai);printf("驾驶员姓名:");puts(dani.name);printf("开单警察ID:%dn",dani.id);printf("处罚时间:");puts(dani.time);printf("-n");flag=1;break; if(flag=0)printf("找不到此处罚单信息!n"); fclose(fp);printf_back();elseprintf("输入错误!n");printf_back();(5)、统计模块需求分析该模块的功能是可以实现统计某时间段某个驾驶员的交通处罚单数目及交通处罚单号码。统计模块流程图输入需要统计的时间段和驾驶员姓名打开文件依次查找是否有符合统计要求的处罚单信息输出处罚单号输出“找不到统计罚单信息”统计找到的处罚单条数关闭文件选择浏览还是返回主菜单3、公共函数 一个任务结束时是选择浏览还是返回的函数:一个任务结束时是选择浏览还是返回的函数的流程图开始选择What do you want to do?调用浏览函数调用主界面函数一个任务结束时是选择浏览还是返回的函数的程序void printf_back() /*一个任务结束时是选择浏览还是返回主界面*/ void liulan();int w;printf("nWhat do you want to do?nnt(1).浏览t(2).返回主界面 bb");scanf("%d",&w);if(w=1)liulan();else menu();五、 上机操作1、 数据源逐条输入处罚单信息中的处罚单号、车牌号码、驾驶员姓名、开单警察ID和处罚时间。2、 编译、连接和运行3、 结果() 主菜单函数() 输入模块在主界面出现后输入1回车看到下图:输入要输入的记录数然后逐条增加,如下图:() 浏览模块() 删除模块在主界面出现后输入2回车看到下图:输入要删除的处罚单号然后如下图:删除后文件中保留信息的浏览图如下:() 查询模块在主界面出现后输入4回车看到下图:输入要查询的信息后如下图(如输入1):若没找到需要查找的信息时如下图:() 统计模块在主界面出现后输入5回车看到下图:输入需要统计的时间段与驾驶员姓名,如下图:若查找不到需要统计的信息,如下图: