设计实现一个实用的通讯录。具有添加、查询、浏览和删除基本功能,并能够实现按姓名排序和按分组排序。
1.分组的含义是该联系人属于朋友or家人or同事or同学或者由使用者添加的分组名称。通讯录应能够保存到文件中,并能从文件中导入。
2.查询功能应能够实现精确查询和模糊查询。例如输入张可显示所有张姓联系人。
3.联系人信息:姓名、电话1、电话2、住址、分组。
也可以输入职工号查询, 输出职工姓名
https://blog.csdn.net/qq_41071068/article/details/89461999
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
struct staff {//创建结构体变量
int id;//职工号
char name[1024];//姓名
};
void input(struct staff* p) {//输入职工的姓名和职工号
struct staff* q = p;
for (int i = 1; p < q + N; ++i, ++p) {
printf("请输入第%d个职工的职工号\n", i);
scanf("%d", &p->id);
printf("请输入该职工的姓名\n");
scanf("%s", p->name);//p->name本来就是指针,存放的就是地址,无需取地址
}
}
void sort(struct staff* p) {//按职工号从大到小排序
char temp[1024];
struct staff* q = p;
for (; p < q + N; ++p) {
for (struct staff* qq = p + 1; qq < q + N; ++qq) {
if (p->id > qq->id) {
p->id = p->id ^ qq->id;//按位异或法
qq->id = p->id ^ qq->id;
p->id = p->id ^ qq->id;
strcpy(temp, p->name);
strcpy(p->name, qq->name);
strcpy(qq->name, temp);
}
}
}
}
struct staff* bisearch(char* str, struct staff* p) {
struct staff* q = p;
int n;
for (int i = 1; p < q + N; ++i, ++p) {
n = strlen(p->name);
if (n == strlen(str) && strcmp(p->name,str) == 0) {
return p;
}
}
return NULL;
}
void main() {
char str[1024];
struct staff staff[N];//创建N个结构体变量
struct staff* p;//创建指向结构体
p = staff;//指向结构体数组的首元素
input(p);
sort(p);
system("cls");
for (; p < staff + N; ++p) {
printf("%d\t%s\n", p->id, p->name);
}
p = staff;
printf("请输入需要查询的员工姓名\n");
scanf("%s", str);
struct staff* q = bisearch(str, p);
if (q != NULL) {
printf("职工%s的职工号为:%d\n", q->name, q->id);
}
else {
printf("没有名字为%s的职工\n", str);
}
system("pause");
}
现成的https://blog.csdn.net/m0_72161237/article/details/126943441