C语言课设报告.docx
- 文档编号:9485605
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:24
- 大小:630.47KB
C语言课设报告.docx
《C语言课设报告.docx》由会员分享,可在线阅读,更多相关《C语言课设报告.docx(24页珍藏版)》请在冰豆网上搜索。
C语言课设报告
C语言课程设计
——交通处罚单管理系统
学号:
021220217
姓名:
王帅
专业:
热能与动力工程
●程序完成的主要功能
●对题目的分析,设计中遇到的主要问题与解决方法,对设计的感想和心得,新增功能。
●提供有注释的源程序,要求注释清楚函数的功能,函数参数的意义,返回值的含义
●画出函数调用关系图,描绘主要算法的实
●设计实验流程,并提供典型测试数据
程序主要功能
(1)可以输入、删除、显示、修改某个驾驶员的交通处罚单信息;
(2)可以按照驾驶员查询交通处罚单。
程序执行过程为:
循环显示主菜单,用户在Giveyourchoice:
处输入选项,即按照功能列表输入0~7任意一个数字,按回车后,执行相应的功能。
以下是程序的各项功能:
1、InputRecords(输入若干条记录)
2、DisplayAllRecords(显示所有记录)
3、DeleteaRecord(按姓名查找,删除一条数据)
4、Sort(排序)
5、InsertaRecords(插入一条记录)
6、Query(查找并显示一个记录)
7、AddRecordsfromaTextFile(从正文文件中添加数据到结构体数组中)
8、WritetoaTextFile(将数组中的数据写入文件中)
9、Quit(退出交通处罚单管理程序)
程序功能的实现
◆删除功能的实现:
建立一个函数,返回Driver项相同的结构体的编号,重新输入一遍整组结构体的数据,并忽略返回的那组数据,记录下来;
◆如何保证数据的储存性:
由于课题的特殊性,处罚单应具有良好的储存性,为了达到目的,将每一组输入的数组都写入文件中,一旦要调用数据再读入内存中,这项功能使得该程序即使在非正常关闭之后仍然“记忆”之前输入的数据,数据安全是一大特点;
◆运行过程中的人性化改进:
一、每组数据都写入文件,数据的储存性良好;二、一个功能实现完毕会有一个窗口提示是回到主菜单还是浏览数据,避免了输入数据后功能“断层”的尴尬;
◆如何实现结构体数组的排序:
结构体数组相比于其他数组,由于其包含了较多数据,不好交换,经过搜索资料,再加上课本里学过的“冒泡法”,实现了结构体数组的交换;
◆若查询的记录不存在,如何处理:
单独定义一个变量flag,初始值为0,如若查询到需要的数据便赋值为1,利用if语句返回当数据不存在时提示“can’tfindtherecord”避免了程序因找不到数据而产生的各种错误;
◆怎样整批导入数据并加入结构体数组:
由于结构体数组是写在txt文档内的,无法直接读出有几组数据,故用feof实现读至文件最后处,并自动记录有几组数据,加入原结构体数组。
由于自身学习的局限性,这个课程设计有很多功能起初时让根本无法下手,但经过在网上搜集一些别人的课程设计结果,集百家之长,再加上自身合编,总成以下的源程序:
#include
#include
#include
#defineN1000
intNUM;
typedefstruct
{chardriver[10];
intcar;
charpolice[10];
intnum;
intyear;
intmonth;
intdate;
}Traffic;//定义结构体数组
Traffictraflist[N];//定义数组
voidInput();
voidDisplay();
voidQuery();
voidDelete();
voidSort_by_Name();
voidprintf_back();
voidmenu();
voidInsert();
voidAddfromText();
intmenu_select();//函数申明
voidmain()
{
for(;;)//使函数陷入死循环,不会因为只实现一个功能便退出
{
switch(menu_select())
{
case1:
printf("InputRecords\n");
Input();
system("pause");
break;
case2:
printf("DisplayAllRecords\n");
Display();
system("pause");
break;
case3:
printf("DeleteaRecord\n");
Delete();
system("pause");
break;
case4:
printf("Sort\n");
Sort_by_Name();
system("pause");
break;
case5:
printf("InsertaRecord\n");
Insert();
system("pause");
break;
case6:
printf("Query\n");
Query();
system("pause");
break;
case7:
printf("AddRecordsfromaTextFile\n");
AddfromText();
system("pause");
break;
case0:
printf("Goodbye!
\n");
system("pause");
exit(0);
}
}
}
intmenu_select()
{
charc;
do{
system("cls");
printf("1.InputRecords\n");
printf("2.DisplayAllRecords\n");
printf("3.DeleteaRecord\n");
printf("4.Sort\n");
printf("5.InsertaRecord\n");
printf("6.Query\n");
printf("7.AddRecordfromaTextFile\n");
printf("0.Goodbye!
\n");
printf("Giveyourchoice(0~7):
");
c=getchar();
}while(c<'0'||c>'7');//如果输入的数字不是0~7内的,便不会通过
return(c-'0');
}
voidInput()//输入函数
{inti,j;//i为循环辅助参数,j为需要输入的数据数
FILE*fp;
fp=fopen("records.txt","w");//打开records.txt,下面要将内存中的数据输入文件中
printf("------------------------Input-----------------------------\n");
printf("\nHowmanydatadoyouneed:
");
scanf("%d",&j);
printf("\n\nPleaseinputthedatainorder:
\n\n");
for(i=0;i { printf("Pleaseinputdriver'sname: \n"); scanf("%s",&traflist[i].driver); printf("Pleaseinputthecarnumber: \n"); scanf("%d",&traflist[i].car); printf("Pleaseinputthepoliceman'sname: \n"); scanf("%s",&traflist[i].police); printf("Pleaseinputthetrafficnumber: \n"); scanf("%d",&traflist[i].num); printf("Pleaseinputthedate: \n"); scanf("%d.%d.%d",&traflist[i].year,&traflist[i].month,&traflist[i].date); printf("\n\n"); printf("-----------------------------------------------------------------\n"); fprintf(fp,"\n%s%d%s%d%d.%d.%d", traflist[i].driver,traflist[i].car,traflist[i].police,traflist[i].num,traflist[i].year,traflist[i].month,traflist[i].date);//将数据输入文件 } printf("Complete! \n"); NUM=NUM+j;//记录数组中的数据数 fclose(fp); printf_back(); } voidDelete()//删除函数 { inti; intc; charw[10];//储存暂时的输入的姓名 intt; intflag=0; FILE*fp; printf("------------------------Delete--------------------------------\n"); printf("Pleaseinputthedriver'sname: "); scanf("%s",&w); fp=fopen("records.txt","r"); for(i=0;! feof(fp);i++)//读文件至最后,i为数据组数 { fscanf(fp,"%s%d%s%d%d.%d.%d",&traflist[i].driver,&traflist[i].car,&traflist[i].police,&traflist[i].num,&traflist[i].year,&traflist[i].month,&traflist[i].date);//将文件中的数据输入内存 } NUM=i; for(i=0;i { if(strcmp(traflist[i].driver,w)==0)//字符串比较函数 { c=i; printf("------------------------------------------\n"); printf("Driver'sname: %s\n",traflist[i].driver); printf("Carnumber: %d\n",traflist[i].car); printf("Policename: %s\n",traflist[i].police); printf("Trafficnumber: %d\n",traflist[i].num); printf("Date: %d.%d.%d\n",traflist[i].year,traflist[i].month,traflist[i].date); printf("------------------------------------------\n"); flag=1; } } if(flag==0)//未找到数据 { printf("Can'tfindthedata! \n"); fclose(fp); printf_back(); } fclose(fp); printf("Areyousure? \n1.Yes\t2.No[]\b\b"); scanf("%d",&t); if(t==1) { fp=fopen("records.txt","w"); for(i=0;i { if(i! =c) { fprintf(fp,"\n%s%d%s%d%d.%d.%d",traflist[i].driver,traflist[i].car,traflist[i].police,traflist[i].num,traflist[i].year,traflist[i].month,traflist[i].date);//向文件输入 } } printf("Complete! "); fclose(fp); printf_back(); } else printf_back(); } voidDisplay()//浏览函数 { inti; FILE*fp; fp=fopen("records.txt","r"); printf("------------------------Display---------------------------\n"); for(i=0;! feof(fp);i++) { fscanf(fp,"%s%d%s%d%d.%d.%d",&traflist[i].driver,&traflist[i].car,&traflist[i].police,&traflist[i].num,&traflist[i].year,&traflist[i].month,&traflist[i].date); } fclose(fp); NUM=i; for(i=0;i { printf("------------------------------------------\n"); printf("Driver'sname: %s\n",traflist[i].driver); printf("carnumber: %d\n",traflist[i].car); printf("Policename: %s\n",traflist[i].police); printf("Trafficnumber: %d\n",traflist[i].num); printf("Date: %d.%d.%d\n",traflist[i].year,traflist[i].month,traflist[i].date); printf("------------------------------------------\n"); } printf_back(); } voidQuery()//查询函数 { inti,flag=0; charm[10]; FILE*fp; fp=fopen("records.txt","r"); for(i=0;! feof(fp);i++) { fscanf(fp,"%s%d%s%d%d.%d.%d", &traflist[i].driver,&traflist[i].car,&traflist[i].police,&traflist[i].num,&traflist[i].year,&traflist[i].month,&traflist[i].date); } printf("---------------------------Query---------------------------\n"); printf("Pleaseinputthedriver'sman: "); scanf("%s",&m); for(i=0;i { fscanf(fp,"%s%d%s%d%d.%d.%d",&traflist[i].driver,&traflist[i].car,&traflist[i].police,&traflist[i].num,&traflist[i].year,&traflist[i].month,&traflist[i].date); if(strcmp(traflist[i].driver,m)==0)//字符串比较函数 { printf("Driver'sname: %10s\n",traflist[i].driver); printf("Carnumber: %5d\n",traflist[i].car); printf("Policename: ");puts(traflist[i].police); printf("Trafficnumber: %5d\n",traflist[i].num); printf("Date: %d.%d.%d\n",traflist[i].year,traflist[i].month,traflist[i].date); printf("-------------------------\n"); flag=1; } } if(flag==0) { printf("Can'tfindthetraflist! \n"); } fclose(fp); printf_back(); } voidSort_by_Name()//按姓名排序 { inti,j,k; Traffics; FILE*fp; fp=fopen("records.txt","r"); for(i=0;! feof(fp);i++) { fscanf(fp,"%s%d%s%d%d.%d.%d",&traflist[i].driver,&traflist[i].car,&traflist[i].police,&traflist[i].num,&traflist[i].year,&traflist[i].month,&traflist[i].date); } fclose(fp); NUM=i; for(k=0;k { for(j=0;j {if(strcmp(traflist[j].driver,traflist[j+1].driver)>0) { s=traflist[j]; traflist[j]=traflist[j+1]; traflist[j+1]=s; } } } fp=fopen("records.txt","w"); for(j=0;j { fprintf(fp,"\n%s%d%s%d%d.%d.%d",traflist[j].driver,traflist[j].car,traflist[j].police,traflist[j].num,traflist[j].year,traflist[j].month,traflist[j].date);//将新数据写入文件 } fclose(fp); printf_back(); } voidInsert()//插入若干组数据 { inti,j,k; FILE*fp; printf("------------------------Insert-----------------------------\n"); fp=fopen("records.txt","r"); for(i=0;! feof(fp);i++) { fscanf(fp,"%s%d%s%d%d.%d.%d", &traflist[i].driver,&traflist[i].car,&traflist[i].police,&traflist[i].num,&traflist[i].year,&traflist[i].month,&traflist[i].date); } fp=fopen("records.txt","a"); printf("\nHowmanydatadoyouneed: "); scanf("%d",&j); NUM=i+j; if(NUM>N) { printf("Thedataistoobigtocontain! /n");//提示数据太大而无法储存 exit(0); } printf("\n"); for(k=i;k { printf("Pleaseinputthedriver'sname\n"); scanf("%s",&traflist[k].driver); printf("Pleaseinputthecarnumber\n"); scanf("%d",&traflist[k].car); printf("Pleaseinputthepoliceman'sname\n"); scanf("%s",&traflist[k].police); printf("Pleaseinputthetrafficnumber\n"); scanf("%d",&traflist[k].num); printf("Pleaseinputthedate\n"); scanf("%d.%d.%d",&traflist[k].year,&traflist[k].month,&traflist[k].date); printf("\n\n"); printf("-----------------------------------------------------------------\n"); } for(k=i;k { fprintf(fp,"\n%s%d%s%d%d.%d.%d",traflist[k].driver,traflist[k].car,traflist[k].police,traflist[k].num,traflist[k].year,traflist[k].month,traflist[k].date);//向文件输入} printf("Complete! \n"); fclose(fp); Sort_by_Name();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 报告