📄 com.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 + -