C语言交通处罚单管理系统

发布时间:2024-11-04

2011年度高级语言课程设计期末大作业

《题目》

院 系: 工学院机械系

专 业: 机械工程及自动化 年 级: 10 级 学生姓名: 学 号: 指导教师:

题 号:

2011年6月

一、题目(课程设计题库第X题)

【说明及要求】

实现交通罚款信息(车辆牌号、驾驶证号、交警代号、违章时间、罚款金额、缴费状态) 的登记、删除、修改功能,并能分别按车辆牌号、驾驶证号、交警代号查询交通罚款信息。 【提示】

(1)定义结构体表示罚款信息; (2)用文件实现罚款信息存储;

(3)分别编写函数实现罚款信息登记、修改、删除以及按车辆牌号、驾驶证号、交警代号 查询交通罚款信息。

(4)在 main 函数中调用上述函数进行演示。

二、问题分析

(一)需求分析

1.交通处罚单信息用文件储存,提供文件的输入输出操作; 2.要求可以输入、删除、浏览交通处罚单信息,因而要提供信息的输入、删除和显示操作;

3.要车辆、驾驶员和开单交警查询,则要提供查找操作; 4.另外提供系统操作和键盘式选择菜单以实现功能选择。

(二)该问题可以分为以下几个模块

三、程序流程图

【信息输入模块】

【删除罚单模块】

【信息查询模块】

【信息查询模块】

四、程序代码

#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 车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20110601)\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车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20110601)\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("\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("\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("\npress enter to return sub menu\n"); getchar(); getchar(); search(); }

void count() {

int f=-1;

int num; //所有罚单单数 int j;

int total=0; //某驾驶员的罚单数 char name[20]; char time1[20]; char time2[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请根据提示输入驾驶员的姓名和一个时间段,统计某个驾驶员在某段时间内的处罚单数目和罚单号\n");

printf("\n\n请输入驾驶员的姓名:"); scanf("%s",name);

printf("\n请输入一个较早的时间:"); scanf("%s",time1);

printf("\n请输入一个最近的时间:"); scanf("%s",time2); for(j=0;j<num;j++) {

if((strcmp(list[j].date,time1)>=0)&&(strcmp(list[j].date,time2)<=0)) {

C语言交通处罚单管理系统.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219