学生管理系统(c语言链表)

管理系统有四部分组成,即增删改查,由于没有时间的缘故,增加和修改的模块没有完成,如果有需要的的自行下载,然后自行补充代码,锻炼锻炼自己的编程能力(我也是一个小白),我用链表做的学生管理系统有一个缺点,就是删除的时候没有,不能删除第一条的信息。希望能帮助到各位小白,让我们一起努力,一起进步,加油!

本代码只是提供给和我一样的小白参考,大佬可以忽略 

#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<malloc.h>
#include<string.h>
#define SIZE sizeof(struct school)
//结构体声明
struct student {
	char num[20];  //学号
	char name[15]; //姓名
	int age;      //年龄
	char major[18]; //专业
	char clas[8];   //班级
	int grade;   //年级
};
struct school {
	int schCode; //学校代码
	char schName[20];//学校名称
	char schPosition[15];//学校所在地
	struct student Stu;
	struct school* next;
};
//全局变量

//函数声明区域
void menu();//菜单选项
struct school* initInfo(); //添加信息
bool judgeChar();//是否需要录入信息
void showInfo(struct school* pm);     //显示信息
void delInfo(struct school* pm);  //删除信息
void childrenmMenu(); //子菜单
void chailrenMenu();
void delByNum(struct school*);  //通过学号删除信息
void delByName(struct school*);  //通过姓名删除信息
void modifyInfo(struct school*);//修改信息
void findInfo(struct school*);  //查找信息
void fdByNum(struct school*);  //通过学号查找信息
void fdByName(struct school*); //通过姓名查找信息
void addInfo(struct school*);//添加信息
void escSystem();//退出管理系统
//代码区域
//菜单选项
void menu() {
	printf("\t\t\t------------系统管理------------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t----------1、初始化信息---------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t----------2、显示信息-----------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t----------3、删除信息-----------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t----------4、修改信息-----------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t----------5、查询信息-----------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t----------6、添加信息-----------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t----------0、退出系统-----------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t--------------------------------\n");
	printf("\t\t\t请选择>>:");
}

//添加信息
struct school* addInfo() {
	struct school* head, * p1, * p2;
	head = NULL;
	p1 = p2 = NULL;
	p1 = p2 = (struct school*)malloc(SIZE);
	head = p1;
	while (true) {
		printf("\t\t\t是否需要添加信息(Y/N):");
		if (judgeChar()) {
			printf("\t\t\t请输入学校代码:");
			scanf("%d", &p2->schCode);
			printf("\t\t\t请输入学校所在地:");
			scanf("%s", p2->schPosition);
			printf("\t\t\t请输入学校名称:");
			scanf("%s", p2->schName);
			printf("\t\t\t请输入学号:");
			scanf("%s", p2->Stu.num);
			printf("\t\t\t请输入姓名:");
			scanf("%s", p2->Stu.name);
			printf("\t\t\t请输入年龄:");
			scanf("%d", &p2->Stu.age);
			printf("\t\t\t请输入专业:");
			scanf("%s", p2->Stu.major);
			printf("\t\t\t请输入班级:");
			scanf("%s", p2->Stu.clas);
			printf("\t\t\t请输入年级:");
			scanf("%d", &p2->Stu.grade);
			p2= (struct school*)malloc(SIZE);
			p2->next = NULL;
			p1->next = p2;
			p1 = p2;
		}
		else{
			printf("\t\t\t正在返回主页面:\n");
			Sleep(2000);
			printf("\t\t\t返回成功:\n");
			break;
		}
	}
	return head;
}
//判断是否需要录入信息
bool judgeChar() {
	char ch[5];
	scanf("%s", ch);
	if (*ch == 'y' || *ch == 'Y') {
		return true;
	}
	else if(*ch=='n'||*ch=='N') {
		return false;
	}
	else {
		printf("\t\t\t请重新输入(N/Y):");
		judgeChar();
	}
}

