资源描述
[年]
[键入企业名称]
user
[交通处罚单管理系统]
[在此处键入文档摘要。摘要通常是对文档内容简短总结。在此处键入文档摘要。摘要通常是对文档内容简短总结。]
中 国 地 质 大 学(武汉)
C语言课程设计论文
课程名称: 学籍信息管理系统设计
老师姓名: 顾保磊
本科生姓名: 072111班 吴忠云
本科生学号: 1003601
本科生专业: 机械设计制造及其自动化
所在院系: 机械和电子信息学院
类别: 理工类
日期: -6
课程设计评语
对课程论文评语:
平时成绩:
课程论文成绩:
总 成 绩:
评阅人署名:
注:1、无评阅人署名成绩无效;
2、必需用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必需在上面评分表中标出,并计算入总成绩。
目 录
课程设计评语
目 录
1.课程论文题目
2.程序设计思绪
3.功效模块图
4.数据结构设计
5.算法设计
6.程序代码
7.程序运行结果
8.编程中碰到困难及处理方法
9.总结心得及良好提议
10.致谢
1.题目要求
设计“交通处罚单管理系统”,交通处罚单必需包含到车辆、驾驶员和开单交警信息,还有交通处罚单号码、处罚时间等信。要求功效: (1)能够输入、删除、浏览交通处罚单信息;
(2)能够按车辆、驾驶员和开单交警查询; (3)统计某时间段某个驾驶员交通处罚单数目及交通处罚单号码。
一、 需求分析
交通处罚单信息用文件存放,提供文件输入输出操作;要求能够输入、删除、浏览交通处罚单信息,所以要提供信息输入、删除和显示操作;要实现按车辆、驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功效选择。
二、 总体设计思绪
整个管理系统被设计为输出模块,信息删除模块,信息浏览模块,信息查询模块和信息统计模块。
2.程序设计思绪
依据题目要求应提供键盘式菜单实现功效选择,还应该提供信息输入操作,因为在程序中提供查询功效所以应有查找等操作。依据上面需求分析,能够将这个系统设计分为1.增添、删除、查询、修改输入模块 2.统计、浏览、排序等编辑模块。针对这些模块设定另外在加入一下退出程序、显示设计者信息、储存在text文件等功效。再根据编程基础思绪进行编程。
3.功效模块图
总体设计
输入模块
删除模块
浏览模块
查询模块
统计模块
4.数据结构设计
1.主函数
主函数通常设计得比较简练,只提供输入、处理和输出部分函数调用。其中各个功效模块用菜单方法选择。
[程序]
main() /********主函数********/
{
int a,w; /**变量a保留选择菜单数字,w判定输入数字是否在功效菜单对应数字范围内**/
do
{
puts("\n\n*************MENU**********\n\n");
puts("\n 1.Shuru data");
printf("请输入车牌号码:\n");puts("\n 2.Shanchu data");
puts("\n 3.Liulan data");
puts("\n 4.Chaxun data");
puts("\n 5.Tongji data")
puts("\n\n\n\n 6.Exit");
puts("\n\n\\t\t ************************\n");
printf("choice your number(0-5): [ ]\b\b");
scanf("%d,&n);
if(n<1||n>6)
{
w=1;
getchar();
}
else w=0;
}
while(w==1);/***选择功效***/
switch (n)
{
case 1:shuru();break;/***输入模块***/
case 2:shanchu();break;/***删除模块***/
case 3:liulan();break;/*** 浏览模块***/
case 4:chaxun();break;/*** 查询模块***/
case 5:tongji();break;/*** 统计模块***/
case 6:exit(0); /***退出***/
}
}
/**********************主函数************************/
main()
{
menu();
}
2、各功效模块设计
(1) 输入模块
[分析]
单独看各个数据信息,开单日期和驾驶员姓名为字符型,能够采取字符型数组;处罚单号码、车牌号码和交警ID为整型,能够采取整型数组。一条统计对应一张交通处罚单,方便交通部门管理。
[程序]
/****************输入模块***************/
void shuru() /***输入模块***/
{
FILE *fp;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("Can not open the file\n"); /**若打不开此文件则会退出输入模块**/
exit(0);
}
scanf("%d",&dan[0].chepai);
printf("请输入驾驶员姓名:\n");
scanf("%s",dan[0].name);
printf("请输交警ID:\n");
scanf("%d",&dan[0].id);
printf("请输入开单日期:\n");
scanf("%s",dan[0].time);
printf("请输入处罚单号:\n");
scanf("%d",&dan[0].num);
if(fwrite(&dan[0],sizeof(struct cfd),1,fp)!=1)
printf("file write error\n");
else printf("输入信息成功!\n");
fclose(fp);
}
(2) 删除模块
[分析]
该模块功效需要删除交通处罚单信息,要依据处罚单号、车辆号码、驾驶员姓名、开单时间和交警ID查找处罚统计并删除。
[程序]
/*************************删除模块*******************/
void shanchu()
{
int i,w,v,c;
FILE *fp;
printf("请输入要删除处罚单号:");
scanf("%d",&w);
fp=fopen("data.txt","rb");
for(i=0;i<1000;i++)
{
if(fread(&dan[i],sizeof(struct cfd),1,fp)!=1) break;
}
v=i;
for(i=0;i<v;i++)
{
if(w==dan[i].num)
c=i;
}
fclose(fp);
fp=fopen("data.txt","wb");
for(i=0;i<v;i++)
{
if(i!=c)
fwrite(&dan[i],sizeof(struct cfd),1,fp);
}
fclose(fp);
}
(3)浏览模块
[分析]
该模块功效是显示全部处罚信息。
[程序]
/******************浏览(全部)模块*****************/
void liulan()
{
int i;
FILE *fp;
fp=fopen("data.txt","rb");
for(i=0;i<1000;i++)
{
if(fread(&dan[i],sizeof(struct cfd),1,fp)==1)
{
printf("处罚单号:%d\n",dan[i].num);
printf("车牌号码:%d\n",dan[i].chepai);
printf("司机姓名:");puts(dan[i].name);
printf("警察I D :%d\n",dan[i].id);
printf("处罚时间:");puts(dan[i].time);
printf("---------------------------------\n");
}
else break;
}
fclose(fp);
}
(4)查询模块
[分析]
该模块功效是依据输入处罚单号、车辆号码、驾驶员姓名、开单时间和交警ID查找对应统计,方便驾驶员了解自己处罚情况。
[程序]
void chaxun()
{
int i,w,x,flag;
FILE *fp;
char v[8];
printf("请输入你想查询信息:\n");
printf("1 - 按车牌号查询\n"); /******查询方法*****/
printf("2 - 按司机姓名查询\n");
printf("3 - 按警察ID查询\n");
scanf("%d",&x);
if(x==3)
{
flag=0;
printf("请输入要查询警察ID:");
scanf("%d",&w);
fp=fopen("data.txt","rb");
for(i=0;i<1000;i++)
{
if(fread(&dan[i],sizeof(struct cfd),1,fp)!=1) break;
if(dan[i].id==w)
{
printf("处罚单号:%d\n",dan[i].num);
printf("车牌号码:%d\n",dan[i].chepai);
printf("司机姓名:");puts(dan[i].name);
printf("警察I D :%d\n",dan[i].id);
printf("处罚时间:");puts(dan[i].time);
printf("---------------------------------\n");
flag=1;
break;
}
}
if(flag==0)
printf("找不到此处罚单信息!\n");
fclose(fp);
}
else if(x==2)
{
flag=0;
printf("请输入要查询司机姓名:");
scanf("%s",v);
fp=fopen("data.txt","rb");
for(i=0;i<1000;i++)
{
if(fread(&dan[i],sizeof(struct cfd),1,fp)!=1) break;
if(strcmp(dan[i].name,v)==0)
{
printf("处罚单号:%d\n",dan[i].num);
printf("车牌号码:%d\n",dan[i].chepai);
printf("司机姓名:");puts(dan[i].name);
printf("警察I D :%d\n",dan[i].id);
printf("处罚时间:");puts(dan[i].time);
printf("---------------------------------\n");
flag=1;
break;
}
}
if(flag==0)
printf("找不到此处罚单信息!\n");
fclose(fp);
}
else if(x==1)
{
flag=0;
printf("请输入要查询处罚单号:");
scanf("%d",&w);
fp=fopen("data.txt","rb");
for(i=0;i<1000;i++)
{
if(fread(&dan[i],sizeof(struct cfd),1,fp)!=1) break;
if(dan[i].num==w)
{
printf("处罚单号:%d\n",dan[i].num);
printf("车牌号码:%d\n",dan[i].chepai);
printf("司机姓名:");puts(dan[i].name);
printf("警察I D :%d\n",dan[i].id);
printf("处罚时间:");puts(dan[i].time);
printf("---------------------------------\n");
flag=1;
break;
}
}
if(flag==0)
printf("找不到此处罚单信息!\n");
fclose(fp);
}
else printf("输入错误!\n");
}
(5)统计模块
[分析]
该模块功效是统计某时间段某个驾驶员交通处罚单数目及交通处罚单号码,这么能够方便交通部门管理驾驶员信息,统计驾驶员违规情况。
[程序]
void tongji()
{
int i;
FILE *fp;
fp=fopen("data.txt","rb");
for(i=0;i<1000;i++)
{
if(fread(&dan[i],sizeof(struct cfd),1,fp)!=1) break;
}
printf("共有%d张处罚单!具体信息请看浏览。\n",i);
fclose(fp);
}
六.程序代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
struct Plist //处罚单
{
char vno[20]; //车牌号
char dname[20]; //驾驶员姓名
char pname[20]; //交警姓名
char pno[20]; //交警编号
char no[20]; //处罚单编号
char date[20]; //处罚日期
} list[N]; //处罚单数组
void input(); //输入模块
void dele(); //删除模块
void browse(); //浏览模块
void search(); //查询模块
void count(); //统计模块
void menu(); //主菜单
void vno_search(); //按车牌号查询
void dna_search(); //按驾驶员姓名查询
void pna_search(); //按开单交警姓名查询
main()
{
menu();
getchar();
}
void menu()
{
int n;
int r;
do
{
system("cls");
printf("\n\t\t\t\t交通处罚单管理系统\n");
printf("········································");
printf(" 菜单: 1-信息录入 2-信息删除 3-信息浏览 4-信息查询 5-信息统计 6-退出系统\n");
printf("········································");
printf("请从输入数字选择对应功效:");
scanf("%d",&n);
if(n<1||n>6)
{
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:exit(0);
}
}
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 menu\n");
getchar();
menu();
}
printf("\n请输入处罚单数量:");
scanf("%d",&i);
printf("\n\n");
for(j=0;j<i;j++)
{
printf("输入第%d张处罚单:\n",j+1);
printf("\n 车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如1112)\n");
printf("\n注意:中间用空格隔开!\n");
scanf("%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
for(j=0;j<i;j++)
{
fprintf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
fclose(fp);
printf("\n保留成功!");
printf("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
printf("\n请输入处罚单数量:");
scanf("%d",&i);
for(j=0;!feof(fp);j++) //读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j+i;
if(num>N)
{
printf("\n结构体数组数N太小,请先修改N值\n");
printf("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
printf("\n");
for(j=0;j<i;j++)
{
printf("输入第%d张处罚单:\n",j+1);
printf("\n车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如1112)\n");
printf("\n注意:中间用空格隔开!\n");
scanf("%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
for(j=0;j<i;j++)
{
fprintf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
fclose(fp);
printf("\n保留成功!");
printf("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
void dele()
{
int j;
int num;
int f=-1;
FILE*fp1,*fp2;
char s1[20];
if((fp1=fopen("list.txt","r"))==NULL)
{
printf("can not open file\n");
printf("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
for(j=0;!feof(fp1);j++) //读取文件
{
fscanf(fp1,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j;
fclose(fp1);
printf("请输入要删除处罚单编号\n");
scanf("%s",s1);
for(j=0;j<num;j++)
{
if(strcmp(s1,list[j].no)==0)
{
f=j;
if(f<num-1)
{
for(j=f;j<num-1;j++)
{
strcpy(list[j].vno,list[j+1].vno);
strcpy(list[j].dname,list[j+1].dname);
strcpy(list[j].pname,list[j+1].pname);
strcpy(list[j].pno,list[j+1].pno);
strcpy(list[j].no,list[j+1].no);
strcpy(list[j].date,list[j].date);
}
}
if((fp2=fopen("list.txt","w"))==NULL)
{
printf("文件打不开!\n");
printf("\npress enter to return menu\n");
getchar();
menu();
}
for(j=0;j<num-1;j++) //保留文件
{
fprintf(fp2,"\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
fclose(fp2);
printf("\n删除成功!\n");
printf("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
}
if(f<0)
{
printf("\n没有找到该学号统计:\n");
printf("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
}
void browse()
{
int j;
int num;
FILE*fp;
if((fp=fopen("list.txt","r"))==NULL)
{
printf("can not open file\n");
printf("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
for(j=0;!feof(fp);j++) //读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
fclose(fp);
num=j;
printf("\n已添加%d条统计\n\n",num);
printf("车牌号 驾驶员姓名 交警姓名 交警编号 处罚单编号 处罚日期\n");
for(j=0;j<num;j++) //输出
{
printf("\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
printf("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
void search()
{
int n;
int r;
do
{
system("cls");
printf("\n请选择查询类型:\n\t1-按车牌号 2-按驾驶员姓名3:按开单交警姓名 4-返回主菜单\n");
printf("\n请输入数字选择:");
scanf("%d",&n);
if(n<1||n>4)
{
r=1;
getchar();
}
else r=0;
}while(r==1);
switch(n)
{
case 1:vno_search();break;
case 2:dna_search();break;
case 3:pna_search();break;
case 4:menu();
}
}
void vno_search()
{
int f=-1;
int num;
int j;
char no[20];
FILE*fp;
if((fp=fopen("list.txt","r"))==NULL)
{
printf("文件打不开!\n");
printf("\npress enter to return menu\n");
getchar();
menu();
}
for(j=0;!feof(fp);j++) //读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j;
fclose(fp);
printf("\n请输入车牌号:");
scanf("%s",no);
printf("\n罚单信息为:\n\n");
printf("车牌号 驾驶员姓名 交警姓名 交警编号 处罚单编号 处罚日期\n");
for(j=0;j<num;j++)
{
if(strcmp(no,list[j].vno)==0)
{
f=j;
printf("\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
}
if(f<0)
printf("\n没有找到该班号统计!\n");
printf("\npress enter to return sub menu\n");
getchar();
getchar();
search();
}
void dna_search()
{
int f=-1;
int num;
int j;
char name[20];
FILE*fp;
if((fp=fopen("list.txt","r"))==NULL)
{
printf("文件打不开!\n");
printf("\npress enter to return menu\n");
getchar();
menu();
}
for(j=0;!feof(fp);j++) //读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j;
fclose(fp);
printf("\n请输入驾驶员姓名:");
scanf("%s",name);
printf("\n罚单信息为:\n\n");
printf("车牌号 驾驶员姓名 交警姓名 交警编号 处罚单编号 处罚日期\n");
for(j=0;j<num;j++)
{
if(strcmp(name,list[j].dname)==0)
{
f=j;
printf("\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
}
if(f<0)
printf("\n没有找到该班号统计!\n");
printf("\npress enter to return sub menu\n");
getchar();
getchar();
search();
}
void pna_search()
{
int f=-1;
int num;
int j;
char name[20];
FILE*fp;
if((fp=fopen("list.txt","r"))==NULL)
{
printf("文件打不开!\n");
printf("\npress enter to return menu\n");
getchar();
menu();
}
for(j=0;!feof(fp);j++) //读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j;
fclose(fp);
printf("\n请输入开单交警姓名:");
scanf("%s",name);
printf("\n罚单信息为:\n\n");
printf("车牌号 驾驶员姓名 交警姓名 交警编号 处罚单编号 处罚日期\n");
for(j=0;j<num;j++)
{
if(strcmp(name,list[j].pname)==0)
{
f=j;
printf("\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
}
if(f<0)
printf("\n没有找到该班号统计!\n");
printf("\npress enter to return sub menu\n");
getchar();
getchar();
search();
}
void count()
{
int
展开阅读全文