C语言程序设计之交通处罚单管理系统.doc

上传人:文库蛋蛋多 文档编号:2384708 上传时间:2023-02-17 格式:DOC 页数:23 大小:169.50KB
返回 下载 相关 举报
C语言程序设计之交通处罚单管理系统.doc_第1页
第1页 / 共23页
C语言程序设计之交通处罚单管理系统.doc_第2页
第2页 / 共23页
C语言程序设计之交通处罚单管理系统.doc_第3页
第3页 / 共23页
C语言程序设计之交通处罚单管理系统.doc_第4页
第4页 / 共23页
C语言程序设计之交通处罚单管理系统.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《C语言程序设计之交通处罚单管理系统.doc》由会员分享,可在线阅读,更多相关《C语言程序设计之交通处罚单管理系统.doc(23页珍藏版)》请在三一办公上搜索。

1、一、 题目要求【要求】:交通处罚单涉及到车辆,驾驶员和开单交警的信息,还有交通处罚单号码,处罚时间等信息。【功能】:(1) 要求可以输入,删除,浏览交通处罚单信息。 (2)可以按车辆,驾驶员和开单交警查询。(3)统计某时间段某个驾驶员的交通处罚数目及交通处罚单号码。 【提示】:(1)需求分析:交通处罚单信息用文件存储,提供文件的输输出操作;要求可以输入,输出,删除,浏览交通处罚单信息,因而要提供输入,删除和显示操作;要实现按车辆,驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。 (2)总体设计:整个管理系统被设计为信息录入模块,信息删除模块,信息浏览模块

2、,信息查询模块,信息统计模块。交通处罚单管理系统信息输入信息删除信息浏览信息查询信息统计退出二、详细设计:(一)处罚单管理系统界面函数【功能说明】此函数包括的功能包括信息录入,信息删除,信息浏览,信息查询(可分别根据车牌号、罚单号、开单交警号进行查询)、信息统计和退出。【主函数流程图】显示一系列功能选项输入n,判断n是否是16根据n的值调用各功能模块函数【主函数程序】void menu() int n; int r; do system(cls);printf(nttt 交通处罚单管理系统n); printf(*); printf( 菜单: 1-信息录入 n); printf( 2-信息删除

3、n);printf( 3-信息浏览 n);printf( 4-信息查询 n);printf( 5-信息统计 n);printf( 6-退出系统 n); printf(*); printf(请从输入数字选择相应的功能:); scanf(%d,&n); if(n6) 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:exi

4、t(0); (二)各功能模块设计1、录入处罚单模块【功能说明】处罚单包含的内容有车牌号,驾驶员姓名,交警姓名,交警号,处罚单号和处罚日期,因此相应的函数也应包含这些内容,在这个函数所控制的操作会依次提示输入以上内容。特别的,罚单号不能有重复,若输入的罚单号有重复,操作界面会提示罚单好重复,请重新输入。用结构体数组的形式存放若干条处罚单信息。struct Plist /处罚单 char vno20; /车牌号 char dname20; /驾驶员姓名 char pname20; /交警姓名 char pno20; /交警编号 char no20; /处罚单编号 char date20; /处罚日

5、期 listN; /处罚单数组【注意】listN中的N为处罚单条数,本程序采用宏定义#define N 100。【输入模块流程图】输入用户要输入处罚单纪录的条数j能否打开文件i从0到j-1依次输入处罚单信息,并保存到文件中j开始选择浏览还是返回主菜单【输入模块程序】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 menun); getchar

6、(); menu(); printf(n请输入处罚单数量:); scanf(%d,&i); printf(nn); for(j=0;ji;j+) printf(输入第%d张处罚单的:n,j+1); printf(n 车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20101112)n); printf(n注意:中间用空格隔开!n);scanf(%s%s%s%s%s%s,&listj.vno,&listj.dname,&listj.pname,&listj.pno,&listj.no,&listj.date); for(j=0;jN) printf(n结构体数组数的N太小,请先修改N的值

7、n); printf(npress enter to return menun); getchar(); getchar(); menu(); printf(n); for(j=0;ji;j+) printf(输入第%d张处罚单的:n,j+1); printf(n车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20101112)n);printf(n注意:中间用空格隔开!n); scanf(%s%s%s%s%s%s,&listj.vno,&listj.dname,&listj.pname,&listj.pno,&listj.no,&listj.date); for(j=0;ji;j+)

