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

一.系统功能介绍

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);
}

三.运行测试

主页面如下:

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

查找功能:

修改功能:

删除功能:

删除小灰后的学生信息:

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

成功保存。

四.总结

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

  • 36
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的C语言图书管理系统的代码示例: ```c #include <stdio.h> #include <string.h> #define MAX_BOOKS 100 // 最大书籍数 struct book { char title[50]; char author[50]; int year; float price; }; struct book library[MAX_BOOKS]; // 图书馆 int num_books = 0; // 当前书籍数 void add_book() { // 添加书籍 if (num_books >= MAX_BOOKS) { printf("图书馆已满,无法添加新书!\n"); return; } struct book new_book; printf("请输入书籍名:"); scanf("%s", new_book.title); printf("请输入作者名:"); scanf("%s", new_book.author); printf("请输入出版年份:"); scanf("%d", &new_book.year); printf("请输入价格:"); scanf("%f", &new_book.price); library[num_books++] = new_book; printf("书籍已成功添加!\n"); } void remove_book() { // 删除书籍 if (num_books <= 0) { printf("图书馆为空,无法删除书籍!\n"); return; } char title[50]; printf("请输入要删除的书籍名:"); scanf("%s", title); int i; for (i = 0; i < num_books; i++) { if (strcmp(library[i].title, title) == 0) { int j; for (j = i; j < num_books - 1; j++) { library[j] = library[j + 1]; } num_books--; printf("书籍已成功删除!\n"); return; } } printf("未找到该书籍!\n"); } void display_books() { // 显示所有书籍 if (num_books <= 0) { printf("图书馆为空!\n"); return; } int i; for (i = 0; i < num_books; i++) { printf("%s\t%s\t%d\t%.2f\n", library[i].title, library[i].author, library[i].year, library[i].price); } } int main() { int choice; do { printf("请选择操作:\n"); printf("1. 添加书籍\n"); printf("2. 删除书籍\n"); printf("3. 显示所有书籍\n"); printf("4. 退出程序\n"); printf(">>> "); scanf("%d", &choice); switch (choice) { case 1: add_book(); break; case 2: remove_book(); break; case 3: display_books(); break; case 4: printf("程序已退出!\n"); break; default: printf("无效的操作!\n"); break; } } while (choice != 4); return 0; } ``` 该图书管理系统可以进行添加书籍、删除书籍、显示所有书籍等操作。在程序运行时,用户会被提示选择操作,选择相应的操作后即可进行对应的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值