ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:36.58KB ,
资源ID:23463440      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23463440.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言课程设计报告通讯录.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言课程设计报告通讯录.docx

1、C语言课程设计报告通讯录 面向过程程序设计(C语言)课程设计 设计说明书通讯录系统起止日期: 2011年 01 月 03 日 至 2011年 01 月 08 日学生姓名XXX班级学号成绩指导教师(签字)计算机与通信学院 2011 年 01 月 08 日一、 课题任务设计一个通讯录管理系统。课题的主要任务是:1.对通讯录信息有添加、查找、显示、保存、删除、修改等操作功能。2.可以将输入的数据保存在文本文件中,并可以将其调出使用。我的主要任务是编写主函数,查找模块和修改模块。二、设计要求建立通讯录信息,信息至少包含姓名、住址、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、E-mai

2、l、QQ等。该系统提供添加、删除、修改和查找功能,其中按姓名方式删除、修改,按姓名、单位、分类方式查找。将通讯录保存在文件中。能够输出通讯录中的信息。二、 程序的功能设计创建:创建通讯录文件并对其命名添加:添加通讯录记录输出:显示通讯录记录删除:删除通讯录记录查找:查询通讯录记录修改:修改通讯录记录保存:将信息保存到文件中四、程序的数据设计该系统用下面六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想。下面六个模块都是利用C语言文件,向文件中追加数据、修改数据、查询数据和删除数据。创建:用fopen()建立一个文本文件,然后用fprintf()向其中输入数据(例如,向文件中输入“

3、姓名”,“地址”等), 并对文件进行命名。添加:可以添加通讯录记录,利用C语言文件,向文件中按顺序输入姓名、住址、单位、固定电话、手机号码、分类(如同事、朋友、同学、家人等)、E-mail、QQ,再用fclose()函数关闭并保存文件。输出:也是用通过循环依次输出文件中的数据,即输出所有通讯录里的记录。删除:输入你要删除的人的姓名后,系统会自动删除他(她)的记录,在删除通过switch语句满足提示你确认删除的功能,只有等你确认删除后才会删除。查找:为了满足用户的实际需求,设计了三种查询方式,可以用姓名、单位、分类三种方式查找通讯录记录。这里用到strcmp()函数,通过比较字符串是否相同来判别

