华清远见第三课程day4作业

学生数据管理系统(不完全)代码

guanli.h代码

#ifndef _GUANLI_H_
#define _GUANLI_H_

#define MAXSIZE 40
//定义顺序表类型
struct stu_info{
		char num[12];
		char name[10];
		char sex[10];
		char mobile_phone[12];
};
typedef struct StuList{
	int len;
	struct stu_info stu_info;
}StuList,*StuListPtr;
//打印菜单
void printmenu();
//创建顺序表
StuListPtr list_create();
//判满
int list_full(StuListPtr S);
//判空
int list_empty(StuListPtr S);
//遍历
void list_show(StuListPtr S);
//添加元素
int list_add(StuListPtr S);
//插入元素
int list_insert(StuListPtr S);
//删除元素
int list_delete(StuListPtr S);
//修改元素
int list_update(StuListPtr S);
//查找元素
int list_search(StuListPtr S);
#endif

 guanli.c代码

#include "guanli.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//创建顺序表
StuListPtr list_create()
{
	//申请一个顺序表的空间大小
/*	int i;
	printf("请输入需要申请表的大小\n");
	scanf("%d",&i);*/
	StuListPtr S = (StuListPtr)malloc(sizeof(StuList)*MAXSIZE);
	//判断申请是否成功
	if(NULL == S){
		printf("顺序表创建失败\n");
		return NULL;
	}
	//此时顺序表已经创建成功
	memset(S,0,sizeof(StuList));
	printf("顺序表已经成功生成\n");
	return S;
}
//判满	
int list_full(StuListPtr S){
	if(NULL == S){
		printf("该顺序表不合法\n");
		return -1;
	}
	return S->len == MAXSIZE;
}
//判空
int list_empty(StuListPtr S){
	if(NULL ==S){
		printf("该顺序表不合法\n");
		return -1;
	}
	return S->len==0;
}
//遍历
void list_show(StuListPtr S){
	if(NULL ==S||list_full(S)){
		printf("顺序表不合法\n");
		return ;
	}
	printf("学号\t名称\t性别\t手机号\n");
	for(int i=0;i<S->len;i++){
		printf("%s\t%s\t%s\t%s\t\n",(S+i)->stu_info.num,(S+i)->stu_info.name,(S+i)->stu_info.sex,(S+i)->stu_info.mobile_phone);
	}
printf("\n");
}
//添加元素
int list_add(StuListPtr S){
	if(NULL==S){
		printf("顺序表不合法\n");
		return -1;
	}
	char p='y';
	while(p=='y' || p=='Y'){
		printf("请输入学号:\n");
		scanf("%s",(S+S->len)->stu_info.num);
		printf("请输入名称:\n");
		scanf("%s",(S+S->len)->stu_info.name);
		printf("请输入性别:\n");
		scanf("%s",(S+S->len)->stu_info.sex);
		printf("请输入手机号:\n");
		scanf("%s",(S+S->len)->stu_info.mobile_phone);
		S->len++;
		printf("添加成功\n");
		printf("继续输入请输入Y/y终止输入请输入其他字符\n");

		do{
			p=getchar();
		}while(p=='\n');
	}
	return 1;
}
//打印菜单
void printmenu(){
printf("+-----------------------------------------------+\n"); 
	printf("|               学生基本信息管理                |\n");
	printf("|                1.基本信息插入.                |\n");
	printf("|                2.基本信息修改                 |\n");
	printf("|                3.基本信息删除.                |\n");
	printf("|                4.基本信息显示                 |\n");
	printf("|                5.基本信息查找                 |\n");
	printf("|                    q.退出                     |\n");
	printf("|            请输入你的选择(序号或字母):       |\n");
	printf("+-----------------------------------------------+\n");
}

