首页 > 其他分享 >c语言期末课设,学生信息管理系统

c语言期末课设,学生信息管理系统

时间:2024-12-13 20:31:59浏览次数:6  
标签:课设 scanf 学生 break stu score 期末 printf 信息管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>//需要用到strcmp函数,比较输入的信息是否一样

#define LEN 15//姓名和学号的最大字符数
#define N 50//最大学生人数

int n = 0, t = 1;//n代表当前学生人数,t用来控制整个程序的执行,以及程序的退出;

//函数声明
void menu();//主菜单函数
void help();//使用帮助
void increase();//增加学生信息
void seek();//查找学生信息
void de();//删除学生信息
void save();//保存文件
void present();//显示当前信息
void modify();//修改学生信息
void flush();//刷新学生成绩
void tuichu();//退出函数

struct student
{
	char StuID[LEN];//学生学号
	char Stuname[LEN];//学生姓名
	int Stuage;//学生年龄
	char Stusex;//学生性别
	float score[3]; //各科成绩
}stu[N];

int main()
{
	int num;//num是菜单选项
	while (t)//t是全局变量,用tuichu函数来控制循环是否继续
	{
		menu();//输出主菜单界面
		printf("您好,请输入菜单编号:");
		scanf("%d", &num);
		switch (num)//通过Switch与函数调用结合,来实现菜单功能
		{
		case 1: help(); break;
		case 2: increase(); break;
		case 3: seek(); break;
		case 4: de(); break;
		case 5: save(); break;
		case 6: present(); break;
		case 7: modify(); break;
		case 8: flush(); break;
		case 9: tuichu(); break;
		default:printf("输入有误,请重新输入!");
		}


	}

	system("pause");
	return 0;
}
void menu()//菜单函数
{
	printf("\n\n");
	printf("*****************************************************\n");
	printf("*----------------------duoduo------------------------\n");
	printf("*                 学生信息管理系统                  *\n");
	printf("*****************************************************\n");
	printf("********************系统功能菜单*********************\n");
	printf("----------------------     --------------------------\n");
	printf("*****************************************************\n");
	printf("**    1、使用帮助       *     2、增加学生信息      **\n");
	printf("*****************************************************\n");
	printf("**    3、查询学生信息   *     4、删除学生信息      **\n");
	printf("*****************************************************\n");
	printf("**    5、保存当前信息   *     6、显示当前信息      **\n");
	printf("*****************************************************\n");
	printf("**    7、修改学生信息   *     8、刷新学生信息      **\n");
	printf("*****************************************************\n");
	printf("**    9、退出系统       *                          **\n");
	printf("*************************                            \n");
	printf("----------------------     --------------------------\n");

}
void help()//帮助函数
{
	printf("\n这是一个学生信息管理系统,为了帮助您更快的了解使用它,请先仔细阅读以下注意事项:\n");
	printf("\n                  注意事项:                    \n ");
	printf("\n       1、请根据提示进行操作!\n");
	printf("\n       2、初次使用请先选择增加学生信息!\n");
	printf("\n       3、修改或者增加学生信息后切记保存!\n");
	printf("\n       4、如果数据有错误,请先修改再保存!\n");
	printf("\n       5、若您之前使用过,下次进入系统请先刷新学生信息!\n");
	printf("\n       6、在添加学生时,用两个字符代表不同的性别,比如男用‘M’代替,女用‘W’代替!\n");
	printf("\n       7、保存或者刷新时,输入的文件名后缀请使用.txt,比如: stu.txt,系统会在源程序\n");
	printf("\n          “学生管理系统.exe”的相同目录建立一个.txt文件来保存学生信息,您可以查看\n");
	printf("\n          该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败!\n");
	printf("\n       8、学生信息包括:姓名、学号、性别、年龄、C语言成绩、高数成绩、英语成绩等!\n");
	printf("\n       9、最后感谢您的使用!\n");
	system("pause");//让系统暂停("请按任意键继续"),方便观察和阅读程序
}

