通讯录管理系统(基于C语言)

模块设计

本通讯录管理系统功能模块共包括9个部分:1.输入数据、2.显示数据、

3.插入数据、4.删除数据、5.查看数据、6.修改数据、7.保存数据、

8.返回主菜单、9.退出系统.

一.总体设计

通讯录的每一条信息包括:姓名、性别、住址、联系电话。

  1. 输入数据:可以一次完成若干条信息的输入.
  2. 显示数据:完成全部通讯录信息的显示.
  3. 插入数据:可完成对数据的添加.
  4. 删除数据:完成按姓名删除一条通讯信息.
  5. 查看数据:完成按姓名查找通讯信息并显示.
  6. 修改数据:修改一条通讯录信息.
  7. 保存数据:把所有输入的的信息保存好.
  8. 返回主菜单:在执行其他步骤时可以立即跳回主菜单页面.
  9. 退出系统:执行完各操作退出系统.

  • 详细设计
  1. 主函数:

void main()
{int i;system("color f0");screen();Sleep(3000);print();while(1){printf("请输入你的选择(1~9):");loop:scanf("%d",&i);if(i<1||i>9){printf("输入有误,请在1~9中进行选择:");goto loop;}switch(i){case 1:inputdata();break;case 2:lookdata(head);break;case 3:insert();break;case 4:deleted();break;case 5:find(head);break;case 6:update(head);break;case 7:save(head);break;case 8:print();break;case 9:exit(1);break;}}
}

进入菜单页面

