0
点赞
收藏
分享

微信扫一扫

C#开发的PhotoNet看图软件 - 开源研究系列文章 - 个人小作品

孟祥忠诗歌 1天前 阅读 0

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->data[s1->count].name);//这里的名字还是一个字符串数组,不用&;
        scanf("%d", &s1->data[s1->count].age);
        scanf("%s", s1->data[s1->count].gender);
        scanf("%d", &s1->data[s1->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->data[i].name);
            printf("%3d\t", s1->data[i].age);
            printf("%5s\t", s1->data[i].gender);
            printf("%20d\t", s1->data[i].tele);
            printf("\n");
        }
    }
    else {
        printf("通讯录没有已有人员\n");
    }
    printf("\n");
}
void search(const list* s1) {
    assert(s1);
    char s2[20] = { 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->data[i].name, s2) == 0) {
                printf("通讯录中存在该用户\n");
                printf("%10s\t", s1->data[i].name);
                printf("%3d\t", s1->data[i].age);
                printf("%5s\t", s1->data[i].gender);
                printf("%20d\t", s1->data[i].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->data[i].name, name) == 0) {
            printf("通讯录中存在该用户\n");
            printf("接下来进行删除\n");
            for (j = i; j < s1->count-1; j++) {//哇这一步我想的贼蠢,对里面的内容每一个都进行了替换
                s1->data[j] = s1->data[j + 1];
            }
            s1->count--;
            flag = 1;
            break;    
        }
        else {
            printf("该用户不在通讯录中\n");
        }
    }
}
void cnt(list* s1) {
    assert(s1);
    if (s1->count == 0) {
        printf("通讯录暂时还没有用户\n");
    }
    else {
        char name[20] = {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 name[20] = {0};
        scanf("%s", name);
            for (i = 0; i < s1->count && flag == 0; i++) {//这一步可以学习一下不用goto跳双循环
                if (strcmp(s1->data[i].name, name) == 0) {
                    printf("通讯录中存在该用户\n");
                    printf("接下来请重新录入各项数据\n");
                    scanf("%s", s1->data[i].name);
                    scanf("%d", &s1->data[i].age);
                    scanf("%s", s1->data[i].gender);
                    scanf("%d", &s1->data[i].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 name[20];
    int age;
    char gender[10];
    int tele;
}pinfo;
typedef struct list {
    pinfo data[100];
    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;
}

举报

相关推荐

0 条评论