//显示信息
void showInfo(struct school *pa) {
	struct school* H;
	H = NULL;
	H = pa;
	if (H == NULL) {
		printf("\t\t\t查询表没有信息,请输入在查询\n\n");
		Sleep(1000);
		return;
	}
	else
	{
		while (H->next != NULL)
		{
			printf("\t\t\t学校代码为:%d\n", H->schCode);
			printf("\t\t\t学校所在地:%s\n", H->schPosition);
			printf("\t\t\t学校名称:%s\n", H->schName);
			printf("\t\t\t学号:%s\n", H->Stu.num);
			printf("\t\t\t姓名:%s\n", H->Stu.name);
			printf("\t\t\t年龄:%d岁\n", H->Stu.age);
			printf("\t\t\t专业:%s\n", H->Stu.major);
			printf("\t\t\t班级:%s\n", H->Stu.clas);
			printf("\t\t\t年级:%d\n", H->Stu.grade);
			printf("\t\t\t<<-------------------------->>\n");
			printf("\t\t\t<<-------------------------->>\n");
			H = H->next;
		}
		printf("\t\t\t查询完毕,退出系统\n\n");
		Sleep(2000);
	}
	
	return;
}

//删除信息
void delInfo(struct school* pm) {
	int delSel;
	struct school* del;
	del = NULL;
	del = pm;
	while (true) {
		childrenmMenu();
		scanf("%d", &delSel);
		switch (delSel)
		{
		case 1:delByNum(del);
			break;
		case 2:delByName(del);
			break;
		case 0:printf("\t\t\t\t返回主菜单\n"); Sleep(1000); return;
			break;
		default:
			break;
		}
	}
}

