全功能版通讯录(c语言) 设计说明概要

时间:2019-05-14 15:50:45下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《全功能版通讯录(c语言) 设计说明概要》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《全功能版通讯录(c语言) 设计说明概要》。

第一篇:全功能版通讯录(c语言) 设计说明概要

通讯录管理系统设计说明书

一、需求分析

本通讯录是一款具有基本通讯信息管理功能的系统。包括基本添加,修改,删除,查询和输出等功能。其中联系组是为了更好地管理联系人信息,如常用的组有亲戚,家人,朋友,同学等。用户添加的信息存储到文件当中,本系统的数据存储文件包括group.dat和linkman.dat,其中group.dat存储组信息;而linkman.dat则存储联系人的信息。用户登陆系统后,根据需要,选择操作类型。系统一启动,便将相关数据文件装载进内存,如果数据文件不存在,系统将会创建新的数据文件。并将数据文件内的记录存放在链表数据结构类型中,接下来用户所有的操作,都是对链表的操作。当用户退出系统时,系统将自动将链表的信息存进数据文件。本系统中包含两个链表:group链表和linkman链表,分别对应group,dat 和linkman,dat两个数据文件。

1、组信息管理模块: ◎添加新组信息:当用户添加一个新组时,这个新组将被添加到group.dat文件的末尾,如果添加的组已存在则返回出错信息。

◎修改已有组信息:用户首先输入所要修改的联系组,然后系统查询该联系组存不存在。若存在,则要求用户输入新的信息,并进行替换;若不存在,则返回错误信息。

◎删除已有组:用户首先输入所要删除的组,然后系统查询该组存不存在。如果存在,则先删除该组下的所有联系人的信息,再删除该组;如果所要删除的信息不存在, 则返回错误信息。

◎删除所有已有组信息:该操作没有输入值。如果原来group.dat文件中没有联系组,返回错误信息;否则,删除所有联系组,同时删除各个组下的联系人信息。

◎组查询功能:按用户输入的查询条件,在group.dat文件中查询相关信息。若存在符合条件的组,则输出相应的组信息;若不存在,则返回出错信息。

◎输出所有组信息:将group.dat中所有组全部输出来。

2、联系人信息管理模块: ◎添加联系人:当用户添加一个新联系人时,这个联系人的信息将被添加到group.dat 文件的末尾,若添加的联系人已存在,则返回出错信息。添加一个联系人时,他所

属的组成员个数同时增加1。

◎修改联系人:用户首先输入所要修改的联系人,然后系统查询该联系人存不存在。

若存在,则要求用户输入新的信息,并进行替换;若不存在,则返回错误信息。◎删除联系人:用户首先输入所要删除的联系人,然后系统查询该联系人存不存在。

如果存在,则删除,并返回相关信息;如果所要删除的信息不存在,则返回错误信 息。删除一个联系人时,他所属的组成员个数同时减少1。

◎删除所有联系人:该操作没有输入值。如果原来linkman.dat文件中没有联系联系

人,返回错误信息;否则,删除所有联系人信息。

◎联系人查询功能: 按用户输入的查询条件,在linkman.dat文件中查询相关信息。

若存在符合条件的联系人,则输出相应的联系人信息;若不存在,则返回出错信息。

而且提供不同种类的查询,如:按联系人姓名来查询,按联系人电话来查询,按联 系人所在的组来查询。

◎输出所有联系人信息:将所有联系人信息输出。

二、概要设计

