学生管理系统

#include <stdio.h>

#include <windows.h>

#include <stdlib.h>

#include <cstdlib>

#include <string.h>

typedef struct Node{
	int id;//学号 

	char name[50];//姓名 

	char sex[10];//性别 

	int ch,ma,en;//

	int sum;//总分 

	
	struct Node *next;//指针域 

}node;

node List;//链表 
//读取文件 
int readFile(node *L);
//保存文件
int saveFile(node *L);
// 主菜单界面
void welcome();
//增加学生信息
void printAddStuInfo();//界面 
void insertStuInfo(node *L,node e);//功能 
//删除学生信息
//界面 
void printDeleteStuInfo(node *L);
//逻辑功能 
void deleteStuInfo(node *pr);
//修改学生信息
void printFixStuInfo(node *L);
//查询学生信息
void printSearchStuInfo(node *L);
//按学号进行查找 
node * searchStuInfoById(int id,node *L);
//按姓名进行查找 
node * searchStuInfoByName(char name[],node *L);
//输出学生信息
void printStuInfo(node *L);
//排序比较规则
bool cmp(node a,node b){ 
	return a.sum>b.sum;
}
void stuScoreort(node *L){
	
	for(node *p=L->next;p!=NULL;p=p->next){
		
		for(node *q=p;q!=NULL;q=q->next){
			if(!cmp(*p,*q)){
				//交换数据域

				node t=*p;
				*p=*q;
				*q=t;
				//处理指针域

				t.next=p->next;
				p->next=q->next;
				q->next=t.next; 
			}
		}
		
	}
	
} 



int findMaxScore(node *L,int mode){

	node *p=L->next;
	if(p!=NULL){
		
		int maxs[4]={-1,-1,-1,-1};
		
		while(p!=NULL){
			
			if(p->ch>maxs[0]) maxs[0]=p->ch;
			
			if(p->ma>maxs[1]) maxs[1]=p->ma;
			
			if(p->en>maxs[2]) maxs[2]=p->en;
			
			if(p->sum>maxs[3]) maxs[3]=p->sum;
			
			
			p=p->next;
}
		return maxs[mode];
	}
	return -1;
}

//退出程序

void goodBye();



//主函数 
int main(){
	int choice=0;
	readFile(&List);
	while(true){
		welcome();//主菜单界面信息 
			scanf("%d",&choice);
			switch(choice){
				case 1://增加学生信息 

					printAddStuInfo(); 
					break;
				case 2://删除学生信息

					printDeleteStuInfo(&List);
					break;
				case 3://修改学生信息 

					printFixStuInfo(&List);
					break;
				case 4://查询学生信息

					printSearchStuInfo(&List);
					break;
				case 5://输出学生信息

					printStuInfo(&List);
					break;
				case 0://退出程序 

					goodBye();
					break;						
			}
		printf("是否需要继续操作?(yes:1 / no:0 ):");
		scanf("%d",&choice);
		if(choice==0){
			break;
		}
	}
	
	return 0;
}

//主菜单界面 

void welcome(){
	system("cls");
	printf("************************\n");
	printf("**  学生成绩管理系统  **\n");
	printf("**                    **\n");
	printf("**  增加学生信息 ---1 **\n");
	printf("**  删除学生信息 ---2 **\n");
	printf("**  修改学生信息 ---3 **\n");
	printf("**  查询学生信息 ---4 **\n");
	printf("**  输出学生信息 ---5 **\n");
	printf("**  退出管理系统 ---0 **\n");
	
	printf("请输入对应的功能键(数字): ");
}

//增加学生信息

void printAddStuInfo(){
	system("cls");
	node st;
	printf("请输入新增学生相关信息\n");
	printf("学号:");
	scanf("%d",&st.id);
	printf("姓名:");
	scanf("%s",st.name);
	printf("性别:");
	scanf("%s",st.sex);
	printf("JAVA:");
	scanf("%d",&st.ch);
	printf("C语言:");
	scanf("%d",&st.ma);
	printf("数据库:");
	scanf("%d",&st.en);
	st.sum=st.ch+st.ma+st.en;
	
	insertStuInfo(&List,st);
	 
}
//插入学生信息 

void insertStuInfo(node *L,node e){
	//头插法

	node *h=L;
	node *s=(node *)malloc(sizeof(node));
	*s=e;
	
	s->next=h->next;
	h->next=s;
	
	//保存文件 

	saveFile(L);
}

//删除学生信息

void printDeleteStuInfo(node *L){
	system("cls");
	int id;
	
	node *p;
	
	printf("请输入要删除的学生学号");
	scanf("%d",&id);
	node *st=searchStuInfoById(id,L);
	p=st;
	
	if(st==NULL){
		printf("查无此人!");
		return;
	}
	
	st=st->next; 
	printf("________________________________________________________\n");
	printf("|学号\t|姓名\t|性别\t|JAVA\t|C语言\t|数据库\t|总分\t|\n");
	printf("________________________________________________________\n");
	printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
	printf("________________________________________________________\n");
	
	deleteStuInfo(p);
	saveFile(L);	
 	
}
//删除学生信息

void deleteStuInfo(node *pr){
	node *s=pr->next;
	
	pr->next=s->next;
	s->next=NULL;
	
	free(s);//释放结点空间 

	
}

//修改学生信息

