目录

菜单功能

录入联系人信息功能

查看系统中全部信息功能

查看单个信息功能

删除全部信息功能

删除单个信息功能

修改信息功能

完整代码


在长达一个多月的学习过程中,终于将C语言学完,因此专门写一个C语言课程设计来检验这一个多月的学习成果,由于写的比较急,因此代码有些还可以优化的地方,还请谅解!下面会对每个函数块的作用以及实现方法做出简单的论述。

菜单功能

函数作用:通过menu()函数来调用其他要使用到的功能。并在执行完以后重新返回该函数。

实现方法:主要通过goto语句,switch语句以及函数的调用三种方法来实现该功能。

void menu(){system("cls");printf("                                         ---------------------------------\n");printf("                                         ----------通讯录管理系统----------\n");printf("                                         ----------1、录入信息    ---------\n");printf("                                         ----------2、查看全部信息---------\n");printf("                                         ----------3、查看单个信息---------\n");printf("                                         ----------4、删除全部信息---------\n");printf("                                         ----------5、删除单个信息---------\n");printf("                                         ----------6、修改单个信息---------\n");printf("                                         ----------7、退出系统    ---------\n");int choice;printf("选择任意一个功能:\n");loop:scanf("%d",&choice);switch (choice){case 1:add_people();menu();case 2:views_people();menu();case 3:view_people();menu();break;case 4:delall_people();menu();case 5:del_people();menu();case 6:revise_people();menu();case 7:exit(1);break;default:printf("输入错误!请重新输入:");goto loop;}
}

录入联系人信息功能

函数作用:在使用其他功能之前,应当先将部分信息存储在管理系统中,从而才可以实现数据的增删改查。

实现方法:主要通过动态链表的创建而实现,首先创建结构体指针p1,p2,并通过malloc()函数获取空间,其中p1作为首指针,p2作为尾指针。在p1所指向的结构体获取数据之后,令p2所指向的结构体中的next指针,指向p1结构体的地址,这步操作完成之后,p1将其地址赋值给p2.随后p1再次通过malloc()函数获取一定的空间,在p1指向的结构体获取数据之后,重复之前的操作,直至不再开辟新的空间时停止,最后将NULL赋值给最后一个结构体中next指针,使其不再指向任何地址。

void add_people(){           //添加信息 system("cls");int count;printf("选择要添加联系人个数:\n");scanf("%d",&count);struct People *p1,*p2;p1=p2=(struct People*)malloc(LEN);int i=0;printf("------------------------------------\n");if(head==NULL){head = p1;}else{end->next = p1 ;}while(count>0){printf("请输第%d个联系人信息:\n",++i);printf("姓名:\n");scanf("%s",&p1->name);printf("性别:\n");scanf("%s",&p1->sex);printf("电话号码:\n");scanf("%d",&p1->num);printf("邮箱:\n");scanf("%s",&p1->email);printf("家庭地址:\n");scanf("%s",&p1->addr);count--;p2->next=p1;p2=p1;p1=(struct People*)malloc(LEN);system("cls");}p2->next=NULL;end=p2;printf("全部添加成功!\n");system("pause");
}

查看系统中全部信息功能

函数作用:将通讯录系统中所有数据呈现出来。

实现方法:定义一个结构体指针变量(局部变量)pt,将头指针head赋值给pt,通过循环输出pt指针所指向的结构体,并将所指向结构体中的next所指向的地址赋值给pt,从而实现对下一个结构体的访问。

void views_people(){         //查看全部信息 system("cls");struct People *pt;if(head!=NULL){for(pt=head;pt!=NULL;){printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);pt=pt->next;printf("-------------------------------------------------------------\n");}}else{printf("该系统中无数据!");}system("pause");
}

查看单个信息功能

函数作用:有目的性地寻找联系人的所有信息。

实现方法:将链表中的数据一一遍历,与所输入的数据进行对比,若匹配成功,则将该指针所指向结构体中的数据输出。

