编辑代码

#include<stdio.h>
#include<stdlib.h>


#define N 20
//声明函数
void menu();	//主菜单 
void help();	//系统帮助及说明
void refresh();	//刷新人员信息 
void seek();	//查询人员信息 
void modify();	//修改人员信息 
void add();		//增加人员信息 
void del();		//按编号删除信息
void display();	//显示当前信息 
void save();	//保存当前人员信息 
void cprint();//个人信息输出
void sort();//排序 
int k=1,n=0;	//设置全局变量 
//结构体
struct Person{
	char no[10+1];	//用户编号
	char id[18+1];	//用户身份证编号
	char name[10+1];	//用户姓名
	char sex[2];	//用户性别
	int age;		//用户年龄
	char phone_num[11+1];	//用户手机号码 
	int health;		//用户健康状况
	float temp[14];//14天体温
	float record_temp[2];//体温范围 
	int flag;
	
}
    per[N]; 

int main(){
	while(k){
		menu();
	}
}

void menu(){//主菜单
	int num=-1; 
	printf("\n");
	printf(" **********************************************************\n\n");
	printf(" *                    疫防控信息管理系统                    *\n");
	printf(" **********************************************************\n\n");
	printf("*************************系统功能菜单***********************\n");
	printf("    -------------------------     ------------------------\n");
	printf("    *****************************************************\n");
	printf("    * 0.系统帮助及说明      * * 1.刷新人员信息          *\n");
	printf("    *****************************************************\n");
	printf("    * 2.查询人员信息        * * 3.修改人员信息          *\n");
	printf("    *****************************************************\n");
	printf("    * 4.增加人员信息        * * 5.按编号删除信息        *\n");
	printf("    *****************************************************\n");
	printf("    * 6.显示当前信息        * * 7.保存当前人员信息      *\n");
	printf("    *****************************************************\n");
	printf("    * 8.退出系统            *\n");
	printf("    **************************\n");
	printf("    -------------------------    ------------------------\n");
	printf("请选择菜单编号: ");
	scanf("%d",&num);
	switch(num){
		case 0:help();break;
		case 1:refresh();break;
		case 2:seek();break;
		case 3:modify();break;
		case 4:add();break;
		case 5:del();break;
		case 6:display();break;
		case 7:save();break;
		case 8: k=0;break;
		default: printf("请输入0~8的编号"); 
		} 
	}


void help(){//系统帮助及说明 
	printf("-----------------系统帮助信息-----------------\n\n");
	printf("1.欢迎使用系统帮助!\n\n");
	printf("2.初次进人系统后,请先刷新信息,再执行其他操作;若文件不存在或者没有内容,请选择增加人员信息。\n\n");
	printf("3.按照菜单提示键入数字编号。\n\n");
	printf("4.退出程序之前要保存当前信息。\n\n");
	system("pause");//暂停当前系统程序 
}

void refresh(){//刷新人员信息
	FILE *fp=NULL;	//文件指针 
	int i=0,j;
	char s[N*10];
	fp = fopen("record.csv","r");	//以只读方式打开文件 r 只读 w 写入 
	fscanf(fp,"%s\n",&s);	//读取数据文件 
	while(fscanf(fp,"%s\n",&s)!=EOF)	//EOF	end of file 文件结束符 
	{
		char *ptr,*retptr;
		j=0;
		ptr=s;
		while((retptr=strtok(ptr,","))!=NULL)	//逗号分隔字符串 
		{
			switch(j)
			{
				case 0:
					strcpy(per[i].no,retptr);
					break;
				case 1:
					strcpy(per[i].name,retptr);
					break;
				case 2:
					per[i].age=atoi(retptr);
					break;
				case 3:
					strcpy(per[i].sex,retptr);
					break;
				case 4:
					strcpy(per[i].id,retptr);
					break;
				case 5:
					strcpy(per[i].phone_num,retptr);
					break;
				case 6:	
					per[i].health=atoi(retptr);
					break;
			}
			j++;
			ptr=NULL;
		}
		i++;
	}
	fclose(fp);	//关闭文件
	n=i;
	display(); 
}

