记录黑历史2_C语言学生管理系统雏形(单链表)

昨晚晚修心血来潮,想到自己很久没碰过技术了,一鼓作气写个单链表的学生管理系统
(之前都没搞过,卡在心里不太舒服)
接下来就要研究下文件操作(写入,读取,修改等等)
因为英语太烂,单词很多都没表达清楚
有时间的话,还能搞个SQL去操作下
不过我不知道我还能有多少时间弄下C(大一太忙了)
第一篇是个推箱子,之前误删了

#include<stdio.h>
#include<stdlib.h>
#include<string.h>//主要是字符串操作用的
#include<malloc.h>
#include<Windows.h>//这里主要是清屏用的
typedef struct student//偷个懒,用typedef了
{
	int study_number;
	char name[20];
	struct student *next;
}Node;
Node*CreateHeadNode()//头节点
{
	Node*HeadNode = (Node*)malloc(sizeof(Node));
	HeadNode->next = NULL;
	return HeadNode;
}
void InsertNewNode(int s_number, char name[], Node*HeadNode)//插入节点,这里用的是尾插法,输出更好看
{
	Node*NewNode = (Node*)malloc(sizeof(Node));
	Node*pMove = HeadNode;
	NewNode->study_number = s_number;
	NewNode->next = NULL;
	strcpy(NewNode->name, name);
	
	while (pMove)
	{
		if (pMove->next == NULL)
		{
			pMove->next = NewNode;
			return;
		}
		pMove = pMove->next;
	}
}
void PrintList(Node*HeadNode)//打印节点(遍历链表)
{
		Node*pMove = HeadNode->next;
		system("cls");
		int n = 1;
		while (pMove)
		{
			printf("----------------\n");
			printf("第%d位学生\n学号:%d\n姓名:%s\n", n, pMove->study_number, pMove->name);
			printf("----------------\n");
			pMove = pMove->next;
			n++;
		}
}
void DelNode(Node*HeadNode)//删除节点(加入了文字提示,有dos的感觉了)
{
	//system("cls");
	int FoundData=0;
	Node*pMove = HeadNode;
	Node*LastpMove = HeadNode->next;
	printf("----------------\n");
	printf("\n确认打开删除程序输入y\n");
	char keys = getchar();
	if (keys == 'y')
	{
		printf("请输入要删除的学号\n");
		scanf("%d", &FoundData);
		while (LastpMove)
		{
			if (LastpMove->study_number != FoundData)
			{
				LastpMove = LastpMove->next;
				pMove = pMove->next;
			}
			else
			{
				printf("----------------\n");
				printf("已删除学号:%d\n名字:%s\n",LastpMove->study_number,LastpMove->name);
				pMove->next = LastpMove->next;
				free(LastpMove);
				return;
			}
		}
		printf("找不到学号:%d的学生\n",FoundData);
	}
	else
		system("cls");
		return;
	
}
void InsertNewNodeByOper(Node*HeadNode)//这只是文字提示,然后调用插入节点
{
	//system("cls");
	printf("----------------\n");
	printf("请输入学号:\n");
	int number =0;
	scanf("%d", &number);
	printf("请输入姓名:\n");
	char name[20] = "";
	scanf("%s", &name);

	printf("----------------\n");
	InsertNewNode(number,name, HeadNode);

}
void MyMiniSQL(Node*HeadNode)//初始化链表,下一步就可以搞下文件操作,写到一个excel或txt中来储存
{
	int number[9] = { 88,44,666,22,456,321,84,987,123 };
	char name[9][20] = { "卧槽","啊这","牛逼","淦","不是吧","又要早读","还有晚修","不想上英语课","他妈的" };
	for (int i = 0; i < 9; i++)
		InsertNewNode(number[i], name[i], HeadNode);
}
void Interactive(Node*HeadNode)//小小的交互界面,有点dos的感觉,这个很骚的strcmp是百度回来的,有空研究下用switch
{
	while (1)
	{
		printf("----------------\n");
		printf("end \ del \ add \ print\n");
		char keys[] = "";
		gets(keys);
		if (!strcmp(keys, "end"))
			break;
		else if (!strcmp(keys, "del"))
			DelNode(HeadNode);
		else if (!strcmp(keys, "add"))
			InsertNewNodeByOper(HeadNode);
		else if(!strcmp(keys,"print"))
			PrintList(HeadNode);
	}
	exit(0);
}
int main()
{
	Node*List = CreateHeadNode();//头节点
	MyMiniSQL(List);
	Interactive(List);
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值