c语言学生成绩管理系统总结

2022-09-06 11:03:40 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

c语言的大作业,主要功能是录入、修改、删除、插入、排序等,可能有些地方仍然有点bug。

一、系统功能 1.基本功能

代码语言:javascript复制
1.录入信息
2.按照学号查找信息
3.按照学号修改信息
4.按照学号删除信息
5.插入信息
6.浏览全部信息
7.按c语言成绩排序
8.保存到文件

2.结构体 只写了几个基础的,学号刚开始写的int型的,但后来不知道怎么去查重等,改成了char型。

代码语言:javascript复制
typedef struct student
{ 
   
	char num[20];     //学号
	char name[10];    //姓名
	char sex[10];     //性别
	char duty[10];    //专业
	int eng;          //英语成绩
	int math;         //数学成绩
	int c;            //c语言成绩
	struct student *next;next是指针变量,指向结构体变量 
}stu;

3.main函数

代码语言:javascript复制
int main()
{ 
   
	system("color 3F");//背景颜色
	stu *head=(stu *)malloc(sizeof(stu));
	head->next=NULL;//使head中的next部分为空
	while(1)
	{ 
   
	printf("tttt**********新生管理系统************n");
    printf("tttt请选择你的操作n");
    printf("tttt1.录入信息n");
    printf("tttt2.按照学号查找信息n");
	printf("tttt3.按照学号修改信息n");
	printf("tttt4.按照学号删除信息n");
	printf("tttt5.插入信息n");
	printf("tttt6.浏览全部信息n");
	printf("tttt7.按c语言成绩排序n");
	printf("tttt8.保存到文件n");
	printf("tttt0.退出n");
    printf("tttt**********************************n");
    printf("tttt请按键选择操作:n");
    fflush(stdin);//清除多余的未被保存的数据,防止乱码
    int c;
    scanf("%d",&c);
    switch(c)//用switch语句进行选择和调用函数
    { 
   
    	case 1:
    		input(head);
			break;
    	case 2:
    		seek(head);
			break; 
    	case 3:
    		revise(head);
			break;
		case 4:
			del(head);
			break; 
		case 5:
			add(head); 
			break;
		case 6:
		    traver(head);
			break; 
		case 7:
		    sort(head); 
			break;
		case 8:
		    save(head);
		    break;
		case 0:
		     return 0; 
    	default:
    		printf("输入错误!n"); 
	}
	} 
} 

while循环在外,系统程序能够持续运行,switch判断语句进行功能选择与函数切换。

代码语言:javascript复制
color[attr]
attr        指定控制台输出的颜色属性。
颜色属性由两个十六进制数字指定
第一个对应于背景,第二个对应于前景:
    0 = 黑色              8 = 灰色
    1 = 蓝色              9 = 淡蓝色
    2 = 绿色              A = 淡绿色
    3 = 浅绿色            B = 淡浅绿色
    4 = 红色              C = 淡红色
    5 = 紫色              D = 淡紫色
    6 = 黄色              E = 淡黄色
    7 = 白色              F = 亮白色

二、录入学生信息 在第一次验课设的时候,只简单地写了录入,没有写查重以及格式等的限制。在最后一次验的时候,学号查重依然有问题,遍历时应注意不能直接动头指针p,使q2=p,用q2实现遍历。

