C课程设计报告个人通信录管理系统_第1页
C课程设计报告个人通信录管理系统_第2页
C课程设计报告个人通信录管理系统_第3页
C课程设计报告个人通信录管理系统_第4页
C课程设计报告个人通信录管理系统_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、安徽工业大学程序实习综合实习报告课题名称:个人通讯录管理系统实习成员:姓名学号贡献率(%)e-mail组长成员专业班级: 指导 教师: 2011 年 12月10日课题名称:个人通讯录管理系统设计要点:建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。功能要求(1) 通讯录的每一条信息包括姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、email、qq等。(2) 输入功能:可以一次完成若干条信息的输入。(3) 显示功能:完成全部通讯录信息的显示(一屏最多显示10条,超过十条应能够自动分屏显示)(4) 查找功能:可以按姓名等多种方式查找

2、通讯信息(5) 增加、删除、修改功能:完成通讯录信息的多种更新系统整体设计:一.主函数设计: 其功能实现从屏幕输出6个选择:1、添加信息; 2、删除信息;3、修改信息;4、查询信息;5、显示信息;6、保存;0、退出程序。这样,便可以从中选择出一项对通讯录进行操作。 二信息添加功能设计: 该模块通过tianjia();函数实现,可以从键盘输入通讯录的各项信息。 三信息查询功能设计: 该模块通过chaxun();函数实现,从键盘输入需要查询的姓名或手机号,便可以显示出其他全部信息。 四信息删除功能设计: 该模块通过shanchu();函数实现,输入所需要删除人的姓名,便可以从通讯录中删除其全部信息

3、。 五信息修改功能: 该模块通过xiugai();函数实现,输入所需要修改人的姓名,屏幕便显示其全部信息,根据提示,输入所需要修改的信息,便完成信息的修改。 六信息显示功能设计: 该模块通过xianshi();函数实现,选择信息显示菜单,便可以显示全部通讯录信息。菜单设计:主菜单添加功能删除功能修改功能查询功能显示功能保存功能退出系统break输入cstart输入ycase1调用tianjia函数breakcase2调用shanchu函数breakcase3调用xiugai函数break调用chaxun函数case4breakcase0谢谢使用!endcase5调用xianshi函数break

