学员信息管理系统C代码分享

#include 
#include 
//声明函数
int menu();
void init();
void listStu();
int insertNewStu(int row);
int getStuRowByNo(char no[]);
int deleteByNo();
void analyse(char c[]);
int queryByNo();
int modifyInfoByNo();
/******************************************************************
	students保存最多50名学生信息,每行通过-$-字符串分隔,
	stu_num表示已存在的学生数目,假设存在2名学员
*********************************************************************/
//定义全局变量 
char students[100][200];   //定义二维数组 
int stu_num=2;       //目前存在的学生数目 
/*************************************************************
			主函数内容 
*************************************************************/
void main(){	
	//定义变量,接受函数返回值
	int opt;  
	int result=1;   	
	init(); 
	
	while(result){
		opt=menu();		//调用函数
		if(result==0){
			break;
		} 
		switch(opt)		//根据用户的输入,执行不同的操作
		{
		case 1:
			//printf("\t执行的操作:输入学员的资料。\n");
			result=insertNewStu(stu_num);
			stu_num=stu_num+1;
			break;
		case 2:
			//printf("\t执行的操作:删除学员资料。\n");
			result=deleteByNo(); 
			stu_num=stu_num-1;
			break;
		case 3:
			//printf("\t执行的操作:查找学员资料。\n");
			result=queryByNo();
			break;
		case 4:
			//printf("\t执行的操作:修改学员资料。\n");
			result=modifyInfoByNo();
			break;
		case 5:
			//printf("\t执行的操作:输出学员资料。\n");
			listStu();
			break;
		case 0:
			printf("\t谢谢使用!\n");
			result=0; 
			break;
		default:
		    printf("\t你输入的选择项不符!\n");
		    break; 
		}
	}
} 

/*************************************************************
			打印系统菜单 
*************************************************************/
//自定义无参menu函数
 int menu(){	
    //定义变量接受用户的选择	
	int option;
	//生成菜单
	printf("\n\t-------------------------------------------------\n");
	printf("\t|\t\t 学员信息管理系统 \t\t|\n"); 
	printf("\t-------------------------------------------------\n\n");
	printf("\t1.输入学员资料\n");
	printf("\t2.删除学员资料\n");
	printf("\t3.查找学员资料\n");
	printf("\t4.修改学员资料\n");		
	printf("\t5.输出学员资料\n");
	printf("\t0.退出\n\n\n");
	printf("\t请输入你要进行的操作:");
	//接受用户选择 
	scanf("%d",&option);
	//返回用户的选择
	return option; 
}

