手机用户意向统计程序设计(C/C++)

本文介绍了一个基于C语言实现的手机意向调查分析系统。该系统能够处理大量问卷数据,通过链表存储数据并提供多种查询功能,如身份、年龄、性别等分布比例及相互之间的关系分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

又是这种类似于课程设计的课,并且要求收集50份问卷

出于觉得50份样本数量太小,于是用随机数打了个样本10000的进行实验(恩就是懒得去收表子)

因为只设置了6个问题,就随便弄了分数据

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	srand(time(0));
	FILE *w=fopen("A.txt","w");
	for(int i=0;i<10000;i++)
	{
		int a[7];
		a[0]=rand()%4;
		a[1]=rand()%4;
		a[2]=rand()%2;
		a[3]=rand()%4;
		a[4]=rand()%6;
		a[5]=rand()%7;
		fprintf(w,"%d %d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
	}
	fprintf(w,"^Z\n");
}


然后就是保留一下正文代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void pricemenu(char a,char b,char c);      //选取价格范围目录 
void perfmenu(char a,char b,char c);       //选取手机性能目录 
void brandsmenu(char a,char b,char c);     //选取手机品牌目录 
void submenu();                            // 子目录 
void subsonmenu(char a,char b);            //子子目录 
void headmenu();                           //首页 
void w_between_w(char a,char b,char c,char d);   //计算相关性 
void f1();                                 //计算身份比例 
void f2();								   //计算年龄比例 
void f3();								   //计算性别比例 
void f4();								   //计算价格范围比例 
void f5();								   //计算计算手机性能比例 
void f6();								   //计算手机品牌期望比例 
void ff1(char a);						   //身份内部选择 
void ff2(char a);						   //年龄内部选择 
void ff3(char a);						   //性别内部选择 
int search(int a,int b,int c,int d);       //查找函数  简单的链表搜索 
void createdate();                         //创建链表 读取txt格式 
double num_people,num_sub[20][20];         //记录总人数,和各项人数 
struct tree
{
	int node[10];                         //记录各项选择 
	tree * next;						   //下一个地址 
};
tree * head;                               //头指针 
char f[20][20][20]={{"学生","体力劳动者","脑力劳动者","无工作者"},
				   {"小于18岁","18到30岁","30到50岁","大于50岁"},
				   {"男","女"},
				   {"小于2000元","2000到3000元","3000到4000元","大于4000元"},
				   {"屏幕大小","颜色","待机时间","拍照像素","音响效果","不在意"},
				   {"苹果","小米","华为","三星","魅族","OPPO","其他"}};
int search(int a,int b,int c,int d)
{
	tree *p=head;
	int ans=0;
	while(p!=NULL)
	{
		//t++;
		if(p->node[a]==b&&p->node[c]==d)
		ans++;
		p=p->next;
	}
	return ans;
}
void w_between_w(char a,char b,char c,char d)
{
	c+=3;
	printf("%s与%s的关系比例为:%.2lf%%\n",f[a-'1'][b-'0'],f[c-'1'][d-'0'],100*search(a-'1',b-'0',c-'1',d-'0')/num_sub[c-'1'][d-'0']);
	headmenu();
}
void pricemenu(char a,char b,char c)
{
	printf("0.小于2000  1.2000到3000 2.3000到4000 3.大于4000\n");
	printf("4.返回上一层\n");
	char d=getchar();getchar();
	switch(d)
	{
		case '0':
		case '1':
		case '2':
		case '3': w_between_w(a,b,c,d);break;
		case '4': subsonmenu(a,b);break; 
		default:printf("无效操作\n");pricemenu(a,b,c);break; 
	}
}
void perfmenu(char a,char b,char c)
{
	printf("0.屏幕大小 1.颜色 2.待机时间 3.拍照像素 4.音响效果 5.不在意\n");
	printf("6.返回上一层\n");
	char d=getchar();getchar();
	switch(d)
	{
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5': w_between_w(a,b,c,d);break;
		case '6': subsonmenu(a,b);break;
		default:printf("无效操作\n");perfmenu(a,b,c);break; 
	}
}
void brandsmenu(char a,char b,char c)
{
	printf("0.苹果 1.小米 2.华为 3.三星 4.魅族 5.OPPO 6.其他\n");
	printf("7.返回上一层\n");
	char d=getchar();getchar();
	switch(d)
	{
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6': w_between_w(a,b,c,d);break;
		case '7': subsonmenu(a,b);break;
		default:printf("无效操作\n");brandsmenu(a,b,c);break; 
	}
}
void ff1(char a)
{
	printf("0.学生\n");
	printf("1.体力劳动者\n");
	printf("2.脑力劳动者\n");
	printf("3.无工作者\n");
	printf("4.返回上层\n");
	char b=getchar();getchar();
	switch(b)
	{
		case '0':
		case '1':
		case '2':
		case '3':subsonmenu(a,b);break;
		case '4':submenu();
		default:printf("无效操作\n");
	} 
}
void ff2(char a)
{
	printf("0.小于18岁\n");
	printf("1.18岁到30岁\n");
	printf("2.30岁到50岁\n");
	printf("3.大于50岁\n");
	printf("4.返回上层\n");
	char b=getchar();getchar();
	switch(b)
	{
		case '0':
		case '1':
		case '2':
		case '3':subsonmenu(a,b);break;
		case '4':submenu();
		default:printf("无效操作\n");
	} 
}
void ff3(char a)
{
	printf("0.男\n");
	printf("1.女\n");
	printf("2.返回上层\n");
	char b=getchar();getchar();
	switch(b)
	{
		case '0':
		case '1':subsonmenu(a,b);break;
		case '2':submenu();
		default:printf("无效操作\n");
	} 
}
void submenu()
{
	printf("1.查询身份关系\n");
	printf("2.查询年龄关系\n");
	printf("3.查询性别关系\n");
	printf("4.返回主界面\n");
	char a=getchar();getchar();
	switch(a)
	{
		case '1':ff1(a);break;
		case '2':ff2(a);break;
		case '3':ff3(a);break;
		case '4':headmenu();break;
		default: printf("无效操作\n");submenu();break;
	}
}
void subsonmenu(char a,char b)
{
	printf("1. 查询与价格范围的关系\n");
	printf("2. 查询与手机性能的关系\n");
	printf("3. 查询与手机品牌的关系\n");
	printf("4. 返回上一层\n");
	printf("5. 返回主界面\n"); 
	char c=getchar();getchar();
	switch(c)
	{
		case '1':pricemenu(a,b,c);break;
		case '2':perfmenu(a,b,c);break;
		case '3': brandsmenu(a,b,c);break;
		case '4':submenu();break;
		case '5':headmenu();break;
		default:printf("无效操作\n");subsonmenu(a,b);break; 
	}
}
void f1()
{
	printf("学生:%.2lf%%  体力工作者:%.2lf%%  脑力劳动者:%.2lf%% 无工作:%.2lf%%\n",100.0*num_sub[0][0]/num_people,100.0*num_sub[0][1]/num_people,100.0*num_sub[0][2]/num_people,100*num_sub[0][3]/num_people);
	headmenu();
}