4、case6调用baocun函数breakdefault输入有误,请重新输入系统流程图:1、添加联系人函数(void tianjia())l 定义指向结构体的指针;l 移动指针,使其指向最后一个节点,准备插入下一个联系人信息;l 依次输入编号、姓名、固定电话、移动手机、单位、qq、email、分类;开始移动指针使其指向最后一个节点结束输入编号或者按0返回输入联系人其它信息编号已存在,请重新输入继续添加联系人信息2、删除联系人函数(void shanchu(struct person *)l 定义指向结构体的指针;l 检验链表中是否有记录。若无记录,则返回;l 根据者姓名查找要删除的联系人;l 输

5、入联系人姓名,删除对应结点。开始结束指针是否为空按姓名查询,按0返回输入要删除的联系人姓名,并删除。否是姓名03、修改联系人函数(void xiugai())l 定义指向结构体的指针;l 检验链表中是否有记录。若无记录,则返回;l 根据姓名查找要修改的联系人;l 修改信息(可选择是否修改部分信息);开始结束指针是否为空按姓名查找,按0返回依次修改联系人各项信息,或不修改否是姓名04、查询联系人信息函数(void find(struct person *))l 检验链表中是否有记录。若无记录,则返回;l 根据编号、姓名或固定电话三种方式查找要联系人;l 调用函数在链表中查找相应结点;l 调用显示

6、联系人函数,输出结点信息。开始结束(返回该联系人结点位置)指针是否为空按编号、姓名、固定电话查找,按0返回输入编号,查找,并输出联系人信息否是编号姓名0输入编号,查找,并输出联系人信息输入固定电话,查找,并输出联系人信息固定电话5、显示联系人函数(void print())l 定义指向结构体的指针;l 检验是否有记录。若无记录,则返回;若有记录,移动指针,依次输出记录;开始指针是否为空结束逐条输出联系人信息是否6、保存联系人信息函数(void save(struct person *))l 定义指向结构体的指针;l 以读写方式打开一个文本文件;l 若打开错误,则返回;若成功,则逐条输出联系人信

7、息:l 关闭文件;开始打开文件结束向文件输出联系人信息失败成功程序运行结果:主菜单显示,选择其中一项可对通信录进行操作。选择添加联系人,依次输入编号、姓名、固定电话、移动手机、单位、email、qq、分类各个信息。添加联系人结束后,输入0可返回主菜单。返回主菜单后,选择5显示所有联系人,便可以查看到已输入的所有的联系人信息。在主菜单选择4 查询联系人,便可以通过1编号查询、2姓名查询、3固定电话查询三种方式查询所要找的联系人的信息。查询联系人时,当输入有误时,会有提示出现,提示输入有误,请重新输入。当查询的人的信息在通讯录中不存在时,界面上会显示通讯录中无此人。当选择主菜单中的3修改联系人时,

8、系统会提示首先通过姓名查找到联系人,输入姓名后,查找到联系人,并显示出来,依次可选择修改除编号以为的其他联系人的信息,选择1 是,便可以修改该项信息,2否,则是不修改。当输入不是1或2而是其他数字时,系统就会提示输入有误,请重新输入。当在主菜单中选择2 删除联系人时,系统会提示1通过姓名删除,输入1时,可通过姓名查找到联系人,便可以进行删除操作,当输入的是0时,则可以返回主菜单。删除联系人之前,系统会提示是否确定删除联系人,选择1是或2否,当输入其他数字时,系统会提示输入有误,请重新输入。删除成功后按任意键便可返回主菜单。完成一切操作后,选择6保存,便可以保存所建立的通讯录。选择0退出系统,便

9、可以退出本系统。总结:在编写代码时,本程序运用的是结构体指针,建立单链表,此部分的内容较难,本程序参考书上的内容和一些资料。通过本次课程设计,我们认识到自己还存在很多不足,还需要在编程的道路上多经历一些风雨,多编写程序,多多磨练自己。当我们遇到问题是,需要戒骄戒躁,仔细耐心的检查错误,学会对程序进行调试。当自己的一个人的能力有限时,应该多问问他人,并且要学会与别人合作,这样便可以为以后自己真正编写大的软件打下一个好的基础。源代码:main#include <stdio.h>#include <string.h>#include <stdlib.h>#incl

10、ude "printhead.c"#include "formatprint.c"#include "chaxun.c"#include "xianshi.c"#include "shanchu.c"#include "tianjia.c"#include "xiugai.c"#include "save.c"/*自定义函数说明*/void main(); /*主函数*/struct person *creat(); /*创建链表*/v

11、oid tianjia(); /*插入一结点,输入联系人信息*/void formatprint(); /*格式化输出*/void printhead(); /*输出表头*/void xianshi(); /*输出所有单链表中的数据*/void xiugai(); /*修改通讯记录*/void shanchu(struct person *); /*根据编号或者名字分别调用以下两个函数*/ void shanchuchubyname(struct person *); /*通过姓名删除联系人*/void chaxun(struct person *); /*查找功能。调用后根据查找方式编号或姓

12、名分别调用以下两个函数*/ struct person *chaxunbynum(); /*通过编号查找并输出联系人*/ struct person *chaxunbyname(); /*通过名字查找并输出联系人*/ struct person *chaxunbyphone(); /*通过固定电话查找并输出联系人*/void menu(); /*主菜单界面*/void baocun(struct person *); /*数据保存。若用户没有保存数据但对数据进行了修改,在退出系统时,会提示用户是否保存*/void stringinput(); /*字符串输入*/void menu() /*主菜

13、单界面*/ printf(" 3通讯录3nn"); printf(" 3333333333333333333333333333目录33333333333333333333333333333n"); printf(" 3 1 添加联系人 2 删除联系人 3n"); printf(" 3 3 修改联系人 4 查询联系人 3n"); printf(" 3 5 显示所有联系人 6 保存 3n"); printf(" 3 0 退出系统 3n"); printf(" 33333

14、33333333333333333333333333333333333333333333333333333333n");struct person *creat() /*创建链表*/ struct person *head; head=(struct person *)malloc(sizeof(struct person); if(!head) printf("n 不能申请到内存空间,返回主菜单 n"); return null; /*返回主菜单*/ head->next=null; printf("空间创建成功,您可以使用本系统n")

15、; return(head);void main(void) int select; /*选择功能变量*/ int select_saver; /*是否保存变量*/ struct person *head; head=creat(); system("color 52"); while(head) menu(); printf("n 请选择<06>:"); scanf("%d",&select); if(!select) if(saver=1) /*若对链表的数据有修改且未进行保存,则此标志为1*/ printf(

16、"n是否保存文件?(1(是)/2(否):"); scanf("%d",&select_saver); while (select_saver!=1&&select_saver!=2) printf("输入错误,请重新输入!n"); printf("n是否保存文件?(1(是)/2(否):"); scanf("%d",&select_saver); if(select_saver=1) baocun(head); break; switch(select) case

17、1: tianjia(head);break; /*添加联系人*/ case 2: shanchu(head);break; /*删除联系人*/ case 3: xiugai(head);break; /*修改联系人*/ case 4: chaxun(head);break; /*查询联系人*/ case 5: xianshi(head);break; /*显示联系人*/ case 6:baocun (head);break; /*保存联系人*/ default: printf("n*输入错误! 请重新输入*n");break; system("pause&quo

18、t;);formatprint#define length_num 4#define length_name 10#define length_phone 10#define length_mobilephone 15#define length_address 10#define length_email 20#define length_qq 15#define length_kind 10struct person /*定义结构体类型person*/ char numlength_num; /*联系人编号*/ char namelength_name; /*联系人姓名*/ char ph

19、onelength_phone; /*联系人固定电话号码*/ char mobilephonelength_mobilephone; /*联系人移动电话*/ char addresslength_address; /*联系人地址*/ char emaillength_email; /*联系人电子邮箱*/ char qqlength_qq; /*联系人qq*/ char kindlength_kind; /*联系人分类*/ struct person *next; /*下一个节点*/;void formatprint(struct person *node) /*格式化输出*/ struct p

20、erson *pt=node; printf(format,data);printhead#define head1 "-所有通讯记录-n"#define head2 "|编号| 姓名 | 固定电话| 移动手机 |单位| 邮箱 | qq | 分类 |n"#define head3 "|-|-|-|-|-|-|-|-|n"#define format "|%-4s|%-8s|%-9s|%-11s|%-4s|%-17s|%-11s|%-7sn"#define data pt->num,pt->name,pt

21、->phone,pt->mobilephone,pt->address,pt->email,pt->qq,pt->kind#define end "-n"void printhead() /*输出表头*/ printf(head1); printf(head2); printf(head3);tianjiavoid tianjia(struct person *node) struct person *p,*pt=node,*ptr=node->next; int flag=0; char nummberlength_num; xi

22、anshi(node); /*显示已有的联系人信息*/ while(pt->next!=null) /*将指针移指向链表末尾,准备添加联系人*/ pt=pt->next; while(node) /*可输入多个联系人,直至输入的编号为0时,结束添加联系人*/ while(node) stringinput(nummber,length_num,"<按'0'返回主菜单> 请输入编号:"); flag=0; if(!strcmp(nummber,"0") /*若输入为0,则退出添加联系人操作,返回主菜单*/ retur

23、n; ptr=node->next; while(ptr) /*查询该编号是否已经存在,若存在则要求重新输入*/ if(!strcmp(ptr->num,nummber) flag=1; break; ptr=ptr->next; if(flag=1) /*提示用户是否重新输入*/ printf("编号 %s 已经存在n",nummber); else break; p=(struct person *)malloc(sizeof(struct person); if(!p) printf("n 不能申请到内存空间,返回主菜单 n");

24、 return; strcpy(p->num,nummber); stringinput(p->name,length_name,"姓名:"); stringinput(p->phone,length_phone,"固定电话:"); stringinput(p->mobilephone,length_mobilephone,"移动手机:"); stringinput(p->address,length_address,"单位:"); stringinput(p->email,le

25、ngth_email,"email:"); stringinput(p->qq,length_qq,"qq:"); stringinput(p->kind,length_kind,"分类:"); p->next=null; /*添加结束*/ pt->next=p; /*将新建的结点接入原链表尾部*/ pt=p; saver=1; /*数据保存变量被开启,说明对数据进行了修改*/ shanchuint saver; /*是否需要保存的标志全局变量*/void shanchu(struct person *node

26、) /*根据名字分别调用以下两个函数*/ int m; void shanchubyname(struct person *); /*函数声明*/ if(!node->next) printf("n无通讯记录!n"); return; printf("1:通过姓名删除,请按 1n"); printf("<返回主菜单,请按'0'>:"); scanf("%d",&m); /*输入1调用以下函数*/ if(m=1) shanchubyname(node); /*通过姓名删除联系

27、人*/ else if(m=0) return; else printf("输入有误,返回主菜单!"); return;void shanchubyname(struct person *node) /*通过姓名删除联系人*/ struct person *p=node,*pt; int flag; printf("删除联系人:n"); p=chaxunbyname(p); if(p) printf("确定删除该联系人吗?(1(是)/2(否)"); scanf("%d",&flag); while (fla

28、g!=1&&flag!=2) printf("输入错误,请重新输入!n"); printf("确定删除该联系人吗?(1(是)/2(否)"); scanf("%d",&flag); if(flag=1) pt=node; while(pt->next!=p) pt=pt->next; pt->next=p->next; free(p); /*释放p节省空间*/ printf("n删除联系人成功!n"); saver=1; /*数据保存变量被开启,说明对数据进行了修改*/

29、 system("pause"); chaxunvoid stringinput(char *str,unsigned int length,char *caution) /*字符串输入*/ char string255; do printf(caution); /*提示信息*/ scanf("%s",string); if(strlen(string) > length) printf("n 超过指定长度! 请重新输入 n"); while(strlen(string) > length); strcpy(str,str

30、ing); void chaxun(struct person *node) /*查找功能。调用后根据查找方式编号或姓名分别调用以下两个函数*/ struct person *chaxunbynum(struct person *); /*函数声名*/ struct person *chaxunbyname(struct person *); /*函数声名*/ struct person *chaxunbyphone(struct person *); /*函数声名*/ int m; if(!node->next) /*链表为空*/ printf("n无通讯记录!n"

31、); return; printf("1:通过编号查找,请按 1n"); printf("2:通过姓名查找,请按 2n"); printf("3:通过固定电话查找,请按 3n"); printf("<返回主菜单,请按'0'>:"); scanf("%d",&m); /*输入1,2,3分别调用以下两个函数*/ switch(m) case 1:chaxunbynum(node);break; /*通过编号查找并输出联系人*/ case 2:chaxunbynam

32、e(node);break; /*通过姓名查找并输出联系人*/ case 3:chaxunbyphone(node);break; /*通过固定电话查找并输出联系人*/ case 0:break; default: printf("输入错误,请重新输入:n"); chaxun(node); struct person *chaxunbynum(struct person *node) /*通过编号查找并输出联系人*/ char nummberlength_num; struct person *p=node->next; stringinput(nummber,len

33、gth_num,"请输入编号:"); while(p) if(strcmp(p->num,nummber)=0) /*找到nummber对应的编号*/ break; /*跳出*/ p=p->next; printf(head2); printf(head3); if(p) formatprint(p); printf(end); else printf("n通讯录中无此人!n"); return p;struct person *chaxunbyname(struct person *node) /*通过名字查找并输出联系人*/ char n

34、amelength_name; struct person *p=node->next; stringinput(name,length_name,"请输入姓名:"); while(p) if(strcmp(p->name,name)=0) /*找到name对应的姓名*/ break; /*跳出*/ p=p->next; printf(head2); printf(head3); if(p) formatprint(p); printf(end); else printf("n通讯录中无此人!n"); return p;struct p

35、erson *chaxunbyphone(struct person *node) /*通过固定电话查找并输出联系人*/ char phonelength_phone; struct person *p=node->next; stringinput(phone,length_phone,"请输入固定电话:"); while(p) if(strcmp(p->phone,phone)=0) /*找到phone对应的姓名*/ break; /*跳出*/ p=p->next; printf(head2); printf(head3); if(p) formatp

36、rint(p); printf(end); else printf("n通讯录中无此人!n"); return p;xianshivoid xianshi(struct person *node) /*输出数据*/ struct person *p=node->next; if(!p) printf("n无通讯记录!nn"); return; printf("nn"); printhead(); while(p) /*逐条输出链表中联系人信息*/ formatprint(p); p=p->next; /*移至下一个结点*/

37、 printf(head3); printf(end);xiugaivoid xiugai(struct person *node) /*修改通讯记录。可以分别按照查名字方式查询,然后提示用户修改除编号之外的数据*/ int m,select_name,select_phone,select_mobilephone,select_address,select_email,select_qq,select_kind; struct person *p=node; if(!p->next) printf("n无通讯记录!n"); return; printf("

38、修改联系人:n"); printf("1:通过姓名查找,请按 1n"); printf("<返回主菜单,请按'0'>:"); scanf("%d",&m); /*输入1调用以下函数*/ if(m=1) p=chaxunbyname(node); /*通过姓名查找并输出联系人*/ else if(m=0) return; else printf("输入有误,返回主菜单!"); return; if(p) printf("是否修改姓名?(1(是)/2(否):&qu

39、ot;); scanf("%d",&select_name); while(select_name!=1&&select_name!=2) printf("输入错误,请重新输入:n"); printf("是否修改姓名?(1(是)/2(否):"); scanf("%d",&select_name); if(select_name=1) stringinput(p->name,8,"请输入新姓名:"); printf("是否修改固定电话?(1(是)/2

40、(否):"); scanf("%d",&select_phone); while(select_phone!=1&&select_phone!=2) printf("输入错误,请重新输入:n"); printf("是否修改固定电话?(1(是)/2(否):"); scanf("%d",&select_phone); if(select_phone=1) stringinput(p->phone,9,"请输入新固定电话号码:"); printf(&qu

41、ot;是否修改移动手机?(1(是)/2(否):"); scanf("%d",&select_mobilephone); while(select_mobilephone!=1&&select_mobilephone!=2) printf("输入错误,请重新输入:n"); printf("是否修改移动手机?(1(是)/2(否):"); scanf("%d",&select_mobilephone); if(select_mobilephone=1) stringinput(p

42、->mobilephone,11,"请输入新移动电话:"); printf("是否修改单位?(1(是)/2(否):"); scanf("%d",&select_address); while(select_address!=1&&select_address!=2) printf("输入错误,请重新输入:n"); printf("是否修改单位?(1(是)/2(否):"); scanf("%d",&select_address); if(s

43、elect_address=1) stringinput(p->address,4,"请输入新单位:"); printf("是否修改email?(1(是)/2(否):"); scanf("%d",&select_email); while(select_email!=1&&select_email!=2) printf("输入错误,请重新输入:n"); printf("是否修改email?(1(是)/2(否):"); scanf("%d",&select_email); if(select_emai

温馨提示

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

评论

0/150

提交评论