C语言实现数据结构大作业通讯录管理系统【在下蒟蒻,有问题大佬别杠!!】

为了实现我几天前的梦想(抄作业)(CSDN上面居然没有可以直接抄的作业),只好自己写,不过也是看了CSDN上面搜索通讯录管理系统置顶的那篇文章然后自己再写一部分。(不想写,抄了一部分,CV战士所向披靡!)

注意:本文主要帮助大一下大作业的朋友们。

通讯录管理系统

好的,废话不多说,直接源代码(我自群众中来,最懂大家需要什么)

#include<iostream>
#include<string>
#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
FILE* fp;//读取txt或写入txt的指针
enum contactCapacity
{
	MaxName = 50,//名字长度
	MaxSex = 3,//性别
	MaxNumberofTele = 18,//电话号码长度
	Maxaddr = 30,//地址长度
	Maxuser = 20//通讯录用户最大数量
};
enum operate
{
	add=1,
	del,
	search,
	modify,
	print,
	exitt=0
};
void menu()
{
	printf("-----------------------------\n");
	printf("|  1.增加联系人             |\n");
	printf("|  2.删除联系人             |\n");
	printf("|  3.查找联系人             |\n");
	printf("|  4.修改联系人             |\n");
	printf("|  5.查看通讯录             |\n");
	printf("|  0.退出通讯录并保存       |\n");
	printf("-----------------------------\n");
}
typedef struct Users
{
	char name[MaxName];
	char sex[MaxSex];
	int age;
	char tele[MaxNumberofTele];
	char addr[Maxaddr];
}User;
typedef struct Contact
{
	User con[Maxuser];
	int sy;//序号
}contact;
void Initcon(contact* PC)//初始化结构体
{
	assert(PC);
	PC->sy = 0;
	memset(PC->con, 0, sizeof(PC->con));
}
void Add(contact* PC)
{
	assert(PC);
	if (PC->sy == Maxuser)
		printf("通讯录已经存满!");
	printf("请输入姓名:\n");
	cin >> PC->con[PC->sy].name;
	printf("请输入性别:\n");
	cin >> PC->con[PC->sy].sex;
	printf("请输入年龄:\n");
	cin >> PC->con[PC->sy].age;
	printf("请输入电话号码:\n");
	cin >> PC->con[PC->sy].tele;
	printf("请输入地址:\n");
	cin >> PC->con[PC->sy].addr;
	PC->sy++;
	printf("此联系人添加成功!\n");
}
void printcon(const contact* PC)
{
	assert(PC);
	printf("%-15s %-5s %-5s %-12s %-30s\n", "姓名", "性别", "年龄", "电话", "地址");
	for (int i = 0; i < PC->sy; i++)
	{
		printf("%-15s %-5s %-5d %-12s %-30s\n", PC->con[i].name, PC->con[i].sex, PC->con[i].age, PC->con[i].tele, PC->con[i].addr);
	}
}
int Findname(const contact* PC, char* name)
{
	assert(PC && name);
	for (int i = 0; i < PC->sy; i++)
	{
		if ( strcmp(PC->con[i].name, name)==0)
			return i;
	}
	return -1;
}
void Search(contact* PC)
{
	assert(PC);
	char name[MaxName];
	printf("请输入要查找的联系人名字:\n");
	cin >> name;
	int xzrxb = Findname(PC, name);
	if (xzrxb == -1)
		printf("未不到此人!\n");
	else
	{
		printf("%-15s %-5s %-5s %-12s %-30s\n", "姓名", "性别", "年龄", "电话", "住址");
		printf("%-15s %-5s %-5d %-12s %-30s\n", PC->con[xzrxb].name, PC->con[xzrxb].sex, PC->con[xzrxb].age, PC->con[xzrxb].tele, PC->con[xzrxb].addr);
	}
}

