c语言简单实现通讯录
在三个文件里写的代码(在clion成功编译,每个操作都进行过试验,能顺利运行)
①main.c文件里写main等菜单函数
②game.h里写自定义函数的声明
③game.c写对通讯录操作的主要函数
#include"game.h"
//显示菜单
void Menu(){
printf("*********0.退出********\n");
printf("1.添加用户 2.删除用户\n");
printf("3.查找用户 4.修改用户\n");
printf("5.显示用户 6.排序 \n");
}
int main(){
//实时输出
setbuf(stdout,NULL);
Menu();
char choice[1] ;
struct people person;
//对通讯录进行初始化
Peo_init(& person);
do{
printf("\n输入操作的对应数字:\n");
gets(choice);
switch(choice[0]-'0'){
case ex:
printf("退出操作\n");
break;
case add:
printf("选择 %d <增加> \n",choice[0]-'0');
Add_message(&person);
// system("cls");
break;
case del:
printf("选择 %d <删除> \n",choice[0]-'0');
Del_message(&person);
break;
case ser:
printf("选择 %d <查找> \n",choice[0]-'0');
Ser_message(&person);
break;
case chang:
printf("选择 %d <修改> \n",choice[0]-'0');
Chang_message(&person);
break;
case show:
printf("选择 %d <显示> \n",choice[0]-'0');
Peo_show(&person);
break;
case compare:
printf("选择 %d <按年龄排序> \n",choice[0]-'0');
Com_message(&person);
break;
default:
printf("输入无效,重新输入\n");
break;
}
}while(choice[0]-'0');
return 0;
}
#include"game.h"
//初始化通讯录
void Peo_init(struct people * temp){
printf("\n开始初始化:\n");
for(int i=0;i<MAX;i++){
strcpy(temp->peo[i].name,"0");
strcpy(temp->peo[i].se,"0");
temp->peo[i].ag=0;
strcpy(temp->peo[i].te,"0");
strcpy(temp->peo[i].lo,"0");
}
printf("初始化成功!\n");
temp->size=0;
}
//显示函数
void Peo_show(const struct people * temp){
if(0==temp->size){
printf("列表为空\n");
}
else
{
printf("姓名 性别 年龄 电话 住址\n");
for(int i=0;i<temp->size;i++) {
printf("%-8s\t", temp->peo[i].name);
printf("%-10s\t", temp->peo[i].se);
printf("%-10d\t", temp->peo[i].ag);
printf("%-10s\t", temp->peo[i].te);
printf("%-10s\t\n", temp->peo[i].lo);
}
}
}
//新增函数
void Add_message(struct people * temp){
printf("以下开始输入添加人信息:\n");
printf("输入姓名:\n");
gets(temp->peo[temp->size].name);
printf("输入性别:\n");
gets(temp->peo[temp->size].se);
printf("输入年龄:\n");
scanf("%d",&temp->peo[temp->size].ag);
getchar();
printf("输入手机号:\n");
gets(temp->peo[temp->size].te);
printf("输入住址:\n");
gets(temp->peo[temp->size].lo);
temp->size++;
printf("添加完成\n");
}
//根据姓名在通讯录里查找 返回下标值
static int position(char *Name,struct people * temp){
int i;
for(i=0;i<temp->size;i++) {
if(0==strcmp(Name,temp->peo[i].name)){
printf("%-8s\t", temp->peo[i].name);
break;}
}
if(i==temp->size)
return -1;
else
return i;
}
//删除函数 找到指定删除人的名字 用后续信息覆盖删除人信息 再将列表数-1
void Del_message(struct people * temp){
printf("输入删除人姓名:\n");
char person_name[Name_max];
gets(person_name);
int pos=position(person_name,temp);
if(-1==pos)
{
printf("列表不存在此人\n");
}
else {
for (int i = pos; i < (temp->size) - 1; i++) {
strcpy(temp->peo[i].name, temp->peo[i + 1].name);
strcpy(temp->peo[i].se, temp->peo[i + 1].se);
temp->peo[i].ag = temp->peo[i + 1].ag;
strcpy(temp->peo[i].te, temp->peo[i + 1].te);
strcpy(temp->peo[i].lo, temp->peo[i + 1].lo);
}
printf("\n删除成功\n");
(temp->size)--;
}
}
//查找函数 找到指定人后显示信息
void Ser_message(struct people * temp){
printf("输入查找人姓名:\n");
char person_name[Name_max];
gets(person_name);
int pos=position(person_name,temp);
if(-1==pos)
{
printf("列表不存在此人\n");
}
else {
printf("\n姓名 性别 年龄 电话 住址\n");
printf("%-8s\t", temp->peo[pos].name);
printf("%-10s\t", temp->peo[pos].se);
printf("%-10d\t", temp->peo[pos].ag);
printf("%-10s\t", temp->peo[pos].te);
printf("%-10s\t\n", temp->peo[pos].lo);
printf("查找成功\n");
}
}
//修改函数 找到指定人后修改信息
void Chang_message(struct people * temp){
printf("输入修改人姓名:\n");
char person_name[Name_max];
gets(person_name);
int pos=position(person_name,temp);
if(-1==pos)
{
printf("列表不存在此人\n");
}
else {
printf("\n姓名 性别 年龄 电话 住址\n");
printf("输入姓名:\n");
gets(temp->peo[pos].name);
printf("输入性别:\n");
gets(temp->peo[pos].se);
printf("输入年龄:\n");
scanf("%d",&temp->peo[pos].ag);
getchar();
printf("输入手机号:\n");
gets(temp->peo[pos].te);
printf("输入住址:\n");
gets(temp->peo[pos].lo);
printf("修改成功\n");
}
}
//年龄选择排序
void Com_message(struct people * temp){
int m ,n ,k ,x;
char name_copy[20]="0";
for(m=0; m<(temp->size)-1; m++)
{
k=m;
for(n=m+1; n<(temp->size);n++) {
if (temp->peo[n].ag < temp->peo[k].ag) {
k = n;
//printf("最小值下标 %d\n", k);
}
}
strcpy(name_copy, temp->peo[m].name);
strcpy(temp->peo[m].name, temp->peo[k].name);
strcpy(temp->peo[k].name, name_copy);
strcpy(name_copy, temp->peo[m].se);
strcpy(temp->peo[m].se, temp->peo[k].se);
strcpy(temp->peo[k].se, name_copy);
x=temp->peo[m].ag;
temp->peo[m].ag=temp->peo[k].ag;
temp->peo[k].ag=x;
strcpy(name_copy, temp->peo[m].te);
strcpy(temp->peo[m].te, temp->peo[k].te);
strcpy(temp->peo[k].te, name_copy);
strcpy(name_copy, temp->peo[m].lo);
strcpy(temp->peo[m].lo, temp->peo[k].lo);
strcpy(temp->peo[k].lo, name_copy);
/*printf("\n%-8s\t", temp->peo[k].name);
printf("%-10s\t", temp->peo[k].se);
printf("%-10d\t", temp->peo[k].ag);
printf("%-10s\t", temp->peo[k].te);
printf("%-10s\t\n", temp->peo[k].lo);*/
}
printf("按照从小到大的年龄排序成功!\n");
}
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#define MAX 20
#define Name_max 20
#define Name_sex 10
#define Name_tel 10
#define Name_loca 10
//每个人的信息:姓名 性别 年龄 电话 住址
struct contaction{
char name[Name_max];
char se[Name_sex];
int ag;
char te[Name_tel];
char lo[Name_loca];
};
//结构体包含通讯录 以及通讯录的的长度
struct people{
struct contaction peo[MAX];
int size;
};
enum operate{
ex,
add,
del,
ser,
chang,
show,
compare
};
void Peo_init(struct people * temp);//初始化通讯录
void Peo_show(const struct people * temp);//显示信息
void Add_message(struct people * temp);//新增信息
void Del_message(struct people * temp);//删除信息
void Ser_message(struct people * temp);//搜索信息
void Chang_message(struct people * temp);//修改信息
void Com_message(struct people * temp);//按照年龄排序