学生成绩管理系统---数据结构、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;
}

猜你喜欢

转载自blog.csdn.net/qq_47406941/article/details/110950832
今日推荐