学生管理系统

运用C语言的方法来写的,使用了文件。

 下面有请同学们欣赏:

主功能页面

main函数

int main() {
	int n,v; //选择执行程序
	student *head = (student*)malloc(sizeof(student));
	head->next = NULL;
	do {
		Menu();
		printf("\t请选择功能:");
			n=scanf("%d", &v);
            while(n!=1){
			while(getchar()!='\n' );
			printf("\t警告只能输入数字!选择功能:");
			n=scanf("%d", &v);	
	}
	        n=v;
		switch (n) {
			case 1:  //添加学生信息
				Add(head);
				baocun(head);
				break;
		    case 2: //查找学生成绩
			    Find(head);
			    break;    	
			case 3: //修改学生信息
				Amend(head);
			    baocun(head);
				break;	
			case 4: //删除学生信息
			    delet(head);
			    baocun(head);
				break;		
	        case 5: //查看学生信息 
			    view(head);
			break;
			case 0:  // 退出程序
				break; 
			default :
				printf("\t无此选项,请重新输入\n");
		}
	} while (n);
	printf("\t结束程序");
	return 0;
}

该部分是为了防止用户输入字符串;

以及其实际作用;

 


            while(n!=1){
			while(getchar()!='\n' );
			printf("\t警告只能输入数字!选择功能:");
			n=scanf("%d", &v);	
	}
	        n=v;

用链表添加学生信息:

typedef struct student {
	char name[20];//姓名
	int  id;//学号
	int class_num;//班级
	int chinese;//分数
	int math;//分数
	int english;//分数
	int all;//总分 
	struct student *next;
}student;
void Add(student *head) {
	//程序1.添加学生信息
	int i;
	do {
		student *o=head->next;
		student *p;
		p = (student *)malloc(sizeof(student));
		int j,b,k,l,v,e; 
		int  id;//学号
		char name[20];//姓名
		int class_num;//班级
		int chinese;//分数
		int math;//分数
		int english;//分数
		int all;//总分 
		printf("\t输入学生学号:");
		id=scanf("%d", &v);
				while(id!=1){
				while((getchar())!='\n' );
				printf("\t警告只能输入数字!学号:");
				id=scanf("%d", &v);	
		}
		id=v;
		while (o) {
			if (o == NULL) {
				break;
			}
			if (o->id == id) {
				printf("\t学号重复请重新输入学号:");
				scanf("%d", &id);
				o = head->next;
			} else {
				o = o->next;
			}
		}
		printf("\t姓名:");
		scanf("%s",name); 
		printf("\t班级:");
		class_num=scanf("%d", &j);
		while(class_num!=1){
				while(getchar()!='\n' );
				printf("\t警告只能输入数字!班级:");
				class_num=scanf("%d", &j);	
		}
		class_num=j;
		printf("\t语文:");
		chinese=scanf("%d", &b);
		while(chinese!=1){
		while((getchar())!='\n' );
		printf("\t警告只能输入数字!语文:");
		chinese=scanf("%d", &b);	
		}
		chinese=b;
		printf("\t数学:");
			math=scanf("%d", &k);
			while(math!=1){
			while((getchar())!='\n' );
			printf("\t警告只能输入数字!数学:");
			math=scanf("%d", &k);	
		}
		math=k;
		printf("\t英语:");
		english=scanf("%d", &l);
		while(english!=1){
			while((getchar())!='\n' );
			printf("\t警告只能输入数字!英语:");
			english=scanf("%d", &l);	
		}
		english=l;
		all=chinese+english+math;
		p->all=all; 
		p->id = id;
		strcpy(p->name, name);
		p->class_num = class_num;
		p->chinese = chinese;
		p->math = math;
		p->english = english;
		p->next = head->next;
		head->next = p;
		printf("\t添加成功\n");
		printf("\t是否继续添加\n");
		printf("\t是请输入'1',否请输入'0'\n");
		printf("\t请输入数字:");
		i=scanf("%d", &e);
		while(i!=1){
		while(getchar()!='\n' );
		printf("\t警告只能输入数字!1或0:");
		i=scanf("%d", &e);	
		}
		i=e; 
		while (i > 1 || i < 0) {
			printf("\t无效数字,请重新输入:");
			scanf("%d", &i);
		}
		if (i == 0) {
			printf("\t正在退出添加程序\n");
			printf("\t退出成功\n");
		}
	} while (i);
}

修改功能以及其功能展示:

