写在前面
本文性质
本文应该属于分享题目,并解析题目一类的文章
本文目的(面向的对象)
本文适合C语言刚刚学完的同学,在学习C语言的过程中,我们都应该深刻地明白:实践敲代码对学习的重要性 大家刚刚学完C语言,急迫需要一些综合性强的题目,来供大家对这些知识初步做到“融会贯通”。
如何使用这篇文章?
这里笔者给出一些建议,大家酌情采用
1、首先,本篇文章的内容结构,将在目录中展示,建议先浏览目录,对将要做的事情可以有一个大概印象;
2、建议大家先浏览“题目”,然后打开编译器,根据需求自己先编写、调试,如果可以直接做出来,那自然是最好的;
3、不管最后有没有做出来,都可以浏览笔者在 做这个的时候 写的代码,这个是对大家都开放的, 没有做出来的同学,或许可以从笔者的代码中找到一些灵感,尽量不要 Ctrl + c, 做出来的同学,或许可以从笔者的代码中找到一些相同与不同,这些不同说不定能带给读者一些感悟。
4、在读者自主完成题目后,可以将笔者的代码运行一遍,尝试感受一下不同,取其精华,去其糟粕,实现更好的自己!
题目:通讯录(版本一)
实现一个通讯录;
通讯录可以用来存储300个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
提供方法:
1、添加联系人信息 2、删除指定联系人信息 3、查找指定联系人信息 4、修改指定联系人信息 5、显示所有联系人信息 6、清空所有联系人 7、以名字排序所有联系人
代码及思路
为了方便起见,思路将以 注释 的形式在代码块里出现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define MAX 300
enum sex {
MALE = 1,
FEMALE = 2
};
typedef struct one {
char name[64];
enum sex sex;
int age;
char tel[12];
char address[128];
}one;
typedef struct address_book {
one person[MAX];
int sz;
}address_book;
void Add(address_book*p) {
printf("请输入新增联系人的 姓名\n");
scanf("%s", &(p->person[p->sz].name));
printf("请输入新增联系人的 性别\n1、男性\n2、女性\n");
int s;
scanf("%d", &s);
if (s == 1) {
p->person[p->sz].sex = MALE;
}
else {
p->person[p->sz].sex = FEMALE;
}
printf("请输入新增联系人的 年龄\n");
scanf("%d", &(p->person[p->sz].age));
printf("请输入新增联系人的 电话\n");
scanf("%s", &(p->person[p->sz].tel));
printf("请输入新增联系人的 地址\n");
scanf("%s", &(p->person[p->sz].address));
p->sz++;
}
void Delete(address_book*p) {
printf("请输入要删除联系人的 序号\n");
int a;
scanf("%d", &a);
if (a >= p->sz) {
return;
}
printf("[%d] %s %s\n", a, p->person[a].name, p->person[a].tel);
printf("确认删除该联系人?\n1、确认\n2、取消\n");
int c = 0;
scanf("%d", &c);
if (c == 1) {
for (; a+1 < p->sz; a++) {
p->person[a].age = p->person[a + 1].age;
p->person[a].sex = p->person[a + 1].sex;
int i = 0;
while (1) {
if (p->person[a + 1].address[i] == '\0') {
break;
}
p->person[a].address[i] = p->person[a + 1].address[i];
i++;
}
p->person[a].address[i] = p->person[a + 1].address[i];
i = 0;
while (1) {
if (p->person[a + 1].name[i] == '\0') {
break;
}
p->person[a].name[i] = p->person[a + 1].name[i];
i++;
}
p->person[a].name[i] = p->person[a + 1].name[i];
i = 0;
while (1) {
if (p->person[a + 1].tel[i] == '\0') {
break;
}
p->person[a].tel[i] = p->person[a + 1].tel[i];
i++;
}
p->person[a].tel[i] = p->person[a + 1].tel[i];
}
p->sz--;
printf("删除完成!");
}
}
void Found(address_book*p) {
int a;
while (1) {
printf("请输入要查找联系人的 序号\n");
scanf("%d", &a);
if (a < p->sz) {
break;
}
else{
printf("请重新输入!\n");
}
}
printf("姓名:%s\n", p->person[a].name);
if (p->person[a].sex == 1) {
printf("性别:男\n");
}
else if (p->person[a].sex == 2) {
printf("性别:女\n");
}
printf("年龄:%d\n", p->person[a].age);
printf("地址:%s\n", p->person[a].address);
printf("号码:%s\n", p->person[a].tel);
}
void Revise(address_book* p) {
int a;
while (1) {
printf("请输入要修改联系人的 序号\n");
scanf("%d", &a);
if (a < p->sz) {
break;
}
else {
printf("请重新输入!\n");
}
}
printf("[%d] %s %s\n", a, p->person[a].name, p->person[a].tel);
printf("确认修改该联系人?\n1、确认\n2、取消\n");
int c = 0;
scanf("%d", &c);
if (c == 1) {
printf("输入新的姓名:\n");
scanf("%s", p->person[a].name);
printf("输入新的年龄:\n");
scanf("%d", &(p->person[a].age));
printf("输入新的性别:\n1、男\2、女\n");
int s;
scanf("%d", &s);
if (s == 1) {
p->person[a].sex = MALE;
}
else{
p->person[a].sex = FEMALE;
}
printf("请输入新的地址:\n");
scanf("%s", p->person[a].address);
printf("请输入新的电话:\n");
scanf("%s", p->person[a].tel);
}
}
void Clean(address_book* p) {
p->sz = 0;
}
void Sort(address_book* p) {
system("cls");
for (int i = (int)'A'; i <=(int) 'z'; i++) {
for (int j = 0; j < p->sz; j++) {
if (p->person[j].name[0] == (char)i) {
if (p->person[j].sex == MALE)
printf("[%d] %s 男 %d\n", j, &(p->person[j].name[0]), p->person[j].age);
else
printf("[%d] %s 女 %d\n", j, &(p->person[j].name[0]), p->person[j].age);
}
}
}
}
typedef void(*FUNC)(address_book*);
void Print(address_book*p) {
while (1) {
system("cls");
printf("序号 姓名 性别 年龄\n");
for (int i = 0; i < p->sz; i++) {
if (p->person[i].sex == MALE)
printf("[%d] %s 男 %d\n", i, p->person[i].name, p->person[i].age);
else
printf("[%d] %s 女 %d\n", i, p->person[i].name, p->person[i].age);
}
printf("\n1、查找联系人\n2、添加联系人\n3、删除联系人\n4、修改指定联系人信息\n5、清空通讯录中所有的联系人\n6、以名字排序\n0、关闭通讯录\n");
int c = 0;
scanf("%d", &c);
FUNC f[7] = {
NULL,
Found,
Add,
Delete,
Revise,
Clean,
Sort
};
if (c == 0) {
system("cls");
break;
}
assert(c <= 5 || c >= 0);
f[c](p);
system("pause");
}
}
void menu(address_book*p) {
int c = 0;
printf("1、打开通讯录\n0、退出\n");
scanf("%d", &c);
if (c == 1) {
Print(p);
}
}
int main() {
address_book book1;
book1.sz = 0;
menu(&book1);
return 0;
}
|