8、 fprintf(fp,n%st%st%st%st%st%s,listj.vno,listj.dname,listj.pname,listj.pno,listj.no,listj.date); fclose(fp); printf(n保存成功!); printf(npress enter to return menun); getchar(); getchar(); menu();2、删除处罚单模块:【功能说明】操作者先输入删除命令2,在按操作要求输入要删除的处罚单号码,系统浏览处罚单,找到相关信息后,在删除这张处罚信息,再把这个信息的尾地址结到下一个信息的头地址上从而达到删除此信息的作用。【

9、删除模块流程图】打开文件输入要删除的处罚单的处罚单号s1s1=listj.no关闭文件关闭文件把要求删除的罚单后面的处罚单信息依次覆盖前一个信息能否打开文件回到主函数依次从文件中读取处罚单信息将新生成的结构体数组保存在源文件中文件能否打开没找到该学号文件打不开【删除模块程序】void dele() int j; int num; int f=-1; FILE*fp1,*fp2; char s120; if(fp1=fopen(list.txt,r)=NULL) printf(can not open filen); printf(npress enter to return menun); g

10、etchar(); getchar(); menu(); for(j=0;!feof(fp1);j+) /读取文件 fscanf(fp1,%s%s%s%s%s%s,&listj.vno,&listj.dname,&listj.pname,&listj.pno,&listj.no,&listj.date); num=j; fclose(fp1); printf(请输入要删除的处罚单的编号n); scanf(%s,s1); for(j=0;jnum;j+) if(strcmp(s1,listj.no)=0) f=j; if(fnum-1) for(j=f;jnum-1;j+) strcpy(lis

11、tj.vno,listj+1.vno); strcpy(listj.dname,listj+1.dname); strcpy(listj.pname,listj+1.pname); strcpy(listj.pno,listj+1.pno); strcpy(listj.no,listj+1.no); strcpy(listj.date,listj.date); if(fp2=fopen(list.txt,w)=NULL) printf(文件打不开!n); printf(npress enter to return menun); getchar(); menu(); for(j=0;jnum-

12、1;j+) /保存文件 fprintf(fp2,n%st%st%st%st%st%s,listj.vno,listj.dname,listj.pname,listj.pno,listj.no,listj.date); fclose(fp2); printf(n删除成功!n); printf(npress enter to return menun); getchar(); getchar(); menu(); if(f0) printf(n没有找到该学号的记录:n); printf(npress enter to return menun); getchar(); getchar(); men

13、u(); 3、信息浏览模块:【功能说明】先输入命令3,系统将打开已存在的文件(如果不存在则提示无法打开),并将已经录入的处罚单信息依次从文件中读出来,显示在屏幕上。【信息浏览模块流程图】打开文件逐条显示文件中的处罚单信息关闭文件返回主函数 【删除模块程序】void browse() int j; int num; FILE*fp; if(fp=fopen(list.txt,r)=NULL) printf(can not open filen); printf(npress enter to return menun); getchar(); getchar(); menu(); for(j=0

14、;!feof(fp);j+) /读取文件 fscanf(fp,%s%s%s%s%s%s,&listj.vno,&listj.dname,&listj.pname,&listj.pno,&listj.no,&listj.date); fclose(fp); num=j; printf(n已添加%d条记录nn,num); printf(车牌号 驾驶员姓名 交警姓名 交警编号 处罚单编号 处罚日期n); for(j=0;jnum;j+) /输出 printf(n%st%st%st%st%st%s,listj.vno,listj.dname,listj.pname,listj.pno,listj.no

15、,listj.date); printf(npress enter to return menun); getchar(); getchar(); menu();4、信息查询模块:【功能说明】先输入命令4,系统将刷新界面进入到一个查询专用界面。用户可以分别根据车牌号、驾驶员姓名和开单交警姓名进行查询。用户选择数字进行相应的操作。【信息查询模块流程图】打开文件输入用户要查询的信息x用户选择输入查询的车牌号n输入查询的驾驶员姓名name输入查询的开单警察name输入错误listj.vno=nostrcmp(listj.pname)=name)=0strcmp(listj.dname,name)=0

