好文档 - 专业文书写作范文服务资料分享网站

南京航空航天大学C语言课程设计报告交通处罚单管理程序源码

天下 分享 时间: 加入收藏 我要投稿 点赞

南京航空航天大学

——C语言课程设计报告——

课程名称:交通处罚单管理系统 姓名: 班级: 学号:

1

2014年4月

一.题目要求

用结构体数组结构实现简单的交通处罚单管理功能,要求具有如下功能: (1)可以输入、删除、显示、修改某个驾驶员的交通处罚单信息; (2)可以按驾驶员查询交通处罚单。

程序执行过程为:循环显示主菜单,用户在Give you Choice:处输入选项,即按照功能列表输入0~8中的任意一个数字,按回车后即执行相应的功能。 各项菜单功能如下:

1. Input Records(输入若干条记录)

从键盘一次输入一张交通处罚单的信息,依次存放到结构体数组中,插入一条记录后,显示提示信息:确认是否输入下一条记录,如确认,继续输入,否则,退出输入功能。 2. Display All Records(显示所有记录)

按顺序显示所有记录,每屏显示10条记录,每显示10条,按键继续显示下一屏。 3. Delete a Record(按姓名查找,删除一条记录)

输入待删除记录的姓名,显示提示信息,让用户再次确认是否要删除,确认后,将该姓名的记录删除。 4. Sort(排序)

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

5. Insert a Record(插入一条记录)

在以姓名为序排列的数组中插入一条记录,插入后,数组仍有序。输出插入成功的信息。 6. Query(查找并显示一个记录)

输入驾驶员姓名,查找包含该驾驶员名字的记录,并显示该驾驶员的所有罚单信息。 7. Add Records from a Text File(从文件中添加数据到结构体数组中)

用户可提前建立一个文件data.txt。存放多个待加入的记录,提示输入文件的文件名,然后从该文件中一次性加入多条处罚单记录。 8. Write to a Text File

将数组中的全部记录写入文件records.txt。

二.题目分析、心得体会

先建立主菜单,程序执行时,循环显示。让用户在Give your choice:处输入选项,按回车后,即按列表执行相应功能。然后,分别写出具有相应功能的函数。

通过课程设计,发现了很多平时学习过程中没有遇到的问题。在细节方面,做导入模块的时候竟然忘记放入data.txt文件,结果数据一直导不出来,后来导出模块的时候,又因为格式与课程要求不符调试了很多次才成功。在态度方面,一开始因为写出的程序存在很多问题,心情比较焦躁,一度无法进行下去,后来参考了一些网上的资料,把书又翻了一遍,也咨询了别人,最后调试成功。

简言之,在做C语言时要仔细,注重细节。另外,在做课程设计的时候我认识到要多与他人交流,要多问,要多想多探讨,只有这样才能让自己不断前进。

三.程序设计 总体设计

根据题目要求,将系统设计分为9个模块:输入模块、显示模块、删除模块、排序模块、插入模块、查找模块、导入模块、导出模块。

交处单理统 通罚管系输入模块 显示模块 删除模块 排序模块 插入模块 查找模块 导入模块 导出模块

详细设计

#include #include #include #include #include

int m=10;

/*------------------结构体定义------------------------*/ //定义结构体,取名为Traffic typedef struct { 2

char driver[10]; /*司机姓名 int car;

*/ */

/*驾驶的车牌号

char police[10]; /*开罚单的交警姓名 */ int num; int year; int date;

/*罚单编号

*/ */ */ */