void view_people(){      //单个查询,通过名字查询 system("cls");struct People *pt;printf("输入要查询的联系人名字:\n");char name[10];int flag=1;scanf("%s",&name);for(pt=head;pt!=NULL;){if(strcmp(pt->name,name)==0){printf("成功找到!\n");printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);flag=0;break;}pt=pt->next;}if(flag){printf("不好意思,未找到!\n");}system("pause");
}

删除全部信息功能

函数作用:将管理系统中的所有数据删除。

实现方法:仍然是对链表一一遍历,在遍历的过程中通过free()函数将其开辟的空间释放,从而达到数据删除的作用。

void delall_people(){        //全部删除 system("cls");printf("正在删除中···\n");system("pause");struct People *pt;for(pt=head;pt!=NULL;){struct People *temp=pt;pt=pt->next;free(pt);}head=NULL;end=NULL;printf("删除成功!\n");system("pause");
}

删除单个信息功能

函数作用:有目的性地删除一些失效信息

实现方法:依然是通过遍历找到想要删除的指针,不过在这之前应该定义一个结构体指针用来获取pt的地址。其目的是为了能够在删除该指针之前将该指针之前的数据与之后的数据能够连接起来。

void del_people(){           //删除单个联系人信息 system("cls");struct People *pt,*temp;pt=head;printf("请输入要删除的联系人:");char name[10];scanf("%s",&name);int flag=1;while(pt!=NULL){if(strcmp(name,pt->name)==0){if(pt==head){head = pt->next;flag = 0;printf("删除成功!\n");system("pause");}else{printf("删除成功···\n");system("pause");temp->next=pt->next;free(pt);flag=0;break;}}temp=pt;pt=pt->next;}if(flag){printf("不好意思,未找到!\n");system("pause");}
}

修改信息功能

函数作用:修改通讯录管理系统中的一些错误信息

实现方法:其核心依然是通过遍历找到要修改的指针,从而实现对数据的修改。

