当前位置: 首页 > news >正文

学生成绩管理系统---数据结构、C语言课程设计

功能要求

1.使用单链表实现

2.学生成绩应包含4科成绩和总成绩(C语言、数据结构、高数、英语)

3.建立学生成绩单并保存到文件中(直接从控制台获取)

4.打印学生成绩单

5.按学号或者姓名查找学生成绩单

6.删除指定学生的信息

7.修改学生信息

8.要有菜单显示

功能模块 

1.定义学生信息结构体和单链表结构体

typedef struct student
{
	char name[20];//姓名
	char clas[20];//班级
	char stuNumber[20];//学号
	int grade[5];//4科成绩和总成绩
}student;
typedef struct stuNode
{
	student data;
	struct stuNode *next;
}stuNode;

2.头插法建立学生成绩单

void createStudentInfo(stuNode **head)
{
	stuNode *newNode = (stuNode*)malloc(sizeof(stuNode));
	printf("依次输入姓名 班级 学号 C语言 数据结构 高数 英语成绩:\n");
	scanf("%s", newNode->data.name);
	scanf("%s", newNode->data.clas);
	scanf("%s",newNode->data.stuNumber);
	scanf("%d %d %d %d", &(newNode->data.grade[0]), &(newNode->data.grade[1]), &(newNode->data.grade[2]), &(newNode->data.grade[3]));
	newNode->data.grade[4] = newNode->data.grade[0] + newNode->data.grade[1] + newNode->data.grade[2] + newNode->data.grade[3];
	if (*head == NULL)
	{
		newNode->next = NULL;
		*head = newNode;
	}
	else
	{
		newNode->next = *head;
		(*head) = newNode;
	}
}

3.将成绩单导入到文件stu1中

void printToFile(stuNode *head)
{
	stuNode *cur = head;
	FILE *pfile;
	pfile = fopen("C:\\Users\\user\\Desktop\\stu1.txt", "w");//以只写的方式打开一个文件stu1.txt
	if (pfile == NULL)
	{
		printf("失败\n");
		exit(-1);
	}
	while (cur)
	{
		fputs(cur->data.name, pfile);//项文件中写入字符串(name)
		fputc('  ', pfile);//空格间隔开所输入的信息
		fputs(cur->data.clas, pfile);
		fputc('  ', pfile);
		fputs(cur->data.stuNumber, pfile);
		putc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[0]);//格式化写入文件
		fputc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[1]);
		fputc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[2]);
		fputc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[3]);
		fputc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[4]);
		fputc('\n', pfile);
		cur = cur->next;
	}
	fclose(pfile);

}

4.打印学生成绩单

void print(stuNode *head)
{
	stuNode *cur = head;
	while (cur)
	{
		printf("%s %s %s %d %d %d %d %d\n", cur->data.name, cur->data.clas, cur->data.stuNumber, cur->data.grade[0], cur->data.grade[1], cur->data.grade[2], cur->data.grade[3], cur->data.grade[4], cur->data.grade[5]);
		cur = cur->next;
	}
}

5.查找学生成绩(按照学号查找)

void search(stuNode *head,char *stuNumber)
{
	stuNode *cur = head;
	while (cur)
	{
		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
		{
			printf("%s %s %s %d %d %d %d %d\n", cur->data.name, cur->data.clas, cur->data.stuNumber, cur->data.grade[0], cur->data.grade[1], cur->data.grade[2], cur->data.grade[3], cur->data.grade[4], cur->data.grade[5]);
			return;
		}
		cur = cur->next;
	}
	printf("查无此人!\n");
}

6.删除指定学生的信息

void delete(stuNode *head, char *stuNumber)
{
	stuNode *preCur = head;
	stuNode *cur = head;
	while (cur)
	{
		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
		{
			preCur->next = cur->next;
			free(cur);
			return;
		}
		else
		{
			preCur = cur;
			cur = cur->next;
		}
	}
	printf("查无此人!\n");
}

7.修改指定学生的信息

