通讯录管理系统(基于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,一经查实,立即删除!

相关文章

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

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

【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表结果…

非标设计之气缸类型

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

【web安全】RCE漏洞原理

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

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; 知识点&…

PyQt实战 创建一个PyQt5项目

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

【离散差分】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…

同旺科技 USB TO SPI / I2C --- 调试W5500_TCP Client测试

所需设备&#xff1a; 内附链接 1、USB转SPI_I2C适配器(专业版); 首先&#xff0c;连接W5500模块与同旺科技USB TO SPI / I2C适配器&#xff0c;如下图&#xff1a; 网关IP地址寄存器(192.168.1.1)子网掩码寄存器(255.255.255.0)源MAC地址寄存器源IP地址寄存器(192.168.1.8)…

QT4和 QT5 槽函数连接的区别

正常连接方式 //QT4官方用列QLabel *label new QLabel;QScrollBar *scrollBar new QScrollBar;QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label, SLOT(setNum(int)));//QT5官方用列QLabel *label new QLabel;QLineEdit *lineEdit new QLineEdit;QObject::c…

STK Components 二次开发-飞行器

1.创建飞机 参数帮助文档 var poitList GetTracksData(); var waypointPropagator new WaypointPropagator(m_earth, poitList); var locationPoint waypointPropagator.CreatePoint();m_aircraft new Platform {Name "MH730",LocationPoint locationPoint,Or…

vue3 中使用 sse 最佳实践,封装工具

工具 // 接受参数 export interface SSEChatParams {url: string,// sse 连接onmessage: (event: MessageEvent) > void,// 处理消息的函数onopen: () > void,// 建立连接触发的事件finallyHandler: () > void,// 相当于 try_finally 中的 finally 部分&#xff0c;不…

机器学习(2)回归

0.前提 上一期&#xff0c;我们简单的介绍了一些有关机器学习的内容。学习机器学习的最终目的是为了服务我未来的毕设选择之一——智能小车&#xff0c;所以其实大家完全可以根据自己的需求来学习这门课&#xff0c;我做完另一辆小车后打算花点时间去进行一次徒步行&#xff0…

20:kotlin 类和对象 --泛型(Generics)

类可以有类型参数 class Box<T>(t: T) {var value t }要创建类实例&#xff0c;需提供类型参数 val box: Box<Int> Box<Int>(1)如果类型可以被推断出来&#xff0c;可以省略 val box Box(1)通配符 在JAVA泛型中有通配符?、? extends E、? super E&…

25. K 个一组翻转链表

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

自媒体原创改写工具,自媒体首发改写软件

自媒体平台已成为许多创作者表达观点、分享知识和积累影响力的关键渠道。创作是需要技巧和经验的。本文将分享一些自媒体文章改写技巧&#xff0c;并推荐一系列优秀的自媒体文章改写工具&#xff0c;帮助您提升创作效率&#xff0c;创作出更优秀的文章。 自媒体文章改写技巧 …