栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】学生信息系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】学生信息系统

这是大一第一次做出来的程序 想着也有点纪念意义

两个文章一起发是因为懒(

#define _CRT_SECURE_NO_WARNINGS //编程软件为VS2019
#include //io头文件
#include //用到了字符串
#include //用到了system
#include //有个小惊喜
#include //控制一下窗口大小

struct stu;
void luru();//初次录入
void zengjia();//增加学生
void liulan();//浏览信息
void chaxuehao();//学号查成绩
void chamingzi();//姓名查成绩
int zcj(int);//计算总成绩
void paichengji();//成绩排序
void paixingming();//姓名排序
void shanchu();//删除
void xiugai();//修改
void yinmi();//特殊功能

int m = 0;//记录已录入学生数量
int zhu1 = 0;//判断是否使用过初次录入
int zhu2 = 0;//判断是否是第一次进入主函数
int jimenchengji = 0;//记录 要求的成绩数量
int jigeren = 0;//记录 要求的人数上限

struct stu//学号 姓名 成绩 结构体
{
	int xuehao;
	char xingming[20];//姓名上限为20个字符
	int chengji[6];
}k[40];//最多人数为40



void luru()//初次录入
{
	if (zhu1 == 123)
	{
		goto zhuzhu;//经过一次初次录入后,zhu1会被赋值 123 再次进入会直接goto进 zhuzhu
	}
	int i = 0;//循环
	int a = 0;//初次录入的人数
	int j = 0;//循环
	printf("n请问你要录入几个人呢?n");
	scanf("%d", &a);
	m = a;//记录总人数
	zhu1 = 123;//判断是否进入过初次录入
	for (i = 0; i < a; i++)//本次录入几人 就循环输入几次
	{
		printf("n请输入这位学生的学号 姓名 各科成绩(共 %d 门课) 一共有 %d 名学生需要录入,这是第 %d 位 n",jimenchengji, a, i + 1);
		scanf("%d %s", &k[i].xuehao, k[i].xingming);
		for (j = 0; j < jimenchengji; j++)//本次录入几门成绩 就循环输入几次
			scanf("%d", &k[i].chengji[j]);
	}
	while (getchar() != 'n')//因为缓冲区总是被'n'占满,scanf总是被无视,所以清理缓冲区中的'n'
	{
		;
	}
	if (zhu1 == 124341421)
	{
	zhuzhu:
		printf("n你已经初次录入过了!如果想要增加学生的话n请选择 2.增加学生信息!n");//第二次进入《初次录入》时的提示
	}
	system("pause");//主函数中会清屏 在此暂停
}

void zengjia()//增加录入人数
{
	int a = 0;//本次增加人数
	int i = 0;//循环
	int j = 0;//循环
	printf("n请问你要增加几个人呢?n");
	scanf("%d", &a);
	for (i = m; i < (a + m); i++)//与《初次录入》程序逻辑相同  接着《初次录入》往后面序号的结构体录入信息
	{
		printf("请输入这位学生的学号 姓名 各科成绩(共 %d 门课) 一共有 %d 名学生需要录入,这是第 %d 位 n",jimenchengji,a, i + 1 - m);
		scanf("%d %s", &k[i].xuehao, k[i].xingming);
		for (j = 0; j < jimenchengji; j++)
		{
			scanf("%d", &k[i].chengji[j]);
		}
	}
	m += a;//记录总人数
	while (getchar() != 'n')//清理缓冲区
	{
		;
	}
	system("pause");//暂停
}

void liulan()//浏览已录入的成绩
{
	int i = 0, j = 0;//循环
	if (m == 0)//如果总人数是0,则提示
	{
		printf("n暂无学生成绩录入n");
	}
	if (m != 0)
	{
		printf("n现有学生的如下n顺序为 学号 姓名");
		for (i = 1; i <= jimenchengji; i++)//提示一下有几门成绩
		{
			printf(" 成绩%d ", i);
		}
		for (i = 0; i < m; i++)//和《初次录入》的结构逻辑相同 将scanf换成了printf
		{
			printf("n%d %s", k[i].xuehao, k[i].xingming);
			for (j = 0; j < jimenchengji; j++)
			{
				printf(" %d", k[i].chengji[j]);
			}
		}
		printf("n");//这个就是为了让“按任意键继续”去下一行,美观一些
	}
	while (getchar() != 'n')//清理缓冲区
	{
		;
	}
	system("pause");//暂停
}

void chaxuehao()//以学号查询成绩
{
	int i = 0, j = 0, n = 0, a = 0;//i j n都是循环用的,a是用来输入学号的
	if (m == 0)
	{
		printf("n暂无学生成绩录入n");
	}
	if (m != 0) 
	{
		printf("n请输入想要查找的学号n");
		scanf("%d", &a);
		for (n = 0; n < m; n++)//循环一遍结构体 找一下对应学号
		{
			if (k[n].xuehao == a)//找到之后k[n]就是该名学生的结构体序号
			{
				printf("n该同学的学号 姓名");//与《浏览》中打印学生成绩的逻辑相同
				for (i = 1; i <= jimenchengji; i++)
				{
					printf(" 成绩%d ", i);
				}
				printf("为:n");
				printf("n%d %s", k[n].xuehao, k[n].xingming);
				for (j = 0; j < jimenchengji; j++)
				{
					printf(" %d", k[n].chengji[j]);
				}
				printf("n");
				break;//打印完这名学生后跳出循环
			}
		}
		if (n == m)
			printf("n没有找到该名学生的信息n");//当循环过m遍之后,就找完了结构体里录入的所有信息。若仍然没有配对的,就输出“没有找到”
	}
	while (getchar() != 'n')//清理缓冲区
	{
		;
	}
	system("pause");//暂停
}

void chamingzi()//以姓名查询成绩
{
	int i = 0, j = 0, n = 0;//循环
	char a[20]="0";//输入a代表该名同学的名字
	if (m == 0)//如果 m = 0则结构体中 没有学生成绩录入
	{
		printf("n暂无学生成绩录入n");
	}
	if (m != 0)
	{
		printf("n请输入想要查找的姓名n");
		scanf("%s", a);
		for (n = 0; n < m; n++)//与以学号查询成绩的逻辑相同
		{
			if (strcmp(k[n].xingming, a) == 0)
			{
				printf("n该同学的学号 姓名");
				for (i = 1; i <= jimenchengji; i++)
				{
					printf(" 成绩%d ", i);
				}
				printf("为:n");
				printf("n%d %s", k[n].xuehao, k[n].xingming);
				for (j = 0; j < jimenchengji; j++)
				{
					printf(" %d", k[n].chengji[j]);
				}
				printf("n");
				break;
			}
		}
		if (n == m)
			printf("n没有找到该名学生的信息n");//提示 循环 m 遍后,则结构体内没有这名学生的信息
	}
	while (getchar() != 'n')//缓冲区
	{
		;
	}
	system("pause");//暂停
}

int zcj(int x)//求总成绩 输入x 返回k[x].chengji的和
{
	int i = 0, zcj = 0;
	for (i = 0; i < jimenchengji; i++)
	{
		zcj += k[x].chengji[i];
	}
	return zcj;
}

void paichengji()//以总成绩排序
{
	int i = 0, j = 0,a[40],b = 0,c = 0;//a[40]是用来接收结构体k[40]总成绩的 b是用来模拟 m 的,模拟的原因在下面,i j c都是循环
	if (m == 0)
	{
		printf("n暂无学生成绩录入n");
	}
	if (m != 0)
	{
		for (i = 0; i < m; i++)//给a[i]赋值k[i] 的总成绩
		{
			a[i] = zcj(i);
		}
		for (i = 0; i < m; i++)//给a排序
		{
			for (j = i; j < m; j++)
			{
				if (a[i] < a[j])
				{
					int jiaohuan = a[j];
					a[j] = a[i];
					a[i] = jiaohuan;
				}
			}
		}
		for (i = 0, b = m; i < b; i++)//给a删除重复的成绩,否则若n个总成绩重复时 程序会打印 2^n 次
		{
			for (j = i + 1; j < b; j++)
			{
				if (a[i] == a[j])
				{
					for (c = j; c < b; c++)
						a[c] = a[c + 1];
					j--;
					b--;
				}
			}
		}
		printf("n现有学生的如下n顺序为 学号 姓名");
		int n = 0;
		for (n = 1; n <= jimenchengji; n++)
		{
			printf(" 成绩%d ", n);
		}
		printf("总成绩");
		printf(":n");
		for (i = 0; i < m; i++)
		{
			for (j = 0; j < m; j++)
			{
				if (a[i] == zcj(j))//通过a[i]的总成绩,找到对应的k[j],并将k[j]的学号姓名成绩都打印出来。如果刚才没有删除a中的重复元素,则会导致打印多余学生
				{

					printf("n%d %s", k[j].xuehao, k[j].xingming);
					for (n = 0; n < jimenchengji; n++)
					{
						printf(" %d", k[j].chengji[n]);
					}
					printf(" %d", zcj(j));
					printf("n");
				}
			}
		}
	}
	while (getchar() != 'n')//清理缓冲区
	{
		;
	}
	system("pause");//暂停
}

void paixingming()//用姓名排序
{
	char a[20][40];//接收k.xingming
	int i = 0,j = 0;//循环
	if (m == 0)
	{
		printf("n暂无学生成绩录入n");
	}
	if (m != 0)
	{
		for (i = 0; i < m; i++)
		{
			strcpy(a[i], k[i].xingming);//a[i]接收k[i].xingming
		}
		for (i = 0; i < m; i++)//给a排序
		{
			for (j = i; j < m; j++)
			{
				if (strcmp(a[i], a[j]) > 0)
				{
					char jiaohuan[20];
					strcpy(jiaohuan, a[i]);
					strcpy(a[i], a[j]);
					strcpy(a[j], jiaohuan);
				}
			}
		}
		printf("n现有学生的如下n顺序为 学号 姓名");//打印逻辑和总成绩排序一样
		int n = 0;
		for (n = 1; n <= jimenchengji; n++)
		{
			printf(" 成绩%d ", n);
		}
		printf(":n");
		for (i = 0; i < m; i++)
		{
			for (j = 0; j < m; j++)
			{
				if (strcmp(a[i], k[j].xingming) == 0)
				{
					printf("n%d %s", k[j].xuehao, k[j].xingming);
					for (n = 0; n < jimenchengji; n++)
					{
						printf(" %d", k[j].chengji[n]);
					}
					printf("n");
				}
			}
		}
	}
	while (getchar() != 'n')//清理缓冲区
	{
		;
	}
	system("pause");//暂停
}



void shanchu()
{
	int i = 0, j = 0, a = 0, n = 0, b = 0;//a 接收 被删除的学号 b 是下面交换时的中间值 i,j,n是循环
	char jiaohuan[20];//姓名交换的中间值
	if (m == 0)
	{
		printf("n暂无学生成绩录入n");
	}
	if (m != 0) 
	{
		printf("n请输入您要删除的学号n");
		scanf("%d", &a);
		for (i = 0; i < m; i++)
		{
			if (k[i].xuehao == a)//找到该名学生结构体序号是k[i]
			{
				for (j = i; j < m - 1; j++)//将该名学生与后面的学生 姓名 学号 成绩都进行交换,总计需要交换 m - i - 1 次
					                       //j 初始值又为 i 则可计算为 当限制条件为j < m - 1时 ,可让for循环 m - i - 1次
					                       //交换到最后 j 与 j+1交换时 ,需要删除的信息 就会变成 m - 1,即结构体序号中的最后一位
				{
					for (n = 0; n < jimenchengji; n++)
					{
						b = k[j].chengji[n];
						k[j].chengji[n] = k[j + 1].chengji[n];
						k[j + 1].chengji[n] = b;
					}
					b = k[j].xuehao;
					k[j].xuehao = k[j + 1].xuehao;
					k[j + 1].xuehao = b;
					strcpy(jiaohuan, k[j].xingming);
					strcpy(k[j].xingming, k[j + 1].xingming);
					strcpy(k[j + 1].xingming, jiaohuan);
				}
			}
		}
		m--;// 将m--  因为输出成绩时  输出数量由m控制  因此 m-- 后,输出成绩便不会输出最后一位结构体
		    // 并且 输入成绩时 输入的位置也由 m 控制,输入新的学生信息时  会覆盖被删除的信息
		printf("n删除成功!n");
	}
	while (getchar() != 'n')//清理缓冲区
	{
		;
	}
	system("pause");//暂停
}
void xiugai()//修改学生信息
{
	int i = 0, j = 0, a = 0;//a接收学号, i j循环
	if (m == 0)
	{
		printf("n暂无学生成绩录入n");
	}
	if (m != 0)
	{
		printf("n请输入需要修改的学号n");
		scanf("%d", &a);
		for (i = 0; i < m; i++)//与《初次录入》结构相同
		{
			if (k[i].xuehao == a)
			{
				printf("n请重新输入");
				int n = 0;//循环
				for (n = 1; n <= jimenchengji; n++)
				{
					printf(" 成绩%d ", n);
				}
				printf(":n");
				for (j = 0; j < jimenchengji; j++)
				{
					scanf("%d", &k[i].chengji[j]);
				}
			}
		}
		printf("n修改成功!n");
	}
	while (getchar() != 'n')//清理缓冲区
	{
		;
	}
	system("pause");//暂停
}

void yinmi()//特殊功能 打印心
{
	system("cls");//清屏
	Sleep(300);//延时300ms 
	printf("ttt**********                              **********n");
	Sleep(300);
	printf("tt   *****          ******                   *****          *****n");
	Sleep(300);
	printf("tt***                     ****            ****                   ***n");
	Sleep(300);
	printf("t     ***                            ***     ***                           ***n");
	Sleep(300);
	printf("t   **                                  *****                                 **n");
	Sleep(300);
	printf("t   *                                                                          *n");
	Sleep(300);
	printf("t  **                            421109070919 朱轶豪                           **n");
	Sleep(300);
	printf("t **                                                                            **n");
	Sleep(300);
	printf("t  *                        听我说      谢谢你     因为有你                     *n");
	Sleep(300);
	printf("t   **                                                                         **n");
	Sleep(300);
	printf("t     ***                                                                   ***n");
	Sleep(300);
	printf("t       ***                           温暖了四季                          ***n");
	Sleep(300);
	printf("t         ***                                                           ***n");
	Sleep(300);
	printf("t           ***                                                       ***n");
	Sleep(300);
	printf("t             ***                                                   ***n");
	Sleep(300);
	printf("t               ***                                               ***n");
	Sleep(300);
	printf("t                 ***                                           ***n");
	Sleep(300);
	printf("t                   ***                                       ***n");
	Sleep(300);
	printf("t                     ***                                   ***n");
	Sleep(300);
	printf("t                       ***                               ***n");
	Sleep(300);
	printf("t                         ***                           ***n");
	Sleep(300);
	printf("t                           ***                       ***n");
	Sleep(300);
	printf("t                             ***                   ***n");
	Sleep(300);
	printf("t                               ***               ***n");
	Sleep(300);
	printf("t                                 ***           ***n");
	Sleep(300);
	printf("t                                   ***       ***n");
	Sleep(300);
	printf("t                                     ***   ***n");
	Sleep(300);
	printf("t                                       ** **n");
	Sleep(300);
	printf("t                                        ***n");
	while (getchar() != 'n')//清理缓冲区
	{
		;
	}
	system("pause");//暂停
}


int main()
{
	system("mode con cols=120 lines=40");//改变窗口大小
		gaijimen://为后面goto提供坐标
			printf("************************************************************************************************************************n");
			printf("***************                      请问您在这个程序当中 想要记录几科成绩呢?                           ***************n");
			printf("n                                                   我选择...");
			scanf("%d", &jimenchengji);
			if (zhu2 == 1234123)//修改时才显示,初次录入不显示
			{
				printf("n修改成功!n");
				system("pause");
			}
		if (zhu2 != 1234123)//在后面会赋值 zhu2 = 1234123 防止 下次修改《成绩数量》时 进入修改《学生上限》
		{
		gaijiren://为后面goto提供坐标
			printf("n************************************************************************************************************************n");
			printf("***************                  请问您在这个程序当中 最多想储存几位同学的成绩呢?                         *************n");
			printf("n                                                   我选择..."); 
			scanf("%d", &jigeren);			
			if (zhu2 == 1234123)//修改时才显示,初次录入不显示
			{
				printf("n修改成功!n");
				system("pause");
			}
		}
			zhu2 = 1234123;//赋值
		system("cls");//清屏
	int a = 0, p = 0;
	while (1)
	{
		if (m > jigeren)
		{
			while (1)
				printf("人数超了不知道?自己定的人数上限自己不知道?t");//如果人数超出上限会有提示
		}
		printf("************************************************************************************************************************n");
		printf("************************************************************************************************************************n");
		printf("***********************    学生信息录入系统  学号  421109070919    作者:朱轶豪       **********************************n");
		printf("************************************************************************************************************************n");
		printf("***                                                                     ************************************************n");
		printf("***                            1. 初次录入学生信息                      ***            最多录入 %-2d 人                ***n",jigeren);
		printf("***                            2. 增加一名学生的信息                    ***            每人应录入 %-2d 科成绩          ***n", jimenchengji);
		printf("***                            3. 学生信息浏览                          ***            现已录入 %-2d 人                ***n", m);
		printf("***                            4. 信息查询(按学号查)                  ************************************************n");
		printf("***                            5. 信息查询(按姓名查)                                                               ***n");
		printf("***                            6. 信息排序(按总分降序)                                                             ***n");
		printf("***                            7. 信息排序(按姓名排序)                                                             ***n");
		printf("***                            8. 信息删除(给定学号,删除该学生信息)                                               ***n");
		printf("***                            9. 信息修改(给定学号,修改该学生信息)                                               ***n");
		printf("***                           10. 更改录入学生上限或录入成绩数量                                                     ***n");
		printf("***                            0. 退出                                                                               ***n");
		printf("***                                输入123456        给你画画                                                        ***n");
		printf("************************************************************************************************************************n"); 
		printf("************************************************************************************************************************n");
		printf("我选择:...");
		scanf("%d", &a);

		switch (a)
		{
		case 0:
			return 0;
			break;
		case 1:
			luru();
			break;
		case 2:
			zengjia();
			break;
		case 3:
			liulan();
			break;
		case 4:
			chaxuehao();
			break;
		case 5:
			chamingzi();
			break;
		case 6:
			paichengji();
			break;
		case 7:
			paixingming();
			break;
		case 8:
			shanchu();
			break;
		case 9:
			xiugai();
			break;
		case 10:
			printf("选择修改录入学生上限输入 1 n选择修改录入成绩数量输入 2 n");//更改学生上限和成绩数量
			scanf("%d", &p);
			if (1 == p)
				goto gaijiren;
			if (2 == p)
				goto gaijimen;
			break;
		case 123456:
			yinmi();
			break;
		default:
			printf("请选择输入一个页面上的选项");//如果选项中没有你输入的数,会有提示
			break;
		}
		system("cls");//清屏
	}
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876656.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号