C语言,结构体数组,进行录入学生信息,不是数组链表

结构体数组录入信息
简易版本,长度不变

#include<stdio.h>
struct student
{
	char name[20];
	char ID[20];
	int score[5];//五门课成绩 
	int sum;
}stu[3];
int main()
{
	int i,j;
	for(i=0;i<3;i++)
	{
				scanf("%s",stu[i].ID);
scanf("%s",stu[i].name);

		stu[i].sum=0;
		for(j=0;j<5;j++)
		{
			scanf("%d",&(stu[i].score[j]));
			stu[i].sum+=stu[i].score[j];
		}
	}
	int max=-1;
	for(i=0;i<3;i++)
	{
		for(j=i+1;j<3;j++)
		{
			if(stu[i].sum<stu[j].sum)
			{
				int temp;
				temp=stu[i].sum;
				stu[i].sum=stu[j].sum;
				stu[j].sum=temp;
			}
		}

	}
	printf("%s\t%s\t%d\n",stu[0].name,stu[0].ID,stu[0].sum);
	return 0;
}

稍微要变换长度的,本来是N长度,但是由于插入,删除等设置,所以需要一个变量M进行控制,本质上还是把建立大的结构体数组,比如N为100,然后用全局变量M控制他的输入输出长度,包括插入,删除,还不如整个链表
单链表,学生信息录入

代码:

/*头文件*/
#include <stdio.h>
#include<dos.h>      /*dos.h包含了与dos相关的结构、flags等数据,还有dos相关的低级IO函数、
                      内存访问函数、中断访问函数等等。   */
#include<stdlib.h>   /*其它说明*/
#include<string.h>   /*字符串函数*/

#include<ctype.h>    /*字符操作函数*/

#define N 10 //多留几个空间进行删除和增加 
int M=3;//全局变量,进行控制结构体数组长度 
struct student   /*定义结构体数组用于缓存数据*/
{
char num[10];
 char name[10];
 int score[3];
 int sum;
 float average;
 int order;
}stu[N];

/*函数原型*/

int menu_select();   /*菜单函数*/
void create();   /*创建链表*/
void print();   /* 显示全部记录*/
void search();    /*查找记录*/
void dele();   /*删除记录*/
void sort();    /*排序*/
void insert();   /*插入记录*/
void save();     /*保存文件*/
void load();        /*读文件*/

/*主函数界面*/
main()
{

 for(;;)            /*循环无限次*/
   {switch(menu_select())    
      {                     
	 case 1:create();break;/*创建成绩库*/
	 case 2:print();break;/*显示成绩单*/
	 case 3:search();break;/*查询*/
	 case 4:dele();break;/*删除*/
	 case 5:sort();break;/*排序*/
	 case 6:insert();break;  /*&new表示返回地址*/
	 case 7:save();break;
	 case 8:load(); break;
	 case 9:exit(0);       /*如菜单返回值为9则程序结束*/
      }
   }
}


/*菜单选择函数*/
menu_select()
{int n;
 printf("press any key to enter the menu......");   /*按任一键进入主菜单*/
 getch();    /*从键盘读取一个字符,但不显示于屏幕*/
 system("cls");   /*清屏*/
 printf("********************************************************************************\n");
 printf("\t\t                Welcome to\n");
 printf("\n\t\t      The student score manage system\n");
 printf("*************************************MENU***************************************\n");
 printf("\t\t\t1. Enter the record\n");            /*输入学生成绩记录*/
 printf("\t\t\t2. Print the record\n");            /*显示*/
 printf("\t\t\t3. Search record on name\n");       /*寻找*/
 printf("\t\t\t4. Delete a record\n");             /*删除*/
 printf("\t\t\t5. Sort to make new a file\n");     /*排序*/
 printf("\t\t\t6. Insert record to list\n");       /*插入*/
 printf("\t\t\t7. Save the file\n");               /*保存*/
 printf("\t\t\t8. Load the file\n");               /*读取*/
 printf("\t\t\t9. Quit\n");                        /*退出*/
 printf("********************************************************************************\n");
 do{
    printf("\n\t\t\tEnter your choice(1~9):");  
    scanf("%d",&n);
   }while(n<1||n>9);    /*如果选择项不在1~9之间则重输*/
   return(n);           /*返回选择项,主函数根据该数调用相应的函数*/
}
/*
/*输入函数*/

