C语言编写《学生信息管理系统》之结构体

版权声明:创作不易,希望大家理解。


这次给大家带来的结构体处理一些数据,以编写《学生信息管理系统》为背景的小试牛刀,基本功能都可以使用,文件的操作这里没有涉及,有兴趣的同学可以查看我的链表版的《学生信息管理系统》,大家加油





有一点瑕疵,小毛病,自己动手调一调。抱歉害羞



下面是查找模块,有姓名和学号两种查询方式,这里是姓名方式,就不赘述了。




下面是删除模块,全为1的被我删除了。2是刚添加的。




下面是修改模块,绝对没问题。




这是重点,排序模块,其中涉及不少知识大家慢慢看!



读取和保存,没来得及写,抱歉了。大家可以动手自己写写,Ctrl+v习惯了就不好了!!代码奉上,有兴趣的可以看看我的链表的!下期见咯。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n=0;
struct student 
{
	char name[20];           //名字
	char num[20];            //学号
	char Class[20];          //班级
	char mayor[20];          //专业
	int age;                 //年龄
	int score;               //成绩
}s[100];
void add()                    //添加
{
	system("cls");
	printf("请输入学生基本信息:\n姓名:");
	scanf("%s",&s[n].name);
	printf("学号:");
	scanf("%s",&s[n].num);
	printf("年龄:");
	scanf("%d",&s[n].age);
	printf("班级:");
	scanf("%s",&s[n].Class);
	printf("专业:");
	scanf("%s",&s[n].mayor);
	printf("成绩:");
	scanf("%d",&s[n].score);
	n++;
	printf("\n\n您输入的信息已被保存!\n");
	system("pause");
	system("cls");
}
void print()
{
	int i;
	system("cls");
	printf("姓名\t学号\t\t班级\t年龄\t专业\t\t成绩\n");
	for(i=0;i<10;i++)
	{
		printf("%-8s",s[i].name);
		printf("%-16s",s[i].num);
		printf("%-8d",s[i].age);
		printf("%-8s",s[i].Class);
		printf("%-16s",s[i].mayor);
		printf("%-8d",s[i].score);
		printf("\n");
	}
	printf("\n信息显示完毕!\n");
	system("pause");
	system("cls");
}

void find()           //查找
{
	void find1();
	void find2();
	int a;
	system("cls");
	printf("1.按姓名查找\n2.按学号查询\n");
	scanf("%d",&a);
	switch(a)
	{
	case 1:
		find1();
		break;
	case 2:
		find2();
		break;
	}
}
void Delete()         //删除
{
	int i;
	char a[20];
	printf("请输入要删除的学号");
	scanf("%s",&a);
	for(i=0;i<n;i++)
		if(strcmp(a,s[i].num)==0)
		{
			while(i<n)
			{
				s[i]=s[i+1];
				i++;
			}
			n-=1;
		}
}