//通过学号删除信息
void delByNum(struct school* delNum) {
	char NUM[20];
	memset(NUM, 0, 20);
	struct school* D_Num;
	D_Num = NULL;
	printf("\t\t\t\t请输入学号:");
	scanf("%s", NUM);
	while (delNum->next != NULL) {
		D_Num = delNum->next;
		if (strcmp(D_Num->Stu.num,NUM)==0 ){
			printf("\t\t\t\t匹配成功\n");
			Sleep(1000);
			printf("\t\t\t\t正在删除\n");
			delNum->next = D_Num->next;
			free(D_Num);
			Sleep(2000);
			printf("\t\t\t\t删除成功\n");
			Sleep(1000);
			break;
		}
		else {
			delNum = delNum->next;
		}
	}
}
//通过姓名删除信息
void delByName(struct school* delName) {
	char NAME[20];
	memset(NAME, 0, 20);
	struct school* D_Name;
	D_Name = NULL;
	printf("\t\t\t\t请输入姓名:");
	scanf("%s", NAME);
	while (delName->next != NULL) {
		D_Name = delName->next;
		if (strcmp(D_Name->Stu.name, NAME) == 0) {
			printf("\t\t\t\t匹配成功\n");
			Sleep(1000);
			printf("\t\t\t\t正在删除\n");
			delName->next = D_Name->next;
			free(D_Name);
			Sleep(2000);
			printf("\t\t\t\t删除成功\n");
			Sleep(1000);
			break;
		}
		else {
			delName = delName->next;
		}
	}
}
//删除信息的子菜单
void childrenmMenu() {
	printf("\t\t\t\t----------删除选项---------\n");
	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------0、返回主菜单--------\n");
	printf("\t\t\t\t===========================\n");
	printf("\t\t\t\t请选择删除范式>>:");
}
//修改信息
void modifyInfo(struct school* mdInfo) {
	struct school* mdINFO;
	mdINFO = NULL;
	printf("\t\t\t本模块代码内容自己添加\n");
	printf("\t\t\t\n");
}
//查询子菜单
void childrenMenu() {
printf("\t\t\t\t----------查询选项---------\n");
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------0、返回主菜单--------\n");
printf("\t\t\t\t===========================\n");
printf("\t\t\t\t请选择删除范式>>:");
}
//查找信息
void findInfo(struct school* fdInfo) {
	int fdSel;
	while (true)
	{
		childrenMenu();
		scanf("%d", &fdSel);
		switch (fdSel)
		{
		case 1:fdByNum(fdInfo);
			break;
		case 2:fdByName(fdInfo);
			break;
		case 0:printf("\t\t\t\t返回主菜单\n"); Sleep(1000); return;
			break;
		default:
			break;
		}
	}
}
//通过学号查找信息
void fdByNum(struct school* F) {
	char num1[20];
	memset(num1, 0, 20);
	struct school* fdNum;
	fdNum = NULL;
	fdNum = F;
	printf("\t\t\t\t请输入要查找的学号:");
	scanf("%s", num1);
	while (fdNum != NULL) {
		if (strcmp(fdNum->Stu.name, num1) == 0) {
			printf("\t\t\t\t学校代码为:%d\n", fdNum->schCode);
			printf("\t\t\t\t学校所在地:%s\n", fdNum->schPosition);
			printf("\t\t\t\t学校名称:%s\n", fdNum->schName);
			printf("\t\t\t\t学号:%s\n", fdNum->Stu.num);
			printf("\t\t\t\t姓名:%s\n", fdNum->Stu.name);
			printf("\t\t\t\t年龄:%d岁\n", fdNum->Stu.age);
			printf("\t\t\t\t专业:%s\n", fdNum->Stu.major);
			printf("\t\t\t\t班级:%s\n", fdNum->Stu.clas);
			printf("\t\t\t\t年级:%d\n", fdNum->Stu.grade);
		}
		else {
			fdNum = fdNum->next;
		}
	}
}
//通过姓名查找信息
void fdByName(struct school* D) {
	char name[20];
	memset(name, 0, 20);
	struct school* fdName;
	fdName = NULL;
	fdName = D;
	printf("\t\t\t\t请输入要查找的姓名:");
	scanf("%s", name);
	while (fdName->next != NULL) {
		if (strcmp(fdName->Stu.name, name) == 0) {
			printf("\t\t\t\t学校代码为:%d\n", fdName->schCode);
			printf("\t\t\t\t学校所在地:%s\n", fdName->schPosition);
			printf("\t\t\t\t学校名称:%s\n", fdName->schName);
			printf("\t\t\t\t学号:%s\n", fdName->Stu.num);
			printf("\t\t\t\t姓名:%s\n", fdName->Stu.name);
			printf("\t\t\t\t年龄:%d岁\n", fdName->Stu.age);
			printf("\t\t\t\t专业:%s\n", fdName->Stu.major);
			printf("\t\t\t\t班级:%s\n", fdName->Stu.clas);
			printf("\t\t\t\t年级:%d\n", fdName->Stu.grade);
		}
		else {
			fdName = fdName->next;
		}
	}
}
//添加信息
void addInfo(struct school*) {
	printf("\t\t\t本模块代码内容自己添加\n");
	printf("\t\t\t\n");
}

//退出系统
void escSystem(){
	printf("\t\t\t正在退出管理系统\n");
	Sleep(2000);
	printf("\t\t\t退出成功\n");
	exit(0);
}
//入口函数(主函数)
int main() {
	int sel;
	struct school* param;
	param = NULL;
	while (true) {
		menu();
		scanf("%d",&sel);
		switch (sel)
		{
		case 1:param = addInfo();
				break;
		case 2:showInfo(param);
				break;
		case 3:delInfo(param);
				break;
		case 4:modifyInfo(param);
				break;
		case 5:findInfo(param);
				break;
		case 6:addInfo(param);
			break;

		case 0:escSystem();
				break;
			default:printf("\t\t\t输入有误,请重新输入\n");
				break;
		}
	}
	free(param);
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值