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();