1、C语言编程课程设计心得C语言编程课程设计心得河南城建学院C语言程序设计课程设计报告适用专业工程管理专业课程名称C语言程序设计指导教师赵军民、魏新红、张芳芳设计人:051409112王田201*年6月一、设计目的和要求1.通过课程设计全面掌握C语言程序设计关键知识点,掌握C语言中数组、指针、结构体、文件等方面的基本知识。2.通过课程设计了解并掌握C语言程序设计的方法,熟悉C程序设计的开发环境及C程序的调试过程。3.培养查阅参考资料、手册的自学能力,通过独立思考深入钻研有关问题,学会自己分析、解决问题的方法。二、内容与设计思想1、系统功能描述(1)编译时,主菜单为如下:0、输入记录1、显示记录2、
2、按姓名查找3、按电话号码查找4、插入记录5、按姓名排序6、删除记录7、记录保存文件8、Quit(2)各项功能:0、输入记录:将所要记录的人的信息输入。1、显示记录:将所输入的记录一一显示。2、按姓名查找:从所记录中输入姓名查找其信息。3、按电话号码查找:输入学生的号码查找其信息。4、插入记录:在所记录中插入需要记录的人的信息。5、按姓名排序:对已有的记录按姓名第一个字母的ASCII码大小排列,并一一显示。6、删除记录:从记录中删除某学生的信息。7、记录保存文件:对输入的学生的信息进行保存。8、退出程序。2、总体设计思想运用所学知识编写一个简单的学生通讯录管理系统的程序,使它具有以下的功能:输入
3、学生的学号,姓名,班级,电话号码,地址,显示学生记录,增加学生记录,按照学生姓名进行排序,删除学生记录,查找学生记录,保存学生记录。其主要结构用如下图示表示:三、程序具体分析及操作时问题。1、程序具体分析。(1)文件名的使用:include称为文件包含命令,被包含的文件通常是由系统提供的,其扩展名为.h.stdio为standardinputoutput的缩写,意为“标准输入输出”.代码中只要有用到printfscanf等函数,头文件就要写#include这个在代码中必不可少的,因为编写代码就是为了输出结果;用到像getch()这种键盘输入函数的话,就需要用到#include;用到系统标准输出
4、函数的话,就用到#include;用到字符数组就要用#inciude。(2)指针使用:如FILE*fp、定义1个文件型指针变量,指针变量名字分别叫fp,定义后fp是指向FILE类型结构体的指针。可以使他指向某个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。指针是地址变量:它的值有两种:其一是地址,其二是内容。不同的表达方式可以取不同的值。指针是可以运算的,它的运算法则与变量是一致的。(3)结构体:如structLinkList定义结构体为LinkList。当结构体成员为指针的时候,每当给这个成员赋值之前必须先为这个结构体成员分配一个内存空间。(4)字符数组的比较:如strc
5、mp(studenti.name,name)=0,strcmp(studenti.phone,phone)=0,strcmp(studenti.phone,phone)=NULL都是用来比较输入的与原有的,当相等时即为0.(5)实现文件的打开和输入:除有scanf和printf以外还涉及到其他的,如fp=fopen(student.bin,wb)=NULL用fopen()函数来实现打开文件;fwrite(&studenti,sizeof(structrecord),1,fp)!=1fwrite用于二进制的文件输入输出也用于读写记录这里的记录是指一串固定长度的字节。(6)C语言中的一些结构。如f
6、or(j=i;jwhile(a8);returna;2操作时问题分析编好后进行运行时,有一些遗漏问题,如大括号的使用是否对起;语句的使用是否错误;对一个变量是否定义;输出是否有遗漏;数据的使用是否符合规定,定义是否正确等。对于调试,要看程序是否运行且达到预期效果,按照思路能够正确的使用。开始时在姓名输入上出了问题,但是是小问题,修改一下便可实现姓名、学号、班级、电话号码、地址的正常输出。四、个人任务得到正确的程序后,并对其进行调试、测试成功后,进行分组任务,而我得到的任务如下程序及解释:list()/*显示记录中的信息*/inti;/*定义整形变量i*/system(cls);/*清屏*/if
7、(num!=0)/*如果信息记录不为0*/printf(ntt*以下为通讯录所有信息*);for(i=0;iprintf(ntt*);elseprintf(ntt通讯录中无任何纪录);printf(ntt按任意键返回主菜单:);getch();return(0);/*返回0*/search()/*寻找信息*/intmark=0;inti;inta=0;printf(ntt*按姓名查找*);charname20;/*定义名字为20个字符*/printf(ntt请输入姓名:);scanf(%s,name);for(i=a;igetch();return(0);if(mark!=0)/*printf
8、(ntt没有相同姓名的用户纪录);printf(ntt按任意键返回主菜单);getch();return(0);elseprintf(ntt没有相同姓名的用户纪录);printf(ntt按任意键返回主菜单);getch();return(0);五、心得体会这次的课程设计实验是对我们进入大学以来学习C语言结果的一次大考验。自己动手,发现问题和解决问题。并发现了许多自己的不足,平时没掌握的知识在实践中暴漏,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分问题,还稍微有些小问题。但是,我相信在今的学习中,一定能把它解决好。当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学
9、来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。我不仅巩固C语言程序设计课程学习的内容,掌握设计的基本方法,强化上机动手能力,还进一步掌握以下了知识:数据类型、分支控制、循环控制、函数的定义及调用、结构体及数组、指针、文件操作、编译预处理等;通过课程设计,掌握了程序的局部测试、调试方法,建立程序系统调试、测试的基本概念和思想,学会较大程序的系统测试和调试方法。当我选择学生通讯录管理系统时,首先系统分析主要思路及框架,与同学讨论,联系所学知识,尽管一些文件要同组帮助找,也还有一些循环语句要具体分析,了解其运行路线,尤其是for,
10、while,if等的使用。我知道书上和老师讲的有限,故上网搜也是一种利用资源的表现。在编程中,特别是结构体,指针的部分,几乎是一片空白。不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以下一步就是开始正式的编程序了。当读懂了C语言编程的基本过程和方法。经过一波三折,终于开始正式编程。团队精神不可少,分工合作也是必须的,身为组长就要以身作则,带领好小组,做好各项工作。在开始,对本组人员进行整理,分析其特点,再分配任务,然后进行综合应用,最后对所需资料及要编的程序进行整理得出最后程序。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只
11、有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,是生活也更加好。六、源代码为:#includestdio.h#includestdlib.h#includestring.h#includeconio.h#includestdlib.h#definenull0structrecordcharname
12、20;charphone20;charadress40;charclassnumber10;charnumber30;student500;structLinkListstructrecordUS;structLinkList*next;a;structLinkList*head=null;intnum=0;FILE*fp;intmenu_select();intadduser();intlist();intsearch();intdisplay();intadd();intlistbyname();intdele();intsave();intexit();voidmain()system(
13、cls);for(;)switch(menu_select()case0:adduser();break;case1:list();break;case2:search();break;case3:display();break;case4:add();break;case5:listbyname();break;case6:dele();break;case7:save();break;case8:exit(0);menu_select()chars80;inta;printf(*_*pressanykeyentermenu!*_*n);getch();system(cls);printf(
14、tt*MENU*nn);printf(tt0.输入记录n);printf(tt1.显示记录n);printf(tt2.按姓名查找n);printf(tt3.按电话号码查找n);printf(tt4.插入记录n);printf(tt5.按姓名排序n);printf(tt6.删除记录n);printf(tt7.记录保存文件n);printf(tt8.Quitn);printf(tt*n);doprintf(nEnteryouchoice(08):);scanf(%s,s);a=atoi(s);while(a8);returna;adduser()printf(ntt*n);printf(ntt输入
15、姓名:);scanf(%s,&studentnum.name);printf(ntt输入电话号码:);scanf(%s,&studentnum.phone);printf(ntt输入地址:);scanf(%s,&studentnum.adress);printf(ntt输入班级:);scanf(%s,&studentnum.classnumber);printf(ntt输入学号:);scanf(%s,&studentnum.number);num+;printf(ntt是否继续添加?(Y/N):);if(getch()=y)adduser();return(0);list()inti;syst
16、em(cls);if(num!=0)请输入用户信息printf(ntt*以下为通讯录所有信息*);for(i=0;iinta=0;printf(ntt*);charname20;printf(ntt请输入姓名:);scanf(%s,name);for(i=a;ielseprintf(ntt按任意键返回主菜单);getch();return(0);if(mark!=0)printf(ntt没有相同姓名的用户纪录);printf(ntt按任意键返回主菜单);getch();return(0);elseprintf(ntt没有相同姓名的用户纪录);printf(ntt按任意键返回主菜单);getch
17、();return(0);display()intmark=0;inti;inta=0;printf(ntt*按电话查找*);charphone10;printf(ntt请输入电话号码:);scanf(%s,phone);for(i=0;iadd()inti;if(fp=fopen(student.bin,wb)=NULL)printf(ntt文件打开失败);for(i=0;iadduser();return(0);fclose(fp);printf(ntt通讯录文件已保存);printf(ntt按任意键退出程序ntt);exit(0);return(0);voiddeletebyphone(
18、)inti,j;intdeletemark=0;charphone20;printf(ntt请输入要删除用户电话号码:);scanf(%s,phone);if(num=0)printf(ntt对不起,文件中无任何纪录);printf(ntt按任意键返回主菜单);getch();return;for(i=0;iprintf(ntt电话:%s,studenti.phone);printf(ntt地址:%s,studenti.adress);printf(ntt学号:%s,studenti.number);printf(ntt是否删除?(y/n);if(getch()=y)for(j=i;jvoid
19、deletebyname()inta=0;intfindmark=0;intj;intdeletemark=0;inti;charname20;printf(ntt请输入要删除用户姓名:);scanf(%s,name);for(i=a;ideletemark+;printf(ntt删除成功);if(i+1)printf(ntt没有该用户的纪录);printf(ntt是否继续删除?(y/n);if(getch()=y)deletebyphone();return;return;elseif(findmark!=0)printf(ntt没有重名信息);printf(ntt没有该用户的纪录);pri
20、ntf(ntt是否继续删除?(y/n);if(getch()=y)deletebyphone();return;return;dele()charchoic;printf(ntt1-按电话号码删除2-按姓名删除);printf(ntt请选择:);choic=getch();switch(choic)case1:deletebyphone();break;case2:deletebyname();break;return(0);listbyname()inti,j;structrecordtmp;for(i=1;iintj;FILE*fp;fp=fopen(student.txt,w);if(fp=NULL)printf(cantopenthefile.);if(num!=0)for(j=0;j