C语言实现通讯录(类似学生信息管理系统)

简介: C语言实现通讯录(类似学生信息管理系统)

目标:

实现学生信息的增加,学生信息的改动,学生信息的删除,学生信息的查找,学生信息的排序(这里是按年龄排序),学生信息的打印。

代码:

包含两个源文件一个头文件


main.c

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include "contact.h"
void test() {
  int input = 0;
  contact con;
  INITcontact(&con);
  printf("******************************\n");
  printf("    请选择需要的操作    \n");
  printf("  0.exit       1.add\n");
  printf("  2.del        3.search\n");
  printf("  4.modify     5.sort\n");
  printf("  6.print      \n");
  printf("******************************\n");
  do {
  scanf("%d", &input);
  switch (input)
  {case EXIT:
    break;
  case ADD:
    ADDcontact(&con);
    break;
  case DEL:
    DELcontact(&con);
    break;
  case SEARCH:
    SEARCHcontact(&con);
    break;
  case MODIFY:
    MODIFYcontact(&con);
    break;
  case SORT:
    SORTcontact(&con);
    break;
  case PRINT:
    PRINTcontact(&con);
    break;
  default:
    printf("选择无效,请重新输入\n");
    break;
  }
  } while (input);
}
int main() {
  test();
  return 0;
}


contact.c

