C语言编写班级花名册(顺序表版)

C语言编写班级花名册(顺序表版)

需求 :利用顺序表设计班级花名册
日期:2017.3.26 
以下是代码:
#include
#include	// 调用malloc 函数 
#include
#include

typedef struct Student{		// 定义学生结构体 
	
	char name[9];	// 姓名
	char num[20];	//学号
	char sex[3];	//性别
	char grade[6];	//成绩
	char tel_num[20];	//联系电话 
	
} *stu; 

typedef struct Roster{	// 定义花名册结构体 
	
	int len; 	// 现有元素个数 
	int maxnum;		// 最大元素个数 
	struct Student *element;	// 指向Student的指针变量 
}*prst;

// 定义全局变量
prst seqlist = NULL;
int MAX = 0; 	// 最大元素个数 

/********变量声明****/

prst CreatSeqList(int m);	// 创建空表 
void menu();	// 菜单界面 
prst AddStu(prst plink);	// 添加学生 
void ShowAll(prst plink);	// 显示全部学生信息 
prst DelStu(prst plink, char *num);		// 删除学生 
void SearchStu(prst plink, char *num);	// 查找单个学生信息 
prst ModStu(prst plink, char *num); 	// 修改学生信息 
void SortStu(prst plink);	// 按成绩排序 
void  FreeSeqlist(prst plink); // 释放内存 


/*********声明结束*******/ 

/*************下面开始写 菜单界面 函数*************/	
int main(void){
	
	int choice;
	char num[20] = {0};
	printf("请输入最大学生人数:");
	scanf("%d", &MAX);
	
	seqlist = CreatSeqList(MAX);
	
	while(1){
		
		menu();	
		printf("\n请选择:");
		scanf("%d",&choice);	//读入选择
		
		if(choice<1||choice>7){
			
			printf("\n\n键入数值无效!重新输入!\n");	
			
		} else{
			
			switch(choice){
				case 1:	seqlist = AddStu(seqlist);	// 添加学生 
					 	getch();
				  		break; 
				case 2:	printf("请输入该学生学号:");	// 修改学生 
						scanf("%s", num);
						seqlist = ModStu(seqlist, num);
                		getch();
						break;
				case 3: printf("请输入该学生学号:");	// 删除学生 
						scanf("%s", num); 
						getch();
						seqlist = DelStu(seqlist, num);
						break;
				case 4: printf("请输入该学生学号:");	// 寻找学生 
						scanf("%s", num);
						getch();
						SearchStu(seqlist, num); 
						break;
				case 5: SortStu(seqlist); 	// 按照成绩排序 
						getch();
						break;
				case 6: ShowAll(seqlist);
						getch();
						break;   
				case 7: FreeSeqlist(seqlist);
						printf("按任意键退出...");	//退出系统 
						getch();
						exit(0);
						break;
			}
		}
	}

	return 0;
}

