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

news2024/9/25 17:13:23

模块设计

本通讯录管理系统功能模块共包括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.coloradmin.cn/o/1284818.html

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

相关文章

VirtualBox安装Centos7.9

目录 1、下载Centos7.9镜像 2、新建虚拟电脑 3、虚拟电脑配置 3.1、配置CPU 3.2、设置启动顺序(光驱放在第一个) 3.3、设置存储 3.4、设置网络(桥接网卡) 4、启动 启动 等待 选择安装过程中语言 安装位置 开始安装 设置root账号密码 重启 输入用户名和密码登录…

传统制造业企业如何实现数字化转型?

传统制造企业的数字化转型涉及利用数字技术来提高效率、生产力和整体业务流程。以下是实现制造业数字化转型的关键步骤和策略&#xff1a; 1.当前流程的评估&#xff1a; 确定可以从数字化转型中受益的领域。这可能包括生产流程、供应链管理、库存控制和客户关系。 评估技术集…

StarRocks上新,“One Data、All Analytics”还有多远?

K.K在《未来十二大趋势》中认为&#xff0c;我们正处于一个数据流动的时代。商业乃数据之商业。归根结底&#xff0c;你在处理的都是数据。 的确&#xff0c;当数据成为新的核心生产要素之际&#xff0c;数据分析就犹如最重要的生产工具之一&#xff0c;决定着企业在数字化时代…

Chrome清除特定网站的Cookie,从而让网址能正常运行(例如GPT)

Chrome在使用某些网址的时候&#xff0c;例如GPT的时候&#xff0c;可能会出现无法访问这个网址的情况&#xff0c;就是点不动啥的 只需要把你需要重置的网址删除就好了

【未解决】huggingface模型文件下载地址为什么会变?

问题描述 上次我们已经分析了huggingface加载模型时候的文件目录应该是怎么样的&#xff1f;&#xff08;感兴趣的可以主页搜索“【经验分享】huggingface模型加载过程下载到cache文件目录具体是怎么组织的&#xff1f;以及都会有什么文件目录&#xff0c;每个文件目录是什么&a…

智能优化算法应用:基于黑猩猩算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于黑猩猩算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于黑猩猩算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黑猩猩算法4.实验参数设定5.算法结果6.参考文献7.…

分布式搜索引擎elasticsearch(一)

5.1 初始elasticsearch elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 5.1.1正向索引 5.1.2elasticsearch采用倒排索引: 文档(document):每条数据就是一个…

hikvision SDK使用学习/实践

函数介绍 //1. 枚举设备int MV_CC_EnumDevices(unsigned int nTLayerType, MV_CC_DEVICE_INFO_LIST *pstDevList); //2. 创建设备句柄int MV_CC_CreateHandle(void **handle, const MV_CC_DEVIEC_INFO *pstDevInfo); //参数&#xff1a;handle  [out]  //设备句柄&#xf…

简单了解传输层协议之TCP和UDP

目录 一、什么是端口号? 二、TCP协议 2.1 TCP报文格式 2.2 三次握手 2.3 四次挥手 2.4 窗口流量控制 三、UDP协议 3.1 UDP报文格式 3.4 传输过程 一、什么是端口号? 我们自己的一台电脑上有时可能会同时运行多个进程软件来进行上网。那么当网络上的服务器响应我们电…

python中的进制转换和原码,反码,补码

python中的进制转换和原码,反码,补码 计算机文件大小单位 b bit 位(比特) B Byte 字节 1Byte 8 bit #一个字节等于8位 可以简写成 1B 8b 1KB 1024B 1MB 1024KB 1GB 1024MB 1TB 1024GB 1PB 1024TB 1EB 1024PB 进制分类 二进制:由2个数字组成,有0 和 1 pyth…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(三)——serverless数据分析

3 serverless数据分析 大纲 3 serverless数据分析3.1 创建Lambda3.2 创建API Gateway3.3 结果3.4 总结 3.1 创建Lambda 在Lambda中&#xff0c;我们将使用python3作为代码语言。 步骤图例1、入口2、创建&#xff08;我们选择使用python3.7&#xff09;3、IAM权限&#xff08;…

HarmonyOS引入其他包,以引入请求axios为例

安装文件 安装文件位置: 总目录的oh-package.json5文件 dependencies&#xff1a;生产环境–上线运行时候必须需要的包 devDependencies&#xff1a;开发环境–开发适合为了方便提高效率的包。 包管理工具 OHPM CLI 作为鸿蒙生态三方库的包管理工具&#xff0c;支持OpenHar…

基于Python自动化测试框架之接口测试

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…

ESP32 LVGL Gui-Guider的移植

使用参考&#xff1a; ESP32系列之LVGL&#xff08;三&#xff09;&#xff1a;Gui-Guider的使用_esp32 lvgl-CSDN博客 1、拷贝文件&#xff1a; 按照上面的文章&#xff0c;使用Gui-Guider软件生成C代码之后&#xff0c;custom和generated是我们要使用到的文件&#xff0c;…

异常处理 springboot

全局异常处理 RestcontrollerAdvice Exceptonhandler package com.it.Exception;import com.it.pojo.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;/*全局异常处理器…

鸿蒙4.0开发笔记之ArkTS装饰器语法基础之监听者模式@Watch案例讲解(十四)

1、Watch定义 Watch实际是指状态变量更改通知。如果开发者需要关注某个状态变量的值是否改变&#xff0c;可以使用Watch为状态变量设置回调函数&#xff08;监听函数&#xff09;。 Watch用于监听状态变量的变化&#xff0c;当状态变量变化时&#xff0c;Watch的回调方法将被…

华清远见嵌入式学习——C++——作业5

作业要求&#xff1a; 代码&#xff1a; #include <iostream>using namespace std;//沙发 类 class Sofa { private:string sitting; //是否可坐double *cost; //花费 public://无参构造函数Sofa(){}//有参构造函数Sofa(string s,double c):sitting(s),cost(new double(…

在 Mac 上使用浅色或深色外观

在 Mac 上&#xff0c;选取苹果菜单 >“系统设置”&#xff0c;然后点按边栏中的“外观” 。&#xff08;你可能需要向下滚动。&#xff09;选择右侧的“浅色”、“深色”或“自动”。 “浅色”表示不会发生变化的浅色外观。 “深色”表示不会发生变化的深色外观。“深色模式…

[MySQL--基础]多表查询

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录&#xff1a;生活中最大的挑战就是发现自己是谁。然后&#xff0c;坚定不移地成为那个人。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法 MySQL数据库 多表查询 前言多表关系概述&#x1f…

DNS服务器配置与分析

目录 实验目的&#xff1a; 实验原理&#xff1a; 实验步骤&#xff1a; 步骤1&#xff1a;创建拓扑 步骤2&#xff1a;为PC、Client和Server配置IPv4地址、子网掩码和域名服务器 步骤3&#xff1a;启动设备和服务器 步骤4&#xff1a;测试PC-1、Client-1和Server-1之间…