当前位置首页 > 计算机 > 通信/网络
搜柄,搜必应! 快速导航 | 使用教程

C语言课程设计手机通信录管理系统计

文档格式:DOC| 29 页|大小 891.65KB|2025-03-16 发布|举报 | 版权申诉
第1页
第2页
第3页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 29
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • C程序上机实习报告C语言课程设计   课程名称 C语言课程设计 教师姓名 本科生姓名 本科生学号 本科生专业 所在院系 类别: 日期: 课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩 目 录课程设计评语…………………………………………………………..2目录……………………………………………………………………..31.课程论文题目………………………………………………………. 42. 程序设计思路…………………………….……………….…….…..43.功能模块图…………………………………………………………..44.数据结构设计………………………………………………………..55.算法设计……………………………………………………………..56.程序代码……………………………………………………………157.程序运行结果………………………………………………………218.编程中遇到的问题及解决办法…………………………………289.总结心得及良好建议……………………………………………2810.致谢………………………………………………………………291.课程论文题目手机通信录管理系统设计模拟手机通讯录管理系统,实现对手机中的通讯录进行管理。

    功能要求下: (1)查看功能:选择此功能时,列出下列三类选择 A 办公类 B 个人类 C 商务类 ,当选中某类型时,显示出此类所有数据中的姓名和电话号(2)增加功能:能录入新数据一个结点包括:姓名、电话号码、分类(可选项有:A 办公类 B 个人类C商务类)、电子邮件例如:杨春 13589664454 商务类 chuny@ 当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号 (3)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改 (4)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号2.程序设计思路根据题目要求,通讯录中的每一条信息应当是以文本文件的方式存放,所以要提供文件的输入输出等操作;在程序中需要对通讯录内容的管理,应提供查看,增加,修改,删除条目等操作;另外还应提供键盘是选择菜单实现功能的选择3.功能模块图手机通信录管理系统退 出删除功能修改功能增加功能 4.数据结构设计根据题目要求,也是为了方便以后调用,我们选择应用结构体来进行该程序的编写。

    本程序也可以使用数组和链表完成,但是考虑到,链表对于我们还过于复杂,时间有限,且题目中有所谓“储存空间”的限制,所以没有必要应用链表没有应用数组是考虑到结构体能更好的完成调用工作而且可以使程序看起来更有条理程序中应用函数调用是必须的这种程序中,应用函数调用可以使系统更具模块化本程序的函数调用中,主函数只是对菜单函数进行了调用,这样由于子函数之间是可以相互调用的关系,所以,为后面调用菜单提供方便5. 算法设计1、主函数主函数设计得应简单、直观,所以我应用了大量的函数调用为了方便主菜单也可以调用,所以把菜单设计成了一个调用函数,具体方法流程可见流程图流程图】显示菜单列出功能输入n选择需要的功能,判断n的值是否在1—5之间 否 是根据n的值调用各功能模块函数【程序】 /*菜单函数*/void menu(){int n,w1; do {puts("\n\t\t*欢迎使用手机通讯录管理系统*\n"); puts("\t\t************菜单************\n"); puts("\t\t\t1.查看功能"); puts("\t\t\t2.增加功能"); puts("\t\t\t3.修改功能"); puts("\t\t\t4.删除功能"); puts("\t\t\t5.退出"); puts("\n\t\t****************************\n"); printf("请选择你想要的功能序号(1-5):"); scanf("%d",&n); if(n<1||n>5) {w1=1;getchar();printf("输入错误返回主菜单\n");menu();} else w1=0;}while(w1==1); switch(n) {case 1:search();break; case 2:add();break; case 3:modify();break; case 4:del();break; case 5:exit(0);break; }}/*主函数*/main(){menu();}2、各功能模块设计(1)查看功能模块 【需求分析】 该模块的功能是选择一个查询的类别就可以显示出该类别中的所有信息条目(办公类,个人类,商务类),并且其重要考虑到该类中的内容是否有为空的情况,以及在选择类别的过程中是否有输入错误的情况。

    流程图】显示已有的种类菜单输入n选择想要查看的种类,并判断n的值是否在1-3之间 根据n值输出各种类中所有成员信息是 否 返回主菜单【程序】 /*查看功能*/void search(){int n,w1;do{puts("\t\t**********查看类别**********\n");puts("\t\t\tA.办公类\t\n");puts("\t\t\tB.个人类\t\n");puts("\t\t\tC.商务类\t\n");puts("\t\t****************************\n");printf("请输入类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”):");scanf("%d",&n);printf("\n");if(n<1||n>3){w1=1;getchar();printf("输入错误返回主菜单\n");menu();}else w1=0;}while(w1==1);switch(n){case 1:putout(1);break; case 2:putout(2);break; case 3:putout(3);break;}}(2)添加功能模块 【需求分析】 该模块的功能是要求增添一个信息条目(其中包括姓名、电话号码、分类、电子邮件),观察这种信息条目,很容易就联想到用结构体的方式来储存。

    在添加之前应该先检查储存器是否已满;当然在添加过程应考虑到是否有姓名或电话号码重复的情况,在这种情况下应提醒操作者并退出操作调用加载函数n=load();并计算可以记录个数n 【流程图】 判断储存器是否已满 是 否 输入姓名判断输入的姓名是否存在 是 否输入电话号码 判断输入的电话号码是否存在 是 否通过n来输入类别,并判断n是否在1-3之间 是 输入电子邮件地址 返回主菜单 【程序】/*添加功能*/void add(){int i,n,m,w1;do{n=load();/*打开文件*/ if(n==N) {printf("储存器已满返回主菜单\n");menu();}/*判断储存是否已满*/ if(n!=0) {printf("请输入姓名:"); scanf("%s",&a[n].name); for(i=0;i3) {w1=1;getchar();printf("输入错误返回主菜单\n");menu();}else w1=0;}while(w1==1);switch(m){case 1:strcpy(a[n].type,"BGL");break; case 2:strcpy(a[n].type,"GRL");break; case 3:strcpy(a[n].type,"SWL");break; default:printf("输入错误返回上一菜单\n");menu();}printf("请输入电子邮件地址:");scanf("%s",&a[n].mail);saveA(n); /*将新的信息添加进通讯录*/choice();}(3)修改功能模块 【需求分析】 该模块的功能是先判断通讯录是否为空,不为空的前提下输入所想要修改的姓名,如果不存在则提醒操作者输入错误并返回主菜单,如果存在则显示其信息,并作出提示依次输入修改后的内容并记录保存。

    判断通讯录是否为空【流程图】 是 否 输入想要修改的姓名判断要修改的姓名是否存在 是 否 输入新的类别输入新的姓名输入新的电话号码输入新的电子邮箱地址返回主菜单 【程序】/*修改功能*/void modify(){int i,n,k,w1;do{char c[100]; n=load();if(n==0) {printf("\n");printf("通讯录为空返回主菜单\n\n");menu();}printf("请输入你要修改的人物名称:");scanf("%s",&c);for(i=0;i

    /if(i==n){printf("\n");printf("查无此人返回主菜单\n\n");menu();}printf("%-20s %-15s %-5s %s\n",a[i].name,a[i].phone,a[i].type,a[i].mail);printf("请输入新的类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”,取消修改请输入“4”):");scanf("%d",&a[i].zhonglei);k=a[i].zhonglei;if(k<1||k>5) {w1=1;getchar();printf("输入错误返回主菜单\n");menu(); } else w1=0;}while(w1==1);switch(k){case 1:strcpy(a[i].type,"BGL");break; case 2:strcpy(a[i].type,"GRL");break; case 3:strcpy(a[i].type,"SWL");break; case 4:printf("取消操作返回上一菜单\n");menu(); }printf("请输入新的姓名:"); scanf("%s",&(a[i].name)); printf("请输入新的电话号码:"); scanf("%s",&(a[i].phone));printf("请输入新的邮箱地址:"); scanf("%s",&(a[i].mail)); saveB(n);choice();}(4) 删除功能模块【需求分析】该模块的功能是通过输入某一姓名,判断改姓名是否存在,如果不存在,返回主菜单;如果存在则输出该姓名的全部信息,再由操作者判断是否删除该条目。

    删除后将其他的数据保存流程图】判断通讯录是否为空 是 否输入想要删除的姓名判断该姓名是否存在 否 是确定删除? 是删除成功,保存数据 否返回主菜单【程序】/*删除功能*/void del(){int i,n,j,w1,k;char b[100];do{n=load();if(n==0) {printf("\n");printf("通讯录为空返回主菜单\n\n");menu();}printf("请输入你要删除的人物名称:");scanf("%s",&b);for(i=0;i2) {w1=1;getchar();printf("输入错误返回主菜单\n");menu();} else w1=0;}while(w1==1);switch(k){case 1:for(j=i;j

    1) 加载函数load()【说明】 该函数可以用来加载所有的记录,并且可以返回所有记录的个数define MAGE struct messageMAGE{int zhonglei; char name[20]; char phone[15]; char type[5]; char mail[100]; };(在整个程序的开头有声明)【程序】load(){FILE *fp;int i;if((fp=fopen("file.txt","ab+"))==NULL){printf("\n不能打开此文件返回主菜单\n"); return NULL;}for(i=0;!feof(fp);i++) fread(&a[i],sizeof(MAGE),1,fp);fclose(fp);return(i-1);}(2)用于添加时的保存函数saveA()【说明】 该函数用于在将新信息添加至文件尾程序】void saveA(int i){FILE *fp;if((fp=fopen("file.txt","ab"))==NULL){printf("\n不能打开此文件\n"); return NULL;}if(fwrite(&a[i],sizeof(MAGE),1,fp)!=1)printf("读写错误\n");fclose(fp);}(3)用于将修改或删除之后记录的保存函数saveB()【说明】 该函数与上面的函数不同在于,它是将原有的文件覆盖后重新将记录全部录入【程序】void saveB(int n){FILE *fp;int i;if((fp=fopen("file.txt","wb"))==NULL)/* 以wb的方式打开时,会将原来的文件删去重建*/{printf("\n无法打开文件\n");return NULL;}for(i=0;i

    程序】void putout(int m){int i,n; int k=0; n=load(); for(i=0;i2) {w1=1;getchar();printf("输入错误返回主菜单\n");menu();} else w1=0;}while(w1==1); switch(k) {case 1:menu();break; case 2:exit(0);break; }}6.程序代码#include "stdio.h" #include "string.h"#include"malloc.h"#define MAGE struct message#define N 15MAGE{int zhonglei; char name[20]; char phone[15]; char type[5]; char mail[100]; }a[N];load();void saveA();void saveB();void menu();void choice();/*输出功能*/void putout(int m){int i,n; int k=0; n=load(); for(i=0;i3) {w1=1;getchar();printf("输入错误返回主菜单\n");menu(); } else w1=0;} while(w1==1);switch(n){case 1:putout(1);break; case 2:putout(2);break; case 3:putout(3);break;}}/*添加功能*/void add(){int i,n,m,w1;do{n=load();/*打开文件*/ if(n==N) {printf("储存器已满返回主菜单\n");menu();}/*判断储存是否已满*/ if(n!=0) { printf("请输入姓名:"); scanf("%s",&a[n].name); for(i=0;i3) {w1=1;getchar();printf("输入错误返回主菜单\n");menu(); }else w1=0;}while(w1==1);switch(m){case 1:strcpy(a[n].type,"BGL");break; case 2:strcpy(a[n].type,"GRL");break; case 3:strcpy(a[n].type,"SWL");break; default:printf("输入错误返回上一菜单\n");menu();}printf("请输入电子邮件地址:");scanf("%s",&a[n].mail);saveA(n); /*将新的信息添加进通讯录*/choice();}/*修改功能*/void modify(){int i,n,k,w1;do{ char c[100]; n=load();if(n==0) {printf("\n");printf("通讯录为空返回主菜单\n\n");menu();}printf("请输入你要修改的人物名称:");scanf("%s",&c);for(i=0;i5) {w1=1;getchar();printf("输入错误返回主菜单\n");menu(); } else w1=0;}while(w1==1);switch(k){case 1:strcpy(a[i].type,"BGL");break; case 2:strcpy(a[i].type,"GRL");break; case 3:strcpy(a[i].type,"SWL");break; case 4:printf("取消操作返回上一菜单\n");menu(); }printf("请输入新的姓名:"); scanf("%s",&(a[i].name)); printf("请输入新的电话号码:"); scanf("%s",&(a[i].phone));printf("请输入新的邮箱地址:"); scanf("%s",&(a[i].mail)); saveB(n);choice();}/*删除功能*/void del(){int i,n,j,w1,k;char b[100];do{n=load();if(n==0) {printf("\n");printf("通讯录为空返回主菜单\n\n");menu();}printf("请输入你要删除的人物名称:");scanf("%s",&b);for(i=0;i2) {w1=1;getchar();printf("输入错误返回主菜单\n");menu(); } else w1=0;}while(w1==1);switch(k){case 1:for(j=i;j2) {w1=1;getchar();printf("输入错误返回主菜单\n");menu();} else w1=0;}while(w1==1); switch(k) {case 1:menu();break; case 2:exit(0);break; }}/*菜单函数*/void menu(){int n,w1; do {puts("\n\t\t*欢迎使用手机通讯录管理系统*\n"); puts("\t\t************菜单************\n"); puts("\t\t\t1.查看功能"); puts("\t\t\t2.增加功能"); puts("\t\t\t3.修改功能"); puts("\t\t\t4.删除功能"); puts("\t\t\t5.退出"); puts("\n\t\t****************************\n"); printf("请选择你想要的功能序号(1-5):"); scanf("%d",&n); if(n<1||n>5) {w1=1;getchar();printf("输入错误返回主菜单\n");menu(); } else w1=0;}while(w1==1); switch(n) {case 1:search();break; case 2:add();break; case 3:modify();break; case 4:del();break; case 5:exit(0);break; }}/*主函数*/main(){menu();}7.程序运行结果欢迎界面:查看功能:增加功能:修改功能:删除功能:退出:输入5,再输入【enter】,即可退出。

    8.编程中遇到的困难及解决方法 此次的编程对于我而言无疑是一件巨大的挑战,因自己的能力的问题,在编程过程中可以说是困难重重,首先便是时间的问题,虽然足足有好几天的时间让我们在完成一个程序,但是水平确实比较水,在程序中发现,由于函数过多,链接的问题自己无法解决在运行程序的时候发现了其中的一些问题,并且得以解决,如运行中使用查看的时候,排版因为字数问题产生错位,这个可以通过转移字符来纠正该程序应用了文件的储存、调用文件在载入和保存的使用上可以应用不同的函数来完成,在此我使用了wb的方式来打开文件,并且用fwrite及fread进行文件的读写文件在进行调用或打开时应注意文件是否正常打开,这个细节十分重要,可以防止在操作过程中产生不必要的麻烦最大的问题便是由于大量并且长时间的运转,程序中的函数调用过多之后部分细节出现问题,目前自己依旧是无法通过更改程序数据来更改,但是通过推出保存,再重新运行便可以了9.总结心得及良好建议通过这次设计,让我得到了真正的锻炼我的程序中还有一些不足,但是由于时间问题,和自己经验不足的原因,导致没能得到及时修改,请老师见谅该程序应用了数组,这是因为题目中有要求,有所谓“储存空间”的限制。

    但是现实生活中,一般储存设备都已很大,更适合用链表完成,这点可以在以后进行改进,通过判断再完成,储存空间的提示这样通用性会大大提高到的自然,上面只是一个例子,程序中自然还有很多或大或小的毛病比如,在对程序长期操作后,可能出现计算运行错误这点是平常不容易看出来的我到现在仍没有找到问题的原因还需要后续检测 此次的课程设计基本上是我们所以同学的第一次经历,日后这样的机会还会有,并且以后我们会更多的去独立完成这样的项目但是对于初次体验的我们而言,确实由于时间以及经验不足等等方面的原因,这个任务很艰巨,相信很多同学虽然尽了自己的努力依旧无法完成,因此我希望老师在我们学习的过程中能够给予我们更多的帮助以及稍微的减轻一下课程的难度,这样的话同学们会更专心的投入到编程的快乐之中,品尝到c语言,计算机给我们带来的,以及老师们不懈努力下让我们收获的成果这样可以更好的达到老师们的目的,也更能让学生们学到更多的知识10.致谢这次学期结束的C语言课程设计虽然只有几天,但是却充实了我的整个假期,这次经历让我对编程产生了更多兴趣,让我渴望用更多的时间在编程上同样这次的学习让我了解了许多不止是编程的东西,我对电脑的理解范围也进一步扩大,作为一名计算机学院的学生,这是意义深远的。

    非常感谢老师们给予我们这样一个学习的平台,不但让我们得到了展现自我能力的机会同样让我们发现许多自身存在的问题,也在学习交流之中得到一些重要信息这让我对计算机产生了更多的热情,丰富了我的学习以及课余生活,感谢学校给予的机会,感谢老师们的付出衷心的希望老师们身体健康,活到老学到老,在帮助我们的同时也能够有所收获谢谢!!!28。

    点击阅读更多内容
    最新文档
    2025年作风建设学习教育开展情况的报告范文.docx
    在2025年民营企业座谈会上的主持讲话范文.docx
    在2025年全县教育领域群众身边不正之风和腐败问题集中整治调度会上的讲话范文.docx
    工委副书记在2025年机关DeepSeek应用专题辅导培训班开班仪式上的讲话范文.docx
    在2025年DeepSeek大模型政务应用培训会上的讲话范文.docx
    在青年干部培训结业典礼上的讲话文稿.docx
    2025年副书记防汛工作会议上的讲话范文.docx
    2025年主管商务部门党组书记在理论学习中心组会上研讨发言文稿.docx
    2025年国企党委关于干部职工思想政治工作情况的报告范文.docx
    在机关单位作风建设学习教育突出问题专项整治工作部署会议上的讲话范文.docx
    医院领导2025年党风廉政建设推进会上的讲话范文.docx
    2025年关于开展“以案促改”工作实施方案供参考.docx
    在2025年安全生产专项整治暨化工行业风险防控部署会上的讲话范文.docx
    领导干部在“十五五”发展规划编制启动会上的讲话文稿.docx
    2025年书记在慰问老干部暨情况通报会上的主持讲话提纲范文.docx
    2025年作风建设实施方案文稿.docx
    在2025年DeepSeek政务应用培训会上的讲话范文.docx
    2025年领导在DeepSeek政务应用培训会上的讲话参考范文.docx
    2025年国企党委关于干部职工思想政治工作情况的报告文稿.docx
    在青年干部培养工作座谈会上的讲话范文.docx
    卖家[上传人]:仙人指路
    资质:实名认证
    相关文档
    正为您匹配相似的精品文档