实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供以下方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 以名字排序所有联系人
7. 清空所有联系人
student.h:
#ifndef __CRT
#define _CRT_SECURE_NO_WARNINGS 1
#endif
#ifndef __STUDENT
#ifndef __STDIO_H
#include <stdio.h>
#endif
#ifndef __STDLIB_H
#include <stdlib.h>
#endif
#ifndef __SRTRIG_H
#include <string.h>
#endif
#ifndef __MAXSIZE
#define MAXSIZE 1000
#endif
typedef struct Stu
{
char name[20];
char sex[3];
int age;
char tel[12];
char addr[20];
}Stu;
void menu()
/*菜单*/
{
printf("\n");
printf("***************************************************************************\n");
printf("** ☆☆☆☆★★★★★ 欢迎学生信息管理系统 ★★★★★☆☆☆☆**\n");
printf("** ☆☆☆★★★★★ 1、添加联系人信息 ★★★★★☆☆☆ **\n");
printf("** ☆☆☆★★★★★ 2、删除指定联系人信息 ★★★★★☆☆☆ **\n");
printf("** ☆☆☆★★★★★ 3、查找指定联系人信息 ★★★★★☆☆☆ **\n");
printf("** ☆☆☆★★★★★ 4、修改指定联系人信息 ★★★★★☆☆☆ **\n");
printf("** ☆☆☆★★★★★ 5、显示所有联系人信息 ★★★★★☆☆☆ **\n");
printf("** ☆☆☆★★★★★ 6、以名字排序所有联系人 ★★★★★☆☆☆ **\n");
printf("** ☆☆☆★★★★★ 7、清空所有联系人 ★★★★★☆☆☆ **\n");
printf("** ☆☆☆★★★★★ 0、退出系统 ★★★★★☆☆☆ **\n");
printf("***************************************************************************\n");
printf("\n");
}
void Add(Stu *stu, int *count)
/*添加联系人信息*/
{
if ((*count) >= MAXSIZE - 1)
{
printf("本系统已达到最大容纳人数,不能再添加学生了!\n");
return;
}
printf("请输入要添加的学生的姓名:> ");
scanf("%s", (stu + (*count))->name);
flag:
printf("请输入要添加的学生的姓别(男/女):> ");
scanf("%s", (stu + (*count))->sex);
if ((strcmp((stu + (*count))->sex, "男") != 0) &&
(strcmp((stu + (*count))->sex, "女") != 0))
{
printf("请输入正确的性别!\n");
goto flag;
}
printf("请输入要添加的学生的年龄:> ");
scanf("%d", &(stu + (*count))->age);
printf("请输入要添加的学生的电话:> ");
scanf("%s", (stu + (*count))->tel);
printf("请输入要添加的学生的住址:> ");
scanf("%s", (stu + (*count))->addr);
printf("添加成功!\n");
(*count)++;/*已有人数加1*/
}
void Delete(Stu *stu, int *count)
/*删除指定联系人信息*/
{
char _name[20];
if ((*count) <= 0)
{
printf("此学生系统中还没有学生!\n");
return;
}
printf("请输入您要删除的学生的姓名:> ");
scanf("%s", _name);
for (int i = 0; i < (*count); i++)
{
if (strcmp((stu + i)->name, _name) == 0)
{
for (int j = i; j < (*count) - 1; j++)
{
strcpy((stu + j)->name, (stu + j + 1)->name);
strcpy((stu + j)->sex, (stu + j + 1)->sex);
(stu + j)->age = (stu + j + 1)->age;
strcpy((stu + j)->tel, (stu + j + 1)->tel);
strcpy((stu + j)->addr, (stu + j + 1)->addr);
}
(*count)--;
printf("删除成功!\n");
return;
}/*if*/
}/*for*/
printf("此学生系统中没有此学生!\n");
}
void Search(const Stu *stu, const int count)
/*查找指定联系人信息*/
{
char _name[20];
printf("请输入您要查找的学生的姓名:> ");
scanf("%s", _name);
for (int i = 0; i < count; i++)
{
if (strcmp((stu + i)->name, _name) == 0)
{
printf("*********=======您查抄的学生的信息为=======*********\n");
printf(" ********* 姓名:> %s\n", (stu + i)->name);
printf(" ********* 性别:> %s\n", (stu + i)->sex);
printf(" ********* 年龄:> %d\n", (stu + i)->age);
printf(" ********* 电话:> %s\n", (stu + i)->tel);
printf(" ********* 住址:> %s\n", (stu + i)->addr);
return;
}
}/*for*/
printf("没有找到您要查找的学生!\n");
}
void Alter(Stu *stu, const int count)
/*修改指定联系人信息*/
{
char _name[20];
printf("请输入您要修改的学生的姓名:> ");
scanf("%s", _name);
for (int i = 0; i < count; i++)
{
if (strcmp((stu + i)->name, _name) == 0)
{
printf("请输入修改后的姓名:> ");
scanf("%s", (stu + i)->name);
printf("请输入修改后的性别:> ");
scanf("%s", (stu + i)->sex);
printf("请输入修改后的年龄:> ");
scanf("%d", &(stu + i)->age);
printf("请输入修改后的电话:> ");
scanf("%s", (stu + i)->tel);
printf("请输入修改后的住址:> ");
scanf("%s", (stu + i)->addr);
printf("修改成功!\n");
return;
}
}/*for*/
printf("此学生系统中没有您要修改的学生!\n");
}
void Show(const Stu *stu, const int count)
/*显示所有联系人信息*/
{
if (count == 0)
{
printf("此学生系统中没有学生!\n");
}
else
{
printf(" 姓名 | 性别 | 年龄 | 电话 | 住址 \n");
for (int i = 0; i < count; i++)
{
printf("%2s |%5s |%6d |%13s |%s\n", (stu + i)->name, (stu + i)->sex, (stu + i)->age, (stu + i)->tel, (stu + i)->addr);
}
}
}
int StcCmp(const void*num1, const void *num2)
/*快排的比较函数*/
{
return (strcmp(((Stu *)num1)->name, ((Stu *)num2)->name) > 0) ? 1 : -1;
}
void Sort(Stu *stu, const int count)
/*以名字排序所有联系人*/
{
if (count == 0)
{
printf("此学生系统中没有学生!\n");
return;
}
qsort(stu, count, sizeof(stu[0]), StcCmp);
}
void Empty(Stu *stu, int *count)
/*清空所有联系人*/
{
if (count == 0)
{
printf("此学生系统中没有学生!\n");
return;
}
for (int i = 0; i < *count; i++)
{
*(stu + i)->name = NULL;
*(stu + i)->sex = NULL;
(stu + i)->age = 0;
*(stu + i)->tel = NULL;
*(stu + i)->addr = NULL;
}
*count = 0;
printf("清空成功!");
}
#endif
主程序:test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include "student.h"
#define MAXSIZE 1000
typedef enum EN
{
EXIT, //退出
ADD, //添加
DELETE, //删除
SEARCH, //查找
ALTER, //修改
SHOW, //显示
SORT, //排序
EMPTY, //清空
}EN;
int main()
{
Stu stu[MAXSIZE];
int count = 0; //系统中的现有人数
int input = 1;
while (input)
{
menu();
printf("请选择您要进行的服务项目:> ");
scanf_s("%d", &input);
switch (input)
{
case EXIT:
printf("感谢您试用本服务系统,欢迎您的下次使用!\n");
system("pause");
return 0;
case ADD: //添加
Add(stu, &count);
break;
case DELETE: //删除
Delete(stu, &count);
break;
case SEARCH: //查找
Search(stu, count);
break;
case ALTER: //修改
Alter(stu, count);
break;
case SHOW: //显示
Show(stu, count);
break;
case SORT: //排序
Sort(stu, count);
Show(stu, count);
break;
case EMPTY: //清空
Empty(stu, &count);
break;
default:
printf("请选择正确的服务项目!\n");
break;
}/*switch*/
}/*while*/
printf("\n");
system("pause");
return 0;
}
运行界面:
进入运行界面后,可根据自己的需求选择合适的服务项目。