9-19 学生管理系统

mian.c部分

#include "list.h"
int main(int argc, const char *argv[])
{
	Plist L = create_list();
	L->len=0;
	int command;
	while(1){
		printf("\t\t简单学生管理系统\n");
		printf("\t\t1.输入学生信息\n");
		printf("\t\t2.输出学生信息\n");
		printf("\t\t3.插入学生信息\n");
		printf("\t\t4.删除学生信息\n");
		printf("\t\t5.按位置查找学生信息\n");
		printf("\t\t6.按姓名查找学生信息\n");
		printf("\t\t7.去除重复学生信息\n");
		printf("\t\t8.按学号进行排序\n");
		printf("\t\t9.按学号查找学生,删除该学生\n");
		printf("\t\t10.修改一名学生\n");
		printf("\t\t11.退出系统\n");
		printf("请输入需要执行的操作命令:");
		scanf("%d",&command);
		switch(command){
		case 1:
			input_stu(L);
			break;
		case 2:
			output_stu(L);
			break;
		case 3:
			insert_stu(L);
			break;
		case 4:
			delete_stu(L);
			break;
		case 5:
			find_pos(L);
			break;
		case 6:
			find_name(L);
			break;
		case 7:
			delete_repeat(L);
			break;
		case 8:
			bub_stu_id(L);
			break;
		case 9:
			find_id_delete(L);
			break;
		case 10:
			change_stu(L);
			break;
		case 11:
			return 0;
		default:
			return 0;
		}
	}
	free(L);
	L = NULL;
	return 0;
}

list.c部分

