C语言 项目 CRM系统(客户信息管理系统)

发布于:2023-07-04 ⋅ 阅读:(152) ⋅ 点赞:(0)

项目目标

在这里插入图片描述
在这里插入图片描述

项目需求说明

在这里插入图片描述

系统界面

1)添加客户界面
通过编号来区分客户
在这里插入图片描述
2)删除客户界面
对用户输入的编号进行核查,存在与否,合法与否
在这里插入图片描述
3)显示客户列表界面
在这里插入图片描述
4)修改客户信息的界面
在这里插入图片描述

项目设计

Customer结构体的设计
在这里插入图片描述
CRM系统结构框架图
在这里插入图片描述
在这里插入图片描述

案例代码

#include <stdio.h>
#include <string.h>

struct Customer {
	int id;
	int age;
	char name[10];
	char gender;
	char  phone[10];
	char  email[10];
};
char key ;
char loop;
int customerNum;


//客户结构体数组
struct Customer customers[20];

//得到一个客户的信息
void getInfo(struct Customer *customer) {
	
	/*sprintf(info, "\n%d\t%s\t%c\t%d\t%s\t%s", (*customer).id, (*customer).name, 
		(*customer).gender, (*customer).age, (*customer).phone,(*customer).email);*/
	printf("\n%d\t%s\t%c\t%d\t%s\t%s", (*customer).id, (*customer).name, 
		(*customer).gender, (*customer).age, (*customer).phone,(*customer).email);
}

//提供各种操作


//1. 添加
void add(){
	//编号自动增长
	customers[customerNum].id = customerNum + 1;
	printf("\n---------------------添加客户---------------------");
	printf("\n姓名:");
	scanf("%s", customers[customerNum].name);
	getchar();
	printf("\n性别:");
	scanf("%c", &(customers[customerNum].gender));
	getchar();
	printf("\n年龄:");
	scanf("%d", &(customers[customerNum].age));
	getchar();
	printf("\n电话:");
	scanf("%s", customers[customerNum].phone);
	getchar();
	printf("\n邮箱:");
	scanf("%s",customers[customerNum].email);
	getchar();
	printf("\n---------------------添加完成---------------------");
	customerNum++;
	
}

//根据输入的id去找对应的下标,如果找不到返回-1
int findIndex(int id){
	int index = -1;
	int i;
	for (i = 0; i < customerNum ; i++) {
		if (customers[i].id == id) {
			index = i;
			break;
		}
	}
	return index;
}

//2. 删除客户
int del(int id){
	//找到id对应的元素下标
	int index = findIndex(id);
	int i;
	if (index == -1) {
		return 0;//说明这个客户不存在..
	}else {
		//找到,就从index+1开始整体前移
		for (i = index + 1; i < customerNum; i++) {
			customers[i - 1] = customers[i];
		}
		--customerNum;
		return 1;
	}
}

//显示部分

//1. 显示所有
void showList(){
	int i = 0;
	printf("\n---------------------------客户列表---------------------------");
	printf("\n编号\t姓名\t性别\t年龄\t电话\t邮箱");
	for (i = 0; i < customerNum; i++) {
		getInfo(&customers[i]);
	}
}

//2. 完成删除 界面
//---------------------删除客户---------------------
//请选择待删除客户编号(-1退出):1
//确认是否删除(Y/N):y
//---------------------删除完成---------------------

void delView(){
	int id;
	char choice = ' ';
	printf("\n---------------------删除客户---------------------");
	printf("\n请选择待删除客户编号(-1退出):");
	scanf("%d", &id);
	getchar();
	if (id == -1) {
		printf("\n---------------------删除没有完成---------------------");
		return;
	}

	printf("确认是否删除(Y/N):");
	scanf("%c", &choice);
	getchar();
	if (choice == 'Y') {
		if(del(id)){
			printf("\n---------------------删除完成---------------------");
		}else{
			printf("\n---------------------删除没有完成,无此id---------------------");
		}
	} 
}


