C语言课程设计–成绩管理系统

C语言课程设计–成绩管理系统


前言

第一次写博客,有什么错误还请留言修改,其中,对于颜色的控制的函数,来源于网络,侵删!!!

一、系统功能

成绩管理系统要求实现学生成绩管理的基本功能,包括学生、课程、成绩信息的录入、删除、查找和导入/导出等。学生信息的属性包括学号、姓名、性别和年龄,课程信息包括课号、课名和学分属性,选课信息包括学号、课号和成绩属性。

二、使用步骤

1.主函数

while (s)
	{
		printf("欢迎登录该成绩系统(1.登录 2.注册):\n");
		scanf("%d", &z);
		switch (z) {
		case(1):Signing(mmlist); s = 0; break;
		case(2):registering(mmlist); s = 1; break;
		}
	}
	init(slist, scount, clist, ccount, sclist, sccount);
	while (1)
	{
		*cjcount = create_cjlist(sclist, *sccount, clist, *ccount, cjlist);
		switch (menu_select())
		{
		case 1://输入学生,课程,选课信息 
			printf(">>请选择要输入的信息(1.学生,2.课程,3.选课信息):");
			scanf("%d", &z);
			switch (z) {
			case(2):*ccount = input_course(clist, *ccount); break;
			case 1: *scount = input_stud(slist, *scount); break;
			case 3:*sccount = input_select(sclist, *sccount, clist, *ccount, slist, *scount); break;
			}
			system("pause");
			break;
		case 2://显示所有数据
			printf(">>请选择要显示的信息(1.学生,2.课程,3.选课信息):");
			scanf("%d", &z);
			switch (z) {
			case 1:	disp_stud(slist, *scount); break;
			case 2: disp_course(clist, *ccount); break;
			case 3:	disp_cjlist(cjlist, *cjcount, clist, *ccount, slist, *scount); break;
			}
			system("pause");
			break;
		case 3://按条件删除记录
			printf(">>请选择要删除的信息(1.学生,2.课程,3.选课信息):");
			scanf("%d", &z);
			switch (z) {
			case 1:	*scount = delete_stud(slist, *scount, sclist,sccount); break;
			case 2: *ccount = delete_course(clist, *ccount,sclist,sccount); break;
			case 3:	*sccount = delete_select(sclist, *sccount); break;
			}
			system("pause");
			break;
		case 4://查询信息
			printf(">>请选择要查询的信息(1.学生,2.课程,3.选课信息):");
			scanf("%d", &z);
			switch (z) {
			case 1:	query_stud(slist, *scount); break;
			case 2: query_course(clist, *ccount); break;
			case 3:	query_cjlist(cjlist, *cjcount, clist, *ccount, slist, *scount); break;
			}
			system("pause");
			break;
		case 5://保存记录
			write_to_file1(slist, *scount, clist, *ccount, sclist, *sccount);
			write_to_file2(cjlist, *cjcount, clist, *ccount, slist, *scount);
			color(red); printf("写入成功\n"); color(white);
			system("pause");
			break;
		case 6://退出
			return 0;
		default:
			color(red); printf("输入无效信息\n"); color(white);
		}	
	}
	return 0;

2.运行结果

部分结果运行结果部分程序运行结果

总结

本着开源的原则,接下来对于其他函数就不一一作出介绍(里面有注释 ^ - ^ ),直接贴出源代码,与君共勉;

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include <ctype.h>
#include<windows.system.h>

enum Color
{
	black, blue, green, lakeBlue, red, purple, yellow, white, gray,
	lightBlue, lightGreen, lightSimpleGreen, lightRed, lightPurple, lightYellow, brightWhite
};

typedef struct
{
	char xh[10]; //学号
	char xm[20]; //姓名,10个汉字以内
	char xb[3];  //性别,只能保存一个汉字
	int nl;       //年龄
}Student;

typedef struct
{
	char kh[10]; //课号,长度10字符以内
	char km[25]; //课姓名,12个汉字以内
	float  xf;    //课程学分,为一个浮点数
}Course;

typedef struct
{
	char xh[10]; //学号,长度10字符以下
	char kh[10]; //课程号
	float  cj;    //成绩,为一个浮点数
}Select;

