其他分享
首页 > 其他分享> > 【c语言】学生获奖信息收集与管理系统

【c语言】学生获奖信息收集与管理系统

作者:互联网

【c语言】学生获奖信息收集与管理系统

一、主体功能点要求:
1、基本信息:
(1)学生基本信息:学院、专业、年级、学号、姓名
(2)获奖信息:
a.获奖时间(年、月、日)
b.竞赛名称
c.获奖等级(如:国家级一等奖;省级二等奖)
d.指导老师
e.授奖部门
2、设计主菜单实现用户交互
(1)学生角色
a. 添加功能:学生可添加新的获奖信息
例如,输入:
计算机工程学院,软件工程专业,2015级,201500000001,张三,20181222,全国大学生软件设计大赛,国家级一等奖,李四老师,高等教育学会
则屏幕打印:
输入1条获奖信息!

b. 浏览功能:学生可浏览目前为止已有的获奖信息,按时间排序
例如,若现在再输入1条获奖信息:
机械工程学院,工业设计专业,2016级,201600000001,王五,20180108,广东省工业设计大赛,省级二等奖,林良老师,广东省工业设计学会
则选择浏览功能后,屏幕打印:
1.机械工程学院,工业设计专业,2016级,201600000001,王五,20180108,广东省工业设计大赛,省级二等奖,林良老师,广东省工业设计学会,未审核
2.计算机工程学院,软件工程专业,2015级,201500000001,张三,20181222,全国大学生软件设计大赛,国家级一等奖,李四老师,高等教育学会,未审核
共有2条获奖信息!

c. 搜索功能:学生可以任意字段搜索已有的获奖信息,按时间排序
例如,输入:计算机
则屏幕打印:
计算机工程学院,软件工程专业,2015级,201500000001,张三,20181222,全国大学生软件设计大赛,国家级一等奖,李四老师,高等教育学会,未审核
共搜索到1条获奖信息!

d. 删除功能:学生可删除已有的获奖信息
例如,输入:2(2表示获奖信息的序号)
则屏幕打印:
已删除1条获奖信息!

e. 修改功能:学生可修改任一已有获奖信息的任意字段
例如,输入:1
则屏幕打印:请指出想修改的记录的字段:

  1. 获奖时间 2. 竞赛名称 3. 获奖等级 4. 指导老师 5. 授奖部门
    输入:3
    则屏幕打印:请输入新的获奖等级:
    输入:省级三等奖
    则屏幕打印:
    已修改1条获奖信息!
    1.机械工程学院,工业设计专业,2016级,201600000001,王五,20180108,广东省工业设计大赛,省级三等奖,林良老师,广东省工业设计学会,未审核

(2)年级辅导员角色
a.浏览功能:年级辅导员可浏览目前为止已有的获奖信息,按时间排序(同学生的浏览功能一致)

b. 审核功能:年级辅导员可审核任意获奖信息
例如,输入:1(表示审核第1条获奖信息)
则屏幕打印:
1.机械工程学院,工业设计专业,2016级,201600000001,王五,20180108,广东省工业设计大赛,省级三等奖,林良老师,广东省工业设计学会,已审核

没实现功能:按照时间排序,从txt文件删除功能
由于添加功能是用指针完成的,就有点小问题就是,重新添加信息会覆盖,就不会是追加

#include<stdio.h>
#include<string.h>
#include<windows.h>
const int N=3;

//学生:学号(id)、姓名(name),年级(grade)、专业(major)、学院(college)
/*获奖时间(prtime),竞赛名称(prname),获奖等级(prgrade),指导老师(prteacher),e.授奖部门(prplace)*/
struct student{
	char id[100];
	char name[100];
	char grade[100];
	char major[100];
	char college[100];
	char prtime[100];
	char prname[100];
	char prgrade[100];
	char prteacher[100];
	char prplace[100];
	char check[100];
}; 


