⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 com.c

📁 球队信息管理系统
💻 C
字号:
#include "common.h"
void newMember(MEMBER team[],int count)
{
    MEMBER news;
    float tmp;
    char tmpDate[10];
	if(count>=MAX){
		printf("存储空间已经到达最大,不能再新增队员信息了!");
		return;
	}
	do {
		printf("请输入新队员编号:\n");
		scanf("%s",&news.number);
		if(strlen(news.number)==0)continue;
		else
			if(unique(team,count,news.number)==1)break;
			else{printf("编号重复!");
			}
	}while(1);
	printf("请输入新队员姓名:\n");
    while(strlen(gets(news.name))==0)// 输入不能为空串
	{
		//	printf("请重新输入新队员姓名:\n");
		continue;
	}
	printf("请选择新队员角色(0-前锋 1-中场 2-后卫 3- 守门员) \n");
	while(1){while(scanf("%d",&news.role)!=1)
	{scanf("%*s");//跳到行输入缓冲区下一个空白字符
	printf("请重新输入角色!\n");
	}
	if(news.role>=0&&news.role<=3)break;
	else{printf("请输入0~3中的一个整数:\n");
		  printf("请输入新队员角色(0-前锋  1-中场  2-后卫  3-守门员):\n");
	}
	}
	printf("请输入新队员年龄:\n");
	while(scanf("%d",&news.age)!=1){//输入不是%d格式,需要重新输入
		scanf("%*s");//跳到行输入缓冲区下一个空白字符
		printf("请重新输入年龄!\n");
	}
    printf("请输入新队员身高(单位:厘米):\n");//输入不是%f格式,需要重新输入
	while(scanf("%f",&tmp)!=1){
		scanf("%*s");//跳到行输入缓冲区下一个空白字符
		printf("请重新输入身高!\n");
	}
	news.high=tmp;
    printf("请输入新队员体重(单位:公斤):\n");
	while(scanf("%f",&tmp)!=1){//输入不是%f格式,需要重新输入
		scanf("%*s");//跳到行输入缓冲区下一个空白字符
		printf("请重新输入体重!\n");
	}	
	news.weight=tmp;
    printf("请输入新队员薪水(单位:人民币元/月):\n");
	while(scanf("%f",&tmp)!=1){//输入不是%f格式,需要重新输入
		scanf("%*s");//跳到行输入缓冲区下一个空白字符
		printf("请重新输入薪水!\n");
	}
	news.salary=tmp;
	while(getchar()!='\n')//清空行输入缓冲区
		continue;
	do{
		printf("请输入新队员加入日期(使用半角字符,格式:yy-mm-dd):\n");
		gets(tmpDate);
		
		if(checkDate(&news, &tmpDate)==1)
			break;
		
	}while(1);
    team[count]=news;
}
/*********************************************************
函数名:writeToFile
**********************************************************/
void writeToFile(MEMBER team[],int count){
	MEMBER member;
	int i;
	FILE *fp; 
	if((fp=fopen("c:\\team.dat","wb+"))==NULL)
	{  printf("cannot open file strike any key exit!");
	getch();
	exit(1);
	}
	
	fp=fopen(FILENAME,"wb");
	for(i=0;i<count;i++){//没有到尾,继续
		fwrite(&(team[i]),sizeof(MEMBER),1,fp);//将一个接点写到文件
	}
	fclose(fp);	 
}
/*********************************************************
函数名:list
**********************************************************/
void List(MEMBER team[],int count){
	
	int i;
	printf("%3s%8s%7s%9s%5s%10s%8s%8s%12s\n\n","Id","Number","Name","Role","Age","High","Weight","Salary","JoinDate");
	for(i=0;i<count;i++){
		printf("%3d%6s%9s%9s%4d%10.2f%8.2f%10.2f%5d-%2d-%2d\n",i+1,team[i].number,team[i].name,roleSet[team[i].role],team[i].age,team[i].high,team[i].weight,team[i].salary,team[i].joinDate.year,team[i].joinDate.month,team[i].joinDate.day);
		//printf("%3d%8s%15s%13s\n",i+1,team[i].number,team[i].name,roleSet[team[i].role]);
		if((i+1)%20==0)//分屏显示,每输出20条记录暂停
			getch();
	}
}
/*********************************************************
函数名:unique
形参:存放队员信息的数组,数组中已有的队员人数,要判断的编
号字符指针number
返回值:编号已经存在返回0,编号不存在返回1
函数功能:判断新输入的编号在数组中是否已经存在
**********************************************************/
int unique(MEMBER team[],int count,char*number )
{int i;
int flag=1;
for(i=0;i<count;i++)
{if(strcmp(team[i].number,number)==0)
{flag=0;
break;
}
}
return flag;
}