void increase()//增加学生函数
{
	int i = n, j, flag, m = 0;//i代表增加学生信息过程中任意时刻的学生人数,m表示增加的人数.
	printf("\n请输入待增加的学生人数:\n");
	scanf("%d", &m);
	if (m > 0) {
		do {
			flag = 1;
			while (flag)//通过flag控制循环,判断新加入的学生是否存在
			{
				flag = 0;
				printf("请输入第%d位学生的学号:\n", i + 1);//第几位学生从1开始计数,而stu[]从零开始,需要加1
				scanf("%s", stu[i].StuID);
				//判断学号是否重复
				for (j = 0; j < i; j++) {
					if (strcmp(stu[i].StuID, stu[j].StuID) == 0) {
						printf("该学号已经存在,请重新输入!\n");
						flag = 1;
						break;
					}
				}
			}
			printf("请输入第%d位学生姓名:\n", i + 1);
			scanf("%s", stu[i].Stuname);
			printf("请输入第%d位学生年龄:\n", i + 1);
			scanf("%d", &stu[i].Stuage);
			getchar();//处理上面输入的换行符,不然系统会把换行符当做一个字符赋值给性别
			printf("请输入第%d位学生性别:\n", i + 1);
			scanf("%c", &stu[i].Stusex);
			printf("请输入第%d位学生的C语言成绩:\n", i + 1);
			scanf("%f", &stu[i].score[0]);
			printf("请输入第%d位学生的高数成绩:\n", i + 1);
			scanf("%f", &stu[i].score[1]);
			printf("请输入第%d位学生的大学英语成绩:\n", i + 1);
			scanf("%f", &stu[i].score[2]);
			i++;
		} while (i < n + m);//只要当前学生人数还没到达添加后的总人数,就得继续添加
	}
	n += m;// 添加完成,系统人数n的值也要增加
	printf("添加完成!\n");
	system("pause");
}
void seek()//查询函数
{
	int i, num, flag;
	char s1[LEN + 1];
	printf("*****************************\n");
	printf("**-------1.按学号查询------**\n");
	printf("**-------2.按姓名查询------**\n");
	printf("**-------3.退出本菜单------**\n");
	printf("*****************************\n");
	while (1)//由于查找不止一次 所以通过while循环来多次查找
	{
		flag = 0;
		printf("请输入子菜单:");
		scanf("%d", &num);
		switch (num)//通过Switch case来判断用什么查询
		{
		case 1:
			printf("请输入需要查找学生的学号:\n");
			scanf("%s", s1);
			for (i = 0; i < n; i++)
			{
				if (strcmp(stu[i].StuID, s1) == 0)
				{
					flag = 1;
					printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");// 反斜线t表示空8个字节,方便输出
					printf("%s\t\t%s\t\t%c\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].StuID, stu[i].Stuname, stu[i].Stusex, stu[i].Stuage, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
				}
			}break;
		case 2:
			printf("请输入需要查找学生的姓名:\n");
			scanf("%s", s1);
			for (i = 0; i < n; i++)
			{
				if (strcmp(stu[i].Stuname, s1) == 0)//通过strcmp函数来查找,两个字符串相同是返回0
				{
					flag = 1;
					printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
					printf("%s\t\t%s\t\t%c\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].StuID, stu[i].Stuname, stu[i].Stusex, stu[i].Stuage, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
				}
			}break;
		case 3: return;//返回主菜单
		default: printf("请在1--3之间输入\n");
		}
		if (flag == 0)
			printf("找不到该学生!\n请重新输入!");
	}
}
void de()//删除函数
{
	int i, j, flag;
	char s1[LEN];
	printf("请输入需要删除的学生学号:\n");
	scanf("%s", s1);
	flag = 0;
	for (i = 0; i < n; i++)
	{
		if (strcmp(s1, stu[i].StuID) == 0)
		{
			flag = 1;
			for (j = i; j < n - 1; j++)
			{
				stu[j] = stu[j + 1];//删除一个就直接把后面的学生都往前移动一位
			}
		}
		if (flag == 1) break;//说明已经找到了需要删除的学生,结束循环
	}
	if (0 == flag)
	{
		printf("该学号不存在!!!\n");
	}

	if (1 == flag)
	{
		printf("删除成功\n");
		n--;//删除后人数减少
	}
	system("pause");
}

void save()//把学生信息保存到文件
{
	int i;
	FILE* fp;
	char filename[LEN + 1];
	printf("请输入要保存的文件名:\n");
	scanf("%s", filename);
	if ((fp = fopen(filename, "w")) == NULL)//通过fopen函数,打开文件成功返回FILE指针,失败返回NULL.
	{
		printf("打开文件失败!\n");  //"w"是指以只写(只写就是只向文件输出信息,不读取)的方式打开文件。
		exit(0);
	}
	for (i = 0; i < n; i++)
		if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1)//正常保存等于1
			printf("保存失败!!\n");
	printf("保存成功!!!\n");
	fclose(fp);
	system("pause");


}

void present()//显示已经添加的学生信息
{
	int i;

	if (n == 0)//n为存储的人数
	{
		printf("您好,现在没有学生信息,请先增加学生信息或者刷新再来试试!\n");
	}
	else
	{
		printf("现在共有%d名学生:\n", n);
		printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
		for (i = 0; i < n; i++)
		{
			printf("%s\t\t%s\t\t%c\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].StuID, stu[i].Stuname, stu[i].Stusex, stu[i].Stuage, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
		}
	}

	system("pause");
}

void modify()//修改函数
{
	int i, flag;
	char ID[LEN], name[LEN], sex;
	int age;
	float score;
	printf("请输入需要修改的学生姓名:\n");
	getchar();//
	gets(name);

	while (1)
	{
		flag = 0;
		for (i = 0; i < n; i++)
		{
			if (strcmp(name, stu[i].Stuname) == 0)
			{
				flag = 1;
				int num;//用于switch函数的子菜单
				printf("***************************************************\n");
				printf("*----1.修改学号--------  -  -----2.修改性别-------*\n");
				printf("*----3.修改年龄--------  -  -----4.修改C语言成绩--*\n");
				printf("*----5.修改高数成绩----  -  -----6.修改英语成绩---*\n");
				printf("*-------------------7.退出本菜单------------------*\n");
				printf("***************************************************\n\n");
				printf("请输入子菜单:");
				scanf("%d", &num);
				switch (num)
				{
				case 1:
					printf("请输入新的学号:\n");
					getchar();
					gets(ID);
					strcpy(stu[i].StuID, ID); break;
				case 2:
					getchar();
					printf("请输入新的性别:\n");
					scanf("%c", &sex);
					stu[i].Stusex = sex; break;
				case 3:
					printf("请输入新的年龄:\n");
					scanf("%d", &age);
					stu[i].Stuage = age; break;
				case 4:
					printf("请输入新的C语言成绩:\n");
					scanf("%f", &score);
					stu[i].score[0] = score; break;
				case 5:
					printf("请输入新的高数成绩:\n");
					scanf("%f", &score);
					stu[i].score[1] = score; break;
				case 6:
					printf("请输入新的英语成绩:\n");
					scanf("%f", &score);
					stu[i].score[2] = score; break;
				case 7:
					return; break;
				default:
					printf("请在1--7之间选择!\n");
				}
				if (num > 0 && num < 7)
					printf("修改成功,记得保存!!!\n");
				break;//找到学生,结束循环;
			}
		}
		if (flag == 0)
		{
			printf("没有找到该学生,请重新输入需要修改信息的学生姓名:\n");
			gets(name);
		}
	}
	system("pause");
}

void flush()
{
	int i, k = 0;//k代表刷新过程中学生人数
	FILE* fp;
	char filename[LEN + 1];
	printf("请输入需要刷新的文件名:\n");
	getchar();
	gets(filename);
	if ((fp = fopen(filename, "r")) == NULL)//打开文件
	{
		printf("打开文件失败!\n");
		exit(0);//退出
	}
	for (i = 0; i < N; i++)//N是最大的学生人数,可在程序开头进行更改
	{
		if (fread(&stu[i], sizeof(struct student), 1, fp) == 1)
			k++;//记录学生人数
	}
	n = k;// 把k的值给n
	if (k == 0)
		printf("刷新失败!!!\n");
	else
		printf("刷新成功!!!\n");
	fclose(fp);
	system("pause");

}
void tuichu()
{
	int h;//控制是否确认退出
	printf("即将退出,确认请按1,取消请按0\n");
	scanf("%d", &h);
	if (h == 1)
	{
		t = 0;//t是main函数中while函数是否继续执行的控制条件,是一个全局变量,程序开头已经定义并且赋值位 1
		printf("成功退出,感谢使用!\n");
	}
	if (h == 0)
	{
		printf("退出已取消!\n");
		system("pause");
	}

}






标签:课设,scanf,学生,break,stu,score,期末,printf,信息管理系统
From: https://blog.csdn.net/2303_81411018/article/details/144459360

相关文章

  • AndroidStudio记单词APP带SQLite数据库期末作业
    AndroidStudio词汇学习应用:利用资源助力期末复习项目概述这款基于AndroidStudio开发的词汇学习应用,充分利用了SQLite数据库的强大功能,为期末复习提供了全方位的支持。这款应用包含了单词记忆、管理和多用户帐号功能,旨在帮助用户有效提升词汇量和备考效率。独特优......
  • 81. Web前端网页案例——【我的家乡成都印象旅游主题精品网页( 6页)】 大学生期末大作业
    目录一、网页概述二、网页文件三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐♬♬♬​​​​​​​欢迎光临我的CSDN!这里是Web前端网页案例大集汇,有各行各业的前端网页案例,每天会持续更新!......
  • 数据结构结课设计——使用随机深度优先搜索完成随机迷宫的生成
     博主在本学期的c语言数据结构课程选择了随机迷宫生成作为结课设计,并运用随机深度优先,下面是我的代码设计思路与代码,  设计思路上迷宫的随机生成问题可以分成两个大步骤来进行:第一步迷宫的随机初始化:通过二维数组来对迷宫进行表示,将迷宫全部设置为1,再通过随机函数将迷宫......
  • jspssm基于javaweb的中药中草药商城 供求信息管理系统
    目录项目介绍具体实现截图开发核心技术:核心代码部分展示详细视频演示源码获取方式项目介绍整个中草药信息管理系统为了便于用户购买、管理员管理,采用了以下几大功能管理模块,包括管理员与用户、供应商的设计:用户用户只能做一些简单的操作,看看首页的中草药信息,以......
  • 项目练习:房产信息管理系统
    课上的练习题进度:完成顾客注册登录查询,房产经纪人信息增加查询,用户登录修改密码,房产信息添加查询,用时四个小时,首先是登录界面没有账号可以点击注册,录入信息登陆后显示信息可以修改密码登陆后的功能页面添加房产经纪人信息添加房产信息查看房产信息......
  • SSM志愿者信息管理系统7gqe1(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容题目:志愿者信息管理系统设计与实现一、研究背景与意义随着社会公益事业的蓬勃发展,志愿者活动逐渐成为推动社会进步的重要力量。然而,传统的志愿者......
  • 基于java中的SSM框架实现龙腾公司员工信息管理系统项目【附项目源码+论文说明】
    基于java中的SSM框架实现龙腾公司员工信息管理系统演示【内附项目源码+LW说明】摘要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本龙腾公司员工信息管理系统就是在这样的大环境下诞生,其可以帮助......
  • flask毕设校园运动会信息管理系统的设计与实现(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景校园运动会作为学校体育活动的重要组成部分,不仅能够增强学生的体质,还能培养学生的团队合作精神和竞技意识。然而,传统运动会的信息管理方式......
  • 基于Spring Boot的电影院订票信息管理系统
    目录前言一、技术栈二、系统功能介绍三、核心代码1、登录模块2、文件上传模块3、代码封装前言当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考......
  • Springboot基于springboot高校毕业生信息管理系统y775m(程序+源码+数据库+调试部署+开
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,学校管理员,实习单位,档案信息,档案物流,认证申请,学分认证,就业信息,就业申请,实习通知,留言信息,留言回复,实习情况开题报告内容一、课题背景与意义随着......