void printFixStuInfo(node *L){
	system("cls");
	//用于清除命令行窗口(Command Prompt)的内容 
	int id;
	int choice=-1;
	
	printf("请输入要查找的学生学号");
	scanf("%d",&id);
	node *st=searchStuInfoById(id,L);
	
	if(st==NULL){
		printf("查无此人!");
		return;
	}
	
	st=st->next; 
	
	
	
	
	
	while(1){
		system("cls"); 
		printf("________________________________________________________\n");
		printf("|学号\t|姓名\t|性别\t|JAVA\t|C语言\t|数据库\t|总分\t|\n");
		printf("________________________________________________________\n");
		printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
		printf("________________________________________________________\n");
		printf("修改姓名        ---- 1\n");
		printf("修改性别        ---- 2\n");
		printf("修改JAVA        ---- 3\n");
		printf("修改C语言       ---- 4\n");
		printf("修改数据库---- 5\n");
		
		printf("请输入要修改的信息: ");
		scanf("%d",&choice);
		
		switch(choice){
			case 1:
				printf("请输入姓名:");
				scanf("%s",st->name);
				break;
			case 2:
				printf("请输入性别:");
				scanf("%s",st->sex);
				break;
			case 3:
				printf("请输入JAVA:");
				scanf("%d",&st->ch);
				break;
			case 4:
				printf("请输入C语言:");
				scanf("%d",&st->ma);				
				break;
			case 5:
				printf("请输入数据库:");
				scanf("%d",&st->en);				
				break;
		}
st->sum=st->ch+st->ma+st->en; 
		printf("是否继续修改学生信息?(y-1 / n-0)\n");
		scanf("%d",&choice);
		if(choice == 0){
			break;
		}
	}
	
	printf("________________________________________________________\n");
	printf("|学号\t|姓名\t|性别\t|JAVA\t|C语言\t|数据库\t|总分\t|\n");
	printf("________________________________________________________\n");
	printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
	printf("________________________________________________________\n");
	
	
	saveFile(L);
}

//查询学生信息

void printSearchStuInfo(node *L){
	system("cls");
	int choice=0;
	int id;
	char name[50];
	node *st;
	printf("按学号查询----- 1\n");
	printf("按姓名查询----- 2\n");
	printf("请输入查询方式:");
	scanf("%d",&choice);
	
	if(choice == 1){
		printf("请输入要查询的学号:");
		scanf("%d",&id);
		st=searchStuInfoById(id,L);
		
		if(st==NULL){
			printf("查无此人!\n");
		}else{
			st=st->next;
			printf("________________________________________________________\n");
			printf("|学号\t|姓名\t|性别\t|JAVA\t|C语言\t|数据库\t|总分\t|\n");
			printf("________________________________________________________\n");
			printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
			printf("________________________________________________________\n");
		}
	}else if(choice ==2){
		printf("请输入要查询的姓名:");
			scanf("%s",name);
			st=searchStuInfoByName(name,L);
			
			if(st==NULL){
				printf("查无此人!\n");
			}else{
				st=st->next;
				printf("________________________________________________________\n");
				printf("|学号\t|姓名\t|性别\t|JAVA\t|C语言\t|数据库\t|总分\t|\n");
				printf("________________________________________________________\n");
				printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
				printf("________________________________________________________\n");
			}
	}
	
}
//按学号进行查找 

node * searchStuInfoById(int id,node *L){
	
	node *p=L;
	
	while(p->next!=NULL){
		
		if(p->next->id==id){
			return p;
		}
		
		p=p->next;
	}
	
	return NULL;
}
//按姓名进行查找 

node * searchStuInfoByName(char name[],node *L){
	node *p=L;
	
	while(p->next!=NULL){
		
		if(strcmp(name,p->next->name)==0){
			return p;
		}
		
		p=p->next;
	}
	
	return NULL;
}


//输出学生信息

void printStuInfo(node *L){
	system("cls");
	//学生成绩从高到低排序 	
	node *p=L->next;
	printf("________________________________________________________\n");
	printf("|学号\t|姓名\t|性别\t|JAVA\t|C语言\t|数据库\t|总分\t|\n");
	printf("________________________________________________________\n");
	if(p!=NULL){
	
	while(p!=NULL){
		printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",p->id,p->name,p->sex,p->ch,p->ma,p->en,p->sum);
		printf("________________________________________________________\n");
		p=p->next;
	}
	}
	
	printf("最高分:\n");
	printf("JAVA:%d\n",findMaxScore(L,0));
	
	printf("C语言:%d\n",findMaxScore(L,1));
	printf("数据库: %d\n",findMaxScore(L,2));
	printf("总分: %d\n",findMaxScore(L,3));
}

//退出程序

void goodBye(){
	system("cls");
	printf("欢迎下次使用~\n");
	exit(0);//结束程序 

}

// 文件输入

int readFile(Node *L){
	FILE *fpr=fopen("D:\桌面\新建文件夹\student.txt","r");
	node st;
	node *s;
	node *t=L;
	
	if(fpr==NULL){
		return 0;
	}else{		
		while(fscanf(fpr,"%d %s %s %d %d %d %d",&st.id,st.name,st.sex,&st.ch,&st.ma,&st.en,&st.sum)!=EOF){			
			s=(node *)malloc(sizeof(node));
			*s=st;
			t->next=s;
			t=s;
			t->next=NULL;
				
		}
	}
	fclose(fpr);//关闭文件指针 

	return 1;
}

//保存文件

int saveFile(node *L){
	FILE *fpw=fopen("D:\桌面\新建文件夹\student.txt","w");
	if(fpw==NULL) return 0;
	

	node *p=L->next;
	
	while(p!=NULL){
		
		fprintf(fpw,"%d %s %s %d %d %d %d\n",p->id,p->name,p->sex,p->ch,p->ma,p->en,p->sum);
		p=p->next;
	}
	fclose(fpw);//关闭文件指针

	return 1; 
}

1.录入学生信息

1.1信息传入链表

2.删除学会信息

2.1删除链表结点

3修改学生信息

3.1修改链表结点里面的数据

4.查找学生信息

5打印所有学生信息

6.退出系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值