void Amend(student *head) {
	//修改学生信息
	student *x = head->next;
	printf("\t输入修改学生的学号:");
	int s,b;
     s=scanf("%d", &b);
		while(s!=1){
		while((getchar())!='\n' );
		printf("\t警告只能输入数字!学号:");
		s=scanf("%d", &b);	
		}
		s=b;
	while (x) {
		if (x->id == s) {
			int i,j;
			do {
				printf("\t\t\t  选择修改项目:\n");
				printf("\t\t--------------------------------\n");
				printf("\t\t-      1.   学生班级       -\n");
				printf("\t\t-      3.   语文成绩       -\n");
				printf("\t\t-      4.   数学成绩       -\n");
				printf("\t\t-      5.   英语成绩       -\n");
				printf("\t\t-      0.     退出         -\n");
				printf("\t\t--------------------------------\n");
				printf("\t选择功能:");
			    i=scanf("%d", &j);
					while(i!=1){
					while((getchar())!='\n' );
					printf("\t警告只能输入数字!学号:");
					i=scanf("%d", &j);	
					};
				i=j;
				switch (i) {
					case 1:
						printf("\t输入修改后的班级:");
						scanf("%d", &x->class_num);
						break;
					case 2:
						printf("\t输入修改后的语文成绩:");
						scanf("%d", &x->chinese);
						break;
					case 3:
						printf("\t输入修改后的数学成绩:");
						scanf("%d", &x->math);
						break;
					case 4:
						printf("\t输入修改后的英语成绩:");
						scanf("%d", &x->english);
						break; 
					case 0:
						printf("\t退出成功\n");
						break;
					default:
						printf("\t无效数字,请重新输入\n");
						break;
				}
			} while (i);
			x->all=x->chinese+x->math+x->english; 
			break;
		} else {
			x = x->next;
			if (x == NULL) {
				printf("\t无相关学生\n");
				break;
			}
		}
	}
}

删除学生信息:

void delet( student *head) { //5.删除学生信息
    student *a = head;
    student *b = head->next;
	int i,j;
	printf("\t请输入学生学号:");
    i=scanf("%d", &j);
		while(i!=1){
		while((getchar())!='\n' );
		printf("\t警告只能输入数字!学号:");
		i=scanf("%d", &j);	
		}
		i=j;
	while (b) {
		if (b->id == i) {
			a->next = b->next;
			free(b);
			printf("\t删除完成\n");
			break;
		} else {
			a = a->next;
			b = b->next;
			if (b == NULL) {
				printf("\t无该学生\n");
			}
		}
	}
}
void baocun(student *head)//学生信息保存 
{
		FILE*fp=fopen("D:\\学生信息.txt","w+");
	    student *p;
	    p=head->next;
	    if(fp==NULL)
	    {
	    	printf("打开失败");
	    	exit(1);//异常退出 
		} 
	   	while(p!=NULL)
	  	{
	  		fprintf(fp,"%s\n",p->name);
	  		fprintf(fp,"%d\n",p->chinese);
	  		fprintf(fp,"%d\n",p->math);
	  		fprintf(fp,"%d\n",p->english);
	  		fprintf(fp,"%d\n",p->all);
	  		p=p->next;
	  	}
	  	printf("\t保存成功!\n");
	    fclose(fp);//关闭文件 
}

查找学生信息:

void seek()
{
	char a[20];
	char b[20];
	char c[20];
	char d[20]; 
	char e[20]; 
	FILE *fp=fopen("D:\\学生信息.txt","r");
	if(fp==NULL)
    {
    	printf("打开失败");
    	exit(1);//异常退出 
	} 
	while(fscanf(fp,"%s",a)!=EOF)
	{
		fscanf(fp,"%s",b);
		fscanf(fp,"%s",c);
		fscanf(fp,"%s",d);
		fscanf(fp,"%s",e);
		printf("学生姓名:%s\n",a);
		printf("语文成绩:%s\n",b);
		printf("数学成绩:%s\n",c);
		printf("英语成绩:%s\n",d);
		printf("总分成绩:%s\n",e);
		printf("\n");
	}
	fclose(fp);
	printf("\t查看完毕\n"); 
}

将操作后的信息保存进入文件:

void baocun(student *head)//学生信息保存 
{
		FILE*fp=fopen("D:\\学生信息.txt","w+");
	    student *p;
	    p=head->next;
	    if(fp==NULL)
	    {
	    	printf("打开失败");
	    	exit(1);//异常退出 
		} 
	   	while(p!=NULL)
	  	{
	  		fprintf(fp,"%s\n",p->name);
	  		fprintf(fp,"%d\n",p->chinese);
	  		fprintf(fp,"%d\n",p->math);
	  		fprintf(fp,"%d\n",p->english);
	  		fprintf(fp,"%d\n",p->all);
	  		p=p->next;
	  	}
	  	printf("\t保存成功!\n");
	    fclose(fp);//关闭文件 
}

文件的小知识:

r打开一个已有的文本文件,允许读取文件。
w打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+打开一个文本文件,允许读写文件。
w+打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

到了这里,我们的学生大作业,学生管理系统已经完结了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值