16、显示“没有找到该班号的记录”关闭文件返回主菜单显示找到的此罚单信息显示找到的此罚单信息显示“没有找到该班号的记录”【信息查询模块程序】void search() int n; int r; do system(cls); printf(n请选择查询类型:nt1-按车牌号 2-按驾驶员姓名3:按开单交警姓名 4-返回主菜单n); printf(n请输入数字选择:); scanf(%d,&n); if(n4) r=1; getchar(); else r=0;while(r=1);switch(n) case 1:vno_search();break;case 2:dna_search();bre

17、ak;case 3:pna_search();break;case 4:menu(); (1)按车牌号查询系统首先进行检查,如果要打开的文件不存在,则会进行提示。如果能打开,则将文件中的内容读入系统中以备查询。当用户输入车牌号时,系统将依次将从文件中读入的处罚单中的车牌号信息与用户录入车牌号进行比对,并最终将查找到的与该车牌号有关的的所有处罚单信息打印在屏幕上。如果没有找到,则打印没有找到记录。void vno_search() int f=-1; int num; int j; char no20; FILE*fp; if(fp=fopen(list.txt,r)=NULL) printf(

18、文件打不开!n); printf(npress enter to return menun); getchar(); menu(); for(j=0;!feof(fp);j+) /读取文件 fscanf(fp,%s%s%s%s%s%s,&listj.vno,&listj.dname,&listj.pname,&listj.pno,&listj.no,&listj.date); num=j; fclose(fp); printf(n请输入车牌号:); scanf(%s,no); printf(n罚单的信息为:nn); printf(车牌号 驾驶员姓名 交警姓名 交警编号 处罚单编号 处罚日期n)

19、; for(j=0;jnum;j+) if(strcmp(no,listj.vno)=0) f=j;printf(n%st%st%st%st%st%s,listj.vno,listj.dname,listj.pname,listj.pno,listj.no,listj.date); if(f0)printf(n没有找到该班号的记录!n); printf(npress enter to return sub menun); getchar(); getchar(); search();(2)按驾驶员姓名查询系统首先进行检查,如果要打开的文件不存在,则会进行提示。如果能打开,则将文件中的内容读入系

20、统中以备查询。当用户输入驾驶员姓名时,系统将依次将从文件中读入的处罚单中的驾驶员姓名信息与用户录入的驾驶员姓名进行比对,并最终将查找到的与驾驶员姓名有关的所有处罚单信息打印在屏幕上。如果没有找到,则打印没有找到记录。void dna_search() int f=-1; int num; int j; char name20; FILE*fp; if(fp=fopen(list.txt,r)=NULL) printf(文件打不开!n); printf(npress enter to return menun); getchar(); menu(); for(j=0;!feof(fp);j+)

21、/读取文件 fscanf(fp,%s%s%s%s%s%s,&listj.vno,&listj.dname,&listj.pname,&listj.pno,&listj.no,&listj.date); num=j; fclose(fp); printf(n请输入驾驶员的姓名:); scanf(%s,name); printf(n罚单的信息为:nn); printf(车牌号 驾驶员姓名 交警姓名 交警编号 处罚单编号 处罚日期n); for(j=0;jnum;j+) if(strcmp(name,listj.dname)=0) f=j;printf(n%st%st%st%st%st%s,list

22、j.vno,listj.dname,listj.pname,listj.pno,listj.no,listj.date); if(f0)printf(n没有找到该班号的记录!n); printf(npress enter to return sub menun); getchar(); getchar(); search();(3)按开单交警姓名查询系统首先进行检查,如果要打开的文件不存在,则会进行提示。如果能打开,则将文件中的内容读入系统中以备查询。当用户输入开单交警姓名时,系统将依次将从文件中读入的处罚单中的开单交警姓名信息与用户录入的开单交警姓名进行比对,并最终将查找到的与开单交警姓名有