代码语言:javascript复制
void input(stu *p)//录入 
{ 
   
	int n,x;
	system("cls");   //清屏函数
	stu *q1,*q2;     //定义该结构体类型q1,q2指针
	q1=p;
	
	printf("请输入要录入的学生人数:");
	scanf("%d",&n); 
	while(n--)  //while循环n次,n个要录入的学生
	{ 
   
	stu *q=(stu *)malloc(sizeof(stu)); //给q分配内存
	
	int i=1; //定义i循环三次使学号只能输入数字
	int flag=1,flag1=1,flag2=1,flag3=1,flag4=1; 
		loop1:while(flag)
		{ 
   
		printf("请输入学号(三位):");
		scanf("%s",q->num);
	    if(strlen(q->num)!=3)//用strlen函数计算字符串长度使学号为三位数
	    { 
   
		  printf("学号格式输入错误!n");
		  fflush(stdin);//清除多余的未被保存的数据,防止乱码
		  continue;
		}
		q2=p; //头指针赋给q2
		while(q2)
    { 
   
    	if(strcmp(q->num,q2->num)==0)//用strcmp函数,q2遍历查重
    	{ 
   
    		printf("输入的学号重复,请重新输入!n");
    		goto loop1;//重复重新跳到上一个while循环
		}
		q2=q2->next;
	}
		while(i<3)
		{ 
   
			if(q->num[i]-'0'<0 || q->num[i]-'0'>9)//让学号只能输入数字
			{ 
   
				printf("学号格式输入错误!n"); 
				break;
			}
			else{ 
   
			   i  ;
				if (i==3)
				flag=0;
		}
		}
		}
		printf("请输入学生姓名:");
		scanf("%s",q->name);
			
		while(flag1)
	{ 
   	
		printf("请输入性别(w/m):");
	    scanf("%s",q->sex);
	    if(strcmp(q->sex,"w")==0)//用strcmp函数限制输入的字符,只能输入w/m
		  flag1=0;//跳出循环
		else if(strcmp(q->sex,"m")==0)
		  flag1=0;//跳出循环
		else
		{ 
   
		  printf("性别格式输入错误!(请输入w/m)n");
		}
	}
		printf("请输入专业:");
		scanf("%s",q->duty);
		
	while (flag2)
		{ 
   
		  printf("请输入英语成绩(0<=eng<=150):");
		  x=scanf("%d",&q->eng); //如果输入数字x=1
		  if(q->eng >= 0 && q->eng <= 150 && x==1 )//限制成绩范围
		  flag2=0;//跳出循环
		  else{ 
   
		  	 printf("成绩格式输入错误!n");
		  	 fflush(stdin);//清理未被保存的数据
		  }
		}
	
	while(flag3)
	{ 
   
		printf("请输入数学成绩(0<=math<=150):");
		x=scanf("%d",&q->math);
		if(q->math>=0 && q->math<=150 && x==1)
		flag3=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag3=1;
		}
	} 
	
	while(flag4){ 
   
		printf("请输入c语言成绩(0<=c<=150):");
		x=scanf("%d",&q->c);
		if(q->c>=0 && q->c<=150 && x==1)
		flag4=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag4=1;
		}
	}
		printf("录入成功!n"); 
		q->next=NULL; //使q中的next定义为空
		q1->next=q;
		q1=q;
	}
}

三、查找学生信息

代码语言:javascript复制
void seek(stu *p)//查找 
{ 
   
	stu *q=p->next; 
	char num[20];
	int flag = 0;
	system("cls"); 	//清屏函数
	printf("请输入查找学生的学号:");
	scanf("%s",num);
	while(q!=NULL)
	{ 
    
		if(strcmp(q->num,num) == 0)//strcmp函数查找学生学号
		{ 
   
			printf("学生学号:%sn",q->num);
			printf("学生姓名:%sn",q->name);
			printf("学生性别:%sn",q->sex);
			printf("专业:%sn",q->duty);
			printf("英语成绩:%dn",q->eng);
			printf("数学成绩:%dn",q->math);
			printf("c语言成绩:%dn",q->c);
			flag = 1;
			break;
		}
		q=q->next;//遍历
	}
	if(flag == 0)
	{ 
   
		printf("查无此人n");
	}
}

四、按照学号修改学生信息 在录入函数源代码的基础上写了修改功能。

