C语言程序设计之交通处罚单管理系统报告内含代码
- 格式:doc
- 大小:786.50 KB
- 文档页数:28
C语言程序设计姓名:张强强学号:20121003695班序号:011121前言:C语言是近年来国内得到迅速推广使用的一种计算机语言。
C语言程序设计课程是计算机专业和信息管理专业的核心专业基础课,无论是计算机专业还是非计算器专业的学生,学习好C语言是非常重要的。
一.交通处罚单管理要求:交通处罚单涉及到车辆,驾驶员和开单交警的信息,还有交通处罚单的号码,处罚时间等信息。
功能:(1) 要求可以输入,删除,浏览交通处罚单信息。
(2) 可以按车辆,驾驶员和开单交警进行查询。
(3) 统计某时间段某个驾驶员的交通处罚数目及交通处罚单号码。
(一)需求分析交通处罚单信息用文件存储,提供文件的输入输出操作;要求可以输入,输出,删除,浏览交通处罚单信息,因而要提供输入,删除和显示操作;要实现按车辆,驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。
(二)总体设计整个管理系统被设计为信息输入模块,信息删除模块,信息浏览模块,信息查询模块和信息统计模块等。
如下图:(三)详细设计1.主函数实现的是显示菜单以及函数调用,其中各功能模块用菜单方式选择。
程序:int main(){int n; /**变量n保存选择菜单数字**/printf("\n\n")printf ( " ****************菜单*****************\n");printf ( " * *\n");printf ( " * 1.输入 2.删除 *\n");printf ( " * *\n");printf ( " * 3.浏览 4.查询 *\n");printf ( " * *\n");Printf ( " * 5.统计 6.退出*\n");printf ( "* *\n");printf("****************************************\n");printf("请选择功能菜单: [ ]\b\b");scanf("%d",&n);if (n<1||n>7) n=7;switch (n) /***选择功能***/ {case 1:shuru();liulan();main();break; /***输入模块***/ case 2:shanchu();liulan();main();break; /***删除模块***/ case 3:liulan();main();break; /*** 浏览模块***/ case 4:chaxun();main();break; /*** 查询模块***/ case 5:tongji();main();break; /*** 统计模块***/ case 6:exit(0); break; /***退出***/case 7: printf("error\n");}}2.信息储存函数。
/*交通罚单管理*/#include <stdio.h> /*库函数调用*/#include <stdlib.h>#include <ctype.h>#include <string.h>typedef struct /*定义一个结构体类型*/{char driver[10]; /*司机姓名*/int car; /*驾驶的车牌号*/char police[10]; /*开罚单的交警姓名*/int num; /*罚单编号*/int year; /*开罚单的年*/int month; /*开罚单的月*/int date; /*开罚单的日*/}Traffic;int menu_select() /*主菜单*/{char c;do {system("cls"); /*清屏*/printf("\t\t\t交通处罚单管理系统\n");printf("1.Input records 输入数据请按1\n");printf("2.Display all records 输出记录请按2\n");printf("3.Delete a recode 删除记录请按3\n");printf("4.Sort 排序请按4\n");printf("5.Insert a record 插入一条记录请按5\n");printf("6.Query 查询记录请按6\n");printf("7.Add records from a text file! 从文件中添加数据请按7\n");printf("8.Write to a text file 输出文件记录请按8\n");printf("0.Quit the system 退出系统请按0\n");printf("Give your choice (0-8):");c=getchar();}while (c<'0' || c>'8');return (c-'0');}int Input(Traffic traList[],int n)/*输入数据Fun1 第一个参数是定义的结构体数组,第二个参数为记录数*/{char c;do{system("cls");printf("请依次输入司机姓名·驾驶车牌号·交警姓名·罚单编号·开罚单的年·月·日:\n"); scanf("%s%d%s%d%d%d%d\n",traList[n].driver,&traList[n].car,traList[n].police,&traList[n].num,&traList[n].year,&traList[n].month,&traList[n].date);n++;printf("是否继续输入('Y'或'N')?\n");c=getchar();}while( c != 'N');return n; /*返回输入记录总数*/}void Display(Traffic trafList[],int n)/*输出数据Fun2 第一个参数是定义的结构体数组,第二个参数为记录数*/{int i;printf("司机\t车牌号\t交警姓名\t罚单编号\t年份\t月份\t日期\n");for(i=0;i<n;i++){if(i%10==0&&i>0){system("pause");printf("\n");}printf("%s\t%d\t%s\t\t%d\t\t%d\t%d\t%d\n",trafList[i].driver,trafList[i].car,trafList[i].police,trafList[i].num,trafList[i].year,trafList[i].month,trafList[i].date);}printf("\n");}int Delete(Traffic trafList[],int n, char *name) /*第一个参数是定义的结构体数组,第二个参数为记录数,第三个参数为要删除的司机姓名*/{int i,j;Traffic t; /*定义结构体变量*/for(i=0;i<n;i++)if(!strcmp(trafList[i].driver,name)){t=trafList[i];for(j=i;j<n-1;j++)trafList[j]=trafList[j+1];trafList[n-1]=t;n--;i++;break;/*只删除一条,如果要全部删除,要删去此句“break;”*/}return n; /*返回删除后记录总数*/}int Delete_a_record(Traffic trafList[],int n)/*删除数据Fun3 第一个参数是定义的结构体数组,第二个参数为记录数*/{char c,name[10];int i=n;printf("请输入您要删除记录的司机姓名:");scanf("%s",name);printf("您确定要删除“%s”的记录吗?(“Y”or“N”)\n",name);c=getchar();c=getchar();if(c=='Y') n=Delete(trafList,n,name);if(i>n)printf("成功删除%s 的数据信息!\n",name);else printf("抱歉,未找到%s 的数据信息!\n",name);return n; /*返回删除后记录总数*/}void Sort_by_Name(Traffic trafList[],int n)/*对数据排序Fun4 第一个参数是定义的结构体数组,第二个参数为记录数*/{int i,j,p;Traffic t;for(i=0;i<n-1;i++){p=i;for(j=i+1;j<n;j++)if(strcmp(trafList[j].driver,trafList[p].driver)<0)p=j;if(p!=i){t=trafList[i];trafList[i]=trafList[p];trafList[p]=t;}}}int Insert(Traffic trafList[], int n, Traffic *s){int i,j;for(i=0;i<n;i++)if(strcmp(trafList[i].driver,(*s).driver)>0) break;for(j=n-1;j>i-1;j--)trafList[j+1]=trafList[j];trafList[i]=*s;n++;return n; /*返回插入记录后记录总数*/}int Insert_a_record(Traffic trafList[],int n )/*插入数据Fun5 第一个参数是定义的结构体数组,第二个参数为记录数*/{Traffic s,*p;p=&s;printf("请依次输入要插入的司机姓名·驾驶车牌号·交警姓名·罚单编号·年·月·日:\n");scanf("%s%d%s%d%d%d%d\n",s.driver,&s.car,s.police,&s.num,&s.year,&s.month,&s.date);n=Insert(trafList,n,p);printf("插入成功!\n");return n; /*返回插入数据后记录总数*/}int Query(Traffic trafList[],int n, char *name){int i,j;for(i=0;i<n;i++){if(!strcmp(trafList[i].driver,name)){j=i;break;}else j=-1;}return j; /*返回查找到的司机对应的记录数*/}void Query_a_record(Traffic trafList[],int n)/*查找数据Fun6 第一个参数是定义的结构体数组,第二个参数为记录数*/{char name[20];int i;printf("请输入您要查询的司机姓名:");scanf("%s",name);i=Query(trafList,n,name);if(i==-1)printf("\t抱歉,未找到“%s”的数据信息!\n",name);else{printf("\t“%s”的数据查找成功!\n",name);printf("司机\t车牌号\t交警姓名\t罚单编号\t年份\t月份\t日期\n");printf("%s\t%d\t%s\t\t%d\t\t%d\t%d\t%d\n",trafList[i].driver,trafList[i].car,trafList[i].police,trafList[i].num,trafList[i].year,trafList[i].month,trafList[i].date);}}int AddfromText(Traffic trafList[],int n,char *filename) /*从文件中整批输入数据Fun7 第一个参数是定义的结构体数组,第二个参数为记录数,第三个参数为函数名称*/{FILE *fp;int i,t;char c;Traffic s[100];printf("请输入文件名称:");c=getchar();gets(filename);if((fp=fopen(filename,"r"))==NULL){printf("不能打开文件%s !\n",filename);exit(1);}fscanf(fp,"%d",&t);for(i=0;i<t;i++){fscanf(fp,"%s%d%s%d%d%d%d",s[i].driver,&s[i].car,s[i].police,&s[i].num,&s[i].year,&s[i].month,&s[i].date);n=Insert(trafList,n,&s[i]);fprintf(fp,"\n");}fclose(fp);printf("添加数据成功!\n");return n; /*返回从文件中读入数据后记录总数*/}void WritetoText(Traffic trafList[],int n, char *filename)/*将记录写入文件Fun8 第一个参数是定义的结构体数组,第二个参数为记录数,第三个参数为文件名称*/{FILE *fp;int i;char c;printf("请输入文件名称:");c=getchar();gets(filename);if((fp=fopen(filename,"w"))==NULL){printf("不能打开文件%s !\n",filename);exit(2);}fprintf(fp,"%d\n",n);for(i=0;i<n;i++){fprintf(fp,"%s\t\t%d\t%s\t\t%d\t\t%d\t%d\t%d\n",trafList[i].driver,trafList[i].car, trafList[i].police,trafList[i].num,trafList[i].year,trafList[i].month,trafList[i].date);}fclose(fp);printf("保存数据成功!\n");}void main(){int Input(Traffic trafList[],int n); /*函数声明*/void Display(Traffic trafList[],int n);int Delete(Traffic trafList[],int n, char *name);int Detlet_a_record(Traffic trafList[],int n);void Sort_by_Name(Traffic trafList[],int n);int Insert(Traffic trafList[], int n, Traffic *s);int Insert_a_record(Traffic trafList[],int n );int Query(Traffic trafList[],int, char *name);void Query_a_record(Traffic trafList[],int n);int AddfromText(Traffic trafList[],int n,char *filename);void WritetoText(Traffic trafList[],int n, char *filename);Traffic trafList[40];int n=0; /*统计记录数目*/char filename[100];for (;;){switch(menu_select()){case 1: n=Input(trafList,n); system("pause"); break;case 2: Display(trafList,n); system("pause"); break;case 3: n=Delete_a_record(trafList,n); system("pause"); break; case 4: Sort_by_Name(trafList,n); system("pause"); break;case 5: n=Insert_a_record(trafList,n); system("pause"); break;case 6: Query_a_record(trafList,n); system("pause"); break;case 7: n=AddfromText(trafList,n,filename); system("pause"); break; case 8: WritetoText(trafList,n,filename);system("pause"); break; case 0: printf("退出系统!\n"); exit(0);}}}。
车辆违章管理系统刘双星通信工程学院系统功能模以及结构图:数据结构设计及用法说明:typedef struct Pe{char vno[8]; /*车牌号*/char name[15]; /*车主姓名*/int time1; /*违章停车次数*/int time2; /*闯红灯次数*/int time3; /*超速次数*/}PECCANCY;根据题目要求,该编程对象必须包括车牌,车主姓名,违章停车次数,闯红灯次数以及超速次数,因此定义结构题时要包括上边说明的要素,另外改程序用定义数组方法来定义对象。
程序结构(画流程图)实验结果(包括输入数据和输出结果)菜单:输入1时:输入数据:输入1返回菜单,再输入2:输入1234567:输入1返回菜单,再输入3退出。
实验体会运用清屏代码可以使界面更加清楚,符合我们平时运用的软件,编辑菜单时要使菜单循环起来使用,这样更加人性化。
编辑代码时,中文输入法的分号和括号在c++中不可识别,当一个函数里边有很多括号时,要注意检查括号是否对应。
附录:程序清单#include <stdio.h>#include<string.h>#include<stdlib.h>void main(){typedef struct Pe{char vno[8]; /*车牌号*/char name[15]; /*车主姓名*/int time1; /*违章停车次数*/int time2; /*闯红灯次数*/int time3; /*超速次数*/}PECCANCY; /*定义对象*/PECCANCY v[1000];int i;int k;int c;do{system("cls"); /*每次回到菜单时清屏*/printf("\n**********************\n"); /**菜单*/printf("\n**********************\n");printf("\n车辆及违章信息的录入请按1..........");printf("\n车牌号查询每台车辆的违章情况2..........");printf("\n 退出请按3..........");scanf("%d",&c);switch(c){case 1: /*车辆及违章信息的录入*/{system("cls");printf("车辆及违章信息的录入");for(i=0;i<1000;i++){printf("请输入车牌号:");scanf("%s",v[i].vno);printf("请输入车主姓名:");scanf("%s",v[i].name);printf("请输入违章停车次数:");scanf("%d",&v[i].time1);printf("请输入闯红灯次数:");scanf("%d",&v[i].time2);printf("请输入超速次数:");scanf("%d",&v[i].time3);printf("录入结束请输入1: ");scanf("%d",&k);if(k==1)break;}break;}case 2: /*基于车牌号查询每台车辆的违章情况*/ {system("cls");printf("车牌号查询每台车辆的违章情况");int l;for(l=0;l<1000;l++){char m[8];printf("请输入查询的车牌号:");scanf("%s",m);for(i=0;i<1000;i++){if(strcmp(m,v[i].vno)==0)break;}if(i==1000){printf("没找到要查询的车牌号");break;}printf("\n \n车牌号:%s \n",v[i].vno);printf("车主姓名:%s \n",v[i].name);printf("违章停车次数:%d \n",v[i].time1);printf("违章闯红灯次数:%d \n",v[i].time2);printf("违章超速次数:%d \n",v[i].time3);int n; /*基于车牌号统计每台车辆的罚款总金额*/ n=v[i].time1*100+v[i].time2*200+v[i].time3*500;printf("车牌号为%s罚款%d",m,n);printf("\n查询结束请输入1:..........");int h;scanf("%d",&h);if(h==1)break;}break;}case 3:exit(0);}}while(c!=3);}。
交通处罚单管理系统中国地质大学(武汉)地球科学学院 014072班2010-11—26用C语言编写一个简单的模拟交通处罚单管理系统[要求]交通处罚单涉及到车辆、驾驶员和开单交警的信息,还有交通处罚单号码、处罚时间等信息;[功能](1)要求可以输入、删除、浏览交通处罚单信息;(2)可以按车辆、驾驶员和开单交警查询;(3)统计某段时间某个驾驶员的交通处罚单数目及交通处罚单号;源代码:#include<stdio。
h〉#include<string。
h〉#include〈stdlib。
h>#define N 100struct Plist //处罚单{char vno[20];//车牌号char dname[20];//驾驶员姓名char pname[20]; //交警姓名char pno[20];//交警编号char no[20];//处罚单编号char date[20];//处罚日期}list[N]; //处罚单数组void input();//输入模块void dele();//删除模块void browse();//浏览模块void search(); //查询模块void count(); //统计模块void menu();//主菜单void vno_search(); //按车牌号查询void dna_search();//按驾驶员姓名查询void pna_search(); //按开单交警姓名查询main(){menu();getchar();}void menu(){int n;int r;do{system(”cls”);printf("\n\t\t\t\t交通处罚单管理系统\n”);printf("········································");printf(" 菜单: 1-信息录入2—信息删除3—信息浏览4—信息查询5—信息统计6—退出系统\n”);printf(”········································”);printf("请从输入数字选择相应的功能:");scanf("%d",&n);if(n〈1||n>6){r=1;getchar();}else r=0;}while(r==1);switch(n){case 1:input();break;case 2:dele();break;case 3:browse();break;case 4:search();break;case 5:count();break;case 6:exit(0);}}void input(){FILE*fp;int num;int i,j;if((fp=fopen("list。
交通处罚单管理系统(C语言课程设计) 交通处罚单管理系统中国地质大学(武汉) 地球科学学院 014072班2010-11-26用C语言编写一个简单的模拟交通处罚单管理系统 [要求]交通处罚单涉及到车辆、驾驶员和开单交警的信息,还有交通处罚单号码、处罚时间等信息;[功能](1) 要求可以输入、删除、浏览交通处罚单信息; (2) 可以按车辆、驾驶员和开单交警查询; (3) 统计某段时间某个驾驶员的交通处罚单数目及交通处罚单号;源代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#define N 100struct Plist //处罚单{char vno[20]; //车牌号char dname[20]; //驾驶员姓名char pname[20]; //交警姓名char pno[20]; //交警编号char no[20]; //处罚单编号char date[20]; //处罚日期} list[N]; //处罚单数组void input(); //输入模块void dele(); //删除模块void browse(); //浏览模块void search(); //查询模块void count(); //统计模块void menu(); //主菜单void vno_search(); //按车牌号查询void dna_search(); //按驾驶员姓名查询void pna_search(); //按开单交警姓名查询main(){menu();getchar();}void menu(){int n;int r;do{system("cls");printf("\n\t\t\t\t交通处罚单管理系统\n");printf("");printf(" 菜单: 1-信息录入 2-信息删除 3-信息浏览 4-信息查询 5-信息统计 6-退出系统\n");printf("");printf("请从输入数字选择相应的功能:");scanf("%d",&n);if(n<1||n>6){r=1;getchar();}else r=0;}while(r==1);switch(n){case 1:input();break;case 2:dele();break;case 3:browse();break;case 4:search();break;case 5:count();break;case 6:exit(0);}}void input(){FILE*fp;int num;int i,j;if((fp=fopen("list.txt","r+"))==NULL){if((fp=fopen("list.txt","w"))==NULL){printf("文件打开或创建失败!\n");printf("\npress enter to return menu\n");getchar();menu();}printf("\n请输入处罚单数量:");scanf("%d",&i);printf("\n\n");for(j=0;j<i;j++){printf("输入第%d张处罚单的:\n",j+1);printf("\n 车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20101112)\n");printf("\n注意:中间用空格隔开!\n");scanf("%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&lis t[j].pno,&list[j].no,&list[j].date);}for(j=0;j<i;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("\npress enter to return menu\n");getchar();getchar();menu();}printf("\n请输入处罚单数量:");scanf("%d",&i);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+i;if(num>N){printf("\n结构体数组数的N太小,请先修改N的值\n");printf("\npress enter to return menu\n");getchar();getchar();menu();}printf("\n");for(j=0;j<i;j++){printf("输入第%d张处罚单的:\n",j+1);printf("\n车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20101112)\n");printf("\n注意:中间用空格隔开!\n");scanf("%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&lis t[j].pno,&list[j].no,&list[j].date);}for(j=0;j<i;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("\npress enter to return menu\n"); getchar();getchar();menu();}void dele(){int j;int num;int f=-1;FILE*fp1,*fp2;char s1[20];if((fp1=fopen("list.txt","r"))==NULL) {printf("can not open file\n");printf("\npress enter to return menu\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;j<num;j++){if(strcmp(s1,list[j].no)==0){f=j;if(f<num-1){for(j=f;j<num-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("\npress enter to return menu\n");getchar();menu();}for(j=0;j<num-1;j++) //保存文件{fprintf(fp2,"\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,lis t[j].pname,list[j].pno,list[j].no,list[j].date);}fclose(fp2);printf("\n删除成功~\n");printf("\npress enter to return menu\n");getchar();getchar();menu();}}if(f<0){printf("\n没有找到该学号的记录:\n"); printf("\npress enter to return menu\n"); getchar();getchar();menu();}}void browse(){int j;int num;FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("can not open file\n");printf("\npress enter to return menu\n"); getchar();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);}fclose(fp);num=j;printf("\n已添加%d条记录\n\n",num);printf("车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期\n");for(j=0;j<num;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);}printf("\npress enter to return menu\n");getchar();getchar();menu();}void search(){int n;int r;do{system("cls");printf("\n请选择查询类型:\n\t1-按车牌号 2-按驾驶员姓名3:按开单交警姓名 4-返回主菜单\n");printf("\n请输入数字选择:");scanf("%d",&n);if(n<1||n>4){r=1;getchar();}else r=0;}while(r==1);switch(n){case 1:vno_search();break;case 2:dna_search();break;case 3:pna_search();break;case 4:menu();}}void vno_search() {int f=-1;int num;int j;char no[20];FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("文件打不开~\n");printf("\npress enter to return menu\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;j<num;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(f<0)printf("\n没有找到该班号的记录!\n");printf("\npress enter to return sub menu\n");getchar();getchar();search();}void dna_search(){int f=-1;int num;int j;char name[20];FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("文件打不开~\n");printf("\npress enter to return menu\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;j<num;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(f<0)printf("\n没有找到该班号的记录!\n");printf("\npress enter to return sub menu\n");getchar();getchar();search();}void pna_search(){int f=-1;int num;int j;char name[20];FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("文件打不开~\n");printf("\npress enter to return menu\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;j<num;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(f<0)printf("\n没有找到该班号的记录!\n");printf("\npress enter to return sub menu\n"); getchar();getchar();search();}void count(){int f=-1;int num; //所有罚单单数int j;int total=0; //某驾驶员的罚单数char name[20];char time1[20];char time2[20];FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("文件打不开~\n");printf("\npress enter to return menu\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请根据提示输入驾驶员的姓名和一个时间段,统计某个驾驶员在某段时间内的处罚单数目和罚单号\n");printf("\n\n请输入驾驶员的姓名:");scanf("%s",name);printf("\n请输入一个较早的时间:");scanf("%s",time1);printf("\n请输入一个最近的时间:");scanf("%s",time2);for(j=0;j<num;j++){if((strcmp(list[j].date,time1)>=0)&&(strcmp(list[j].date,time2)<=0)) {f=j;total++;printf("\n罚单号:%s\n",list[j].no);}}if(f<0)printf("\n没有找到记录!\n");printf("\n罚单总数为:%d\n",total);printf("\npress enter to return menu\n"); getchar();getchar();menu();}。
交通处罚单管理系统_C语言实习报告交通处罚单管理系统_C语言实习报告一、实习背景我在大学期间学习了计算机科学与技术专业,其中涉及的编程语言有Java、C以及Python等。
但是在我个人的评估中,C语言是最难的,因为它需要更多的细节处理和代码实现。
因此,我决定进入XX交通管理局实习,学习如何使用C语言开发交通处罚单管理系统。
此次实习有助于我提高我的编程技能,尤其是在C语言方面。
二、项目背景介绍在过去的几年中,交通事故在全国范围内逐年增加。
因此,各个城市交通管理部门制定了不同的管理措施来降低这些事故。
其中,处罚单作为一项重要的处罚手段,已经被广泛应用。
然而,由于管理方式的复杂性,很难人工维护处罚单,因此需要一种自动化的方式来管理。
基于此,我们设计了一个交通处罚单管理系统。
该系统是一个命令行工具,输入命令后可以执行以下操作:1. 生成处罚单:输入驾驶员和车辆的信息,系统将生成一张处罚单并记录在系统中;2. 查找处罚单:输入违规者的信息,系统将返回该违规者的所有处罚单信息;3. 修改处罚单:输入需要更改的处罚单信息,系统将修改处罚单;4. 删除处罚单:输入需要删除的处罚单信息,系统将删除处罚单;5. 统计系统中处罚单数量和处罚总金额;6. 退出系统。
三、技术实现1.使用C语言开发命令行界面,采用鼠标和键盘输入操作;2.使用C语言结构体,定义并维护每张处罚单的信息;3.使用C语言文件操作,记录和读取已生成的处罚单;4.使用C语言指针对各个处罚单进行操作;5.使用C语言函数实现操作的不同步骤;6.使用C语言条件判断和循环语句,实现不同操作的逻辑处理。
四、实习收获1.学习和加强了C语言的编程技能;2.增加了应对复杂问题的能力;3.了解了交通管理部门的一些相关规定;4.进一步了解了实际应用的开发流程和方法;5.知道了如何建立有效的交通管理系统。
五、实习总结通过这次C语言实习,我深刻认识到了良好的交通管理对于国家的重要性。
交通处罚单管理程序2013级自动化学院031340101 蔡紫薇一、程序主要功能(1)菜单:菜单用来选择程序的执行和退出。
菜单程序中包含了函数system()的使用方法:system(“cls”) 功能:清屏system(”pause”)功能:暂停程序执行,按任意键后继续执行【使用该函数必须包含头文件”stdlib.h”】(2)程序一:记录输入程序Input Record功能:从键盘一次输入交通处罚单的信息(一条记录),依次存放到结构体数组中。
插入一条记录后,显示提示信息:是否输入下一条记录,如确认则继续输入,否则,退出输入功能并返回记录数n。
程序二:记录显示程序Display All Records按顺序显示所有记录,每屏显示10条记录。
每显示10条记录,按<Enter>键继续显示下一屏。
程序三:记录删除程序Delete a Record功能:输入待删除的姓名,按姓名查找,显示提示信息,让用户再次确认是否要删除,确认后,将该姓名记录删除。
程序四:排序程序Sort功能:以姓名为序升序排列数组。
程序五:记录插入程序Insert a Record功能:在以姓名为序的数组中插入一条记录,插入后,数组仍有序。
输出插入成功的信息。
程序六:记录查找并显示程序Query功能:输入司机姓名,查找包含司机名字的记录,并显示该教师元的所有罚单信息。
程序七:正文文件添加数据到结构体数组程序Add Records from a Text File功能:用户事先建立一个正文文件data.txt,存放多个待加入的记录。
提示输入正文文件的文件名,然后从该文件中一次性加入多条处罚单记录。
程序八:记录写入文件程序Write to a Text File功能:将数组的全部记录写入文件records.txt,要求文件格式和文件data.txt相同二、对题目的分析(这篇交通处罚单管理程序显然需要用到大量数组、结构体和指针的知识点。
设计题目:车辆违章查询系统一、综合性程序设计报告题目要求: 能够根据车辆的牌号,进行违章记录的查询。
功能:(1)车辆信息的维护;(2)违章记录的查询。
二、题目描述违章车辆信息用文件存储,提供文件的输入输出操作;要求可以输入,输出,删除,浏览车辆违章信息,因而要提供输入,删除和显示操作;要实现按车辆,驾驶员和违章类别查询,则要提供查找操作三、功能模块分解及说明(1)、主函数实现的是显示系统菜单(功能代码及违章类别代码)以及函数调用,其中各功能模块用菜单方式选择。
main(){int key=1;system("cls");while(key){printf("\n\t\t欢迎来到车辆违章记录查询系统\n");printf("\n\t\t\t1.信息写入。
\n");printf("\t\t\t2.信息查看。
\n");printf("\t\t\t3.信息删除。
\n");printf("\t\t\t4.信息添加。
\n");printf("\t\t\t5.信息查找。
\n");printf("\t\t\t6.信息管理。
\n");printf("\t\t\t0.退出系统。
\n");printf("\t\t\t注:违章类别代码:\n");printf("\t\t\t1.超速2.未系安全带3.逆行4.违规停车5.酒驾\n");printf("\t\t\t6.无证驾驶7.超载8.闯红灯9.无人驾驶10.违规倒车\n");printf("请选择功能代码:");scanf("%d",&key);switch(key){case 1:out();break;case 2:p();break;case 3:del();break;case 4:add();break;case 5:search();break;case 6:manage();break;case 0:break;default:printf("输入有误!\n");}}}(2)、函数的定义,定义下面需要的函数类型,输入、输出、删除、增添及结构体的元素。
C语言课程设计报告题目:交通处罚单管理程序学号 021410219姓名李林指导教师张定会完成日期 2015.5.8一、功能介绍用结构体数组结构实现简单的交通处罚单管理功能,要求具有以下功能:(1)可以输入,删除,显示,修改某个驾驶员的交通处罚信息;(2)可以按驾驶员查询交通处罚单。
程序执行过程为:循环显示主菜单,用户在Give you choice:处输入选项,即按照功能列表输入0~8中的任意一个数字。
按回车后,执行相应功能。
各项菜单功能:(1)Input Record(输入若干条记录)从键盘上一次输入一张交通处罚单的信息(一条记录),依次存放到结构体数组里。
插入一条记录后,显示提示信息:确认是否输入下一条记录,如确认,继续输入,否则,退出输入功能。
(2)Display All Record(显示所有记录)按顺序显示数组中所有记录,每屏显示10条记录。
每显示10条,按<Enter>键继续显示下一屏。
(3)Delete a record(按姓名查找,删除一条记录)输入待删除记录的姓名,显示提示信息,让用户再次确认是否要删除。
确认后,将该姓名的记录删除。
(4)Sort(排序)以姓名为序升序排列数组。
(5)Insert a Record(插入一条记录)在以姓名为序排列数组中插入一条记录,插入后,数组仍然有序。
输出插入成功信息。
(6) Query(查找并显示一个记录)输入驾驶员姓名,查找包含该驾驶员名字的记录,并显示该驾驶员的所有罚单信息。
(7)Add Records from a Text file (从正文文件添加数据到结构体数组中)用户可提前建立一个正文文件data.txt,存放多个带加入的记录。
提示输入正文的文件名,然后从该文件中一次性加入多条处罚单记录。
文件data.txt格式如下:2 //表示带添加的记录数//WangXiao 95 DingFei 000001 2013 1 23LiuLin 87 CaiMing 000002 2013 1 24(8)Write to a Text file将数组中的全部记录写入文件records.txt,要求文件格式和data.txt相同。
2011年度高级语言课程设计期末大作业《题目》院系:工学院机械系专业:机械工程及自动化年级:10 级学生姓名:学号:指导教师:题号:第29 题2011年6月一、题目(课程设计题库第X题)【说明及要求】实现交通罚款信息(车辆牌号、驾驶证号、交警代号、违章时间、罚款金额、缴费状态)的登记、删除、修改功能,并能分别按车辆牌号、驾驶证号、交警代号查询交通罚款信息。
【提示】(1)定义结构体表示罚款信息;(2)用文件实现罚款信息存储;(3)分别编写函数实现罚款信息登记、修改、删除以及按车辆牌号、驾驶证号、交警代号查询交通罚款信息。
(4)在main 函数中调用上述函数进行演示。
二、问题分析(一)需求分析1.交通处罚单信息用文件储存,提供文件的输入输出操作;2.要求可以输入、删除、浏览交通处罚单信息,因而要提供信息的输入、删除和显示操作;3.要车辆、驾驶员和开单交警查询,则要提供查找操作;4.另外提供系统操作和键盘式选择菜单以实现功能选择。
(二)该问题可以分为以下几个模块三、程序流程图【信息输入模块】N YY NFILE*fp; (fp=fopen("list.txt","r+"))==N printf("\n 请输入处罚单数量:"); j=0 !feof(fp) j++MultiIF Multi fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&l 开始结束【删除罚单模块】【信息查询模块】【信息查询模块】输入驾驶员姓名四、程序代码#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100struct Plist //处罚单{char vno[20]; //车牌号char dname[20]; //驾驶员姓名char pname[20]; //交警姓名char pno[20]; //交警编号char no[20]; //处罚单编号char date[20]; //处罚日期} list[N]; //处罚单数组void input(); //输入模块void dele(); //删除模块void browse(); //浏览模块void search(); //查询模块void count(); //统计模块void menu(); //主菜单void vno_search(); //按车牌号查询void dna_search(); //按驾驶员姓名查询void pna_search(); //按开单交警姓名查询main(){menu();getchar();}void menu(){int n;int r;do{system("cls");printf("\n\t\t\t\t交通处罚单管理系统\n");printf("········································");printf(" 菜单: 1-信息录入2-信息删除3-信息浏览4-信息查询5-信息统计6-退出系统\n");printf("········································");printf("请从输入数字选择相应的功能:");scanf("%d",&n);if(n<1||n>6){r=1;getchar();}else r=0;}while(r==1);switch(n){case 1:input();break;case 2:dele();break;case 3:browse();break;case 4:search();break;case 5:count();break;case 6:exit(0);}}void input(){FILE*fp;int num;int i,j;if((fp=fopen("list.txt","r+"))==NULL){if((fp=fopen("list.txt","w"))==NULL){printf("文件打开或创建失败!\n");printf("\npress enter to return menu\n");getchar();menu();}printf("\n请输入处罚单数量:");scanf("%d",&i);printf("\n\n");for(j=0;j<i;j++){printf("输入第%d张处罚单的:\n",j+1);printf("\n 车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20110601)\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;j<i;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,lis t[j].date);}fclose(fp);printf("\n保存成功!");printf("\npress enter to return menu\n");getchar();getchar();menu();}printf("\n请输入处罚单数量:");scanf("%d",&i);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+i;if(num>N){printf("\n结构体数组数的N太小,请先修改N的值\n");printf("\npress enter to return menu\n");getchar();getchar();menu();}printf("\n");for(j=0;j<i;j++){printf("输入第%d张处罚单的:\n",j+1);printf("\n车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20110601)\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;j<i;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("\npress enter to return menu\n");getchar();getchar();menu();}void dele(){int j;int num;int f=-1;FILE*fp1,*fp2;char s1[20];if((fp1=fopen("list.txt","r"))==NULL){printf("can not open file\n");printf("\npress enter to return menu\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;j<num;j++){if(strcmp(s1,list[j].no)==0){f=j;if(f<num-1){for(j=f;j<num-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("\npress enter to return menu\n");getchar();menu();}for(j=0;j<num-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,l ist[j].date);}fclose(fp2);printf("\n删除成功!\n");printf("\npress enter to return menu\n");getchar();getchar();menu();}}if(f<0){printf("\n没有找到该学号的记录:\n");printf("\npress enter to return menu\n");getchar();getchar();menu();}}void browse(){int j;int num;FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("can not open file\n");printf("\npress enter to return menu\n");getchar();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);}fclose(fp);num=j;printf("\n已添加%d条记录\n\n",num);printf("车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期\n");for(j=0;j<num;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);}printf("\npress enter to return menu\n");getchar();getchar();menu();}void search(){int n;int r;do{system("cls");printf("\n请选择查询类型:\n\t1-按车牌号2-按驾驶员姓名3:按开单交警姓名4-返回主菜单\n");printf("\n请输入数字选择:");scanf("%d",&n);if(n<1||n>4){r=1;getchar();}else r=0;}while(r==1);switch(n){case 1:vno_search();break;case 2:dna_search();break;case 3:pna_search();break;case 4:menu();}}void vno_search(){int f=-1;int num;int j;char no[20];FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("文件打不开!\n");printf("\npress enter to return menu\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;j<num;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(f<0)printf("\npress enter to return sub menu\n");getchar();getchar();search();}void dna_search(){int f=-1;int num;int j;char name[20];FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("文件打不开!\n");printf("\npress enter to return menu\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;j<num;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(f<0)printf("\npress enter to return sub menu\n");getchar();getchar();search();}void pna_search(){int f=-1;int num;int j;char name[20];FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("文件打不开!\n");printf("\npress enter to return menu\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;j<num;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(f<0)printf("\npress enter to return sub menu\n");getchar();getchar();search();}void count(){int f=-1;int num; //所有罚单单数int j;int total=0; //某驾驶员的罚单数char name[20];char time1[20];char time2[20];FILE*fp;if((fp=fopen("list.txt","r"))==NULL){printf("文件打不开!\n");printf("\npress enter to return menu\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请根据提示输入驾驶员的姓名和一个时间段,统计某个驾驶员在某段时间内的处罚单数目和罚单号\n");printf("\n\n请输入驾驶员的姓名:");scanf("%s",name);printf("\n请输入一个较早的时间:");scanf("%s",time1);printf("\n请输入一个最近的时间:");scanf("%s",time2);for(j=0;j<num;j++){if((strcmp(list[j].date,time1)>=0)&&(strcmp(list[j].date,time2)<=0)){f=j;total++;printf("\n罚单号:%s\n",list[j].no);}}if(f<0)printf("\n没有找到记录!\n");printf("\n罚单总数为:%d\n",total);printf("\npress enter to return menu\n"); getchar();getchar();menu();}五、运行结果(截图)程序主界面:信息录入:信息录入后查看到的结果【信息查询】【查询结果】【信息统计结果】【选择信息删除模块后的结果】六、课程设计过程问题讨论。
C语言程序设计课程设计材料学生姓名:朱明杰学号:031410627系(院):自动化学院设计题目: 交通处罚单管理系统完成日期: 2015年5月●课程设计目的 (3)●课程设计内容 (3)●总体设计 (3)●详细设计 (4)●运行结果 (8)●程序调试 (10)编程体会 (11)一、课程设计目的1.通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2.通过课程设计,进一步掌握C有并重要的数据结构。
掌握并熟练运用指针、链表、结构体、文件等数据结构。
3.通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。
4.通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个中小型系统。
5.通过课程设计,加强了自己的程序分析能力。
6.通过课程设计,完成了交通处罚单管理系统,很多功能还待完善。
二、课程设计内容用C语言编写软件完成以下任务:1交通处罚单基本信息输入(数据包括处罚单号码,车牌号码,姓名,开单警察的信息ID,处罚时间等),信息保存在data.txt文件中,2交通处罚单基本信息浏览。
将文件内所有的交通处罚单信息全部输出展现出来。
3交通处罚单基本信息查询。
可以查询特定的交通处罚单信息。
4交通处罚单基本信息统计。
可以查询某一个时间段的所有的交通处罚单信息。
5 交通处罚单基本信息删除。
删除不需要的交通处罚单信息。
三、总体设计本系统的功能模块如图1所示,主要有以下模块:(1)交通处罚单基本信息输入:构造函数int input(),对产生新的交通处罚单的信息进行输入。
(2)交通处罚单基本信息输出:构造函数void display(),全部输出已被录入交通处罚单的所有信息。
(3)交通处罚单基本信息删除:构造函数int delete(),经确认后调用delete函数删除该姓名的记录。
(4)交通处罚单基本信息排序:构造函数void sort(),对文件中所有的交通处罚单进行排序。
基于C++语言实现机动车违章处罚管理系统这篇文章主要介绍了基于C++语言实现机动车违章处罚管理系统的相关资料,需要的朋友可以参考下:源码:#include <iostream>#include <iomanip>#include <fstream>#include <string>#include <list>using namespace std;class Violation{public:Violation(){points=fine=0;number=carNumber=tel=location=isSpot=police=camera=type=isTreated=treatmentDate=notes="";}Violation(string snumber,string sdate="",string scarNumber="",string stel="",string slocation="",int ipoints=-1,string sisSpot="",string spolice="",string scamera="",string itype="",int ifine=0,string sisTreated="",string streatmentDate="",string snotes=""):number(snumber),date(sdate),carNumber(scarNumber),tel(stel),location(slocation),points(ipoints),isSpot(sisSpot),police(spolice),camera(scamera),type(itype),fine(ifine),isTreated(sisTreated),treatmentDate(streatmentDate),notes(snotes){}bool operator==(const Violation& vltn); //查找用friend bool compNumber(Violation& vltn1,Violation& vltn2); //编号比较规则friend bool compDate(Violation& vltn1,Violation& vltn2); //日期比较规则friend bool compCarNumber(Violation& vltn1,Violation& vltn2); //车牌号比较规则friend bool compLocation(Violation& vltn1,Violation& vltn); //地点比较规则friend bool compPoints(Violation& vltn1,Violation& vltn); //扣分比较规则friend istream& operator>>(istream& input,Violation& vltn);friend ostream& operator<<(ostream& output,Violation& vltn);friend class List;friend int saveFile();private:string number; //编号string date; //日期string carNumber; //车牌号string tel; //联系电话-string location; //地点int points; //扣分string isSpot; //现场string police; //现场执勤交警string camera; //非现场摄像头编号string type; //违章类别int fine; //罚款string isTreated; //是否处理string treatmentDate; //处理日期string notes; //备注};bool Violation::operator==(const Violation& vltn){if(location==""||vltn.location=="")if(tel==""||vltn.tel=="")if(carNumber==""||vltn.carNumber=="")if(date==""||vltn.date=="")return number==vltn.number;else return date==vltn.date;else return carNumber==vltn.carNumber;else return tel==vltn.tel;else return location==vltn.location;}bool compNumber(Violation& vltn1,Violation& vltn2){return vltn1.number>vltn2.number;}bool compDate(Violation& vltn1,Violation& vltn2){return vltn1.date>vltn2.date;}bool compCarNumber(Violation& vltn1,Violation& vltn2){return vltn1.carNumber<vltn2.carNumber;}bool compLocation(Violation& vltn1,Violation& vltn2){return vltn1.location>vltn2.location;}bool compPoints(Violation& vltn1,Violation& vltn2){return vltn1.points>vltn2.points;}istream& operator>>(istream& input,Violation& vltn){input>>vltn.number>>vltn.date>>vltn.carNumber>>vltn.tel>>vltn.location >>vltn.points>>vltn.isSpot>>vltn.police>>vltn.camera>>vltn.type>>vltn.fine>>vltn.isTreated>>vltn.treatmentDate>>vltn.notes;return input;}ostream& operator<<(ostream& output,Violation& vltn){output<<setw(6)<<vltn.number<<setw(9)<<vltn.date<<setw(9)<<vltn.carNumber<<setw(12)<<vltn.tel<<setw(11)<<vltn.location<<setw(5)<<vltn.points<<setw(9)<<vltn.isSpot<<setw(13)<<vltn.police<<setw(17)<<vltn.camera<<setw(11)<<vltn.type<<setw(5)<<vltn.fine<<setw(9)<<vltn.isTreated<<setw(9)<<vltn.treatmentDate<<setw(33)<<vltn.notes<<endl;return output;}class List{public:friend class User;int loadFile(); //读取文件int saveFile(); //保存到文件int insert(); //添加记录int change(); //修改记录int del(); //删除记录int browse(); //浏览记录int searchMenu(); //查询信息int searchCarNumber(); //按车牌号int searchDate(); //按日期查找int searchTel(); //按电话查找int searchLocation(); //按地点查询int countMenu(); //统计信息int countDate(); //按日期统计违章int countCarNumber(); //按车牌统计违章int countLocation(); //按地点统计违章int countPoints(); //按扣分统计违章static List* getList();private:list <Violation> vltnlist;static List* m_list;List(){};List(const List&){}List& operator=(const List&){}};const char* filepath="violation.dat"; //指定数据文件路径bool checkNumber(string s,int size){if(s.size()!=size) return false;for(int i=0;i<size;i++)if(s[i]<'0'||s[i]>'9') return false;return true;}List* List::m_list=NULL;List* List::getList(){if(NULL==m_list) m_list=new List;return m_list;}int List::loadFile(){ifstream infile(filepath,ios::in);if(infile)for(;!infile.eof();){Violation vltn;infile>>vltn;vltnlist.push_back(vltn);}infile.close();return 0;}int List::saveFile(){ofstream outfile(filepath,ios::out);list<Violation>::iterator it;for(it=vltnlist.begin();it!=vltnlist.end();it++)outfile<<endl<<it->number<<' '<<it->date<<' '<<it->carNumber<<' '<<it->tel<<' '<<it->location<<' '<<it->points<<' '<<it->isSpot<<' '<<it->police<<' '<<it->camera<<' '<<it->type<<' '<<it->fine<<' '<<it->isTreated<<' '<<it->treatmentDate<<' '<<it->notes;outfile.close();return 0;}int List::insert(){list<Violation>::iterator it;string number,date,carNumber,tel,location,isSpot,police,camera,type, isTreated,treatmentDate,notes;int points,fine;cout<<"请输入违章编号【放弃添加0】【5位数字,如16384】:"; for(;;){cin>>number;cin.sync();if(number=="0") return 0;if(!checkNumber(number,5)) {cout<<"请输入有效编号:";continue;}Violation l(number);it=find(vltnlist.begin(),vltnlist.end(),l);if(it!=vltnlist.end())cout<<"编号已存在,请重新输入:";else break;}cout<<"请输入违章日期【8位数字,如20160630】:";while(1){cin>>date;cin.sync();if(!checkNumber(date,8)){cout<<"请输入有效日期:";continue;}else break;}cout<<"请输入违章车辆车牌号:";cin>>carNumber;cin.sync(); cout<<"请输入登记联系电话【11位数字,如137********】:"; while(1){cin>>tel;cin.sync();if(!checkNumber(tel,11)){cout<<"请输入有效电话:";continue;}else break;}cout<<"请输入违章地点:";cin>>location;cin.sync();cout<<"请输入处罚扣分【0~12分】:";while(1){if(cin>>points){cin.sync();if(points<0||points>12){cout<<"请输入有效扣分:";continue;}else break;}else{cin.clear();cin.sync();cout<<"请输入有效扣分:";continue;}}cout<<"请输入是否现场【是1】:";cin>>isSpot;cin.sync();if(isSpot=="1"){cout<<"请输入现场执勤交警:";cin>>police;cin.sync();isSpot="是";camera="现场";}else{cout<<"请输入非现场摄像头编号【6位数字,如646464】:";while(1){cin>>camera;cin.sync();if(!checkNumber(camera,6)){cout<<"请输入有效编号:";continue;}else break;}isSpot="否";police="非现场";}cout<<"*******************************************************"<<endl; cout<<"* ┌------------违章类别-------------请输入---------┐*"<<endl;cout<<"* | | *"<<endl;cout<<"* | ◆超速1 | *"<<endl;cout<<"* | ◆酒驾2 | *"<<endl;cout<<"* | ◆闯红灯3 | *"<<endl;cout<<"* | ◆违规变道4 | *"<<endl;cout<<"* | ◆未系安全带5 | *"<<endl;cout<<"* | ◆超载6 | *"<<endl;cout<<"* | | *"<<endl;cout<<"* └------------------------------------------------┘*"<<endl;cout<<"*******************************************************"<<endl; cout<<"请选择违章类别:";int Mark=1;while(Mark){char n;cin>>n;cin.sync();switch(n){case '1': type="超速";Mark=0;break;case '2': type="酒驾";Mark=0;break;case '3': type="闯红灯";Mark=0;break;case '4': type="违规变道";Mark=0;break;case '5': type="未系安全带";Mark=0;break;case '6': type="超载";Mark=0;break;default : cout<<"输入有误,请重新输入:";}}cout<<"请输入罚款金额【0~5000元】:";while(1){if(cin>>fine){cin.sync();if(fine<0||fine>50000){cout<<"请输入有效金额:";}else break;}else{cin.clear();cin.sync();cout<<"请输入有效金额:";continue;}}cout<<"请输入是否处理【是1】:";cin>>isTreated;cin.sync();if(isTreated=="1"){cout<<"请输入处理日期【8位数字,如20160630】:";//cin>>treatmentDate;cin.sync(); while(1){cin>>treatmentDate;cin.sync();if(!checkNumber(treatmentDate,8)){cout<<"请输入有效日期:";continue;}else break;}isTreated="是";}else{isTreated="否";treatmentDate="未处理";}cout<<"请输入备注【无0】:";cin>>notes;cin.sync();if(notes=="0") notes="无";Violation vltn(number,date,carNumber,tel,location,points,isSpot,police,camera,type,fine,isTreated,treatmentDate,notes);vltnlist.push_back(vltn);saveFile();cout<<"车辆违章信息添加成功!";getchar();return 0;}int List::change(){list<Violation>::iterator it;if(!vltnlist.size()){cout<<"还没有记录,不能修改!"<<endl;getchar();return 0;}string number,date,carNumber,tel,location,isSpot,police,camera,type,isTreated,treatmentDate,notes;int points,fine;cout<<"请输入想要修改的记录编号【放弃0】:";cin>>number;cin.sync();if(number=="0") return 0;Violation vltn(number);it=find(vltnlist.begin(),vltnlist.end(),vltn);if(it==vltnlist.end()){cout<<"此编号不存在!";getchar();return 0;}while(1){system("cls");cout<<" 当前信息请输入"<<endl;cout<<" 违章编号:"<<setw(17)<<(*it).number<<" 1"<<endl<<" 违章日期:"<<setw(17)<<(*it).date<<" 2"<<endl<<" 车辆车牌号:"<<setw(17)<<(*it).carNumber<<" 3"<<endl<<" 登记联系电话:"<<setw(17)<<(*it).tel<<" 4"<<endl<<" 违章地点:"<<setw(17)<<(*it).location<<" 5"<<endl<<" 处罚扣分:"<<setw(17)<<(*it).points<<" 6"<<endl<<" 是否现场:"<<setw(17)<<(*it).isSpot<<endl<<" 现场执勤交警:"<<setw(17)<<(*it).police<<" 7"<<endl<<" 非现场摄像头编号:"<<setw(17)<<(*it).camera<<" 8"<<endl<<" 违章类别:"<<setw(17)<<(*it).type<<" 9"<<endl<<" 罚款金额:"<<setw(17)<<(*it).fine<<" a"<<endl<<" 是否处理:"<<setw(17)<<(*it).isTreated<<" b"<<endl<<" 处理日期:"<<setw(17)<<(*it).treatmentDate<<" c"<<endl<<" 备注:"<<endl<<setw(34)<<(*it).notes<<" d"<<endl;cout<<"请选择要修改的条目【放弃修改0】:";int Mark=1;while(Mark){char n;cin>>n;cin.sync();switch(n){case '0': return 0;case '1': cout<<"请输入违章编号【5位数字,如16384】:";//cin>>(*it).number;cin.sync(); for(;;){cin>>number;cin.sync();if(!checkNumber(number,5)) {cout<<"请输入有效编号:";continue;}Violation l(number);list<Violation>::iterator nit;nit=find(vltnlist.begin(),vltnlist.end(),l);if(nit!=vltnlist.end())cout<<"编号已存在,请重新输入:";else {(*it).number=number;break;}}Mark=0;break;case '2': cout<<"请输入违章日期【8位数字,如20160630】:";//cin>>(*it).date;cin.sync(); while(1){cin>>date;cin.sync();if(!checkNumber(date,8)){cout<<"请输入有效日期:";continue;}else {(*it).date=date;break;}}Mark=0;break;case '3': cout<<"请输入车辆车牌号:";cin>>(*it).carNumber;cin.sync();Mark=0;break;case '4': cout<<"请输入登记联系电话:";//cin>>(*it).tel;cin.sync();while(1){cin>>tel;cin.sync();if(!checkNumber(tel,11)){cout<<"请输入有效电话【11位数字,如137********】:";continue;}else {(*it).tel=tel;break;}}Mark=0;break;case '5': cout<<"请输入违章地点:";cin>>(*it).location;cin.sync();Mark=0;break;case '6': cout<<"请输入处罚扣分【0~12分】:";//cin>>(*it).points;cin.sync();while(1){if(cin>>points){cin.sync();if(points<0||points>12){cout<<"请输入有效扣分:";continue;}else{(*it).points=points;break;}}else{cin.clear();cin.sync();cout<<"请输入有效扣分:";continue;}}Mark=0;break;case '7': cout<<"请输入现场执勤交警:";cin>>(*it).police;cin.sync();(*it).isSpot="是";(*it).camera="现场";Mark=0;break;case '8': cout<<"请输入非现场摄像头编号【6位数字,如646464】:";//cin>>(*it).camera;cin.sync();while(1){cin>>camera;cin.sync();if(!checkNumber(camera,6)){cout<<"请输入有效编号:";continue;}else{(*it).camera=camera;break;}}(*it).isSpot="否";(*it).police="非现场";Mark=0;break;case '9': {cout<<"*******************************************************"<<endl;cout<<"* ┌------------违章类别-------------请输入---------┐*"<<endl;cout<<"* | | *"<<endl;cout<<"* | ◆超速1 | *"<<endl;cout<<"* | ◆酒驾2 | *"<<endl;cout<<"* | ◆闯红灯3 | *"<<endl;cout<<"* | ◆违规变道4 | *"<<endl;cout<<"* | ◆未系安全带5 | *"<<endl;cout<<"* | ◆超载6 | *"<<endl;cout<<"* | | *"<<endl;cout<<"* └------------------------------------------------┘*"<<endl;cout<<"*******************************************************"<<endl;cout<<"请选择违章类别:";int Mark1=1;while(Mark1){char n1;cin>>n1;cin.sync();switch(n1){case '1': (*it).type="超速";Mark1=0;break;case '2': (*it).type="酒驾";Mark1=0;break;case '3': (*it).type="闯红灯";Mark1=0;break;case '4': (*it).type="违规变道";Mark1=0;break;case '5': (*it).type="未系安全带";Mark1=0;break;case '6': (*it).type="超载";Mark1=0;break;default : cout<<"输入有误,请重新输入:";}}Mark=0;break;}case 'a': cout<<"请输入罚款金额【0~5000元】:";//cin>>(*it).fine;cin.sync(); while(1){if(cin>>fine){cin.sync();if(fine<0||fine>50000){cout<<"请输入有效金额:";continue;}else{(*it).fine=fine;break;}}else{cin.clear();cin.sync();cout<<"请输入有效金额:";continue;}}Mark=0;break;case 'b': cout<<"请输入是否处理【是1】:";cin>>(*it).isTreated;cin.sync(); if((*it).isTreated=="1"){cout<<"输入处理日期:";//cin>>(*it).treatmentDate;cin.sync();while(1){cin>>treatmentDate;cin.sync();if(!checkNumber(treatmentDate,8)){cout<<"请输入有效日期:";continue;}else {(*it).treatmentDate=treatmentDate;break;}}(*it).isTreated="是";}else{(*it).isTreated="否";(*it).treatmentDate="未处理";}Mark=0;break;case 'c': cout<<"请输入处理日期【8位数字,如20160630】:";//cin>>(*it).treatmentDate;cin.sync();while(1){cin>>treatmentDate;cin.sync();if(!checkNumber(treatmentDate,8)){cout<<"请输入有效日期:";continue;}else{(*it).treatmentDate=treatmentDate;break;}}Mark=0;break;case 'd': cout<<"请输入备注:";cin>>(*it).notes;cin.sync();Mark=0;break;default : cout<<"输入有误,请重新输入:";}}saveFile();cout<<"修改成功!"<<endl<<"继续修改请输入任意键,修改完毕请输入0:";char ch;cin>>ch;cin.sync();if(ch=='0') return 0;}}int List::del(){list<Violation>::iterator it;if(!vltnlist.size()){cout<<"还没有记录,不能删除!"<<endl;getchar();return 0;}string number;browse();cout<<"请输入想要删除的编号【放弃0】:";cin>>number;cin.sync();if(number=="0") return 0;Violation vltn(number);it=find(vltnlist.begin(),vltnlist.end(),vltn);if(it==vltnlist.end()){cout<<"此编号不存在!";getchar();return 0;}vltnlist.erase(it);if(!vltnlist.size()) remove(filepath);else saveFile();cout<<"删除记录成功!";getchar();return 0;}int List::browse(){list<Violation>::iterator it;if(!vltnlist.size()){cout<<"还没有记录!"<<endl;getchar();return 0;}vltnlist.sort(compNumber); //按编号降序排列cout<<"当前共有"<<vltnlist.size()<<"条记录,已按编号降序排列:"<<endl<<" 编号日期车牌号联系电话地点扣分是否现场现场执勤交警非现场摄像头编号违章类别罚款是否处理处理日期备注"<<endl;for(it=vltnlist.begin();it!=vltnlist.end();it++)cout<<*it;getchar();return 0;}int List::searchMenu(){if(!vltnlist.size()){cout<<"还没有记录,不能查询!"<<endl;getchar();return 0;}while(1){system("cls");cout<<"*******************************************************"<<endl;cout<<"* ★机动车违章处罚管理系统★*"<<endl;cout<<"* *"<<endl;cout<<"*******************************************************"<<endl;cout<<"* ┌-------------------查询菜单---------------------┐*"<<endl;cout<<"* | | *"<<endl;cout<<"* | 查询方式请输入| *"<<endl;cout<<"* | ◆按日期查询1 | *"<<endl;cout<<"* | ◆按车牌号查询2 | *"<<endl;cout<<"* | ◆按电话查询3 | *"<<endl;cout<<"* | ◆按地点查询4 | *"<<endl;cout<<"* | | *"<<endl;cout<<"* └------------------------------------------------┘*"<<endl;cout<<"*******************************************************"<<endl;cout<<"* ●返回主菜单0 *"<<endl;cout<<"*******************************************************"<<endl;cout<<"请选择查询方式:";int Mark=1;while(Mark){char n;cin>>n;cin.sync();switch(n){case '1': searchDate();Mark=0;break;case '2': searchCarNumber();Mark=0;break;case '3': searchTel();Mark=0;break;case '4': searchLocation();Mark=0;break;case '0': return 0;default : cout<<"输入有误,请重新输入:";}}}vltnlist.sort(compNumber);return 0;getchar();return 0;}int List::searchDate(){list<Violation>::iterator it;string date;cout<<"请输入日期:";cin>>date;cin.sync();Violation vltn("",date);it=find(vltnlist.begin(),vltnlist.end(),vltn);if(it!=vltnlist.end()){cout<<"已找到日期为"<<date<<" 的违章记录:"<<endl<<" 编号日期车牌号联系电话地点扣分是否现场现场执勤交警非现场摄像头编号违章类别罚款是否处理处理日期备注"<<endl<<*it;for(it++;it!=vltnlist.end();it++)if(*it==vltn) cout<<*it;}else cout<<"没有该日期的违章记录!";getchar();return 0;}int List::searchCarNumber(){list<Violation>::iterator it;string carNumber;cout<<"请输入车牌号:";cin>>carNumber;cin.sync();Violation vltn("","",carNumber);it=find(vltnlist.begin(),vltnlist.end(),vltn);if(it!=vltnlist.end()){cout<<"已找到车牌号为"<<carNumber<<" 的违章记录:"<<endl<<" 编号日期车牌号联系电话地点扣分是否现场现场执勤交警非现场摄像头编号违章类别罚款是否处理处理日期备注"<<endl<<*it;for(it++;it!=vltnlist.end();it++)if(*it==vltn) cout<<*it;}else cout<<"没有该车牌号的违章记录!";getchar();return 0;}int List::searchTel(){list<Violation>::iterator it;string tel;cout<<"请输入联系电话:";cin>>tel;cin.sync();Violation vltn("","","",tel);it=find(vltnlist.begin(),vltnlist.end(),vltn);if(it!=vltnlist.end()){cout<<"已找到联系电话为"<<tel<<" 的违章记录:"<<endl<<" 编号日期车牌号联系电话地点扣分是否现场现场执勤交警非现场摄像头编号违章类别罚款是否处理处理日期备注"<<endl<<*it;for(it++;it!=vltnlist.end();it++)if(*it==vltn) cout<<*it;}else cout<<"没有该联系电话的违章记录!";getchar();return 0;}int List::searchLocation(){list<Violation>::iterator it;string location;cout<<"请输入地点:";cin>>location;cin.sync();Violation vltn("","","","",location);it=find(vltnlist.begin(),vltnlist.end(),vltn);if(it!=vltnlist.end()){cout<<"已找到地点为"<<location<<" 的违章记录:"<<endl<<" 编号日期车牌号联系电话地点扣分是否现场现场执勤交警非现场摄像头编号违章类别罚款是否处理处理日期备注"<<endl<<*it;for(it++;it!=vltnlist.end();it++)if(*it==vltn) cout<<*it;}else cout<<"没有该地点的违章记录!";getchar();return 0;}int List::countMenu(){list<Violation>::iterator it;if(!vltnlist.size()){cout<<"还没有记录,不能统计!"<<endl;getchar();return 0;}while(1){system("cls");cout<<"*******************************************************"<<endl; cout<<"* *"<<endl;cout<<"* ★机动车违章处罚管理系统★*"<<endl;cout<<"* *"<<endl;cout<<"*******************************************************"<<endl; cout<<"* ┌--------------------统计菜单--------------------┐*"<<endl;cout<<"* | | *"<<endl;cout<<"* | 统计方式请输入| *"<<endl;cout<<"* | ◆按日期统计违章数量1 | *"<<endl;cout<<"* | ◆按车牌号统计违章次数2 | *"<<endl;cout<<"* | ◆按地点统计违章数量3 | *"<<endl;cout<<"* | ◆显示处罚>=12分的记录4 | *"<<endl;cout<<"* | | *"<<endl;cout<<"* └------------------------------------------------┘*"<<endl;cout<<"*******************************************************"<<endl; cout<<"* ●返回主菜单0 *"<<endl;cout<<"*******************************************************"<<endl; cout<<"请选择统计方式:";int Mark=1;while(Mark){char n;cin>>n;cin.sync();switch(n){case '1': countDate();Mark=0;break;case '2': countCarNumber();Mark=0;break;case '3': countLocation();Mark=0;break;case '4': countPoints();Mark=0;break;case '0': return 0;default : cout<<"输入有误,请重新输入:";}}}return 0;getchar();return 0;}int List::countDate(){list<Violation>::iterator it;vltnlist.sort(compDate);int sumVltn=0;string y,m1,m2,date1,date2;cout<<"输入日期范围:"<<endl ;cout<<"输入年份:";cin>>y;cin.sync();cout<<"输入起始月份:";cin>>m1;cin.sync();cout<<"输入结束月份:";cin>>m2;cin.sync();date1=y+m1;date2=y+m2;for(it=vltnlist.begin();it!=vltnlist.end();it++){if((*it).date>=date1&&(*it).date<=date2) sumVltn++;}cout<<"该段时间内违章数量为:"<<sumVltn;//getchar();//vltnlist.push_back(Violation("cutme"));//it=vltnlist.begin();/*cout<<"已按月份统计违章数量:"<<endl<<" 违章日期违章数量"<<endl;int sumVltn=0;string mouth=((*it).date).substr(4,2),date=(*it).date.substr(0,4); for(it=vltnlist.begin();it!=vltnlist.end();it++)if((*it).date!=""){if(mouth!=((*it).date).substr(4,2)){cout<<(*it).date.substr(0,4)<<"年"<<mouth<<"月"<<setw(9)<<sumVltn<<endl; sumVltn=1;mouth=(*it).date.substr(4,2);date=(*it).date.substr(0,4);}else {sumVltn++;}}else{cout<<date<<"年"<<mouth<<"月"<<setw(9)<<sumVltn<<endl;}*///vltnlist.pop_back();getchar();return 0;}int List::countCarNumber(){list<Violation>::iterator it;vltnlist.sort(compCarNumber);vltnlist.push_back(Violation("cutme"));it=vltnlist.begin();cout<<"已按车牌号统计违章次数:"<<endl<<" 车牌号违章次数"<<endl;string carNumber=(*it).carNumber;int sumVltn=0;for(it=vltnlist.begin();it!=vltnlist.end();it++)if(carNumber!=(*it).carNumber){cout<<setw(9)<<carNumber<<setw(9)<<sumVltn<<endl; carNumber=(*it).carNumber;sumVltn=1;}else sumVltn++;vltnlist.pop_back();getchar();return 0;}int List::countLocation(){list<Violation>::iterator it;vltnlist.sort(compLocation);vltnlist.push_back(Violation("cutme"));it=vltnlist.begin();string location=(*it).location;int sumVltn=0;cout<<"已按地点统计违章数量:"<<endl<<" 地点违章数量"<<endl;for(it=vltnlist.begin();it!=vltnlist.end();it++)if(location !=(*it).location){cout<<setw(11)<<location<<setw(9)<<sumVltn<<endl; location=(*it).location;sumVltn=1;}else sumVltn++;vltnlist.pop_back();getchar();return 0;}int List::countPoints(){list<Violation>::iterator it;vltnlist.sort(compCarNumber);vltnlist.push_back(Violation("cutme"));it=vltnlist.begin();string carNumber=(*it).carNumber,tel=(*it).tel;int sumPoints=0;cout<<"已显示处罚>=12分的违章记录:"<<endl<<" 车牌号联系电话"<<endl;for(it=vltnlist.begin();it!=vltnlist.end();it++)if(carNumber!=(*it).carNumber){if(sumPoints>11)cout<<setw(9)<<carNumber<<setw(12)<<tel<<endl; carNumber=(*it).carNumber;sumPoints=(*it).points;tel=(*it).tel; }else sumPoints+=(*it).points;。
#include<stdio.h>#include<stdlib.h>#include<string.h>#define BUFLEN 100 // 缓冲区最大字符数#define LEN 15 // 学号和姓名最大字符数,实际请更改#define N 100 // 最大学生人数,实际请更改struct record //结构体{char code[LEN+1]; // 车牌号char name[LEN+1]; // 车主姓名char police[20]; // 警官姓名char add[30]; // 家庭地址char tel[LEN+1]; // 电话号码char id[30]; //罚单编号char content[30]; // 罚单内容}sheet[N];int k=1,n,m; // 定义全局变量void readfile(); // 函数声明void seek();void modify();void insert();void del();void display();void save();void menu();/*********主函数开始************/int main(){while(k)menu();system("pause");return 0;}/*********主函数结束************/void help() //帮助函数{printf("0. 欢迎使用系统帮助!\n");printf("1. 进入系统后,先载入违章信息,再查询;\n");printf("2. 按照菜单提示键入数字代号;\n");printf("3. 增加违章信息后,切记保存信息;\n");printf("4. 谢谢您的使用!\n\n");}void readfile() // 建立信息{char *p="database.txt";FILE *fp;int i=0;if ((fp=fopen("database.txt","r"))==NULL){printf("打开文件%s 错误! 按任意键退出!",p);system("pause");exit(0);}while(fscanf(fp,"%s %s %s %s %s %s %s",sheet[i].code,sheet[i].name,sheet[i].police,sheet[i].add,s heet[i].tel,sheet[i].id,sheet[i].content)==7){i++;i=i;}fclose(fp);n=i; //此处的n在下面的“按车牌号排序”函数中调用,为文件中罚单的数量printf("\n************录入完毕!************\n");}void seek() //查找{int i,item,flag;char s1[21]; // 以姓名和车牌号最长长度+1为准printf("\n");printf(" 1.按车牌号查询\n");printf("----------------\n");printf(" 2.按车主姓名查询\n");printf("----------------\n");printf(" 3.退出本菜单\n");printf("\n");while(1){printf("请选择子菜单编号:");scanf("%d",&item);flag=0;switch(item){case 1:printf("请输入要查询的车牌号:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(sheet[i].code,s1)==0) //strcmp函数进行比对,若为0,则相同{flag=1;printf("车牌号车主姓名警官姓名家庭住址电话罚单编号罚单内容\n");printf("-------------------------------------------------------------------------------\n");printf("%4s %14s %10s %10s %8s %8s %10s\n",sheet[i].code,sheet[i].name,sheet[i].police, sheet[i].add,sheet[i].tel,sheet[i].id,sheet[i].content);}if(flag==0)printf("该车牌号不存在!\n"); break;case 2:printf("请输入要查询的车主姓名:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(sheet[i].name,s1)==0){flag=1;printf("车牌号车主姓名警官姓名家庭住址电话罚单编号罚单内容\n");printf("--------------------------------------------------------------------\n");printf("%4s %14s %10s %10s %8s %8s %10s\n",sheet[i].code,sheet[i].name,sheet[i].police, sheet[i].add,sheet[i].tel,sheet[i].id,sheet[i].content);}if(flag==0)printf("该车主姓名不存在!\n"); break;case 3:return;default:printf("请在1-3之间选择\n");}}}void modify() //修改信息{int i,item,num;char s1[LEN+1],s2[LEN+1]; // 以姓名和车牌号最长长度+1为准printf("请输入要要修改的车辆的车牌号:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(sheet[i].code,s1)==0) //比较字符串是否相等num=i;printf(" 1.修改车主姓名\n"); printf(" 2.修改警官姓名\n"); printf(" 3.修改家庭地址\n"); printf(" 4.修改电话号码\n"); printf(" 5.修改罚单内容\n"); printf(" 6.修改罚单编号\n"); printf(" 7.退出本菜单\n"); while(1){printf("请选择子菜单编号:");scanf("%d",&item);switch(item){case 1:printf("请输入新的车主姓名:\n");scanf("%s",s2);strcpy(sheet[num].name,s2); break;case 2:printf("请输入新的警官姓名:\n");scanf("%s",&s2);strcpy(sheet[num].police,s2); break;case 3:printf("请输入新的家庭地址:\n");scanf("%s",s2);strcpy(sheet[num].add,s2); break;case 4:printf("请输入新的电话号码:\n");scanf("%s",s2);strcpy(sheet[num].tel,s2); break;case 5:printf("请输入新的罚单编号:\n");scanf("%s",s2);strcpy(sheet[num].id,s2); break;case 6:printf("请输入新的罚单内容:\n");scanf("%s",s2);strcpy(sheet[num].content,s2); break;case 7:return;default:printf("请在1-7之间选择\n");}}}/*void sort() //按车牌号排序{int i,j;char temp[10];for(i=0;i<n-1;i++){for(j=n-1;j>i;j--)if(strcmp(sheet[j-1].code,sheet[j].code)>0) //若后者编号大于前者,则进入if语句//用strcpy函数,利用temp中间变量,对二者的信息调换{strcpy(temp,sheet[j-1].code);strcpy(sheet[j-1].code,sheet[j].code);strcpy(sheet[j].code,temp);strcpy(temp,sheet[j-1].name);strcpy(sheet[j-1].name,sheet[j].name);strcpy(sheet[j].name,temp);strcpy(temp,sheet[j-1].police);strcpy(sheet[j-1].police,sheet[j].police);strcpy(sheet[j].police,temp);strcpy(temp,sheet[j-1].add);strcpy(sheet[j-1].add,sheet[j].add);strcpy(sheet[j].add,temp);strcpy(temp,sheet[j-1].tel);strcpy(sheet[j-1].tel,sheet[j].tel);strcpy(sheet[j].tel,temp);strcpy(temp,sheet[j-1].id);strcpy(sheet[j-1].id,sheet[j].id);strcpy(sheet[j].id,temp);strcpy(temp,sheet[j-1].id);strcpy(sheet[j-1].content,sheet[j].content);strcpy(sheet[j].content,temp);}}}*/void insert() //插入函数{int i=n,j,flag;printf("请输入待增加的罚单数:\n");scanf("%d",&m);do{flag=1;while(flag){flag=0;printf("请输入第%d 个罚单的车牌号:\n",i+1);scanf("%s",sheet[i].code);for(j=0;j<i;j++)if(strcmp(sheet[i].code,sheet[j].code)==0){printf("已有该车牌号,请检查后重新录入!\n");flag=1;break; //如有重复立即退出该层循环,提高判断速度}}printf("请输入第%d 个的车主姓名:\n",i+1);scanf("%s",sheet[i].name);printf("请输入第%d 个的警官姓名:\n",i+1);scanf("%s",&sheet[i].police);printf("请输入第%d 个的家庭住址:\n",i+1);scanf("%s",sheet[i].add);printf("请输入第%d 个的电话号码:\n",i+1);scanf("%s",sheet[i].tel);printf("请输入第%d 个的罚单编号:\n",i+1);scanf("%s",sheet[i].id);printf("请输入第%d 个的罚单内容:\n",i+1);scanf("%s",sheet[i].content);if(flag==0){i=i;i++;}printf("------录入完毕!------\n\n");}void del() //删除函数{int i,j,flag=0;char s1[LEN+1];printf("请输入要删除罚单的车牌号:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(sheet[i].code,s1)==0){flag=1;for(j=i;j<n-1;j++)sheet[j]=sheet[j+1];}if(flag==0)printf("该车牌号不存在!\n");if(flag==1){printf("车牌号车主姓名警官姓名家庭住址电话罚单编号罚单内容\n");printf("-------------------------------------------------------------------------------\n");printf("%4s %14s %10s %10s %8s %8s %10s\n",sheet[i-1].code,sheet[i-1].name,sheet[i-1].police, sheet[i-1].add,sheet[i-1].tel,sheet[i-1].id,sheet[i-1].content);printf("---------------------该罚单删除成功---------------------\n显示结果请选择菜单\n");n--;}}void display() //显示函数{int i;printf("所有罚单的信息为:\n");printf("车牌号车主姓名警官姓名家庭住址电话罚单编号罚单内容\n");printf("-------------------------------------------------------------------------------\n");for(i=0;i<n;i++){printf("%4s %14s %10s %10s %8s %8s %10s\n",sheet[i].code,sheet[i].name,sheet[i].police, sheet[i].add,sheet[i].tel,sheet[i].id,sheet[i].content);}}void save() //保存函数{int i;FILE *fp;fp=fopen("database.txt","w"); //写入for(i=0;i<n;i++){fprintf(fp,"%s %s %s %s %s %s %s\n",sheet[i].code,sheet[i].name,sheet[i].police,sheet[i].add,sheet[i].tel,sheet[i].id,sheet[i].content);}printf("------保存成功!------\n");fclose(fp);}void menu() // 主界面函数{int num;printf(" \n ****************车辆违章管理系统****************\n"); printf(" ————————————————————————\n"); printf(" ↓功能菜单↓\n");printf(" ---------------------------------------------- \n");printf("\n");printf(" 0.系统帮助及说明 1.载入罚单信息\n"); printf("\n");printf(" 2.查询罚单信息 3.修改罚单信息\n"); printf("\n");printf(" 4.增加罚单信息 5.按车牌号删除信息\n"); printf("\n");printf(" 6.显示当前信息7.保存当前罚单信息\n"); printf("\n");printf(" 8.退出系统\n"); printf("\n");printf(" ----友情提醒:操作前请先载入罚单信息!----\n");printf("请选择菜单编号:");scanf("%d",&num);switch(num){case 0:help();break;case 1:readfile();break;case 2:seek();break;case 3:modify();break;case 4:insert();break;case 5:del();break;case 6:display();break;case 7:save();break;case 8:k=0;break;default:printf("请在0-8之间选择\n");}}。
C语言程序设计课程设计材料学生姓名:朱明杰学号:031410627 系 (院):自动化学院设计题目: 交通处罚单管理系统完成日期: 2015年5月课程设计目的 (3)课程设计内容 (3)总体设计 (3)详细设计………………………………………4运行结果………………………………………8程序调试………………………………………10编程体会 (11)一、课程设计目的1.通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2.通过课程设计,进一步掌握C有并重要的数据结构。
掌握并熟练运用指针、链表、结构体、文件等数据结构。
3.通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。
4.通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个中小型系统。
5.通过课程设计,加强了自己的程序分析能力。
6.通过课程设计,完成了交通处罚单管理系统,很多功能还待完善。
二、课程设计内容用C语言编写软件完成以下任务:1交通处罚单基本信息输入(数据包括处罚单号码,车牌号码,姓名,开单警察的信息ID,处罚时间等),信息保存在data.txt文件中,2交通处罚单基本信息浏览。
将文件内所有的交通处罚单信息全部输出展现出来。
3交通处罚单基本信息查询。
可以查询特定的交通处罚单信息。
4交通处罚单基本信息统计。
可以查询某一个时间段的所有的交通处罚单信息。
5 交通处罚单基本信息删除。
删除不需要的交通处罚单信息。
三、总体设计本系统的功能模块如图1所示,主要有以下模块:(1)交通处罚单基本信息输入:构造函数int input(),对产生新的交通处罚单的信息进行输入。
(2)交通处罚单基本信息输出:构造函数void display(),全部输出已被录入交通处罚单的所有信息。
(3)交通处罚单基本信息删除:构造函数int delete(),经确认后调用delete函数删除该姓名的记录。
C语言课程设计报告第二题交通处罚单管理程序一.程序名称:交通罚单管理二.程序功能:1.每次输入一条记录(司机名字,车牌号,警察名字,警察编号,开具罚单的年月日); 2.显示所有记录(一屏十条记录);3.按司机名字删除一条记录; 4.按司机名字升序排序;5.按司机名字升序插入一条记录;6.按司机名字查询记录;7.从文件读取记录.;8. 将所有记录输出到文件.三.子函数功能:1. int (Traffic trafList[],int n) 从键盘输入一条记录。
两个参数分别是储存记录的数组的指针和输入前已有记录条数,返回输入后记录数目。
2. void Display(Traffic trafList[],int n) 按每屏显示十条记录显示,输入“exit”退出,“c”显示下一屏。
3. int Delete_a_record(Traffic trafList[],int n,char *name) 按司机名字删除一条记录,三个参数分别是储存记录的数组的指针,删除前记录数,待删除司机的名字,返回删除后记录数目。
4. void Sort_by_Name(Traffic trafList[],int n) 按司机名字升序排序。
两个参数分别是储存记录的数组的指针和已有记录条数。
5. int Insert(Traffic trafList[],int n,Traffic *s) 按司机名字升序插入一条记录,三个参数分别是储存记录的数组的指针,插入前已有记录条数,指向待插入记录的指针,返回插入后记录数目。
6. int Query(Traffic trafList[],int n,char *name) 按司机名字查询并输出相应记录,三个参数分别是储存记录的数组的指针,已有记录条数,指向待查询司机名字的指针。
若查询失败返回-1.7. int AddfromText(Traffic trafList[],int n,char *filename) 从文件导入若干条记录,三个参数分别是储存记录的数组的指针,插入前已有记录条数,指向文件名字的指针,返回导入后记录数目。
C语言程序设计之交通处罚单管理系统报告内含代码
C语言程序设计
姓名:张强强
学号: 1003695
班序号:011121
前言:
C语言是近年来国内得到迅速推广使用的一种计算机语言。
C语言程序设计课程是计算机专业和信息管理专业的核心专业基础课,无论是计算机专业还是非计算器专业的学生,学习好C语言是非常重要的。
一.交通处罚单管理要求:
交通处罚单涉及到车辆,驾驶员和开单交警的信息,还有交通处罚单的号码,处罚时间等信息。
功能:
(1) 要求能够输入,删除,浏览交通处罚单信息。
(2) 能够按车辆,驾驶员和开单交警进行查询。
(3) 统计某时间段某个驾驶员的交通处罚数目及交通处罚单号码。
(一)需求分析
交通处罚单信息用文件存储,提供文件的输入输出操作;要求能
够输入,输出,删除,浏览交通处罚单信息,因而要提供输入,删除和
显示操作;要实现按车辆,驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。
(二)总体设计
整个管理系统被设计为信息输入模块,信息删除模块,信息浏览
模块,信息查询模块和信息统计模块等。
如下图:
(三)详细设计
1.主函数实现的是显示菜单以及函数调用,其中各功能模块用菜
单方式选择。
程序:
int main()
{
int n; /**变量n保存选择菜单数字**/
printf("\n\n")
printf ( " ****************菜单*****************\n");
printf ( " * *\n");
printf ( " * 1.输入 2.删除 *\n");
printf ( " * *\n");
printf ( " * 3.浏览 4.查询 *\n");
printf ( " * *\n");
Printf ( " * 5.统计 6.退出*\n");
printf ( "* *\n");
printf("****************************************\n"); printf("请选择功能菜单: [ ]\b\b");
scanf("%d",&n);
if (n<1||n>7) n=7;
switch (n) /***选择功能***/
{case 1:shuru();liulan();main();break; /***输入模块***/ case 2:shanchu();liulan();main();break; /***删除模块***/ case 3:liulan();main();break; /*** 浏览模块***/
case 4:chaxun();main();break; /*** 查询模块***/ case 5:tongji();main();break; /*** 统计模块***/
case 6:exit(0); break; /***退出***/
case 7: printf("error\n");
}
}
2.信息储存函数。
void save()
{FILE *fp;
int i;
if((fp=fopen("fadan.txt","w"))==NULL)。