typedef struct
{
	char xh[10]; //学号
	char xm[20]; //姓名
	float cj[30];//各门课程成绩
	float zpj;    //加权平均分
	float zxf;    //总修习学分
}Score;

typedef struct
{
	char zh[15];
	char mm[15];
}sigen;
int main()
{
	int sum,a=0,b=0,c=0,d=0; int z=0;
	int* scount=&a, * ccount=&b, * sccount=&c, * cjcount=&d;
	Student slist[100];
	Course clist[100];
	Select sclist[100];
	Score cjlist[100];
	sigen mmlist[100];
	void init(Student slist[], int* scount, Course clist[], int* ccount, Select sclist[], int* sccount);
	void disp_cjlist(Score cjlist[], int cjcount, Course clist[], int ccount, Student slist[], int scount);
	int create_cjlist(Select sclist[], int sccount, Course clist[], int ccount, Score cjlist[]);
	int input_select(Select sclist[], int sccount, Course clist[], int ccount, Student slist[], int scount);
	void write_to_file1(Student slist[], int scount, Course clist[], int ccount, Select sclist[], int sccount);
	void write_to_file2(Score cjlist[], int cjcount, Course clist[], int ccount, Student slist[], int scount);
	void query_cjlist(Score cjcount[], int cjcoun, Course clist[], int ccount, Student slist[], int scount);
	int input_course(Course clist[], int ccount);
	void disp_course(Course clist[], int ccount);
	int delete_select(Select sclist[], int sccount);
	void query_course(Course clist[], int ccount);
	int delete_stud(Student slist[], int scount, Select sclist[], int* sccount);
	int delete_course(Course clist[], int ccount, Select sclist[], int* sccount);
	int delete_select(Select sclist[], int sccount);
	int input_stud(Student slist[], int scount);
	void sort_slist(Student slist[], int scount);
	void disp_stud(Student slist[], int scount);
	int delete_stud(Student slist[], int scount);
	void query_stud(Student slist[], int scount);
	void color(const unsigned short textColor);
	void registering(sigen mmlist[]);
	int Signing(sigen mmlist[]);
	int menu_select();
	//初始化程序
	int s=1;
	while (s)
	{
		printf("欢迎登录该成绩系统(1.登录 2.注册):\n");
		scanf("%d", &z);
		switch (z) {
		case(1):Signing(mmlist); s = 0; break;
		case(2):registering(mmlist); s = 1; break;
		}
	}
	init(slist, scount, clist, ccount, sclist, sccount);
	while (1)
	{
		*cjcount = create_cjlist(sclist, *sccount, clist, *ccount, cjlist);
		switch (menu_select())
		{
		case 1://输入学生,课程,选课信息 
			printf(">>请选择要输入的信息(1.学生,2.课程,3.选课信息):");
			scanf("%d", &z);
			switch (z) {
			case(2):*ccount = input_course(clist, *ccount); break;
			case 1: *scount = input_stud(slist, *scount); break;
			case 3:*sccount = input_select(sclist, *sccount, clist, *ccount, slist, *scount); break;
			}
			system("pause");
			break;
		case 2://显示所有数据
			printf(">>请选择要显示的信息(1.学生,2.课程,3.选课信息):");
			scanf("%d", &z);
			switch (z) {
			case 1:	disp_stud(slist, *scount); break;
			case 2: disp_course(clist, *ccount); break;
			case 3:	disp_cjlist(cjlist, *cjcount, clist, *ccount, slist, *scount); break;
			}
			system("pause");
			break;
		case 3://按条件删除记录
			printf(">>请选择要删除的信息(1.学生,2.课程,3.选课信息):");
			scanf("%d", &z);
			switch (z) {
			case 1:	*scount = delete_stud(slist, *scount, sclist,sccount); break;
			case 2: *ccount = delete_course(clist, *ccount,sclist,sccount); break;
			case 3:	*sccount = delete_select(sclist, *sccount); break;
			}
			system("pause");
			break;
		case 4://查询信息
			printf(">>请选择要查询的信息(1.学生,2.课程,3.选课信息):");
			scanf("%d", &z);
			switch (z) {
			case 1:	query_stud(slist, *scount); break;
			case 2: query_course(clist, *ccount); break;
			case 3:	query_cjlist(cjlist, *cjcount, clist, *ccount, slist, *scount); break;
			}
			system("pause");
			break;
		case 5://保存记录
			write_to_file1(slist, *scount, clist, *ccount, sclist, *sccount);
			write_to_file2(cjlist, *cjcount, clist, *ccount, slist, *scount);
			color(red); printf("写入成功\n"); color(white);
			system("pause");
			break;
		case 6://退出
			return 0;
		default:
			color(red); printf("输入无效信息\n"); color(white);
		}	
	}
	return 0;
}
void init(Student slist[], int* scount, Course clist[], int* ccount, Select sclist[], int* sccount)//初始换函数
{
	FILE* fp1;
	FILE* fp2;
	FILE* fp3;
	int ch, i = 0, k = 0, j = 0;
	fp1 = fopen("identipy information.txt", "r");
	if (fp1 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	while (!feof(fp1))
	{
		fscanf(fp1,"%s%s%s%d", slist[i].xh, slist[i].xm, slist[i].xb, &slist[i].nl);
		i++;
	}
	*scount = i-1;
	fclose(fp1);
	fp2 = fopen("count.txt", "r");
	if (fp2 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	while (!feof(fp2))
	{
		fscanf(fp2, "%s%s%f", clist[j].kh, clist[j].km,&clist[j].xf);
		j++;
	}
	*ccount = j-1;
	fclose(fp2);
	fp3 = fopen("scount.txt", "r");
	if (fp3 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	while (!feof(fp3))
	{
		fscanf(fp3, "%s%s%f", sclist[k].xh, sclist[k].kh, &sclist[k].cj);
		k++;
	}
	*sccount = k-1;
	fclose(fp3);
}

int input_stud(Student slist[], int scount)//输入函数
{
	int i = 0, k = scount, g, h;
	void color(const unsigned short textColor);
	while (i == 0)
	{
		g = 0;
		printf("输入要记录的若干学生信息(学号,姓名,性别,年龄)\n");
		scanf("%s%s%s%d", slist[k].xh, slist[k].xm, slist[k].xb, &slist[k].nl);
		while (g < scount)
		{
			if (strcmp(slist[k].xh, slist[g].xh) == 0|| strcmp(slist[k].xm, slist[g].xm) == 0)
			{
				color(red);
				printf("存在相同信息,是否要发生替换  是:0 否:1\n"); color(white);
				scanf("%d", &h);
				if (h == 0)
				{
					slist[g] = slist[k];
				}
				else {
					k--;
					break;
				}
				
			}
			g++;
		}
		printf("是否继续输入(是:0 否:1)\n");
		scanf("%d", &i);
		k++;
	}
	return k;
}

int input_course(Course clist[], int ccount)//输入函数
{
	int i = 0, k = ccount, g, h;
	void color(const unsigned short textColor);
	while (i == 0)
	{
		g = 0;
		printf("输入要记录的若干课程信息(课号,课名,学分)\n");
		scanf("%s%s%f", clist[k].kh, clist[k].km,&clist[k].xf);
		while (g < ccount)
		{
			if (strcmp(clist[k].kh, clist[g].kh) == 0|| strcmp(clist[k].km, clist[g].km) == 0)
			{
				color(red);
				printf("存在相同信息,是否要发生替换  是:0 否:1\n"); color(white);
				scanf("%d", &h);
				if (h == 0)
				{
					clist[g] = clist[k];
				}
				else {
					k--;
					break;
				}
			}
			g++;
		}
		printf("是否继续,是:0 否:1\n");
		scanf("%d", &i);
		k++;
	}
	return k;
}

int input_select(Select sclist[], int sccount, Course clist[], int ccount, Student slist[], int scount)//输入函数
{
	int i = 0, k = sccount, g, h, m, n,f;
	int q;
	void color(const unsigned short textColor);
	while (i == 0)
	{
		g = 0; m = 0; n = 0; h = 0, q = 0, f = 0;
		printf("输入要记录的若干学生成绩信息(学号,课号,成绩(无成绩为-1))\n");
		scanf("%s%s%f", sclist[k].xh, sclist[k].kh, &sclist[k].cj);
		while (g < ccount)
		{
			if (strcmp(sclist[k].kh, clist[g].kh) == 0)
			{
				m = 1;
				break;
			}
			g++;
		}
		if (g == ccount)
		{
			color(red);
			printf("非合法输入课程号,请检查后重新进行输入\n"); color(white);
		}
		while (h < scount)
		{
			if (strcmp(sclist[k].xh, slist[h].xh) == 0)
			{
				n = 1;
				break;
			}
			h++;
		}
		if (h == scount)
		{
			color(red);
			printf("非合法输入学号,请检查后重新进行输入\n"); color(white);
		}
		if (!(sclist[k].cj>=0&& sclist[k].cj<=120))
		{
			color(red);
			printf("非合法输入成绩,请检查后重新进行输入\n"); color(white);
		}
		else
		{
			q = 1;
		}
		while (f < k)
		{
			if (strcmp(sclist[k].kh, sclist[f].kh)==0&& strcmp(sclist[k].xh, sclist[f].xh)==0)
			{
				color(red);
				printf("存在相同信息,是否要发生替换  是:0 否:1\n"); color(white);
				scanf("%d", &h);
				if (h == 0)
				{
					sclist[f] = sclist[k];
				}
				else {
					k--;
					break;
				}
			}
			f++;
		}
		if (m == 1 && n == 1&& q == 1)
		{
			k++;
		}
		printf("是否继续或重新输入,是:0 否:1\n");
		scanf("%d", &i);
	}
	return k;
}
void sort_slist(Student slist[], int scount)
{
	int t;
	for (int i = 0; i < scount -1; i++)
	{
		for (int j = 0; j < scount - i - 1; j++)
		{
			t = strcmp(slist[j].xh, slist[j + 1].xh);
			if (t > 0) {
				slist[99] = slist[j]; slist[j] = slist[j + 1]; slist[j + 1] = slist[99];
			}
		}
	}
}
int create_cjlist(Select sclist[], int sccount, Course clist[], int ccount, Score cjlist[])//创建成绩表函数
{
	int i = 0, number = 0, j,g;
	while (i<sccount)
	{
		j = 0;
		while (j<number)
		{
			if (!strcmp(cjlist[j].xh, sclist[i].xh)) {
				break;
			}
			j++;
		}
		if (j == number) {
			strcpy(cjlist[j].xh, sclist[i].xh);
			int e = 0;
			while (e<30) {
				cjlist[j].cj[e++] = -1;
			}
			cjlist[j].zpj = 0; cjlist[j].zxf = 0;
			g = 0;
			while (strcmp(sclist[i].kh,clist[g].kh)) {
				g++;
			}
			cjlist[j].cj[g] = sclist[i].cj;
			cjlist[j].zxf += clist[g].xf;
			if (cjlist[j].zxf == 0) {
				cjlist[j].zpj = 0;
			}
			else {
				cjlist[j].zpj = (cjlist[j].zpj * (cjlist[j].zxf - clist[g].xf) + sclist[i].cj * clist[g].xf) / cjlist[j].zxf;
			}
			number++;
		}
		else {
			g = 0;
			while (strcmp(sclist[i].kh,clist[g].kh)) {
				g++;
			}
			cjlist[j].cj[g] = sclist[i].cj;
			cjlist[j].zxf += clist[g].xf;
			if (cjlist[j].zxf == 0) {
				cjlist[j].zpj = 0;
			}
			else {
				cjlist[j].zpj = (cjlist[j].zpj * (cjlist[j].zxf - clist[g].xf) + sclist[i].cj * clist[g].xf) / cjlist[j].zxf;
			}
		}
		i++;
	}
	return number;
}
void disp_cjlist(Score cjlist[], int cjcount, Course clist[], int ccount, Student slist[], int scount)//显示成绩信息函数
{
	void sort_cjlist(Score cjlist[], int cjcount);
	int h = 0, k = 0, i = 0, j = 0,f;
	while (i< cjcount)
	{
		h = 0;
		while (strcmp(cjlist[i].xh ,slist[h].xh)) 
		{
			h++;
		}
		strcpy(cjlist[i].xm, slist[h].xm);
		i++;
	}
	sort_cjlist(cjlist, cjcount);
	printf("序号\t学号\t   姓名 ");
	while (k < ccount) {
		printf("%12s", clist[k].km);
		k++;
	}
	printf("\t\t均分\t总学分\t");
	printf("\n");
	k = 0;
	while (k< cjcount) {
		printf("%2d %12s% 10s ", k+1, cjlist[k].xh, cjlist[k].xm);
		j = 0;
		while (j< ccount)
		{
			if (cjlist[k].cj[j] == -1)
			{
				printf("            ");
			}
			else {
				printf("%12f", cjlist[k].cj[j]);
			}
			j++;
		}
		printf("%12f%12f\n", cjlist[k].zpj, cjlist[k].zxf);
		if (k % 9 == 0 && k != 0)
		{
			printf("是否需要继续输出  是:0 否:1\n");
			scanf("%d", &f);
			if (f == 0) {
				;
			}
			else {
				break;
			}
		}
		k++;
	}
}
void disp_stud(Student slist[], int scount)//显示学生信息函数
{
	int f;
	void sort_slist(Student slist[], int scount);
	printf("序号\t学号\t姓名\t\t性别\t年龄\t\n");
	sort_slist(slist, scount);
	for (int k = 0; k < scount; k++)
	{
		printf("%-5d%10s%10s%10s%10d\n",k, slist[k].xh, slist[k].xm, slist[k].xb, slist[k].nl);
		if (k % 9 == 0 && k != 0)
		{
			printf("是否需要继续输出  是:0 否:1\n");
			scanf("%d", &f);
			if (f == 0) {
				;
			}
			else {
				break;
			}
		}
	}
}
void disp_course(Course clist[], int ccount)//显示课程信息函数
{
	int f;
	void sort_clist(Course clist[], int ccount);
	sort_clist(clist, ccount);
	printf("课程号\t课名\t\t学分\t\n");
	for (int k = 0; k < ccount; k++)
	{
		printf("%s\t%-16s%f\t\n", clist[k].kh, clist[k].km, clist[k].xf);
		if (k % 9 == 0 && k != 0)
		{
			printf("是否需要继续输出  是:0 否:1\n");
			scanf("%d", &f);
			if (f == 0);
			else {
				break;
			}
		}
	}
}
int delete_stud(Student slist[], int scount, Select sclist[], int* sccount)//删除学生信息函数
{
	char xh[100]; int f;
	void color(const unsigned short textColor);
	int delete_select1(Select sclist[], int* sccount, char xh[10]);
	int m = 101, d; int* p = &scount;
	while (1)
	{
		printf("输入你要删除的学生信息(学号或姓名)\n");
		scanf("%s", xh);
		for (int i = 0; i < scount; i++)
		{
			m = 101;
			if (strcmp(slist[i].xh, xh)==0|| strcmp(slist[i].xm, xh) == 0)
			{
				m = i;
				break;
			}
		}
		if (m == 101)
		{
			color(red);
			printf("没有找到该学生信息\n"); color(white);
		}
		else {
			for (; m < scount - 1; m++)
			{
				slist[m] = slist[m + 1];
			}
			scount -= 1;
			delete_select1(sclist, sccount, xh);
			color(red); printf("修改完成\n"); color(white);
		}
		printf("是否需要继续输出  是:0 否:1\n");
		scanf("%d", &f);
		if (f == 0) {
			;
		}
		else {
			break;
		}
	}
	return scount;
}
int delete_course(Course clist[], int ccount, Select sclist[], int* sccount)//删除课程信息函数
{
	char xh[100];
	int f = 0;
	void color(const unsigned short textColor);
	int delete_select1(Select sclist[], int* sccount, char xh[10]);
	int m = 101, d; int* p = &ccount;
	while (1)
	{
		printf("输入你要删除的课程信息(课程名或课程号)\n");
		scanf("%s", xh);
		for (int i = 0; i < ccount; i++)
		{
			m = 101;
			if (strcmp(clist[i].kh, xh) == 0 || strcmp(clist[i].km, xh) == 0)
			{
				m = i;
				break;
			}
		}
		if (m == 101)
		{
			color(red);
			printf("没有找到该课程信息\n"); color(white);
		}
		else {
			for (; m < ccount - 1; m++)
			{
				clist[m] = clist[m + 1];
			}
			ccount -= 1;
			delete_select1(sclist, sccount,xh);
			color(red); printf("修改完成\n"); color(white);
		}
		printf("是否需要继续输出  是:0 否:1\n");
		scanf("%d", &f);
		if (f == 0);
		else {
			break;
		}
	}
	return ccount;
}

int delete_select(Select sclist[], int sccount)//删除选课信息函数
{
	void color(const unsigned short textColor);
	int f = 0, m, k = 1, g = 0;
	char xh[10];
	while (1)
	{
		g = 0; k = 1;
		printf("输入你要删除的选课信息(学号或课号)\n");
		scanf("%s", xh);
		while (k != 0)
		{
			k = 0, m = 101;
			for (int i = 0; i < sccount; i++)
			{
				if (strcmp(sclist[i].xh, xh)==0||strcmp(sclist[i].kh, xh)==0)
				{
					m = i;
					k = 1;
					g++;
					break;
				}
			}
			if (m == 101&& g == 0)
			{
				color(red);printf("没有找到成绩信息\n"); color(white);
			}
			else {
				for (; m < sccount - 1; m++)
				{
					sclist[m] = sclist[m + 1];
				}
				sccount -= 1;
			}
		}
		if (m == 101 && g == 0);
		else {
			color(red); printf("修改完成\n"); color(white);
		}
		printf("是否需要继续操作删除信息  是:0 否:1\n");
		scanf("%d", &f);
		if (f == 0);
		else {
			break;
		}
	}
	return sccount;
}

int delete_select1(Select sclist[], int* sccount, char xh[10])//删除成绩信息函数
{
	int f = 0, m, k = 1, g = 0; int i;
	while (1)
	{
		g = 0; k = 1;
			for ( i = 0; i < *sccount; i++)
			{
				if (strcmp(sclist[i].xh, xh) == 0 || strcmp(sclist[i].kh, xh) == 0)
				{
					m = i;
					k = 0;
					g++;
					break;
				}
			}
			if (k == 1 && i == *sccount)
			{
				break;
			}
			else {
				for (; m < *sccount - 1; m++)
				{
					sclist[m] = sclist[m + 1];
				}
				*sccount -= 1;
			}
	}
	return 0;
}
int menu_select(void)
{
	char c;
	void color(const unsigned short textColor);
	do {
		system("cls");/*  清屏  */
		color(green); printf("                   (▁▁▁▁∩▁▁▁▁)"); printf("                            (▁▁▁▁∩▁▁▁▁)\n");
		color(green); printf("                        ╭╋╮ "); printf("                                      ╭╋╮ \n");
		color(green); printf("                -▁╭▅▇ □□█▇▆▅▄▃▂▁(╳ )█ ╮"); printf("                -▁╭▅▇ □□█▇▆▅▄▃▂▁(╳ )█ ╮\n");
		color(green); printf("                ╰═ █ ▁ NUAA  C语言▁ ∠═══  ▔▔▔"); printf("           ╰═ █ ▁学生信息管理系统▁ ∠═══  ▔▔▔\n");
		color(green); printf("                     ┣O〓▁ 〓O┫"); printf("                               ┣O〓▁ 〓O┫\n");
		color(white);
		printf("            ---------------------------------------------------------\n");
		color(red);
		printf("            |                功能列表:                             |\n");
		color(white);
		printf("            |                1.输入学生,课程,选课信息             |\n");
		printf("            |                2.显示所有数据                         |\n");
		printf("            |                3.按条件删除记录                       |\n");
		printf("            |                4.按条件查询记录                       |\n");
		printf("            |                5.保存记录                             |\n");
		printf("            |                6.退出                                 |\n");
		printf("            ---------------------------------------------------------\n");
		printf("Input 1-6: ");
		c = getchar();
	} while (c < '0' || c>'10');
	return(c - '0');
}
void color(const unsigned short textColor)      //自定义函根据参数改变颜色 
{
	if (textColor >= 0 && textColor <= 15)     //参数在0-15的范围颜色
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), textColor);  //用一个参数,改变字体颜色
	else   //默认的字体颜色是白色
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void sort_cjlist(Score cjlist[], int cjcount)//排序函数
{
	int t, max, i, j;
	Score m;
	for (i = 0; i < cjcount - 1; i++)
	{
		max = cjlist[0].zpj; t = 0;
		for (j = 0; j < cjcount - i; j++)
		{
			if (max > cjlist[j].zpj) {
				max = cjlist[j].zpj; t = j;
			}
		}
		m = cjlist[cjcount - i - 1]; cjlist[cjcount - i - 1] = cjlist[t]; cjlist[t] = m;
	}
}

void sort_clist(Course clist[], int ccount)//排序函数
{
	int t, i, j;
	Course m;
	for (int i = 0; i < ccount - 1; i++)
	{
		for (int j = 0; j < ccount - i - 1; j++)
		{
			if (strcmp(clist[j].kh,clist[j + 1].kh)>0) {
				m = clist[j]; clist[j] = clist[j + 1]; clist[j + 1] = m;
			}
		}
	}
}

void query_stud(Student slist[], int scount)//查询学生信息函数
{
	char str[100]; int i=0;
	printf("请输入你要查询的学生信息(学号或姓名)\n");
	scanf("%s", str);
	while (i< scount)
	{
		if (strcmp(str, slist[i].xh)==0||strcmp(str, slist[i].xm)==0)
			break;
		else {
			i++;
		}
	}
	if (i == scount) {
		color(red); printf("没有找到该学生的信息\n"); color(white);
	}
	else {
		printf("学号\t\t姓名\t性别\t年龄\t\n");
		printf("%s\t%s\t%s\t%d\n", slist[i].xh, slist[i].xm, slist[i].xb, slist[i].nl);
	}
}

void query_course(Course clist[], int ccount)//查询课程信息函数
{
	char str[100]; int i = 0;
	printf("请输入你要查询的课程信息(课号或课程名)\n");
	scanf("%s", str);
	while (i < ccount)
	{
		if (strcmp(str, clist[i].kh) == 0 || strcmp(str, clist[i].km) == 0)
			break;
		else {
			i++;
		}
	}
	if (i == ccount) {
		color(red); printf("没有找到该课程的信息\n"); color(white);
	}
	else {
		printf("%s\t%s\t%f\n", clist[i].kh, clist[i].km, clist[i].xf);
	}
}

void query_cjlist(Score cjcount[], int cjcoun, Course clist[], int ccount, Student slist[], int scount)//查询成绩信息函数
{
	char str[100]; int i = 0, k = 0, j = 0, h = 0;
	printf("请输入你要查询的学生成绩信息(学号或姓名)\n");
	scanf("%s", str);
	while (i < cjcoun)
	{
		if (strcmp(str, cjcount[i].xh) == 0 || strcmp(str, cjcount[i].xm) == 0)
			break;
		else {
			i++;
		}
	}
	if (i == cjcoun) {
		color(red); printf("没有找到该学生成绩信息\n"); color(white);
	}
	else {
		while (strcmp(cjcount[i].xh, slist[h].xh))
		{
			h++;
		}
		strcpy(cjcount[i].xm, slist[h].xm);
		printf("学号         姓名 ");
		while (k < ccount) {
			printf("%15s", clist[k].km);
			k++;
		}
		printf("   \t均分\t总学分  ");
		printf("\n");  
		printf("%-12s%-10s", cjcount[i].xh, cjcount[i].xm);
		j = 0;
		while (j < ccount)
		{
			if (cjcount[i].cj[j] == -1)
			{
				printf("\t\t");
			}
			else {
				printf("%f   \t", cjcount[i].cj[j]);
			}
			j++;
		}
		printf("%f  %f\t\n", cjcount[i].zpj, cjcount[i].zxf);
	}
}
void write_to_file1(Student slist[], int scount, Course clist[], int ccount, Select sclist[], int sccount)//写文件
{
	FILE* fp1; FILE* fp2; FILE* fp3;
	int i = 0;
	fp1=fopen("student20210522120423.txt", "w");
	if (fp1 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	while (i < scount)
	{
		fprintf(fp1, "%s %s %s %d\n", slist[i].xh, slist[i].xm, slist[i].xb, slist[i].nl);
		i++;
	}
	fclose(fp1);
	i = 0;
	fp2=fopen("course20210522120430.txt", "w");
	if (fp2 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	while (i < ccount)
	{
		fprintf(fp2, "%s %s %f\n", clist[i].kh, clist[i].km, clist[i].xf);
		i++;
	}
	fclose(fp2);
	i = 0;
	fp3 = fopen("select202105221258.txt", "w");
	if (fp3 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	while (i < sccount)
	{
		fprintf(fp3, "%s %s\n", sclist[i].xh, sclist[i].kh);
		i++;
	}
	fclose(fp3);
}
void write_to_file2(Score cjlist[], int cjcount, Course clist[], int ccount, Student slist[], int scount)//写文件
{
	FILE* fp1;
	int h = 0, k = 0, i = 0, j = 0, f;
	void sort_cjlist(Score cjlist[], int cjcount);
	fp1 = fopen("cj20210522120423.txt", "w");
	if (fp1 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	while (i < cjcount)
	{
		h = 0;
		while (strcmp(cjlist[i].xh, slist[h].xh))
		{
			h++;
		}
		strcpy(cjlist[i].xm, slist[h].xm);
		i++;
	}
	sort_cjlist(cjlist, cjcount);
	fprintf(fp1,"序号    学号     姓名 ");
	while (k < ccount) {
		fprintf(fp1,"%15s", clist[k].km);
		k++;
	}
	fprintf(fp1,"\t均分\t总学分\t");
	fprintf(fp1,"\n");
	k = 0;
	while (k < cjcount) {
		fprintf(fp1,"%2d %12s% 10s ", k + 1, cjlist[k].xh, cjlist[k].xm);
		j = 0;
		while (j < ccount)
		{
			if (cjlist[k].cj[j] == -1)
			{
				fprintf(fp1,"\t\t");
			}
			else {
				fprintf(fp1,"%f   \t", cjlist[k].cj[j]);
			}
			j++;
		}
		fprintf(fp1,"%f\t%f\t\n", cjlist[k].zpj, cjlist[k].zxf);
		k++;
	}
}

int Signing(sigen mmlist[])//登录检查函数
{
	int t = 2;
	loop1:
	FILE* fp1;
	int i = 0, k = 0, j = 0, h;
	char a[15], b[15];
	void color(const unsigned short textColor);
	fp1 = fopen("account number.txt", "r");
	if (fp1 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	 while (!feof(fp1))
	{
		fscanf(fp1, "%s%s", mmlist[i].zh, mmlist[i].mm);
		i++;
		j++;
	}
	i -= 1;
	j -= 1;
	fclose(fp1);
	printf("请输入您的账号\n");
	scanf("%s",a);
	while (i>=0)
	{
		if (strcmp(a, mmlist[i].zh) == 0)
		{
			break;
		}
		else {
			i--;
		}
	}
	if (i < 0)
	{
		printf("输入的信息(账号)错误\n");
		goto loop1;
	}
loop:
	printf("请输入您的密码\n");
	h = j;
	scanf("%s", b);
	while (h >= 0)
	{
		if (strcmp(a, mmlist[h].zh) == 0&&strcmp(b, mmlist[h].mm) == 0)
		{
			return 0;
		}
		else {
			h--;
		}
	}
	if (h < 0)
	{
		printf("输入的信息(密码)错误\n");
	}
	while (1)
	{
		color(red); printf("您还有%d次机会,请重新输入\n", t); color(white);
		if (t > 0) {
			t--;
			goto loop;
		}
		else {
			exit(1);
		}
	}
}
void registering(sigen mmlist[])//注册登录信息函数
{
	loop:
	FILE* fp1; 
	int i = 0, k = 0; int j = 0;
	void color(const unsigned short textColor);
	fp1 = fopen("account number.txt", "r");
	if (fp1 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	while (!feof(fp1))
	{
		fscanf(fp1,"%s%s", mmlist[i].zh, mmlist[i].mm);
		i++;
	}
	i--;
	fclose(fp1);
	printf("请输入你要注册的账号及密码\n");
	scanf("%s%s", mmlist[i].zh, mmlist[i].mm);
	while (j < i) {
		if (strcmp(mmlist[i].zh, mmlist[j].zh) == 0) {
			color(red); printf("该账号信息已存在\n"); color(white);
			goto loop;
		}
		j++;
	}
	fp1 = fopen("account number.txt", "w");
	if (fp1 == NULL) {
		printf("错误打开文件\n");
		exit(1);
	}
	while (k<=i)
	{
		fprintf(fp1,"%s %s \n", mmlist[k].zh, mmlist[k].mm);
		k++;
	}
	fclose(fp1);
	color(red); printf("注册成功\n"); color(white);
}

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值