代码语言:javascript复制
void revise(stu *p)//修改
{ 
   
	stu *q=p->next;
	stu *q1,*q2; 
	int x;
	char num[200];
	system("cls"); 	
	printf("请输入要修改的学号:");
	scanf("%s",num);
	while(q!=NULL)
	{ 
   
		if(strcmp(q->num,num) == 0)
		{ 
   
			int i=1;
	int flag=1,flag1=1,flag2=1,flag3=1,flag4=1;
		loop1:while(flag)
		{ 
   
		printf("请输入学号(三位):");
		scanf("%s",q->num);
	    if(strlen(q->num)!=3){ 
   
		  printf("学号格式输入错误!n");
		  fflush(stdin);
		  continue;
		}
	    q2=p;
		while(q2)
    { 
   
    	if(strcmp(q->num,q2->num)==0)
    	{ 
   
    		printf("输入的学号重复,请重新输入!n");
    		goto loop1;
		}
		else{ 
   
			break;
		}
		q2=q2->next; 
	}
		while(i<3)
		{ 
   
			if(q->num[i]-'0'<0 || q->num[i]-'0'>9){ 
   
				printf("学号格式输入错误!n"); 
				break;
			}
			else{ 
   
			   i  ;
				if (i==3)
				flag=0;
		}
		}
		}
		printf("请输入学生姓名:");
		scanf("%s",q->name);
			
		while(flag1)
	{ 
   	
		printf("请输入性别(w/m):");
	    scanf("%s",q->sex);
	    if(strcmp(q->sex,"w")==0)
		  flag1=0;
		else if(strcmp(q->sex,"m")==0)
		  flag1=0;
		else
		{ 
   
		  printf("性别格式输入错误!(请输入w/m)n");
		}
	}
		printf("请输入专业:");
		scanf("%s",q->duty);
		
	while (flag2)
		{ 
   
		  printf("请输入英语成绩(0<=eng<=150):");
		  x=scanf("%d",&q->eng);
		  if(q->eng >= 0 && q->eng <= 150 && x==1 )
		  flag2=0;
		  else{ 
   
		  	 printf("成绩格式输入错误!n");
		  	 fflush(stdin);
		  }
		}
	
	while(flag3)
	{ 
   
		printf("请输入数学成绩(0<=math<=150):");
		x=scanf("%d",&q->math);
		if(q->math>=0 && q->math<=150 && x==1)
		flag3=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag3=1;
		}
	} 
	
	while(flag4){ 
   
		printf("请输入c语言成绩(0<=c<=150):");
		x=scanf("%d",&q->c);
		if(q->c>=0 && q->c<=150 && x==1)
		flag4=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag4=1;
		}
	}
        printf("修改成功!n");
		return; 
		}
	    q=q->next;
		q2->next=q;
		q2=q;
	} 
     printf("查无此人");
}

五、按照学号删除信息 注意while(!strcmp(q2->num,num)),刚开始写时while(strcmp(q2->num,num))一直删除不成功,当q2->num和num相等时为0,while循环无法进行。

代码语言:javascript复制
void del(stu *p)//删除
{ 
   
	stu *q1,*q2;//定义该结构体类型q1,q2指针
	q1=p; //q1头结点,p头指针
	q2=q1->next;
	char num[200];
	system("cls"); 	
	printf("请输入想要删除的学号:");
	scanf("%s",num);
	while(q2!=0)
	{ 
   
		while(!strcmp(q2->num,num))
		{ 
   
			q1->next=q2->next;
			free(q2);//释放q2
			q2=NULL;
			printf("删除成功n");
		    return;
		}
		q1=q2;
		q2=q2->next;
	}
 } 

六、插入信息(头插法) 插入部分也是结合的头插法和录入函数