//函数声明
void firstMenu();
void studentMenu();	//学生功能页面菜单
void teacherMenu();//老师功能页面菜单
void addStudent(student *stu);//添加学生获奖信息功能
void delStudent(student stu[]);	//删除学生获奖信息功能
void modifyStudent(student stu[]);	//修改学生获奖信息
void watchStudent(student stu[]);	//浏览目前已经有的获奖信息。(辅导员也有这个功能)
void searchStudent(student stu[]);	//学生可以搜索已经有了的获奖信息
void checkStudent(student stu[]);	//辅导员功能:审核学生的获奖信息
void save();	//导出到文件
void load();
struct student stu[N]={0};
int count=0;


int main(){
	system("color F0");
	while(true){
	firstMenu();
	int i;
	scanf("%d",&i);
	switch(i){
		case 1:teacherMenu();break;
		case 2:studentMenu();break;
		case 3:exit(0);break;
		default:printf("输入格式错误,需要重新输入。");
	}}

}

void firstMenu(){
	printf("**************欢迎进入学生信息获奖系统********************\n");
	printf("如果你是老师请输入1");
	printf("如果你是学生请输入2\n");
	printf("结束程序请输入3\n");
	printf("***********************************************************************\n");
	printf("请输入你的选择:");

	int i;
	scanf("%d",&i);
	switch(i){
		case 1:teacherMenu();break;
		case 2:studentMenu();break;
		case 3:exit(0);break;
		default:printf("输入格式错误,需要重新输入。");
	}

}

void studentMenu(){
	while(true){
		printf("***********************************************************************\n");
	printf("输入1进入添加信息功能\n");
	printf("输入2进入查看信息功能\n");
	printf("输入3进入删除信息功能\n");
	printf("输入4进入修改信息功能\n");
	printf("输入5进入查找信息功能\n");
	printf("输入6返回原始页面。\n");;
	printf("输入9结束程序\n");
	printf("如果你不是学生,则输入7,进入辅导员功能。\n");
	printf("***********************************************************************\n");
	printf("请输入你的选择:");

	int j;
	scanf("%d",&j);
	switch(j){
		case 1:addStudent(stu);break;
		case 2:watchStudent(stu);break;
		case 3:delStudent(stu);break;
		case 4:modifyStudent(stu);break;
		case 5:searchStudent(stu);break;
		case 6:firstMenu();break;
		case 7:teacherMenu();break;
		case 8:exit(0);
		default:printf("输入格式错误,需要重新输入。\n");
	}}
}

void teacherMenu(){
	while(true){
	printf("***********************************************************************\n");
	printf("输入1进入浏览功能\n");
	printf("输入2进入审核查阅功能\n");
	printf("输入3返回原来菜单。\n");
	printf("如果你不是老师,则输入4,进入学生功能。\n");
	printf("***********************************************************************\n");
	printf("请输入你的选择:\n");
	int k;
	scanf("%d",&k);
	switch(k){
		case 1:watchStudent(stu);break;
		case 2:checkStudent(stu);break;
		case 3:firstMenu();break;
		case 4:studentMenu();break;
}}
}
/*
添加功能:addStudent(stuednt *stu)函数,可以选择添加几个人,选好后就可以直接输入需要添加的学生信息给系统。
*/
void addStudent(student  *stu){	//添加功能:学生可添加新的获奖信息
	int i,j,n;

	struct student *p;
	p=stu;
	p+=count;
	printf("***********************************************************************\n");
	printf("请输入添加的学生人数:");
	scanf("%d",&n);
	for(i=0;i<n;i++){
		printf("请输入您要添加的学生信息:\n");
		printf("请输入您要添加的学生学号:\n");
		scanf("%s",p->id);
		printf("请输入您要添加的学生名字:\n");
		scanf("%s",p->name);
		printf("请输入您要添加的学生年级:\n");
		scanf("%s",p->grade);
		printf("请输入您要添加的学生专业:\n");
		scanf("%s",p->major);
		printf("请输入您要添加的学生学院:\n");
		scanf("%s",p->college);
		printf("请输入您要添加的学生获奖时间:\n");
		scanf("%s",p->prtime);
		printf("请输入您要添加的学生获奖的奖项名称:\n");
		scanf("%s",p->prname);
		printf("请输入您要添加的学生的获奖等级:\n");
		scanf("%s",p->prgrade);
		printf("请输入您要添加的学生指导老师:\n");
		scanf("%s",p->prteacher);
		printf("请输入您要添加的学生获奖的授奖部门:\n");
		scanf("%s",p->prplace);
		p++;
		count++;
		save();
	}
		
		printf("信息添加完毕。\n");
		printf("***********************************************************************\n");
}

//导出到文件功能
void save(){
FILE *fp=NULL;
char filename[100];
printf("输入文件路径:");
scanf("%s",&filename);
fp=fopen(filename,"wb");//用二进制的方式打开文件
int i;
for(i=0;i<count;i++){
fprintf(fp,"%-10s%-10s%-10s%-10s%-15s%-20s%-25s%-15s%-18s%-18s%-10s\n",&stu[i].id,&stu[i].name,&stu[i].grade,&stu[i].major,&stu[i].college,&stu[i].prtime,&stu[i].prname,&stu[i].prgrade,&stu[i].prteacher,&stu[i].prplace);
fflush(stdin);//清了文件缓冲区
}
fclose(fp);	//关闭文件
printf("成功");
}

/*导入到文件功能*/
void load(){	
FILE *fp=NULL;
char filename[100];

//下面注释的这个方法也是可行的,但是可能得改改。所以我就注释掉了。
/*printf("输入文件路径:");
scanf("%s",&filename);
fp=fopen(filename,"rb");//r为读取
for(i=0;i<count;i++){
fprintf(fp,"%-10s%-10s%-10s%-10s%-15s%-20s%-25s%-15s%-18s%-18s%-10s\n",&stu[N].id,&stu[N].name,&stu[N].grade,&stu[N].major,&stu[N].college,&stu[N].prtime,&stu[N].prname,&stu[N].prgrade,&stu[N].prteacher,&stu[i].prplace);
fflush(stdin);//清了文件缓冲区
}*/

int i;
if((fp=fopen("03.txt","rb"))==NULL){
printf("不能打开。");
for(i=0;i<10;i++){
fread(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
}
}
}


/*删除信息:deleStudent(stu)函数
输入所需要删除的学生信息的学号,查找出所对应的消息以便确认,确认无误后就可以直接删除该学生的信息。*/
void delStudent(student stu[]){	//删除学生获奖信息
	printf("***********************************************************************\n");
printf("这里是删除学生信息功能:");
char id2[100];
int i,j;
printf("请输入您需要删除的学生的学号:");
scanf("%s",&id2);
for(i=0;i<3;i++){
	if(strcmp(stu[i].id,id2)==0){
		for(j=i;j<3;j++){
		stu[j-1]=stu[j];
		printf("删除成功!");
	
		}/*有N个学生,成绩数组元素是从0~N-1。删除某学生成绩,需要判断此学生是否存在,如果存在,其后面的学生成绩前移*/
}
}
}

/*修改学生信息:modifyStudent(stu)函数
选择要修改的信息,选择对应修改项,输入所需要修改的信息,比如如果需要修改姓名,输入了选项修改姓名之后,输入要修改成的姓名即可。*/
void modifyStudent(student stu[]){	//修改学生获奖信息
printf("***********************************************************************\n");
printf("这里是修改学生信息功能:");
int i,j;
int choose;
char id2[100];
printf("请输入您所需要修改的学生学号:\n");
scanf("%s",&id2);
for(i=0;i<3;i++){
	if(strcmp(stu[i].id,id2)==0){
		printf("下面是你所需要修改的学生信息:\n");
		printf("学号      姓名      年级      专业       学院          获奖时间          竞赛名称                 获奖等级        指导老师         授奖部门\n");
		printf("*********************************************************************************************************************************************************\n");
		printf("%-10s%-10s%-10s%-10s%-15s%-20s%-25s%-15s%-18s%-18s%-10s\n",&stu[i].id,&stu[i].name,&stu[i].grade,&stu[i].major,&stu[i].college,&stu[i].prtime,&stu[i].prname,&stu[i].prgrade,&stu[i].prteacher,&stu[i].prplace,&stu[i].check);
		j=i;
		printf("修改学生学号请输入1\n");
		printf("修改学生姓名请输入2\n");
		printf("修改学生年级请输入3\n");
		printf("修改学生专业请输入4\n");
		printf("修改学生学院请输入5\n");
		printf("修改学生获奖时间请输入6\n");
		printf("修改学生获奖名称请输入7\n");
		printf("修改学生获奖等级请输入8\n");
		printf("修改学生的指导老师请输入9\n");
		printf("修改学生的获奖地点请输入10\n");
			printf("请输入您的选择:");
			scanf("%d",&choose);
			switch(choose){
			case 1:printf("输入需要修改成的学生学号:");
					scanf("%s",&stu[j].id);break;
			case 2:printf("输入需要修改成的学生姓名:");
					scanf("%s",&stu[j].name);break;
			case 3:printf("输入需要修改成的学生年级:");
					scanf("%s",&stu[j].grade);break;
			case 4:printf("输入需要修改成的学生专业:");
					scanf("%s",&stu[j].major);break;
			case 5:printf("输入需要修改成的学生学院:");
					scanf("%s",&stu[j].college);break;
			case 6:printf("输入需要修改成的学生获奖时间:");
					scanf("%s",&stu[j].prtime);break;
			case 7:printf("输入需要修改成的学生竞赛名称:");
					scanf("%s",&stu[j].prname);break;
			case 8:printf("输入需要修改成的学生的获奖等级:");
					scanf("%s",&stu[j].prgrade);break;
			case 9:printf("输入需要修改成的学生指导老师:");
					scanf("%s",&stu[j].prteacher);break;
			case 10:printf("输入需要修改成的学生获奖地点:");
					scanf("%s",&stu[j].prplace);break;
			default:printf("输入错误。");break;
			}//switch
			save();
			printf("修改成功!");
	}}
}

/*查看信息:watchStudent(stu)函数,循环输出系统里已有的学生信息,方便查看。*/
void watchStudent(student stu[]){	//浏览目前已经有的获奖信息。(辅导员也有这个功能)
printf("这里是查看学生信息功能:\n");
struct student *p; 
printf("学号      姓名      年级      专业       学院          获奖时间          竞赛名称                 获奖等级        指导老师         授奖部门\n");
printf("*********************************************************************************************************************************************************\n");
for(p=stu;p<stu+3;p++){
	printf("%-10s%-10s%-10s%-10s%-15s%-20s%-25s%-15s%-18s%-18s%-10s\n",p->id,p->name,p->grade,p->major,p->college,p->prtime,p->prname,p->prgrade,p->prteacher,p->prplace,p->check);
}
}

/*查找信息:searchStudent(stu)函数
可以按照学生的学号或者姓名为条件来查找该学生信息,通过strcmp函数来进行比对所输入的学生信息和原来系统所拥有的学生信息进行比对,如果比对成功就可以直接输出该学生的所有信息。*/
void searchStudent(student stu[]){	//学生可以搜索已经有了的获奖信息
	load();
	int i,j;
	int count=0;
	char id2[100];
	char name2[100];
	printf("这里是查询学生信息功能,学号查询请按1:");
	printf("这里是查询学生信息功能,姓名查询请按2:");
	scanf("%d",&i);
	if(i==1){
				printf("请输入您需要查询的学生学号:");
				scanf("%s",id2);
				for(j=0;j<4;j++){
					if(strcmp(stu[j].id,id2)==0){
						printf("查找成功!\n");
						printf("学生的信息为:\n");
						printf("学号      姓名      年级      专业       学院          获奖时间          竞赛名称                 获奖等级        指导老师         授奖部门\n");
						printf("%-10s%-10s%-10s%-10s%-15s%-20s%-25s%-15s%-18s%-18s%-10s\n",&stu[j].id,&stu[j].name,&stu[j].grade,&stu[j].major,&stu[j].college,&stu[j].prtime,&stu[j].prname,&stu[j].prgrade,&stu[j].prteacher,&stu[j].prplace,&stu[j].check);
						count++;}}if(count==0){printf("没找到。");}

}
		if(i==2){
		printf("请输入您需要查询的学生姓名:");
		scanf("%s",name2);
			for(j=0;j<4;j++){
					if(strcmp(stu[j].name,name2)==0){
					printf("查找成功!\n");
					printf("学生的信息为:\n");
					printf("学号      姓名      年级      专业       学院          获奖时间          竞赛名称                 获奖等级        指导老师         授奖部门\n");
					printf("%-10s%-10s%-10s%-10s%-15s%-20s%-25s%-15s%-18s%-18s%-10s\n",&stu[j].id,&stu[j].name,&stu[j].grade,&stu[j].major,&stu[j].college,&stu[j].prtime,&stu[j].prname,&stu[j].prgrade,&stu[j].prteacher,&stu[j].prplace,&stu[j].check);
					count++;}}
				if(count==0){printf("没找到。");}}
}


/*审核功能:checkStuent(stu)函数,
需要查找审核哪个学生的信息,输入他的学号,核对没问题之后直接输入‘已审核’,就可以了。
原理:在上面结构体中,定义char check[20]来备用,一开始先不赋值,等到辅导员选择审核功能的时候,直接运用上面的修改功能,把原来的没赋值的check数组改变赋值。
*/
void checkStudent(student stu[]){	//辅导员功能:审核学生的获奖信息
	char id2[100];
	char check2[100];
	int j,count=0;
	int choose;
	printf("***********************************************************************\n");
	printf("这里是辅导员审核学生信息功能:\n");
	printf("请输入您需要查阅的学生学号:");
	scanf("%s",&id2);
	for(j=0;j<3;j++){
		if(strcmp(stu[j].id,id2)==0){
				printf("查找成功!\n");
				printf("学生的信息为:\n");
				printf("学号      姓名      年级      专业       学院          获奖时间          竞赛名称                 获奖等级        指导老师         授奖部门\n");
				printf("%-10s%-10s%-10s%-10s%-15s%-20s%-25s%-15s%-18s%-18s%-10s\n",&stu[j].id,&stu[j].name,&stu[j].grade,&stu[j].major,&stu[j].college,&stu[j].prtime,&stu[j].prname,&stu[j].prgrade,&stu[j].prteacher,&stu[j].prplace,&stu[j].check);	
				count++;	
				printf("该学生信息是否有误?有误请按1则进入修改页面,无误请按2。");
				scanf("%d",&choose);
				switch(choose){
					case 1:modifyStudent(stu);break;
					case 2:printf("确认没错!请输入已审核。");
				scanf("%s",&stu[j].check);
		}//if

	}//for


	}//switch
}

运行截图:

修改学生信息:
修改学生信息

添加学生信息功能:
在这里插入图片描述

查找学生信息:
在这里插入图片描述
查看学生信息:
在这里插入图片描述
辅导员审核功能:
在这里插入图片描述
添加入txt:
在这里插入图片描述
文件与txt内截图:
在这里插入图片描述

流程图:
总
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:收集,获奖,scanf,管理系统,学生,stu,printf,输入
来源: https://blog.csdn.net/ParisWan/article/details/115738837