//插入元素
int list_insert(StuListPtr S){
	int pos;
	printf("请输入需要插入的位置\n");
	scanf("%d",&pos);                                      //取得位置 
	if(NULL ==S || list_full(S)||pos<0||pos>S->len ){
		printf("顺序表不合法\n");
		return -1;
	}
	char p='y';                
	while(p=='y' || p=='Y'){
	for(int i=S->len-1;i>=pos;i--){
		S[i+1]=S[i];      //将位置后方的元素后移一位
		}
		printf("请输入学号:\n");
		scanf("%s",S[pos].stu_info.num);
		printf("请输入名称:\n");
		scanf("%s",S[pos].stu_info.name);
		printf("请输入性别:\n");
		scanf("%s",S[pos].stu_info.sex);
		printf("请输入手机号:\n");
		scanf("%s",S[pos].stu_info.mobile_phone);
		S->len++;              //长度增加
		pos++;                 //插入位置后移方便下次插入
		printf("插入元素成功\n");
		printf("继续插入请输入Y/y终止插入请输入其他字符\n");
		do{
			p=getchar();
		}while(p=='\n');
		}
		return 1;
}
//删除元素
int list_delete(StuListPtr S){
	int pos;
	printf("请输入需要删除的位置\n");
	scanf("%d",&pos);                                      //取得位置 
	if(NULL ==S || list_empty(S)||pos<0||pos>S->len ){
		printf("顺序表不合法\n");
		return -1;
	}
	for(int i=pos+1;i<S->len;i++){
		S[i-1]=S[i];      //将位置后方的元素后移一位
		}
	S->len--;            //顺序表长度减少一位
	printf("删除成功\n");
	return 1;
}
//修改元素
int list_update(StuListPtr S){	
	int pos;
	printf("请输入需要修改的位置\n");
	scanf("%d",&pos);                                      //取得位置 
	if(NULL ==S || list_empty(S)||pos<0||pos>S->len ){
		printf("顺序表不合法\n");
		return -1;
	}
	char a;
	printf("请输入需要修改的值的类型\n");
	printf(" 1.修改学号\n");
	printf(" 2.修改名称\n");
	printf(" 3.修改性别\n");
	printf(" 4.修改手机号\n");
	printf(" q.退出\n");
	do{
		a=getchar();
	}while(a=='\n');
	switch(a){             //选择修改哪项数据
	case '1':
		printf("请输入学号:\n");
		scanf("%s",S[pos].stu_info.num);
		printf("修改完成\n");
		break;
	case '2':
		printf("请输入名称:\n");
		scanf("%s",S[pos].stu_info.name);
		printf("修改完成\n");
		break;
	case '3':
		printf("请输入性别:\n");
		scanf("%s",S[pos].stu_info.sex);
		printf("修改完成\n");
		break;
	case '4':
		printf("请输入手机号:\n");
		scanf("%s",S[pos].stu_info.mobile_phone);
		printf("修改完成\n");
		break;
	default:
		break;
		return 1;
}
}
//查找元素
int list_search(StuListPtr  S){
	if(NULL==S||list_empty(S)){
		printf("顺序表不合法");
		return -1;
	}
	printf("请输入需要查找的值的类型\n");
	printf(" 1.通过学号查找\n");
	printf(" 2.通过名称查找\n");
	printf(" 3.通过手机号查找\n");
	printf(" q.退出\n");
	char a;
	do{
		a=getchar();
	}while(a=='\n');
	char zhi[20];
	switch(a){             //选择查找哪项数据
		case '1':
			printf("请输入需要查找的学号");
			scanf("%s",zhi);
			for(int i=0;i<S->len;i++){
				if(i==0) printf("学号\t名称\t性别\t手机号\n");
				if(strcmp(S[i].stu_info.num,zhi)==0){
					printf("%s\t%s\t%s\t%s\t\n",(S+i)->stu_info.num,(S+i)->stu_info.name,(S+i)->stu_info.sex,(S+i)->stu_info.mobile_phone);
				}
			}

			break;
		case '2':
			printf("请输入需要查找的名称");
			scanf("%s",zhi);
			for(int i=0;i<S->len;i++){
				if(i==0) printf("学号\t名称\t性别\t手机号\n");
				if(strcmp(S[i].stu_info.name,zhi)==0){
					printf("%s\t%s\t%s\t%s\t\n",(S+i)->stu_info.num,(S+i)->stu_info.name,(S+i)->stu_info.sex,(S+i)->stu_info.mobile_phone);
				}
			}

			break;
		case '3':
			printf("请输入需要查找的手机号");
			scanf("%s",zhi);
			for(int i=0;i<S->len;i++){
				if(i==0) printf("学号\t名称\t性别\t手机号\n");
				if(strcmp(S[i].stu_info.mobile_phone,zhi)==0){
					printf("%s\t%s\t%s\t%s\t\n",(S+i)->stu_info.num,(S+i)->stu_info.name,(S+i)->stu_info.sex,(S+i)->stu_info.mobile_phone);
				}
			}

			break;
		default:
			break;
			return 1;
	}
}
			





测试代码

main.c

#include "guanli.h"
int main(int argc, const char *argv[])
{
	StuListPtr S=list_create();
	char a;
	while(1){
		printmenu();
		do{
			a =getchar();
		}while(a =='\n');
		if(a=='q')
		return 0;
		switch(a){
		case '1':
			list_add(S);
			break;
		case '2':
			list_update(S);
			break;
		case '3':
			list_delete(S);
			break;
		case '4':
			list_show(S);
			break;
		case '5':
			list_search(S);
			break;
		default:
			break;
		}
		printf("请按任意键继续:\n");
		getchar();
		getchar();
		system("clear");
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值