代码语言:javascript复制
void add(stu *p) //插入 
{ 
   
	int n,x;
	int i=1;
	int flag=1,flag1=1,flag2=1,flag3=1,flag4=1;
	stu *q,*q1,*q2;//不用像尾插法一样生成一个终端结点
	q=(stu*)malloc(sizeof(stu));//给q分配内存
	q1=(stu*)malloc(sizeof(stu));//给q1分配内存
	q = p;//q为头结点
	if(q1==NULL)
	{ 
   
		printf("插入失败n");
		exit(1);
	}
    for(int a=0;a<n;a  );
    { 
   
       	
		loop1:while(flag)
		{ 
   
		printf("请输入学号(三位):");
		scanf("%s",q1->num);
	    if(strlen(q1->num)!=3){ 
   
		  printf("学号格式输入错误!n");
		  fflush(stdin);
		  continue;
		}
		q2=p;
		while(q2)
    { 
   
    	if(strcmp(q1->num,q2->num)==0)
    	{ 
   
    		printf("输入的学号重复,请重新输入!n");
    		goto loop1;
		}
		q2=q2->next;
	}
		while(i<3)
		{ 
   
			if(q1->num[i]-'0'<0 || q1->num[i]-'0'>9){ 
   
				printf("学号格式输入错误!n"); 
				break;
			}
			else{ 
   
			   i  ;
				if (i==3)
				flag=0;
		}
		}
		}
		printf("请输入学生姓名:");
		scanf("%s",q1->name);
			
		while(flag1)
	{ 
   	
		printf("请输入性别(w/m):");
	    scanf("%s",q1->sex);
	    if(strcmp(q1->sex,"w")==0)
		  flag1=0;
		else if(strcmp(q1->sex,"m")==0)
		  flag1=0;
		else
		{ 
   
		  printf("性别格式输入错误!(请输入w/m)n");
		}
	}
		printf("请输入专业:");
		scanf("%s",q1->duty);
		
	while (flag2)
		{ 
   
		  printf("请输入英语成绩(0<=eng<=150):");
		  x=scanf("%d",&q1->eng);
		  if(q1->eng >= 0 && q1->eng <= 150 &&x==1 )
		  flag2=0;
		  else{ 
   
		  	 printf("成绩格式输入错误!n");
		  	 fflush(stdin);
		  }
		}
	
	while(flag3)
	{ 
   
		printf("请输入数学成绩(0<=math<=150):");
		x=scanf("%d",&q1->math);
		if(q1->math>=0 && q1->math<=150 && x==1)
		flag3=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag3=1;
		}
	} 
	
	while(flag4){ 
   
		printf("请输入c语言成绩(0<=c<=150):");
		x=scanf("%d",&q1->c);
		if(q1->c>=0 && q1->c<=150 && x==1)
		flag4=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			  fflush(stdin);
			flag4=1;
		}
	}
	q1->next=p->next;将p指向的地址赋值给q1;
	p->next=q1;头指针的指针域next指向q1节点,使得q1成为开始节点
	q1=q1->next;
	printf("插入成功!n");
}
} 

七、浏览全部信息

代码语言:javascript复制
void traver(stu *p) //遍历输出
{ 
   	
	stu *q = p->next ;//使p的next给q
	system("cls"); 	//清屏
	while(q!=NULL)
    { 
   
		printf("学号:%sn姓名:%sn性别:%sn专业:%sn英语成绩:%dn数学成绩:%dnc语言成绩:%dn",q->num,q->name,q->sex,q->duty,q->eng,q->math,q->c);
		q=q->next;
	}
}

八、按c语言成绩排序(降序)

代码语言:javascript复制
void sort(stu *p)//排序 (c语言成绩) 
 { 
   							
	stu *q=NULL;
	system("cls"); 							
	while(q!=p->next) //q不等于头指针是一次循环
	{ 
   
		stu *pre=p;
		stu *cur=pre->next;
		while(cur!=q&&cur->next !=q) 
		{ 
   
			if(cur->c<cur->next->c )
			 { 
   
				pre->next =cur->next;
				cur->next =cur->next->next;
				pre->next->next =cur;
			}
			pre=pre->next;
			cur=pre->next;
		}
		q=cur;
	}
        traver(p);//调用traver函数输出结果
}

九、保存文件

代码语言:javascript复制
void save(stu *p)//文件 
{ 
   
  	FILE*fp = fopen("学生信息.txt","w");//创建文件指针
	if(fp!=NULL)
	{ 
   
		
		while(p->next!=NULL)
		{ 
     
   			fprintf(fp,"学号:%sn",p->next->num);
   			fprintf(fp,"姓名:%sn",p->next->name);
   			fprintf(fp,"性别:%sn",p->next->sex);
   			fprintf(fp,"专业:%sn",p->next->duty);
   			fprintf(fp,"英语成绩:%dn",p->next->eng);
   			fprintf(fp,"数学成绩:%dn",p->next->math);
   			fprintf(fp,"c语言成绩:%dn",p->next->c);
   			fprintf(fp,"---------------------------n");
  			p=p->next;
	  	}
	  	printf("保存成功!n");
	}
	fclose(fp);
}

全部代码

代码语言:javascript复制
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct student
{ 
   
	char num[20];
	char name[10];
	char sex[10];
	char duty[10];
	int eng;
	int math;
	int c; 
	struct student *next;
}stu;

