通讯录管理系统(基于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盘看到大一写的小系统,拿出来分享给大家,祝大家早日完成期末大作业,轻松放假!!!期待你的关注与收藏。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[leetcode ~二叉树] 模版

文章目录 1. 左叶子之和2. 翻转二叉树 E 1. 左叶子之和 :::details 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&…

java生成邮件eml文件例子

提前导入javamail.jar 仓库地址 仓库服务 导入引用类方法 import javax.mail.Message; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.FileOutputStream; import java.util.Properties…

10、外观模式(Facade Pattern,不常用)

外观模式&#xff08;Facade Pattern&#xff09;也叫作门面模式&#xff0c;通过一个门面&#xff08;Facade&#xff09;向客户端提供一个访问系统的统一接口&#xff0c;客户端无须关心和知晓系统内部各子模块&#xff08;系统&#xff09;之间的复杂关系&#xff0c;其主要…

利用DateFormat、Date、Calendar等相关类,编程实现如下功能

&#xff08;1&#xff09;用户输入2个日期&#xff0c;第一个日期用整数形式输入&#xff0c;把输入的整数设置为日历对象1的年月日的值。第二个日期以字符串形式输入&#xff0c;形如“2022-10-25”&#xff0c;并设置为日历对象2的年月日的值。将2个日期以“xx年xx月xx日”的…

国际语音呼叫中心适用的行业有哪些?

国际语音呼叫中心的出现&#xff0c;使企业可以在全球范围内提供统一的客户支持&#xff0c;有效地解决客户服务、市场营销等国际性电话沟通问题&#xff0c;为企业提供了卓越的全球客户服务&#xff0c;确保客户在不同国家和地区之间获得一致的、高质量的支持。那么哪些行业适…

熬夜会秃头——beta冲刺Day5

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day5团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作…

代码随想录刷题题Day5

刷题的第五天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C / Python Day5 任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 1 哈希表理…

Db2的Activity event monitor在Db2 MPP V2上收集ROWS_INSERTED信息

注&#xff1a;本文不是讲解Db2 Activity event monitor&#xff0c;只是一个用法实践。要了解Activity event monitor&#xff0c;请参考 https://www.ibm.com/docs/en/db2/11.5?topicevents-activity-event-monitoring 。 环境 Red Hat Enterprise Linux release 8.8 (Oot…

“构建智慧城市,共享美好生活“2024杭州国际智慧城市展览会

智慧城市作为当今社会发展的必然趋势&#xff0c;正在被越来越多的企业和观众所关注。为了进一步推动智慧城市的发展&#xff0c;2024杭州智慧城市展览会将于4月份在杭州国际博览中心盛大召开。目前&#xff0c;招商工作已近半程&#xff0c;大批国内外知名企业踊跃报名&#x…

会话技术(Cookie与Session)

会话技术 一.作用域对象 1.作用域对象概述 有作用域的对象作用域对象可以用来存储数据并且可以在不同的组件之间进行传递传递的范围受作用域的限制&#xff0c;一旦超过范围&#xff0c;立即失效 2.两个作用域对象 作用域对象描述request对象作用范围是一次请求ServletCon…

3D Gaussian Splatting的使用

3D Gaussian Splatting的使用 1 下载与安装2 准备场景样本2.1 准备场景照片2.1.1 采集图片2.1.2 生成相机位姿 3 训练4 展示 1 下载与安装 今年SIGGRAPH最佳论文&#xff0c;学习了一下&#xff0c;果然厉害&#xff0c;具体论文原理就不说了&#xff0c;一搜都有&#xff0c;…

HOST文件被挟持,无法上网,如何解决。

问题&#xff1a; 晚上开机&#xff0c;突然发现无法联网&#xff0c;提示网络异常 解决&#xff1a; 首先网络诊断&#xff0c;host文件被劫持&#xff0c;修复后&#xff0c;仍然不行。 然后测试手机热点&#xff0c;发现仍然无法联网 尝试用火绒修复&#xff0c;无果。 所有…

安路Anlogic FPGA下载器的驱动安装教程

安路FPGA下载器驱动安装教程 安路FPGA下载器&#xff1a;EN-ALC10,是一款高性能FPGA下载线&#xff08;编程器&#xff09;&#xff0c;支持安路的开发软件TDS和全系列FPGA芯片下载编程&#xff0c;支持全速USB2.0与电脑进行数据通信&#xff0c;通过JTAG协议与FPGA进行程序下…

【mysql】基于binlog数据恢复指令和坑

文章目录 1.binlog相关配置是否开启binlogbinlog日志格式 2.导出binlog日志mysqlbinlog指令updateinsertdeletebinlog中的事件 3.数据恢复4.特别注意的坑为什么bash脚本执行mysqlbinlog&#xff0c;无法找到指令为什么执行mysqlbinlog&#xff0c;无法数据恢复 1.binlog相关配置…

【杂】解决关于mean(0)理解错误引发的程序bug

一、环境和解释器要一起配置好 invalid syntax 发生你在终端激活了一个环境&#xff0c;但 VSCode 依然使用之前的解释器的情况。 解释器设置影响了 VSCode 中运行 Python 脚本、调试、代码补全等功能的行为。VSCode 会根据你选择的解释器来执行这些操作。 二、关于mean&#x…

【c】序列中整数去重

数组中的元素不好直接删除&#xff0c;我们可以把重复的数做标记&#xff0c;将他赋值为0&#xff0c;然后正常打印数组&#xff0c;为0的跳过 #include<stdio.h> int main() {int n;scanf("%d",&n);int arr[n1];for(int i1;i<n;i){scanf("%d&quo…

fastadmin列表头部按钮批量上传视频

上传界面通过layui生成 index.html <a href="{:url(video/piliangadd)}" class="btn btn-success btn-piliangadd btn-dialog {:$auth->check(video/piliangadd)?:hide}" title="批量上传" ><i class="fa fa-plus">…

【力扣热题100】207. 课程表 python 拓扑排序

【力扣热题100】207. 课程表 python 拓扑排序 写在最前面207. 课程表解决方案&#xff1a;判断是否可以完成所有课程的学习方法&#xff1a;拓扑排序实现步骤Python 实现性能分析结论 写在最前面 刷一道力扣热题100吧 难度中等 https://leetcode.cn/problems/course-schedule…

关于如何解决问题?代码习惯。

警钟长鸣 从师哥身上学到的东西&#xff1a; 关于如何解决问题&#xff1f; 1、沟通&#xff1a;有效的沟通&#xff0c;将问题描述清楚&#xff0c;让老师和师哥明白你出了什么问题&#xff0c;给出建议&#xff0c;很多时候一句良言胜过自己摸索很久 2、出现问题由浅入深地…

AI 大模型时代的计算机网络通信

下午跟朋友聊天&#xff0c;聊到编码和传输&#xff0c;兴致未尽&#xff0c;有必要继续说说有损传输&#xff0c;承接 从意义中恢复而不从数据包恢复。 在 AI 大模型催化下&#xff0c;网络通信方式将完全不同&#xff0c;依赖编码的柔性&#xff0c;有损传输将比 tcp/ip 更具…