#include"contact.h"
int FINDBYname(const contact* pc, const char name[])
{
  for (int i = 0; i < pc->count; i++)
  {
  if (strcmp(pc->data[i].name, name) == 0)
  {
    return i;
  }
  }
  return -1;
}
void INITcontact(contact* pc)
{
  assert(pc); 
  memset(pc->data, 0, sizeof(pc->data));
  pc->count = 0;
}
void ADDcontact(contact* pc) {
  if (pc->count == MAX)
    {
    printf("通讯录已满,添加失败\n");
    return;
    }
    printf("请输入联系人的名字:");
    scanf("%s", pc->data[pc->count].name);
    printf("请输入年龄:");
  scanf("%d", &(pc->data[pc->count].age));
    printf("请输入性别:");
    scanf("%s", pc->data[pc->count].sex);
    printf("请输入电话:");
    scanf("%s", pc->data[pc->count].tele);
    printf("请输入地址:");
    scanf("%s", pc->data[pc->count].addr);
    pc->count++;
    printf("添加成功\n");
};
void DELcontact(contact* pc) {
  if (pc->count == 0)
  {
  printf("通讯录为空,无法删除\n");
  return;
  }
  char name[NAME_MAX] = { 0 };
  printf("请输入删除人的名字:");
  scanf("%s", name);
  //查找名字
  int pos = FINDBYname(pc, name);
  if (pos == -1)
  {
  printf("要删除的信息不存在\n");
  return;
  }
  else
  {
  for (int j = pos; j < pc->count - 1; j++)
  {
    pc->data[j] = pc->data[j + 1];
  }
  pc->count--;
  printf("删除成功");
  }
};
void SEARCHcontact(const contact* pc) {
  char name[NAME_MAX] = { 0 };
  printf("请输入查找人的名字:");
  scanf("%s", name);
  //查找名字
  int pos = FINDBYname(pc, name);
  if (pos == -1)
  {
  printf("要查找的信息不存在\n");
  return;
  }
  printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年龄", "性别", "电话", "地址");
  printf("%-20s %-20d %-20s %-20s %-20s\n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
};
void PRINTcontact(const contact* pc) {
  printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年龄", "性别", "电话", "地址");
  for (int i = 0; i < pc->count; i++)
  {
  printf("%-20s %-20d %-20s %-20s %-20s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
  }
};
void MODIFYcontact(contact* pc) {
  char name[NAME_MAX] = { 0 };
  printf("请输入修改人的名字:");
  scanf("%s", name);
  //查找名字
  int pos = FINDBYname(pc, name);
  if (pos == -1)
  {
  printf("要修改的信息不存在\n");
  return;
  }
  printf("请输入联系人的名字:");
  scanf("%s", pc->data[pos].name);
  printf("请输入年龄:");
  scanf("%d", &(pc->data[pos].age));
  printf("请输入性别:");
  scanf("%s", pc->data[pos].sex);
  printf("请输入电话:");
  scanf("%s", pc->data[pos].tele);
  printf("请输入地址:");
  scanf("%s", pc->data[pos].addr);
  printf("修改成功\n");
};
//按年龄排序
void SORTcontact( contact* pc) {            
  for (int i = 0; i < pc->count - 1; i++)
  {
  for (int j = 0; j < (pc->count - 1)-i; j++)
  {
    if (pc->data[j].age > pc->data[j + 1].age)
    {
    Peoinfo tmp = pc->data[j];
    pc->data[j] = pc->data[j + 1];
    pc->data[j + 1] = tmp;
    }
  }
  }
  printf("排序成功\n");
};


contact.h

#include<stdio.h>
#include<string.h>
#include <assert.h>
#include<stdlib.h>
#define MAX 1000
#define NAME_MAX 10
#define SEX_MAX 10
#define TELE_MAX 20
#define ADDR_MAX 40
enum option
{
  EXIT,
  ADD,
  DEL,
  SEARCH,
  MODIFY,
  SORT,
  PRINT,
  INIT
};
typedef struct Peoinfo
{
  char name[NAME_MAX];//姓名
  char sex[SEX_MAX];//性别
  int age;//年龄
  char tele[TELE_MAX];//电话
  char addr[ADDR_MAX];//地址
}Peoinfo;
typedef struct contact
{
  //创建一个大小为peoinfo结构体类型的数组
  Peoinfo data[MAX];
  int count;
  //记录当前通讯录的人数。
}contact;
void INITcontact(contact* pc);
void ADDcontact(contact* pc);
void DELcontact(contact* pc);
void SEARCHcontact(const contact* pc);
void PRINTcontact(const contact* pc);
void MODIFYcontact(contact* pc);
void SORTcontact(const contact* pc);
int FINDBYname(const contact* pc, const char name[]);
void DESTORYcontact( contact* pc);


实现界面:


本篇文章内容结束,感谢大家观看。如果意见或建议,可以在评论区留言,您的点赞是我更新的动力。我们下篇文章再见。

目录
打赏
0
0
0
0
16
分享
相关文章
C语言——通讯录系统—基于 VS2022
C语言——通讯录系统—基于 VS2022
|
9月前
|
探索C语言数据结构:利用顺序表完成通讯录的实现
本文介绍了如何使用C语言中的顺序表数据结构实现一个简单的通讯录,包括初始化、添加、删除、查找和保存联系人信息的操作,以及自定义结构体用于存储联系人详细信息。
114 2
手把手教你用C语言实现通讯录管理系统
手把手教你用C语言实现通讯录管理系统
C语言学习记录——通讯录(静态内存)
C语言学习记录——通讯录(静态内存)
65 2
C语言实现通讯录
C语言实现通讯录
69 2
C语言实验-动态顺序表实现简易通讯录(二)
在这个C语言实验中,你将实现一个简单的通讯录,它使用动态顺序表来存储联系人信息。
105 2
C语言实验-动态顺序表实现简易通讯录(一)
本文介绍了使用C语言模拟实现通讯录的步骤,包括使用动态顺序表存储联系人信息,每个联系人包含姓名、性别、电话和住址。功能包括新增、查找、删除、修改和查看联系人信息,以及按关键词排序。代码示例展示了如何定义联系人结构体、通讯录顺序表,以及主函数中的菜单选择和输入处理。文章还强调了在读取用户输入时避免出现死循环的问题,并提供了初始化和销毁通讯录的函数,以及如何判断和增加通讯录容量的方法。
131 1
c语言小课设--通讯录(动态内存管理+可持久化数据)
c语言小课设--通讯录(动态内存管理+可持久化数据)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问