1、抽象数据类型定义: /* **********************存储结构设计**************************** */ /**************节点类型设计***************/ typedef struct{ char group_num[10];//组号 char group_name[20];//组名称 int mem_num;//组内联系人个数 }GroupType;//存放一条组信息 typedef struct{ char mem_num[10];//联系人号 char mem_name[20];//联系人名称 char mem_sex[2];//联系人性别 char mem_phone[20];//联系人电话

char mem_addr[50];//联系人地址

char mem_group_num[10];//联系人所在组的组号 }LinkmanType;/*************线性表存储结构设计**************/ typedef struct groupnote{ GroupType groupdata;//组数据信息 struct groupnote *next;}*GroupNote;//组表节点 typedef struct{ GroupNote head, tail;//分别指向组信息链表的头结点和尾节点 int lenth;//链表中元素个数 }GroupList;typedef struct linkmannote{ LinkmanType linkmandata;struct linkmannote *next;}*LinkmanNote;//联系人表节点 typedef struct{ LinkmanNote head, tail;//分别指向联系人信息链表的头结点和尾节点 int lenth;//链表中元素个数

}LinkmanList;/*************基本操作列表******************/ /*************组管理模块功能函数**************/ ◎void addGroup(;//操作类型号是1 ◎void deleteCroup(;//操作类型号是2 ◎void deleteAllGroup(;//操作类型号是3 ◎void selectGroup(;//操作类型号是4 ◎void printAllGroup(;//操作类型号是5 /*************联系人模块功能函数**************/ ◎void addLinkman(;//操作类型号是6 ◎void updateLinkman(;//操作类型号是7 ◎void deleteLinkman(;//操作类型号是8 ◎void deleteAllLinkman(;//操作类型号是9 ◎void selectMenu(;//操作类型号是10 ○ selectByName(;//查询子菜单下的类型号1 ○ selectByPhone(;//子菜单下的类型号2 ○ selectByGroup(;//子菜单下的类型号3 ◎void printAllLinkman(;//操作类型号是12 /*************系统基本操作**************/

◎ void systemMenu(;//系统菜单

◎ void readFromFile(;//将数据文件导入内存并存储在单链表中,系统一开始运行时,就将数据文件读入内存。

◎ void writeToFile(;//将内存单链表中的数据写入数据文件

◎ void exitSystem(;//退出并保存,操作类型号是0,退出系统时自动将链表中的数据写入数据文件。

◎GroupNote selectGroupPub(char *name;/*组查询的公共函数*/ ◎LinkmanNote selectLinkmanPub(char *name;/*联系人查询的公共函数*/ ◎void deleteByGroup(char *groupname;/*删除某一组下的所有联系人信息*/◎void printLinkman(LinkmanNote ln;/*输出ln节点里联系人的信息*/

三、详细设计

详细设计中主要用了PDA(问题分析图来进行设计。考虑到链表基本操作书上都有,所以这里凡是涉及到链表的基本操作,都没有给出,只轻轻带过。到代码实现部分再具体实现这些功能。

/************************系统功能模块详细设计*************************/

1、系统菜单函数systemMenu(的PAD图: List all menu items Choose the option addGroup(1 3 4 5 6 7 8 9 10 11 0 deleteGroup(deleteAllGroup(selectGroup(printAllGroup(addLinkman(updateLinkman(deleteLinkman(deleteAllLinkman(selectMenu(printAllLinkman(exitSystem(option=

2、查询菜单函数selectMenu(的PDA图: List all menu items Choose the option selectByName(1 2 3 0selectByPhone(selectByGroup(systemMenu(option=

3、加载数据文件函数readFromFile(:加载数据文件时,首先判断数据文件存不存在。如

果不存在,输出相关错误信息并返回主菜单;若存在,则打开数据文件group.dat和linkman.dat。接着,判断数据文件是不是为空。如果为空,则什么都不做;若不为空,则建立两个链表group和linkman,并循环将group.dat和linkman.dat两个数据文件中的每一条记录分别加载到group和linkman两个链表中。注意,每读入一条新纪录,则动态开辟一个存储节点,将记录信息读入这个节点,然后将这个节点采用尾插法插入相应链表中。

对应PDA图如下: Open the files Files exist? return nothing Load the files Files empty? Load the files Build linklist group def Build linklist linkman Until group.dat end Until linkman.dat end Malloc a new note Read current record into the note Insert the note into the linkman Malloc a new note Read current record into the note Insert the note into the group

4、保存数据函数writeToFile(:将group和linkman两个链表中的所有信息分别存储到group.dat和linkman.dat中。每存储进一个节点则将对应的节点删除(头删除法,释放存储空间。由于存储节点时,从链表的首位置依次循环将所有节点都写入数据文件。对应的PAD 图如下: Until the group empty Write current note into group.dat Delete current note from group Until the group empty Write current note into linkman.dat Delete current note from linkman Close the files

5、退出系统函数exitSystem(:退出系统,退出时将保存内存中的数据信息。Call the writeToFile(Exit the system

6、组查询公共函数selectGroupPub(char *name: /************************组管理功能模块详细设计*************************/

1、添加组函数addGroup(:开辟一个新的结点,提示用户输入要添加的组信息,并判断这

个组是否已经存在。如果存在,返回错误信息;若不存在则将这个节点插入到group链表的尾部。最后判断用户是否要继续添加。如果是,则继续完成上述过程;否则,返回主菜单。

Build the group

Group not exist? While choice Malloc a new note Put in new info Print error info Info already exist? Insert the note into group Put in choice(0/1

2、修改组函数updateGroup(:首先,提示用户输入所要修改的组的组名称。然后查询,如果组不存在,则输出出错信息并返回主菜单。否则,提示用户输入新的组信息替换原来的组信息。

Put in group_name Error and ruturn Info not exist? Put in the new info

2、删除组信息函数deleteGroup(:删除某一个组时,同时将这个组下的所有联系人信息也

一并删除,所以进行操作之前,必须要求用户确认。首先,提示用户输入所要删除的组的组名称。判断该组存不存在,若不存在,出错并返回;否则,要求用户确认操作,若用户取消操作,则退出;否则,首先在linkman链表中查找该组下的所有联系人,并一一将它们删除,最后从group链表中删除该组。

Put in the group_name

Info not exist? Error and return Are you sure? Return Select from linkman and delete all info belonged to the group note Delete this group note

3、删除所有组信息函数deleteAllGroup(:删除所有组信息时,首先删除所有联系人,再删

除所有组。

Delete All Linkman Delete all group Return Are you sure ?

4、组查询函数selectGroup(:因为组信息不多,所以这里只提供一个查询函数,即按组的

名称来查询。首先,用户输入组名称,系统在group链表中查询,若存在,则输出该组的信息;否则出错返回。

Put in group_name Select it from group Print the info Find? Return

5、输出所有组信息函数printAllGroup(:这个就是将group链表的所有节点信息输出来。/************************联系人管理功能模块详细设计*************************/ 由于addLinkman(,updateLinkman(,deleteLinkman(,deleteAllLinkman(,printAllLinkman(和组管理模块对应功能是基本相同的,所以这里就不再对它们进行详细设计了。下面主要对查询功能给出详细设计。

1、按名字查询函数selectByName(:首先,用户输入所要查询的联系人姓名。系统按照联

系人姓名在linkman链表中进行查询,找到符合条件的则输出该联系人的所有信息。否则,输出出错信息。

Put in mem_name Select it from linkman Print the info Find? Error and return

2、按电话号码查询函数selectByPhone(:首先,用户输入所要查询的电话号码。系统按照电话号码在linkman链表中进行查询,找到符合条件的则输出该联系人的所有信息。否则,输出出错信息。

Put in mem_phone Select it from linkman Error and return Find?

Print the info

2、按组查询函数selectByGroup(:首先,用户输入所要查询的组的组名称。系统按照组名

称在group 链表中查询,如果该组不存在则出错并返回;否则,取得该组的组号,并按照组号在linkman 链表中进行查询,找到符合条件的则输出该组下所有联系人的信息。否则,输出出错信息。注意:由于一个组下的联系人可能不止一个,所以,系统在查询联系人信息时应该遍历全表,而不能像上两个函数一样,找到符合条件的信息就可以退出查找了。

Put in group_name Select it from linkman by the group_num Error and return Find? Gain the group_num Select it from group Error and return Print the info Find?

第二篇:C语言作业:学通讯录

学生通讯录

一、语言和环境

1.实现语言:C语言。

2.环境要求:devC++。

二、实现功能

开发一套学生通讯录C语言系统,具体实现如下功能:

1.打开系统显示欢迎界面,以及功能菜单,用户输入需要操作的功能序号,根据用户选择的需要进行相应界面

如图1所示。

图1

功能菜单

2.当用户输入序号1时进入到录入学生信息界面,用户输入学生的姓名,性别,年龄和电话,输入完毕保存学生信息,并提示是否继续录入,如果选择Y则继续录入,如果选择为N则返回主菜单。如图2所示:

图2

录入学生信息

3.当用户选择序号2则把录入的学生信息进行展示,如果没有录入则提示没有学术信息。如图3,图4所示

图3

显示录入的学生信息

图4

显示无学生信息

4.当用户选择菜单按键3时可以通过姓名查询学生信息,如果有则显示此学生信息,如果

如图5所示

图5

查询学生信息

图6

查无此人

三、具体要求及推荐实现步骤

1.定义结构体保存学生信息(学生姓名,学生年龄,学生性别,学生手机号),定义结构体数组保存学生商品。

2.录入学生信息

a)

输入学生信息,保存在结构体数组中,定义变量保存存储的个数”

3.显示

a)

读取数组中学生信息,循环显示。

4.查找

a)

根据用户输入的姓名,在数组中进行查找

四、评分标准

标准:学生通讯录

该项目的评分标准如下:

变量定义

定义结构体和结构体数组

主函数中能够循环进行菜单中的相关操作,并选择退出能自动退出程序

录入信息

正确定义录入函数

正确对信息进行保存

实现是否继续录入功能

显示

正确定义显示函数

正确判断是否已经录入学生信息

正确对学生信息进行循环显示

查找

正确定义查找函数

正确显示查找功能

总分

100分

第三篇:C语言-通讯录管理系统

#include #include #include struct record{ charnum[12];char name[10];char birthday[10];char post[10];char phone[15];}data[100];intmenu_select();intcreate_record();intadd_record(int flag);int flag=0;

intfind_record(int flag);intdelete_record(int flag);voidpaixu_record(int flag);intsave_record(int flag);void main(){ for(;;){ switch(menu_select())

{ case 1: printf(“ ***********************************************n”);printf(“ ************** 通讯录的建立 ***************n”);printf(“ ***********************************************n”);flag=create_record();break;case 2: printf(“ ***********************************************n”);printf(“ ************** 通讯录信息的添加 *****************n”);printf(“ ***********************************************n”);flag=add_record(flag);break;case 3: printf(“ ******************************n”);printf(“ ******* 通讯录信息查询 *******n”);printf(“ ******************************n”);find_record(flag);

break;case 4: printf(“ ***********************************n”);printf(“ **********通讯信息的删除***********n”);printf(“ ***********************************n”);delete_record(flag);break;case 5: printf(“ ***********************************n”);printf(“ **********通讯录的存储(D:)*********n”);printf(“ ***********************************n”);save_record(flag);break;case 6: printf(“ ***********************************n”);printf(“ **********通讯者的排序*********n”);printf(“ ***********************************n”);paixu_record(flag);break;case 0: printf(“t 谢谢您的使用!n”);break;

default : break;} } } intmenu_select(){ int i;printf(“

********************

n”);printf(“

Welcome!

n

”);printf(“

Form kuangminn”);printf(“

********************

n”);printf(“

n”);printf(“ n”);printf(“ n”);printf(“

通讯录管理系统

n”);printf(“ n”);printf(“

======================n”);printf(“

1.通讯录的建立n”);printf(“

2.通讯者的添加n”);printf(“

3.通讯录的查询n”);printf(“

4.通讯者的删除n”);printf(“

5.通讯录的存储n”);printf(“

6.通讯者的排序n”);printf(“

0.退出通讯录管理系统n”);printf(“

======================n”);printf(“

请选择操作0-5 nn”);for(;;){ scanf(“%d”,&i);if(i<0||i>6)printf(“t对不起,您的输入错误n”);else break;} return i;} intcreate_record(){inti,j;for(i=0;;)

{ printf(“ 学号(12)姓名(10)出生年月(10)家庭住址(30)邮编(10)电话(15)n”);printf(“-------------n”);scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);i++;printf(“ 想继续创建吗?(1.是/0.不):”);scanf(“%d”,&j);if(!j)

return i;else printf(“恭喜你,创建成功!请继续创建!n”);

} return i;} intadd_record(int flag){ int i=flag,j;for(i;;)

{ printf(“ 学号(12)姓名(10)出生年月(10)家庭住址(30)邮编(10)电话(15)n”);printf(“-------------n”);

scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday,data[i].post, data[i].phone);i++;printf(“ 想继续添加吗?(1.是/0.不):”);scanf(“%d”,&j);if(!j)return i;else printf(“恭喜你,添加成功!请继续添加!n”);

} return(i);} intfind_record(){ int i;char number[6];char named[10];intxz;printf(“--------------------n”);printf(“ 1.按学号查询n”);printf(“ 2.按姓名查询n”);printf(“--------------------n”);printf(“ 请选择 : n”);

scanf(“%d”,&xz);if(xz==1){ printf(“ 请输入要查找的学号: ”);scanf(“%s”,number);for(i=0;i

if(strcmp(data[i].num,number)==0)

{ printf(“ ** 学号姓名出生年月家庭住址邮编电话**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;}

} else if(xz=2){ printf(“请输入要查找的姓名: ”);scanf(“%s”,named);for(i=0;i

{ printf(“ ** 学号姓名出生年月家庭住址邮编电话**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;else {printf(“对不起,没有你要找的人!n”);return 0;} }

else {printf(“对不起,没有你要找的人!n”);return 0;}

}

} intdelete_record(int flag)

{ inti,j;intdeletemark=0;char number[20];printf(“ttt请输入要删除学号:n”);scanf(“%s”,number);for(i=0;i

{ if(strcmp(data[i].num, number)==0)

{ printf(“ttt以下是您要删除的用户纪录:n”);printf(“ ** 学号姓名出生年月家庭住址邮编电话**n”);printf(“------------------------------n”);

printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);

printf(“ttt是否删除?(y/n)”);if(getch()=='y' || getch()=='Y')

{ for(j=i;j

} else return;

} continue;

} if(deletemark==0)

{ printf(“ttt没有该用户的纪录”);

return;

} return;

} voidpaixu_record(int flag){inti,j;struct record tmp;

printf(“ 1.按姓名排序n”);printf(“ 2.按学号排序n”);scanf(“%d”,&i);if(i==1){for(i=1;i

{ if(strcmp(data[i].name, data [i-1].name)<0)

{ tmp= data[i];

j=i-1;do

{ data [j+1]= data [j];j--;}while((strcmp(tmp.name, data [j].name)<0&&j>=0));data [j+1]=tmp;

}

} printf(“ttt排序成功!”);}

if(i==2){for(j=0;jdata[i+1].num)

{tmp=data[i];data[i]=data[i+1];data[i+1]=tmp;} } }

intsave_record(int flag){

FILE*fp;int i;if((fp=fopen(“D:data.txt”,“w+”))==NULL)

{printf(“无法打开文件!”);exit(0);} for(i=0;i

{fprintf(fp,“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);printf(“n”);} fclose(fp);return 0;}

第四篇:C语言课程设计-通讯录管理

课程设计报告

课程设计题目:

通讯录管理

学生姓名:

业:

级:

指导教师:

2009年6月16日

实验题目:

《通讯录管理》

实验时间、地点:

2009-6-8到2009-6-12日

信工楼307

实验目的:

本次课程设计的主要目的是综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体和文件等相关内容的综合应用,使同学们能进一步熟悉掌握C语言的基本语法,进一步提升自己的编程能力并逐步培养编程思维,进而不断提高同学们解决问题的能力,并为以后的语言学习打下良好的基础。

实验要求:

1.独立完成;

2.此次课程设计在规定的时间必须在实验室完成,不得以任何理由在其他地点进行;

3.每个人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其他的题目,当然在完成自己的题目之后根据个人兴趣可以继续选做其他的题目;

4.课程设计完成后严格按照报告格式撰写课程设计报告,并于结束后的第三天上交到学习委员统一交给老师;

5.课程设计的成绩由两部分组成:程序检查成绩(40%,每个功能占程序分的20%)+报告检查成绩(40%)+平时考核(20%)

6.每个程序实现方式可以自选,可以采用文件、链表、数组或其任意组合完成。

实现思路:

通讯录信息包括:学号,姓名,班级,联系电话,E-MAIL,宿舍等 主要功能:

(1)建立、修改和增删学生通讯录(2)能够按多种方式进行查询

按姓名查询、按学号查询

按宿舍查询

(3)要求:以菜单方式操作,界面友好,易于操作

流程图:

增加

1↓ ↓

保存

查询

a↓

b↓

c↓

按姓名查询

按学号查询

按宿舍查询

2→删除 4→保存

5↓

5↓

退出

退出 实现过程:

3#include #include FILE *fp;int i;char ch;struct member { int number;char name[20];char telephone[13];char xuehao[50];char sushe[20];char email[20];}members[50];void Data_Menu(){ printf(“n----------------------------n”);

printf(“ 学生通讯录 08041238”);printf(“n----------------------------n”);printf(“ 1.Add”);printf(“ 2.Delete”);printf(“ 3.Search”);printf(“ 4.Save”);printf(“ 5.Exit”);printf(“n----------------------------n”);} void Data_Menu1(){ printf(“n”);printf(“ a.Name”);printf(“nb.Xuehao”);printf(“nc.sushe”);} void Data_Load(){ int j;long k;fp=fopen(“members.txt”,“rt”);if(fp!=NULL){ for(i=1;i<50;i++){ j=fgetc(fp);if(j==EOF){ return;} k=i-1;fseek(fp,k*sizeof(struct member),SEEK_SET);fread(&members[i],sizeof(struct member),1,fp);} }else{ fp=fopen(“members.txt”,“a”);i=1;} } void Data_Add(int j){ printf(“n”);members[j].number=j;printf(“ntNo:%d”,j);printf(“ntName:”);scanf(“%s”,members[j].name);printf(“tTelephone:”);scanf(“%s”,members[j].telephone);printf(“tXuehao:”);scanf(“%s”,members[j].xuehao);printf(“tSushe:”);scanf(“%s”,members[j].sushe);printf(“tEmail:”);scanf(“%s”,members[j].email);} void Data_Show(int j){ printf(“ntNo:%d”,members[j].number);printf(“ntName:%s”,members[j].name);printf(“ntTelephone:%s”,members[j].telephone);printf(“ntXuehao:%s”,members[j].xuehao);printf(“ntSushe:%s”,members[j].sushe);printf(“ntEmail:%s”,members[j].email);} void Data_Save(){ int j;fp=fopen(“members.txt”,“a”);for(j=1;j<=i;j++){ fwrite(&members[j],sizeof(struct member),1,fp);} } main(){ char *search_name;char *search_xuehao;char *search_sushe;int j,k;Data_Load();i--;do{ Data_Menu();printf(“ Please Choose:”);ch=getche();switch(ch){ case '1': while(i<50){ i++;Data_Add(i);break;} if(i==50){ printf(“ntMessage is Filled!n”);} break;case '2': if(i<1){ printf(“ntNo Recordsn”);break;} printf(“ntDelete No:”);scanf(“%d”,&k);for(j=k;j

break;case '4': Data_Save();printf(“ Date is Saved!n”);fclose(fp);break;case '5': printf(“nt”);printf(“ Do You Want To Save Message(y/n)”);if(getche()=='y'){ Data_Save();} fclose(fp);exit(0);break;default: break;} }while(1);} 实验总结:

经过几天的努力,终于做出来了,在这过程中自己逐渐提高了对数组、函数、指针、结构体和文件等相关内容的综合应用,并且进一步熟悉掌握C语言的基本语法,提升了自己的编程能力,并逐步培养编程思维,进而不断提高自己解决问题的能力。

心得体会: 实验虽然做成功了,但在此次试验过程中,自己也体会到一些东西:

第一:要细心对待程序的每一个环节,否则得话将会给自己编程带来很大的困扰.第二:要多动手去操作,只有这样才能真正使自己的能力得到真正的提高。

第三:课外要多看以些书,光凭课本上的知识是不够的,要自己自觉地去学习新的知识。

第五篇:c语言通讯录程序

C语言程序设计实践

——通讯录管理系统

六、程序源代码及注释

#include #include #include #include #define SUM 100 #define STOP 1000

typedef struct /*结构体,存放通讯录成员信息,重新定义成member型变量*/ { char name[10];char tel[15];char cla[5];char mail[20];char qq[15];}member;

member info[SUM];//所有成员空间

FILE *fp;

//文件指针,用于打开或保存通讯录文件 int count=0;//全局变量,用于计数已存入数量

/*-----------------------*/

int load(char filename[])//打开通讯录文件 { member *p;int i=0;if((fp=fopen(filename,“rb”))==NULL)

return i;else

{

while(!feof(fp))

{

p=(member *)malloc(sizeof(member));

if(fread(p,sizeof(member),1,fp)==1)

{

strcpy(info[i].name,p->name);

strcpy(info[i].tel,p->tel);

strcpy(info[i].cla,p->cla);

strcpy(info[i].mail,p->mail);

strcpy(info[i].qq,p->qq);

i++;

}

free(p);

}

return i;

} } /*------------------*/

void save(char filename[])//保存通讯录文件 {

int i;

member *p;

if((fp=fopen(filename,“wb”))==NULL)

{

printf(“无法保存!打开文件%s时出错n”,filename);

exit(1);

}

else

for(i=0;i

{

p=(member *)malloc(sizeof(member));

strcpy(p->name,info[i].name);

strcpy(p->tel,info[i].tel);

strcpy(p->cla,info[i].cla);

strcpy(p->mail,info[i].mail);

strcpy(p->qq,info[i].qq);

fwrite(p,sizeof(member),1,fp);

free(p);

}

fclose(fp);} /*-----------------*/ void display(void)

//分类查看功能 { system(“cls”);

char dis;

char way[5];

int i,j=0;

choice:

printf(“**********

请选择查看分类

***********n”);

printf(“**********

1.亲友

**********n”);

printf(“**********

2.同学

**********n”);

printf(“**********

3.老师

**********n”);

printf(“**********

4.其他

**********n”);

printf(“**********

5.查看全部

**********n”);

printf(“**********

0.返回上一级菜单

**********n”);

printf(“*****************************************n”);

printf(“请选择(1~5或0):”);

dis=getchar();

getchar();

switch(dis)

{

case '1':strcpy(way,“亲友”);break;

case '2':strcpy(way,“同学”);break;

case '3':strcpy(way,“老师”);break;

case '4':strcpy(way,“其他”);break;

case '5':printf(“*******全部通讯成员*******n”);

for(i=0;i

printf(“

姓名:%sn”,info[i].name);

printf(“

电话号码:%sn”,info[i].tel);

printf(“

电子邮箱:%sn”,info[i].mail);

printf(“

QQ号:%sn”,info[i].qq);

printf(“

分类:%sn”,info[i].cla);

printf(“*****************************n”);

j++;

}

if(j==0){

printf(“************************n”);

printf(“无任何通讯成员n”);

}

j=0;

Sleep(STOP);

goto choice;break;

case '0':return;break;

default:

printf(“*************************n”);

printf(“

输入指令有误!

n”);

printf(“*************************n”);

Sleep(STOP);

goto choice;

}

printf(“********通讯成员之%s*******n”,way);

for(i=0;i

if(strcmp(info[i].cla,way)==0){

printf(“****

姓名:%sn”,info[i].name);

printf(“****

电话号码:%sn”,info[i].tel);

printf(“****

电子邮箱:%sn”,info[i].mail);

printf(“****

QQ号:%sn”,info[i].qq);

printf(“****

分类:%sn”,info[i].cla);

printf(“**********************************n”);

j++;

}

}

if(j==0){

printf(“该分类中无通讯成员n”);

printf(“******************n”);

}

j=0;

Sleep(STOP);

goto choice;}

/*------*/ int add(void)

//增加新的成员 {

member temp;

int i;

reinput_name:

printf(“请输入新成员的姓名:”);

gets(temp.name);

for(i=0;i

if(strcmp(info[i].name,temp.name)==0){

printf(“该姓名已存在!n”);

Sleep(STOP);

goto reinput_name;

}

reinput_tel:

printf(“请输入新成员的电话号码:”);

gets(temp.tel);

for(i=0;i

if(strcmp(info[i].tel,temp.tel)==0){

printf(“该电话号码已存在!n”);

Sleep(STOP);

goto reinput_tel;

}

printf(“请输入新成员的电子邮箱:”);

gets(temp.mail);

printf(“请输入新成员的QQ号:”);

gets(temp.qq);

printf(“请输入新成员的分类:”);

gets(temp.cla);

info[count]=temp;

count++;

return count;}

/*-----*/ int search(char sname[])//查找功能 {

int flag=0,i;

for(i=0;i

if(strcmp(info[i].name,sname)==0){

printf(“*****************************n”);

printf(“****

姓名:%sn”,info[i].name);

printf(“****

电话号码:%sn”,info[i].tel);

printf(“****

电子邮箱:%sn”,info[i].mail);

printf(“****

QQ号:%sn”,info[i].qq);

printf(“****

分类:%sn”,info[i].cla);

printf(“******************************n”);

flag=1;

}

return flag;}

/*---------*/ int rework(char rname[])

//修改功能 {

int flag=0,i;

for(i=0;i

if(strcmp(info[i].name,rname)==0){

printf(“*********************”);

printf(“请输入新的姓名:”);

gets(info[i].name);

printf(“请输入新的电话号码:”);

gets(info[i].tel);

printf(“请输入新的电子邮箱:”);

gets(info[i].mail);

printf(“请输入新的QQ号:”);

gets(info[i].qq);

printf(“请输入新的分类:”);

gets(info[i].cla);

printf(“********************”);

flag=1;

}

return flag;}

/*-----------------------------*/ int erase(char ename[])//删除功能 {

int flag=0,i,j;

for(i=0;i

if(strcmp(info[i].name,ename)==0){

for(j=i;j

info[j]=info[j+1];

count--;

flag=1;

}

return flag;} /*-----------------------------*/ int call(void)//拨号功能 {

int i,j,flag=0;

char cname[10];

printf(“**************************n”);

for(i=0;i

printf(“%s ”,info[i].name);

}

putchar('n');

printf(“请输入需要拨号的姓名:”);

gets(cname);

for(i=0;i

if(strcmp(info[i].name,cname)==0){

printf(“正在拨号:”);

for(j=0;info[i].tel[j]!='';j++){

printf(“%c”,info[i].tel[j]);

Sleep(300);

}

putchar('n');

flag=1;

}

return flag;} /*-----------------------*/ int main(void)

//主函数 { char filename[40];char c,save_j;int t;char s_r_e_name[10];

printf(“欢迎使用通讯录系统!请输入通讯录文件的有效路径(若文件不存在则自动创建新通讯录)n”);gets(filename);count=load(filename);system(“cls”);

printf(“

======================================n”);

printf(“

==========欢迎使用我的通讯录==========n”);

printf(“

============ 制作:石贵清

===========n”);

begin:

printf(“★★★★★★★★★★★★★★★★★★★★★★★★★★n”);

printf(“※

※n”);

printf(“※

※n”);

printf(“※

※n”);

printf(“※

1.添加新联系人.5.分类显示查询.※n”);

printf(“※

※n”);

printf(“※

2.删除联系人.6.拨出电话.※n”);

printf(“※

※n”);

printf(“※

3.查询通讯成员.7.保存通讯文件.※n”);

printf(“※

※n”);

printf(“※

4.修改信息.0.关闭通迅录.※n”);

printf(“★★★★★★★★★★★★★★★★★★★★★★★★★★n”);printf(“友情提醒:请在退出本程序之前按7保存通讯文件!n”);printf(“请输入您选择的操作:”);

c=getchar();

getchar();switch(c){

case '1':

if(count==SUM){

printf(“======= 通讯录空间已满,无法继续录入!===n”);

Sleep(STOP);

goto begin;break;

}

t=add();

printf(“===== 信息已建立,请尽快保存!=====n”);

if(t==SUM){

printf(“===== 通讯录空间已满,无法继续录入!=====n”);

}

Sleep(STOP);

goto begin;

break;case '2': if(count==0){

printf(“

========================n”);

printf(“=== 通讯录中无任何成员!====n”);

printf(“

======================n”);

Sleep(STOP);

goto begin;

break;}

printf(“请输入要删除成员的姓名:”);

gets(s_r_e_name);

t=erase(s_r_e_name);

if(!t){

printf(“=================n”);

printf(“==== 查无此人====n”);

printf(“=================n”);} else {

printf(“======================n”);

printf(“======已成功删除======n”);

printf(“======================n”);} Sleep(STOP);goto begin;

break;case '3':

printf(“请输入要查找的成员姓名:”);

gets(s_r_e_name);

t=search(s_r_e_name);

if(!t)

{

printf(“======================n”);

printf(“===== 查无此人 =======n”);

printf(“======================n”);

}

Sleep(STOP);

goto begin;

break;

case '7':

save(filename);

printf(“==============================n”);

printf(“======

保存成功!

=======n”);

printf(“==============================n”);Sleep(STOP);goto begin;

break;

case '4':

printf(“请输入要修改的成员姓名:”);

gets(s_r_e_name);

t=rework(s_r_e_name);

if(!t){

printf(“=======

查无此人

====n”);}

else

{

printf(“=========================n”);

printf(“====

修改成功

====n”);

}

Sleep(STOP);

goto begin;

break;

case '5':

display();

Sleep(STOP);

goto begin;

break;

case '6':

t=call();

if(!t)

{

printf(“=============================n”);

printf(“====== 输入姓名错误!=======n”);

printf(“============================n”);

}

else

{

printf(“=========================n”);

printf(“======

电话已经拨出

=====n”);

printf(“=======================n”);

}

Sleep(STOP);

goto begin;

break;

case '0':

printf(“是否保存数据文件?(Y:是/N:否)”);

save_j=getchar();

if(save_j=='Y'||save_j=='y'){

save(filename);

printf(“

====== 保存成功!=======n”);

printf(“======= 感谢您的使用!再见!======n”);

}

else

{

printf(“========================n”);

printf(“=== 感谢您的使用!再见!===n”);

printf(“========================n”);

}

exit(0);default:

printf(“=====

Sleep(STOP);

goto begin;} return 0;}

输入指令无效!====”);

下载全功能版通讯录(c语言) 设计说明概要word格式文档
下载全功能版通讯录(c语言) 设计说明概要.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言程序设计学生通讯录管理系统

    #include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "stdlib.h" #define null 0 struct record { char name[20]; char phone[20];......

    C语言大作业——学生通讯录管理系统

    #include #include //#define NULL 0 #define LEN sizeof(struct message) struct message //定义结构体{ char name[15]; char number[15]; char phone[15]; char qq[1......

    c语言通讯录实训心得(精选5篇)

    我这次实训当中,它让我巩固了C语言所学基本课程,提高C语言编程的综合应用能力以及C语言程序的编译、调试方法。不仅如此,它让我掌握C语言中的基本数据输入、输出; 熟练使用C语言......

    园林景观设计说明概要

    园林景观设计说明 厂区绿化景观设计说明一、基本概况: 工厂绿化作为城市绿化的一个重要组成部分,不仅可以美化环境、陶冶情操,还是工厂文明的标志。信誉的投资并维护城市生态的......

    学生通讯录管理系统(C语言课程设计实验报告)

    C语言课程设计报告——刘显安 C语言课程设计 姓名:刘显安 学号:09041131 班级:090411 专业:计算机科学与技术 学院:信息工程学院 设计题目:学生通讯录管理系统 指导教师:宋文琳 提......

    C语言课程设计学生通讯录管理系统设计

    C语言课程设计学生通讯录管理系统设计一、题目内容的描述学生通讯录管理系统设计设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电......

    湖南工业大学 通讯录管理系统课程设计报告书(C语言)

    湖南工业大学 二〇〇九 ~ 二〇一〇学年 第 二 学期 计算机与通信学院 课程设计报告书 课程名称: C语言课程设计 班 级: 学 号:姓 名: 指导老师: 二〇〇九 年 九 月 通讯录......

    c语言

    学C语言有感 姓 名: 李文丽 学 号:034108048 班 级:083411 指导老师:张印 2009年12月 学C语言有感第1页 学C语言有感 摘要:C语言既有高级语言的特点,又具有汇编语言的特点;既能用......