/*******************************************************
			初始化学员信息 
*******************************************************/ 
void init(){
	strcpy(students[0],"2010-$-张学友-$-男-$-香港-$-13601234567-$-80-$-60-$-");
	strcpy(students[1],"2011-$-王菲-$-女-$-北京-$-13676543210-$-60-$-90-$-"); 
} 
/*****************************************************
			输出所有学员信息 
******************************************************/
void listStu(){
	//printf("%s\n",students[0]);
	//printf("%s\n",students[1]);
	//printf("%s\n",students[2]);
	int i;
	char temp[200]="";
	printf("\n\t*******现存的学员信息********\n");
	printf("学号\t");
	printf("姓名\t");
	printf("性别\t");
	printf("地址\t");
	printf("手机\t\t");
	printf("Java\t");
	printf(".Net\n");
	//针对每行学生信息进行处理
	for(i=0;i<stu_num;i++){
		strcpy(temp,students[i]);
		while(strlen(temp)!=0){
			analyse(temp);
		}
		printf("\n");
	} 		 
} 
/*******************************************************
			输入学员信息 
*******************************************************/ 
int insertNewStu(int row){
	char stu_temp[1][200]; //存储学员信息
	char n_temp[20];   		//姓名
	char c_temp[20];    	//手机号 
	char a_temp[30];	//地址 
	int i_temp;       //定义临时变量 
	int flag=0;	   	//用来标识前一项信息是否输入完成
	int i;   	     
	//输入学号
	while(flag==0){
		printf("\n\t请输入学号:");
		scanf("%d",&i_temp);
		if(i_temp<1000||i_temp>9999){
			printf("\t学号非法,必须4位数字。");
			continue; 						
		} else{
			sprintf(c_temp,"%d",i_temp);
			strcpy(stu_temp[0],c_temp);
			strcat(stu_temp[0],"-$-");
			flag=1;
		}
	} 
	//输入姓名
	while(flag==1){
		printf("\n\t请输入姓名:");
		scanf("%s",&n_temp);
		if(strlen(n_temp)>20){
			printf("\t姓名长度过大。");
			continue; 
		} else{
			strcat(stu_temp[0],n_temp);
			strcat(stu_temp[0],"-$-");
			flag=2;
		}
	} 
	//输入性别
	while(flag==2){
		printf("\n\t请输入性别(1男 2女):");
		scanf("%d",&i_temp);
		if(i_temp!=1&&i_temp!=2){
			printf("\t性别选择错误。");
			continue; 
		}else{
			if(i_temp==1){
				strcat(stu_temp[0],"男"); 
			}else{
				strcat(stu_temp[0],"女");
			} 
				strcat(stu_temp[0],"-$-");
				flag=3;
		}
	} 
	//输入地址 
	while(flag==3){
		printf("\n\t请输入地址:");
		scanf("%s",&a_temp);
		if(strlen(a_temp)>30){
			printf("\t地址长度过大。");
			continue; 
		} else{
			strcat(stu_temp[0],a_temp);
			strcat(stu_temp[0],"-$-");
			flag=4;
		}
	} 
	//输入手机号码
	while (flag==4){
		printf("\n\t请输入手机号码:");
		scanf("%s",c_temp);
		//判断是否存在非法字符
		for(i=0;i<strlen(c_temp);i++){
			if(c_temp[i]<'0'||c_temp[i]>'9'){
				printf("\t手机号码中包含非数字字符。");
				break; 
			}
		}
		if(strlen(c_temp)!=11){
			printf("\n\t手机号码位数不正确。");
			continue; 
		} else{
			strcat(stu_temp[0],c_temp);
			strcat(stu_temp[0],"-$-");
			flag=5;
		}
		
	} 
	//输入Java成绩
	while (flag==5){
		printf("\n\t请输入Java的成绩:");
		scanf("%d",&i_temp);
		 if(i_temp<0||i_temp>100){
		 	printf("\t成绩必须在0—100之间。");
		 	continue;
		 }else{
		 	sprintf(c_temp,"%d",i_temp);
		 	strcat(stu_temp[0],c_temp);
		 	strcat(stu_temp[0],"-$-");
		 	flag=6;
		 }
	} 
	//输入.Net成绩
	while (flag==6){
		printf("\n\t请输入.Net的成绩:");
		scanf("%d",&i_temp);
		 if(i_temp<0||i_temp>100){
		 	printf("\t成绩必须在0—100之间。");
		 	continue;
		 }else{
		 	sprintf(c_temp,"%d",i_temp);
		 	strcat(stu_temp[0],c_temp);
		 	strcat(stu_temp[0],"-$-");
		 	flag=7;
		 }
	} 
	//确认信息
	printf("\n\t********确认信息如下********\n");
	printf("%s",stu_temp);
	printf("\n\t确认信息吗(y|n)?");
	scanf("%s",&c_temp);
	if(strcmp(c_temp,"y")==0||strcmp(c_temp,"Y")==0){
		strcpy(students[row],stu_temp[0]);
	}else{
		insertNewStu(row);
	}
	return flag;
}
/*****************************************************************
			删除学员信息 
*****************************************************************/ 
//指定学员的存储位置,即所在的行位置
int getStuRowByNo(char no[])
{
 	int i,j;
 	int pos=-1;
 	char temp[5]="";   //存储学号 
 	for(i=0;i<stu_num;i++){
		for(j=0;j<strcspn(students[i],"-$-");j++){
			temp[j]=students[i][j];
		}
		//如果找到返回所在行i 
		if(strcmp(no,temp)==0){
			pos=i;
			break;
		}
	} 
 	return pos;	
 }
 //删除指定学号的学员信息
int deleteByNo(){
 	char no[5];
 	int row;   //行位置变量 
 	int i,j;
 	printf("\n\t请输入要删除的学员学号:"); 
    scanf("%s",&no);
	row=getStuRowByNo(no);
	if(row==-1){
		printf("\n\t*******没有该学号的学员信息,请核实******");
		return -1; 
	}else{
		for(i=row;i<50;i++){
			for(j=0;j<200;j++){
				students[i][j]=students[i+1][j];
			}
		}
		printf("\n\t********删除成功********\n");
		return 1;
	}	
 } 
/*****************************************************************
			解析显示学员信息 
*****************************************************************/
//解析学员信息行
void analyse(char c[])
{
	int i,j;
	int token;  //定义存储-$-的位置 
	char p_temp[100]="";
	
	token=strcspn(c,"-$-");
	//解析第一个信息项
	for(i=0;i<token;i++){
		p_temp[i]=c[i];
	} 
	printf("%s\t",p_temp);
	//去掉已经解析的信息项      
	for(j=0;j<strlen(c);j++){
		c[j]=c[token+3+j];		
	} 
} 

/*****************************************************************
			查找指定学员信息 
*****************************************************************/
int queryByNo()
{
	char no[5];
	int row;
	char temp[200];
	
	printf("\n\t请输入要查找的学员学号:");
	scanf("%s",&no);
	//获取学员所在行位置 
	row=getStuRowByNo(no);
	
	if(row==-1){
		printf("\n\t*****没有该学号的学员信息,请核实*****");
		return -1;
	} else{
		strcpy(temp,students[row]);
		printf("\n\t*******该学号的学员信息如下*******\n");
		printf("学号\t");
		printf("姓名\t");
		printf("性别\t");
		printf("地址\t");
		printf("手机\t\t");
		printf("Java\t");
		printf(".Net\n");
		while(strlen(temp)!=0){
			analyse(temp);
		}
		printf("\n");
	}
} 


/*****************************************************************
			修改指定学员信息 
*****************************************************************/
int modifyInfoByNo()
{
	char no[5];
	int row;
	char temp[200];
	
	printf("\n\t请输入要修改的学员学号");
	scanf("%s",&no);
	row=getStuRowByNo(no);
	
	if(row==-1){
		printf("\n\t*****没有该学号的学员信息,请核实*****");
		return -1;
	} else{
		return insertNewStu(row);
	}
} 

成品下载地址:百度云盘

Visant

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: