c——通讯录的模拟

tele.c

#include "tele.h"

int listbijiao(void*s1, void* s2) {

return strcmp(((pinfo*)s1)->name, ((pinfo*)s2)->name);

}

void menu() {

printf("************************\n");

printf("******1.ADD 2.cut******\n");

printf("******3.modif4.search***\n");

printf("******5.show 6.sort*****\n");

}

void inin(list* s1) {

assert(s1);

s1->count = 0;

memset(s1->data, 0, sizeof(s1->data));

}

void ADD(list * s1) {

if (s1->count == MAX)

printf("通讯录已经满了,无法添加了");

else {

printf("请开始输入要添加的信息(名字,年龄,性别,电话)\n");

scanf("%s", s1->datas1-\>count.name);//这里的名字还是一个字符串数组,不用&;

scanf("%d", &s1->datas1-\>count.age);

scanf("%s", s1->datas1-\>count.gender);

scanf("%d", &s1->datas1-\>count.tele);

s1->count++;

}

}

void show(list* s1) {

assert(s1);

if (s1->count != 0) {

int i = 0;

printf("%10s\t%3s\t%5s\t%20s\t","name","age","gender","tele");

printf("\n");

for (i = 0; i < (s1->count); i++) {

printf("%10s\t", s1->datai.name);

printf("%3d\t", s1->datai.age);

printf("%5s\t", s1->datai.gender);

printf("%20d\t", s1->datai.tele);

printf("\n");

}

}

else {

printf("通讯录没有已有人员\n");

}

printf("\n");

}

void search(const list* s1) {

assert(s1);

char s220 = { 0 };

if (s1->count == 0) {

printf("还没有用户\n");

}

else {

printf("请输入你要查找的用户\n");

scanf("%s", s2);

int i = 0;

int flag = 0;

for (i = 0; i < s1->count; i++) {

if (strcmp(s1->datai.name, s2) == 0) {

printf("通讯录中存在该用户\n");

printf("%10s\t", s1->datai.name);

printf("%3d\t", s1->datai.age);

printf("%5s\t", s1->datai.gender);

printf("%20d\t", s1->datai.tele);

printf("\n");

flag = 1;

break;

}

}

if (flag == 0) {

printf("不存在该用户\n");

}

}

}

void isearch(list* s1, char* name) {

assert(s1);

int i = 0,j=0;

int flag = 0;

for (i = 0; i < s1->count&&flag==0; i++) {

if (strcmp(s1->datai.name, name) == 0) {

printf("通讯录中存在该用户\n");

printf("接下来进行删除\n");

for (j = i; j < s1->count-1; j++) {//哇这一步我想的贼蠢,对里面的内容每一个都进行了替换

s1->dataj = s1->dataj + 1;

}

s1->count--;

flag = 1;

break;

}

else {

printf("该用户不在通讯录中\n");

}

}

}

void cnt(list* s1) {

assert(s1);

if (s1->count == 0) {

printf("通讯录暂时还没有用户\n");

}

else {

char name20 = {0};

printf("请输入你要删除的对象\n");

scanf("%s", name);

isearch(s1,&name);

}

}

void modif(list* s1) {

assert(s1);

int i = 0;

int flag = 0;

if (s1->count == 0) {

printf("通讯录中暂时没有用户\n");

}

else {

printf("请输入要修改的对象名字\n");

char name20 = {0};

scanf("%s", name);

for (i = 0; i < s1->count && flag == 0; i++) {//这一步可以学习一下不用goto跳双循环

if (strcmp(s1->datai.name, name) == 0) {

printf("通讯录中存在该用户\n");

printf("接下来请重新录入各项数据\n");

scanf("%s", s1->datai.name);

scanf("%d", &s1->datai.age);

scanf("%s", s1->datai.gender);

scanf("%d", &s1->datai.tele);

flag = 1;

break;

}

else {

printf("通讯录中没有找到该用户\n");

}

}

}

}

void sort(list* s1) {

assert(s1);

int(*pf)(void* s1, void* s2) = &listbijiao;

qsort(s1->data, s1->count, sizeof(pinfo), pf);

}

tele.h

#pragma once

#include <stdio.h>

#include <assert.h>

#include <string.h>

#include <stdlib.h>

#define MAX 100

typedef struct pinfo {

char name20;

int age;

char gender10;

int tele;

}pinfo;

typedef struct list {

pinfo data100;

int count;

}list;

void menu();

void ADD(list* s1);

void inin(list* s1);

void show(const list* s1);

void search(const list* s1);

void isearch(list* s1, char name);

void cnt(list* s1);

void modif(list* s1);

int listbijiao(void* s1, void* s2);

void sort(list* s1);

test.c

#include "tele.h"

int main() {

int input = 0;

list telemake;

inin(&telemake);

do {

menu();

scanf("%d", &input);

switch (input) {

case 1:

ADD(&telemake);

show(&telemake);

break;

case 2:

cnt(&telemake);

show(&telemake);

break;

case 3:

modif(&telemake);

show(&telemake);

break;

case 4:

search(&telemake);

break;

case 5:

show(&telemake);

break;

case 6:

sort(&telemake);

show(&telemake);

break;

case 0:

printf("退出程序");

break;

dafault:

printf("您的选择存在问题");

}

} while (input);

return 0;

}

相关推荐
兰令水13 分钟前
leecodecode【回溯子集】【2026.6.4打卡-java版本】
java·开发语言·深度优先
bubiyoushang88813 分钟前
基于 C/C++ 的 MQTT 物联网通信协议实现
c语言·c++·物联网
fox_lht15 分钟前
14.3.重构
开发语言·后端·rust
牛油果子哥q35 分钟前
【C++ const 】全场景深度精讲:修饰规则、底层常量折叠、指针 / 引用 / 成员函数实战、易错坑点与工程代码实现
开发语言·c++
天天进步20151 小时前
Python全栈项目--社区问答平台
开发语言·python·django
skywalk81631 小时前
Tree-sitter是一个解析器生成器工具和一个增量解析库。它可以为源文件构建具体的语法树,并在编辑源文件时有效地更新语法树
开发语言·编程
AI视觉网奇1 小时前
Bambu Studio 发现 xx个开放边
开发语言·人工智能·python
qq_458148201 小时前
科大讯飞实时语音识别(rtasr)真实项目踩坑经验总结与手把手教学真实可运行Demo
java·开发语言·websocket·语音识别
三品吉他手会点灯1 小时前
C语言学习笔记 - 46.运算符和表达式 - 运算符4 - 对初学运算符的一些建议
c语言·开发语言·笔记·学习
创业之路&下一个五年1 小时前
mvvm中v和vm关系,vm中v和m的关系?
java·开发语言·javascript