/*开罚单的年 /*开罚单的月 /*开罚单的日

int month;

}Traffic;

(1)输入模块

该模块的功能是为用户提供信息输入界面,用户可以根据信息提示进行信息输入,用户输入的信息将被保存在文件当中。 代码:

/************************************************/ /*功能:输入数据 */ /************************************************/ Traffic *Input(Traffic *trafdynlist,int *j) { char s[5]; Traffic *p=trafdynlist+(*j); for(;;) { //显示当前已有记录数 printf(\ //输入车主姓名 printf(\ scanf(\ //输入车牌号 printf(\ scanf(\ //输入警察姓名 printf(\ scanf(\ //输入罚单号 printf(\

3

scanf(\

//输入罚单年 printf(\ scanf(\ //输入罚单月 printf(\ scanf(\ //输入罚单日 printf(\ scanf(\ *j = *j+1; //记录超过10条时,重新申请存储空间 if(*j >= m) { trafdynlist=flexible_array(trafdynlist,&m),p=trafdynlist+m-1; } //是否继续输入 printf(\ scanf(\ if((!strcmp(\ { break; } p++; } //返回处罚单列表的指针 return trafdynlist; }

(2)输出模块

该模块的功能是按顺序显示所有记录,每屏显示10条记录,每显示10条,按键继续显示下一屏。

代码:

/************************************************/ /*功能:输出数据 */

/*显示出所有姓名成绩,每10个暂停一下,n为数组元素个数*/ /************************************************/ void Display(Traffic traflist[],int n) { Traffic *p=traflist; int i,j=0; for(i=1;i<=n;i++) { printf(\·\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ //记录超过10条时,清屏 if(i==0) { system(\ } p++; } }

(3)删除模块

该模块的功能是按姓名删除相对应的记录。

代码:

/************************************************/ /*功能:删除记录 */ /*删除姓名为name的记录,返回数组中的记录数 */ /************************************************/

int Delete(Traffic traflist[],int n,char *name) { Traffic *p=traflist,*p1=traflist+1; int i,j; for(i=1;i<=n;i++) { //如果找到需要删除的项,将之后的项都向前一个位置 if(strcmp(p->driver,name)==0) { for(j=i+1;j<=n;j++) { *p=*p1,p++,p1++; } } else { } } n--; //返回记录数 return n; }

/************************************************/ /*功能:删除记录 */ /*输入待删除姓名,经确认后调用Delete函数删除记录*/ /************************************************/ int Delete_a_record(Traffic traflist[],int n) { char s[10],s1[5]; int l; printf(\ scanf(\ for(;;) { printf(\

4

scanf(\ if(!strcmp(s1,\ { //调用Delete函数 l=Delete(traflist,n,s); if(l==n) { printf(\ return l; } else { printf(\ return l; } break; } else { printf(\ } scanf(\ } }

(4)排序模块

该模块的功能是以姓名为序升序排列数组。

代码:

/************************************************/ /*功能:按姓名升序排序 */ /************************************************/ void Sort_by_name(Traffic traflist[],int n) { int i,j; Traffic t; Traffic *l,*p=traflist;

for(i=1,p=traflist;p

l=p;

for(j=1;j<=n-i;j++) if(strcmp(strlwr(l->driver),strlwr((p+j)->driver))>0) { l=p+j; } else { } if(p!=l) { t=*l,*l=*p,*p=t; } else { } } }

(5)插入模块

该模块的功能是以姓名为序排列的数组中插入一条记录,插入后,数组仍有序。

代码:

/************************************************/ /*功能:有序插入 */ /*按姓名插入记录,返回记录个数 */ /************************************************/

Traffic *Insert(Traffic *trafdynlist,int *j,Traffic *s) { //读出记录数 int n=*j; Traffic *p=trafdynlist,*p1; if(n>=m) { //超过10条时,申请新空间 trafdynlist=flexible_array(trafdynlist,&m); }

5

南京航空航天大学C语言课程设计报告交通处罚单管理程序源码

南京航空航天大学——C语言课程设计报告——课程名称:交通处罚单管理系统姓名:班级:学号:12014年4月一.题目要求
推荐度:
点击下载文档文档为doc格式
478tu3f38147ty70kclt55mbv23ri50054w
领取福利

微信扫码领取福利

微信扫码分享