数据结构day4

https://note.youdao.com/s/SwyFfOgRicon-default.png?t=N6B9https://note.youdao.com/s/SwyFfOgR

学生管理系统

头文件

#ifndef _STULIST_H_
#define _STULIST_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 40
typedef struct STU{
	char name[20];
	char sex[10];
	int score; 
}datatype;
typedef struct {
	datatype data[MAX];
	int len;
}stuList,*stuListPtr;
//创建顺序表
stuListPtr list_create();

//判满
int list_full(stuListPtr S);

//判空
int list_empty(stuListPtr S);

//向顺序表中添加元素
int list_add(stuListPtr S);

//遍历顺序表 
void list_show(stuListPtr S);

//任意位置插入元素
int list_insert_pos(stuListPtr S);

//任意位置删除元素
int list_delete_pos(stuListPtr S);

//按位置进行修改
int list_update_pos(stuListPtr S);

//按值进行修改
int list_update_value(stuListPtr S);

//查找指定位置的元素
datatype *list_search_pos(stuListPtr S);

//按值进行查找元素,返回查到的位置
int list_search_value(stuListPtr S);

//清空顺序表
void list_free(stuListPtr S);

//功能菜单
void menu();

#endif

函数功能具体实现

#include"stulist.h" 

//创建班级顺序表****************************************
stuListPtr list_create(){
	stuListPtr S=(stuListPtr)malloc(sizeof(stuList));
	if(NULL==S){
		printf("申请失败\n");
		return NULL;
	}
	memset(S->data, 0, sizeof(S->data));   //清空数组
	S->len = 0;                  //数组长度清零
	printf("申请成功\n");
	return S;
}



//判满***********************************************
int list_full(stuListPtr S){
	if(NULL==S){
		printf("不合法\n");
		return 0;
	}
	return	S->len==MAX;
}




//判空***************************************************
int list_empty(stuListPtr S){
	if(NULL==S){
		printf("不合法\n");
		return 0;
	}
	return S->len==0;
}




//向班级中添加成员*****************************************
int list_add(stuListPtr S){
	if(NULL==S||list_full(S)){
		printf("不合法\n");
		return 0;
	}
	for(S->len=0;S->len<MAX;S->len++){
		int value=0;
		printf("是否添加学生信息?(1/0)\n");
		scanf("%d",&value);
		if(value==1){
			puts("请按以下格式输入学生信息");
			printf("第%d个学生:\n",S->len+1);
			printf("姓名:");
			scanf("%s",S->data[S->len].name);
			printf("性别:");
			scanf("%s",S->data[S->len].sex);
			printf("成绩:");
			scanf("%d",&S->data[S->len].score);
			printf("添加成功\n");
		}	
		else if(value==0){
			printf("添加结束\n");
			return 0;
		}
	}
}




//遍历顺序表**********************************
void list_show(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("不合法\n");
		return;
	}
	for(int i=0;i<S->len;i++){
		printf("第个%d学生的信息为:\n",i+1);
		printf("姓名:%s\n",S->data[i].name);
		printf("性别:%s\n",S->data[i].sex);
		printf("成绩:%d\n",S->data[i].score);
	}
}




//任意位置插入元素***************************************
int list_insert_pos(stuListPtr S){
	if(NULL==S||list_full(S)){
		printf("不合法\n");
		return 0;
	}
	int k,j;
	printf("请问要不要添加学生信息?(1/0)\n");
	scanf("%d",&j);
	if(j==1){
		printf("请问需要在哪插入学生信息?\n");
		scanf("%d",&k);
		if(k>S->len||k<1||j==0){
			printf("插不了一点\n");
			return 0;
		}
		for(int i=S->len-1;i>k-1;i--){
			S->data[S->len]=S->data[S->len-1];
			printf("请输入需要插入学员信息\n");
			printf("姓名:");
			scanf("%s",S->data[k-1].name);
			printf("性别:");
			scanf("%s",S->data[k-1].sex);
			printf("成绩:");
			scanf("%d",&S->data[k-1].score);
			S->len++;
			return 1;
		}
	}
}





//任意位置删除元素*******************************
int list_delete_pos(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表删毛!\n");
		return 0;
	}
	int i=0;
	printf("请问想删第几个学生的信息?\n");
	scanf("%d",&i);
	if(i<1||i>S->len){
		printf("删毛\n");
		return 0;
	}
	for(int j=i;j<S->len;j++){
		S->data[j-1]=S->data[j];
	}
	printf("删除成功\n");
	S->len--;
	return 1;
}



