标签:sizeof switch 功能 addm cap 联系人 权限 ddr 通讯
//////////////////////////////// .h文件 /////////////////////////////
#pragma once
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
//实现一个通讯录;
//通讯录可以用来存储1000个人的信息,每个人的信息包括:
//姓名、性别、年龄、电话、住址
//
//提供方法:
//1. 添加联系人信息
//2. 删除指定联系人信息
//3. 查找指定联系人信息
//4. 修改指定联系人信息
//5. 显示所有联系人信息
//6. 清空所有联系人
//7. 以名字排序所有联系人
#define MAX_SIZE 1000
typedef struct Measage
{
char name[20];
int gender;
int age;
char tel[20];
char addr[20];
}*MList;
typedef struct List
{
MList Man[MAX_SIZE];
int Size;
}People; // people * s s->Man[s->Size]->name
void AddMan(People* s);
void InitMan(People* s);
void DeleteMan(People* s);
int FindMan(People* s);
void ReviseMan(People* s);
void Display(People* s);
void SortMan(People* s);
//////////////////////////// .c 实现文件 //////////////////////////////
#include "标头.h"
#pragma warning(disable:4996)
void InitMan(People* s)
{
s->capasize = MAX_SIZE;
s->Man = malloc(MAX_SIZE * sizeof(List));
s->Size = 0;
printf("清理成功\n");
}
void IncreaseMan(People* s)
{
assert(s);
s->capasize = s->capasize + INCREASEMENT;
s->Man = realloc(s->Man, s->capasize * sizeof(List));
}
//引发了异常: 读取访问权限冲突。
//**s** 是 0x34F42096。 出现了
void AddMan(People* s)
{
if (s->Size == MAX_SIZE - 1) {
IncreaseMan(s);
}
printf("\n");
printf("\n");
printf("现在进行添加联系人操作\n");
getchar();
printf("请输入姓名\n");
gets(s->Man[s->Size].name);
printf("请输入性别 1.男性 2.女性\n");
scanf_s("%d", &(s->Man[s->Size].gender));
getchar();
printf("请输入地址\n");
gets(s->Man[s->Size].addr);
printf("请输入年龄\n");
scanf_s("%d", &(s->Man[s->Size].age));
getchar();
printf("请输入十一位电话号码\n");
gets(s->Man[s->Size].tel);
++s->Size;
}
void DeleteMan(People* s)
{
int i = 0;
int flag = 1;
char str[20];
if (s == NULL) {
printf("空\n");
return;
}
printf("\n");
printf("\n");
printf("请输入您要删除的联系人的姓名\n");
getchar();
gets(str);
while (i < s->Size) {
if (strcmp(s->Man[i].name, str) == 0) {
flag = 0;
while (i < (s->Size) - 1) {
s->Man[i] = s->Man[i + 1];
++i;
}
--s->Size;
break;
}
++i;
}
if (flag) {
printf("无此联系人信息\n");
}
printf("联系人信息已删除\n");
printf("\n");
printf("\n");
}
int FindMan(People* s)
{
assert(s);
int i = 0;
int flag = 1;
char str[20];
printf("请输入您要查找的联系人的姓名\n");
getchar();
gets(str);
while (i < s->Size) {
if (strcmp(s->Man[i].name, str) == 0) {
flag = 0;
printf("\n");
printf("\n");
printf("电话:%s\n", s->Man[i].tel);
if ((s->Man[i]).gender == 1) {
printf("性别男\n");
}
else {
printf("性别女\n");
}
printf("年龄 %d\n", s->Man[i].age);
printf("地址:%s\n", s->Man[i].addr);
printf("\n");
printf("\n");
break;
}
++i;
}
if (flag) {
printf("未找到联系人信息\n");
return -1;
}
return i;
}
void ReviseMan(People* s)
{
int i = FindMan(s);
if (i == -1) {
return;
}
else {
printf("\n");
printf("\n");
printf("现在进行修改联系人操作\n");
getchar();
printf("请输入姓名\n");
gets(s->Man[s->Size].name);
printf("请输入性别 1.男性 2.女性\n");
scanf_s("%d", &(s->Man[s->Size].gender));
getchar();
printf("请输入地址\n");
gets(s->Man[s->Size].addr);
printf("请输入年龄\n");
scanf_s("%d", &(s->Man[s->Size].age));
getchar();
printf("请输入十一位电话号码\n");
gets(s->Man[s->Size].tel);
printf("\n");
printf("\n");
}
}
void Display(People* s)
{
assert(s);
int i = 0;
while (i < s->Size) {
printf("\n");
printf("\n");
printf("姓名:%s\n", s->Man[i].name);
printf("电话:%s\n", s->Man[i].tel);
if (s->Man[i].gender == 1) {
printf("性别男\n");
}
else {
printf("性别女\n");
}
printf("年龄 %d\n", s->Man[i].age);
printf("地址:%s\n", s->Man[i].addr);
++i;
printf("\n");
printf("\n");
}
}
void SortMan(People* s)//按照名字首字母排序
{
int i = 0;
int j = 0;
char tmp[20];
int flag = 1;
for (; i < s->Size - 1; ++i) {
for (; j < s->Size - 1 - i; ++j) {
if (strcmp(s->Man[i].name, s->Man[i + 1].name) == 1) {
flag = 0;
strcpy(tmp, s->Man[i].name);
strcpy(s->Man[i].name, s->Man[i + 1].name);
strcpy(s->Man[i + 1].name, tmp);
}//交换功能代码块
}
if (flag)
break;
}
}
/////////////////////////// 测试文件 /////////////////////////////
#include "标头.h"
//1. 添加联系人信息
//2. 删除指定联系人信息
//3. 查找指定联系人信息
//4. 修改指定联系人信息
//5. 显示所有联系人信息
//6. 清空所有联系人
//7. 以名字排序所有联系人
void MENU()
{
printf("/////////////////// 通讯录 ////////////////////\n");
printf("////////////// 按键选择相应服务 ///////////////\n");
printf("//1. 添加联系人信息 2. 删除指定联系人信息//\n");
printf("//3. 查找指定联系人信息 4. 修改指定联系人信息//\n");
printf("//5. 显示所有联系人信息 6. 清空所有联系人//////\n");
printf("////////////7. 以名字排序所有联系人////////////\n");
}
int main() {
People p;
int i = 1, j;
while (i != 0) {
MENU();
scanf_s("%d", &i);
switch (i)
{
case 1:
AddMan(&p);
break;
case 2:
DeleteMan(&p);
break;
case 3:
j = FindMan(&p);
break;
case 4:
ReviseMan(&p);
break;
case 5:
Display(&p);
break;
case 6:
InitMan(&p);
break;
case 7:
SortMan(&p);
break;
default:
break;
}
}
printf("退出\n");
system("pause");
return 0;
}
标签:sizeof switch 功能 addm cap 联系人 权限 ddr 通讯
原文地址:https://www.cnblogs.com/liuzhengkai/p/9096973.html