资源描述
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)
{printf("不能打开");return;}
for(i=0;i<M;i++)
if(fwrite(&TPB[i],sizeof(struct tranficpunishbill),1,fp)!=1)
printf("犯错");
fclose(fp);
}
3. 信息读取函数。
FILE*fp;
if((fp=fopen("fadan.txt","r"))==NULL)
{
printf("不能打开");
exit(0);
}
for(i=0;i<N;i++)
fscanf(fp,"%s%s%s%s%s",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);
fclose(fp);
4. 信息从键盘输入函数。
void shuru()
{
int j;
printf("请输入数据:\n");
for(j=0;j<M;j++)
scanf("%s%s%s%s%s",TPB[j].cp,TPB[j].jz,TPB[j].kdjj,
TPB[j].cfd,TPB[j].cfsj);
save();
return 0;
}
5. 信息显示函数。
void liulan()
{ FILE*fp;
int i,j;
if((fp=fopen("fadan.txt","r+"))==NULL)
{
printf("不能打开");
exit(0);
}
system("cls");
printf("车牌号 驾照号 开单交警号 处罚单号 处罚时间\n");
for(i=0,j=0;i<N;i++,j++)
{
fscanf(fp,"%s%s%s%s%s",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);
printf("%3.2s%10.2s%10.2s%12.2s%12.2s",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);
}
}
6. 统计删除函数。
void shanchu()
{FILE*fp;
int i,k,j=-1;
char m[10],d[10],f[10];
if((fp=fopen("fadan.txt","r"))==NULL) //打开文件
{
printf("不能打开");
exit(0);
}
for(i=0;i<N;i++) //读取文件到结构体中
fscanf(fp,"%s%s%s%s%s",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);
fclose(fp); //关闭文件
system("cls");
printf("删除模块:");
printf("\n\n\n");
printf(" ********************************************\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 1.车牌号 2.驾照号 3.开单交警号 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" ********************************************\n");
printf("\n\n请输入删除选项:");
scanf("%d",&k);
if(k==1)
{
printf("请输入车牌号:");
scanf("%s",m);
for(i=0;i<N;i++)
if(strcmp(m,TPB[i].cp)==0)
j=i;
}
else if(k==2)
{
printf("请输入驾照号:");
scanf("%s",d);
for(i=0;i<N;i++)
if(strcmp(d,TPB[i].jz)==0)
j=i;
}
else if(k==3)
{
printf("请输入开单交警号:");
scanf("%s",f);
for(i=0;i<N;i++)
if(strcmp(f,TPB[i].kdjj)==0)
j=i;
}
if(j!=-1) //在结构体中运算
{
for(i=j;i<N&&j!=-1;i++)
TPB[i]=TPB[i+1]; N=N-1;}
else if(j==-1)
printf("不能打开");
if((fp=fopen("fadan.txt","w"))==NULL) /***打开文件***/
{
printf("不能打开");
exit(0);
}
for(i=0;i<N;i++) /***写入文件***/ fprintf(fp,"\n%5s%10s%13s%11s%12s",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);
fclose(fp); /***关闭文件***/
}
7. 信息查询函数。
void chaxun()
{int i,k,t=0;
char m[10],d[10],f[10];
FILE*fp;
if((fp=fopen("fadan.txt","r+"))==NULL) //打开文件
{
printf("不能打开");
exit(0);
}
for(i=0;i<N;i++) //读取文件
{
fscanf(fp,"%s%s%s%s%s",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);}
fclose(fp); //关闭文件
system("cls");
printf("查询模块");
printf("\n\n\n");
printf(" ********************************************\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 1.车牌号 2.驾照号 3.开单交警号 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" ********************************************\n");
printf("\n\n请输入查询选项:");
scanf("%d",&k);
//system("cls");
if(k==1)
{
printf("请输入车牌号:");
scanf("%s",&m);system("cls");
for(i=0;i<N;i++)
{
if(strcmp(m,TPB[i].cp)==0)
{
printf("车牌号 驾照号 开单交警号 处罚单号 处罚时间\n"); printf("%5s%10s%13s%11s%12s\n",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);t++;}
else if(strcmp(d,TPB[i].jz)!=0) printf("\n");
}
}
else if (k==2)
{
printf("请输入驾照号:");
scanf("%s",&d);system("cls");
for(i=0;i<N;i++)
{
if(strcmp(d,TPB[i].jz)==0)
{
printf("车牌号 驾照号 开单交警号 处罚单号 处罚时间\n"); printf("%5s%10s%13s%11s%12s\n",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj); t++;}
else if(strcmp(d,TPB[i].jz)!=0) printf("\n");
}
}
else if (k==3)
{
printf("请输入开单交警号:");
scanf("%s",&f);system("cls");
for(i=0;i<N;i++)
{
if(strcmp(f,TPB[i].kdjj)==0)
{
printf("车牌号 驾照号 开单交警号 处罚单号 处罚时间\n"); printf("%5s%10s%13s%11s%12s\n",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj); t++;}
else if(strcmp(f,TPB[i].kdjj)!=0) printf("\n");
}
}
}
8. 信息统计函数。
此函数实现功效为查询一段时间内某司机违章次数和罚单号。
void tongji()
{int i,k,t=0;
char m[10],d[10],f[10];
FILE*fp;
if((fp=fopen("fadan.txt","r+"))==NULL) //打开文件
{
printf("不能打开");
exit(0);
}
for(i=0;i<N;i++) //读取文件
{
fscanf(fp,"%s%s%s%s%s",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);}
fclose(fp); //关闭文件
system("cls");
printf("统计模块");
printf("\n\n\n");
printf(" ********************************************\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 1.车牌号 2.驾照号 3.开单交警号 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" ********************************************\n");
printf("\n\n请输入统计选项:");
scanf("%d",&k);
//system("cls");
if(k==1)
{
printf("请输入车牌号:");
scanf("%s",&m);system("cls");
for(i=0;i<N;i++)
{ if(strcmp(m,TPB[i].cp)==0)
{printf("车牌号 驾照号 开单交警号 处罚单号 处罚时间\n"); printf("%5s%10s%13s%11s%12s\n",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj); t++;
}else if(strcmp(d,TPB[i].jz)!=0) printf("\n");
} printf("\n**********************总罚单数=%d********************\n",t);
}
else if (k==2)
{
printf("请输入驾照号:");
scanf("%s",&d);system("cls");
for(i=0;i<N;i++)
{ if(strcmp(d,TPB[i].jz)==0)
{printf("车牌号 驾照号 开单交警号 处罚单号 处罚时间\n");
printf("%5s%10s%13s%11s%12s\n",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);
t++;
}else if(strcmp(f,TPB[i].kdjj)!=0) printf("\n");
}printf(" \n**********************总罚单数=%d********************\n",t);
}
else if (k==3)
{
printf("请输入开单交警号:");
scanf("%s",&f);system("cls");
for(i=0;i<N;i++)
{ if(strcmp(f,TPB[i].kdjj)==0)
{printf("车牌号 驾照号 开单交警号 处罚单号 处罚时间\n");
printf("%5s%10s%13s%11s%12s\n",TPB[i].cp,TPB[i].jz,TPB[i].kdjj,TPB[i].cfd,TPB[i].cfsj);
t++;
}else if(strcmp(f,TPB[i].kdjj)!=0) printf("\n");
}printf(" \n**********************总罚单数=%d********************\n",t);
}
}
(四) 上机操作
主菜单界面:
从键盘输入数据:
显示全部信息:
删除指定统计:
删除后
查询
按车牌号查询:
查询结果:
按驾照号查询:
查询结果:
按开单交警号查询:
查询结果:
统计一段时间内某辆车违章次数和罚单号:
统计结果:
总结:
经过C语言程序设计上机实习,我深入了解和利用结构化程序设计思维方法。C语言二级考试已在眼前了,而这次C语言实习顺利结束真正意义上为C语言二级考试打好了基础。而且这次实习真正意义上将所学知识利用到了实际中。在这次实习中,我也学到了动态调试等部分新知识,而且发觉任何一处看似不起眼微小错误很可能造成程序无法运行或是运行结果错误。我在这次实习中最大收获就是学会了分析和排除错误,而这恰恰是从书本上学不到。想要深入提升C语言程序设计水平,还需要不停努力。
展开阅读全文