关于学生成绩管理系统增查删改

摘要:我学院的石少师弟,最近看了我写的学生管理系统上篇,也自己简单写了个这玩意儿,身为师兄,对小师弟必然是无限关爱的啦!于是我就打算今天给大家贴一贴他写的这个小玩意儿,看看大家能不能在里面找到属于你的思路。话不多说,来人,上 program

本篇博客出自奇牛学院学员石少师弟

开发语言: c language
开发工具:vs 2017
头文件:stdio.h stdlib.h string.h
知识点: 循环 分支判断指针结构体链表

#include
#include
#include

typedef struct Student {
	char Id[64];     //学号
	char name[128]; //姓名
	int score;     //成绩

	struct Student *next;
}stu;

stu *head=NULL;

bool IsEmpty();//判断链表是否为空
bool AddStu(); //添加学生
bool FindStu(); //查找学生
bool DelStu(); //删除学生
bool ChangeStu(); //修改学生

int main() {
	int n;

	while (1) {
		printf("        ************************        \n");
		printf("        ****** 奇牛研究所 ******        \n");
		printf("        ************************        \n");
		printf("               1.增加学生               \n");
		printf("               2.查找学生               \n");
		printf("               3.修改学生               \n");
		printf("               4.删除学生               \n");
		printf("               0.退出                   \n\n\n");
		
		printf("请输入0-4\n");
		scanf("%d", &n);

		switch (n)
		{
		case 1:
			AddStu();
			break;
		case 2:
			FindStu();
			break;
		case 3:
			ChangeStu();
			break;
		case 4:
			DelStu();
			break;
		case 0:
			exit(0);
		default:
			printf("输入有误,请重新输入!\n");
			break;
		}
	}
}

bool IsEmpty()
{
	if (!head) {
		printf("链表为空,操作失败!\n");
		return true;
	}
	return false;
}

bool AddStu()
{
	int n;
	stu  *s;
	//初始化头节点,头节点不存值
	head = (stu*)malloc(sizeof(stu));
	head->next = NULL;
	
	if (!head) return false;
	//添加学生
	printf("请输入要添加的人数\n");
	scanf("%d", &n);


	while (n--) {
		s = (stu*)malloc(sizeof(stu));
		if (!s)return false;
		printf("请依次输入学生的学号--姓名--成绩--\n");
		scanf("%s%s%d", s->Id, s->name, &s->score);

		//使用前插法
		s->next = head->next;
		head->next = s;
	}

	return true;
	
}

bool FindStu()
{
	if (IsEmpty())return false;
	char s[64];
	stu *p;
	p = head->next;
	
	printf("请输入你要查找的学生编号\n");
	scanf("%s", s);
	while (p) {
		if (!strcmp(p->Id, s)) {
			printf("查找成功!\n");
			printf("学号:%s\t姓名:%s\t成绩:%d\n",
				p->Id, p->name, p->score);
			return true;
		}

			p = p->next;
	}
	printf("未找到该学生!\n");
	return false;
}

bool DelStu()
{
	if (IsEmpty())return false;

	char s[64];
	stu * p, *q = NULL;
	q = head;
	bool flag = false;
	printf("请输入要删除的学生编号\n");
	scanf("%s", s);

	while (q->next)
	{
		if (!strcmp(q->next->Id, s))
		{
			printf("学号:%s\t姓名:%s\t成绩:%d\n",
				q->next->Id, q->next->name, q->next->score);
			p = q->next;
			q->next = p->next;

			free(p);
			printf("删除成功\n");
			flag = true;
		}
		else
		{
			q = q->next;
		}
	}

	if (flag)
	{
		return true;
	}
	printf("未找到该学生\n");
	return false;

}

bool ChangeStu()
{
	if (IsEmpty())return false;

	int n;
	char s[64];
	bool Is = false;
	stu *p;
	p = head->next;
	printf("请输入你要修改的学生编号\n");
	scanf("%s", s);
	while (p) {
		if (!strcmp(p->Id, s)) {
			printf("查找成功!\n");
			printf("学号:%s\t姓名:%s\t成绩:%d\n",
				p->Id, p->name, p->score);
			Is = true;
			break;
		}

		p = p->next;
	}
	if (!Is) {
		printf("没有该学生!\n");
		return false;
 }
	printf("奇牛研究所修改子菜单\n");
	printf("1.修改学号\n");
	printf("2.修改姓名\n");
	printf("3.修改成绩\n");
	printf("请输入要进行的操作\n");
	scanf("%d", &n);

	switch(n) {
	case 1: scanf("%s", p->Id); break;
	case 2: scanf("%s", p->name); break;
	case 3:scanf("%d", p->score); break;
	}
	return true;
}

石少师弟的开发思路:手撸管理系统,先建立一个主菜单,然后各个功能完善。(这特么着实有点像我沙石乐坑人的画风啊,一堆介绍砸过去,然并卵,真可谓是少年自由少年强,华夏英雄挺脊梁啊!师兄很感动,读者很动感!动感 == 想动手的感觉…)

//结尾:
上述代码如有不懂可以加我们的学习交流群进行讨论
更多源码资料请关注我们,每周不定期更新源码,仅供学习,拒绝抄袭。
学习交流6群:1121175506
联系QQ号:1611653027

沙石乐:好了,上面就是小师弟石少最近在学习期间撸来练习c语言的学生管理系统了,建议c语言的初学者可以多看看他写的,说不定会找到属于你自己的思路喔!下班!

导演:咳咳!沙石乐,你是不是忘了啥!

我的心理活动:TMD,狗秃驴,头发都掉光了,记性还这么好!

正如我boss说的,我的c语言学生管理系统下篇,也就是高潮,就要在下周上线啦(上班啦),这特么还真是个令人绝望的消息…

吃瓜群众:是呀是呀!

沙石乐:是尼玛b,人类的本质果然是复读机!那么大家下次再见,欢迎大家来加入我们的学习讨论群,群号:1121175506,don`t say bye!

你可能感兴趣的:(c语言)