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);


实现界面:


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

目录
相关文章
|
1月前
|
存储 C语言
探索C语言数据结构:利用顺序表完成通讯录的实现
本文介绍了如何使用C语言中的顺序表数据结构实现一个简单的通讯录,包括初始化、添加、删除、查找和保存联系人信息的操作,以及自定义结构体用于存储联系人详细信息。
19 2
|
1月前
|
存储 C语言
手把手教你用C语言实现通讯录管理系统
手把手教你用C语言实现通讯录管理系统
|
6月前
|
C语言
C语言——通讯录系统—基于 VS2022
C语言——通讯录系统—基于 VS2022
|
3月前
|
存储 搜索推荐 算法
【C语言】C语言—通讯录管理系统(源码)【独一无二】
【C语言】C语言—通讯录管理系统(源码)【独一无二】
|
3月前
|
存储 数据可视化 C语言
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
|
5月前
|
机器学习/深度学习 搜索推荐 程序员
C语言实现个人通讯录(功能优化)-2
C语言实现个人通讯录(功能优化)
C语言实现个人通讯录(功能优化)-2
|
5月前
|
存储 C语言 索引
C语言实现个人通讯录(功能优化)-1
C语言实现个人通讯录(功能优化)
C语言实现个人通讯录(功能优化)-1
|
5月前
|
C语言
C语言学习记录——通讯录(静态内存)
C语言学习记录——通讯录(静态内存)
32 2
|
6月前
|
存储 C语言
C语言实现通讯录
C语言实现通讯录
40 2
|
6月前
|
存储 C语言
C语言实验-动态顺序表实现简易通讯录(二)
在这个C语言实验中,你将实现一个简单的通讯录,它使用动态顺序表来存储联系人信息。
50 2