目标:
实现学生信息的增加,学生信息的改动,学生信息的删除,学生信息的查找,学生信息的排序(这里是按年龄排序),学生信息的打印。
代码:
包含两个源文件一个头文件。
main.c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include "contact.h"
void test() {
int input = 0;
contact con;
INITcontact(&con);
printf("******************************\n");
printf(" 请选择需要的操作 \n");
printf(" 0.exit 1.add\n");
printf(" 2.del 3.search\n");
printf(" 4.modify 5.sort\n");
printf(" 6.print \n");
printf("******************************\n");
do {
scanf("%d", &input);
switch (input)
{case EXIT:
break;
case ADD:
ADDcontact(&con);
break;
case DEL:
DELcontact(&con);
break;
case SEARCH:
SEARCHcontact(&con);
break;
case MODIFY:
MODIFYcontact(&con);
break;
case SORT:
SORTcontact(&con);
break;
case PRINT:
PRINTcontact(&con);
break;
default:
printf("选择无效,请重新输入\n");
break;
}
} while (input);
}
int main() {
test();
return 0;
}
contact.c
#include"contact.h"
int FINDBYname(const contact* pc, const char name[])
{
for (int i = 0; i < pc->count; i++)
{
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
return -1;
}
void INITcontact(contact* pc)
{
assert(pc);
memset(pc->data, 0, sizeof(pc->data));
pc->count = 0;
}
void ADDcontact(contact* pc) {
if (pc->count == MAX)
{
printf("通讯录已满,添加失败\n");
return;
}
printf("请输入联系人的名字:");
scanf("%s", pc->data[pc->count].name);
printf("请输入年龄:");
scanf("%d", &(pc->data[pc->count].age));
printf("请输入性别:");
scanf("%s", pc->data[pc->count].sex);
printf("请输入电话:");
scanf("%s", pc->data[pc->count].tele);
printf("请输入地址:");
scanf("%s", pc->data[pc->count].addr);
pc->count++;
printf("添加成功\n");
};
void DELcontact(contact* pc) {
if (pc->count == 0)
{
printf("通讯录为空,无法删除\n");
return;
}
char name[NAME_MAX] = { 0 };
printf("请输入删除人的名字:");
scanf("%s", name);
//查找名字
int pos = FINDBYname(pc, name);
if (pos == -1)
{
printf("要删除的信息不存在\n");
return;
}
else
{
for (int j = pos; j < pc->count - 1; j++)
{
pc->data[j] = pc->data[j + 1];
}
pc->count--;
printf("删除成功");
}
};
void SEARCHcontact(const contact* pc) {
char name[NAME_MAX] = { 0 };
printf("请输入查找人的名字:");
scanf("%s", name);
//查找名字
int pos = FINDBYname(pc, name);
if (pos == -1)
{
printf("要查找的信息不存在\n");
return;
}
printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年龄", "性别", "电话", "地址");
printf("%-20s %-20d %-20s %-20s %-20s\n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
};
void PRINTcontact(const contact* pc) {
printf("%-20s %-20s %-20s %-20s %-20s\n", "姓名", "年龄", "性别", "电话", "地址");
for (int i = 0; i < pc->count; i++)
{
printf("%-20s %-20d %-20s %-20s %-20s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
}
};
void MODIFYcontact(contact* pc) {
char name[NAME_MAX] = { 0 };
printf("请输入修改人的名字:");
scanf("%s", name);
//查找名字
int pos = FINDBYname(pc, name);
if (pos == -1)
{
printf("要修改的信息不存在\n");
return;
}
printf("请输入联系人的名字:");
scanf("%s", pc->data[pos].name);
printf("请输入年龄:");
scanf("%d", &(pc->data[pos].age));
printf("请输入性别:");
scanf("%s", pc->data[pos].sex);
printf("请输入电话:");
scanf("%s", pc->data[pos].tele);
printf("请输入地址:");
scanf("%s", pc->data[pos].addr);
printf("修改成功\n");
};
//按年龄排序
void SORTcontact( contact* pc) {
for (int i = 0; i < pc->count - 1; i++)
{
for (int j = 0; j < (pc->count - 1)-i; j++)
{
if (pc->data[j].age > pc->data[j + 1].age)
{
Peoinfo tmp = pc->data[j];
pc->data[j] = pc->data[j + 1];
pc->data[j + 1] = tmp;
}
}
}
printf("排序成功\n");
};
contact.h
#include<stdio.h>
#include<string.h>
#include <assert.h>
#include<stdlib.h>
#define MAX 1000
#define NAME_MAX 10
#define SEX_MAX 10
#define TELE_MAX 20
#define ADDR_MAX 40
enum option
{
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
SORT,
PRINT,
INIT
};
typedef struct Peoinfo
{
char name[NAME_MAX];//姓名
char sex[SEX_MAX];//性别
int age;//年龄
char tele[TELE_MAX];//电话
char addr[ADDR_MAX];//地址
}Peoinfo;
typedef struct contact
{
//创建一个大小为peoinfo结构体类型的数组
Peoinfo data[MAX];
int count;
//记录当前通讯录的人数。
}contact;
void INITcontact(contact* pc);
void ADDcontact(contact* pc);
void DELcontact(contact* pc);
void SEARCHcontact(const contact* pc);
void PRINTcontact(const contact* pc);
void MODIFYcontact(contact* pc);
void SORTcontact(const contact* pc);
int FINDBYname(const contact* pc, const char name[]);
void DESTORYcontact( contact* pc);
实现界面:
本篇文章内容结束,感谢大家观看。如果意见或建议,可以在评论区留言,您的点赞是我更新的动力。我们下篇文章再见。