大佬教程收集整理的这篇文章主要介绍了C语言小项目——通讯录(适合刚学完C语言的初学者),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
🔊 🇨🇳大家好c;我是_奇奇c;为一名C/C++博主。河牧院大一在读。 🔔欢迎大家和我一起交流学习 ❤️编程的前途是光明的c;道路是曲折的。笑到最后才是赢家🍺 🌳戳我跳到本人个人主页c;点击查看更多知识点!
对于刚学完C语言理论知识的我们c;一定需要做一些小项目来巩固我们所学过的理论知识c;把理论转化为实践是重要的一步。学过不一定学会c;学会不一定会敲代码。这篇通俗易懂的通讯录实现包你一看就会。看不会打我 此篇实现通讯录的静态版。适合刚学完C语言的初学者。
可以实现通讯录的增、删、查、改以及排序和展示。
思路也有个敲门c;我把这个方法叫做 :佛挡杀佛法。这个方法意味着你不需要想那么多c;直接开干c;开始写代码c;需要什么写什么c;佛挡杀佛c;神来杀神。方法具体如下
首先
c;一个通讯录没有人怎么行呢?这时我们要面对第一个最基本的功能就是给通讯录添加人员(增(Add))c;所以我们要使用结构体构造学生的基本信息和通讯录的基本信息。 如下图所示 解释一下
这里的学生信息和通讯录信息的结构体都在头文件contact.h中。源文件使用时只需要在前面用预处理指令#include包含头文件名字就可以了。
这里用#define预处理指令设置常量。可以方便后期维护和修改。
通讯录结构体Contact
是一种嵌套结构体。里面包含了一个学生信息结构体的数组。数组的大小是1000。还有记录学生个数的变量sz。
第二
c;有了这些结构体的构造c;我们就要实现联系人的增加功能了c;在这之前需要准备一个框架c;用switch选择语句来进行功能的选取。
在用switch语句时可以用enum枚举常量来构造每一个case的数。用来实现通讯录的菜单
这个也是提前写到头文件中的。
代码如下
int @H_771_141@main()
{
int n = 0;
Contact con;
char name[10] = { 0 };
InitContact(&con);
do
{
@H_771_141@menu();
scanf("%d", &n);
switch (n)
{
case exitcontact:
printf("退出程序n");
break;
case Add:
printf("增加通讯录成员:n");
AddContact(&con);
break;
......
default:
printf("输入错误c;请重新输入:");
break;
}
} while (n);
return 0;
}
void InitContact(Contact* pc)
{
assert(pc);
//将通讯录人数初始化为0.
pc->sz = 0;
//内存函数memsetc;作用是将结构体数组的值全都初始化为0.
@H_771_141@memset(pc->date, 0, sizeof(pc->date));
}
/************contact.h***********/
//增加通讯录人员
void AddContact(Contact* pc);
/************test.c***********/
// 通过结构体变量的地址。
可以提高运行效率。防止堆栈过大。
AddContact(&con);
/************contact.c***********/
void AddContact(Contact* pc)
{
assert(pc);
if (pc->sz == CONTACT_MAX)
{
printf("通讯录满了");
return;
}
printf("请输入要添加联系人的姓名:");
scanf("%s", pc->date[pc->sz].name);
printf("请输入要添加联系人的性别:");
scanf("%s", pc->date[pc->sz].sex);
printf("请输入要添加联系人的年龄:");
scanf("%d", &(pc->date[pc->sz].age));
printf("请输入要添加联系人的电话:");
scanf("%s", pc->date[pc->sz].tel);
printf("请输入要添加联系人的地址:");
scanf("%s", pc->date[pc->sz].addr);
pc->sz++;
printf("添加联系人成功n");
}
/************contact.h***********/
//显示通讯录人员
void ShowContact(Contact* pc);
/************test.c***********/
case Show:
ShowContact(&con);
break;
printf("%10st%5st%5st%20st%20stn","姓名","性别","年龄","电话","地址");
实现这个功能、图片如下。 /************contact.c***********/
void ShowContact(Contact* pc)
{
assert(pc);
int i = 0;
printf("%10st%5st%5st%20st%20stn","姓名","性别","年龄","电话","地址");
for (i = 0; i < pc->sz; i++)
{
printf("%10st%5st%5dt%20st%20stn", pc->date[i].name, pc->date[i].sex, pc->date[i].age, pc->date[i].tel, pc->date[i].addr);
}
}
/************contact.h***********/
//删除通讯录人员
void deleteContact(Contact* pc, char* name);
//找通讯录人员
int FindContact(Contact* pc, char* name);
----------------------------------------------------------------------
/************test.c***********/
case delete:
printf("删除通讯录人员:");
printf("请输入要删除的人员名字");
scanf("%s", name);
deleteContact(&con, name);
break;
----------------------------------------------------------------------
----------------------------------------------------------------------
/************contact.c***********/
//找联系人
int FindContact(Contact* pc, char* name)
{
assert(pc && name);
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (strcmp(pc->date[i].name, name)==0)
{
return i;
}
}
return -1;
}
------------------------------分割线----------------------------------------
//删除联系人
void deleteContact(Contact* pc, char* name)
{
assert(pc && name);
if (pc->sz == 0)
{
printf("已经没有联系人c;不可删除n");
}
int ret = FindContact(pc, name);
if (ret == -1)
{
printf("没有此人n");
}
else
{
int j = 0;
for (j = ret; j < pc->sz - 1; j++)
{
pc->date[j] = pc->date[j + 1];
}
pc->sz--;
printf("删除成功n");
}
}
----------------------------------------------------------------------
/************contact.h***********/
//查找通讯录人员
void SearchContact(Contact* pc, char* name);
/************test.c***********/
case Search:
printf("请输入你要查找的联系人n");
scanf("%s", name);
SearchContact(&con, name);
break;
/************contact.c***********/
void SearchContact(Contact* pc, char* name)
{
assert(pc && name);
int ret = FindContact(pc, name);
if (ret != -1)
{
printf("找到了n");
printf("%10st%5st%5dt%20st%20stn", pc->date[ret].name, pc->date[ret].sex, pc->date[ret].age, pc->date[ret].tel, pc->date[ret].addr);
}
else
{
printf("没有找到n");
}
}
/************contact.h***********/
//修改通讯录人员
void @H_771_141@modifyContact(Contact* pc, char* name);
/************test.c***********/
case Modify:
printf("请输入要修改的联系人名字:");
scanf("%s", name);
@H_771_141@modifyContact(&con, name);
break;
/************contact.c***********/
void @H_771_141@modifyContact( Contact* pc, char* name)
{
assert(pc && name);
int ret = FindContact(pc, name);
if (ret != -1)
{
printf("找到了n");
printf("%10st%5st%5st%20st%20stn", "姓名", "性别", "年龄", "电话", "地址");
printf("%10st%5st%5dt%20st%20stn", pc->date[ret].name, pc->date[ret].sex, pc->date[ret].age, pc->date[ret].tel, pc->date[ret].addr);
printf("请修改n");
printf("请输入联系人的名字:");
scanf("%s", pc->date[ret].name);
printf("请输入联系人的性别:");
scanf("%s", pc->date[ret].sex);
printf("请输入联系人的年龄:");
scanf("%d", &pc->date[ret].age);
printf("请输入联系人的电话:");
scanf("%s", pc->date[ret].tel);
printf("请输入联系人的地址:");
scanf("%s", pc->date[ret].addr);
printf("修改成功!n");
}
}
/************contact.h***********/
//排序通讯录人员
void SortContact(Contact* pc);
/************test.c***********/
case Sort:
printf("排序通讯录人员:n");
SortContact(&con);
break;
/************contact.c***********/
int cmp_name(const void* e1, const void* e2)
{
return strcmp(((student*)e1)->name, ((student*)e2)->name);
}
void SortContact(Contact* pc)
{
assert(pc);
qsort(pc->date, pc->sz, sizeof(pc->date[0]), cmp_name);
printf("排序完成n");
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <assert.h>
#include <String.h>
#include <stdlib.h>
#define CONTACT_MAX 1000
#define NAME_MAX 10
#define SEX_MAX 10
#define TEL_MAX 20
#define ADDR_MAX 30
typedef struct student
{
char name[NAME_MAX];
char sex[SEX_MAX];
int age;
char tel[TEL_MAX];
char addr[ADDR_MAX];
}student;
typedef struct contact
{
student date[CONTACT_MAX];
int sz;
}Contact;
enum contactmenu
{
exitcontact,
Add,
delete,
Search,
Modify,
Show,
Sort,
};
//初始化通讯录
void InitContact(Contact* pc);
//增加通讯录人员
void AddContact(Contact* pc);
//显示通讯录人员
void ShowContact(Contact* pc);
//找通讯录人员
int FindContact(Contact* pc, char* name);
//删除通讯录人员
void deleteContact(Contact* pc, char* name);
//查找通讯录人员
void SearchContact(Contact* pc, char* name);
//修改通讯录人员
void @H_771_141@modifyContact(Contact* pc, char* name);
//排序通讯录人员
void SortContact(Contact* pc);
#include "contact.h"
#define _CRT_SECURE_NO_WARNINGS
void InitContact(Contact* pc)
{
assert(pc);
pc->sz = 0;
@H_771_141@memset(pc->date, 0, sizeof(pc->date));
}
void AddContact(Contact* pc)
{
assert(pc);
if (pc->sz == CONTACT_MAX)
{
printf("通讯录满了");
return;
}
printf("请输入要添加联系人的姓名:");
scanf("%s", pc->date[pc->sz].name);
printf("请输入要添加联系人的性别:");
scanf("%s", pc->date[pc->sz].sex);
printf("请输入要添加联系人的年龄:");
scanf("%d", &(pc->date[pc->sz].age));
printf("请输入要添加联系人的电话:");
scanf("%s", pc->date[pc->sz].tel);
printf("请输入要添加联系人的地址:");
scanf("%s", pc->date[pc->sz].addr);
pc->sz++;
printf("添加联系人成功n");
}
void ShowContact(Contact* pc)
{
assert(pc);
int i = 0;
printf("%10st%5st%5st%20st%20stn","姓名","性别","年龄","电话","地址");
for (i = 0; i < pc->sz; i++)
{
printf("%10st%5st%5dt%20st%20stn", pc->date[i].name, pc->date[i].sex, pc->date[i].age, pc->date[i].tel, pc->date[i].addr);
}
}
int FindContact(Contact* pc, char* name)
{
assert(pc && name);
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (strcmp(pc->date[i].name, name)==0)
{
return i;
}
}
return -1;
}
void deleteContact(Contact* pc, char* name)
{
assert(pc && name);
if (pc->sz == 0)
{
printf("已经没有联系人c;不可删除n");
}
int ret = FindContact(pc, name);
if (ret == -1)
{
printf("没有此人n");
}
else
{
int j = 0;
for (j = ret; j < pc->sz - 1; j++)
{
pc->date[j] = pc->date[j + 1];
}
pc->sz--;
printf("删除成功n");
}
}
void SearchContact(Contact* pc, char* name)
{
assert(pc && name);
int ret = FindContact(pc, name);
if (ret != -1)
{
printf("找到了n");
printf("%10st%5st%5dt%20st%20stn", pc->date[ret].name, pc->date[ret].sex, pc->date[ret].age, pc->date[ret].tel, pc->date[ret].addr);
}
else
{
printf("没有找到n");
}
}
void @H_771_141@modifyContact( Contact* pc, char* name)
{
assert(pc && name);
int ret = FindContact(pc, name);
if (ret != -1)
{
printf("找到了n");
printf("%10st%5st%5st%20st%20stn", "姓名", "性别", "年龄", "电话", "地址");
printf("%10st%5st%5dt%20st%20stn", pc->date[ret].name, pc->date[ret].sex, pc->date[ret].age, pc->date[ret].tel, pc->date[ret].addr);
printf("请修改n");
printf("请输入联系人的名字:");
scanf("%s", pc->date[ret].name);
printf("请输入联系人的性别:");
scanf("%s", pc->date[ret].sex);
printf("请输入联系人的年龄:");
scanf("%d", &pc->date[ret].age);
printf("请输入联系人的电话:");
scanf("%s", pc->date[ret].tel);
printf("请输入联系人的地址:");
scanf("%s", pc->date[ret].addr);
printf("修改成功!n");
}
}
int cmp_name(const void* e1, const void* e2)
{
return strcmp(((student*)e1)->name, ((student*)e2)->name);
}
void SortContact(Contact* pc)
{
assert(pc);
qsort(pc->date, pc->sz, sizeof(pc->date[0]), cmp_name);
printf("排序完成n");
}
#define _CRT_SECURE_NO_WARNINGS
#include "contact.h"
void @H_771_141@menu()
{
printf("***************************n");
printf("***************************n");
printf("******1.Add 2.delete****n");
printf("******3.Search 4.Modify****n");
printf("******5.Show 6.Sort******n");
printf("******0.exit ****n");
printf("***************************n");
printf("***************************n");
}
int @H_771_141@main()
{
int n = 0;
Contact con;
char name[10] = { 0 };
InitContact(&con);
do
{
@H_771_141@menu();
scanf("%d", &n);
switch (n)
{
case exitcontact:
printf("退出程序n");
break;
case Add:
printf("增加通讯录成员:n");
AddContact(&con);
break;
case delete:
printf("删除通讯录人员:");
printf("请输入要删除的人员名字");
scanf("%s", name);
deleteContact(&con, name);
break;
case Search:
printf("请输入你要查找的联系人n");
scanf("%s", name);
SearchContact(&con, name);
break;
case Modify:
printf("请输入要修改的联系人名字:");
scanf("%s", name);
@H_771_141@modifyContact(&con, name);
break;
case Show:
ShowContact(&con);
break;
case Sort:
printf("排序通讯录人员:n");
SortContact(&con);
break;
default:
printf("输入错误c;请重新输入:");
break;
}
} while (n);
return 0;
}
以上是大佬教程为你收集整理的C语言小项目——通讯录(适合刚学完C语言的初学者)全部内容,希望文章能够帮你解决C语言小项目——通讯录(适合刚学完C语言的初学者)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。