void Modify(contact* PC)
{
	assert(PC);
	char name[MaxName];
	printf("请输入要修改的联系人名字\n");
	cin >> name;
	int xzrxb = Findname(PC, name);
	if (xzrxb == -1)
		printf("没有找到!\n");
	else
	{
		int num = 0;
		do
		{
			printf("请输入要修改的联系人信息\n");
			printf("0.退出\n1.姓名\n2.性别\n3.年龄\n4.电话号码\n5.地址\n");
			cin >> num;
			switch (num)
			{
			case 1:
				printf("请输入你要修改成的姓名:\n");
				cin >> PC->con[xzrxb].name;
				break;
			case 2:
				printf("请输入你要修改成的性别:\n");
				cin >> PC->con[xzrxb].sex;
				break;
			case 3:
				printf("请输入你要修改成的年龄:\n");
				cin >> PC->con[xzrxb].age;
				break;
			case 4:
				printf("请输入你要修改成的电话号码:\n");
				cin >> PC->con[xzrxb].tele;
				break;
			case 5:
				printf("请输入你要修改成的地址:\n");
				cin >> PC->con[xzrxb].addr;
				break;
			case 0:
				printf("返回界面\n");
				break;
			default:printf("无效操作!\n");
			}
		} while (num);
	}
}
void Del(contact* PC)
{
	assert(PC);
	char name[MaxName];
	printf("请输入要删除的用户名字:\n");
	cin >> name;
	int xzrxb = Findname(PC, name);
	if (xzrxb == -1)
		printf("未找到此人!\n");
	else
	{
		for (int i = xzrxb; i < PC->sy; i++)
		{
			PC->con[i] = PC->con[i + 1];
		}
		PC->sy--;
		printf("删除成功!\n");
	}
}
void duru(contact* PC)
{
	fp=fopen( "C:\\Users\\00\\Desktop\\c\\vs\\Project1\\xinxi.txt", "r");
	if (fp == NULL)
		printf("读入失败!\n");
	else
	{
		fscanf(fp, "%d", &PC->sy);
		for(int i=0;i<PC->sy;i++)
		{
			fscanf(fp, "%s", &PC->con[i].name);
			fscanf(fp, "%s", &PC->con[i].sex);
			fscanf(fp, "%d", &PC->con[i].age);
			fscanf(fp, "%s", &PC->con[i].tele);
			fscanf(fp, "%s", &PC->con[i].addr);

		}
		printf("读入成功!\n");
	}
}
void xieru(contact* PC)
{
	fp = fopen("C:\\Users\\00\\Desktop\\c\\vs\\project1\\xinxi.txt", "w+");
	fprintf(fp, "%d\n", PC->sy);
	for (int i = 0; i < PC->sy; i++) 
	{
		fprintf(fp, "%s\n", PC->con[i].name);
		fprintf(fp, "%s\n", PC->con[i].sex);
		fprintf(fp, "%d\n", PC->con[i].age);
		fprintf(fp, "%s\n", PC->con[i].tele);
		fprintf(fp, "%s\n", PC->con[i].addr);
	}
	fclose(fp);
}
void text()
{
	contact con;
	Initcon(&con);
	duru(&con);
	int input = 0;
	do {
		menu();
		cin >> input;
		switch (input)
		{
		case add:
			Add(&con);
			break;
		case del:
			Del(&con);
			break;
		case search:
			Search(&con);
			break;
		case modify:
			Modify(&con);
			break;
		case print:
			printcon(&con);
			break;
		case exitt:
			xieru(&con);
			printf("退出程序!\n");
			break;
		default:
			printf("无法识别该数字的操作\n");
		}
	} while (input);
	
}
int main()
{
	FILE* fp = NULL;
	text();
	return 0;
}

通讯录功能包括:增加、删除、查找、查看全部通讯录、修改、保存和读取本地文本文档的存档功能。

ok,分享到此为止,如果有不懂可以...额自己搜索,主要是问了万一我回答不上那多尴尬。

对了,如果用VS编译器记得改项目属性SDL检查改成否,不然又要安全警告。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答关于C语言实现epoll IO复用的问题。以下是一个基本的epoll IO复用示例代码: ``` #include <sys/epoll.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/socket.h> #define MAX_EVENTS 10 #define PORT 8080 int main () { int server_fd, new_socket, epoll_fd, n, i; struct sockaddr_in address; struct epoll_event event, events[MAX_EVENTS]; // Create a socket if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("Failed to create socket"); exit(EXIT_FAILURE); } // Set socket options if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("Failed to set socket options"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // Bind the socket to a port if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) { perror("Failed to bind socket"); exit(EXIT_FAILURE); } // Listen on the socket if (listen(server_fd, 3) < 0) { perror("Failed to listen on socket"); exit(EXIT_FAILURE); } // Create epoll instance if ((epoll_fd = epoll_create1(0)) < 0) { perror("Failed to create epoll instance"); exit(EXIT_FAILURE); } // Add server socket to epoll decriptor event.events = EPOLLIN; event.data.fd = server_fd; if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, server_fd, &event) < 0) { perror("Failed to add server socket to epoll"); exit(EXIT_FAILURE); } while (1) { n = epoll_wait(epoll_fd, events, MAX_EVENTS, -1); for (i = 0; i < n; i++) { if (events[i].data.fd == server_fd) { // Server socket event if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) { perror("Failed to accept incoming connection"); exit(EXIT_FAILURE); } // Add new socket to epoll descriptor event.events = EPOLLIN; event.data.fd = new_socket; if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, new_socket, &event) < 0) { perror("Failed to add new socket to epoll"); exit(EXIT_FAILURE); } } else { // Client socket event // Handle read events on the client sockets and process the // incoming data. Also handle disconnect events. } } } return 0; } ``` 希望能对您有所帮助!算了,这是一个关于蒟蒻程序员的笑话:为什么程序员总喜欢喝奶茶?因为他们喜欢借用框架!哈哈!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值