void update(stuNode *head, char *stuNumber)
{
	stuNode *cur = head;
	while (cur)
	{
		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
		{
			printf("请输入该学生的信息:\n");
			scanf("%s", cur->data.name);
			scanf("%s", cur->data.clas);
			scanf("%s", cur->data.stuNumber);
			scanf("%d %d %d %d", &(cur->data.grade[0]), &(cur->data.grade[1]), &(cur->data.grade[2]), &(cur->data.grade[3]));
			cur->data.grade[4] = cur->data.grade[0] + cur->data.grade[1] + cur->data.grade[2] + cur->data.grade[3];

			//更新文件
			printToFile(head);
			return;
		}
		else
		{
			cur = cur->next;
		}
	}
	printf("查无此人\n");
}

8.菜单显示

 

c语言程序

.h文件

#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#include<string.h>

typedef struct student
{
	char name[20];//姓名
	char clas[20];//班级
	char stuNumber[20];//学号
	int grade[5];//4科成绩和总成绩
}student;
typedef struct stuNode
{
	student data;
	struct stuNode *next;
}stuNode;

void createStudentInfo(stuNode **head);
void print(stuNode *head);
void printToFile(stuNode *head);
void search(stuNode *head, char *stuNumber);
void delete(stuNode *head,char *stuNumber);
void update(stuNode *head,char *stuNumber);
void menue();

.c文件

#include"grade.h"
void createStudentInfo(stuNode **head)
{
	stuNode *newNode = (stuNode*)malloc(sizeof(stuNode));
	printf("依次输入姓名 班级 学号 C语言 数据结构 高数 英语成绩:\n");
	scanf("%s", newNode->data.name);
	scanf("%s", newNode->data.clas);
	scanf("%s",newNode->data.stuNumber);
	scanf("%d %d %d %d", &(newNode->data.grade[0]), &(newNode->data.grade[1]), &(newNode->data.grade[2]), &(newNode->data.grade[3]));
	newNode->data.grade[4] = newNode->data.grade[0] + newNode->data.grade[1] + newNode->data.grade[2] + newNode->data.grade[3];
	if (*head == NULL)
	{
		newNode->next = NULL;
		*head = newNode;
	}
	else
	{
		newNode->next = *head;
		(*head) = newNode;
	}
}

void print(stuNode *head)
{
	stuNode *cur = head;
	while (cur)
	{
		printf("%s %s %s %d %d %d %d %d\n", cur->data.name, cur->data.clas, cur->data.stuNumber, cur->data.grade[0], cur->data.grade[1], cur->data.grade[2], cur->data.grade[3], cur->data.grade[4], cur->data.grade[5]);
		cur = cur->next;
	}
}

void printToFile(stuNode *head)
{
	stuNode *cur = head;
	FILE *pfile;
	pfile = fopen("C:\\Users\\user\\Desktop\\stu1.txt", "w");//以只写的方式打开一个文件stu1.txt
	if (pfile == NULL)
	{
		printf("失败\n");
		exit(-1);
	}
	while (cur)
	{
		fputs(cur->data.name, pfile);//项文件中写入字符串(name)
		fputc('  ', pfile);//空格间隔开所输入的信息
		fputs(cur->data.clas, pfile);
		fputc('  ', pfile);
		fputs(cur->data.stuNumber, pfile);
		putc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[0]);//格式化写入文件
		fputc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[1]);
		fputc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[2]);
		fputc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[3]);
		fputc('  ', pfile);
		fprintf(pfile, "%d", cur->data.grade[4]);
		fputc('\n', pfile);
		cur = cur->next;
	}
	fclose(pfile);

}

void search(stuNode *head,char *stuNumber)
{
	stuNode *cur = head;
	while (cur)
	{
		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
		{
			printf("%s %s %s %d %d %d %d %d\n", cur->data.name, cur->data.clas, cur->data.stuNumber, cur->data.grade[0], cur->data.grade[1], cur->data.grade[2], cur->data.grade[3], cur->data.grade[4], cur->data.grade[5]);
			return;
		}
		cur = cur->next;
	}
	printf("查无此人!\n");
}