23、关的所有处罚单信息打印在屏幕上。如果没有找到,则打印没有找到记录。void pna_search() int f=-1; int num; int j; char name20; FILE*fp; if(fp=fopen(list.txt,r)=NULL) printf(文件打不开!n); printf(npress enter to return menun); getchar(); menu(); for(j=0;!feof(fp);j+) /读取文件 fscanf(fp,%s%s%s%s%s%s,&listj.vno,&listj.dname,&listj.pname,&listj.pn

24、o,&listj.no,&listj.date); num=j; fclose(fp); printf(n请输入开单交警的姓名:); scanf(%s,name); printf(n罚单的信息为:nn); printf(车牌号 驾驶员姓名 交警姓名 交警编号 处罚单编号 处罚日期n); for(j=0;jnum;j+) if(strcmp(name,listj.pname)=0) f=j;printf(n%st%st%st%st%st%s,listj.vno,listj.dname,listj.pname,listj.pno,listj.no,listj.date); if(f0) print

25、f(n输入错误!请重新输入!n); getchar(); getchar(); count(); else for(j=0;j=0)&(strcmp(listj.date,time2)=0) f=j; total+; printf(n罚单号:%sn,listj.no); if(f0)printf(n没有找到记录!n); printf(n罚单总数为:%dn,total); printf(npress enter to return menun); getchar(); getchar(); menu();三、上机操作:1、数据源(1)处罚单号01 车牌号码2001 司机姓名楼超阳 警察姓名权永彬

26、 交警号110 处罚日期20110601(2)处罚单号02 车牌号码2002 司机姓名禇志伟 警察姓名孟汉青 交警号111 处罚日期20110602(3)处罚单号03 车牌号码2003 司机姓名李进福 警察姓名权永彬 交警号110 处罚日期20110603(4)处罚单号04 车牌号码2001 司机姓名楼超阳 警察姓名陶志楠 交警号112 处罚日期20110604(5)处罚单号05 车牌号码2003 司机姓名李进福 警察姓名刘正芳 交警号113 处罚日期20110605 2、 运行结果(1) 主菜单函数(2)信息录入模块(3)信息删除模块 (4)信息浏览模块(5)按车牌号查找并浏览相关信息模块

27、(6)按驾驶员姓名查询并浏览相关信息模块 (7)按开单交警姓名查询并浏览相关信息模块 (8)信息统计模块四、实习总结在这个星期里,我们在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难。在编写C程序的过程中,得到了老师和同学耐心的指导和帮助,很多问题都是在老师和同学的帮助下我才能够解决的,没有你们的帮助我部可能顺利的完成此次编程。以前对C的概念比较模糊,但是在这次实习中我发现了C在生产生活中有着广泛的应用,比如我这次编写

28、的交通交通处罚单管理系统,还有其他同学编写的一些等等。在实际交通管理中运用此类程序会节省大量的体力和脑力劳动。而且使得交通管理比较容易,避免了以往的那种繁琐的人力劳动。准确率也会大幅度上升,不会造成因为人为失误造成不必要的麻烦。以下是这次实习对我的帮助和我的一点心得体会:1、加深了对课堂讲授内容的理解课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机

29、实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去掩盖程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况

30、发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。2、熟悉了程序开发环境、学习计算机系统的操作方法一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓环境就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。3、学习了上机调试程序完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误

31、,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。总之,通过该实例的设计分析,我初步掌握了模块化设计方法,理解和运用结构化程设计的思想和方法。学会了用流程图表示算法,掌握和提高了利用C语言进行程序设计的能力。在各方面都得到了提高。更重要的是这次实习让我了解到了我的不足,该如何让自己的编程能力得到提高,在今后的学习生活里我会多多的上机编程,让自己能力得到进一步的提高。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号