C语言课程设计报告交通处罚单管理程序.docx
《C语言课程设计报告交通处罚单管理程序.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告交通处罚单管理程序.docx(20页珍藏版)》请在冰豆网上搜索。
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;jtrafList[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;jif(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;ifprintf(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