版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE19C语言课程设计名称:通信录管理系统学院:机电学院班级:075102-23姓名:闵德顺学号:20101003082指导老师:谷老师前言课程设计目的:C语言编程实践是学习C语言的一个重要环节,为提高学生的程序设计能力,通过课堂和上机实践使学生的程序设计能力有一个上升的台阶。通过前四单元的温故而知新、庖丁解牛、举一反三、熟能生巧等过程的练习之后能够解决一些简单的实际问题。题目要求具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。数据包括:人名、工作单位、电话号码和E-MAIL地址。可对记录中的姓名和电话号码进行修改。可增加和删除记录。可显示所有的保存记录。(5)可按人名或电话号码进行查询2、需求分析根据题目要求,建立文件,应选择结构体数组来存放数据,再定义一个全局变量和文件指针进行程序的运行,然后把数据信息存入文件中,所以要提供结构体和文件的输入输出等操作;在程序中要进行数据的插入、删除、更新、查询等操作,所以需要建立相应的模块来实现,为简便起见,还应建立一个主菜单,在每个模块中建立相应的副菜单;另外,还要提供键盘式选择菜单来实现选择功能,使程序在运行时达到要求。3、总体设计根据题目要求,可以将系统分为:输入数据模块;查看数据模块删除数据模块;增加数据模块修改数据模块查找数据模块;系统功能模块图通讯录管理系统通讯录管理系统插入数据模块查看数据模块删除数据模块增加数据模块修改数据模块查找数据模块4、详细设计1、主函数;主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。流程图显示一系列功能选项开始输入显示一系列功能选项开始输入n,判断是否是0~6根据n的值调用各模块函数结束YN程序代码:voidmenu(){intn;intw1;voidadd();puts("\n\t\t\t\t欢迎使用通讯录管理系统\n\n"); puts("\t\t**********************菜单**********************");puts("\t\t\t\t1.输入联系人");puts("\t\t\t\t2.查看联系人"); puts("\t\t\t\t3.删除联系人"); puts("\t\t\t\t4.增加联系人"); puts("\t\t\t\t5.修改联系人信息"); puts("\t\t\t\t6.查找联系人");puts("\t\t\t\t0.退出系统"); puts("\n\n\t\t************************************************"); printf("请你选择(0-6):[]\b\b");do{ scanf("%d",&n); if(n<0||n>6) {printf("你的选择有误!请重新选择:\n"); w1=1;getchar();} elsew1=0; }while(w1==1);switch(n){ case1:shuru();break; case2:chakan();break; case3:del();break; case4:zj();break; case5:xiugai();break; case6:cz();break; case0:{printf("\n\t\t\t谢谢使用!\n");exit(0);}}}2.输入数据模块这个模块的功能是输入并保存联系人的信息,输入是输入到全局结构体数组变量里的,调用save函数储存到文件里,然后调用back函数提示使用者进行下一步操作。流程图开始开始输入要输入的联系人个数n调用save函数保存联系人信息结束调用back函数i=ni=0YNi++程序代码:voidshuru(){inti,n; printf("你想添加多少个联系人?"); scanf("%d",&n); printf("\n现在开始增加联系人\n\n"); for(i=0;i<n;i++) { printf("\n输入第%d个联系人的信息\n",i+1); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作单位\n"); scanf("%s",per[i].adr); printf("电话号码\n"); scanf("%s",per[i].pho); printf("电子邮件\n"); scanf("%s",per[i].email);}j=i ; save(); printf("\n已经添加完成并保存。"); back();}3浏览数据模块这个模块的功能是查看所有文件中保存的联系人信息,直接调用show函数,然后调用back函数提示使用者进行下一步操作。流程图开始开始调用show函数调用back函数结束程序代码:chakan(){ show(); back();}4.数据删除模块这个模块的功能是删除通讯录中的联系人,先调用show函数,然后提示用户选择要删除的联系人的序号,然后修改结构体数组的数据,调用save函数保存。流程图:开始开始调用show函数,得到人数j输入序号n,判断是否0~j删除结构体数组里的数据调用back函数结束调用save函数保存YN程序代码:voiddel(){inta,l,w; printf("\n你想删除哪个联系人?\n\n"); show(); printf("\n请输入你要删除的联系人的序号:"); scanf("%d",&a); do{ if(a<0||a>j){w=0; printf("\n你的输入有误,请重新输入:"); scanf("%d",&a);} elsew=1;}while(w==0); for(l=a-1;l<j;l++) per[l]=per[l+1]; j=j-1;save();printf("\n已经删除完成并保存。"); back();}5增加数据模块这个模块的功能是向通讯录中增加联系人信息,和程序与输入模块类似,先通过load函数读取文件中的信息,然后增加数据,最后调用save函数保存流程图开始开始:调用load函数调用load函数输入增加的个数n输入增加的个数n调用load函数i=j调用back函数i=j调用back函数结束结束i++i++Ni=n+jYNi=n+jY调用save函数保存联系人信息调用save函数保存联系人信息程序代码:voidzj(){inti,n=0;load();printf("你想增加多少个联系人?");scanf("%d",&n); printf("\n现在开始增加联系人\n\n");for(i=j;i<n+j;i++) { printf("\n输入第%d个联系人的信息\n",i+1); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作单位\n"); scanf("%s",per[i].adr); printf("电话号码\n"); scanf("%s",per[i].pho); printf("电子邮件\n"); scanf("%s",per[i].email); }j=i;save(); printf("\n已经增加完成并保存。"); back();}6修改数据模块这个模块的功能是修改通讯录中联系人的信息,调用show函数让用户确定要修改的联系人,然后用户直接输入要修改的联系人的序号,在依次输入修改过后的信息最后调用save函数保存。流程图开始开始调用show函数调用show函数输入要修改的联系人的序号输入要修改的联系人的序号输入修改后的联系人的信息输入修改后的联系人的信息调用save函数保存联系人信息调用save函数保存联系人信息结束结束程序代码:voidxiugai(){inti=0,w; show(); printf("\n请输入你要修改的联系人的序号:");scanf("%d",&i); do{ if(i<0||i>j){w=0; printf("\n你的输入有误,请重新输入:"); scanf("%d",&i);} elsew=1; }while(w==0); i--;printf("\n请输入修改后的联系人的信息\n:"); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作单位\n"); scanf("%s",per[i].adr); printf("电话号码\n"); scanf("%s",per[i].pho); printf("电子邮件\n"); scanf("%s",per[i].email); save(); printf("\n已经修改完成并保存。"); back();}7查找数据模块这个模块的功能是查找联系人信息,可以通过姓名和电话号码查找,先调用load函数从文件中读取联系人信息,然后通过循环查找联系人,找到后输出联系人信息。-程序代码:voidcz(){intn,w=1;printf("你想通过什么方式查找?\t\t1.姓名\t\t2.电话号码\n"); scanf("%d",&n); do{ if(n==1){czxm();back();} if(n==2){czdh(); back();} else{w=0;printf("\n你的输入有误,请重新输入:");scanf("%d",&n);}}while(w==0); }流程图开始开始输入n,判断n=1调用czxm函数调用czdh函数结束Y调用back函数通过姓名查找流程图开始开始输入要查找的姓名调用load函数i=0文件中存在输入的姓名输出查找到的联系人信息i++结束YN通过电话号码查找流程图开始开始输入要查找的姓名调用load函数i=0文件中存在输入的电话号码输出查找到的联系人信息i++结束YN(1)通过姓名查找程序代码:voidczxm(){inti;chara[20]; printf("\n请输入你要查找的联系人的姓名:"); scanf("%s",a);load(); for(i=0;i<j;i++) { if(strcmp(per[i].nam,a)==0) {printf("\n你要查的联系人的信息是:\n"); printf("\n姓名\t\t工作单位\t电话号码\t电子邮件\n"); printf("%-8s\t%-8s\t%-15s\t%-15s\n", per[i].nam,per[i].adr,per[i].pho,per[i].email); break;} } if(i==j)printf("\n\n找不到你要查看的联系人!!!");}(2)通过电话号码查找程序代码voidczdh() {inti;chara[20]; printf("请输入你要查找的联系人的号码:");scanf("%s",a);load();for(i=0;i<j;i++) { if(strcmp(per[i].pho,a)==0) {printf("\n你要查的联系人的信息是:\n"); printf("姓名\t\t工作单位\t电话号码\t电子邮件\n"); printf("%-8s\t%-8s\t%-15s\t%-15s\n", per[i].nam,per[i].adr,per[i].pho,per[i].email); break;} }if(i==j)printf("\n\n找不到你要查看的联系人!!!");}8公共函数:(1)save函数save函数的功能是把存放到结构体数组里的数据写入文件中,用于直接查看和下次读取。程序代码:voidsave(){inti;FILE*fq;if((fp=fopen("15.txt","w"))==NULL){ printf("打开文件出错!!\n"); return;}for(i=0;i<j;i++)fwrite(&per[i],sizeof(structperson),1,fp);fclose(fp);if((fq=fopen("通讯录.txt","w"))==NULL){ printf("打开文件出错!!\n"); return;}for(i=0;i<j;i++){ fprintf(fq,"%d\t%-16s%-16s%-16s%-16s\n", i+1,per[i].nam,per[i].adr,per[i].pho,per[i].email);}fclose(fq);}(2)load函数load函数的功能是从已经保存的文件中读数据,把数据存入结构体数组中。同时把联系人个数存放到全局变量j中。程序代码:voidload(){inti;if((fp=fopen("15.txt","r"))==NULL)printf("打开文件出错!!\n"); for(i=0;!feof(fp);i++) fread(&per[i],sizeof(structperson),1,fp); fclose(fp); j=i;}(3)show函数:show函数的功能是从文件中读取联系人信息,然后输出到屏幕上。程序代码:voidshow(){inti;printf("序号\t姓名\t\t工作单位\t电话号码\t电子邮件\n");load();for(i=0;i<j;i++) { printf("%d\t%-16s%-16s%-16s%-16s\n", i+1,per[i].nam,per[i].adr,per[i].pho,per[i].email);} }(4)back函数back函数的功能是在每次完成一个指令后提示用户进行下一步操作。程序代码:voidback(){inti,w;puts("\n\n"); printf("\t\t\t现在你要做什么??\n\n\t1.返回菜单\t2.浏览联系人\t3.退出系统\n\n"); printf("请你选择1-3:[]\b\b"); scanf("%d",&i); printf("\n\n"); do{ if(i==1){w=1;menu();} if(i==2){w=1;chakan();} if(i==3){w=1;printf("\n\t\t\t谢谢使用!\n");exit(0);} else{w=0;printf("\n你的输入有误,请重新输入:");scanf("%d",&i);} } while(w==0);}5、运行结果1、输入数据模块;出现菜单后,输入1按Enter结果如下:输入完成后出现下图:输入数据模块出现菜单后,输入2按Enter结果如下:删除数据模块;出现菜单后,输入3按Enter结果如下:增加数据模块;出现菜单后,输入4按Enter结果如下:修改数据模块;出现菜单后,输入5按Enter结果如下:查找数据模块;出现菜单后,输入6按Enter通讯录中不存在要查找的联系人时结果如下:通讯录中存在要查找的联系人时结果如下:6、总结与体会在老师的带领下进行了C语言程序实践学习。在短短八天的实习期间使我获取了不少新知识也巩固了许多老知识。在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。C语言是需要有一定基础、而且动手能力强的学科。上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、巩固贯穿系统知识、掌握程序设计方法、提高程序设计能力,这些都必须通过充分的实际上机操作才能完成。课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。这次上机实习让我学到了很多有用的东西,巩固了之前的学习,让我学到了在教室和做题中学不到的一些知识,通过这个程序的学习,使我进一步理解和运用结构化程序设计的思想和方法。相信对以后初步掌握开发一个小型实用系统的基本方法,学会调试一个比较长程序的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语言进行程序设计的能力。程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常称为流程,设计好如何进行程序的细编在程序量很大的情况下解决问题是很重要的。一个大的程序,一般是经过很多步才完成,不断的进行程序的调试来完成它。现在程序基本上是完成了,里面或多或少的存在问题。其中在对数据进行输入的时候,不太方便,可以设计一个程序使在完成一个的输入后返回副菜单而不是主菜单;删除模块可以加上一些程序使删除的时候有选择性而不是直接删除,没有后悔的余地。总的来说,这次课程设计还是比较成功的,虽然不是达到很完美。附录:源程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>FILE*fp;intj;structperson{ charnam[11];charadr[20]; charpho[15]; charemail[20];};structpersonper[50];voidmenu();voidsave();voidshow();voidchakan();voidshuru();voidcz();voiddel();voidzj();voidczxm();voidxiugai();voidczdh();voidback();voidload();voidmain(){menu();}voidmenu(){intn;intw1;voidadd();puts("\n\t\t\t\t欢迎使用通讯录管理系统\n\n"); puts("\t\t**********************菜单**********************");puts("\t\t\t\t1.输入联系人");puts("\t\t\t\t2.查看联系人"); puts("\t\t\t\t3.删除联系人"); puts("\t\t\t\t4.增加联系人"); puts("\t\t\t\t5.修改联系人信息"); puts("\t\t\t\t6.查找联系人");puts("\t\t\t\t0.退出系统"); puts("\n\n\t\t************************************************"); printf("请你选择(0-6):[]\b\b");do{ scanf("%d",&n); if(n<0||n>6) {printf("你的选择有误!请重新选择:\n"); w1=1;getchar();} elsew1=0; }while(w1==1);switch(n){ case1:shuru();break; case2:chakan();break; case3:del();break; case4:zj();break; case5:xiugai();break; case6:cz();break; case0:{printf("\n\t\t\t谢谢使用!\n");exit(0);}}}voidshuru(){inti,n; printf("你想添加多少个联系人?"); scanf("%d",&n); printf("\n现在开始增加联系人\n\n"); for(i=0;i<n;i++) { printf("\n输入第%d个联系人的信息\n",i+1); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作单位\n"); scanf("%s",per[i].adr); printf("电话号码\n"); scanf("%s",per[i].pho); printf("电子邮件\n"); scanf("%s",per[i].email); } j=i ; save(); printf("\n已经添加完成并保存。"); back();}voidcz(){intn,w=1;printf("你想通过什么方式查找?\t\t1.姓名\t\t2.电话号码\n"); scanf("%d",&n); do{ if(n==1){czxm();back();} if(n==2){czdh(); back();} else{w=0;printf("\n你的输入有误,请重新输入:");scanf("%d",&n);}}while(w==0); }voidczxm(){inti;chara[20]; printf("\n请输入你要查找的联系人的姓名:"); scanf("%s",a);load(); for(i=0;i<j;i++) { if(strcmp(per[i].nam,a)==0) {printf("\n你要查的联系人的信息是:\n"); printf("\n姓名\t\t工作单位\t电话号码\t电子邮件\n"); printf("%-8s\t%-8s\t%-15s\t%-15s\n", per[i].nam,per[i].adr,per[i].pho,per[i].email); break;} } if(i==j)printf("\n\n找不到你要查看的联系人!!!");}voidczdh() {inti;chara[20]; printf("请输入你要查找的联系人的号码:");scanf("%s",a);load();for(i=0;i<j;i++) { if(strcmp(per[i].pho,a)==0) {printf("\n你要查的联系人的信息是:\n"); printf("姓名\t\t工作单位\t电话号码\t电子邮件\n"); printf("%-8s\t%-8s\t%-15s\t%-15s\n", per[i].nam,per[i].adr,per[i].pho,per[i].email); break;} }if(i==j)printf("\n\n找不到你要查看的联系人!!!");}voidchakan(){ show(); back();}voiddel(){inta,l,w; printf("\n你想删除哪个联系人?\n\n"); show(); printf("\n请输入你要删除的联系人的序号:"); scanf("%d",&a); do{ if(a<0||a>j){w=0; printf("\n你的输入有误,请重新输入:"); scanf("%d",&a);} elsew=1; }while(w==0); for(l=a-1;l<j;l++) per[l]=per[l+1]; j=j-1; save();printf("\n已经删除完成并保存。"); back(); }voidxiugai(){inti=0,w; show(); printf("\n请输入你要修改的联系人的序号:");scanf("%d",&i); do{ if(i<0||i>j){w=0; printf("\n你的输入有误,请重新输入:"); scanf("%d",&i);} elsew=1; }while(w==0); i--;printf("\n请输入修改后的联系人的信息\n:"); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作单位\n"); scanf("%s",per[i].adr); printf("电话号码\n"); scanf("%s",per[i].pho); printf("电子邮件\n"); scanf("%s",per[i].email); save(); printf("\n已经修改完成并保存。"); back();}voidzj(){inti,n=0;load();printf("你想增加多少个联系人?");scanf("%d",&n); printf("\n现在开始增加联系人\n\n");for(i=j;i<n+j;i++) { printf("\n输入第%d个联系人的信息\n",i+1); printf("姓名\n"); scanf("%s",per[i].nam); printf("工作单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年放射性核素遥控后装机项目评价分析报告
- 2024至2030年中国锡制杯垫行业投资前景及策略咨询研究报告
- 2023年洗碗清洁剂项目综合评估报告
- 2023年工程和技术研究与试验发展服务项目综合评估报告
- 2024年酒店家具项目综合评估报告
- 2024年轻工涂料项目成效分析报告
- 2024至2030年中国管带直料半自动蛇形弯管机数据监测研究报告
- 2024至2030年中国方便式料桶数据监测研究报告
- 2024至2030年中国小阴角线数据监测研究报告
- 足太阳膀胱经、穴1(题后含答案及解析)
- 垫片冲压模具设计毕业设计论文
- 常见矩形管规格表
- 高中学生社区服务活动记录表
- Python-Django开发实战
- 小学道法小学道法1我们的好朋友--第一课时ppt课件
- 配电箱安装规范
- 中英文商务派遣函样板
- 幼儿园大班主题教案《超市》含反思
- 弯臂车床夹具设计说明书
- 企业员工健康管理存在的问题与解决途径探讨
- 浅谈初中数学教学新课标理念的运用
评论
0/150
提交评论