void input(stu *p)//录入 
{ 
   
	int n,x;
	system("cls");
	stu *q1,*q2;
	q1=p;
	
	printf("请输入要录入的学生人数:");
	scanf("%d",&n); 
	while(n--)
	{ 
   
	stu *q=(stu *)malloc(sizeof(stu));
	
	int i=1;
	int flag=1,flag1=1,flag2=1,flag3=1,flag4=1;
		loop1:while(flag)
		{ 
   
		printf("请输入学号(三位):");
		scanf("%s",q->num);
	    if(strlen(q->num)!=3){ 
   
		  printf("学号格式输入错误!n");
		  fflush(stdin);
		  continue;
		}
		q2=p;
		while(q2)
    { 
   
    	if(strcmp(q->num,q2->num)==0)
    	{ 
   
    		printf("输入的学号重复,请重新输入!n");
    		goto loop1;
		}
		q2=q2->next;
	}
		while(i<3)
		{ 
   
			if(q->num[i]-'0'<0 || q->num[i]-'0'>9){ 
   
				printf("学号格式输入错误!n"); 
				break;
			}
			else{ 
   
			   i  ;
				if (i==3)
				flag=0;
		}
		}
		}
		printf("请输入学生姓名:");
		scanf("%s",q->name);
			
		while(flag1)
	{ 
   	
		printf("请输入性别(w/m):");
	    scanf("%s",q->sex);
	    if(strcmp(q->sex,"w")==0)
		  flag1=0;
		else if(strcmp(q->sex,"m")==0)
		  flag1=0;
		else
		{ 
   
		  printf("性别格式输入错误!(请输入w/m)n");
		}
	}
		printf("请输入专业:");
		scanf("%s",q->duty);
		
	while (flag2)
		{ 
   
		  printf("请输入英语成绩(0<=eng<=150):");
		  x=scanf("%d",&q->eng);
		  if(q->eng >= 0 && q->eng <= 150 && x==1 )
		  flag2=0;
		  else{ 
   
		  	 printf("成绩格式输入错误!n");
		  	 fflush(stdin);
		  }
		}
	
	while(flag3)
	{ 
   
		printf("请输入数学成绩(0<=math<=150):");
		x=scanf("%d",&q->math);
		if(q->math>=0 && q->math<=150 && x==1)
		flag3=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag3=1;
		}
	} 
	
	while(flag4){ 
   
		printf("请输入c语言成绩(0<=c<=150):");
		x=scanf("%d",&q->c);
		if(q->c>=0 && q->c<=150 && x==1)
		flag4=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag4=1;
		}
	}
		printf("录入成功!n"); 
		q->next=NULL;
		q1->next=q;
		q1=q;
	}
}

void traver(stu *p) //遍历输出
{ 
   	
	stu *q = p->next ;
	system("cls"); 	
	while(q!=NULL)
    { 
   
		printf("学号:%sn姓名:%sn性别:%sn专业:%sn英语成绩:%dn数学成绩:%dnc语言成绩:%dn",q->num,q->name,q->sex,q->duty,q->eng,q->math,q->c);
		q=q->next;
	}
}