void amend()         //修改
{{
	int i,j,o;
	char a[20];
	system("cls");
	printf("修改学生的学号:");
	scanf("%s",&a);                           //通过输入需要修改信息的学号找到他
	printf("\n");
	for(i=0;i<n;i++)
	{
		if(strcmp(a,s[i].num)==0)
		{
			printf("学号:%s\n",s[i].num);
	    	printf("姓名:%s\n",s[i].name);
	     	printf("班级:%s\n",s[i].Class);
	    	printf("专业:%s\n",s[i].mayor);
    		printf("年龄:%d\n",s[i].age);
			printf("成绩:%d\n\n",s[i].score);
			o=i;
		}
	}
	printf("1.修改学号\n2.修改姓名\n3.修改专业\n4.修改年级\n5.修改性别\n6.修改出生日期\n请选择:");
	scanf("%d",&j);                                                  //选择修改的信息
	switch(j)                                                        //选择结构!
	{
		case 1:
			printf("学号修改为:");
			scanf("%s",s[o].num);
			break;
			
		case 2:
			printf("姓名修改为:");
			scanf("%s",s[o].name);
			break;
		case 3:
			printf("专业修改为:");
			scanf("%s",&s[o].mayor);
			break;
		case 4:
			printf("班级修改为:");
			scanf("%d",&s[o].Class);
			break;
		case 5:
			printf("成绩修改为:");
			scanf("%s",&s[o].score);
			break;
		case 6:
			printf("年龄修改为:");
			scanf("%d",s[o].age);
			break;
	}
	printf("\n修改成功!\n\n");
	system("pause");
	system("cls");
}
}
void sort()         //排序(成绩)
{
	struct student tmp;
	int i,j;
	printf("共排序%d组数据\n\n",n);
	for(i=0;i<n;i++)
	{
		for(j=i+1;j<n;j++)                 //for双循环对每一个值进行冒泡比较
		{

			if(s[i].score>s[j].score)  //前面的值如果大于后面的纸就进行冒泡排序
			{
				tmp=s[i];                //交换内容
				s[i]=s[j];               //交换内容
				s[j]=tmp;                //交换内容
			}
		}
	}
	printf("已按照成绩排序!\n");
	system("pause");
	system("cls");
}
void save()
{
	int i;
	FILE *fp;

	fp=fopen("c.txt","wb");

	for(i=0;i<n;i++)
		if(fwrite(&s[i],sizeof(s),1,fp)!=1)
			printf("Error");
	fclose(fp);
	printf("\n\n已存入文件中!!!\n");
	system("pause");
	system("cls");
}
void read()
{
	int i;
	FILE *fp;
	fp=fopen("C:\\Users\\Administrator\\Desktop\\学生信息管理系统3个版本\\学生信息管理系统顺序版本4.0\\c.txt","rb");
	for(i=0;i<9;i++)
		fread(&s[i],sizeof(s),1,fp);
	fclose(fp);
	printf("\n\n已经读取文件!!!\n");
	system("pause");
	system("cls");
}
void find1()
{
	int i;
	char a[20];
	system("cls");
	printf("您选择按姓名查询:\n");
	scanf("%s",&a);
	for(i=0;i<n;i++)
	{
		if(strcmp(a,s[i].name)==0)
		{
			printf("\n\n\n%s\t",s[i].name);
			printf("%s\t\t",s[i].num);
			printf("%s\t",s[i].Class);
			printf("%d\t",s[i].age);
			printf("%d\t",s[i].score);
			printf("%s",s[i].mayor);
			printf("\n");
		}
	}
	system("pause");
	system("cls");
}
void find2()
{
	int i;
	char a[20];
	system("cls");
	printf("您选择按学号查询:\n");
	scanf("%s",&a);
	for(i=0;i<n;i++)
	{
		if(strcmp(a,s[i].num)==0)
		{
			printf("%s\t",s[i].name);
			printf("%s\t\t",s[i].num);
			printf("%s\t",s[i].Class);
			printf("%d\t",s[i].age);
			printf("%d\t",s[i].score);
			printf("%s",s[i].mayor);
			printf("\n");
		}
	}
	system("pause");
	system("cls");
}

void main()       //主函数
{
	int a=1;
	while(1)
	{
		if(a>=0&&a<=9)
		{
			system("cls");
			printf("〓〓〓〓〓〓〓〓〓〓  ☆   学 生 成 绩 管 理 系  统     ☆  〓〓〓〓〓〓〓〓〓〓\n");
			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("〓〓〓〓〓〓〓〓〓★  ☆          0.安全退出系统        ☆  ★〓〓〓〓〓〓〓〓〓\n");
			printf("请选择:");
			scanf("%d",&a);
			switch(a)
			{
			case 1:
				add();
				break;
			case 2:
				print();
				break;
			case 3:
				find();
				break;
			case 4:
				Delete();
				break;
			case 5:
				amend();
				break;
			case 6:
				sort();
				break;
			case 7:
				save();
				break;
			case 8:
				read();
				break;
			case 0:
				exit(0);
				break;

			}
		}
		else
		{
			printf(" 您输入的不符合要求,请输入符合要求的数字返回主菜单!");
			scanf("%d",&a);
		}
	}
}


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值