C语言课程实训设计报告.docx
- 文档编号:6361163
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:16
- 大小:263.96KB
C语言课程实训设计报告.docx
《C语言课程实训设计报告.docx》由会员分享,可在线阅读,更多相关《C语言课程实训设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
C语言课程实训设计报告
C语言课程实训设计报告
一、项目概述
我这次实训的项目主要是农民工资收入统计系统,农民工资收入统计系统主要实现的是农民信息的输入、输出,按农民的门牌号排序,实现农民信息的插入、查找、删除等操作,以及可以计算全村总收入和人均收入,也能够找出小康家庭、中等家庭以及贫困家庭。
这次实训的项目主要通过C语言来实现程序的运行,主要通过C语言中的函数调用和结构体来做程序,还要用到许多小的知识点,例如:
用冒泡法实现排序;scanf、printf语句;strcpy复制语句;if……else语句实现选择……等等。
二、项目分析和设计
这个项目的程序可分为几个板块来做,每个板块有每个板块的作用,通过不同程序的不同作用相互调用即可实现整个程序的运行,这个项目程序主要可以分为以下几个板块:
1、定义头文件:
运用#include
#include
2、定义结构体数组:
运用typedefstruct
{农民列表信息……}变量名表列;
这种类型是直接定义结构体类型变量。
3、对调用函数进行声明:
根据所写程序对有些函数进行声明,例如:
Voidshow_menu();在程序中实现的是对菜单函数的调用。
4、主函数:
Voidmain()为主函数,在主函数过do……while语句和
switch……case语句进行选择和函数调用。
Voidmain()
{do
{switch()
……
}
}while();
5、菜单函数:
定义函数为voidshow_menu()
主要用printf语句输出菜单函数,并且还通过主函数调用菜单函数实现对农民信息的选择。
6、输入农民的信息:
定义函数为intcreate(peasantnu[],intn)
nu[]为结构体数组,在此函数中,通过scanf语句实现农民信息的输入,并用while语句判断并实现多余信息的清除,以及判断是否继续进行输入信息,最后还有一个值返还给主函数main()。
7、输出农民信息:
定义函数为voidprint(peasantnu[],intn)
主要运用printf语句输出农民的信息,并用for语句和if语句判断,如果输入的信息超过十个就停止输入,若没有就继续输。
用system(“pause”)清除界面。
8、对函数进行排序:
定义函数为voidsort(peasantnu[],intn)
在此函数中,利用两层循环按门牌号进行排序,如果变量在结构体中定义成数组形式,就用strcpy语句进行复制;如果定义成整形就要新定义一个变量作为中间函数进行替换来实现数的交换。
9、插入信息并排序:
定义函数为intinsert(peasantnu[],intn)
在此函数中,利用scanf语句进行输入信息,再调用排序函数
sort(nu,n)进行排序,最后还要返回一个值到主函数main().
10、查找并删除记录:
intdel(peasantnu[],intn)
此程序需要按查找,所以输入,并用while实现循环次数,用strcmp比较输入与原来,若strcmp(a,b)==0,即表明找到该信息并且删除,删除是通过for以及strcpy对查找的信息进行删除,若strcmp(a,b)!
=0,即表明没有找到该信息。
11、计算全村总收入以及人均收入
定义函数为voidave(peasantnu[],intn)
在此函数中主要运用for语句进行控制,即可计算出总收入以及人均收入并输出。
12、找出小康家庭、中等家庭、贫困家庭
定义函数为voidfib(peasantnu[],intn)
在此函数中主要运用if……else语句进行判断选择,判断哪家是小康家庭,哪家是中等家庭,哪家是贫困家庭并且输出.
voidfib(peasantnu[],intn)
{
for(i=0;i {if()printf("\n"); elseif()printf("\n"); elseprintf("\n"); } } 13、把所有程序写入文件中 定义函数为voidprintfile(peasantnu[],intn) 首先先定义文件指针,用fopen(“filename”,“w”)打开文件并判断是否能打开文件,最后再用fclose(文件指针)关闭文件。 这个程序大体的设计便是如此,它包含了我们学过的许多知识,运用了许多重要的容,总体分析即是如此。 三、项目关键代码(加注释) #include #include #include #include typedefstruct/*定义结构体数组*/ { charnum[20]; charname[20]; longintincome; }peasant; peasantnu1[10000]; voidshow_menu(); intcreate(peasantnu[],intn); voidprint(peasantnu[],intn); voidsort(peasantnu[],intn); intinsert(peasantnu[],intn); intdel(peasantnu[],intn); voidave(peasantnu[],intn); voidfib(peasantnu[],intn); voidprintfile(peasantnu[],intn); voidmain()/*主函数*/ { intn=0; intno; do { show_menu(); printf("pleaseinputyourchoice\n"); scanf(“%d”,&no); switch(no) { case1: printf("输入记录\n"); n=create(nu1,n);break; case2: printf("输出信息\n"); print(nu1,n);break; case3: printf("按门牌号排序并显示\n"); sort(nu1,n); printf("排序成功! \n"); print(nu1,n); printf("\t\t");break; case4: printf("插入信息并按门牌号排序及显示\n"); n=insert(nu1,n); print(nu1,n); printf("\t\t");break; case5: printf("根据查找并删除记录\n"); n=del(nu1,n); printf("\t\t"); system("pause");break; case6: printf("计算总收入和人均收入\n"); ave(nu1,n);system("pause");break; case7: printf("找出小康家庭,中等家庭,贫困家\n"); fib(nu1,n);system("pause");break; case8: printf("循环写入数据\n"); printfile(nu1,n); printf("\t\t"); system("pause");break; case0: printf("\t\t使用,祝你好运,再见! \n"); printf("\t\t"); system("pause"); exit(0); } }while(no! =0); } voidshow_menu() {system("cls");/*运行前清屏*/ printf("************************主菜单**********************\n"); printf("*1.输入农民工的门牌号、、收入*\n"); printf("*2.输出所有农民工的信息*\n"); printf("*3.实现按门牌号进行升序排序*\n"); printf("*4.实现农民信息的插入,后按门牌号从小到大输出*\n"); printf("*5.根据查找,并删除该信息*\n"); printf("*6.计算全村总收入和人均收入*\n"); printf("*7.找出小康家庭,中等家庭,贫困家庭*\n"); printf("*8.把所有农民工信息写入到文件中去*\n"); printf("*0.退出*\n"); printf("****************************************************\n"); } intcreate(peasantnu[],intn)/*输入信息*/ { inti=0; charsign,x[10];/*x[10]为清除多余的数据所用*/ while(sign! ='n'&&sign! ='N')/*判断*/ { printf("门牌号: ");/*交互输入*/ scanf("%s",nu[n+i].num); printf(": "); scanf("%s",nu[n+i].name); printf("收入: "); scanf("%d",&nu[n+i].income); gets(x);/*清除多余的输入*/ printf("是否继续输入? (Y/N)"); scanf("%c",&sign);/*输入判断*/ i++; } return(n+i); } voidprint(peasantnu[],intn)/*输出结果*/ { inti; printf("--------------------------------------------------\n");/*格式头*/ printf("门牌号收入\n"); printf("--------------------------------------------------\n"); for(i=1;i if(i>1&&i%10==0)/*每十个暂停*/ {printf("--------------------------------------------------\n");/*格式*/ printf("\t\t"); system("pause"); printf("--------------------------------------------------\n"); } } printf("\t\t"); system("pause"); } voidsort(peasantnu[],intn)/*按门牌号排序*/ { inti,j; chart[10]; ints; for(i=0;i for(j=0;j if(strcmp(nu[j].num,nu[j+1].num)>0) {strcpy(t,nu[j+1].num); strcpy(nu[j+1].num,nu[j].num); strcpy(nu[j].num,t); strcpy(t,nu[j+1].name); strcpy(nu[j+1].name,nu[j].name); strcpy(nu[j].name,t); s=nu[j].income; nu[j].income=nu[j+1].income; nu[j+1].income=s; } } intinsert(peasantnu[],intn)/*插入记录,并按门牌号升序排序*/ { charx[100];/*清除多余输入所用*/ printf("农民门牌号: ");/*交互式输入*/ scanf("%s",nu[n].num); printf("农民: "); scanf("%s",nu[n].name); printf("农民工资: "); scanf("%d",&nu[n].income); gets(x); n++; sort(nu,n);/*调用排序函数*/ printf("插入记录成功! \n");/*返回成功信息*/ return(n); } intdel(peasantnu[],intn)/*按查找并删除记录*/ { chars[20]; inti=0,j; printf("输入农民的: ");/*交互式问寻*/ scanf("%s",s); while(strcmp(nu[i].name,s)! =0&&i if(i==n) { printf("对不起没找到该农民! \n");/*返回失败信息*/ return(n); } for(j=i;j { strcpy(nu[j].num,nu[j+1].num); strcpy(nu[j].name,nu[j+1].name); nu[j].income=nu[j+1].income; } printf("删除记录成功! \n");/*返回成功信息*/ return(n-1); } voidave(peasantnu[],intn) { inti; floataverage=0.0; longintsum=0; peasant*p; p=nu; for(i=0;i sum+=p->income; average=sum/n; printf("全村总收入是: %ld\n",sum); printf("人均收入是: %f",average); } voidfib(peasantnu[],intn) { inti; for(i=0;i { if(nu[i].income>20000) printf("是小康家庭\n"); elseif(nu[i].income>10000) printf("是中等家庭\n"); elseprintf("是贫困家庭\n"); } } voidprintfile(peasantnu[],intn) { inti=0; FILE*fp;/*定义文件指针*/ charfilename[100];/*定义文件名*/ printf("循环写入数据\n");/*输入文件名*/ printf("输入文件名: "); scanf("%s",filename); if((fp=fopen("filename","w"))==NULL)/*打开文件*/ { printf("无法打开该文件\n"); system("pause"); return; } fprintf(fp,"%d\n",n);/*循环写入数据*/ while(i { fprintf(fp,"%-10s%-10s%-10s%-10d\n",nu[i].num,nu[i].name,nu[i].income); i++; } fclose(fp);/*关闭文件*/ printf("写入成功! \n");/*返回成功信息*/ } 四、项目调试和运行(界面) 1、输入农民的信息并显示出界面 2、选择2,显示出输入的农民的信息 3、按任意键并选择3,可以对输入的信息进行升序排序 4、按任意键并选择4,可以插入一条记录并会按升序排序显示出来 5、按任意键并选择5,可以查找一条记录并会删除该条记录 6、按任意键并选择6,可以计算出全村总收入和人均收入 7、按任意键并选择7,可以找出小康家庭等 8、按任意键并选择8,可以写入文件 图见下面 五、实训设计的心得体会 在为期将近十天的C语言程序设计过程中,我从中学到很多,我受益匪浅,感受很深,让我从中了解到C语言程序编程的奥妙,学会了许多关于编程的代码,我在这次编写程序中,虽然有点累,但是我从中也得到了乐趣,我觉得编写程序越来越有趣。 但是在编写程序的过程中并不是一帆风顺、顺顺利利的,一开始编写的时候并不知道该怎么着手去编写,很茫然,但是后来经过老师的提点以及提示,我能够去试着编写一个一个小片段,当我把这些小程序拼到一起变成大程序时,我很高兴,因为我毕竟做出来一些容了。 当我将这些程序利用VC进行编译、的时候,程序出现了许多错误,当时吓了一跳,但我并没有气馁,我试着去找这些错误并改正,其中程序中的错误有很多种,比如有语法错误,逻辑错误等。 语法错误例如: (1)字符与字符串应该用单引号还是用双引号,在程序中我将单引号错用成双引号; (2)忘记定义变量。 在该程序中我忘记了定义有些所用变量。 (3)函数声明与函数定义不一致。 在程序中我声明函数时,将参数顺序不匹配。 (4)函数实参与形参的类型不一致,在此程序中,我将一个定义成整型,而定义另一个时却定义成单精度型,导致程序出错误。 语法错误还有很多,我在程序中还改正了很多,这些错误让我印象深刻,在以后的编写程序中我要牢牢记住。 除了许多语法错误外,还有很多逻辑错误以及警告,这些就要我们一步一步去检查程序。 在这个程序中使我印象最深刻的错误是: 程序运行出来,但是结果却一闪而过,有些界面不能显示出来,但是经过老师的指导,我将这个错误解决了。 在实训过程中自己有时候也想过放弃,可是当自己看到这么一大段代码是放弃的心又被淹没了,因为看到这长长的代码自己的信心又被提升起来,编写程序的乐趣也有了。 在这次的实训中我知道了要做一个程序,首先要知道程序的算法,在了解算法的基础上要知道怎样运用算法,进一步说是怎样运用算法写程序,不管是大程序还是小程序都要用到算法。 平时我们学习C语言只是为了考试以及做一些简单的题目,然而这次我们做实训给我们将所学知识运用于解决实际问题的机会,我们从中得到了很多,在运用所学知识的过程中,记住这些知识,让我们将这些知识应用到更广泛的领域。 这次的编写程序又让我感受到学习编写程序可以锻炼缜密的思维,在平时我们只编写一些小程序,句段比较少,一些错误都很容易被检查出来,但是这次实训项目的程序语段比较多,难以检查,那一刹那感到很着急,但是改正了一些之后,信心就被提了上来,在经过老师的指点,改正了许多错误。 实训不仅是检查一个人知识掌握了多少,其实更重要的实检测你的实践能力,以及看你是否细心、是否有缜密的思维,这次实训懂得了只要你具备以上几个条件,那么你的实践能力不会太差,所以,在这方面我们要加强锻炼,磨练自己,使自己有更高的提高。 六、参考文献 1、C程序设计(第三版)清华大学谭浩强编著 2、C语言程序设计实验指导人民邮电丽华主编 3、C语言程序设计案例教程(习题解析与实验指导) 清华大学基温编著
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程 设计 报告