赞
踩
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;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。