#include "list.h"
Plist create_list()
{
	Plist L = malloc(sizeof(list));
	if(NULL == L){
		printf("创建失败\n");
		return NULL;
	}else{
		printf("创建成功\n");
		return L;
	}
}
Stu input_one_stu(){
	Stu s;
	printf("请输入学生信息学号:");
	scanf("%d",&s.id);
	printf("请输入学生信息姓名:");
	scanf("%s",s.name);
	printf("请输入学生信息性别:");
	scanf("%s",s.sex);
	printf("请输入学生信息年龄:");
	scanf("%d",&s.age);
	return s;
}
void input_stu(Plist L)
{
	int n;
	printf("请输入你要输入的学生个数:");
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		printf("请输入第%d位学生信息学号:",i+1);
		scanf("%d",&L->data[i].id);
		printf("请输入第%d位学生信息姓名:",i+1);
		scanf("%s",L->data[i].name);
		printf("请输入第%d位学生信息性别:",i+1);
		scanf("%s",L->data[i].sex);
		printf("请输入第%d位学生信息年龄:",i+1);
		scanf("%d",&L->data[i].age);
		printf("\n");
		L->len++;
	}
}
int full(Plist L)
{
	if(L->len==MAX){
		return 1;
	}
	return 0;
}
int empty(Plist L)
{
	if(L->len==0){
		return 1;
	}
	return 0;
}
void output_stu(Plist L)
{
	for(int i=0;i<L->len;i++){
		printf("学号:%d 姓名:%s 性别:%s 年龄:%d\n",L->data[i].id,L->data[i].name,L->data[i].sex,L->data[i].age);
	}
}
int insert_stu(Plist L)
{
	if(NULL==L||full(L)){
		printf("插入失败\n");
		return -1;
	}
	int pos;
	printf("请输入插入学生位置:");
	scanf("%d",&pos);
	Stu s = input_one_stu();
	for(int i=L->len;i>=pos-1;i--){
		L->data[i] = L->data[i-1];
	}
	L->data[pos-1] = s;
	L->len++;
	return 0;
}
int delete_stu(Plist L)
{
	int pos;
	printf("请输入删除学生位置:");
	scanf("%d",&pos);
	if(NULL==L||empty(L)||pos<1||pos>L->len){
		printf("删除失败\n");
		return -1;
	}

	for(int i=pos-1;i<=L->len-1;i++){
		L->data[i]=L->data[i+1];
	}
	L->len--;
	printf("删除成功\n");
	return 0;
}
int delete_stu_noinput(Plist L,int pos)
{
	if(NULL==L||empty(L)||pos<1||pos>L->len){
		printf("删除失败\n");
		return -1;
	}
	for(int i=pos-1;i<=L->len-1;i++){
		L->data[i]=L->data[i+1];
	}
	L->len--;
	printf("删除成功\n");
	return 0;
}
int find_pos(Plist L)
{
	int pos;
	printf("请输入查找学生位置:");
	scanf("%d",&pos);
	if(pos>L->len||pos<1||L==NULL||empty(L)){
		printf("查找失败\n");
		return -1;
	}
	printf("查找成功\n学号:%d 姓名:%s 性别:%s 年龄:%d\n",L->data[pos-1].id,L->data[pos-1].name,L->data[pos-1].sex,L->data[pos-1].age);
	return 0;
}
int find_name(Plist L)
{
	char name[20];
	printf("请输入查找学生姓名:");
	scanf("%s",name);
	for(int i=0;i<L->len;i++){
		if(strcmp(name,L->data[i].name)==0){			
			printf("查找成功\n学号:%d 姓名:%s 性别:%s 年龄:%d\n",L->data[i].id,L->data[i].name,L->data[i].sex,L->data[i].age);
			return -1;
		}
	}
	printf("未查找到姓名为:%s的学生\n",name);
	return 0;
}
int delete_repeat(Plist L)
{
	for(int i=0;i<L->len;i++){
		for(int j=i+1;j<L->len;j++){
			if(strcmp(L->data[i].name,L->data[j].name)==0){
				delete_stu_noinput(L,j+1);
				j--;
			}
		}
	}
	return 0;
}
int bub_stu_id(Plist L)
{
	Stu temp;
	for(int i=1;i<L->len;i++){
		for(int j=0;j<L->len-i;j++){
			if(L->data[j].id>L->data[j+1].id){
				temp = L->data[j];
				L->data[j] = L->data[j+1];
				L->data[j+1] = temp;
			}
		}
	}
	return 0;
}
int find_id_delete(Plist L){
	bub_stu_id(L);
	int id;
	printf("请输入查找学生id:");
	scanf("%d",&id);
	int i=0,j=L->len-1,mid;
	while(i<=j){
		mid = (i+j)/2;
		if(id>L->data[mid].id){
			i = mid+1;
		}else if(id<L->data[mid].id){
			j = mid-1;
		}else{	
			printf("查找成功\n学号:%d 姓名:%s 性别:%s 年龄:%d\n",L->data[mid].id,L->data[mid].name,L->data[mid].sex,L->data[mid].age);
			delete_stu_noinput(L,mid+1);
			return -1;
		}
	}
	printf("查找失败\n");
	return 0;
}
int change_stu(Plist L)
{
	int pos;
	printf("请输入要修改学生的位置:");
	scanf("%d",&pos);
	if(empty(L)||pos<1||pos>L->len){
		printf("修改失败\n");
		return -1;
	}
	L->data[pos-1] = input_one_stu();
	printf("修改成功\n");
	return 0;
}

list.h部分

#ifndef _LIST_
#define _LIST_
#include <myhead.h>
#define MAX 30
typedef struct
{
	int id;
	char name[20];
	char sex[5];
	int age;
}Stu;
typedef struct
{
	Stu data[MAX];
	int len;
}list,*Plist;
Plist create_list();
Stu input_one_stu();
int full(Plist);
int empty(Plist);
void input_stu(Plist);
void output_stu(Plist);
int insert_stu(Plist);
int delete_stu(Plist);
int find_pos(Plist);
int find_name(Plist);
int delete_stu_noinput(Plist,int);
int delete_repeat(Plist);
int bub_stu_id(Plist);
int find_id_delete(Plist);
int change_stu(Plist);
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值