用C语言写了个简单的通讯录
2023-12-23 17:52:40
每日一言
我们所爱之物昭示着我们究竟是谁。 --托马斯·阿奎纳
代码
contacts.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#define MAX 10//通讯录最大存储量
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<stdbool.h>
typedef struct Peo
{
char name[10];//姓名
int age;//年龄
int number;//电话号码
}Peo;
void menu();//菜单
void InitContacts(Peo* peo, int* num);//初始化通讯录
void PrintContacts(const Peo* const peo, const int num);//打印通讯录
void AddContacts(Peo* peo, int* pnum);//添加通讯录
void DeleteContacts(Peo* peo, int* num);//删除通讯录
void SortByNameContacts(Peo* peo, const int* num);//按照名字排序
void FindBynameContacts(const Peo* peo, int num);//按照名字查找
contacts.c
#include "contacts.h"
enum { 退出, 输入, 查找, 排序, 删除, 查看 };
int main()
{
int input = 0;//输入的选项
int num = 0;//通讯录里的人数
Peo peo[MAX];
InitContacts(peo, &num);
menu();
do
{
printf("请输入:");
scanf("%d", &input);
//InitContacts(&peo,&num);
system("cls");
menu();
switch (input)
{
case 退出:
printf("退出通讯录\n");
break;
case 输入:
AddContacts(peo, &num);
break;
case 查找:
FindBynameContacts(peo, num);
break;
case 排序:
SortByNameContacts(peo, &num);
PrintContacts(peo, num);
break;
case 删除:
PrintContacts(peo, num);
DeleteContacts(peo, &num);
break;
case 查看:
PrintContacts(peo, num);
break;
default:
printf("输入错误\n");
}
} while (input);
return 0;
}
test.c
#include "contacts.h"
void menu()
{
printf("*************************************\n");
printf("** 1. 输入 2. 查找 **\n");
printf("** 3. 排序 4. 删除 **\n");
printf("** 5. 查看 0. 退出 **\n");
printf("*************************************\n");
}
void InitContacts(Peo*peo, int* num)
{
memset(peo, 0, sizeof(*peo));
*num = 0;
}
void PrintContacts(const Peo* const peo,const int num)
{
printf("---------------------------------------------------------------------\n");
printf("%-10s %-10s %-10s %-10s\n","编号", "姓名", "年龄", "电话号码");
int i = 0;
for (i = 0; i < num; i++)
{
printf("%-10d %-10s %-10d %-10d\n", i+1 ,peo[i].name, peo[i].age, peo[i].number);
}
printf("---------------------------------------------------------------------\n");
}
void AddContacts(Peo* peo, int* pnum)
{
if (*pnum < MAX)
{
printf("请依次输入姓名,年龄,电话号码:");
scanf("%s %d %d", peo[*pnum].name, &peo[*pnum].age, &peo[*pnum].number);
(*pnum)++;
printf("添加成功\n");
}
else
{
printf("通讯录已满,无法添加\n");
}
}
void DeleteContacts(Peo* peo, int* num)
{
if (*num > 0)
{
printf("请输入要删除的编号:");
int n = 0;
scanf("%d", &n);
if (*num >= n)
{
for (int i = --n; i < *num; i++)
{
peo[i].age = peo[i + 1].age;
strcpy(peo[i].name, peo[i + 1].name);
peo[i].number = peo[i + 1].number;
}
(*num)--;
printf("删除成功\n");
}
else
printf("要删除的编号不存在\n");
}
else
{
printf("通讯录为空,无法删除\n");
}
}
int Cmp(const void* p1, const void* p2)
{
return strcmp((*(Peo*)p1).name, (*(Peo*)p2).name);
}
void SortByNameContacts(Peo* peo, const int* num)
{
if (*num > 0)
{
qsort(peo, *num, sizeof(Peo), Cmp);
}
else
{
printf("通讯录为空,无法排序\n");
}
}
void FindBynameContacts(const Peo* peo,int num)
{
if (num > 0)
{
printf("请输入要查找的姓名:");
char s[10] = { 0 };
scanf("%s", &s);
int i = 0;
bool f = true;
printf("---------------------------------------------------------------------\n");
printf("%-10s %-10s %-10s %-10s\n", "编号", "姓名", "年龄", "电话号码");
for (i = 0; i < num; i++)
{
if (strcmp(peo[i].name, s)==0)
{
f = false;
printf("%-10d %-10s %-10d %-10d\n", i + 1, peo[i].name, peo[i].age, peo[i].number);
}
}
printf("---------------------------------------------------------------------\n");
if (f)
{
printf("查无此人\n");
}
}
else
{
printf("通讯录为空,无法查找\n");
}
}
结语
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正
文章来源:https://blog.csdn.net/qrwitu142857/article/details/135170388
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!