/* 显示全部记录函数*/
void print()
{int i=0;     /* 统计记录条数*/

system("cls");

 printf("\n************************************STUDENT************************************\n");
 printf("-------------------------------------------------------------------------------\n");
 printf("| Rec |   Num   |   Name   |  Sc1  |  Sc2  |  Sc3  |  Sum  |   Ave   | Order |\n");
 printf("-------------------------------------------------------------------------------\n");
 for(i=0;i<M;i++)
    printf("| %3d |  %4s   |   %-4s   |  %3d  |  %3d  |  %3d  |  %3d  |  %4.2f  |  %-5d|\n", 
    i, stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].average,stu[i].order);
   
 printf("-------------------------------------------------------------------------------\n");
 printf("**************************************END**************************************\n");
}

void load()
{
}
void save()
{
	
}
void insert()
{
	//默认从0开始计算,M 长度+1
	 
	int n,a,b,c,d,Sum;
	int i,j;
	float aver;
	char Id[10],Name[10];
	M=M+1; 
	scanf("%d%s%s%d%d%d%d%d",&n,Id,Name,&a,&b,&c,&Sum,&d); 
	for(i=M-1;i>=n;i--)
	{
		stu[i].average=stu[i-1].average;
		stu[i].order=stu[i-1].order;
		stu[i].sum=stu[i-1].sum;
		stu[i].score[0]=stu[i-1].score[0];
		stu[i].score[1]=stu[i-1].score[1];
		stu[i].score[2]=stu[i-1].score[2];
		strcpy(stu[i].name,stu[i-1].name);
		strcpy(stu[i].num,stu[i-1].num);
	}
	stu[n-1].average=aver;
	stu[n-1].order=d;
	stu[n-1].sum=Sum;
	stu[n-1].score[0]=a;stu[n-1].score[1]=b;stu[n-1].score[2]=c;
	strcpy(stu[n-1].name,Name);strcpy(stu[n-1].num,Id);
}
void sort()
{
	int i,j;
	for(i=0;i<M;i++)
	{
		for(j=i+1;j<M;j++)
		{
			if(stu[i].sum>stu[j].sum)
			{
				int temp;
				float t;
				char type[10];
				temp=stu[i].sum;stu[i].sum=stu[j].sum;stu[j].sum=stu[i].sum;
				temp=stu[i].order;stu[i].order=stu[j].order;stu[j].order=stu[i].order;
				temp=stu[i].score[0];stu[i].score[0]=stu[j].score[0];stu[j].score[0]=stu[i].score[0];
				temp=stu[i].score[1];stu[i].score[1]=stu[j].score[1];stu[j].score[1]=stu[i].score[1];
				temp=stu[i].score[2];stu[i].score[2]=stu[j].score[2];stu[j].score[2]=stu[i].score[2];
				t=stu[i].average;stu[i].average=stu[j].average;stu[j].average=t;
				strcpy(type,stu[i].name);strcpy(stu[i].name,stu[j].name);strcpy(stu[j].name,type);
				strcpy(type,stu[i].num);strcpy(stu[i].num,stu[j].num);strcpy(stu[j].num,type);
			}
		}
	}
	
}
void dele()
{
	char word[10];
	int i,j;
	scanf("%s",word);
	for(i=0;i<M;i++)
	{
		if(strcmp(stu[i].name,word)==0)
		{
			for(j=i;j<M;j++)
			{
				//所有数据迁移 
				stu[j].average=stu[j+1].average;
				stu[j].order=stu[j+1].order;
				stu[j].sum=stu[j+1].sum;
				stu[j].score[0]=stu[j+1].score[0];
				stu[j].score[1]=stu[j+1].score[1];
				stu[j].score[2]=stu[j+1].score[2];
				strcpy(stu[j].name,stu[j+1].name);
				strcpy(stu[j].num,stu[j+1].num);
			}
		}
	}
	M=M-1; //改变显示长度 
}
void search()
{
	char word[10];
	int i;
	scanf("%s",word);
	for(i=0;i<M;i++)
	{
		if(strcmp(stu[i].name,word)==0)
		{
			printf("%s  %s  %d  %d  %d  %d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].average,stu[i].order);
		}
	}
}
void create()
{
	int i;
	for(i=0;i<M;i++)
	{
		scanf("%s%s%d%d%d%d",stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
		stu[i].order=i;
		stu[i].average=stu[i].sum/3.0;
	}
}

1和2操作输入打印

在这里插入图片描述
在这里插入图片描述
查找信息

在这里插入图片描述

插入信息

在这里插入图片描述
在这里插入图片描述

删除信息
在这里插入图片描述
在这里插入图片描述
排序
在这里插入图片描述
在这里插入图片描述

//另外这是某学校实践周作业,清楚的同学记得改改代码

  • 17
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值