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


实现界面:


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

目录
相关文章
|
2月前
|
存储 C语言
C语言实现简易学生信息管理系统
C语言实现简易学生信息管理系统
41 4
|
2月前
|
C语言
用c语言实现一个通讯录
用c语言实现一个通讯录
11 0
|
2月前
|
存储 C语言
C语言详解【通讯录的实现】
C语言详解【通讯录的实现】
|
4月前
|
存储 XML JSON
【C语言-通讯录的分析与实现】
我们以手机里面的通讯录为例,说明通讯录主要有以下什么功能,我们先用一张简单的图来说明一下
23 0
|
5月前
|
C语言
C语言实现通讯录--动态版
C语言实现通讯录--动态版
35 0
|
4月前
|
C语言
【C语言】动态内存管理基础知识——动态通讯录,如何实现通讯录容量的动态化
动态内存管理的函数有:malloc,calloc,ralloc,free,本文讲解动态内存函数和使用,如何进行动态内存管理,实现通讯录联系人容量的动态化,对常见动态内存错误进行总结。
36 0
|
14天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
23天前
通讯录(C语言版)
通讯录(C语言版)
|
1月前
|
存储 人工智能 机器人
【C/C++】C语言 学生信息管理系统(源码)【独一无二】
【C/C++】C语言 学生信息管理系统(源码)【独一无二】
|
2月前
|
程序员 C语言
【C语言实战项目】通讯录(动态增容版)
【C语言实战项目】通讯录(动态增容版)
22 0