《通讯录管理系统》课程设计报告.doc_第1页
《通讯录管理系统》课程设计报告.doc_第2页
《通讯录管理系统》课程设计报告.doc_第3页
《通讯录管理系统》课程设计报告.doc_第4页
《通讯录管理系统》课程设计报告.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通讯录管理系统课程设计报告专 业: xxxxxxxxx 班 级: xxxxxxxxxxx 姓 名: xxxxxxxxx 指导教师: xxxxxxxxxx 学 号: xxxxxxxxx 课程设计报告一、课程设计题目 综合训练:通讯录管理系统设计二、设计要求学生成绩管理:(结构体数组、函数、算法、流程结构及文件等的综合应用)程序说明:通迅录数据信息构成内容可自行设计(如姓名、家庭地址、邮政编码、电话号码等等),通信录数据类型定义为结构体类型,使之能提供以下功能: 通讯录管理系统 添加记录 保存记录 显示记录 读取记录 删除记录 插入记录 查询记录 排序方式 修改记录 退出程序(1)主菜单(2)各菜单项功能 添加记录:输入联系人的序号、姓名、电话号码等相关信息; 显示记录:显示联系人的序号、姓名、电话号码等相关信息; 删除记录:根据联系人的任意信息,查找并删除联系人的信息; 查询记录 :v 根据联系人的序号,查找联系人的其他信息;v 根据联系人的姓名,查找联系人的其他信息;v 根据联系人的电话号码,查找联系人的其他信息;v 根据联系人的电子邮箱,查找联系人的其他信息;v 根据联系人的通讯住址,查找联系人的其他信息;v 根据以上的联系人的任意信息,查找联系人的其他信息;修改记录:根据联系人的任意信息,查找并修改联系人的信息;保存记录:保存现有联系人的信息,将其写入文件中;读取记录:读取文件中的联系人的信息,对系统的联系人的信息进行初始化;插入记录:指定位置添加联系人的序号、姓名、电话号码等相关信息;排序方式:v 根据联系人的序号,将联系人的信息进行排序;v 根据联系人的姓名,将联系人的信息进行排序;v 根据联系人的电话号码,将联系人的信息进行排序;v 根据联系人的电子邮箱,将联系人的信息进行排序;v 根据联系人的通讯住址,将联系人的信息进行排序;退出程序:退出整个系统(即主菜单)。(3)结构体数组: typedef struct char order10: /* 定义联系人的序号*/ char name20; /* 定义联系人的姓名*/ char number20;/* 定义联系人的电话号码*/ char email20; /* 定义联系人的电子邮箱*/ char address20;/* 定义联系人的通讯住址*/People: /* 定义People类型的结构体*/ People Contact300;/* 定义People类型的结构体数组,用于保存联系人信息*/ People Recond300;/* 定义People类型的结构体数组,用于读取记录*/三、C语言结构设计描述系统功能描述1能够添加联系人的序号、姓名、电话号码等相关信息;2能够显示联系人的序号、姓名、电话号码等相关信息;3能够删除联系人的信息;4能够按照不同的方式查询联系人的信息;5能够修改联系人的序号、姓名、电话号码等相关信息;6存储记录到文件中7从文件中读取记录8能够插入联系人的信息;9能够按照不同的方式对联系人的信息进行排序;10退出;设计测试流程1、进入界面; 2、输入选项1,回车; 按提示输入数据3、回到主菜单; 输入选项2,回车;4、回到主菜单,输入3,回车 输入联系人的相关信息,显示删除成功。5、回到主菜单; 输入选项2,回车;6、回到主菜单,输入4,回车 选择查询方式 输入联系人的相关信息,显示联系人的相关信息。7、回到主菜单; 输入选项2,回车;8、回到主菜单,输入5,回车 输入联系人的相关信息,修改联系人的相关信息。 出现修改成功的信息9、回到主菜单; 输入选项2,回车;10、回到主菜单,输入8,回车 选择插入位置,插入联系人的相关信息。 出现插入成功的信息11、回到主菜单; 输入选项2,回车;12、回到主菜单,输入9,回车 选择排序方式,出现排序成功的信息13、回到主菜单; 输入选项2,回车;14、回到主菜单,输入6,回车 选择插入记录的个数,出现保存成功的信息15、回到主菜单; 输入选项7,回车;16、回到主菜单; 输入选项0,回车;17、退出界面;四、各变量的定义和作用 int n=0;/* 定义结构体数组Contact的非空成员的最大的序号,从1开始计数*/五、系统主要函数的功能以及对其他自定义函数的调用主函数 int main()利用无限次循环while( )和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。菜单选择函数 int MenuSelect()这个函数主要实现功能选择,在这个界面里有显示系统的十大功能,根据每个功能前面的序号进行选择,等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现。 输入记录函数 int Create(People Contact,int n) 能够添加联系人的序号、姓名、电话号码等相关信息,并返回义结构体数组Contact的非 空成员的最大的序号n。显示记录函数 int Show(People Contact,int n)能够显示联系人的序号、姓名、电话号码等相关信息查找记录函数 int Find(People Contact,int n)通过调用int Contrastorder(int n,char s)找到与序号相关的Contact的序号i。通过调用int Contrastname(int n,char s)找到与姓名相关的Contact的序号i。通过调用int Contrastnumber(intn,chars)找到与电话号码相关的Contact的序号i。通过调用int Contrastemail(int n,char s)找到与电子邮箱相关的Contact的序号i。通过调用int Contrastaddress(int n,char s)找到与通讯地址相关的Contact的序号i。通过调用int ContrastAll(int n,char s);找到与联系人相关的Contact的序号i。最后将Contact的序号为i的成员输出即为查找的结果。修改记录函数int Change(People Contact,int n)通过调用int ContrastAll(int n,char s),找到与相关的联系人的序号i。 对将结构体数组Contact的i位置上的数据重新赋值,从而达到了修改的目的。删除记录函数 int Delete(People Contact,int n)通过调用int ContrastAll(int n,char s),找到与相关的联系人的序号i。 该函数将结构体数组Contact插入位置上以及之后的成员向前移动一个位置,这样该位置上的数据会被重新赋值,达到了删除的目的。最后该函数将返回结构体数组Contact的非空成员的最大的序号n。记录排序函数int Sortorder(People Contact,int n)按照冒泡法,用字符串比较函数strcmp()对字符串大小进行比较,并用switch语句对排序方式进行选择,通过调用int Sortswap(People Contact,int i)这个函数对结构体的数据成员进行数据交换,实现了联系人的序号、姓名、电话号码等不同的方式对联系人的信息进行排序;插入记录函数 int Insert(People Contact,int n)指定位置添加联系人的序号、姓名、电话号码等相关信息,将结构体数组Contact插入位置上的成员以及之后的成员向后移动一个位置,并返回结构体数组Contact的非空成员的最大的序号n。保存记录函数 int Save(People Contact)可以把Contact数组的数据保存在电脑上的二进制文件contact.dat中,可以选择保存不同的记录的个数,每次保存都是保存现有的数据,文件指针fp指向contact.dat文件的起始位置,系统中没有的数据将会清空。读取记录函数 int Load(int n);可以把电脑上的二进制文件contact.dat中的数据赋值给结构体数组Recond,然后输出Recond数组中非空成员的数据,并用Recond数组中的数据对结构体数组Contact进行数据的初始化,并返回构体数组Contact非空成员的最大序号n。六、各函数的算法及相关说明1. 主函数 int main() 定义全局变量n,同时while语句中嵌套switch语句,并把函数int MenuSelect()的返回值作为switch语句的变量,同时swicth各个分支语句中用system(cls)清屏使得屏幕中的信息不拥挤,用system(pause)使得函数调用完成后,实现页面回到主菜单的效果,其中对全局变量n有改变的函数,用函数的返回值对n重新赋值。2. 菜单选择函数 int MenuSelect()负责输出主菜单中的内容,并输入相应字符,用c-0实现了字符与数字之间的转换。并把该值作为返回值。3. 输入记录函数 int Create(People Contact,int n)用while语句,负责信息的输入Contact中的每一个结构体的信息,当输入字符N或n时停止输入,并用变量i对新建的记录进行计数,并把n+i作为返回值赋值给全局变量n。4. 显示记录函数 int Show(People Contact,int n)用while语句,负责信息的输出Contact中的每一个非空结构体的信息,当结构体的序号的等于最大序号n时停止输出。5. 查找记录函数 int Find(People Contact,int n)通过调用6个记录比较函数,进行字符串的比较,实现不同方式的查询,并找出Contact中的相关结构体的序号i,再调用查询输出函数 int Findresult(int i),对结果进行输出。6. 修改记录函数int Change(People Contact,int n)通过调用记录比较函数int ContrastAll(int n,char s)进行字符串的比较,找出与字符串相关信息的结构体序号i,并对相应的结构体信息进行修改。7. 删除记录函数 int Delete(People Contact,int n)通过调用记录比较函数int ContrastAll(int n,char s)进行字符串的比较,找出与字符串相关信息的结构体序号i,用for语句将输入位置的及之后的位置,从离该位置Contact的非空成员开始,向前移动一个位置,并把n-1作为返回值赋值给全局变量n。8.记录排序函数int Sortorder(People Contact,int n)用冒泡法,设置内外循环,用switch语句控制联系人的序号、姓名、电话号码、电子邮箱、通讯地址的字符串比较,并调用int Sortswap(People Contact,int i)对结构体的数据成员进行数据交换,实现排序。9. 插入记录函数 int Insert(People Contact,int n)输入的位置后,用for语句将输入位置的及之后的位置,从Contact最大的非空成员开始,向后移动一个位置,然后把输入的信息通过字符串复制赋值给该位置上的结构体的数据成员并把n+1作为返回值赋值给全局变量n。10.保存记录函数 int Save(People Contact)输入要保存记录的个数m后,用for语句把Contact的非空成员的前m个写入二进制文件contact.dat中。11. 读取记录函数 int Load(int n)在Contact的非空成员为0时,将contact.dat中的数据赋值给结构体数组Recond,然后输出Recond数组中非空成员的数据,并用Recond数组中的数据对结构体数组Contact进行数据的初始化,并返回构体数组Contact非空成员的最大序号n。12.记录比较函数 int ContrastAll(int n,char s) int Contrastorder(int n,char s): int Contrastname(int n,char s); int Contrastnumber(int n,char s); int Contrastemail(int n,char s); int Contrastaddress(int n,char s); 用语句while(strcmp(Contacti.str,s)!=0&in),i+,进行字符串比较,找出与字符串数组相关的结构体的序号i,ContrastAll(int n,char s)通过选择语句调用另外5个函数对字符串进行了比较,如果i=n则没有找到相符合的结构体。13.查询输出函数 int Findresult(int i)根据序号i,输出结构体数组Contact的序号为i的结构体中的数据成员。14. 记录交换函数int Sortswap(People Contact,int i)根据序号i,将结构体数组Contact的序号为i+1与i的结构体中的数据成员进行交换。七、课程设计过程中遇到的问题及解决过程(1)删除记录函数、输入记录函数、记录插入函数会改变非空结构体的个数,而在函数调用时,n的值并未改变,记录显示时出现了错误,把函数调用的返回值赋值给n,最后记录显示正确。(2)用冒泡法排序时内外循环的循环条件错误,结构体进行数据交换时,会与空结构体进行交换,显示出现了错误,更改了内外循环的判断条件,结果实现了非空结构体进行数据交换,显示正确。(3)switch语句不会一直调用下去,在外部设置while语句判断条件设为true的使switch语句一直调用下去。(4)在文件读取时,Recond数组中的结构体的数据成员与Cantact数组中的结构体的数据成员不对应,字符串复制错误,调整了输入错误,实现了Cantact数组的初始化。(5)在写查询记录函数时,出现大量重复的代码,最后将重复的代码封装成函数,实现了代码的简化,使得程序更加简洁。(6)在文件写入时,Cantact数组中的结构体保存记录为0时,将不会删除已经保存的记录,最后增加判断条件将数据清空。(7)所有的函数功能都在一个界面显示,显得不够简洁,最后设置清屏,多个功能单独显示,完成后可以返回主菜单。八、课程设计心得体会经过这次C语言课程设计,让我学到了很多有用的东西,巩固了之前的学习,让我学到了在教室和做题中学不到的一些知识,通过这个课程设计的学习,使我进一步理解和运用结构化程序设计的思想和方法。首先是:本来C语言文件操作上课是不太熟的,但这个课程设计里面用到了文件的调用、打开和保存方式,增加了我对文件操作部分的理解。因为要达到多种功能,所以我很了很多的时间看课本和参考课外书,使C语言的知识强化了不少。其次,在做课程设计的过程中,发现了平时很多没有注意到的问题,例如:返回值函数两者在主函数中的调用是不同的。C语言的一些标准库函数不太了解,容易忘记添加头文件就调用函数,往往形成错误找了很久没找到,还有对函数调用的正确使用不够熟悉;更重要的是,这次课程设计虽然花了我不少时间,但正是这些时间,让我见识到了C语言的重要性。这个通讯录管理系统都是在自己知识范围内完成的,界面清晰简单,绝对实用。通过C语言课程设计的学习,我认识到学好计算机知识需要我们不断的实践操作,只有重视实践操作,才能学到最有用的知识。不仅仅是学习C语言,学习其他知识,都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己学到有用的知识。9、 附源程序/1.contact.h#ifndef _CONTACT_H_#define _CONTACT_H_typedef structchar order10;char name20;char number20;char email20;char address20;People;People Contact300;People Recond300;int MenuSelect();int Contrastorder(int n,char s); int Contrastname(int n,char s); int Contrastnumber(int n,char s);int Contrastemail(int n,char s);int Contrastaddress(int n,char s); int ContrastAll(int n,char s); int Insert(People Contact,int n);int Sortorder(People Contact,int n);int Sortswap(People Contact,int i);int Create(People Contact,int n);int Show(People Contact,int n); int Delete(People Contact,int n);int Findresult(int i);int Find(People Contact,int n);int Change(People Contact,int n);int Save(People Contact);int Load(int n);#endif /2.contact.cpp#include contact.h#include#include#includeint main() int n=0; while(true) switch(MenuSelect() case 1: system(cls); printf(nt *1* 添加记录到通讯录nn); n=Create(Contact,n); printf(nttt);system(pause);break; case 2: system(cls); printf(nt *2* 通讯录记录表nn); Show(Contact,n); printf(ntt);system(pause);break; case 3:system(cls); printf(nt *3* 从通讯录中删除记录nn); n=Delete(Contact,n); printf(ntt);system(pause); break; case 4: system(cls); printf(nt *4* 在通讯录中查找记录nn); Find(Contact,n); printf(ntt);system(pause);break; case 5:system(cls); printf(nt *5* 修改通讯录中的记录nn); Change(Contact,n); printf(ntt);system(pause);break; case 6:system(cls);printf(nt *6* 保存功能nn); Save(Contact); printf(ntt); system(pause);break; case 7:system(cls);printf(nt *7* 读取记录nn); n=Load(n); printf(ntt); system(pause);break; case 8:system(cls);printf(nt *8* 插入记录nn); n=Insert(Contact,n); printf(ntt); system(pause);break; case 9:system(cls);printf(nt *9* 排序方式nn); Sortorder(Contact,n); printf(ntt); system(pause);break; case 0:printf(ntt谢谢使用,再见!n); printf(ntt);exit(0);return 0;int MenuSelect()char c;do system(cls); printf(ntt * 通讯录管理系统 * tnn); printf(tt - 菜单 - tnn); printf(tt 1.添加记录 6.保存记录 tnn); printf(tt 2.显示记录 7.读取记录 tnn); printf(tt 3.删除记录 8.插入记录 tnn); printf(tt 4.查询记录 9.排序方式 tnn); printf(tt 5.修改记录 0.退出程序 tnn); printf(tt - 沟通世界,品质为真 - tnn); printf(tt请输入您选择的操作(0-9): ); c=getchar();while(c9);return(c-0);int Create(People Contact,int n) int i=0; char sign; while(sign!=n&sign!=N) printf(ttt序号:);scanf(t%s,Contactn+i.order);printf(ttt姓名:);scanf(t%s,Contactn+);printf(ttt手机号码:);scanf(t%s,Contactn+i.number);printf(ttt电子邮箱:);scanf(t%s,Contactn+i.email);printf(ttt通讯住址:);scanf(t%s,Contactn+i.address); printf(nttt是否继续添加?(Y/N): );scanf(t%c,&sign); i+; return(n+i);int Show(People Contact,int n) int i; printf(tt-n); printf(tt 序号 姓名 电话号码 电子邮箱 通讯地址 n); printf(tt-n); for(i=1;in+1;i+) printf(tt%5s%10s%20s%20s%20sn,Contacti-1.order,C, Contacti-1.number,Contacti-1.email,Contacti-1.address); printf(tt-n);return 0;int Contrastorder(int n,char s) int i=0;while(strcmp(Contacti.order,s)!=0&in) i+; return i;int Contrastname(int n,char s) int i=0;while(strcmp(C,s)!=0&in) i+; return i;int Contrastnumber(int n,char s) int i=0;while(strcmp(Contacti.number,s)!=0&in) i+; return i;int Contrastemail(int n,char s) int i=0; while(strcmp(Contacti.email,s)!=0&in) i+; return i;int Contrastaddress(int n,char s) int i=0; while(strcmp(Contacti.address,s)!=0&in) i+; return i;int ContrastAll(int n,char s) int i; if(true) i=0;i=Contrastorder(n,s); if(i!=n) return i; if(i=n) i=0;i=Contrastname(n,s); if(i!=n) return i; if(i=n) i=0;i=Contrastnumber(n,s); if(i!=n) return i; if(i=n) i=0;i=Contrastemail(n,s); if(i!=n) return i; if(i=n) i=0;i=Contrastaddress(n,s); if(i!=n) return i; return n;int Delete(People Contact,int n) char s20; int i=0,j; printf(tt请输入想删除记录联系人的相关信息:);scanf(%s,s); i=ContrastAll(n,s);if(i=n) return(n); else for(j=i;jn-1;j+)strcpy(Contactj.order,Contactj+1.order);strcpy(C,Contactj+1.name);strcpy(Contactj.number,Contactj+1.number);strcpy(Contactj.email,Contactj+1.email);strcpy(Contactj.address,Contactj+1.address); printf(ntt已经成功删除!n);return(n-1); int Insert(People Contact,int n) char s20; int i,j; printf(tt请输入想插入记录的位置:);scanf(%d,&i); for(j=n;i-序号 n); printf(tt 2 -姓名 n); printf(tt 3 -电话 n); printf(tt 4 -邮箱 n); printf(tt 5 -地址 n); printf(tt n); printf(ntt请选择排序方式:); scanf(%d,&m); for(j=0;jn-1;j+) for(i=0;i0) Sortswap(Contact,i);break; case 2:if (strcmp(C,Contacti+1.name)0) Sortswap(Contact,i);break; case 3:if (strcmp(Contacti.number,Contacti+1.number)0) Sortswap(Contact,i);break; case 4:if (strcmp(Contacti.email,Contacti+1.email)0) Sortswap(Contact,i);break; case 5:if (strcmp(Contacti.address,Contacti+1.address)0) Sortswap(Contact,i);break; printf(ntt排序成功!n); return 0; int Sortswap(People Contact,int i) char str_order10,str_name20,str_number20,str_email20,str_address20; strcpy(str_order,Contacti.order); strcpy(Contacti.order,Contacti+1.order); strcpy(Contacti+1.order,str_order); strcpy(str_name,C); strcpy(C,Contacti+1.name); strcpy(Contacti+1.name,str_name); strcpy(str_number,Contacti.number); strcpy(Contacti.number,Contacti+1.number); strcpy(Contacti+1.number,str_number); strcpy(str_email,Contacti.email); strcpy(Contacti.email,Contacti+1.email); strcpy(Contacti.email,str_email); strcpy(str_address,Contacti.address); strcpy(Contacti.address,Contacti+1.address); strcpy(Contacti+1.address,str_address); return 0;int Findresult(int i)printf(ntt序号:%sn,Contacti.order); printf(tt年龄:%sn,C); printf(tt电话号码:%sn,Contacti.number); printf(tt电子邮箱:%sn,Contacti.email); printf(tt通讯地址:%sn, Contacti.address);return 0;int Find(People Contact,int n) int m;printf(ntt请选择查询方式:n);printf(tt n);printf(tt 1 -序号 n);printf(tt 2 -姓名 n);printf(tt 3 -电话 n);printf(tt 4 -邮箱 n);printf(tt 5 -地址 n);printf(tt 6 -综合 n);printf(tt n);printf(ntt请选择查询方式:);scanf(%d,&m);while(m!=1&m!=2&m!=3&m!=4&m!=5&m!=6) printf(输入错误,请重新选择:); scanf(%d,&m);if(m=1) char s20; int i=0; printf(tt请输入想查询的序号:); scanf(t%s,s); i=Contrastorder(n,s); if(i=n) printf(ntt通讯录中没有此人!n); return 0; Findresult(i);if(m=2) char s20; int i=0; printf(tt请输入想查询的姓名:); scanf(t%s,s); i=Contrastname(n,s); if(i=n) printf(ntt通讯录中没有此人!n); return 0; Findresult(i);if(m=3) char s20; int i=0; printf(tt请输入想查询的电话:); scanf(t%s,s); i=Contrastnumber(n,s); if(i=n) printf(ntt通讯录中没有此人!n); return 0;Findresult(i);if(m=4)char s20;int i=0;printf(tt请输入想查询的邮箱:);scanf(t%s,s);i=Contrastemail(n,s);if(i=n) printf(ntt通讯录中没有此人!n); return 0;Findresult(i);if(m=5)char s20;int i=0;printf(tt请输入想查询的地址:);scanf(t%s,s);i=Contrastaddress(n,s);if(i=n) printf(ntt通讯录中没有此人!n);return

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论