结构体数组录入信息
简易版本,长度不变
#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操作输入打印
查找信息
插入信息
删除信息
排序
//另外这是某学校实践周作业,清楚的同学记得改改代码