/*********************************************************
函数名:checkDate
**********************************************************/
int checkDate(MEMBER *pmember,char *tmpDate)
{
	int i,d[8],flag=1;
    MEMBER member=*pmember;
    puts(tmpDate);
	do{
		if(strlen(tmpDate)!=8){
			flag=0;
			break;
		}else if(tmpDate[0]<'0'||tmpDate[0]>'9'){
			flag=0;
			break;
		}else if(tmpDate[0]<'0'||tmpDate[1]>'9'){
			flag=0;
			break;
		}else if(tmpDate[2]!='-'){
			flag=0;
			break;
		}else if(tmpDate[3]<'0'||tmpDate[3]>'9'){
			flag=0;
			break;
		}else if(tmpDate[4]<'0'||tmpDate[4]>'9'){
			flag=0;
			break;
		}else if(tmpDate[5]!='-'){
			flag=0;
			break;
		}else if(tmpDate[6]<'0'||tmpDate[6]>'9'){
			flag=0;
			break;
		}else if(tmpDate[7]<'0'||tmpDate[7]>'9'){
			flag=0;
			break;
		}
		for(i=0;i<strlen(tmpDate);i++)
			d[i]=tmpDate[i]-'0';
		member.joinDate.year=10*d[0]+d[1];
		member.joinDate.month=10*d[3]+d[4];
		member.joinDate.day=10*d[6]+d[7];
		if(member.joinDate.month<0||member.joinDate.month>12){
			flag=0;
			break;
		}else if(member.joinDate.day<0||member.joinDate.day>31){
			flag=0;
			break;
		}
		*pmember=member;
	}while(!flag);
	if(!flag)printf("所输入日期格式不对,请重新输入!\n");
	return flag;
}
/*********************************************************
函数名:loadFromFile
绘图-文件加载的流程图
形参:要加载到结构数组team
返回值:数组中的总人数count
函数功能:从文件中把数据全部读出保存到数组
**********************************************************/
int loadFromFile(MEMBER team[]){
    MEMBER member;
    FILE *fp=fopen(FILENAME,"rb");
	int count=0;
	if(fp==NULL){char c;
	printf("文件打开错误或文件不存在!\n");
	printf("需要新建一个文件吗?(y/n)\n");
	c=getche();
	if(c=='Y'||c=='y'){
		fp=fopen(FILENAME,"wb");
		fclose(fp);
		fp=fopen(FILENAME,"rb");
	}else
	{printf("\n\n程序即将结束!\n");
	exit(1);
	}
	}
	if (fread(&member,sizeof(MEMBER),1,fp)==0){
		printf("文件中没有数据!\n");
	}else{
		team[count]=member;
		count++;
		while(!feof(fp)){
			if(fread(&member,sizeof(MEMBER),1,fp)==1){  
			             team[count]=member;
						 count++;
			}
		}
	}
	fclose(fp);
	return count;
}

/*********************************************************
函数名:sortByName
**********************************************************/
void sortName(MEMBER team[],int count,char c){
	MEMBER tmp;
	int i,j,m;
	for(i=0;i<count-1;i++){
		m=i;
		for(j=i+1;j<count;j++){
			switch(c){
			case '1'://按姓名升序插入
				if(strcmp(team[j].name,team[m].name)<0)
					m=j;
				break;
			case'2'://按姓名降序插入
				if(strcmp(team[j].name,team[m].name)>0)
					m=j;
				break;
			default://默认,按编号升序输入
				if(strcmp(team[j].number,team[m].number)<0)
					m=j;
			}
		}
	}tmp=team[i];
	team[i]=team[m];
	team[m]=tmp;
}
/*********************************************************
函数名:sortBySalary
**********************************************************/
void sortSalary(MEMBER team[],int count,char c)
{
    MEMBER tmp;
    int i,j,m;
	for(i=0;i<count-1;i++)
	{
		m=i;
		for(j=i+1;j<count;j++)
		{
			switch(c){
			case '1'://按薪水升序插入
				if(team[j].salary<team[m].salary)
					m=j;
				break;
			case'2'://按薪水降序插入
				if(team[j].salary>team[m].salary)
					m=j;
				break;
			default://默认,按编号升序输入
				if(strcmp(team[j].number,team[m].number)<0)
					m=j;
			}
		}tmp=team[i];
		team[i]=team[m];
		team[m]=tmp;
	}
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -