C语言课程设计报告交通处罚单管理程序.docx

上传人:b****5 文档编号:4504832 上传时间:2022-12-01 格式:DOCX 页数:20 大小:26KB
下载 相关 举报
C语言课程设计报告交通处罚单管理程序.docx_第1页
第1页 / 共20页
C语言课程设计报告交通处罚单管理程序.docx_第2页
第2页 / 共20页
C语言课程设计报告交通处罚单管理程序.docx_第3页
第3页 / 共20页
C语言课程设计报告交通处罚单管理程序.docx_第4页
第4页 / 共20页
C语言课程设计报告交通处罚单管理程序.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告交通处罚单管理程序.docx

《C语言课程设计报告交通处罚单管理程序.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告交通处罚单管理程序.docx(20页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告交通处罚单管理程序.docx

C语言课程设计报告交通处罚单管理程序

C语言课程设计报告

题目:

交通处罚单管理程序

学号021410219

姓名   李林      

指导教师 张定会 

 

完成日期 2015.5.8    

一、功能介绍

用结构体数组结构实现简单的交通处罚单管理功能,要求具有以下功能:

(1)可以输入,删除,显示,修改某个驾驶员的交通处罚信息;

(2)可以按驾驶员查询交通处罚单。

程序执行过程为:

循环显示主菜单,用户在Giveyouchoice:

处输入选项,即按照功能列表输入0~8中的任意一个数字。

按回车后,执行相应功能。

各项菜单功能:

(1)InputRecord(输入若干条记录)

从键盘上一次输入一张交通处罚单的信息(一条记录),依次存放到结构体数组里。

插入一条记录后,显示提示信息:

确认是否输入下一条记录,如确认,继续输入,否则,退出输入功能。

(2)DisplayAllRecord(显示所有记录)

按顺序显示数组中所有记录,每屏显示10条记录。

每显示10条,按键继续显示下一屏。

(3)Deletearecord(按姓名查找,删除一条记录)

输入待删除记录的姓名,显示提示信息,让用户再次确认是否要删除。

确认后,将该姓名的记录删除。

(4)Sort(排序)

以姓名为序升序排列数组。

(5)InsertaRecord(插入一条记录)

在以姓名为序排列数组中插入一条记录,插入后,数组仍然有序。

输出插入成功信息。

(6)Query(查找并显示一个记录)

输入驾驶员姓名,查找包含该驾驶员名字的记录,并显示该驾驶员的所有罚单信息。

(7)AddRecordsfromaTextfile(从正文文件添加数据到结构体数组中)

用户可提前建立一个正文文件data.txt,存放多个带加入的记录。

提示输入正文的文件名,然后从该文件中一次性加入多条处罚单记录。

文件data.txt格式如下:

2      //表示带添加的记录数//

WangXiao 95 DingFei0000012013 1 23

LiuLin   87 CaiMing0000022013 1 24

(8)WritetoaTextfile

将数组中的全部记录写入文件records.txt,要求文件格式和data.txt相同。

(0)Quit(退出交通处罚单管理程序)

二、主要问题及解决方法

在写程序中遇到的问题是:

开始时无法正确完成“确认后再继续”的问题再后来写附加程序对数组自动扩充有些疑惑。

面对遇到的问题查阅资料和书籍,一步步的调试,解决了很多问题。

对不熟悉的函数不断摸索,试用直到熟练运用,有些语句想不出来就借助流程图去构造。

对程序的优化,熟练运用语句,能力的提高让我解决了不少困难

心得体会:

完成之后程序运行时会出现数组输出不正确的现象,不得不对每个函数进行单步调试,解决了很多问题之后,发现编程有时候会犯一些很低级的错误,要认真检查,不遗漏一处语句。

有时绞尽脑汁想出一堆语句,其实一两句就能完成。

程序优化真的很重要,仍需不断探索前行。

三、算法实现

 

InputRecord

 

Displayallrecord

 

Deletearecord

Deletearecord

 

Sort

 

 

Sort

 

Insertarecord

Insertarecord

 

Query

Queryarecord

 

Insertarecord

Addfromtext

 

WritetoText

 

Quit

 

四、源程序及注释

#include

#include

#include

#include

typedefstruct   //定义一个结构体类型structTraffic//

{

chardriver[10];   //司机姓名//

intcar;       //驾驶的车牌号//

charpolice[10];   //开罚单的交警姓名//

intnum;       //罚单编号//

intyear;      //开罚单的年//

intmonth;      //开罚单的月//

intdate;      //开罚单的日//

}Traffic;

//对所有调用函数进行声明//

intmenu_select();               //菜单//

intInput(TraffictrafList[],intn);         

//函数1//

voidDisplay(TraffictrafList[],intn);       

//函数2//

intDelete(TraffictrafList[],intn,char*name);    

//函数3//

intDelete_a_record(TraffictrafList[],intn);

voidsort_by_name(TraffictrafList[],intn);     

//函数4//       

intInsert(TraffictrafList[],intn,Traffic*s);     

//函数5//

intInsert_a_record(TraffictrafList[],intn);

intQuery(TraffictrafList[],intn,Traffic*name);   

//函数6//

voidQuery_a_record(TraffictrafList[],intn);

intAddfromText(TraffictrafList[],intn,char*filename);

//函数7//

voidWritetoText(TraffictrafList[],intn,char*filename);

//函数8//

voidmain()

{

staticintn=0;         //定义一静态整型变量n//

TraffictrafList[1000];

charfilename1[20],filename2[]="records.txt";

for(;;)

{

switch(menu_select())//调用menuselect函数输出菜单//

{

case1:

 //输入1调用InputRecord函数//

system("cls");

printf("InputRecord\n");                  n=Input(trafList,n);

system("pause");

break;

case2:

 //输入2调用Displayallrecord函数//

system("cls");

printf("Displayallrecord\n");                Display(trafList,n);

system("pause");

break;

case3:

 //输入3调用Deletearecord函数//

system("cls");

printf("Deletearecord\n");

n=Delete_a_record(trafList,n);          system("pause");

break;

case4:

 //输入4调用Sort函数//       

system("cls");

printf("Sort\n");

sort_by_name(trafList,n);              system("pause");

break;

case5:

 //输入5调用Insertarecord函数//

system("cls");

printf("Insertarecord\n");

n=Insert_a_record(trafList,n);                system("pause");

break;

case6:

 //输入6调用Query函数//

system("cls");

printf("Query\n");

Query_a_record(trafList,n);                 system("pause");

break;

case7:

//输入7调用AddrecordsfromaTextfile函数//

system("cls");

printf("AddrecordsfromaTextfile\n");          printf("请输入正文文件的文件名\n");    

//此处输入文件名进行整批输入//

scanf("%s",filename1);

n=AddfromText(trafList,n,filename1);

system("pause");

break;

case8:

 //输入8调用WritetoaTextFile函数//

system("cls");

printf("WritetoaTextFile\n");

WritetoText(trafList,n,filename2);    

system("pause");

break;

case0:

 //输入0调用Quit函数//

printf("Quit!

\n");

system("pause");     

exit(0);

}

}

}

intmenu_select()

{

charc;

do{

system("cls");

printf("1.InputRecord\n");

printf("2.Displayallrecord\n");

printf("3.Deletearecord\n");

printf("4.Sort\n");

printf("5.Insertarecord\n");

printf("6.Query\n");

printf("7.AddrecordsfromaTextfile\n");    printf("8.WritetoaTextfile\n");

printf("0.Quit!

\n");

printf("Giveyourchoice(0-8):

");

c=getchar();     //菜单栏选择命令//

}while(c<'0'||c>'8');

return(c-'0');

}

intInput(TraffictrafList[],intn)

{

chark,i;

scanf("%s%d%s%d%d%d%d",trafList[n].driver,&trafList[n].car,trafList[n].police,&trafList[n].num,&trafList[n].year,&trafList[n].month,&trafList[n].date);

printf("确认是否输入下一条记录YorN\n");

scanf("%c",&i);  //两次scanf消除最上面scanf输入影响//

scanf("%c",&k);n++;

if(k=='y'||k=='Y')

{

printf("输入:

\n");

n=Input(trafList,n);

}         //从键盘输入数据存到数组traflist中//

else

return(n);

returnn;

}

voidDisplay(TraffictrafList[],intn)

{

inti;chark;

for(i=0;i

{

if((i+1)%10==0)

{

printf("%s\t%d\t%s\t%d\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);

system("pause");

system("cls");    //每显示10条数据,换下一屏//

printf("Displayallrecord\n");

}

else

printf("%s\t%d\t%s\t%d\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);

}             //将数组数据输出到显示器//

}

intDelete(TraffictrafList[],intn,char*name)

{

inti,j;

for(i=0;i

{

if(!

strcmp(name,trafList[i].driver))

{             //删除姓名为name的记录//

for(j=i;j

trafList[j]=trafList[j+1];

n-=1;

}

}

return(n);

}

intDelete_a_record(TraffictrafList[],intn)

{

charname[20];intc;

printf("请输入待删除者姓名\n");

scanf("%s",name);

printf("请再次确认是否删除,确认请按1\n");

scanf("%d",&c);     //确认后删除,返回记录数//

if(c==1)

{

n=Delete(trafList,n,name);

printf("删除成功\n");

}

return(n);

}

voidsort_by_name(TraffictrafList[],intn)

{

inti,j,p;

Traffict;

for(i=0;i

{ p=i;

for(j=i+1;j

if(strcmp(trafList[j].driver,trafList[p].driver)<0)p=j;

if(p!

=i)

{t=trafList[p];trafList[p]=trafList[i];trafList[i]=t;}

}

}

intInsert(TraffictrafList[],intn,Traffic*s)

{

trafList[n]=*s;

n+=1;

sort_by_name(trafList,n);    //插入这组数据,并排序//

return(n);

}

intInsert_a_record(TraffictrafList[],intn)

{

Traffics;

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);

return(n);

}

intQuery(TraffictrafList[],intn,char*name)

{

inti,j;

for(i=0;i

{

if(!

strcmp(name,trafList[i].driver)) 

return(i);   //查找姓名为name的记录//

}

if(i==n)return(-1);

}

voidQuery_a_record(TraffictrafList[],intn)

{

charname[20];intk;

printf("请输入待查找人的姓名\n");

scanf("%s",name);

k=Query(trafList,n,name);      //输出查找后信息//

if(k==-1)

printf("无此罚单\n");

if(k!

=-1)

{

printf("查找成功,该司机处罚单如下:

\n");

printf("%s\t%d\t%s\t%d\t%d\t%d\t%d\n",trafList[k].driver,trafList[k].car,trafList[k].police,trafList[k].num,trafList[k].year,trafList[k].month,trafList[k].date);

}

}

intAddfromText(TraffictrafList[],intn,char*filename)

{

file*fp1;

inti,k;

Traffics;

if((fp1=fopen(filename,"r"))==NULL)

{

printf("Cannotopen%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);

}

voidWritetoText(TraffictrafList[],intn,char*filename)

{

inti;

file*fp;

if((fp=fopen(filename,"w"))==NULL)

{

printf("cannotopenrecords.txt!

\n");

exit

(1);

}

fprintf(fp,"driver car police  num  year  month  date\n");

fprintf(fp,"-------------------------------------------------------\n");

for(i=0;i

fprintf(fp,"%s\t%d\t%sf\t%d\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);

}

附加要求

Traffic*Input(Traffic*trafList,int*n);     //函数1//      

Traffic*Insert(Traffic  trafList[],int*n,Traffic*s);

//函数5//

Traffic*Insert_a_record(Traffic*trafList,int*n);

Traffic*AddfromText(Traffic*trafList,int*n,char*filename);//函数7//

voidQuit(Traffic*trafDanList);//函数9//

主函数改动:

intArrSize=10;   //先定义数组长度为10//

voidmain()

{

staticintn=0;

Traffic*trafList=(Traffic*)malloc(ArrSize*sizeof(Traffic));          //定义数组和指针//

Traffic*trafDynList=trafList;

charfilename1[20],filename2[]="records.txt";

for(;;)

{

switch(menu_select())

{

case1:

system("cls");

printf("InputRecord\n");

trafList=Input(trafList,&n);

system("pause");

break;

case5:

system("cls");

printf("Insertarecord\n");

trafList=Insert_a_record(trafList,&n);

system("pause");

break;

case7:

system("cls");

printf("AddrecordsfromaTextFile\n");

printf("请输入正文文件的文件名\n");    

//此处输入文件名进行整批输入//

scanf("%s",filename1);

trafList=AddfromText(trafList,&n,filename1);

system("pause");

break;

}

}

}

调用函数改动:

Traffic*Input(Traffic*trafDynList,int*n)

{

intk;       //  Traffic*p=trafList[n];//

l1:

  if(*n>=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