void seek(){//查询人员信息
	int i,item,flag;
	char s1[N+1]; 
	printf("----------------------\n");
	printf("-----1.按编号查询-----\n");
	printf("-----2.按姓名查询-----\n");
	printf("-----3.按ID号查询-----\n");
	printf("-----4.退出本菜单-----\n");
	printf("----------------------\n");
	while(1)
	{
		printf("请选择子菜单编号:");
		scanf("%d",&item);
		flag=0;
		switch(item)
		{
			case 1:
				printf("请输入要查询的人员编号:\n");
				scanf("%s",s1);
				for(i=0;i<n;i++)
				if(strcmp(per[i].no,s1)==0){
					flag=1;
					printf(&per[i]);
					break;
				}
				if(0==flag)
				printf("该编号不存在!\n");
				break;
			case 2:
				printf("请输入要查询的人员姓名:\n");
				scanf("%s",s1);
				for(i<0;i<n;i)
				if(strcmp(per[i].name,s1)==0){
					flag=1;
					printf(&per[i]);
					break;
				}
	    }
		
	}

}

void modify(){//修改人员信息
 int n,num=-1,i,item;
 char s1[10+1];
 printf("请输入要修改的人员的编号:\n ");
 scanf("%s",&s1);
 for(i=0;i<n;i++){
  if(strcmp(per[i].no,s1)==0)
  num=i;
 }
 if(num!=-1)
 printf("--------------------\n");
 printf("1.修改姓名\n");
 printf("2.修改年龄\n");
 printf("3.修改性别\n");
 printf("4.修改身份证号码\n");
 printf("5.修改手机号码\n");
 printf("6.退出本菜单\n");
 printf("--------------------\n");
 while(1)
 {
  printf("请选择子菜单编号:");
  scanf("%d",&item);
  switch(item)
  {
   case 1:
    printf("请输入新的姓名:\n");
    scanf("%s",s1);
    strcpy(per[num].name,s1);break;
   case 2:
    printf("请输入新的年龄:\n"); 
    scanf("%d",&per[num].age);break;
   case 3:
    printf("请输入新的性别:\n");
    scanf("%s",s1);
    strcpy(per[num].sex,s1);break; 
   case 4:
    printf("请输入新的身份证号:\n");
    scanf("%s",s1);
    strcpy(per[num].id,s1);break; 
   case 5:
    printf("请输入新的手机号码:\n");
    scanf("%s",s1);
    strcpy(per[num].phone_num,s1);break; 
   case 6:
    return;
   default:
       printf("请在1-6之间选择\n"); 
   } 
  } 
}

 


void add(){//增加人员信息
    int i=n,j,flag,m;//n为现有人员人数 
	printf("请输入待增加人员数:\n");
	 scanf("%d",&m);
	 if(m>0){
	 	do
	    {
	       flag=1;
	       while(flag){
	       	flag=0;
	       	printf("请输入第%d位人员的编号:\n",i+1);
	       	scanf("%s",&per[i].no);
	       	for(j=0;j<i;j++){//与之前已有编号比较,如果重复,则置flag为0,重新进入循环体 
	       		if(strcmp(per[i].no,per[j].no)==0){
	       			printf("已有该编号,请检查后输入!\n");
	       			flag=1;
	       			break;//如有重复立即推出该层循环,提高判断速度 
				   }
			   }
		   }
 printf("请输入第%d位人员的姓名:\n",i+1);
 scanf("%s",&per[i].name);
 printf("请输入第%d位人员的年龄:\n",i+1);
 scanf("%s",&per[i].age);
 printf("请输入第%d位人员的性别:\n",i+1);
 scanf("%s",&per[i].sex);
 printf("请输入第%d位人员的身份证号码:\n",i+1);
 scanf("%s",&per[i].id);
 printf("请输入第%d位人员的手机号码:\n",i+1);
 scanf("%s",&per[i].phone_num);
 printf("请输入第%d位人员的当前身体状况(0-绿 1-黄 2-红):\n",i+1);
 scanf("%s",&per[i].flag);
 i++; 
}
  while(i<n+m);
  n+=m;
  printf("信息增加完毕!\n\n");//sort(); //实现人员编号的排序 
}
else{
	printf("新增数量有限!将退回首页...\n\n");
}
system("pause"); 
}
void del(){//删除人员信息
 
}