void add(stu *p) //插入 
{ 
   
	int n,x;
	int i=1;
	int flag=1,flag1=1,flag2=1,flag3=1,flag4=1;
	stu *q,*q1,*q2;
	q=(stu*)malloc(sizeof(stu));
	q1=(stu*)malloc(sizeof(stu));
	q = p;
	if(q1==NULL)
	{ 
   
		printf("插入失败n");
		exit(1);
	}
    for(int a=0;a<n;a  );
    { 
   
       	
		loop1:while(flag)
		{ 
   
		printf("请输入学号(三位):");
		scanf("%s",q1->num);
	    if(strlen(q1->num)!=3){ 
   
		  printf("学号格式输入错误!n");
		  fflush(stdin);
		  continue;
		}
		q2=p;
		while(q2)
    { 
   
    	if(strcmp(q1->num,q2->num)==0)
    	{ 
   
    		printf("输入的学号重复,请重新输入!n");
    		goto loop1;
		}
		q2=q2->next;
	}
		while(i<3)
		{ 
   
			if(q1->num[i]-'0'<0 || q1->num[i]-'0'>9){ 
   
				printf("学号格式输入错误!n"); 
				break;
			}
			else{ 
   
			   i  ;
				if (i==3)
				flag=0;
		}
		}
		}
		printf("请输入学生姓名:");
		scanf("%s",q1->name);
			
		while(flag1)
	{ 
   	
		printf("请输入性别(w/m):");
	    scanf("%s",q1->sex);
	    if(strcmp(q1->sex,"w")==0)
		  flag1=0;
		else if(strcmp(q1->sex,"m")==0)
		  flag1=0;
		else
		{ 
   
		  printf("性别格式输入错误!(请输入w/m)n");
		}
	}
		printf("请输入专业:");
		scanf("%s",q1->duty);
		
	while (flag2)
		{ 
   
		  printf("请输入英语成绩(0<=eng<=150):");
		  x=scanf("%d",&q1->eng);
		  if(q1->eng >= 0 && q1->eng <= 150 &&x==1 )
		  flag2=0;
		  else{ 
   
		  	 printf("成绩格式输入错误!n");
		  	 fflush(stdin);
		  }
		}
	
	while(flag3)
	{ 
   
		printf("请输入数学成绩(0<=math<=150):");
		x=scanf("%d",&q1->math);
		if(q1->math>=0 && q1->math<=150 && x==1)
		flag3=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag3=1;
		}
	} 
	
	while(flag4){ 
   
		printf("请输入c语言成绩(0<=c<=150):");
		x=scanf("%d",&q1->c);
		if(q1->c>=0 && q1->c<=150 && x==1)
		flag4=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			  fflush(stdin);
			flag4=1;
		}
	}
	q1->next=p->next;
	p->next=q1;
	q1=q1->next;
	printf("插入成功!n");
}
} 

void seek(stu *p)//查找 
{ 
   
	stu *q=p->next;
	char num[20];
	int flag = 0;
	system("cls"); 	
	printf("请输入查找学生的学号:");
	scanf("%s",num);
	while(q!=NULL)
	{ 
    
		if(strcmp(q->num,num) == 0)
		{ 
   
			printf("学生学号:%sn",q->num);
			printf("学生姓名:%sn",q->name);
			printf("学生性别:%sn",q->sex);
			printf("专业:%sn",q->duty);
			printf("英语成绩:%dn",q->eng);
			printf("数学成绩:%dn",q->math);
			printf("c语言成绩:%dn",q->c);
			flag = 1;
			break;
		}
		q=q->next;
	}
	if(flag == 0)
	{ 
   
		printf("查无此人n");
	}
}

void revise(stu *p)//修改
{ 
   
	stu *q=p->next;
	stu *q1,*q2; 
	int x;
	char num[200];
	system("cls"); 	
	printf("请输入要修改的学号:");
	scanf("%s",num);
	while(q!=NULL)
	{ 
   
		if(strcmp(q->num,num) == 0)
		{ 
   
			int i=1;
	int flag=1,flag1=1,flag2=1,flag3=1,flag4=1;
		loop1:while(flag)
		{ 
   
		printf("请输入学号(三位):");
		scanf("%s",q->num);
	    if(strlen(q->num)!=3){ 
   
		  printf("学号格式输入错误!n");
		  fflush(stdin);
		  continue;
		}
	    q2=p;
		while(q2)
    { 
   
    	if(strcmp(q->num,q2->num)==0)
    	{ 
   
    		printf("输入的学号重复,请重新输入!n");
    		goto loop1;
		}
		else{ 
   
			break;
		}
		q2=q2->next; 
	}
		while(i<3)
		{ 
   
			if(q->num[i]-'0'<0 || q->num[i]-'0'>9){ 
   
				printf("学号格式输入错误!n"); 
				break;
			}
			else{ 
   
			   i  ;
				if (i==3)
				flag=0;
		}
		}
		}
		printf("请输入学生姓名:");
		scanf("%s",q->name);
			
		while(flag1)
	{ 
   	
		printf("请输入性别(w/m):");
	    scanf("%s",q->sex);
	    if(strcmp(q->sex,"w")==0)
		  flag1=0;
		else if(strcmp(q->sex,"m")==0)
		  flag1=0;
		else
		{ 
   
		  printf("性别格式输入错误!(请输入w/m)n");
		}
	}
		printf("请输入专业:");
		scanf("%s",q->duty);
		
	while (flag2)
		{ 
   
		  printf("请输入英语成绩(0<=eng<=150):");
		  x=scanf("%d",&q->eng);
		  if(q->eng >= 0 && q->eng <= 150 && x==1 )
		  flag2=0;
		  else{ 
   
		  	 printf("成绩格式输入错误!n");
		  	 fflush(stdin);
		  }
		}
	
	while(flag3)
	{ 
   
		printf("请输入数学成绩(0<=math<=150):");
		x=scanf("%d",&q->math);
		if(q->math>=0 && q->math<=150 && x==1)
		flag3=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag3=1;
		}
	} 
	
	while(flag4){ 
   
		printf("请输入c语言成绩(0<=c<=150):");
		x=scanf("%d",&q->c);
		if(q->c>=0 && q->c<=150 && x==1)
		flag4=0;
		else{ 
   
			printf("成绩格式输入错误!n");
			fflush(stdin);
			flag4=1;
		}
	}
        printf("修改成功!n");
		return; 
		}
	    q=q->next;
		q2->next=q;
		q2=q;
	} 
     printf("查无此人");
}