void del_people(){           //删除单个联系人信息 system("cls");struct People *pt,*temp;pt=head;printf("请输入要删除的联系人:");char name[10];scanf("%s",&name);int flag=1;while(pt!=NULL){if(strcmp(name,pt->name)==0){printf("删除成功···\n");system("pause");temp->next=pt->next;free(pt);flag=0;break;}temp=pt;pt=pt->next;}if(flag){printf("不好意思,未找到!\n");system("pause");}
}

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define LEN sizeof(struct People)
struct People{char name[10];        //姓名 char sex[4];       //性别 int num;           //电话号码 char email[20];      //邮箱 char addr[30];     //家庭地址struct People* next;
};
struct People* head =NULL;
struct People* end =NULL;
void add_people(){          //添加信息 system("cls");int count;printf("选择要添加联系人个数:\n");scanf("%d",&count);struct People *p1,*p2;p1=p2=(struct People*)malloc(LEN);int i=0;printf("------------------------------------\n");if(head==NULL){head = p1;}else{end->next = p1 ;}while(count>0){printf("请输第%d个联系人信息:\n",++i);printf("姓名:\n");scanf("%s",&p1->name);printf("性别:\n");scanf("%s",&p1->sex);printf("电话号码:\n");scanf("%d",&p1->num);printf("邮箱:\n");scanf("%s",&p1->email);printf("家庭地址:\n");scanf("%s",&p1->addr);count--;p2->next=p1;p2=p1;p1=(struct People*)malloc(LEN);system("cls");}p2->next=NULL;end=p2;printf("全部添加成功!\n");system("pause");
}
void views_people(){            //查看全部信息 system("cls");struct People *pt;if(head!=NULL){for(pt=head;pt!=NULL;){printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);pt=pt->next;printf("-------------------------------------------------------------\n");}}else{printf("该系统中无数据!");}system("pause");
}
void delall_people(){       //全部删除 system("cls");printf("正在删除中···\n");system("pause");struct People *pt;for(pt=head;pt!=NULL;){struct People *temp=pt;pt=pt->next;free(pt);}head=NULL;end=NULL;printf("删除成功!\n");system("pause");
}
void view_people(){     //单个查询,通过名字查询 system("cls");struct People *pt;printf("输入要查询的联系人名字:\n");char name[10];int flag=1;scanf("%s",&name);for(pt=head;pt!=NULL;){if(strcmp(pt->name,name)==0){printf("成功找到!\n");printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);flag=0;break;}pt=pt->next;}if(flag){printf("不好意思,未找到!\n");}system("pause");
}
void revise_people(){       //修改内容 system("cls");struct People *pt;printf("输入要修改的联系人名字:\n");char name[10];int flag=1;scanf("%s",&name);for(pt=head;pt!=NULL;){if(strcmp(name,pt->name)==0){printf("成功找到!\n");printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);flag=0;printf("请分别进行修改:\n");printf("姓名:\n");scanf("%s",&pt->name);printf("性别:\n");scanf("%s",&pt->sex);printf("电话号码:\n");scanf("%d",&pt->num);printf("邮箱:\n");scanf("%s",&pt->email);printf("家庭地址:\n");scanf("%s",&pt->addr);break;}pt=pt->next;}if(flag){printf("不好意思,未找到!\n");}system("pause");
}
void del_people(){          //删除单个联系人信息 system("cls");struct People *pt,*temp;pt=head;printf("请输入要删除的联系人:");char name[10];scanf("%s",&name);int flag=1;while(pt!=NULL){if(strcmp(name,pt->name)==0){if(pt==head){head = pt->next;flag = 0;printf("删除成功!\n");system("pause");}else{printf("删除成功···\n");system("pause");temp->next=pt->next;free(pt);flag=0;break;}}temp=pt;pt=pt->next;}if(flag){printf("不好意思,未找到!\n");system("pause");}
}
void menu(){system("cls");printf("                                         ---------------------------------\n");printf("                                         ----------通讯录管理系统----------\n");printf("                                         ----------1、录入信息    ---------\n");printf("                                         ----------2、查看全部信息---------\n");printf("                                         ----------3、查看单个信息---------\n");printf("                                         ----------4、删除全部信息---------\n");printf("                                         ----------5、删除单个信息---------\n");printf("                                         ----------6、修改单个信息---------\n");printf("                                         ----------7、退出系统    ---------\n");int choice;printf("选择任意一个功能:\n");loop:scanf("%d",&choice);switch (choice){case 1:add_people();menu();case 2:views_people();menu();case 3:view_people();menu();break;case 4:delall_people();menu();case 5:del_people();menu();case 6:revise_people();menu();case 7:exit(1);break;default:printf("输入错误!请重新输入:");goto loop;}
}
int main(){void add_people();void views_people();void delall_people();void view_people();void revise_people();void del_people();void menu();menu();return 0;
} 

其中可能会有一些令人难以解读的地方,还请评论区告诉我,对其加以修改。

C语言课程设计|通讯录管理系统(含完整代码)相关推荐

  1. C语言通讯录管理系统(含完整代码)

    课题3:通讯录管理系统 设计内容: 设计一个通讯录管理系统,以实现以下功能:信息添加.查询.修改.删除.排序等功能. 设计要求: 1) 每条信息至包含 :姓名.电话.工作单位等信息 2) 作为一个完整 ...

  2. python通讯录管理系统设计_数据结构课程设计-通讯录管理系统(C语言版)

    ##数据结构课程设计-通讯录管理系统 一,前言 自从上次C语言课设写完后,这次数据结构课设就写的游刃有余了,很快啊,不足三天就写完了它(年轻人不讲武德),如果你认真看过我之前写的C语言课程设计-球队管 ...

  3. C++课程设计 通讯录管理系统 原码及解析

    设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理.(一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时, ...

  4. 销售管理c语言程序设计,C语言课程设计销售管理系统

    C语言课程设计销售管理系统 C语言课程设计 题 目 商品销售系统 指导教师 曹东燕 学生姓名 刘伟 张新星 马国文 学 号 200900804072 200901802005 200900804051 ...

  5. 网吧管理系统C语言作业,C语言课程设计-网吧管理系统.doc

    C语言课程设计-网吧管理系统 <通信工程专业C语言课程设计> 报 告 专 业: 通信工程 班 级: 0802 姓 名: 赵 松 指导教师: 丁 雄 二00九 年 十二 月 二十五 日 目 ...

  6. c语言程序设计书店销售管理系统,C语言课程设计-书店管理系统

    <C语言课程设计-书店管理系统>由会员分享,可在线阅读,更多相关<C语言课程设计-书店管理系统(25页珍藏版)>请在人人文库网上搜索. 1.计算机程序设计计算机程序设计(C(C ...

  7. c语言课程设计人事管理,C语言课程设计-人事管理系统(65页).doc

    C语言课程设计-人事管理系统(65页) C语言课程设计 --人事管理系统 来自资料搜索网() 海量资料下载 人事管理管理系统 [要求] 某高校主要人员有:在职人员(行政人员.教师.一般员工).退休人员 ...

  8. c语言编程票务系统,C语言课程设计票务管理系统

    C语言课程设计票务管理系统 C语言课程设计1西安交通大学城市学院C语言程序设计课程设计报告题目图书信息管理系统专业自动化班级自动化101姓名陈蕾完成日期2012年5月31日C语言课程设计2目录第一章项 ...

  9. java数据结构通讯录管理系统_数据结构课程设计—通讯录管理系统

    浊贤平鲁冠城美华道钉.内急顺美兴华品红缺点清屏!车组悬吊嗉囊沥胆情愿,城东兴荣规划管涌铺板?轻奏便装壳菜蓝坛卵石数据结构课程设计-通讯录管理系统.缪斯朝圣美金放下隆暑路权. 当年绸巾登封轮滑殴伤调理电 ...

  10. c语言课程设计图书管理系统

    数据结构c语言课程设计 图书管理系统 我做的是百度文库的第28题,目前没有报错,正常运行,但是还有一点小bug.代码很多地方写的不是很好,请多多包涵. 账号1,密码1,为管理员账号:其他账号2,3,4 ...

最新文章

  1. pandas 调整显示的行数列数
  2. 生成TFrecord
  3. Kafka:那我走?这个新一代消息中间件,彻底火了!
  4. php的两种复合数据类型是什么意思_2.4PHP复合数据类型:数组和对象
  5. 前端学习(1659):前端系列实战课程之瀑布流实现思路
  6. Apache 简单设置虚拟主机
  7. x3-02 java,Android Studio 3.2.1 - 新项目无法运行
  8. 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动
  9. 2039 骑马修栅栏
  10. 传京东副总裁蒉莺春或将接管POP业务-搜狐IT
  11. wordpress建立二级导航菜单
  12. CISP考试真题,CISP测试题
  13. 2017美团校招安卓岗
  14. 单月营业额一个亿,任泉李冰冰黄晓明追着投钱!这家企业是谁?
  15. 09年河南高考零分作文:兔子,你就是一个傻B
  16. 实习日记5:过滤器+批量删除+角色管理
  17. xnote1.5——WebShell
  18. 基于android的互动健身平台,基于Android和ARM的智能健身系统的设计与实现
  19. 操作系统文件管理习题
  20. 交换机工作原理/模式

热门文章

  1. perl 语言中的q,qw,qr,qx,qq符号用法总结
  2. vB编程VB源码 VB读取EXCEL工作薄某个表中数据 ADODB.Recordset
  3. eo是什么?一份没有满分的试题
  4. 卡巴斯基一年版 送序列号
  5. Linux安装nginx做端口映射
  6. c语言代码格式的简单介绍
  7. oozie ErrorCode含义
  8. BAT54C 二极管是如何工作的?
  9. Java自定义拦截器详细教程
  10. Jmeter---Jmeter安装教程