3.输入数据:
void input(stu *p1) //输入相关数据
{printf("姓名:");scanf("%s",&p1->name);printf("性别:");scanf("%s",&p1->sex);printf("手机号:");scanf("%s",&p1->phone);printf("住址:");scanf("%s",&p1->address);
}stu * inputdata()  //数据输入的函数
{stu *p1,*p2;int i=1;p1=(stu *)malloc(sizeof(stu));if(p1!=NULL){head=p1;printf("\n\t\t\t☆☆☆输入数据☆☆☆\n");printf("------------------------------------------------------------------\n");printf("在姓名处输入“ok”代表输入数据结束\n");while(i){printf("姓名:");scanf("%s",&p1->name);if(strcmp(p1->name,"ok")==0){printf("\n输入完毕!\n");printf("========================================================================\n");i=0;p2->next=NULL;free(p1);p1=p2;}else{printf("性别:");scanf("%s",&p1->sex);printf("手机号:");scanf("%s",&p1->phone);printf("住址:");scanf("%s",&p1->address);printf("=====================================\n");p2=p1;p1=(stu *)malloc(sizeof(stu));if(p1!=NULL){p2->next=p1;}}}return(p1->next);}
}
4.显示数据:
stu * lookdata(stu *p1)  //查看数据的函数
{printf("\n\t\t\t☆☆☆显示数据☆☆☆\n");printf("----------------------------------------------------------------------\n");while(p1!=NULL){printf("姓名:%s\n",p1->name);printf("性别:%s\t",p1->sex);printf("手机号:%s\t",p1->phone);printf("住址:%s\n",p1->address);printf("======================================================================\n");p1=p1->next;}return p1;
}
5.插入数据:
void insert()  //插入数据
{int i;char named[20];stu *p1,*p2,*p3;p1=head;p3=(stu *)malloc(sizeof(stu));p3->next=NULL;printf("\n\t\t\t☆☆☆插入数据☆☆☆\n");printf("----------------------------------------------------------------------\n");printf("请输入插入者的资料:\n");input(p3);printf("\n插入选项\n");printf("1.首位置插入\t2.尾位置插入\t3.前插\n");printf("请输入你的选择:");scanf("%d",&i);switch(i){case 1:p3->next=p1;head=p3;break;case 2:while(p1->next!=NULL){p2=p1;p1=p1->next;}p1->next=p3;break;case 3:printf("请输入姓名(前插):");scanf("%s",named);while(strcmp(named,p1->name)!=0){p2=p1;p1=p1->next;}p2->next=p3;p3->next=p1;break;}printf("插入成功!\n");printf("======================================================================\n");return;
}
6.删除数据:
void deleted()   //删除数据
{stu *p1,*p2;char Name[20]; //想要删除的人的姓名printf("\n\t\t\t☆☆☆删除数据☆☆☆\n");printf("----------------------------------------------------------------------\n");printf("请输入要删除的姓名:");scanf("%s",Name);p1=head;if(head==NULL){printf("内存空空神马都没有!\n");printf("======================================================================\n");return;}if(strcmp(Name,p1->name)==0){head=p1->next;printf("删除成功!\n");printf("======================================================================\n");return;}while(p1!=NULL&&(strcmp(Name,p1->name)!=0)){p2=p1;p1=p1->next;}if(p1==NULL){printf("此人不存在!\n");printf("======================================================================\n");return;}if(p1->next!=NULL){p1=p1->next;p2->next=p1;printf("删除成功!\n");printf("======================================================================\n");return;}else{p2->next=NULL;printf("删除成功!\n");printf("======================================================================\n");return;}
}
7.查看数据:
find(stu *p2)  //通过姓名查找查看数据的函数
{char name[20];int b=0;printf("\n\t\t\t☆☆☆查看数据☆☆☆\n");printf("----------------------------------------------------------------------\n");printf("请输入您想查找人的姓名:");scanf("%s",name);while(p2!=NULL){if(strcmp(name,p2->name)==0){printf("你要找到的数据\n");printf("姓名:%s\n",p2->name);printf("性别:%s\t",p2->sex);printf("手机号:%s\t",p2->phone);printf("住址:%s\n",p2->address);printf("======================================================================\n");b=1;}p2=p2->next;}if(b==0){printf("\n您要查找的人不存在!\n");}
}
8.修改数据:
update(stu *p2) //通过姓名查找修改数据
{char name[20];int b=0,i;printf("\n\t\t\t☆☆☆修改数据☆☆☆\n");printf("----------------------------------------------------------------------\n");printf("请输入将要修改人的姓名:");scanf("%s",name);while(p2!=NULL){if(strcmp(name,p2->name)==0){printf("该同学的基本信息\n");printf("姓名:%s\n",p2->name);printf("性别:%s\t",p2->sex);printf("手机号:%s\t",p2->phone);printf("住址:%s\n",p2->address);printf("\n请选择要修改的信息\n");printf("\t1.姓名\t2.性别\t3.手机号\t4.住址\n");printf("\n您的选择是(1~4):");scanf("%d",&i);printf("请输入修改之后的内容\n");switch(i){case 1:printf("姓名:");scanf("%s",&p2->name);break;case 2:printf("性别:");scanf("%s",&p2->sex);break;case 3:printf("手机号:");scanf("%s",&p2->phone);break;case 4:printf("住址:");scanf("%s",&p2->address);break;}printf("\n修改成功!\n");printf("=========================================================================\n");b=1;}p2=p2->next;}if(b==0){printf("没有找到该人的资料!\n");}
}
9.保存数据:
save(stu *p2) //保存数据
{FILE *fp;char file[15];printf("\n\t\t\t☆☆☆保存数据☆☆☆\n");printf("----------------------------------------------------------------------\n");printf("输入文件名:");scanf("%s",file);if((fp=fopen(file,"w"))==NULL){printf("cannot open this file\n");exit(0);}fprintf(fp,"姓名\t性别\t手机号\t住址\n");while(p2!=NULL){fprintf(fp,"%s\t",p2->name);fprintf(fp,"%s\t",p2->sex);fprintf(fp,"%s\t",p2->phone);fprintf(fp,"%s\n",p2->address);p2=p2->next;}printf("\n保存成功!\n");printf("======================================================================\n");fclose(fp);
}
10.屏幕显示
void screen()
{int i;char s[251]={"欢迎使用由空心木偶制作通讯录管理系统,\n\n\t\t\t本系统用于通讯录管理----排序,打印\n\n\n\t\tWelcome to use produced by 计科214 class address book\n\n\t\t management system,sorting,printing"};printf("\n================================================================================\n");printf("\n\n\n\t\t\t");for(i=0;s[i]!=0;i++){Sleep(30);printf("%c",s[i]);}printf("\n\n\n\n\n\n\n\n\t\t ~ Hi~ o(* ̄▽ ̄*)ブ~ ~ ~祝您旅途愉快~ ~\n");printf("================================================================================\n");}11.返回主菜单:
void main()
{int i;system("color 4e");screen();Sleep(3000);print();while(1){printf("请输入你的选择(1~9):");loop:scanf("%d",&i);if(i<1||i>9){printf("输入有误,请在1~9中进行选择:");goto loop;}switch(i){case 1:inputdata();break;case 2:lookdata(head);break;case 3:insert();break;case 4:deleted();break;case 5:find(head);break;case 6:update(head);break;case 7:save(head);break;case 8:print();break;case 9:exit(1);break;}}
}
  • 三、各模块的功能介绍,参数说明。

 第五部分:调试结果

  1. 代码输入完成后对其进行编译,无错误后进行调试运行,运行之后会进入主菜单,系统界面就会显示在桌面,然后按照前面提示的内容输入数字对其进行操作。