//3. 主菜单
void mainMenu() {
	do {
		printf("\n-----------------客户信息管理软件-----------------");
		printf("\n                 1 添 加 客 户");
		printf("\n                 2 修 改 客 户");
		printf("\n                 3 删 除 客 户");
		printf("\n                 4 客 户 列 表");
		printf("\n                 5 退          出");
		printf("\n请选择(1-5):");
		scanf("%c", &key);
		getchar();

		switch (key) {
		case '1':
			add();
			break;
		case '2':
			break;
		case '3':
			delView();
			break;
		case '4':
			showList();
			break;
		case '5':
			loop = 0;
			break;
		default:
			printf("\n输入错误,请重新输入");
			break;
		}

	} while (loop);

	printf("\n你已经成功的退出了系统....");
	getchar();
}


void main() {
	为了测试方便
	customers[0].id = 1;
	customers[0].age = 10;
	strcpy(customers[0].email , "xx@sohu.com");
	customers[0].gender = 'f';
	strcpy(customers[0].name , "zs");
	strcpy(customers[0].phone , "110");

	mainMenu();

	return ;
}


自己完成的代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//项目-CRM系统(客户信息管理系统)-DQ版本1
const int size=100;//结构体数组大小
//客户结构体
struct Customer{
	int id;//编号
	char name[10];//姓名
	char sex[2];//性别
	int age;//年龄
	char phone[20];//电话
	char email[30];//邮箱
}cs[size];
//全局变量
//记住:结构体数组的下标从0开始,而客户编号从1开始
int loop=1;//判断菜单是否循环
char num='0';//用户选择的功能数字
int d=0;//用户选择要删除的客户编号
char c='c';//用户选择确认是否要删除的操作
int count=0;//现在存有的客户数量
char m='c';//用户选择是否要退出系统的操作
//添加客户
void add()
{
	printf("-----------添加客户-----------\n");
	//使用结构体数组去存储信息cs[count]
	printf("姓名:");
	scanf("%s",cs[count].name);
	getchar();
	printf("性别:");
	scanf("%s",cs[count].sex);
	getchar();
	printf("年龄:");
	scanf("%d",&cs[count].age);
	getchar();
	printf("电话:");
	scanf("%s",cs[count].phone);
	getchar();
	printf("邮箱:");
	scanf("%s",cs[count].email);
	getchar();
	cs[count].id=count+1;//客户编号从1开始
	count++;
	printf("-----------添加完成-----------\n");
}
//返回对应编号所对应的数组下标
int findindex(int id)
{
	int i;
	for(i=0;i<count;i++)
	{
		if(id==cs[i].id)
		{
			return i;//已找到id,对应的下标为i
		}
	}
	return -1;//没有找到id
}
//显示要修改的客户界面
void showUpdate(int index)
{	

	printf("姓名(%s):",cs[index].name);
	scanf("%s",cs[index].name);
	getchar();

	printf("性别(%s):",cs[index].sex);
	scanf("%s",cs[index].sex);
	getchar();

	printf("年龄(%d):",cs[index].age);
	scanf("%d",&cs[index].age);
	getchar();

	printf("电话(%s):",cs[index].phone);
	scanf("%s",cs[index].phone);
	getchar();

	printf("邮箱(%s):",cs[index].email);
	scanf("%s",cs[index].email);
	getchar();


}
//修改客户
void update()
{
	int id=0;
	printf("-----------修改客户-----------\n");
	printf("请输入要修改的客户的编号:");
	scanf("%d",&id);
	getchar();
	int index=findindex(id);
	if(index!=-1)//找到下标
	{
		showUpdate(index);
		printf("-----------修改完成-----------\n");

	}else
	{
		printf("没有此编号的客户!\n");

	}

}
//在删除之后重新排列结构体数组
void rearr(int d)
{
	int i;
	if(d<count)
	{
		for(i=d;i<count;i++)
		{
			cs[i]=cs[i+1];//如:把cs[1]的内容复制给cs[0]
			//修改编号
			cs[i].id-=1;//移动过来的数组的编号-1
		}
	}
	count--;//客户数量-1
}
//删除客户
void del(struct Customer*cs)
{
	printf("-----------删除客户-----------\n");
	printf("请选择要删除的客户编号:");
	scanf("%d",&d);
	getchar();//enter
	if(d>count)
	{
		printf("该编号的客户不存在!\n");
	}else
	{
		printf("确认是否删除(y/n):");
		scanf("%c",&c);
		if(c=='y')
		{
			rearr(d-1);//重新排列结构体
		}else if(c=='n')
		{
			printf("取消删除!\n");
		}else
		{
			printf("输入内容错误!\n");
		}
		getchar();
	}


	printf("-----------删除完成-----------\n");
}
//客户列表
void show(struct Customer*cs)
{
	printf("-----------客户列表-----------\n");
	printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\n");
	int i;
	for(i=0;i<count;i++)
	{
		printf("%d\t%s\t%s\t%d\t%s\t%s\n",(*cs).id,(*cs).name,(*cs).sex,(*cs).age,(*cs).phone,(*cs).email);
		cs++;
	}
	printf("----------客户列表完成--------\n");
}
//显示查找的客户信息
void showSeek(int index)
{
	printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\n");	
	printf("%d\t%s\t%s\t%d\t%s\t%s\n",cs[index].id,cs[index].name,cs[index].sex,cs[index].age,cs[index].phone,cs[index].email);
}
//查找客户
void seek()
{
	int id=0;
	printf("-----------查找客户-----------\n");
	printf("请输入要查找的客户的编号:");
	scanf("%d",&id);
	getchar();
	int index=findindex(id);
	if(index!=-1)//找到下标
	{
		showSeek(index);
		printf("-----------查找完成-----------\n");

	}else
	{
		printf("没有此编号的客户!\n");

	}
}
//退出
void esc()
{
	//do-while另外一种写法

	/*do{printf("请确认是否要退出(y/n):");
	scanf("%c",&m);
	getchar();
	}while(m!='y'&&m!='n');//输入的内容既不是y也不是n
	*/

	do{
		printf("请确认是否要退出(y/n):");
		scanf("%c",&m);
		getchar();
		if(m=='y'||m=='n')
		{
			break;//退出此do-while循环
		}else
		{
			printf("输入的内容错误!\n");
		}

	}while(1);

	if(m=='y')
	{
		loop=0;//退出系统
	}
}
//显示菜单
void menu(struct Customer*cs)
{

	do{
		printf("-------客户信息管理软件-------\n");
		printf("---------1.添加客户-----------\n---------2.修改客户-----------\n---------3.删除客户-----------\n---------4.客户列表-----------\n---------5.查找客户-----------\n---------6.退出---------------\n");
		printf("         请选择(1-6):");
		scanf("%c",&num);
		getchar();//enter
		switch(num)
		{
		case '1'://添加客户
			add();
			break;
		case '2'://修改客户
			update();
			break;
		case '3'://删除客户
			del(cs);
			break;
		case '4'://客户列表
			show(cs);
			break;
		case '5'://查找客户
			seek();
			break;
		case '6'://退出
			esc();
			break;
		default://用户输入其他内容时
			printf("输入的内容错误!");
			break;
		}
	}while(loop);
	printf("已退出CRM系统!\n");
}


int main()
{
	//初始化局部变量
	memset(cs,0,sizeof(cs));
	//cs是数组,直接传递首地址即可
	menu(cs);
	getchar();
	return 0;
}

完成代码遇到的知识点

C语言在void函数中使用return
如:

void add()
{
  return;
}

return表示中止当前函数的运行,并将操作权返回给调用者。
如果是在main函数中,表示将操作权返回给操作系统,return不是必须要返回一个值。

本文含有隐藏内容,请 开通VIP 后查看

微信公众号

今日签到

点亮在社区的每一天
去签到