版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
23/23C语言课程设计报告设计题目:写自己任务书上的题目专业班级学生指导教师设计时间设计任务:C语言课程设计任务书8题目:通讯录管理系统功能:录入联系人信息(包括、、地址、备注等);通讯录管理系统要现以下功能:1、输入每一位联系人记录,将其信息存入文件中。2、查询所有联系人的信息,并按可选的自定义规则进行排序;3、记录修改,将修改的记录信息保存于文件中。4、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件容显示出来)3、完成查询功能(可按、等进行查询)4、完成信息删除与修改功能,输入联系人后可删除或修改该条信息。5、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。要求:1、用C语言实现程序设计;2、利用结构体进行相关信息处理;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。2、实验总结报告:按照模板的格式。平时:验收:报告:总评成绩:指导教师签名:一、总体设计1.1功能模块设计1.系统功能模块图:添加:可以添加通讯录记录,依次输入编号、、年龄、、通讯地址、电子后,会提示是否继续添加。显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录容查询:可以选择用、、地址三种方式查询修改:输入欲修改的那个人的名字后,再依次输入编号、、年龄、、通讯地址、电子即可完成修改保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件1.2数据结构设计1)自定义的数据类型:typedefstruct{ charscore;/*编号*/ charname[10];/**/ charnum[15];/**/ charemail[20]; /**/ charage[8]; /*年龄*/ charadds[20]; /*住址*/}Person;2)全局变量:Personpe[80]定义结构体变量3.函数原型设计1)intmenu_select()函数功能:菜单界面,供用户选择不同的功能2)intInput(Personper[],intn)函数功能:添加记录输入参数:当输入的值不等于n或N时就继续添加,Personper[]用于接收输入的学生信息返回值:返回值代表添加的学生个数voidDisplay(Personper[],intn)函数功能:显示记录输入参数:当n为2时则显示记录,Personper[]用于接收学生信息3)intDelete_a_record(Personper[],intn)函数功能:删除记录输入参数:n用于判断是否有此记录,Personper[]用于接收学生信息返回值:用于检验是否截止4)voidQuery_a_record函数功能:查找记录输入参数:n用于判断是否有此记录,Personper[]用于接收学生信息5)voidChange(Personper[],intn)函数功能:修改记录输入参数:n用于判断是否有此记录,Personper[]用于接收学生信息6)voidWritetoText(Personper[],intn)函数功能:保存记录输入参数:n为学生的个数,Personper[]用于接收学生信息二、详细设计2.1界面设计2.1.1开始界面*****通讯录*****1添加记录2显示记录3删除记录4查询记录5修改记录6保存记录0退出程序2.1.2显示功能的界面选择2后系统出现现有的所有人员:221何洁2015923456781湖北123@1262高亮2113532465667安徽456@1263许飞1915889643235海南789@1262.1.3添加功能的界面*****通讯录*****1添加记录2显示记录3删除记录4查询记录5修改记录6保存记录0.退出程序请您选择(0-6):1添加记录到通讯录编号:2.1.4删除功能的界面*****通讯录*****1添加记录2显示记录3删除记录4查询记录5修改记录6保存记录0退出程序请您选择(0-6):3从通讯录中删除记录请输入名字:2.1.5查询功能的界面*****通讯录*****1添加记录2显示记录3删除记录4查询记录5修改记录6保存记录0退出程序请您选择(0-6):4在通讯录中查找记录请选择查询方式:1XX23地址4返回请选择:2.1.5修改功能的界面*****通讯录*****1添加记录2显示记录3删除记录4查询记录5修改记录6保存记录0退出程序请您选择(0-6):5修改通讯录中的记录请输入想修改的记录中的名字:2.1.6保存功能的界面*****通讯录*****1添加记录2显示记录3删除记录4查询记录5修改记录6保存记录0.退出程序请您选择(0-6):6保存文件请输入保存到的文件名:2.1.7退出功能的界面*****通讯录*****添加记录显示记录删除记录查询记录修改记录保存记录0.退出程序请您选择(0-6):0谢谢使用,再见!请按任意键继续...2.2算法流程图①添加:添加通讯录记录②显示:显示通讯录记录③删除:删除通讯录记录④查询:查询通讯录记录先选择查询方式,以查询方式为例⑤修改:修改通讯录记录三、测试与运行效果3.1运行进入程序主菜单主选单具有所有函数的功能实现的选择功能,通过主选单的操作进入各个功能。主选单主要由主函数提供,其功能由子函数实现。3.2显示模块3.3删除模块3.4查找模块3.4修改模块3.5添加模块3.6保存模块四、总结1.这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格与其注释的格式。2.当我选择通讯录这个题目时,一开始想运用大量链表与指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的。附录:源程序#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct { charscore;/*编号*/ charname[10];/**/ charnum[15];/**/ charemail[20]; /**/ charage[8]; /*年龄*/ charadds[20]; /*住址*/ }Person;Personpe[80];intmenu_select() { charc; do{ system("cls"); printf("\t\t*****通讯录*****\n"); printf("\t\t┌───────┐\n"); printf("\t\t│1.添加记录│\n"); printf("\t\t│2.显示记录│\n"); printf("\t\t│3.删除记录│\n"); printf("\t\t│4.查询记录│\n"); printf("\t\t│5.修改记录│\n"); printf("\t\t│6.保存记录│\n"); printf("\t\t│0.退出程序│\n"); printf("\t\t└───────┘\n"); printf("\t\t请您选择(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return(c-'0'); }intInput(Personper[],intn){ inti=0; charsign,x[10]; while(sign!='n'&&sign!='N') { printf("\t编号:"); scanf("\t%d",&per[n+i].score); printf("\t:"); scanf("\t%s",per[n+i].name); printf("\t年龄:"); scanf("\t%s",per[n+i].age); printf("\t:"); scanf("\t%s",per[n+i].num); printf("\t通讯住址:"); scanf("\t%s",per[n+i].adds); printf("\t电子:"); scanf("\t%s",per[n+i].email); gets(x); printf("\n\t是否继续添加?(Y/N)"); scanf("\t%c",&sign); i++; } return(n+i);}voidDisplay(Personper[],intn){ inti; printf("\n");/*格式*/ printf("编号年龄通讯地址电子\n"); printf("\n"); for(i=1;i<n+1;i++) { printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email); if(i>1&&i%10==0) { printf("\t\n"); printf("\t"); system("pause"); printf("\t\n"); } } printf("\n"); system("pause");}intDelete_a_record(Personper[],intn){ chars[20]; inti=0,j; printf("\t请输入想删除记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return(n); } for(j=i;j<n-1;j++) { strcpy(per[j].num,per[j+1].num); strcpy(per[j].name,per[j+1].name); strcpy(per[j].age,per[j+1].age); strcpy(per[j].adds,per[j+1].adds); strcpy(per[j].email,per[j+1].email); per[j].score=per[j+1].score; } printf("\t\t\t已经成功删除!\n"); return(n-1);}voidQuery_a_record(Personper[],intn){ intm; printf("\t\n请选择查询方式:\n");printf("\t┌──────┐\n");printf("\t│1│\n");printf("\t│2│\n");printf("\t│3地址│\n");printf("\t│4返回│\n");printf("\t└──────┘\n");printf("请选择:");scanf("%d",&m);while(m!=1&&m!=2&&m!=3&&m!=4){ printf("输入错误,请重新选择:"); scanf("%d",&m); } if(m==1) { chars[20]; inti=0; printf("\t请输入想查询的:"); scanf("\t%s",s); while(strcmp(per[i].name,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人年龄:%s\n",per[i].age); printf("\t:%s\n",per[i].num); printf("\t通讯地址:%s\n",per[i].adds); printf("\t电子:%s\n",per[i].email); }; if(m==2) { chars[20]; inti=0; printf("\t请输入想查询的:"); scanf("\t%s",s); while(strcmp(per[i].num,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人:%s\n",per[i].name); printf("\t此人年龄:%s\n",per[i].age); printf("\t通讯地址:%s\n",per[i].adds); printf("\t电子:%s\n",per[i].email); }; if(m==3) { chars[20]; inti=0; printf("\t请输入想查询的地址:"); scanf("\t%s",s); while(strcmp(per[i].adds,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人:%s\n",per[i].name); printf("\t此人年龄:%s\n",per[i].age); printf("\t:%s\n",per[i].num); printf("\t电子:%s\n",per[i].email); };}voidChange(Personper[],intn){ chars[20]; inti=0; printf("\t请输入想修改的记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t编号:"); scanf("\t%d",&per[i].score); printf("\t:"); scanf("\t%s",per[i].name); printf("\t年龄:"); scanf("\t%s",per[i].age); printf("\t:"); scanf("\t%s",per[i].num); printf("\t通讯住址:"); scanf("\t%s",per[i].adds); printf("\t电子:"); scanf("\t%s",per[i].email); printf("\t修改成功!");}voidWritetoText(Personper[],intn){ inti=0; FILE*fp;/*定义文件指针*/ charfilename[20];/*定义文件名*/ printf("\t保存到文件\n");/*输入文件名*/ printf("\t请输入所保存的文件名:"); scanf("\t%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("\t无法打开文件\n"); system("pause"); return; } fprintf(fp,"******************************************通讯录******************************************\n"); fprintf(fp,"编号年龄通讯地址电子\n"); fprintf(fp,"\n"); while(i<n) { fprintf(fp,"%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds,per[i].email); i++; } fprintf(fp,"\n"); fprintf(fp,"***************************************共有%d条记录****************************************\n",n); fclose(fp);/*关闭文件*/ printf("保存成功!\n");}voidmain()/*主函数*/{ intn=0; for(;;) { switch(menu_select()) { case1: printf("\n\t添加记录到通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论