记录一个用单链表写的学生信息管理系统

         博主刚刚学完单链表,本着以实践为主的原则,写了一个简陋的学生信息管理系统 ^^!   比较简陋,大神勿喷。。。。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct _student{
	char name[10];
	int age;
	char number[11];
	char sex[4];
	struct _student *next;
}student;


typedef student* pStudent;
student tempdata;


pStudent List = NULL;
pStudent createList(){                                         ///初始化学生信息管理表
	pStudent headNode = (pStudent)malloc(sizeof(student));
	if (headNode == NULL){
		printf("create error\n");
		exit(0);
	}
	headNode->next=NULL;
	return headNode;
}

pStudent createNewNode(student data){                     //新建节点
	pStudent newNode = (pStudent)malloc(sizeof(student));
	newNode->age = data.age;
	strcpy(newNode->name, data.name);
	strcpy(newNode->sex, data.sex);
	strcpy(newNode->number, data.number);
	newNode->next = NULL;
	return newNode;
}

void rewriteNode(pStudent headNode, char *name){        //按名查找修改学生信息
	pStudent rewNode = headNode->next;
	if (rewNode == NULL){
		printf("信息为空,无法查找!\n");
	}
	else{
		while (rewNode != NULL&&strcmp(rewNode->name, name)){
			rewNode = rewNode->next;
		}
		if (rewNode == NULL){
			printf("查无此人!\n");
		}
		else{
			printf("查找成功,请输入你需要修改的学生的完整信息:");
			scanf("%s%d%s%s", rewNode->name, &rewNode->age, rewNode->number, rewNode->sex);
			printf("修改成功!\n");

		}
	}
}
void seekNode(pStudent headNode, char* name){
	pStudent seekNode = headNode->next;
	if (seekNode == NULL){
		printf("信息为空,无法查找!\n");
	}
	else{
		while (seekNode != NULL&&strcmp(seekNode->name, name)){
			seekNode = seekNode->next;
		}
		if (seekNode == NULL){
			printf("查无此人!\n");
		}
		else{
			printf("\t\t%s\t\t%s\t\t%d\t\t%s\n", seekNode->name, seekNode->number, seekNode->age, seekNode->sex);
		}
	}
}
void addNewNode(pStudent headNode, student data){              //增加学生信息
	pStudent newNode = createNewNode(data);
	newNode->next = headNode->next;
	headNode->next = newNode;

}

void  deletePosNode(pStudent headNode, char* name){          //删除指定学生信息
	pStudent deleteNode = headNode->next;
	if (!deleteNode){
		printf("信息为空,无法删除\n");
	}
	else{
		pStudent deleteFrontNode = headNode;
		while (deleteNode!= NULL&&strcmp(deleteNode->name, name)){
			deleteFrontNode = deleteNode;
			deleteNode = deleteFrontNode->next;
		}
		if (deleteNode == NULL){
			printf("查无此人,无法删除\n");
		}
		else{
			deleteFrontNode->next = deleteNode->next;
			free(deleteNode);
			deleteNode = NULL;
		}
	}
}
void printList(pStudent headNode){               //输出学生信息
	pStudent pMoveNode = headNode->next;
	if (!pMoveNode){
		printf("信息表为空,无法查看\n");
	}
	else{
		while (pMoveNode != NULL){
			printf("\t\t%s\t\t%s\t\t%d\t\t%s\n", pMoveNode->name, pMoveNode->number, pMoveNode->age, pMoveNode->sex);
			pMoveNode = pMoveNode->next;
		}
	}
}
void systemOut(){
	printf("\t\t\t\t****************学生信息管理系统****************\n");
	printf("\t\t\t\t****************1.添加学生信息  ****************\n");
	printf("\t\t\t\t****************2.修改学生信息  ****************\n");
	printf("\t\t\t\t****************3.删除学生信息  ****************\n");
	printf("\t\t\t\t****************4.浏览学生信息  ****************\n");
	printf("\t\t\t\t****************5.查找学生信息  ****************\n");
	printf("\t\t\t\t****************6.退出管理系统  ****************\n");
}
void getKey(){
	int choice = 0;
	printf("请输入你需要的操作:");
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
		printf("请输入你要添加的学生信息:");
		scanf("%s%d%s%s", tempdata.name, &tempdata.age, tempdata.number, tempdata.sex);
		addNewNode(List, tempdata);
		printf("添加成功!\n");
		break;
	case 2:
		printf("请输入需要修改学生信息的学生姓名:");
		scanf("%s", tempdata.name);
		rewriteNode(List, tempdata.name);
		break;
	case 3:
		printf("请输入需要删除的学生姓名:");
		scanf("%s", tempdata.name);
		deletePosNode(List, tempdata.name);
		printf("删除成功!\n");

		break;
	case 4:
		printf("\t\t姓名\t\t学号\t\t年龄\t\t性别\n");
		printList(List);
		break;
	case 5:
		printf("请输入需要查询的学生姓名:");
		scanf("%s", tempdata.name);
		printf("\t\t姓名\t\t学号\t\t年龄\t\t性别\n");
		seekNode(List, tempdata.name);
		break;
	case 6:
		printf("退出成功!");
		exit(0);
		break;
	}
}
int main(){

	List = createList();
	systemOut();
	while (1){
		getKey();
	}

	return 0;
}

代码只在vs编译器上跑过,其他编译器不清楚能不能运行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值