void display(){//显示当前信息 
	int i,j;
	int r_tab=9,c_tab=7;
	printf("共有%d位人员信息:\n",n);
	if(0!=n) {
		printf("%c",' ');
		for(i=0; i<r_tab*c_tab-1+13; i++) {
			printf("%c",'-');
		}
		printf("\n");
		printf("|%-8s|%-8s|%-8s|%-8s|%-18s|%-11s|%-8.1s|\n","编号","姓名","年龄","性别","身份证号","手机号码","健康状况");
		printf("%c",' ');
		for(i=0; i<r_tab*c_tab-1+13; i++){
			printf("%c",'-');
		}
		printf("\n");
		for(j=0; j<n; j++) {
			printf("|%-8s|%-8s|%-8d|%-8s|%-18s|%-11d|%-8.1f|\n",per[j].no,per[j].name,per[j].age,
			       per[j].sex,per[j].id,per[j].phone_num,per[j].health);
			printf("%c",' ');
			for(i=0; i<r_tab*c_tab-1+13; i++){
				printf("%c",'-');
			}
			printf("\n");
		}

	}
	system("pause");
}

void print(struct Person *p){
		int i,j;
	int r_tab=9,c_tab=7;
	printf("共有%d位人员信息:\n",n);
	if(0!=n) {
		printf("%c",' ');
		for(i=0; i<r_tab*c_tab-1+13; i++) {
			printf("%c",'-');
		}
		printf("\n");
		printf("|%-8s|%-8s|%-8s|%-8s|%-18s|%-11s|%-8s|\n","编号","姓名","年龄","性别","身份证号","手机号码","健康状况");
		printf("%c",' ');
		for(i=0; i<r_tab*c_tab-1+13; i++){
			printf("%c",'-');
		}
		printf("\n");
		for(j=0; j<n; j++) {
			printf("|%-8s|%-8s|%-8d|%-8s|%-18s|%-11d|%-8.1f|\n",per[j].no,per[j].name,per[j].age,
			       per[j].sex,per[j].id,per[j].phone_num,per[j].health);
			printf("%c",' ');
			for(i=0; i<r_tab*c_tab-1+13; i++){
				printf("%c",'-');
			}
			printf("\n");
		}

	}
	system("pause");
	
}

void save(){//保存人员信息
    FILE *fp=NULL;
    int i;
    fp=fopen("record.csv","w");
    for(i=0;i<n;i++){
    	fprintf(fp,"%s,%s,%d,%s,%s,%s,%d\n",per[i].no,per[i].name,
    	per[i].age,per[i].sex,per[i].id,per[i].phone_num,per[i].flag);
	}
    fclose(fp);
    printf("已经保存完成!");
	system("pause"); 
}
void cprint(struct Person*p){//个人信息输出
 int r_tab=9,c_tab=8,i;
 printf("%c",' ');
 for(i=0;i<r_tab*c_tab-1+10;i++){
 	printf("%c",+'-');
 }
 printf("\n");
 printf("|%-8s|%-8s|%-8s|%-8s|%-18s|%-8s|%-8s|%-8s|\n","人员编号",\
 "人员姓名","年龄","性别","身份证号","健康状况","最高体温","最低体温");
 printf("%c",' ');
 for(i=0;i<r_tab*c_tab-1+10;i++){
 	printf("%c",'-');
 }
 printf("\n");
 printf("|%8s|%8s|%8d|%8s|%18s|%8d|%8.1f|%8.1f|\n",p->no,p->name,p->age,
 p->sex,p->id,p->flag,p->record_temp[0],p->record_temp[1]);
 printf("%c",' ');
 for(i=0;i<r_tab*c_tab-1+10;i++){
 	printf("%c",'-');
    }
    printf("\n");
    system("pause");
}
void sort(){//排序
    int i,j;
	struct Person p;
	for(i=0;i<n-1;i++){
		for(j=n-1;j>j;j--){
			if(strcmp(per[j-1].no,per[j].no)>0){
				p=per[j];
				per[j]=per[j-1];
				per[j-1]=p;
			}
		}
	} 
}