void del(stu *p)//删除
{ 
   
	stu *q1,*q2;
	q1=p;
	q2=q1->next;
	char num[200];
	system("cls"); 	
	printf("请输入想要删除的学号:");
	scanf("%s",num);
	while(q2!=0)
	{ 
   
		while(!strcmp(q2->num,num))
		{ 
   
			q1->next=q2->next;
			free(q2);
			q2=NULL;
			printf("删除成功n");
		    return;
		}
		q1=q2;
		q2=q2->next;
	}
 } 
 
void sort(stu *p)//排序 (c语言成绩) 
 { 
   							
	stu *q=NULL;
	system("cls"); 							
	while(q!=p->next) 
	{ 
   
		stu *pre=p;
		stu *cur=pre->next;
		while(cur!=q&&cur->next !=q) 
		{ 
   
			if(cur->c<cur->next->c )
			 { 
   
				pre->next =cur->next;
				cur->next =cur->next->next;
				pre->next->next =cur;
			}
			pre=pre->next;
			cur=pre->next;
		}
		q=cur;
	}
        traver(p);
}

void save(stu *p)//文件 
{ 
   
  	FILE*fp = fopen("学生信息.txt","w");
	if(fp!=NULL)
	{ 
   
		
		while(p->next!=NULL)
		{ 
     
   			fprintf(fp,"学号:%sn",p->next->num);
   			fprintf(fp,"姓名:%sn",p->next->name);
   			fprintf(fp,"性别:%sn",p->next->sex);
   			fprintf(fp,"专业:%sn",p->next->duty);
   			fprintf(fp,"英语成绩:%dn",p->next->eng);
   			fprintf(fp,"数学成绩:%dn",p->next->math);
   			fprintf(fp,"c语言成绩:%dn",p->next->c);
   			fprintf(fp,"---------------------------n");
  			p=p->next;
	  	}
	  	printf("保存成功!n");
	}
	fclose(fp);
}

int main()
{ 
   
	system("color 3F");
	stu *head=(stu *)malloc(sizeof(stu));
	head->next=NULL;
	while(1)
	{ 
   
	printf("tttt**********新生管理系统************n");
    printf("tttt请选择你的操作n");
    printf("tttt1.录入信息n");
    printf("tttt2.按照学号查找信息n");
	printf("tttt3.按照学号修改信息n");
	printf("tttt4.按照学号删除信息n");
	printf("tttt5.插入信息n");
	printf("tttt6.浏览全部信息n");
	printf("tttt7.按c语言成绩排序n");
	printf("tttt8.保存到文件n");
	printf("tttt0.退出n");
    printf("tttt**********************************n");
    printf("tttt请按键选择操作:n");
    fflush(stdin);
    int c;
    scanf("%d",&c);
    switch(c)
    { 
   
    	case 1:
    		input(head);
			break;
    	case 2:
    		seek(head);
			break; 
    	case 3:
    		revise(head);
			break;
		case 4:
			del(head);
			break; 
		case 5:
			add(head); 
			break;
		case 6:
		    traver(head);
			break; 
		case 7:
		    sort(head); 
			break;
		case 8:
		    save(head);
		    break;
		case 0:
		     return 0; 
    	default:
    		printf("输入错误!n"); 
	}
	} 
} 

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151598.html原文链接:https://javaforall.cn

0 人点赞