图书管理系统(C语言版本)

发布时间:2024年01月19日

一.系统功能介绍

1.添加学生

2.删除学生

3.浏览学生

4.查找学生

5.修改学生信息

6.文件操作

二.整体思想以及代码

添加学生:首要通过scanf_s函数来输入学生的信息。对于总分,平均分可以通过输入的学生的各科的成绩来计算。然后,调用插入函数insertData来实现对学生信息的插入并同时通过savafile来保存到文件种。

主要代码如下:

printf("请输入学生的信息(name,num,math,English,py):");
scanf_s(" %s%s%d%d%d", temp.name,20, temp.num, 20,&temp.math, &temp.English, &temp.py);
//手动处理
temp.sum = temp.math + temp.English + temp.py;
temp.average = temp.sum / 3;
insertData(list, temp);
savafile(list, "student.txt");

insertData函数代码:

void insertData(struct Node* headNode, struct student data)
{
	struct Node* newNode = createNode(data);
	newNode->next = headNode->next;
	headNode->next = newNode;
}

savafile函数代码如下:

void savafile(struct Node* headNode, const char* fileName)
{
	struct Node* pmove = headNode->next;
	FILE* fp = fopen(fileName, "w");
	while (pmove != NULL)
	{
		fprintf(fp, "%s\t%s\t%d\t%d\t%d\t%d\t%d\n", pmove->data.name, pmove->data.num, pmove->data.math
			, pmove->data.English, pmove->data.py, pmove->data.sum, pmove->data.average);
		pmove = pmove->next;
	}
	fclose(fp);
}

删除学生:我设计的比较简单是通过学生的姓名来作为关键字来删除学生信息。通过输入要删除学生的信息,调用deleteName函数来删除学生的信息。并把删除操作同步到文件(只要涉及学生的信息改动,都要同步到文件)

主要代码如下:

printf("请输入要删除学生的姓名:");
scanf_s("%s", temp.name, 20);
deleteName(list, temp.name);
savafile(list, "student.txt");  

deleteName函数代码如下:

void deleteName(struct Node* headNode, const char* name)
{
	struct Node* preNode = headNode;
	struct Node* curNode = headNode->next;
	while (curNode != NULL && strcmp(curNode->data.name, name))
	{
		preNode = curNode;
		curNode = preNode->next;
	}
	if (curNode == NULL)
	{
		printf("删除失败!!,没有找到数据");
	}
	else
	{
		preNode->next = curNode->next;
		free(curNode);
	}
}

浏览学生信息:就是把现有的学生信息打印出来。也就是实现对列表的打印。

void printlist(struct Node* headNode)
{
	struct Node* move = headNode->next;
	printf("姓名\t编号\t数学\t英语\tpy\t总分\t平均分\t\n");
	while (move != NULL)
	{
		printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n", move->data.name,move->data.num,move->data.math
		,move->data.English,move->data.py,move->data.sum,move->data.average);
		move = move->next;
	}
}

查找学生信息:通过输入要查找的学生的姓名(也可以是编号等,小编在这里没有添加,小伙伴们可以根据自己的需要添加)通过调用searchName函数来查找,通过strcmp来看姓名是否匹配。

主要代码如下:

printf("请输入要查找的学生姓名:");
scanf_s("%s", temp.name, 20);
result = searchName(list, temp.name);
if (result != NULL)
{
	printf("姓名\t编号\t数学\t英语\tpy\t总分\t平均分\t\n");
	printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n", 
		result->data.name, 
		result->data.num, 
		result->data.math, 
		result->data.English,
		result->data.py, 
		result->data.sum, 
		result->data.average);
	
}
else
{
	printf("查找不存在\n");
}

searchName函数代码:

struct Node* searchName(struct Node* headNode, const char* name)
{
	struct Node* move = headNode->next;
	while (move != NULL && strcmp(move->data.name,name))
	{
		move = move->next;
	}
	return move;
}

修改学生信息:通过输入学生的姓名来删除学生信息,通过searchName函数来查找到要删除的学生。并同步到文件里面。

主要代码如下:

printf("请输入要修改的学生姓名");
scanf_s("%s", temp.name, 20);
result = searchName(list, temp.name);
if (result != NULL)
{
	printf("请输入学生新的信息(name,num,math,English,py):");
	scanf_s(" %s%s%d%d%d", result->data.name, 20, result->data.num, 20, &result->data.math, &result->data.English, &result->data.py); 
	result->data.sum = result->data.math + result->data.English + result->data.py;
	result->data.average = result->data.sum / 3;
	savafile(list, "student.txt");
}
else
{
	printf("找不到要修改的学生信息\n");
}

文件操作:主要实现方便学生的信息的管理。把学生的信息同步到文件中。

主要代码如下:

void readFromFile(struct Node* headNode, const char* fileName)
{
	FILE* fp = fopen(fileName, "r");
	if (fp == NULL)
	{
		fp = fopen(fileName, "w+");
		fclose(fp);
	}
	struct student temp;
	while (fscanf(fp, "%s\t%s\t%d\t%d\t%d\t%d\t%d\n",
		temp.name,
		temp.num,
		&temp.math,
		&temp.English,
		&temp.py,
		&temp.sum,
		&temp.average) != EOF)
	{
		insertData(list, temp);
	}
	fclose(fp);
}

三.运行测试

主页面如下:

输入的信息如下(通过浏览功能打印出来):

查找功能:

修改功能:

删除功能:

删除小灰后的学生信息:

查看文件,看学生信息是否保存到文件中:

成功保存。

四.总结

好啦!!!以上就是本篇博客的全部内容。喜欢的可以点赞+收藏+关注。你们的喜欢,是小编持续更新的动力。想要源码的可以关注小编后,在评论区留言。祝大家每天学习进步,天天开心。

文章来源:https://blog.csdn.net/2201_75413622/article/details/135625282
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。