C语言初学者可完成的简易的学生成绩管理系统

        该学生成绩管理系统为我大一的一次课设,只是用结构体和链表实现了,“增删查改”功能,后续修改时我又加入了按学生总分进行链表排序和保存简单的txt文件。       

        首先介绍我建立的结构体,它可以储存学号,学生姓名,各科成绩和总成绩,并定义了,新类型stu。

typedef struct student
{
	char xuehao[1000];//学号 
	char name[20];//姓名 
	char Class[20];//班级 
	float mathgrade;//数学成绩 
	float eglishgrade;//英语成绩 
	float computeregrade;//计算机成绩 
	float pingjun;//平均成绩 
	float zong;//总分 
	struct student *next;
} stu;
stu *head;

        下面是主函数,包括一个简易的登录界面,并进入初始化界面(函数)

 

int main()
{
	head = (stu*)malloc(sizeof(stu));
	head->next=NULL;
	char zhanghao1[20] = "a"/*储存注册账号*/,zhanghao2[20]/*储存登录账号*/;
	char mima1[20]="a"/*储存注册密码*/,mima2[20]/*储存登录密码*/;
	int j;
	for(int i=0;i!=1;)
	{
		printf("\t\t****************************\n");
		printf("\t\t******学生成绩管理系统******\n");
		printf("\t\t****************************\n");
		printf("\t\t请选择\n\t\t1.登录\n\t\t2.注册\n\t\t");
		char a[100];
		scanf("%s",a);
		if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")==0 && strcmp(mima1,"a")==0)//建立了一个简陋的注册登录界面 
		{
			printf("\t\t请先注册账号\n"); 
			printf("\t\t请输入需要创建的账号;");
			scanf("%s",zhanghao1);
			printf("\t\t请输入需要注册的密码:");
			scanf("%s",mima1);
			system("pause");
			system("cls");
			continue;
		}else if(strcmp(a,"1")==0 && strcmp(zhanghao1,"a")!=0 && strcmp(mima1,"a")!=0)
		{
			printf("\t\t请输入登录账号:");
			scanf("%s",zhanghao2);
			printf("\t\t请输入登录密码:");
			scanf("%s",mima2); 
			for(;;)
			{
				if(strcmp(zhanghao1,zhanghao2)!=0 || strcmp(mima1,mima2)!=0)
				{
					printf("\t\t账号密码错误\n\t\t请重新输入账号:");
					scanf("%s",zhanghao2);
					printf("\t\t请重新输入密码:");
					scanf("%s",mima2);
					j++;
					if(j==3)
					{
						break;	
					}
				}
				else
				{
					printf("成功登录\n");
					i=1;
					break;
				}
			}
		}else if(strcmp(a,"2")==0)
		{
			printf("\t\t请输入账号:");
			scanf("%s",zhanghao1);
			printf("\t\t请输入密码:");
			scanf("%s",mima1);
			system("pause");
			system("cls");
			continue; 
		}else
		{
			printf("\t\t请输入1或2");
			system("pause");
			system("cls");
			continue; 
		}
		if(j==3)
		{
			printf("\t\t输入错误次数过多");
			break; 
		}
		chushi();
		if (tui == 1) {
			break;
		}
		system("pause");
		system("cls");
	}
	return 0;
}

  

        初始化函数,创建初始化界面,并利用switch选择结构进入其他功能函数。

 

void chushi()//初始化界面 
{
	system("pause");	
	system("cls");
	void pai(stu *head);
	void baocun(stu*head);
	while (1)
	{
		printf("\t\t****************************\n");
		printf("\t\t******学生成绩管理系统******\n");
		printf("\t\t****************************\n");
		printf("\t\t 1、新增学生成绩信息并保存\n");
		printf("\t\t 2、显示所有学生成绩信息\n");
		printf("\t\t 3、查询学生成绩信息\n");
		printf("\t\t 4、修改学生成绩信息\n");
		printf("\t\t 5、删除学生成绩信息\n");
		printf("\t\t 6、按照学生总成绩排序\n");
		printf("\t\t 7、生成text文件保存\n");
		printf("\t\t 0、退出系统\n");
		printf("\t\t 请输入你的选择:");
		int a,b;
		b=scanf("%d",&a);
		while(b!=1)
		{
			while((getchar())!='\n')
			{
				printf("警告:只能输入数字");
			}
			b = scanf("%d",&a);
		}
		system("cls");
		switch(a)//利用switch选择结构 
		{
			case 1:
				zeng(head);
				break;
			case 2:
				xianshi(head);
				break;
			case 3:
				find(head);
				break;
			case 4:
				chance(head);
				break;
			case 5:
				cancel(head);
				break;
			case 6:
				pai(head);
				break;
			case 7:
				baocun(head);
				break;		
			case 0:
				tui = 1;
				printf("感谢你使用学生通信录管理系统,请关掉程序!!!\n");
				break;
		}
		if(tui==1)
		{
			break;	
		}
	}	
}

        下面是功能函数我就不做过多的赘述大家自己看即可:

链表增函数:

void zeng(stu*head)//增加学生成绩信息 
{
	while (1) 
	{
		stu *p, *tail, *q;
		tail = head;
		while (tail->next != NULL) { //尾插法
		tail = tail -> next;
		}
		q = head->next;
		int a = 0;
		char xuehao1[20];
		printf("请输入学生号\n");
		scanf("%s",xuehao1);
		while(q != NULL)
		{
			if(strcmp(q->xuehao,xuehao1) == 0)//判断是否输入重复学号 
			{
				a=1;
				printf("学号无法重复请输入\n");
				break; 
			}else
			{
				q=q->next;
			}
		}
		if(a==1)
		{
			continue;
		}
		p=(stu*)malloc(sizeof(stu));//为新结构体申请空间 
		strcpy(p->xuehao,xuehao1);//复制学号到结构体中 
		printf("请输入姓名");
		scanf("%s",p->name);
		printf("请输入班级");
		scanf("%s",p->Class);
		float mathgrade1,eglishgrade1,computeregrade1,pingjun1;
		int j;
		printf("请输入数学成绩:");
		while (1)//该循环为防止输入错误类型和小于1大于100的分数 
		{
			j=scanf("%f",&mathgrade1);
			if(j==0||getchar()!='\n')
			{
				printf("非法输入字符,请重新输入数字:");
				while(getchar() != '\n');//清除缓存区 
				continue; 
			}
			if(mathgrade1<=100 && mathgrade1>=1)
			{
				p->mathgrade=mathgrade1;
				break;
			}else
			{
				printf("非法输入成绩,请重新输入:"); 
				continue;
			}
		}
		printf("请输入英语成绩:");
		while (1)
		{
			j=scanf("%f",&eglishgrade1);
			if(j=
  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值