void delete(stuNode *head, char *stuNumber)
{
	stuNode *preCur = head;
	stuNode *cur = head;
	while (cur)
	{
		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
		{
			preCur->next = cur->next;
			free(cur);
			return;
		}
		else
		{
			preCur = cur;
			cur = cur->next;
		}
	}
	printf("查无此人!\n");
}

void update(stuNode *head, char *stuNumber)
{
	stuNode *cur = head;
	while (cur)
	{
		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
		{
			printf("请输入该学生的信息:\n");
			scanf("%s", cur->data.name);
			scanf("%s", cur->data.clas);
			scanf("%s", cur->data.stuNumber);
			scanf("%d %d %d %d", &(cur->data.grade[0]), &(cur->data.grade[1]), &(cur->data.grade[2]), &(cur->data.grade[3]));
			cur->data.grade[4] = cur->data.grade[0] + cur->data.grade[1] + cur->data.grade[2] + cur->data.grade[3];

			//更新文件
			printToFile(head);
			return;
		}
		else
		{
			cur = cur->next;
		}
	}
	printf("查无此人\n");
}

void menue()
{
	printf("------------------------------------------\n");
	printf("            学生成绩管理系统\n");
	printf("1.建立学生成绩单              2.保存到文件\n");
	printf("3.打印                        4.查找\n");
	printf("5.删除                        6.修改\n");
	printf("0.退出                              \n");
	printf("------------------------------------------\n");
	printf("请选择:>");
}

主函数

#include"grade.h"

int main()
{
	stuNode *head = NULL;
	char *stuNumber = NULL;
	int choice;
	do
	{
		menue();
		scanf("%d", &choice);
		switch (choice)
		{
		case 0:
			printf("退出系统,欢迎下次使用\n");
			break;
		case 1:
			createStudentInfo(&head);
			break;
		case 2:
			printToFile(head);
			break;
		case 3:
			print(head);
			break;
		case 4:
			printf("请输入学号进行查找:>");
			scanf("%s",stuNumber);
			search(head,stuNumber);
			break;
		case 5:
			printf("请输入学号进行删除:>");
			scanf("%s", stuNumber);
			delete(head, stuNumber);
			break;
		case 6:
			printf("请输入学号进行修改:>");
			scanf("%s", stuNumber);
			update(head, stuNumber);
			break;
		default:printf("输入有误,请重新输入\n");
			break;
		}
	} while (choice);
	return 0;
}

 

相关文章:

  • 数据结构课程设计---学生成绩管理系统
  • leetcode---环形链表(快慢指针证明)
  • leetcode---环形链表II
  • 剑指offer---复制带随机值的链表
  • Linux---进程概念
  • 数据结构---顺序表和链表
  • C语言课程设计---诗歌管理系统
  • 数据结构---栈和队列(栈、队列、循环队列)
  • leetcode---用两个栈实现队列
  • leetcode---用队列实现栈
  • 数据结构---堆的构建和堆排序(向下、向上调整算法)
  • Linux---进程间通信
  • LeetCode---交换链表中的节点
  • leetcode---数组中重复的数字(非常牛逼的置换算法)、原地置换算法排序
  • 数据结构---二叉树(树和二叉树的基本概念、堆的概念和堆的实现、堆排序、二叉树的顺序和链式结构及其实现、相关面试题解析)
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • android图片蒙层
  • ES6语法详解(一)
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java应用性能调优
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • PAT A1120
  • vue-router的history模式发布配置
  • vue中实现单选
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 驱动程序原理
  • 项目实战-Api的解决方案
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 在Unity中实现一个简单的消息管理器
  • 转载:[译] 内容加速黑科技趣谈
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • PostgreSQL之连接数修改
  • 大数据全解:定义、价值及挑战
  • 移动端高清、多屏适配方案
  • #etcd#安装时出错
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (C语言)fread与fwrite详解
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (第二周)效能测试
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (七)Knockout 创建自定义绑定
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 服务 ServiceController
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET成年了,然后呢?
  • .NET开发人员必知的八个网站
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • /3GB和/USERVA开关
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法