/*************下面开始写 菜单界面 函数*************/	
void menu(){
	
	printf("\n");
	printf("\t\t      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
	printf("\t\t     ☆                                    ☆\n");
	printf("\t\t    ☆           班 级 花 名 册             ☆\n");
	printf("\t\t   ☆                                        ☆\n");
	printf("\t\t  ☆    1、增加学生信息	2、修改学生信息       ☆\n");
	printf("\t\t ☆     3、删除学生信息	4、查找学生信息        ☆\n");
	printf("\t\t ☆     5、按照成绩排序	6、显示全部            ☆\n");
	printf("\t\t  ☆    7、退出系统                           ☆\n");
	printf("\t\t   ☆                                        ☆\n");
	printf("\t\t    ☆                                      ☆\n");
	printf("\t\t     ☆                                    ☆\n");
	printf("\t\t      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
	
}
/**************创建空顺序表 里面最多有m个元素 **********/ 
prst CreatSeqList(int m){	 
	
	prst plink = (prst)malloc(sizeof(struct Roster));
	
	if(plink != NULL){
		
		plink->element = (Student*)malloc( sizeof(Student) *m);
		if(plink->element){
			
			//plink->maxnum = MAX;
			plink->len = 0;
			//printf("%d",plink->element);
			return plink;
			
		}else free(plink);
		
	}
	
	printf("内存不足,顺序表创建失败!\n");
	
	return NULL;
}

/*********下面写 添加学生信息 函数**********/
prst AddStu(prst plink){
	
	int q;
	
	for(q = 0; q < plink->len; q++);
//	printf("%d", q);
	printf("请按下面的提示进行添加\n");
	printf("姓名\t学号\t\t性别\t成绩\t联系电话\n\n");
	scanf("%s%s%s%s%s", plink->element[q].name, plink->element[q].num, plink->element[q].sex,
		plink->element[q].grade, plink->element[q].tel_num);
		
    plink->len = plink->len+1;  
    printf("\n添加成功!\n");
   //
   
    //printf("个数=%d", plink->len);
  
	    
	return plink;
} 



/**********下面写 显示全部信息 函数************/
void ShowAll(prst plink){
	
	int p = 0;
	 
	printf("姓名\t学号\t\t性别\t成绩\t联系电话\n\n");
	while(p < plink->len){
		
		printf("%s\t%s\t%s\t%s\t%s\n", plink->element[p].name, plink->element[p].num, plink->element[p].sex,
		plink->element[p].grade, plink->element[p].tel_num);
		
		p++;
	}
	
	return;	
}

/**************下面写 根据学号删除学生信息 函数***********/
prst DelStu(prst plink, char *num){
	
	int p = 0, q = 0, flag = 0;
	
	while(p < plink->len){
		
		if(strcmp(plink->element[p].num, num) == 0){
		
			for( q = p; q < plink->len-1; q++){
				
				plink->element[q] = plink->element[q+1]; 
			}	
			
			//plink->element[q+1] = NULL;	// 将指针所指的最后一个元素赋空 
			plink->len = plink->len-1;
			flag = 1;
			printf("\n删除成功\n");
		}	
		p++;
	}
	
	if(flag == 0)
		
		printf("没有找到该学生,请检查学号是否正确!");
		 
	return plink;
}

/*********下面写 按学号查找单个学生信息 函数************/
void SearchStu(prst plink, char *num){
	
	int p = 0, flag = 0;
	
	while(p < plink->len){
		
		if(strcmp(plink->element[p].num, num) == 0){
			
			printf("姓名\t学号\t\t性别\t成绩\t联系电话\n\n");
			printf("%s\t%s\t%s\t%s\t%s\n", plink->element[p].name, plink->element[p].num, plink->element[p].sex,
			plink->element[p].grade, plink->element[p].tel_num);	
			
			flag = 1;
		}
		p++;	
	}
	
	if(flag == 0)
		
		printf("没有找到该学生,请检查学号是否正确!");
		 
	return;
}


/**********下面写 修改学生信息 函数*********/
prst ModStu(prst plink, char *num){
	
	int p = 0, flag = 0;
	
	while(p < plink->len){
		
		if(strcmp(plink->element[p].num, num) == 0){
			
			printf("请按下面的提示进行修改\n");
			printf("姓名\t学号\t\t性别\t成绩\t联系电话\n\n");
			scanf("%s\t%s\t%s\t%s\t%s\n", plink->element[p].name, plink->element[p].num, plink->element[p].sex,
			plink->element[p].grade, plink->element[p].tel_num);
			printf("\n修改成功!\n");	
			
			flag = 1;
		}
		p++;	
	}
	
	if(flag == 0)
		
		printf("没有找到该学生,请检查学号是否正确!");
		 
	return plink;
}	

/******x下面写 按照成绩进行排序 函数******/
void SortStu(prst plink){
	
	Student stemp;
	
	for(int i = 0; i < plink->len; i++){
		for(int j = 0; j < plink->len-1; j++){
			
			if(strcmp(plink->element[i].num, plink->element[j].num) > 0){
				
				stemp = plink->element[i];
				plink->element[i] = plink->element[j];
				plink->element[j] = stemp;
			}
		}
	}
	printf("排序后结果如下:\n");
	ShowAll(plink);

}

/**********内存是要释放滴*****/
void  FreeSeqlist(prst plink){
	
	int p = 0; 
	while(p < MAX){
		
		free(&plink->element[p]);
		p++;
	
	}
	free(plink);
	
	return;
}
	


你可能感兴趣的:(C语言程序)