好了到这次,此次的大作业就基本结束了,按照代码依次加入到运行环境就可以运行了。偶然翻U盘看到大一写的小系统,拿出来分享给大家,祝大家早日完成期末大作业,轻松放假!!!期待你的关注与收藏。

如果有问题也可以留言,一起探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 预习计算内容根据运放的非线…

【MODBUS】Modbus主站云端服务器和边缘设备部署区别

Modbus主站作为云端服务器&#xff1a; 云端服务器作为主站&#xff1a; 在这种部署方式中&#xff0c;云端服务器充当Modbus通信的主站&#xff0c;负责向不同的Modbus从站发起请求&#xff0c;并处理响应。云端服务器通常与其他云服务一起运行&#xff0c;可以在云平台上实现…

【Linux下如何生成coredump文件】

一&#xff0c;什么是coredump 我们经常听到大家说到程序core掉了&#xff0c;需要定位解决&#xff0c;这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止&#xff0c;并且在满足一定条件下&#xff08;这里为什么说需要满足一定的条件呢&#…

QT使用SQLite(打开db数据库以及对数据库进行增删改查)

QTSQLite 在QT中使用sqlite数据库&#xff0c;有多种使用方法&#xff0c;在这里我只提供几种简单&#xff0c;代码简短的方法&#xff0c;包括一些特殊字符处理。 用SQlite建立一个简单学生管理数据库 数据库中有两个表一个是class和student。 class表结构 student表结果…

Java零基础-if条件语句

前言 条件语句是编程语言中最基础也是最常用的语句之一&#xff0c;对于初学者来说&#xff0c;掌握好条件语句是学习编程的第一步。本文将以Java开发语言为例&#xff0c;详细介绍Java中的if条件语句及其应用场景。 摘要 本文主要包含以下内容&#xff1a; Java中的if条件…

非标设计之气缸类型

空压机&#xff1a; 空压机又称空气压缩机&#xff0c;简单来说就是将机械能转化为压力能来进行工作的&#xff0c;空压机在电力行业应用比较多&#xff0c;除了在电力行业应用较多外&#xff0c;其实空压机还有一个比较常见的用途就是用来制冷和分离气体&#xff0c;输送气体…

【web安全】RCE漏洞原理

前言 菜某的笔记总结&#xff0c;如有错误请指正。 RCE漏洞介绍 简而言之&#xff0c;就是代码中使用了可以把字符串当做代码执行的函数&#xff0c;但是又没有对用户的输入内容做到充分的过滤&#xff0c;导致可以被远程执行一些命令。 RCE漏洞的分类 RCE漏洞分为代码执行…

Vue子组件的挂载,以及使用子组件的原理

Vue子组件是如何挂载的&#xff1f; vue中&#xff0c;子组件是通过父组件模板中的标签来进行挂载的&#xff0c;当父组件模板中包含子组件的标签时&#xff0c;vue会在渲染过程中自动创建并挂载子组件 挂载过程如下&#xff1a; 1、解析父组件模板&#xff1a;当vue实例化父…

RT-Thread 三步实现利用DMA进行串口发送

应某些网友需求&#xff0c;说网上根本找不到基于Rt-Thread DMA串口发送代码&#xff0c;只有官方开源的串口DMA接收。 其实这些东西并不难&#xff0c;只要你细心去看哪些闲置的驱动文件且都是包装好的&#xff0c;通过关键字去查询或点开源文件查看&#xff0c;花不了几分钟…

【C/PTA —— 14.结构体1(课内实践)】

C/PTA —— 14.结构体1&#xff08;课内实践&#xff09; 6-1 计算两个复数之积6-2 结构体数组中查找指定编号人员6-3 综合成绩6-4 结构体数组按总分排序 6-1 计算两个复数之积 struct complex multiply(struct complex x, struct complex y) {struct complex product;product.…

Selenium 自动化高级操作与解决疑难杂症,如无法连接、使用代理等

解决 Selenium 自动化中的常见疑难杂症 这里记录一些关于 Selenium的常用操作和疑难杂症。 有一些细节的知识点就不重复介绍了&#xff0c;因为之前的文章中都有&#xff01; 如果对本文中的知识点有疑问的&#xff0c;可以先阅读我以前分享的文章&#xff01; 知识点&…

【MySQL表的操作】

目录&#xff1a; 前言表的操作创建表查看表结构修改表对列的增删改修改表名 对表中数据的操作插入数据查找数据修改数据删除数据 删除表总结 前言 剑指offer&#xff1a;一年又3天 表的操作 创建、查看、修改&#xff08;属性和内容&#xff09;与删除 创建表 语法&#xf…

点云从入门到精通技术详解100篇-雨雾环境下多传感器融合 SLAM 方法

目录 前言 国内外研究现状 传统 SLAM 研究现状 多传感器融合 SLAM 研究现状

8.Python TCP网络编程入门指南

HTTP协议 HTTP 是一种用于传输超文本&#xff08;例如 HTML&#xff09;的应用层协议。它是基于请求-响应模型的&#xff0c;客户端发送请求&#xff0c;服务器返回响应。HTTP 使用 TCP 作为传输层协议。在 Python 中&#xff0c;有一些内置的模块用于处理 HTTP 请求和响应&am…

PyQt实战 创建一个PyQt5项目

前后端分离 参考链接 PyQt5实战&#xff08;二&#xff09;&#xff1a;创建一个PyQt5项目_pyqt5实战项目_笨鸟未必先飞的博客-CSDN博客 项目目录 创建一个QT项目 调用pyuic工具将dialog.ui文件编译为Python程序文件ui_dialog.py。 # -*- coding: utf-8 -*-# Form implemen…

Android 透明度颜色值对照表

一、透明度对照表 注&#xff1a;00是完全透明&#xff0c;FF就是完全不透明 我们的UI小姐姐就喜欢给「不透明度」&#xff0c;这个需要自己判断一下。 完全透明:0% HEX: 00 透明度:1% HEX: 30 透明度:2% HEX: 50 透明度:3% HEX: 80 透明度:4% HEX: A0 透明度:5…

【离散差分】LeetCode2953:统计完全子字符串

作者推荐 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积 本题其它解法 【滑动窗口】LeetCode2953:统计完全子字符串 涉及知识点 分块循环 离散差分 题目 给你一个字符串 word 和一个整数 k 。 如果 word 的一个子字符串 s 满足以下条件&#xff0c;我们称它是 完全…

云原生之深入解析如何限制Kubernetes集群中文件描述符与线程数量

一、背景 linux 中为了防止进程恶意使用资源&#xff0c;系统使用 ulimit 来限制进程的资源使用情况&#xff08;包括文件描述符&#xff0c;线程数&#xff0c;内存大小等&#xff09;。同样地在容器化场景中&#xff0c;需要限制其系统资源的使用量。ulimit: docker 默认支持…

08、分析测试执行时间及获取pytest帮助

官方用例 # content of test_slow_func.py import pytest from time import sleeppytest.mark.parametrize(delay,(1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.0,0.1,0.2,0,3)) def test_slow_func(delay):print("test_slow_func {}".format(delay))sleep(delay)assert…

概率论中,相关性和独立性的关系

相关性和独立性是概率统计中两个关键的概念。 相关性&#xff08;Correlation&#xff09;&#xff1a; 定义&#xff1a; 相关性衡量两个变量之间的线性关系程度。如果两个变量的值在某种趋势下同时变化&#xff0c;我们说它们是相关的。相关性的取值范围在 -1 到 1 之间&…