void f2()
{
	printf("小于18岁:%.2lf%% 2.18到30岁:%.2lf%%  30到50岁:%.2lf%%  大于50岁:%.2lf%%\n",100.0*num_sub[1][0]/num_people,100.0*num_sub[1][1]/num_people,100.0*num_sub[1][2]/num_people,100.0*num_sub[1][3]/num_people);
	headmenu();
}
void f3()
{
	printf("男:%.2lf%%  女:%.2lf%%\n",100.0*num_sub[2][0]/num_people,100.0*num_sub[2][1]/num_people);
	headmenu();
}
void f4()
{
	printf("小于2000:%.2lf%%  2000到3000:%.2lf%%  3000到4000:%.2lf%%  大于4000:%.2lf%%\n",100.0*num_sub[3][0]/num_people,100.0*num_sub[3][1]/num_people,100.0*num_sub[3][2]/num_people,100.0*num_sub[3][3]/num_people);
	headmenu();
}
void f5()
{
	printf("屏幕大小:%.2lf%%  颜色:%.2lf%%  待机时间:%.2lf%%  拍照像素:%.2lf%%  音响效果:%.2lf%%  不在意:%.2lf%%\n",100.0*num_sub[4][0]/num_people,100.0*num_sub[4][1]/num_people,100.0*num_sub[4][2]/num_people,100.0*num_sub[4][3]/num_people,100.0*num_sub[4][4]/num_people,100.0*num_sub[4][5]/num_people);
	headmenu();
}
void f6()
{
	printf("苹果:%.2lf%%  小米:%.2lf%%  华为:%.2lf%%  三星:%.2lf%%  魅族:%.2lf%%  OPPO:%.2lf%%  其他:%.2lf%%\n",100.0*num_sub[5][0]/num_people,100.0*num_sub[5][1]/num_people,100.0*num_sub[5][2]/num_people,100.0*num_sub[5][3]/num_people,100.0*num_sub[5][4]/num_people,100.0*num_sub[5][5]/num_people,100.0*num_sub[5][6]/num_people);
	headmenu();
}
void headmenu()
{
	printf("手机意向调查表\n");
	printf("1. 查询调查表身份比例\n");
	printf("2. 查询调查表年龄分布\n");
	printf("3. 查询调查表性别比例\n"); 
	printf("4. 查询调查表可接受价格范围比例\n");
	printf("5. 查询调查表看重性能比例\n");
	printf("6. 查询调查表各手机品牌受众比例\n");
	printf("7. 查询指标与年龄,性别,身份的关系\n");
	printf("输入'q'退出\n");
	char a=getchar();getchar();
	switch(a)
	{
		case '1': f1();break;
		case '2': f2();break;
		case '3': f3();break;
		case '4': f4();break;
		case '5': f5();break;
		case '6': f6();break;
		case '7': submenu();break;
		case 'Q':
		case 'q':break;
		default: printf("无效操作\n");headmenu();break;
	}
}
void createdate()
{
	head=new tree;
	head=NULL;
	int a[10];
	tree *q=head;
	memset(num_sub,0,sizeof(num_sub));
	num_people=0;
	FILE * r=fopen("A.txt","r");
	while(fscanf(r,"%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5])==6)
	{
		
		tree * p;
		p=new tree;
		for(int i=0;i<6;i++)
		{
			p->node[i]=a[i];
			num_sub[i][a[i]]++;
		}
		p->next=NULL;
		if(head==NULL)
		head=p;
		else
		q->next=p;
		q=p;
		num_people++;
	}
}
int main()
{
	createdate();
	headmenu();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值