数据结构预备实验(C语言):学生信息管理

实验目的

1、复习C语言中结构体类型的定义方法,掌握数据元素类型的定义方法;

2、巩固结构体变量成员的“.”引用和“->”引用;

3、掌握C语言函数的声明、定义和调用。

实验内容

学生信息管理:某年级共有n个学生,每个学生的信息构成一个记录,如下表所示,学生的学号作为关键字(key)。这n个记录构成了一个长度为n的线性表。现要求完成如下操作:

学号

姓名

性别

英语

计算机

高数

总分

平均分

4256007

贝小鹏

76

68

84

 

 

4256012

黄坚

87

64

66

 

 

4256020

林继磊

78

69

78

 

 

4256026

潘耀

54

66

52

 

 

  1. 输入学生的信息,建立学生表。
  2. 输出所有学生的信息。
  3. 查找:在学生表中查找指定学生的信息,如果找到就显示该生的所有信息,否则显示“该学生的信息不存在,查找失败”。
  4. 修改:在学生表中修改指定学生的信息,然后显示所有学生信息,如果表中不存在该生就显示“该生的信息不存在,修改失败”。
  5. 添加:在当前学生表的末尾添加一个记录(记录数增加1)例如,添加记录为:4256033  吴强 男 82 85 90

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100

typedef struct student{
	char num[10];//学号
	char name[20];//姓名
	char sex[10];//性别
	float grade1;//英语、计算机、高数成绩
	float grade2;
	float grade3;
	double total;//总分
	double average;//平均分
}STU;

STU stu[MAXSIZE];//数组静态分配
STU stu1[1];//临时记录输入的学生信息
int lenth=0;

void InputStu(STU stu[],int n);//输入所有学生的信息,建立学生表
void PrintStu();//输出所有学生的信息
void SearchNum(char number[],int n);//按学号查找学生的信息
void ScanfStu();//用户输入语句
void ModifyStu();//按学号修改学生的信息
void InsertStu();//添加新学生


int main(){
	
	int n,choice;
	char number[10];


	while (1){
        printf("*************************************\n");
        printf("欢迎使用学生成绩管理系统\n");
        printf("[1] 输入所有学生信息\n");
        printf("[2] 输出所有学生成绩\n");
        printf("[3] 按学号查找某个学生信息\n");
        printf("[4] 按学号修改某个学生信息\n");
        printf("[5] 添加某个学生信息\n");
        printf("[0] 退出程序\n");
        printf("请输入您的选择(0 - 5):");
        scanf("%d",&choice);
        printf("*************************************\n");

        switch (choice)
        {
        case 1://录入;
            printf("请输入您要输入的学生个数:");
	        scanf("%d",&n);
	        InputStu(stu,n);
            break;
		case 2://输出;
            PrintStu();
            break;
        case 3://根据学号查找
            printf("请输入您要查找的学生学号:");
            scanf("%s",number);
            SearchNum(number,10);
            break;
		case 4://根据学号修改
            printf("请输入您要修改的学生信息:\n");
            ModifyStu();
            break;
		case 5://添加学生
            printf("请输入您要添加的学生信息:\n");
	        InsertStu();
            break;
        case 0://退出程序 
            printf("退出程序\n");
            printf("程序结束,谢谢使用!\n");
            exit(0);

        default:
            printf("您输入的菜单有误。请重新输入!\n");

        }
	}

  return 0;
}

void InputStu(STU stu[],int n){
	int i;
	for(i=0;i<n;i++){
		printf("输入的第%d个学生信息\n",i+1);
		printf("学号:");
		scanf("%s",stu[i].num);
		printf("姓名:");
		scanf("%s",stu[i].name);
		fflush(stdin);//清空键盘缓冲区,回车键enter被保留在键盘缓冲区,被第二个scanf接收,导致第二个scanf无法被输入。
		printf("性别:");
		scanf("%s",stu[i].sex);
		printf("英语成绩:");
		scanf("%f",&stu[i].grade1);
		printf("计算机成绩:");
		scanf("%f",&stu[i].grade2);
		printf("高数成绩:");
		scanf("%f",&stu[i].grade3);

	}
	lenth=n;
}

void PrintStu(){
	int i;
	printf("学号\t姓名\t性别\t英语\t计算机\t高数\t总分\t平均分\n");
	printf("------------------------------------------------------------\n");
	for(i=0;i<MAXSIZE;i++){
		if(strlen(stu[i].num)!=0){
            printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2lf\t%.2lf\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].grade1,stu[i].grade2,stu[i].grade3,stu[i].grade1+stu[i].grade2+stu[i].grade3,(stu[i].grade1+stu[i].grade2+stu[i].grade3)/3);
	
		}
	}
    printf("------------------------------------------------------------\n");
}

void SearchNum(char number[],int n){
    
	int i;
	int res=-1;
	for(i=0;i<MAXSIZE;i++){
		if(strcmp(stu[i].num,number)==0){
			res=i;
			break;
		}
	}

	if(res==-1){
		printf("没有此学生!");
	}
	else{
		printf("学号\t姓名\t性别\t英语\t计算机\t高数\t总分\t平均分\n");
	    printf("------------------------------------------------------------\n");
		printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2lf\t%.2lf\n",stu[res].num,stu[res].name,stu[res].sex,stu[res].grade1,stu[res].grade2,stu[res].grade3,stu[res].grade1+stu[res].grade2+stu[res].grade3,(stu[res].grade1+stu[res].grade2+stu[res].grade3)/3);
	    printf("------------------------------------------------------------\n");
	}

}

void ScanfStu(){

	printf("学号:");
	scanf("%s",stu1[0].num);
	printf("姓名:");
	scanf("%s",stu1[0].name);
	fflush(stdin);//清空键盘缓冲区,回车键enter被保留在键盘缓冲区,被第二个scanf接收,导致第二个scanf无法被输入。
	printf("性别:");
	scanf("%s",stu1[0].sex);
	printf("英语成绩:");
	scanf("%f",&stu1[0].grade1);
	printf("计算机成绩:");
	scanf("%f",&stu1[0].grade2);
	printf("高数成绩:");
	scanf("%f",&stu1[0].grade3);
}

void ModifyStu(){
		
	ScanfStu();

	int i;
	int res=-1;
	for(i=0;i<MAXSIZE;i++){
		if(strcmp(stu[i].num,stu1[0].num)==0){
			res=i;
			break;
		}
	}
	if(res==-1){
		printf("没有此学生!");
	}
	else{
		strcpy(stu[res].name,stu1[0].name);
		strcpy(stu[res].sex,stu1[0].sex);
		stu[res].grade1=stu1[0].grade1;
		stu[res].grade2=stu1[0].grade2;
		stu[res].grade3=stu1[0].grade3;

		PrintStu();
	}
     
}

void InsertStu(){

	ScanfStu();

	strcpy(stu[lenth].num,stu1[0].num);
	strcpy(stu[lenth].name,stu1[0].name);
	strcpy(stu[lenth].sex,stu1[0].sex);
	stu[lenth].grade1=stu1[0].grade1;
	stu[lenth].grade2=stu1[0].grade2;
	stu[lenth].grade3=stu1[0].grade3;

	PrintStu();
	lenth++;

}

测试

发布了19 篇原创文章 · 获赞 2 · 访问量 2197

猜你喜欢

转载自blog.csdn.net/xiaoyeren_ITRoad/article/details/104669031
今日推荐