⭐️前言⭐️
hello,大家好呀,我是陈童学。相信许多大学都会为选拔优秀人才举办校园竞赛,以赛来促学。但是许多大一的小伙伴可能担忧自己的实力没勇气参赛,亦或者是参赛后拿不到奖。其实我们根本无需担忧,只管鼓起勇气冲一波。省赛国赛咋不敢,区区校赛咋还不敢?不仅要敢,还要争做最强!(接下来请看我们拿下校第一的生猪系统)
因源代码较多,需要的小伙伴请在文末加我微信哈!
下面为系统框架图
⭐️目录⭐️
🍉一、产品概述
本系统是一款基于C/C++编写的养猪管理系统,旨在帮助养猪场主进行养殖管理、生产管理、财务管理和报表管理等工作。本系统适用于各类养猪场,包括规模较小的家庭养殖场和规模较大的商业养殖场。
🍉二、功能需求
这里只简单介绍我们系统的创新功能哈,基本的增、删、改、查就不介绍啦。
🍈1.信息录入
这里还是给大家介绍一下我们系统的录入把哈哈,因为我们录入的时候使用了个队列会优先使用空缺出来的编号。
先将储存生猪信息的文档中所有生猪信息提取存入到结构体数组中以及储存猪圈信息的文档中的猪圈信息提前存入到另一个结构体数组,然后可以选择单只生猪的信息录入,也可选择批次生猪信息录入,单只猪的录入输入该生猪的基本信息(自身编号、爸妈编号、猪圈编号、性别、重量、疫苗情况、健康状态、生日信息、信息状态、体温记录)然后再与之前的数据一并存回文档即可,批次猪的录入需要额外输入该批次猪的数量(不能超过单个猪圈的容量)以及其中公生猪数量和猪圈编号。值得注意的一点是,如果之前生猪的编号空出来后,会优先补齐前面的空出来的编号。
🍈2.筛选
利用switch语法,用户可以选择筛选优质猪,中等猪,劣质猪。
进行筛选后,将从文件里获取每头猪的信息,然后判断该猪是否符合成为该品质猪的条件。
最后,可以获得该类品质的总猪数量,及每个猪圈里该类品质猪的数量及id并进行输出。
🍈3.非近亲匹配查询
先将储存生猪信息的文档中所有生猪信息提取存入到结构体数组中,然后输入分别输入公生猪和母生猪的编号,如果两者为非近亲关系则会初步鉴定为可以交配生仔,若为近亲关系的话则不建议交配生仔且会给出与公生猪为非近亲关系的所有母生猪以及与母生猪为非近亲关系的公生猪,若不存在则输出暂无。
🍈 4.统计折线图
先设置图形库,然后设置背景颜色,然后根据读取的一维数组来进行折线图的绘制,先利用绘图函数绘制坐标轴,然后是折线,之后等待推出事件。
🍉三、代码实现
🍈1.结构体的定义
//存储生猪的基本信息
struct pig{
int id,mid,fid;//小猪自身编号,猪妈妈编号与猪爸爸编号
int pigsty;//猪圈编号
char sex;//性别
double weight;//重量
int vaccine;//疫苗是否接种
int health;//健康状态
char birthday[50]; //生日信息
int flag;//判断该信息是否有效
double temperature;//体温记录;
}pigs[100005];
//储存登入时所需的账号密码
struct node
{
char username[100];
char password[100];
}account[5];
🍈2.函数的定义
int loginSystem();//登入系统
void Information_storage();//信息回存
void Information_entry();//录入生猪信息
void Deletion_of_information();//删除生猪信息
void Query_information();//查询生猪信息
void Modify_the_information();//修改生猪信息
void Basic_functionlity();//基本菜单栏
void Isrelative();//生猪非近亲匹配查询
void screen();//筛选菜单栏
void SLQP();//筛选劣质生猪
void SMQP();//筛选中等生猪
void SHQP();//筛选优质生猪
void Graphical_presentation();//数据可直观化(折线图)
🍈3.相关功能函数
🍊1.信息录入
void Information_entry()
{
int num=1,pd1,i,j;//判断用于记录用户的选择
int pigstys[100][21];
fill(pigstys[0],pigstys[0]+100*21,0);
char ch1[30];//用于将信息文档开头一行的文字读取掉
FILE *fp=fopen("C:\\Users\\Administrator\\Desktop\\生猪信息储存.txt", "r");
FILE *fp2=fopen("C:\\Users\\Administrator\\Desktop\\猪圈信息记录.txt","r");
for(i=0;i<11;i++)
fscanf(fp,"%s",ch1);
while(fscanf(fp,"%d %d %d %d %c %lf %d %d %s %d %lf",&pigs[num].id,&pigs[num].mid,&pigs[num].fid,&pigs[num].pigsty,&pigs[num].sex,&pigs[num].weight,&pigs[num].vaccine,&pigs[num].health,pigs[num].birthday,&pigs[num].flag,&pigs[num].temperature)==11)
num++;
fclose(fp);
for(i=1;i<100;i++)
{
int s1=0;//用来计数,记录每个猪圈的猪数量
for(j=0;j<=20;j++)
{
fscanf(fp2,"%d",&pigstys[i][j]);
if(pigstys[i][j]!=0)
{
if(j!=0)
s1++;
}
}
pigstys[i][0]=s1;
}
fclose(fp2);
tiaochu1:
//system("cls");
int iid,mid,fid,pid,vac,hea;
char sex,bir[50];
double tem,wei;
printf("欢迎来到生猪信息录入系统!!\n单一生猪信息录入请输入1,同一批次生猪信息录入请输入2\n");
queue<int>q;//用于记录已经失效的生猪的id
for(i=1;i<=num;i++)
if(pigs[i].flag==0)
q.push(i);
scanf("%d",&pd1);
if(pd1==1)
{
int biao;//记录编号
if(q.empty())//当队列q为空,编号顺序递增即可
{
pigs[num].sex=sex;
pigs[num].flag = 1;
pigs[num].id=num;
biao= pigs[num].id;
pigs[num].mid = mid;
pigs[num].fid=fid;
pigs[num].pigsty=pid;
pigs[num].weight=wei;
pigs[num].vaccine=vac;
pigs[num].health=hea;
strcpy(pigs[num].birthday,bir);
pigs[num].temperature=tem;
num++;
}
else{
int t;
t = q.front();
pigs[t].id=t;
biao= pigs[t].id;
pigs[t].sex=sex;
pigs[t].flag = 1;
pigs[t].mid = mid;
pigs[t].fid=fid;
pigs[t].pigsty=pid;
pigs[t].weight=wei;
pigs[t].vaccine=vac;
pigs[num].health=hea;
strcpy(pigs[t].birthday,bir);
pigs[t].temperature=tem;
q.pop();
}
printf("请输入这只生猪的性别(公猪为M,母猪为W)");
getchar();
scanf("%c",&sex);
tiaochu3:
printf("请输入这只生猪的猪爸爸编号 ");
scanf("%d",&fid);
if(fid!=0)
{
if(pigs[fid].id==0||pigs[fid].flag==0)
{
printf("查无此编号,请重新输入猪爸爸编号!!");
goto tiaochu3;
}
if(pigs[fid].sex!='M')
{
printf("该编号的生猪性别为雌性,请重新输入猪爸爸编号!!");
goto tiaochu3;
}
}
tiaochu4:
printf("请输入这只生猪的猪妈妈编号 ");
scanf("%d",&mid);
if(mid!=0)
{
if(pigs[mid].id==0||pigs[mid].flag==0)
{
printf("查无此编号,请重新输入猪妈妈编号!!");
goto tiaochu4;
}
if(pigs[mid].sex!='W')
{
printf("该编号的生猪性别为雄性,请重新输入猪妈妈编号!!");
goto tiaochu4;
}
}
tiaochu7:
printf("请输入这只生猪的猪圈编号 ");
scanf("%d",&pid);
if(pid>100||pid<1)
{
printf("该猪圈不存在,请重新输入有效猪圈编号(1到100):");
goto tiaochu7;
}
if(pigstys[pid][0]<20)
pigstys[pid][0]++;
else if(pigstys[pid][0]>=20)
{
printf("该猪圈已满,请重新输入其他猪圈编号:");
goto tiaochu7;
}
printf("请输入这只生猪的体重 ");
scanf("%lf",&wei);
printf("请输入这只生猪的疫苗状况(1表示已经接种疫苗 0表示还未接种疫苗)");
scanf("%d",&vac);
printf("请输入这只生猪的实时温度 ");
scanf("%lf",&tem);
//getchar();
printf("请输入这只生猪的健康状态 (1表示健康,0表示非健康)");
scanf("%d",&hea);
//getchar();
printf("请输入这只生猪的生日(文字表达) ");
scanf("%s",bir);
if(q.empty())//当队列q为空,编号顺序递增即可
{
pigs[num].sex=sex;
pigs[num].flag = 1;
pigs[num].id=num;
pigs[num].mid = mid;
pigs[num].fid=fid;
pigs[num].pigsty=pid;
pigs[num].weight=wei;
pigs[num].vaccine=vac;
pigs[num].health=hea;
strcpy(pigs[num].birthday,bir);
pigs[num].temperature=tem;
num++;
}
else{
int t;
t = q.front();
pigs[t].id=t;
pigs[t].sex=sex;
pigs[t].flag = 1;
pigs[t].mid = mid;
pigs[t].fid=fid;
pigs[t].pigsty=pid;
pigs[t].weight=wei;
pigs[t].vaccine=vac;
pigs[num].health=hea;
strcpy(pigs[t].birthday,bir);
pigs[t].temperature=tem;
q.pop();
}
printf("生猪猪信息录入成功!!\n");
}
else if(pd1==2)
{
int s1,s2;//s1是指生猪的总数量,s2是指母猪的数量,s3是指公猪的数量
tiaochu9:
printf("请输入这批生猪的总数量");
scanf("%d",&s1);
if(s1>20)
{
printf("!录入失败,录入单批次生猪数量的上限为20,请重新输入该批次录入的生猪的总量:");
goto tiaochu9;
}
tiaochu10:
printf("请输入这批生猪的母猪数量");
scanf("%d",&s2);
if(s2>s1)
{
printf("!数据错误,同一批次内母猪数量不得大于生猪总数量!,请重新输入该批次的母猪的数量:");
goto tiaochu10;
}
/*int iid,mid,fid,pid,vac;
char sex,hea[50],bir[50];
double tem,wei; */
/*printf("请输入这批生猪的自身编号(第一只的即可) ");//猪爸爸编号 猪妈妈编号 猪圈编号 性别 体重 疫苗状况 健康状态 生日信息 实时体温)
scanf("%d",&iid);*/
tiaochu5:
printf("请输入这批生猪的猪爸爸编号 ");
scanf("%d",&fid);
if(fid!=0)
{
if(pigs[fid].id==0||pigs[fid].flag==0)
{
printf("查无此编号,请重新输入猪爸爸编号!!");
goto tiaochu5;
}
if(pigs[fid].sex!='M')
{
printf("该编号的生猪性别为雌性,请重新输入猪爸爸编号!!");
goto tiaochu5;
}
}
tiaochu6:
printf("请输入这批生猪的猪妈妈编号 ");
scanf("%d",&mid);
if(mid!=0)
{
if(pigs[mid].id==0||pigs[mid].flag==0)
{
printf("查无此编号,请重新输入猪妈妈编号!!");
goto tiaochu6;
}
if(pigs[mid].sex!='W')
{
printf("该编号的生猪性别为雄性,请重新输入猪妈妈编号!!");
goto tiaochu6;
}
}
tiaochu8:
printf("请输入这批生猪的猪圈编号 ");
scanf("%d",&pid);
if(pid>100||pid<1)
{
printf("该猪圈不存在,请重新输入有效猪圈编号(1到100):");
goto tiaochu8;
}
if(pigstys[pid][0]+s1>20)
{
printf("该猪圈容量不足!请重新输入猪圈编号:");
goto tiaochu8;
}
printf("请输入这批生猪的体重 ");
scanf("%lf",&wei);
printf("请输入这批生猪的疫苗状况(1表示已经接种疫苗 0表示还未接种疫苗) ");
scanf("%d",&vac);
printf("请输入这批生猪的健康状态(1表示健康,0表示非健康) ");
scanf("%d",&hea);
printf("请输入这批生猪的生日(文字表达) ");
scanf("%s",bir);
printf("请输入这批生猪的实时温度 ");
scanf("%lf",&tem);
for(int i=0;i<=s1;i++)
{
if(q.empty())
{
if(i<=s2)
pigs[num].sex='W';
else
pigs[num].sex='M';
pigs[num].id=num;
pigs[num].mid = mid;
pigs[num].fid=fid;
pigs[num].pigsty=pid;
pigs[num].weight=wei;
pigs[num].vaccine=vac;
pigs[num].health=hea;
strcpy(pigs[num].birthday,bir);
pigs[num].temperature=tem;
pigs[num].flag=1;
num++;
}
else
{
int t;
t=q.front();
if(i<s2)
pigs[t].sex='W';
else
pigs[t].sex='M';
pigs[t].id=t;
pigs[t].mid = mid;
pigs[t].fid=fid;
pigs[t].pigsty=pid;
pigs[t].weight=wei;
pigs[t].vaccine=vac;
pigs[num].health=hea;
strcpy(pigs[t].birthday,bir);
pigs[t].temperature=tem;
pigs[t].flag=1;
q.pop();
}
}
printf("该批次生猪信息录入成功!\n");
}
else
{
printf("无效输入,请重新输入选择!\n");
goto tiaochu1;
}
tiaochu2:
//while(getchar()!='\n');
printf("返回菜单请输入1,继续录入生猪信息请输入2\n");
int pd2;
scanf("%d",&pd2);
if(pd2==1)
{
Information_storage();
return;
}
else if(pd2==2)
{
goto tiaochu1;
Sleep(1500);
system("cls");
}
else
{
printf("无效输入!!请重新输入选择!");
goto tiaochu2;
}
}
🍊2.筛选
菜单栏:
void screen(){
while (true){
printf("请选择你要筛选的猪的品质:\n");
printf("1:优质猪\t2:中等猪\n");
printf("3:劣质猪\t4:退出\n");
int choice;
scanf("%d",&choice);
switch (choice) {
case 1:SHQP();//筛选优质猪
break;
case 2:SMQP();//筛选中等猪
break;
case 3:SLQP();//筛选劣质猪
break;
case 4:
printf("退出成功\n");
system("cls");
return;
default:
printf("非法输入,请重新输入\n");
}
}
}
筛选劣质生猪:
//筛选劣质猪
void SLQP() {
vector<int> pig_id[MAX];
int pigstys[MAX]={0};
int sum=0;
FILE *fp= fopen("C:\\Users\\Administrator\\Desktop\\生猪信息储存.txt","r");
fgets(str, 200, fp);
while(fscanf(fp,"%d %d %d %d %c %lf %d %d %s %d %lf",
&file_id,&file_mid,&file_fid,&file_pigsty,&file_sex,
&file_weight,&file_vaccine,&file_health,file_birth,
&file_flag,&file_temperature)==11)
{
if(file_weight<100){
sum++;
pigstys[file_pigsty]++;
pig_id[file_pigsty].push_back(file_id);
}
}
fclose(fp);
printf("劣质猪筛选成功\n");
printf("劣质猪数量为:");
printf("%d\n",sum);
if (sum==0){
printf("无劣质猪\n");
return;
}
for(int i=1;i<=MAX;i++){
if(pigstys[i]==0){
continue;
} else{
printf("%d猪圈劣质猪数量为:%d\n",i,pigstys[i]);
printf("此猪圈劣质猪id分别为:\n");
vector<int>::iterator it = pig_id[i].begin();
for(;it!=pig_id[i].end();it++){
printf("%d ",*it);
}
printf("\n");
}
}
}
筛选中等生猪:
//筛选中等猪
void SMQP() {
vector<int> pig_id[MAX];
int pigstys[MAX]={0};
int sum=0;
FILE *fp= fopen("C:\\Users\\Administrator\\Desktop\\生猪信息储存.txt","r");
fgets(str, 200, fp);
while(fscanf(fp,"%d %d %d %d %c %lf %d %d %s %d %lf",
&file_id,&file_mid,&file_fid,&file_pigsty,&file_sex,
&file_weight,&file_vaccine,&file_health,file_birth,
&file_flag,&file_temperature)==11)
{
if(file_weight>=100&&file_weight<150){
sum++;
pigstys[file_pigsty]++;
pig_id[file_pigsty].push_back(file_id);
}
}
fclose(fp);
printf("中等猪筛选成功\n");
printf("中等猪数量为:");
printf("%d\n",sum);
if (sum==0){
printf("无中等猪\n");
return;
}
for(int i=1;i<=MAX;i++){
if(pigstys[i]==0){
continue;
} else{
printf("%d猪圈中等猪数量为:%d\n",i,pigstys[i]);
printf("此猪圈中等猪id分别为:\n");
vector<int>::iterator it = pig_id[i].begin();
for(;it!=pig_id[i].end();it++){
printf("%d ",*it);
}
printf("\n");
}
}
}
筛选优质生猪:
//筛选优质猪
void SHQP() {
vector<int> pig_id[MAX];
int pigstys[MAX]={0};
int sum=0;
FILE *fp= fopen("C:\\Users\\Administrator\\Desktop\\生猪信息储存.txt","r");
fgets(str, 200, fp);
while(fscanf(fp,"%d %d %d %d %c %lf %d %d %s %d %lf",
&file_id,&file_mid,&file_fid,&file_pigsty,&file_sex,
&file_weight,&file_vaccine,&file_health,file_birth,
&file_flag,&file_temperature)==11)
{
if(file_weight>=150){
sum++;
pigstys[file_pigsty]++;
pig_id[file_pigsty].push_back(file_id);
}
}
fclose(fp);
printf("优质猪筛选成功\n");
printf("优质猪数量为:");
printf("%d\n",sum);
if (sum==0){
printf("无优质猪\n");
return;
}
for(int i=1;i<=MAX;i++){
if(pigstys[i]==0){
continue;
} else{
printf("%d猪圈优质猪数量为:%d\n",i,pigstys[i]);
printf("此猪圈优质猪id分别为:\n");
vector<int>::iterator it = pig_id[i].begin();
for(;it!=pig_id[i].end();it++){
printf("%d ",*it);
}
printf("\n");
}
}
}
🍊3.非近期匹配查询
//非近亲匹配
void Isrelative()
{
while(1)
{
printf("******************************************\n");
printf("\t欢迎来到生猪非近亲匹配查询界面\n");
printf("******************************************\n");
int num=1,i,j;
FILE *fp=fopen("C:\\Users\\Administrator\\Desktop\\生猪信息储存.txt", "r+");
char ch1[50];
for(i=0;i<11;i++)
fscanf(fp,"%s",ch1);
while(fscanf(fp,"%d %d %d %d %c %lf %d %d %s %d %lf",&pigs[num].id,&pigs[num].mid,&pigs[num].fid,&pigs[num].pigsty,&pigs[num].sex,&pigs[num].weight,&pigs[num].vaccine,&pigs[num].health,pigs[num].birthday,&pigs[num].flag,&pigs[num].temperature)==11)
num++;
fclose(fp);
int b1,b2;
int judge1=0,judge2=0;
printf("请输入【公生猪】的编号:");
again1:
scanf("%d",&b1);
if(b1<=0)
{
printf("输入有误,请重新输入:");
goto again1;
}
else
{
for(int j=1;j<num;j++)
{
if(pigs[j].id==b1&&pigs[b1].sex=='M')
{
judge1=1;
printf("编号为【%d】的【公生猪】存在!!!\n",b1);
break;
}
}
if(!judge1)
{
printf("不存在编号为【%d】的【公生猪】!!!!\n请重新输入:",b1);
goto again1;
}
}
if(judge1)
{
printf("请输入【母生猪】的编号:");
again2:
scanf("%d",&b2);
if(b1<=0)
{
printf("输入有误,请重新输入:");
goto again2;
}
else
{
for(int j=1;j<num;j++)
{
if(pigs[j].id==b2&&pigs[b2].sex=='W')
{
judge2=1;
printf("编号为【%d】的【母生猪】存在!!!\n",b2);
break;
}
}
if(!judge2)
{
printf("不存在编号为【%d】的【母生猪】!!!!\n请重新输入:",b2);
goto again2;
}
}
}
int judge3=0,judge4=0;
if(judge1&&judge1)
{
if(pigs[b1].mid==pigs[b2].mid||pigs[b2].fid==pigs[b2].fid)
{
printf("叮咚!!!编号为【%d】公生猪和【%d】的母生猪为【近亲】关系,不建议交配生仔!\n\n",b1,b2);
printf("与编号为【%d】的公生猪为【非近亲】关系的有以下编号的母生猪:\n");
for(int j=1;j<num;j++)
{
if( pigs[b1].mid!=pigs[j].id && pigs[b1].fid!=pigs[j].id && pigs[b1].mid!=pigs[j].mid && pigs[b1].fid!=pigs[j].fid&&pigs[j].sex=='W')
{
judge3=1;
printf("【%d】~",pigs[j].id);
}
}
printf("\n");
if(!judge3)
printf("暂无与编号为【%d】的公生猪为【非近亲】关系的母生猪哦!!!\n",b1);
for(int j=1;j<num;j++)
{
if( pigs[b2].mid!=pigs[j].id && pigs[b2].fid!=pigs[j].id && pigs[b2].mid!=pigs[j].mid && pigs[b2].fid!=pigs[j].fid&&pigs[j].sex=='M')
{
judge4=1;
printf("【%d】~",pigs[j].id);
}
}
printf("\n");
if(!judge4)
printf("暂无与编号为【%d】的母生猪为【非近亲】关系的公生猪哦!!!\n",b2);
}
else
printf("叮咚!!!编号为【%d】公生猪和【%d】的母生猪为【非近亲】关系,初步鉴定可以交配生仔\n",b1,b2);
}
int choice;
printf("是否还要进行非近亲匹配查询操作(1.是/2.否):");
again3:
scanf("%d",&choice);
if(choice==1)
{
system("cls");
continue;
}
else if(choice==2){
system("cls");
break;
}
else
{
printf("输入有误,请重新输入:");
goto again3;
}
}
}
🍊4.数据直观化
void Graphical_presentation()
{
int num=1,i,j;//判断用于记录用户的选择
char ch1[30];//用于将信息文档开头一行的文字读取掉
FILE *fp=fopen("C:\\Users\\Administrator\\Desktop\\生猪信息储存.txt", "r");
for(i=0;i<11;i++)
fscanf(fp,"%s",ch1);
while(fscanf(fp,"%d %d %d %d %c %lf %d %d %s %d %lf",&pigs[num].id,&pigs[num].mid,&pigs[num].fid,&pigs[num].pigsty,&pigs[num].sex,&pigs[num].weight,&pigs[num].vaccine,&pigs[num].health,pigs[num].birthday,&pigs[num].flag,&pigs[num].temperature)==11)
num++;
fclose(fp);
int gd = DETECT, gm;
initgraph(&gd, &gm, "n");
// 设置背景颜色
setbkcolor(WHITE);
// 定义数据数组
double data[num+1];
int w=0;
for(i=1;i<num;i++)
data[i-1]=pigs[i].weight;
// 绘制坐标轴
setcolor(BLACK);
line(50, 50, 50, SCREEN_HEIGHT - 50);
line(50, SCREEN_HEIGHT - 50, SCREEN_WIDTH - 50, SCREEN_HEIGHT - 50);
// 绘制折线
setcolor(BLUE);
setlinestyle(SOLID_LINE, 0, 3);
int x = 50, y = SCREEN_HEIGHT - 50;
for (int i = 0; i < 10; i++) {
int value = data[i] * 5; // 将数据乘以5,调整y轴的比例
int next_x = x + 50;
int next_y = SCREEN_HEIGHT - 50 - value;
line(x, y, next_x, next_y);
x = next_x;
y = next_y;
}
// 等待退出事件
getch();
closegraph();
return;
}
🍉四、文末福利
该生猪系统如果有小伙伴感兴趣的可以加我下方微信哈!
如果本文对你有用的话,恳请给个三连,感谢支持!