//按位置进行修改********************************
int list_update_pos(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表改毛!\n");
		return 0;
	}
	int pos=0;
	printf("请问想修改哪个学生的信息?\n");
	scanf("%d",&pos);
	if(pos<1||pos>S->len){
		printf("改毛\n");
		return 0;
	}
	printf("请输入需要修改学员的信息\n");
	printf("姓名:");
	scanf("%s",S->data[pos-1].name);
	printf("性别:");
	scanf("%s",S->data[pos-1].sex);
	printf("成绩:");
	scanf("%d",&S->data[pos-1].score);
	printf("修改成功\n");
	return 1;
}




//按值进行修改***********************************
int list_update_value(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表改毛!\n");
		return 0;
	}
	char n[32];
	int pos=0;
	printf("请问要修改哪个学生的信息?\n");
	scanf("%s",n);
	for(int i=0;i<S->len;i++){
		if(strcmp(S->data[i].name,n)!=0){
			printf("查无此人\n");
			return 0;
		}
		if(strcmp(S->data[i].name,n)==0){
			pos=i+1;
			printf("请输入需要修改学员的信息\n");
			printf("姓名:");
			scanf("%s",S->data[pos-1].name);
			printf("性别:");
			scanf("%s",S->data[pos-1].sex);
			printf("成绩:");
			scanf("%d",&S->data[pos-1].score);
			printf("修改成功\n");
			return 1;
		}
	}
}



//查找指定位置的元素*******************************
datatype *list_search_pos(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表查毛!\n");
		return NULL;
	}
	int pos=0;
	printf("请输入需要查找学生编号\n");
	scanf("%d",&pos);
	if(pos<1||pos>S->len){
		printf("查毛\n");
		return NULL;
	}
	printf("该学生信息为:\n");
	printf("姓名\t性别\t成绩\n%s\t%s\t%d\n",S->data[pos-1].name,S->data[pos-1].sex,S->data[pos-1].score);
	printf("查找完成!\n");
	return &S->data[pos-1];
}



//按值进行查找元素,返回查到的位置********************
int list_search_value(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表查毛!\n");
		return 0;
	}	
	int pos=0;
	char n[32];
	printf("请输入需要查找学生姓名\n");
	scanf("%s",n);
	for(int i=0;i<S->len;i++){
		if(strcmp(S->data[i].name,n)!=0){
			printf("查无此人\n");
			return 0;
		}
		if(strcmp(S->data[i].name,n)==0){
			pos=i+1;
			printf("该学生是%d号学生\n",pos);
			printf("查找成功!\n");
			return pos;
		}
	}
}



//清空顺序表********************************
void list_free(stuListPtr S){
	if(NULL != S)
	{
		free(S);
		S = NULL;      //值传递
	}

	printf("释放表成功\n");

}



void menu()
{
	puts("******************************************");
	puts("+++++++++++欢迎来到学生管理系统+++++++++++");
	puts("******************************************");
	puts("+++++******  1.添加学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  2.姓名查找学生  ******+++++++");
	puts("******************************************");
	puts("+++++******  3.显示学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  4.删除学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  5.按号码查找学生  ******+++++++");
	puts("******************************************");
	puts("+++++******  6.按姓名修改学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  7.清空学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  0.退出学生系统  ******+++++++");
	puts("******************************************");
	puts("+++++  请输入对应序号执行对应的操作  +++++");
	puts("******************************************");
}

主函数

#include"stulist.h"
int main(int argc, const char *argv[])
{
	stuListPtr S=list_create();
	if(S==0){
		printf("申请失败\n");
		return -1;
	}
	int a=0;
	while(1)
	{
		menu();
		scanf("%d",&a);
		switch(a)
		{
		case 1 :  
			list_add(S);  
			break;//输入信息
		case 2 :
			list_search_value(S);
			break;//根据name查找信息
		case 3 :
			list_show(S);
			break;//显示所有学生信息
		case 4 :
			list_delete_pos(S);				
			break;//删除学生
		case 5 :
			list_search_pos(S);
			break;//按号码查找学生
		case 6 :
			list_update_value(S);
			break;//按姓名修改信息
		case 7 :
			list_free(S);
			break;//清空学生信息
		case 0 :return 0;
		default:break;
		}
	}
	return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值