4、是否找到相关信息,找到后,就把文件中的数据赋给对应的变量,再把变量所带的值输出到屏幕上。修改:输入你要修改的那个人的姓名后,系统会查找该通讯录文件(此时用发ftell()函数来跟踪文件指针的指向地址,找到个人的记录后,会显示他(她)的记录,然后通过fseek()函数来找到修改处的地址,然后用户再依次输入他(她)的相关信息来替代以前的记录。保存:用到fclose()函数,每次操作成功后会自动保存到指定的文件中。如下图所示:五、程序的函数设计下面是主函数部分:void main() while(1) /*通过一个无限循环来完成无数条记录的输入*/ int n; printf(nt*欢迎使用通讯录系

5、统*nn); printf(nt创建,请按1); printf(nt添加,请按2); printf(nt查找,请按3); printf(nt修改,请按4); printf(nt输出,请按5); printf(nt删除,请按6); printf(nt退出,请按0); printf(nt*nn); printf(n请选择(0-5): ); scanf(%d,&n); if(n=0) switch(n) case 1:creat();break; case 2:add(); break; case 3:search(); break; case 4:modify(); break; case 5:o

6、utput(); break; case 6:del(); break; case 0:exit(1); printf(nn操作完成,请再次选择!); else printf(nn选择错误,请再次选择!); 上面主要是菜单部分,用来提醒用户需要选择哪些功能。这部分是来通过一个无限循环(用while(1))来执行上述所有的功能模块,不断的输出菜单项目,用switch语句来执行用户选择的功能模块,每一个case后面就是对应的功能函数,(比如,用户输入数字2,那么就是执行添加功能,相应的就是执行case 2 后面的add()函数,然后用break语句跳出循环,再输出主菜单,如果用户要退出的话,只需选

7、择“0”就可以成功退出并且自动将数据保存到指定的文件中。如果用户选择的时输入的数据有误的话,会提示“选择错误,请再次选择!”,这样,用户就能够再次输入数据。查找模块:该查找功能分3种方式查找,姓名查找(按1),分类查找(按2),单位查找(按3)。这是通过switch语句来实现,case 1后面是按姓名查找函数,case 2 后面是按分类查找函数,case 3 后面是按单位查找函数。如果用户要选择一种方式查找通讯录记录,只需输入对应的数字就可以。三种方法大同小异,下面就说明姓名查找吧!查找用户,进入查找界面后并且键入“1”后,就执行姓名查找方式,此时界面上会显示“请输入姓名”,然后系统将用户输入

8、的姓名赋给对应的变量,然后用循环(用while(!feof(fp)这条语句来完成)来找出这个人的所有记录,并将其输出到屏幕上。如果没有此人的记录,那就会输出“对不起,通讯录中没有此人的记录”或“对不起,通讯录中没有此类人的记录”或“对不起,通讯录中没有此单位的记录”,这里输出视查找方式而定。执行查找功能后会返回主菜单,并提示用户再次选择。修改模块: 用户使用这个功能的时候,界面上会显示“请你输入要修改人的姓名:”等用户输入数据后,系统会通过循环从文件中寻找此人,该过程和删除模块是一样的,每次从文件中读取数据后,便把数据赋给相应的变量,再用该数据与用户输入字符串比较,如果相同,那就说明已找到该人

9、的数据;如果不同,那就执行下一个循环,直到找出为止,在寻找过程中,用ftell()函数来跟踪地址,修改的时候用fseek()函数来寻找地址,找到要修改的地址后,系统会显示该人的所有记录,然后输出“请输入新的姓名、住址、工作(或学习)单位、固定电话、手机号码、邮箱、QQ以及分类。”这时用户要按顺序输入数据。用户输入完成后,系统会显示“已修改!”并且返回主菜单。六、函数编码及调试编写的程序中很容易出现一些低级语法错误,(比如,有时候把%s写成了%d),当然这很容易找出并且更正,主要是一些算法错误很难找到,在调试的过程中,最令我头痛的就是编写修改模块时用到的ftell和fseek函数,好郁闷的,改了

10、好几天都没有进展,最后在机房里的时候请教了一下老师,经老师指点后,我就顿然开朗啦,原来是在寻找地址的时候出了错,但是待我修改后还是不可以,每次执行修改的时候总是修改了别的数据,不过我发现这个被修改的数据和我想修改的数据的都靠在一起,我就想是不是我输入数据的时候漏掉了一个字符?本来文本文件用ftell和fseek函数的时候就特别容易出错,所以我碰到这个麻烦的 时候,心情一点也不好,但潜意识告诉我,我不能放弃,然后我就再把程序看了几遍,我试着把下列的程序fprintf(fp,%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s,one.name, one.addr, o

11、ne.work_place,one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category);改为fprintf(fp,%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10sn,one.name, one.addr, one.work_place,one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category);改的时候就加了一个转义字符“n”,然后我再运行了一下,结果竟然对了,太巧了,我把整个程序仔细一看,原

12、来是在添加和创建模块的时候都有这个字符,如果后面修改的时候不加的话,文件上就会在排版上不符合导致在修改的时候修改错位置,嘿嘿,终于找到错误了,好有成就感的,就是这个小小的字符害我花了好几天时间,不过也获得了一个教训,那就是写程序的时候一定要注意前后的格式,要整体把握。七、总结这个课题是设计一个通讯录系统,该通讯系统能够较好的管理好我们的通讯录记录,也拥有比较完善的功能,但是该系统依旧有漏洞,此程序必须按照系统提示的操作来执行,不然的话就会使程序进入死循环,比如,如果我输入字符串的长度过长的话,程序就会终止运行了,并且还没有提示;后面的删除模块所用的方法是用空格替代,虽然可以删除,但达不到理想的

13、效果。在编写过程中,我逐步的了解了程序模块化设计的思想含义。在整个程序设计的过程中语法的错误还是比较容易检查的,但是对于那些逻辑思维的问题方面的缺陷不易查出,因此常常出现系统提示没有错误但是仍然不能够正常运行的境况,尽管有很多不足之处,但我在整个系统程序设计的过程中,我可以感受到自己对C语言有了一定的掌握,对整体的把握度也提高了很多。此外编程是一项高精度的工作,所以我们要有规范化,标准化的代码编写习惯,良好的编写习惯,不但有助于代码的纠错,也有助于不同人员之间的协作。 我们还要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想

14、看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大的避免重复性的工作。另外我们要重视程序的算法,在程序中,算法是灵魂,我们要努力学习各种先进的算法,提高自己的编程能力。附:系统的主要程序代码主函数部分:#include#include#include struct person char name10; /*姓名*/ char mobile_phone16; /*手机号码*/ char fixed_telephone16; /*固定电话*/ char work_place20; /*工作单位*/ char addr20; /*家庭住址

15、*/ char e_mail30; /*邮箱*/ char QQ12; /*QQ聊天软件*/ char category10; /*分类*/;char dir_name20=e:通讯录.txt;FILE *fp;void creat(); /*创建一个通讯录并命名,下次如果要打开以前的通讯录话,就在创建的时候输入以前的文件名称。*/void output();/*输出模块*/void add();/*添加模块*/void modify();/*修改模块*/void del();/*删除模块*/void search();/*查找模块*/void main() while(1) /*一次完成无数

16、条记录的输入*/ int n; printf(nt*欢迎使用通讯录系统*nn); printf(nt创建,请按1); printf(nt添加,请按2); printf(nt查找,请按3); printf(nt修改,请按4); printf(nt输出,请按5); printf(nt删除,请按6); printf(nt退出,请按0); printf(nt*nn); printf(n请选择(0-5): ); scanf(%d,&n); if(n=0) switch(n) case 1:creat();break; case 2:add(); break; case 3:search(); break

17、; case 4:modify(); break; case 5:output(); break; case 6:del(); break; case 0:exit(1); printf(nn操作完成,请再次选择!); else printf(nn选择错误,请再次选择!); 查找模块:void search() struct person one; int k,j=0; if(fp=fopen(dir_name,r)=NULL) printf(n不能打开通讯录); getchar(); exit(1); printf(n姓名查找请按1); printf(n分类查找请按2); printf(n单

18、位查找请按3); printf(n请选择查找方式(按回车键输入): ); scanf(%d,&k); switch(k) case 1: char s_name10; printf(n请输入姓名: ); scanf(%s,s_name); while(!feof(fp) fscanf(fp,%s%s%s%s%s%s%s%s,one.name, one.addr, one.work_place,one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category); if(!strcmp(s_name,one.name)

19、printf(n已经查到此人,记录为: n); printf(n%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s,one.name, one.addr, one.work_place, one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category); j=1; if(!j) printf(n对不起,通讯录中没有此人的记录); fclose(fp); break; case 2: char s_category10; printf(n请输入类别: ); scanf(%s,s_cate

20、gory); while(!feof(fp) fscanf(fp,%s%s%s%s%s%s%s%s,one.name, one.addr, one.work_place,one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category); if(!strcmp(s_category,one.category) printf(n已经查到此类人,记录为: n); printf(n%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s,one.name, one.addr, one.work_pl

21、ace, one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category); j=1; if(!j) printf(n对不起,通讯录中没有此类人的记录); fclose(fp); break; case 3: char s_workplace20; printf(n请输入工作单位 : ); scanf(%s,s_workplace); while(!feof(fp) fscanf(fp,%s%s%s%s%s%s%s%s,one.name, one.addr, one.work_place, one.fixed_te

22、lephone, one.mobile_phone, one.e_mail, one.QQ, one.category); if(!strcmp(s_workplace,one.work_place) printf(n已经查到此单位,记录为:n); printf(n%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s,one.name, one.addr, one.work_place, one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category); j=1; if(!j) prin

23、tf(n对不起,通讯录中没有此单位的记录); fclose(fp); break; 修改模块:void modify() struct person one; int k=0; long st; char name_modify10; printf(n请你输入要修改人的姓名: ); scanf(%s,name_modify); if(fp=fopen(dir_name,r+)=NULL) printf(n不能打开通讯录!); getchar(); exit(1); while(!feof(fp) st=ftell(fp); /*跟踪地址*/ fscanf(fp,%s%s%s%s%s%s%s%s

24、n,one.name, one.addr, one.work_place,one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category); if(!strcmp(name_modify,one.name) k=1; break; if(k) printf(n该名字已找到,他(她)的记录是:n); printf(%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10s,one.name, one.addr, one.work_place, one.fixed_telephone, one.m

25、obile_phone, one.e_mail, one.QQ, one.category); printf(n请输入新的姓名、住址、工作(或学习)单位、固定电话、手机号码、邮箱、QQ以及分类。请输入:n); scanf(%s%s%s%s%s%s%s%s,one.name, one.addr, one.work_place,one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category); fseek(fp,st,0); /*找到修改的地址*/ fprintf(fp,%-10s%-20s%-20s%-15s%-15s%-20s%-15s%-10sn,one.name, one.addr, one.work_place, one.fixed_telephone, one.mobile_phone, one.e_mail, one.QQ, one.category); printf(已修改!); else printf(n对不起,通讯录中没有此人的记录。); fclose(fp);神秘地址 Ddj1yu0GjzUu

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1