1、C语言课程设计报告交通处罚单管理程序C语言课程设计报告题目:交通处罚单管理程序学号 021410219姓名 李林 指导教师 张定会 完成日期 2015.5.8 一、功能介绍用结构体数组结构实现简单的交通处罚单管理功能,要求具有以下功能:(1)可以输入,删除,显示,修改某个驾驶员的交通处罚信息;(2)可以按驾驶员查询交通处罚单。程序执行过程为:循环显示主菜单,用户在Give you choice:处输入选项,即按照功能列表输入08中的任意一个数字。按回车后,执行相应功能。各项菜单功能:(1)Input Record(输入若干条记录)从键盘上一次输入一张交通处罚单的信息(一条记录),依次存放到结构
2、体数组里。插入一条记录后,显示提示信息:确认是否输入下一条记录,如确认,继续输入,否则,退出输入功能。(2)Display All Record(显示所有记录)按顺序显示数组中所有记录,每屏显示10条记录。每显示10条,按键继续显示下一屏。(3)Delete a record(按姓名查找,删除一条记录)输入待删除记录的姓名,显示提示信息,让用户再次确认是否要删除。确认后,将该姓名的记录删除。(4)Sort(排序)以姓名为序升序排列数组。(5)Insert a Record(插入一条记录)在以姓名为序排列数组中插入一条记录,插入后,数组仍然有序。输出插入成功信息。(6) Query(查找并显示一
3、个记录)输入驾驶员姓名,查找包含该驾驶员名字的记录,并显示该驾驶员的所有罚单信息。(7)Add Records from a Text file (从正文文件添加数据到结构体数组中)用户可提前建立一个正文文件data.txt,存放多个带加入的记录。提示输入正文的文件名,然后从该文件中一次性加入多条处罚单记录。文件data.txt格式如下:2 /表示带添加的记录数/WangXiao 95 DingFei 000001 2013 1 23 LiuLin 87 CaiMing 000002 2013 1 24(8)Write to a Text file将数组中的全部记录写入文件records.tx
4、t,要求文件格式和data.txt相同。(0)Quit(退出交通处罚单管理程序)二、主要问题及解决方法在写程序中遇到的问题是:开始时无法正确完成“确认后再继续”的问题再后来写附加程序对数组自动扩充有些疑惑。面对遇到的问题查阅资料和书籍,一步步的调试,解决了很多问题。对不熟悉的函数不断摸索,试用直到熟练运用,有些语句想不出来就借助流程图去构造。对程序的优化,熟练运用语句,能力的提高让我解决了不少困难心得体会:完成之后程序运行时会出现数组输出不正确的现象,不得不对每个函数进行单步调试,解决了很多问题之后,发现编程有时候会犯一些很低级的错误,要认真检查,不遗漏一处语句。有时绞尽脑汁想出一堆语句,其实
5、一两句就能完成。程序优化真的很重要,仍需不断探索前行。三、算法实现Input RecordDisplay all recordDelete arecordDelete a recordSortSortInsert arecordInsert a recordQueryQuery a recordInsert arecordAddfromtextWriteto TextQuit四、源程序及注释#include#include#include#includetypedef struct /定义一个结构体类型struct Traffic/char driver10; /司机姓名/int car; /
6、驾驶的车牌号/char police10; /开罚单的交警姓名/int num; /罚单编号/int year; /开罚单的年/int month; /开罚单的月/int date; /开罚单的日/Traffic;/对所有调用函数进行声明/int menu_select(); /菜单 /int Input(Traffic trafList,int n); /函数1/void Display(Traffic trafList,int n); /函数2/int Delete(Traffic trafList,int n,char *name); /函数3/int Delete_a_record(T
7、raffic trafList,int n);void sort_by_name(Traffic trafList,int n); /函数4/ int Insert(Traffic trafList,int n,Traffic*s); /函数5/int Insert_a_record(Traffic trafList,int n);int Query(Traffic trafList,int n,Traffic*name); /函数6/void Query_a_record(Traffic trafList,int n);int AddfromText(Traffic trafList,int
8、 n,char*filename); /函数7/void WritetoText(Traffic trafList,int n,char*filename);/函数8/void main()static int n=0; /定义一静态整型变量n/Traffic trafList1000;char filename120,filename2=records.txt;for(;)switch(menu_select() /调用menu select函数输出菜单/ case 1: /输入1调用Input Record函数/system(cls);printf(Input Recordn); n=In
9、put(trafList,n);system(pause);break;case 2: /输入2调用Display all record函数/system(cls);printf(Display all recordn); Display(trafList,n);system(pause);break;case 3: /输入3调用Delete a record函数/system(cls);printf(Delete a recordn);n=Delete_a_record(trafList,n); system(pause);break;case 4: /输入4调用Sort函数/ system
10、(cls);printf(Sortn);sort_by_name(trafList,n); system(pause);break;case 5: /输入5调用Insert a record函数/system(cls);printf(Insert a recordn);n=Insert_a_record(trafList,n); system(pause);break;case 6: /输入6调用Query函数/system(cls);printf(Queryn);Query_a_record(trafList,n); system(pause);break;case 7: /输入7调用Add
11、 records from a Text file函数/system(cls);printf(Add records from a Text filen); printf(请输入正文文件的文件名n); /此处输入文件名进行整批输入/scanf(%s,filename1);n=AddfromText(trafList,n,filename1);system(pause);break; case 8: /输入8调用Write to a Text File函数/ system(cls);printf(Write to a Text Filen);WritetoText(trafList,n,file
12、name2); system(pause); break; case 0: /输入0调用Quit函数/printf(Quit!n);system(pause); exit(0);int menu_select()char c;dosystem(cls);printf(1.Input Recordn);printf(2.Display all recordn);printf(3.Delete a recordn);printf(4.Sortn);printf(5.Insert a recordn);printf(6.Queryn);printf(7.Add records from a Text
13、 filen); printf(8.Write to a Text filen);printf(0.Quit!n);printf(Give your choice(0-8):);c=getchar(); /菜单栏选择命令/while(c8);return(c-0);int Input(Traffic trafList,int n)char k,i;scanf(%s%d%s%d%d%d%d,trafListn.driver,&trafListn.car,trafListn.police,&trafListn.num,&trafListn.year,&trafListn.month,&trafLi
14、stn.date);printf(确认是否输入下一条记录Y or Nn);scanf(%c,&i); /两次scanf消除最上面scanf输入影响/scanf(%c,&k);n+;if(k=y|k=Y)printf(输入:n);n=Input(trafList,n); /从键盘输入数据存到数组traflist中/elsereturn(n);return n;void Display(Traffic trafList,int n)int i;char k;for(i=0;in;i+)if(i+1)%10=0)printf(%st%dt%st%dt%dt%dt%dn,trafListi.drive
15、r,trafListi.car,trafListi.police,trafListi.num,trafListi.year,trafListi.month,trafListi.date);system(pause);system(cls); /每显示10条数据,换下一屏/printf(Display all recordn);elseprintf(%st%dt%st%dt%dt%dt%dn,trafListi.driver,trafListi.car,trafListi.police,trafListi.num,trafListi.year,trafListi.month,trafListi.
16、date); /将数组数据输出到显示器/int Delete(Traffic trafList,int n,char *name)int i,j;for(i=0;in;i+)if(!strcmp(name,trafListi.driver) /删除姓名为name的记录/for(j=i;jn-1;j+)trafListj=trafListj+1;n-=1;return(n);int Delete_a_record(Traffic trafList,int n)char name20;int c;printf(请输入待删除者姓名n);scanf(%s,name);printf(请再次确认是否删除,
17、确认请按1n); scanf(%d,&c); /确认后删除,返回记录数/if(c=1)n=Delete(trafList,n,name);printf(删除成功n);return(n);void sort_by_name(Traffic trafList,int n)int i,j,p;Traffic t;for(i=0;in-1;i+) /选择法排序,按姓名升序排序/ p=i;for(j=i+1;jn;j+)if(strcmp(trafListj.driver,trafListp.driver)0)p=j;if(p!=i)t=trafListp;trafListp=trafListi;tra
18、fListi=t;int Insert(Traffic trafList,int n,Traffic*s)trafListn=*s;n+=1;sort_by_name(trafList,n); /插入这组数据,并排序/return(n);int Insert_a_record(Traffic trafList,int n)Traffic s;printf(请输入信息n); /输入数据/scanf(%s%d%s%d%d%d%d,s.driver,&s.car,s.police,&s.num,&s.year,&s.month,&s.date);n=Insert(trafList,n,&s);ret
19、urn(n);int Query(Traffic trafList,int n,char*name)int i,j;for(i=0;in;i+)if(!strcmp(name,trafListi.driver) return(i); / 查找姓名为name的记录/if(i=n)return(-1);void Query_a_record(Traffic trafList,int n)char name20;int k;printf(请输入待查找人的姓名n);scanf(%s,name);k=Query(trafList,n,name); /输出查找后信息/if(k=-1)printf(无此罚单
20、n);if(k!=-1)printf(查找成功,该司机处罚单如下:n);printf(%st%dt%st%dt%dt%dt%dn,trafListk.driver,trafListk.car,trafListk.police,trafListk.num,trafListk.year,trafListk.month,trafListk.date);int AddfromText(Traffic trafList,int n,char*filename)file*fp1;int i,k;Traffic s;if(fp1=fopen(filename,r)=NULL)printf(Can not o
21、pen %s n,filename); return(n); /判断正文文件是否存在/fscanf(fp1,%d,&k);for(i=1;i=k;i+)fscanf(fp1,%s%d%s%d%d%d%d,s.driver,&s.car,s.police,&s.num,&s.year,&s.month,&s.date);n=Insert(trafList,n,&s);/将文件里的信息存入数组trafList/fclose(fp1);return(n);void WritetoText(Traffic trafList,int n,char*filename)int i;file *fp;if(f
22、p=fopen(filename,w)=NULL)printf(can not open records.txt!n);exit(1);fprintf(fp,driver car police num year month daten);fprintf(fp,-n);for(i=0;i= ArrSize)ArrSize += 10;trafDynList= (Traffic*)realloc(trafDynList, ArrSize * sizeof(Traffic);scanf(%s%d%s%d%d%d%d,trafDynList*n.driver,&trafDynList*n.car,trafDynList*n.police,&trafDynList*n.num,&t
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1